Skip to content
This repository has been archived by the owner on Jan 9, 2019. It is now read-only.

Commit

Permalink
add FindThe Etherium contract + fixed addTX + saveState this game
Browse files Browse the repository at this point in the history
  • Loading branch information
Harzu committed Nov 30, 2017
1 parent 5206039 commit 1cd9db8
Show file tree
Hide file tree
Showing 8 changed files with 72 additions and 40 deletions.
8 changes: 1 addition & 7 deletions DApps/dicedapp_v2/bankroller.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@

//(function(){
window.MyDApp_debug = (function(){
var myDApp = new DCLib.DApp({
code : 'dicedapp_v2',
contract: {
contract_address: '0xCC71CA7F799781c096bd3ce6032eB504dA61AaC8',
contract_abi: JSON.parse('[{"constant":true,"inputs":[],"name":"rndMinNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalMoneySend","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"disputes","outputs":[{"name":"round","type":"uint256"},{"name":"disputeSeed","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refererReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"erc20Address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"sigseed","type":"bytes"}],"name":"closeDispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rndMaxNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"sigseed","type":"bytes"},{"name":"min","type":"uint256"},{"name":"max","type":"uint256"}],"name":"createRnd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"session","type":"uint256"},{"name":"round","type":"uint256"},{"name":"seed","type":"bytes32"},{"name":"gameData","type":"uint256[]"},{"name":"sig","type":"bytes"},{"name":"sigSeed","type":"bytes"}],"name":"updateGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalChannels","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"channels","outputs":[{"name":"player","type":"address"},{"name":"bankroller","type":"address"},{"name":"playerBalance","type":"uint256"},{"name":"bankrollBalance","type":"uint256"},{"name":"bankrollDeposit","type":"uint256"},{"name":"session","type":"uint256"},{"name":"endBlock","type":"uint256"},{"name":"round","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"bet","type":"uint256"},{"name":"eth","type":"uint256"}],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"player","type":"address"},{"name":"bankroller","type":"address"},{"name":"playerDeposit","type":"uint256"},{"name":"bankrollDeposit","type":"uint256"},{"name":"session","type":"uint256"},{"name":"time","type":"uint256"},{"name":"gameData","type":"uint256[]"},{"name":"sig","type":"bytes"}],"name":"openChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"h","type":"bytes32"},{"name":"signature","type":"bytes"}],"name":"recoverSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"gameDevReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"playerBalance","type":"uint256"},{"name":"bankrollBalance","type":"uint256"},{"name":"session","type":"uint256"},{"name":"close","type":"bool"},{"name":"sig","type":"bytes"}],"name":"closeByConsent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalMoneyPaids","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"playerBalance","type":"uint256"},{"name":"bankrollBalance","type":"uint256"},{"name":"session","type":"uint256"},{"name":"sig","type":"bytes"}],"name":"updateChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"refContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"developer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"round","type":"uint256"},{"name":"disputeSeed","type":"bytes32"},{"name":"gameData","type":"uint256[]"}],"name":"openDispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"}],"name":"closeByTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"signature","type":"bytes"}],"name":"signatureSplit","outputs":[{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"v","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"oldGameData","type":"uint256[]"},{"name":"newGameData","type":"uint256[]"}],"name":"checkGameData","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"bankrollReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"platformReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"action","type":"string"},{"indexed":false,"name":"id","type":"bytes32"},{"indexed":false,"name":"playerBalance","type":"uint256"},{"indexed":false,"name":"bankrollBalance","type":"uint256"},{"indexed":false,"name":"session","type":"uint256"}],"name":"logChannel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"action","type":"string"},{"indexed":false,"name":"id","type":"bytes32"},{"indexed":false,"name":"session","type":"uint256"},{"indexed":false,"name":"seed","type":"bytes32"}],"name":"logDispute","type":"event"}]')
}
})
var myDApp = new DCLib.DApp({code : 'dicedapp_v2'})

// Banroller side code
// console.log(myDApp)
Expand Down
8 changes: 1 addition & 7 deletions DApps/dicedapp_v2/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,7 @@

// Create our DApp
DCLib.on('ready', function(){
window.MyDApp = new DCLib.DApp({
code : 'dicedapp_v2',
contract: {
contract_address: '0xCC71CA7F799781c096bd3ce6032eB504dA61AaC8',
contract_abi: JSON.parse('[{"constant":true,"inputs":[],"name":"rndMinNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalMoneySend","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"disputes","outputs":[{"name":"round","type":"uint256"},{"name":"disputeSeed","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"refererReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"erc20Address","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"sigseed","type":"bytes"}],"name":"closeDispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rndMaxNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"sigseed","type":"bytes"},{"name":"min","type":"uint256"},{"name":"max","type":"uint256"}],"name":"createRnd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"session","type":"uint256"},{"name":"round","type":"uint256"},{"name":"seed","type":"bytes32"},{"name":"gameData","type":"uint256[]"},{"name":"sig","type":"bytes"},{"name":"sigSeed","type":"bytes"}],"name":"updateGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalChannels","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"channels","outputs":[{"name":"player","type":"address"},{"name":"bankroller","type":"address"},{"name":"playerBalance","type":"uint256"},{"name":"bankrollBalance","type":"uint256"},{"name":"bankrollDeposit","type":"uint256"},{"name":"session","type":"uint256"},{"name":"endBlock","type":"uint256"},{"name":"round","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"bet","type":"uint256"},{"name":"eth","type":"uint256"}],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"player","type":"address"},{"name":"bankroller","type":"address"},{"name":"playerDeposit","type":"uint256"},{"name":"bankrollDeposit","type":"uint256"},{"name":"session","type":"uint256"},{"name":"time","type":"uint256"},{"name":"gameData","type":"uint256[]"},{"name":"sig","type":"bytes"}],"name":"openChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"h","type":"bytes32"},{"name":"signature","type":"bytes"}],"name":"recoverSigner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"gameDevReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"playerBalance","type":"uint256"},{"name":"bankrollBalance","type":"uint256"},{"name":"session","type":"uint256"},{"name":"close","type":"bool"},{"name":"sig","type":"bytes"}],"name":"closeByConsent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalMoneyPaids","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"playerBalance","type":"uint256"},{"name":"bankrollBalance","type":"uint256"},{"name":"session","type":"uint256"},{"name":"sig","type":"bytes"}],"name":"updateChannel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"refContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"developer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"},{"name":"round","type":"uint256"},{"name":"disputeSeed","type":"bytes32"},{"name":"gameData","type":"uint256[]"}],"name":"openDispute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"id","type":"bytes32"}],"name":"closeByTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"signature","type":"bytes"}],"name":"signatureSplit","outputs":[{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"},{"name":"v","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"oldGameData","type":"uint256[]"},{"name":"newGameData","type":"uint256[]"}],"name":"checkGameData","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"bankrollReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"platformReward","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"action","type":"string"},{"indexed":false,"name":"id","type":"bytes32"},{"indexed":false,"name":"playerBalance","type":"uint256"},{"indexed":false,"name":"bankrollBalance","type":"uint256"},{"indexed":false,"name":"session","type":"uint256"}],"name":"logChannel","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"action","type":"string"},{"indexed":false,"name":"id","type":"bytes32"},{"indexed":false,"name":"session","type":"uint256"},{"indexed":false,"name":"seed","type":"bytes32"}],"name":"logDispute","type":"event"}]')
}
})
window.MyDApp = new DCLib.DApp({code : 'dicedapp_v2'})
})


Expand Down
2 changes: 1 addition & 1 deletion DApps/dicedapp_v2/lib/DC.js

Large diffs are not rendered by default.

Binary file modified DApps/example.zip
Binary file not shown.
82 changes: 62 additions & 20 deletions src/model/DApps/DApp.js
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,17 @@ export default class DApp {
this.logic = G.DAppsLogic[this.code]
this.hash = Utils.checksum( this.logic )
this.users = {}
this.contract_address = params.contract.contract_address
this.contract_abi = params.contract.contract_abi
this.sharedRoom = new Rtc( (_openkey || false) , 'dapp_room_'+this.hash )
this.sharedRoom = new Rtc( (_openkey || false) , 'dapp_room_'+this.hash )

if (params.contract) {
console.log('Your contract is add')
this.contract_address = params.contract.contract_address
this.contract_abi = params.contract.contract_abi
} else {
console.log('Standart payChannel contract is add')
this.contract_address = _config.contracts.paychannel.address
this.contract_abi = _config.contracts.paychannel.abi
}

console.groupCollapsed('DApp %c'+this.code+' %ccreated','color:orange','color:default')
console.info(' >>> Unique DApp logic checksum/hash would be used for connect to bankrollers:')
Expand Down Expand Up @@ -228,6 +236,12 @@ export default class DApp {
console.log('user room action close channel')
this._closeChannel(data)
}
if (data.action=='update_state') {
this._updateState(data)
}
if (data.action=='break_connect') {
this._breacConnetion(data)
}

// call user logic function
if (data.action=='call') {
Expand Down Expand Up @@ -266,20 +280,16 @@ export default class DApp {
}

PayChannel(){
if (this.PayChannelContract) return this.PayChannelContract
if (this.PayChannelContract ) return this.PayChannelContract

let pay_contract_abi = ''
let pay_contract_address = ''

if (this.contract_address && this.contract_abi) {
pay_contract_abi = this.contract_abi
if (typeof this.contract_address != 'undefined' && typeof this.contract_abi != 'undefined') {
pay_contract_abi = this.contract_abi
pay_contract_address = this.contract_address
} else {
pay_contract_abi = _config.contracts.paychannel.abi
pay_contract_address = _config.contracts.paychannel.address
}

console.log(pay_contract_address)
this.PayChannelContract = new web3.eth.Contract(pay_contract_abi, pay_contract_address)

return this.PayChannelContract
Expand All @@ -288,14 +298,16 @@ export default class DApp {
async _openChannel(params){
const response_room = this.users[params.user_id].room



console.log('_openChannel', params)

if (typeof params.open_args.gamedata === 'undefined') {
console.error('Error! game data not found')
}

const channel_id = params.open_args.channel_id
const player_address = params.user_id
const player_address = params.open_args.player_address
const bankroller_address = _openkey
const player_deposit = params.open_args.player_deposit
const bankroller_deposit = params.open_args.player_deposit*2
Expand All @@ -304,8 +316,9 @@ export default class DApp {
const ttl_blocks = params.open_args.ttl_blocks
const signed_args = params.open_args.signed_args
const paychannel = new paychannelLogic(parseInt(bankroller_deposit))
const approve = await ERC20approve(this.PayChannel().options.address, bankroller_deposit*1000)
const approve = await ERC20approve(this.PayChannel().options.address, bankroller_deposit*10000)

this.player_address = player_address
let rec_openkey = ''

game_data
Expand Down Expand Up @@ -348,10 +361,10 @@ export default class DApp {
console.log('https://ropsten.etherscan.io/tx/'+transactionHash)
console.log('⏳ wait receipt...')
})
// .on('error', err=>{
// console.warn('Open channel error', err)
// this.response(params, { error:'cant open channel', more:err }, response_room)
// })
.on('error', err=>{
console.warn('Open channel error', err)
this.response(params, { error:'cant open channel', more:err }, response_room)
})

console.log('open channel result', receipt)

Expand Down Expand Up @@ -432,19 +445,48 @@ export default class DApp {
console.log('https://ropsten.etherscan.io/tx/'+transactionHash)
console.log('⏳ wait receipt...')
})
// .on('error', err=>{
// console.warn('Close channel error', err)
// this.response(params, { error:'cant close channel', more:err }, response_room)
// })
.on('error', err=>{
console.warn('Close channel error', err)
this.response(params, { error:'cant close channel', more:err }, response_room)
})

console.log('Close channel receipt', receipt)
if (receipt.transactionHash) {
this.users[params.user_id].logic.payChannel.reset()
delete this.users[params.user_id].paychannel
}

this.response(params, { receipt:receipt }, response_room)
}

_updateState(params, callback=false) {

const response_room = this.users[params.update_args.player_address].room
const channel_id = params.update_args.channel_id
const player_address = params.update_args.player_address
const player_balance = params.update_args.player_balance
const bankroller_balance = params.update_args.bankroller_balance
const session = params.update_args.session
const signed_args = params.update_args.signed_args

const rec_openkey = web3.eth.accounts.recover( Utils.sha3(channel_id, player_balance, bankroller_balance, session), signed_args )


if (player_address!=rec_openkey) {
console.error('🚫 invalid sig on open channel', rec_openkey)
this.response(params, { error:'Invalid sig' }, response_room)
return
}


const signed_bankroller = Account.signHash(DCLib.Utils.sha3(channel_id, player_balance, bankroller_balance, session))

this.response(params, {signed_bankroller:signed_bankroller}, response_room)

}

_breakConnetion(params, callback=false) { console.log('player disconnected') }

// Send message and wait response
request(params, callback=false, Room=false){
if (!Room) {
Expand Down
5 changes: 1 addition & 4 deletions src/model/DApps/paychannel.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ export default class PayChannel {


getProfit(){
console.log('PayChannel::getProfit')
console.log('PayChannel::getProfit _profit')
return Utils.dec2bet(_profit)
}

Expand All @@ -93,9 +93,6 @@ export default class PayChannel {
_profit += p*1
balance.player_balance = deposit.player_deposit + _profit
balance.bankroller_balance = deposit.bankroller_deposit - _profit

console.log('@@@@@@@@@@@@@@@@@@@@@@', _profit, deposit.player_deposit, deposit.bankroller_deposit, balance.bankroller_balance)


_history.push({
profit : p,
Expand Down
6 changes: 5 additions & 1 deletion src/model/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ export const dec2bet = function(val, r=2){
}

export const bet2dec = function(val){
return val*100000000
let b = ''+(val*100000000)
if (b.indexOf('.')>-1) {
b = b.split('.')[0]*1
}
return b*1
}


Expand Down
1 change: 1 addition & 0 deletions src/registerServiceWorker.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

// In production, we register a service worker to serve assets from local cache.

// This lets the app load faster on subsequent visits in production, and gives
Expand Down

0 comments on commit 1cd9db8

Please sign in to comment.