1) User sends 1 ether to a address. 2) Contract makes coinflip = random(0 - 1), (if coinflip == 0 'bank wins'), (if coinflip = 1 2 ethers are sent to the user)
Should be very simple, but I don't know the syntax. Some help?
contract CoinFlip {
function CoinFlip() {
// nothing here
}
function() {
var bet = msg.value;
var flip = block.timestamp; // semirandom
if (flip % 2 == 0)
return;
else
msg.sender.send(2 * bet);
}
}
When you send money to CoinFlip, function() is called. Then we take the mined block timestamp as a semirandom source (the timestamp may not be fully random, I think, but it'd be hard to coerce miners to forge it) and either keep the money or pay two times the bet.
You will notice that this won't really fly without some initial amount in the bank. At the beginning you will lose even if you win .
Where the author, after having tried several approaches identifies someone who did better than him:
"It’s another contract invocation. The sender simply invokes his own contract. The malicious contract has access to the same context-variables from the block header (timestamp, difficulty etc). Then the contract simply invokes the casino contract. Pretty nice way to do it!"
--> the other contract know the timestamp and is able to deside whether ot not it has profit betting in your contract.
Comments
You will notice that this won't really fly without some initial amount in the bank. At the
beginning you will lose even if you win
Have fun!
a contract can be constructed to generate transactions to your contract only in situations where block.timestamp%2 == 0.
I think randomness is something which is not very well covered yet.
I refer to http://martin.swende.se/blog/Breaking_the_house.html
Where the author, after having tried several approaches identifies someone who did better than him:
"It’s another contract invocation. The sender simply invokes his own contract. The malicious contract has access to the same context-variables from the block header (timestamp, difficulty etc). Then the contract simply invokes the casino contract. Pretty nice way to do it!"
--> the other contract know the timestamp and is able to deside whether ot not it has profit betting in your contract.
be aware