- open new market
- allow bet
- someone bets (record them)
- market closes (by time)
condition to enter phase: time
- get data from oracle
- determine the result and record it
condition to end phase: time
condition to enter phase: time, someone triggers it
- someone stake their coin and challenges
condition to end phase: time
condition to enter phase: challenge phase completed
- anyone can stake their coin and vote
condition to end phase: time
condition to enter phase: time
- determine the final outcome
if (challenged)
update the final outcome according to voting results
distributed the staked coins in voting pool according to voting results.
distribute betting pool coins according to outcome
condition to end phase: when everything in the phase is executed
the time of the phase is indicated by block height. since we have finality, the phase start and stop block can be next to each other. in other ledger that lacks finality, we should reserve more time (several blocks) between each phase.
run
node app.js
test invocation:
it is possible to do test invocation using curl. however, you will need to supply signature yourself.
it is recommended to use test/testCommon.js complexSendTx(), which will handle the signature, public key (pubkey), and sequence.
for example of test invocation, please see test/testIntegrate2.js
if you need to if you need to send a transaction manually, you need to supply from.pubkey
, from.signature
, from.sequence
, and to
. the format is as follows.
curl -X POST http://localhost:3000/txs -d '{"type": "verifySig", "from": { "pubkey": "rewlkjrlw", "signature": "rewlkajrlewk", "sequence": 0 }, "to": {} }'
all of the tx will need from
and to
. however, for brevity purpose, they are omitted in the following calls:
curl -X POST http://localhost:3000/txs -d '{"type": "start", "marketId": "market2", "startInfo": ...}'
example startInfo:
"startInfo": {
"question": "Who will win FIFA 2018?",
"outcomes": [
"england",
"italy",
"brazil",
"germany"
],
"oracle": ["9x2yu6AzwWphm3j6h9pTaJh63h5ioG8RL","5wvwWgKP3Qfw1akQoXWg4NtKmzx5v4dTj"], // addresses of approved oracles
// meta data about oracle. eg. description
"oracleMeta": "http://data.com/oracleinfo",
"phaseTime":{
"marketStart":9,"marketEnd":3609,
"oracleStart":3610,"oracleEnd":7210,
"challengeStart":7211,"challengeEnd":10811,
"voteStart":10812,"voteEnd":14412,
"distributeStart":14413,"distributeEnd":18013
},
}
curl -X POST http://localhost:3000/txs -d '{"type": "bet", "marketId": "market2", "outcome": 1, "amount": 10, "user": "5wvwWgKP3Qfw1akQoXWg4NtKmzx5v4dTj"}'
curl -X POST http://localhost:3000/txs -d '{"type": "bet", "marketId": "market2", "outcome": 2, "amount": 10, "user": "9x2yu6AzwWphm3j6h9pTaJh63h5ioG8RL"}'
curl -X POST http://localhost:3000/txs -d '{"type": "oracle", "marketId": "market2", "outcome": 2}'
curl -X POST http://localhost:3000/txs -d '{"type": "challenge", "marketId": "market2", "user": "5wvwWgKP3Qfw1akQoXWg4NtKmzx5v4dTj", "amount": 100}'
curl -X POST http://localhost:3000/txs -d '{"type": "vote", "marketId": "market2", "user": "5wvwWgKP3Qfw1akQoXWg4NtKmzx5v4dTj", "amount": 1000, "outcome": 1}'
curl -X POST http://localhost:3000/txs -d '{"type": "vote", "marketId": "market2", "user": "9x2yu6AzwWphm3j6h9pTaJh63h5ioG8RL", "amount": 10, "outcome": 2}'
curl -X POST http://localhost:3000/txs -d '{"type": "vote", "marketId": "market2", "user": "9x2yu6AzwWphm3j6h9pTaJh63h5ioG8RL", "amount": 1000, "outcome": 1}'
curl -X POST http://localhost:3000/txs -d '{"type": "distribute", "marketId": "market2"}'
for example of sending token to another address, see test/testSend.js for example of tx format.