<Lucky 9> application
-
-
dapp name: Lucky 9
-
dApp description:
It's a simple poker game. It compares the sum of two cards
Suppose Banker's cards are [2, 9],
then the sum is (2 + 9) % 10 == 1.
Suppose Player's cards are [7, J],
then the sum is (7 + 0) % 10 == 7.
Due to 7 > 1, Player wins.
Card 10, J, Q, K are calculated as 0 -
online status: yes
-
dApp contract address:vite_61088b1d4d334271f0ead08a1eec17b08e7ef25141dd427787
-
dapp contract content:
pragma soliditypp ^0.4.2; contract ViteBet{ address owner; struct BetLimit { uint256 lowerLimit; uint256 upperLimit; uint256 tipPer; } tokenId[] tokens = ["tti_5649544520544f4b454e6e40"]; mapping(tokenId => BetLimit) public tokenMap; event cardnums(address indexed addr, uint256 betAmount, uint256 customerCard1, uint256 customerCard2, uint256 myCard1, uint256 myCard2); event win(address indexed addr, uint256 betAmount, uint256 customerCard1, uint256 customerCard2, uint256 myCard1, uint256 myCard2, uint256 winAmount); event lose(address indexed addr, uint256 betAmount, uint256 customerCard1, uint256 customerCard2, uint256 myCard1, uint256 myCard2); event draw(address indexed addr, uint256 betAmount, uint256 customerCard1, uint256 customerCard2, uint256 myCard1, uint256 myCard2); event suspendBet(address indexed addr, uint256 betAmount, uint256 customerCard1, uint256 customerCard2, uint256 myCard1, uint256 myCard2, uint256 winAmount); constructor() public { owner = msg.sender; tokenMap["tti_5649544520544f4b454e6e40"].lowerLimit = 1 vite; tokenMap["tti_5649544520544f4b454e6e40"].upperLimit = 1000 vite; tokenMap["tti_5649544520544f4b454e6e40"].tipPer = 10; } onMessage () payable { } // Configure the upper and lower limits of the token bet // Configure the draw ratio (0 to 20) onMessage configBetLimit(uint256 ll, uint256 ul, uint256 tp) { require(owner == msg.sender); require(ll > 0 && ll <= ul); require(tp >= 0 && tp <= 20); if (tokenMap[msg.tokenid].lowerLimit == 0){ tokens.push(msg.tokenid); } tokenMap[msg.tokenid].lowerLimit = ll; tokenMap[msg.tokenid].upperLimit = ul; tokenMap[msg.tokenid].tipPer = tp; } onMessage DrawMoney(uint256 amount) { require(owner == msg.sender); require(amount <= balance(msg.tokenid)); msg.sender.transfer(msg.tokenid, amount); } // Get the upper and lower limits of the token and the rate getter getBetLimit(tokenId token) returns(uint256 ll, uint256 ul, uint256 tipPer) { return (tokenMap[token].lowerLimit, tokenMap[token].upperLimit, tokenMap[token].tipPer); } // Get the token list getter getTokenList() returns(tokenId[] memory) { return tokens; } onMessage BetAndRoll() payable { uint256 betAmount = msg.amount; address betAddr = msg.sender; uint256 ll = tokenMap[msg.tokenid].lowerLimit; uint256 ul = tokenMap[msg.tokenid].upperLimit; require(ll > 0 && ll <= ul); require(betAmount >= ll && betAmount <= ul); uint256[4] memory cards = getCardsSum(); uint256 customerCardSum = (cards[0] + cards[1]) % 10; uint256 myCardSum = (cards[2] + cards[3]) % 10; emit cardnums(betAddr, betAmount, cards[0], cards[1], cards[2], cards[3]); if (customerCardSum > myCardSum) { // customer win uint256 winAmount = calcWinAmount(betAmount, msg.tokenid); if (winAmount > balance(msg.tokenid)) { // money is not enough betAddr.transfer(msg.tokenid, betAmount); // return back betAmount emit suspendBet(betAddr, betAmount, cards[0], cards[1], cards[2], cards[3], winAmount); } else { betAddr.transfer(msg.tokenid, winAmount); emit win(betAddr, betAmount, cards[0], cards[1], cards[2], cards[3], winAmount); } } else if (customerCardSum == myCardSum) { // draw betAddr.transfer(msg.tokenid, betAmount); // return back betAmount emit draw(betAddr, betAmount, cards[0], cards[1], cards[2], cards[3]); } else { // customer lose emit lose(betAddr, betAmount, cards[0], cards[1], cards[2], cards[3]); } } function getCardsSum() public returns(uint256[4] memory) { uint64 seed = random64(); uint256[4] memory cards = [uint256(0), uint256(0), uint256(0), uint256(0)]; for (uint i = 0; i < 4; i++) { uint16 card = uint16(seed >> i * 16); card = card % 13 + 1; if (card >= 10) { card = 0; } cards[i] = uint256(card); } return cards; } function calcWinAmount(uint256 betAmount, tokenId token) public view returns(uint256) { uint256 bonus = betAmount; return betAmount + bonus * (100 - tokenMap[token].tipPer) / 100; } }
-
-
Interesting