tx · HPB8uezNA4RVDkN8FsD38gqGBMzUy8ZvvBfMVLSCMWuW

3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX:  -0.05000000 Waves

2019.10.29 07:01 [740924] smart account 3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX > SELF 0.00000000 Waves

{ "type": 13, "id": "HPB8uezNA4RVDkN8FsD38gqGBMzUy8ZvvBfMVLSCMWuW", "fee": 5000000, "feeAssetId": null, "timestamp": 1572321661516, "version": 1, "sender": "3N2tusqAtDctK8iSTXS6F9rimmftmSuwLUX", "senderPublicKey": "ACfUG5PwG2GssMuyEwVEhkYAbbbP1geSHR8XoNxLyu6V", "proofs": [ "3z12uuUtqdrorPaZtWJfSZNCccg7uoGtcA3BAtNNUDagxs85SZSitjobomZGgu7BA5W4tJw3PB82RfL8SC4SifTq" ], "script": "base64:AAIDAAAAAAAAAAcIARIDCgEIAAAAHQAAAAAJUlNBUFVCTElDCQACWwAAAAECAAABj2Jhc2U2NDpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWc0ZEFSNlhiQkRBUzloci9FajNkSnY2RmZjNDY2eC9tT0dNV1UzbHJBQnMzcWE4QkhtdUpHbmtmYnBFZjJ2QXdZVE9XUHZ2emZNMTBPQmJmbG9TeXEzYzlNS3Z5VGUxbHVCTEdxVzR2WlVYSXl2U2d6MWxpeVVWZWZJUXkzZHlGOWpiZVRaYkMwYmJjVC83TzNERUwrMDF6NkErckRDYWNTWjBsR29sU1E2QW5oTHh6SWtWcE9RSmJyQm1DK3grWnVaUENNV3pKeW5kNWFlT243amFqL21rUlZ5eGU2Zy8wT2hXejROaWlaWGV1TVJCKzhtS3kwZldEL1VsSWxaV0hzQVMyWm1ya1hLcWpMcTAvMHdyOElMSmt6bmpTcWRuSTVJYmpnM3VRcmovNEFOK2k5cjI4YVE3My9aa1B0WTVTYncwQU9pQUJCdTdnSG1xOWF5VnhaUUlEQVFBQgAAAAAPR0FNRVNDT1VOVEVSS0VZAgAAAAkkR0FNRV9OVU0AAAAABFdCRVQBAAAAIA+bi6xab2gnOR9SbfiMgOxiQKrNdZOH+I5+YI04ouDJAAAAAAtGRUVXQVZFU0JFVAAAAAAAAAAABAAAAAAJRkVFTUNBRkVFAAAAAAAAAAACAAAAAAdXQVZFTEVUAAAAAAAF9eEAAAAAAA5TVEFURVNVQk1JVFRFRAIAAAAJU1VCTUlUVEVEAAAAAA1TVEFURUFDQ0VQVEVEAgAAAAhBQ0NFUFRFRAAAAAANU1RBVEVGSU5JU0hFRAIAAAAIRklOSVNIRUQAAAAADVNUQVRFQ0FOQ0VMRUQCAAAACENBTkNFTEVEAAAAAAdDT0lOUkVEAgAAAANSRUQAAAAACENPSU5CTFVFAgAAAARCTFVFAAAAAAtCRVRNSU5XQVZFUwkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAEFAAAAB1dBVkVMRVQAAAAAAAAAAAIAAAAACkJFVE1JTldCRVQJAABoAAAAAgAAAAAAAAAAZAUAAAAHV0FWRUxFVAAAAAAMSWR4R2FtZVN0YXRlAAAAAAAAAAAAAAAA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AAEJAABpAAAAAgUAAAALQkVUTUlOV0FWRVMFAAAAB1dBVkVMRVQJAABoAAAAAgkAAGgAAAACBQAAAAZhbW91bnQAAAAAAAAAAAIJAABpAAAAAgkAAGUAAAACAAAAAAAAAABkCQAAZAAAAAIFAAAAC0ZFRVdBVkVTQkVUBQAAAAlGRUVNQ0FGRUUAAAAAAAAAAGQAAAABAAAAAWkBAAAACHBsYXlDb2luAAAAAQAAAAZwYUNvaW4EAAAABmdhbWVJZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAApnYW1lSWRVc2VkCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzBQAAAAZnYW1lSWQEAAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAHcGF5bWVudAQAAAAKZmVlQXNzZXRJZAkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAFpAAAACmZlZUFzc2V0SWQDAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAA+wAAAABAQAAAAQTq9kzCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAARXQkVUBwkAAAIAAAABAgAAADFQYXltZW50IHNob3VsZCBiZSBpbiBXYmV0IG9yIFdhdmVzLiBHYW1lIGFib3J0ZWQuAwUAAAAKZmVlQXNzZXRJZAkAAAIAAAABAgAAADFUcmFuc2FjdGlvbidzIGZlZSBtdXN0IGJlIGluIFdhdmVzLiBHYW1lIGFib3J0ZWQuAwUAAAAKZ2FtZUlkVXNlZAkAAAIAAAABAgAAADFQYXNzZWQgZ2FtZUlkIGhhZCBiZWVuIHVzZWQgYmVmb3JlLiBHYW1lIGFib3J0ZWQuBAAAAApuZXdHYW1lTnVtCQEAAAAQSW5jcmVtZW50R2FtZU51bQAAAAAEAAAAD3BsYXllckFQdWJLZXk1OAkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAB3BheVR5cGUJAQAAAAtwYXltZW50VHlwZQAAAAEFAAAAB3BheW1lbnQEAAAABndpbkFtdAkBAAAAGlZhbGlkYXRlQmV0QW5kRGVmaW5lV2luQW10AAAAAwgFAAAAB3BheW1lbnQAAAAGYW1vdW50BQAAAAZwYUNvaW4FAAAAB3BheVR5cGUEAAAAC2dhbWVEYXRhU3RyCQEAAAARRm9ybWF0R2FtZURhdGFTdHIAAAAIBQAAAA5TVEFURVNVQk1JVFRFRAUAAAAGcGFDb2luBQAAAA9wbGF5ZXJBUHViS2V5NTgFAAAAB3BheVR5cGUIBQAAAAdwYXltZW50AAAABmFtb3VudAUAAAAGd2luQW10AgAAAAACAAAAAAkAAAIAAAABBQAAAAtnYW1lRGF0YVN0cgAAAADwmPPR", "chainId": 84, "height": 740924, "spentComplexity": 0 } View: original | compacted Prev: EoCkuPVCpYaq7u2F9FbKvidjBrVPjqH74RpZeTT313mA Next: FrUPKwuFKN7giTMsRpQaio9Fb9FxKbon8MPThsPpN561 Diff:
OldNewDifferences
114114 then (BETMINWAVES > amount)
115115 else false)
116116 then throw(("The minimum bet on Waves is " + toString((BETMINWAVES / WAVELET))))
117- else (((amount * 2) * WAVELET) * ((100 - (FEEWAVESBET + FEEMCAFEE)) / 100))
117+ else ((amount * 2) * ((100 - (FEEWAVESBET + FEEMCAFEE)) / 100))
118118
119119
120120 @Callable(i)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg4dAR6XbBDAS9hr/Ej3dJv6Ffc466x/mOGMWU3lrABs3qa8BHmuJGnkfbpEf2vAwYTOWPvvzfM10OBbfloSyq3c9MKvyTe1luBLGqW4vZUXIyvSgz1liyUVefIQy3dyF9jbeTZbC0bbcT/7O3DEL+01z6A+rDCacSZ0lGolSQ6AnhLxzIkVpOQJbrBmC+x+ZuZPCMWzJynd5aeOn7jaj/mkRVyxe6g/0OhWz4NiiZXeuMRB+8mKy0fWD/UlIlZWHsAS2ZmrkXKqjLq0/0wr8ILJkznjSqdnI5Ibjg3uQrj/4AN+i9r28aQ73/ZkPtY5Sbw0AOiABBu7gHmq9ayVxZQIDAQAB")
55
66 let GAMESCOUNTERKEY = "$GAME_NUM"
77
88 let WBET = base58'23vgV9p9pD83A7CFbsDEc4zjanep7UeFo4ZRS6oGorhv'
99
1010 let FEEWAVESBET = 4
1111
1212 let FEEMCAFEE = 2
1313
1414 let WAVELET = 100000000
1515
1616 let STATESUBMITTED = "SUBMITTED"
1717
1818 let STATEACCEPTED = "ACCEPTED"
1919
2020 let STATEFINISHED = "FINISHED"
2121
2222 let STATECANCELED = "CANCELED"
2323
2424 let COINRED = "RED"
2525
2626 let COINBLUE = "BLUE"
2727
2828 let BETMINWAVES = ((1 * WAVELET) / 2)
2929
3030 let BETMINWBET = (100 * WAVELET)
3131
3232 let IdxGameState = 0
3333
3434 let IdxPlayerACoin = 1
3535
3636 let IdxPlayerAPubKey58 = 2
3737
3838 let IdxPayType = 3
3939
4040 let IdxPayAmt = 4
4141
4242 let IdxWinAmt = 5
4343
4444 let IdxPlayerBCoin = 6
4545
4646 let IdxPlayerBPubKey58 = 7
4747
4848 func IncrementGameNum () = {
4949 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
5050 case num: Int =>
5151 num
5252 case _ =>
5353 0
5454 }
5555 (gameNum + 1)
5656 }
5757
5858
5959 func generateNumber (inv,max,min) = {
6060 let lastPlay = match getBinary(this, "lastPlay") {
6161 case s: ByteVector =>
6262 s
6363 case a: Unit =>
6464 base58'2ee4oFDYriWJ9EMeR'
6565 case _ =>
6666 throw()
6767 }
6868 let rand = (((((lastPlay + inv.transactionId) + inv.callerPublicKey) + lastBlock.generationSignature) + toBytes(lastBlock.timestamp)) + toBytes(lastBlock.height))
6969 (((toInt(sha256(rand)) % 1000) % ((max - min) + 1)) + 1)
7070 }
7171
7272
7373 func paymentType (payment) = if ((payment.assetId == WBET))
7474 then "WBET"
7575 else "WAVES"
7676
7777
7878 func tokenType (token) = if ((token == "WBET"))
7979 then WBET
8080 else unit
8181
8282
8383 func FormatGameDataParam (p) = {
8484 let s = size(p)
8585 if ((s == 0))
8686 then throw("Parameter size must be greater then 0")
8787 else if ((s > 99))
8888 then throw("Parameter size must be less then 100")
8989 else if ((10 > s))
9090 then (("0" + toString(s)) + p)
9191 else (toString(s) + p)
9292 }
9393
9494
9595 func FormatGameDataStr (gameState,playerACoin,playerAPubKey58,payType,payAmount,winAmt,playerBCoin,playerBPubKey58) = {
9696 let fullStateStr = ((((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerACoin)) + "_") + FormatGameDataParam(playerAPubKey58)) + "_") + FormatGameDataParam(payType)) + "_") + FormatGameDataParam(toString(payAmount))) + "_") + FormatGameDataParam(toString(winAmt)))
9797 if (if ((playerBCoin == ""))
9898 then true
9999 else (playerBPubKey58 == ""))
100100 then fullStateStr
101101 else ((((fullStateStr + "_") + FormatGameDataParam(playerBCoin)) + "_") + FormatGameDataParam(playerBPubKey58))
102102 }
103103
104104
105105 func ValidateBetAndDefineWinAmt (amount,playerCoin,paymentType) = if (if ((playerCoin != COINRED))
106106 then (playerCoin != COINBLUE)
107107 else false)
108108 then throw("Invalid play, change your bet to RED or BLUE coin. Game aborted.")
109109 else if (if ((paymentType == "WBET"))
110110 then (BETMINWBET > amount)
111111 else false)
112112 then throw(("The minimum bet on Wbet is " + toString((BETMINWBET / WAVELET))))
113113 else if (if ((paymentType == "WAVES"))
114114 then (BETMINWAVES > amount)
115115 else false)
116116 then throw(("The minimum bet on Waves is " + toString((BETMINWAVES / WAVELET))))
117- else (((amount * 2) * WAVELET) * ((100 - (FEEWAVESBET + FEEMCAFEE)) / 100))
117+ else ((amount * 2) * ((100 - (FEEWAVESBET + FEEMCAFEE)) / 100))
118118
119119
120120 @Callable(i)
121121 func playCoin (paCoin) = {
122122 let gameId = toBase58String(i.transactionId)
123123 let gameIdUsed = isDefined(getString(this, gameId))
124124 let payment = extract(i.payment)
125125 let feeAssetId = isDefined(i.feeAssetId)
126126 if (if ((payment.assetId != assetInfo(base58'WAVES')))
127127 then (payment.assetId != WBET)
128128 else false)
129129 then throw("Payment should be in Wbet or Waves. Game aborted.")
130130 else if (feeAssetId)
131131 then throw("Transaction's fee must be in Waves. Game aborted.")
132132 else if (gameIdUsed)
133133 then throw("Passed gameId had been used before. Game aborted.")
134134 else {
135135 let newGameNum = IncrementGameNum()
136136 let playerAPubKey58 = toBase58String(i.callerPublicKey)
137137 let payType = paymentType(payment)
138138 let winAmt = ValidateBetAndDefineWinAmt(payment.amount, paCoin, payType)
139139 let gameDataStr = FormatGameDataStr(STATESUBMITTED, paCoin, playerAPubKey58, payType, payment.amount, winAmt, "", "")
140140 throw(gameDataStr)
141141 }
142142 }
143143
144144

github/deemru/w8io/873ac7e 
27.80 ms