tx · ANeFp91PdUNosbtwv4V6iWo5tNfJV3EokgDS1erdHVSM

3P5bczozZttGuLUPJfz25bE8HtzXHtWnzYv:  -0.01500000 Waves

2020.05.04 11:56 [2046351] smart account 3P5bczozZttGuLUPJfz25bE8HtzXHtWnzYv > SELF 0.00000000 Waves

{ "type": 13, "id": "ANeFp91PdUNosbtwv4V6iWo5tNfJV3EokgDS1erdHVSM", "fee": 1500000, "feeAssetId": null, "timestamp": 1588582646216, "version": 1, "sender": "3P5bczozZttGuLUPJfz25bE8HtzXHtWnzYv", "senderPublicKey": "CQxNnWynVxPVdzu1ghpBPceE5nVQzsngc4uYy6PgKD6a", "proofs": [ "2pjNb1qT7sncf3Y774yBXPENyNkm5DTxsjMdMLy81SkBb1ycxbBCNDVxrKCTvvmcpJokhsdPCnJamSRCUB4cK2v4" ], "script": "base64:AAIDAAAAAAAAAA0IARIDCgEIEgQKAggCAAAAKQAAAAAJUlNBUFVCTElDCQACWwAAAAECAAABj2Jhc2U2NDpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWxlbXI5NUoxalpVczdjSm1ybW1sTjR6bzdZVnNCSnpJZUpkazhMREZHaFVLU0k2eWZzMjBaeUplMjErNkdKd05uS1VVMVV5b2MxN3dTV01La3JaME1NdllFK1o1QWlpanZCSzRzU0ozSWdHamRVOC9OaEk4Q0JEdTBGK3hSTTlxM1RCM0xMYkR5NXNCZHVkWWZIZnNVT2MrTVR2QUQ2OW4yN2RiMlJoOCt5WlFNdHVia3VUUU5wODlzcGhIUWFMR3lRRmFObEsvTmEzbEZ4Nm9tcXphYTFnam9wbFVyNnJ2WUtnZkFJQ1VCM3pWbUpTaGlFaTd3N1IwaFdsTlJEM3FjWmpDVU9OU3BGbzRXYnprbkdPYXp3ODRCK0lNSUZuSXBYV3pRTDhSWDB2TmNmc0J2TERmTTZrMlphY3F3eU1LYUxMcWlnZEJpR2RKN1crMGxPU3RPUUlEQVFBQgAAAAAGU0VSVkVSCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNQTVQ5d3VuN0JCN0pBQlN1aFRKcEZnSm9lZ1JmWXcyZTZkAAAAABNSQU5ET1JBQ0xFVElNRUZSQU1FAAAAAAAAABwgAAAAAARCRVQxAAAAAAAAAAABAAAAAARCRVQyAAAAAAAAAAACAAAAAARCRVQ0AAAAAAAAAAAEAAAAAARCRVQ4AAAAAAAAAAAIAAAAAAVCRVQxNAAAAAAAAAAADgAAAAAEQkVUUwkABEwAAAACBQAAAARCRVQxCQAETAAAAAIFAAAABEJFVDIJAARMAAAAAgUAAAAEQkVUNAkABEwAAAACBQAAAARCRVQ4CQAETAAAAAIFAAAABUJFVDE0BQAAAANuaWwAAAAABldBVkVTRAAAAAAABfXhAAAAAAAFVVNETkQAAAAAAAAPQkAAAAAACERFQ0lNQUxTCQAETAAAAAIFAAAABldBVkVTRAkABEwAAAACBQAAAAVVU0RORAUAAAADbmlsAAAAAAZBU1NFVFMJAARMAAAAAgUAAAAEdW5pdAkABEwA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YW1lRGF0YQAAAAEAAAAGZ2FtZUlkCQAEtQAAAAIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAA3N0cgUAAAAHJG1hdGNoMAUAAAADc3RyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAZHYW1lOiAFAAAABmdhbWVJZAIAAAALIG5vdCBmb3VuZC4CAAAAAV8BAAAADHdpblNjcmlwdFNldAAAAAcAAAAGZ2FtZUlkAAAADXBsYXllckFkZHJlc3MAAAAJd2luQW1vdW50AAAAB2Fzc2V0SWQAAAAObmV3R2FtZURhdGFTdHIAAAAMd2luQnlUaW1lb3V0AAAAEWRlY3JlYXNlZFJlc2VydmVzBAAAAA53U2V0Q29tbW9uRGF0YQkABEwAAAACBQAAABFkZWNyZWFzZWRSZXNlcnZlcwUAAAADbmlsBAAAAA50U2V0Q29tbW9uRGF0YQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAA1wbGF5ZXJBZGRyZXNzBQAAAAl3aW5BbW91bnQJAAGRAAAAAgUAAAAGQVNTRVRTBQAAAAdhc3NldElkBQAAAANuaWwDBQAAAAx3aW5CeVRpbWVvdXQEAAAAFm5ld0dhbWVEYXRhU3RyQWRqdXN0ZWQJAAEsAAAAAgUAAAAObmV3R2FtZURhdGFTdHICAAAACF9USU1FT1VUBAAAAAhnYW1lRGF0YQkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAWbmV3R2FtZURhdGFTdHJBZGp1c3RlZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgUAAAAIZ2FtZURhdGEFAAAADndTZXRDb21tb25EYXRhCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAA50U2V0Q29tbW9uRGF0YQQAAAAIZ2FtZURhdGEJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAhnYW1lRGF0YQUAAAAOd1NldENvbW1vbkRhdGEJAQAAAAtUcmFuc2ZlclNldAAAAAEFAAAADnRTZXRDb21tb25EYXRhAAAAAgAAAAFpAQAAAANiZXQAAAABAAAADHBsYXllckNob2ljZQQAAAAGZ2FtZUlkCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQDCQAAAAAAAAIIBQAAAAFpAAAAB3BheW1lbnQFAAAABHVuaXQJAAACAAAAAQIAAAAKTm8gcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCQAEHQAAAAIFAAAABHRoaXMFAAAABmdhbWVJZAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAJQmV0IGZvcjogBQAAAAZnYW1lSWQCAAAAEiB3YXMgYWxyZWFkeSBtYWRlLgQAAAABcAkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAAdwYXltZW50BAAAAAdhc3NldElkCQEAAAAVdmFsaWRhdGVBbmRHZXRBc3NldElkAAAAAQgFAAAAAXAAAAAHYXNzZXRJZAQAAAAKY29tbWlzc2lvbgkBAAAADWdldENvbW1pc3Npb24AAAABBQAAAAdhc3NldElkBAAAAAl3aW5BbW91bnQJAQAAABp2YWxpZGF0ZUJldEFuZEdldFdpbkFtb3VudAAAAAMIBQAAAAFwAAAABmFtb3VudAUAAAAHYXNzZXRJZAUAAAAMcGxheWVyQ2hvaWNlBAAAAAh0eElkVXNlZAkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkBAAAAA5wbGF5ZXJQdWJLZXk1OAkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAC2dhbWVEYXRhU3RyCQEAAAAOZm9ybWF0R2FtZURhdGEAAAAHBQAAAA5TVEFURVNVQk1JVFRFRAUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAAGaGVpZ2h0BQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQCAAAAAAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkFAAAAB2Fzc2V0SWQJAQAAABVpbmNyZWFzZVJlc2VydmVBbW91bnQAAAACBQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAADGluY3JlbWVudEludAAAAAEFAAAAD0dBTUVTQ09VTlRFUktFWQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAAtnYW1lRGF0YVN0cgUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAABlNFUlZFUgUAAAAKY29tbWlzc2lvbgUAAAAEdW5pdAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAgAAAAZnYW1lSWQAAAAHcnNhU2lnbgQAAAAIZ2FtZURhdGEJAQAAAA9leHRyYWN0R2FtZURhdGEAAAABBQAAAAZnYW1lSWQEAAAACWdhbWVTdGF0ZQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAMSWR4R2FtZVN0YXRlBAAAAAxwbGF5ZXJDaG9pY2UJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAD0lkeFBsYXllckNob2ljZQQAAAANc3RhcnRlZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAABBJZHhTdGFydGVkSGVpZ2h0BAAAAAl3aW5BbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAMSWR4V2luQW1vdW50BAAAAAdhc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAACklkeEFzc2V0SWQEAAAADnBsYXllclB1YktleTU4CQABkQAAAAIFAAAACGdhbWVEYXRhBQAAABFJZHhQbGF5ZXJQdWJLZXk1OAQAAAANcGxheWVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABBQAAAA5wbGF5ZXJQdWJLZXk1OAQAAAAMd2luQnlUaW1lb3V0CQAAZgAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAA1zdGFydGVkSGVpZ2h0BQAAABNSQU5ET1JBQ0xFVElNRUZSQU1FBAAAABFkZWNyZWFzZWRSZXNlcnZlcwkBAAAAFmRlY3JlYXNlUmVzZXJ2ZWRBbW91bnQAAAADBQAAAAZnYW1lSWQFAAAAB2Fzc2V0SWQFAAAACXdpbkFtb3VudAMJAQAAAAIhPQAAAAIFAAAACWdhbWVTdGF0ZQUAAAAOU1RBVEVTVUJNSVRURUQJAAACAAAAAQIAAAAkSW52YWxpZCBnYW1lIHN0YXRlIGZvciBwYXNzZWQgZ2FtZUlkAwUAAAAMd2luQnlUaW1lb3V0BAAAAAdyYW5kU3RyCQABLwAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAQQAAAAObmV3R2FtZURhdGFTdHIJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAAB3JhbmRTdHIJAQAAAAx3aW5TY3JpcHRTZXQAAAAHBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAACXdpbkFtb3VudAUAAAAHYXNzZXRJZAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAAB3JhbmRTdHIJAQAAAA9nZW5lcmF0ZVJhbmRJbnQAAAACBQAAAAZnYW1lSWQFAAAAB3JzYVNpZ24DCQEAAAALaXNQbGF5ZXJXaW4AAAACBQAAAAxwbGF5ZXJDaG9pY2UFAAAAB3JhbmRTdHIEAAAADm5ld0dhbWVEYXRhU3RyCQEAAAAOZm9ybWF0R2FtZURhdGEAAAAHBQAAAAhTVEFURVdPTgUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAJd2luQW1vdW50BQAAAAdhc3NldElkBQAAAAdyYW5kU3RyCQEAAAAMd2luU2NyaXB0U2V0AAAABwUAAAAGZ2FtZUlkBQAAAA1wbGF5ZXJBZGRyZXNzBQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAADm5ld0dhbWVEYXRhU3RyBQAAAAx3aW5CeVRpbWVvdXQFAAAAEWRlY3JlYXNlZFJlc2VydmVzBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAADmZvcm1hdEdhbWVEYXRhAAAABwUAAAAJU1RBVEVMT1NUBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAl3aW5BbW91bnQFAAAAB2Fzc2V0SWQFAAAAB3JhbmRTdHIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAABmdhbWVJZAUAAAAObmV3R2FtZURhdGFTdHIJAARMAAAAAgUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMFAAAAA25pbAAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAADCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQQAAAAHJG1hdGNoMAUAAAACdHgDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE1RyYW5zZmVyVHJhbnNhY3Rpb24EAAAAA3R0eAUAAAAHJG1hdGNoMAQAAAAHYXNzZXRJZAkBAAAAFXZhbGlkYXRlQW5kR2V0QXNzZXRJZAAAAAEIBQAAAAN0dHgAAAAHYXNzZXRJZAkAAGcAAAACCQAAZQAAAAIJAAPrAAAAAgUAAAAEdGhpcwgFAAAAA3R0eAAAAAdhc3NldElkCAUAAAADdHR4AAAABmFtb3VudAkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAAHYXNzZXRJZAAAAAAAAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAA3N0eAUAAAAHJG1hdGNoMAMJAAAAAAAAAgkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAACCQEAAAAIZ2V0SW50T3IAAAACCQABkQAAAAIFAAAADlJFU0VSVkFUSU9OS0VZAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAABwcH1z35fw==", "chainId": 87, "height": 2046351, "spentComplexity": 0 } View: original | compacted Prev: 2pUdMuhHHC5kL1vq5CFtJbzu9ivD69vTmwu3VnVUjwXs Next: EWeMevSEZ2G82tthpPPmBKEKtyubWNKDcHJNjWxhwhp9 Diff:
OldNewDifferences
7474
7575 func increaseReserveAmount (winAmount,assetId) = {
7676 let newReservedAmount = (getIntOr(RESERVATIONKEY[assetId], 0) + winAmount)
77- if ((newReservedAmount > wavesBalance(this)))
77+ if ((newReservedAmount > assetBalance(this, ASSETS[assetId])))
7878 then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.")
7979 else newReservedAmount
8080 }
100100 else (betAmount == ((x * DECIMALS[assetId]) + commission))
101101
102102 if (!({
103- let $list44394472 = BETS
104- let $size44394472 = size($list44394472)
105- let $acc044394472 = false
106- if (($size44394472 == 0))
107- then $acc044394472
103+ let $list47844817 = BETS
104+ let $size47844817 = size($list47844817)
105+ let $acc047844817 = false
106+ if (($size47844817 == 0))
107+ then $acc047844817
108108 else {
109- let $acc144394472 = checkAmount($acc044394472, $list44394472[0])
110- if (($size44394472 == 1))
111- then $acc144394472
109+ let $acc147844817 = checkAmount($acc047844817, $list47844817[0])
110+ if (($size47844817 == 1))
111+ then $acc147844817
112112 else {
113- let $acc244394472 = checkAmount($acc144394472, $list44394472[1])
114- if (($size44394472 == 2))
115- then $acc244394472
113+ let $acc247844817 = checkAmount($acc147844817, $list47844817[1])
114+ if (($size47844817 == 2))
115+ then $acc247844817
116116 else {
117- let $acc344394472 = checkAmount($acc244394472, $list44394472[2])
118- if (($size44394472 == 3))
119- then $acc344394472
117+ let $acc347844817 = checkAmount($acc247844817, $list47844817[2])
118+ if (($size47844817 == 3))
119+ then $acc347844817
120120 else {
121- let $acc444394472 = checkAmount($acc344394472, $list44394472[3])
122- if (($size44394472 == 4))
123- then $acc444394472
121+ let $acc447844817 = checkAmount($acc347844817, $list47844817[3])
122+ if (($size47844817 == 4))
123+ then $acc447844817
124124 else {
125- let $acc544394472 = checkAmount($acc444394472, $list44394472[4])
126- if (($size44394472 == 5))
127- then $acc544394472
125+ let $acc547844817 = checkAmount($acc447844817, $list47844817[4])
126+ if (($size47844817 == 5))
127+ then $acc547844817
128128 else {
129- let $acc644394472 = checkAmount($acc544394472, $list44394472[5])
129+ let $acc647844817 = checkAmount($acc547844817, $list47844817[5])
130130 throw("List size exceed 5")
131131 }
132132 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlemr95J1jZUs7cJmrmmlN4zo7YVsBJzIeJdk8LDFGhUKSI6yfs20ZyJe21+6GJwNnKUU1Uyoc17wSWMKkrZ0MMvYE+Z5AiijvBK4sSJ3IgGjdU8/NhI8CBDu0F+xRM9q3TB3LLbDy5sBdudYfHfsUOc+MTvAD69n27db2Rh8+yZQMtubkuTQNp89sphHQaLGyQFaNlK/Na3lFx6omqzaa1gjoplUr6rvYKgfAICUB3zVmJShiEi7w7R0hWlNRD3qcZjCUONSpFo4WbzknGOazw84B+IMIFnIpXWzQL8RX0vNcfsBvLDfM6k2ZacqwyMKaLLqigdBiGdJ7W+0lOStOQIDAQAB")
55
66 let SERVER = addressFromStringValue("3PMT9wun7BB7JABSuhTJpFgJoegRfYw2e6d")
77
88 let RANDORACLETIMEFRAME = 7200
99
1010 let BET1 = 1
1111
1212 let BET2 = 2
1313
1414 let BET4 = 4
1515
1616 let BET8 = 8
1717
1818 let BET14 = 14
1919
2020 let BETS = [BET1, BET2, BET4, BET8, BET14]
2121
2222 let WAVESD = 100000000
2323
2424 let USDND = 1000000
2525
2626 let DECIMALS = [WAVESD, USDND]
2727
2828 let ASSETS = [unit, fromBase58String("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")]
2929
3030 let COMMISSION = [((5 * WAVESD) / 1000), (((5 * USDND) / 1000) * 10)]
3131
3232 func getCommission (assetId) = COMMISSION[assetId]
3333
3434
3535 let RATEMULT = 10000
3636
3737 let RATE = 19000
3838
3939 let IdxGameState = 0
4040
4141 let IdxPlayerChoice = 1
4242
4343 let IdxPlayerPubKey58 = 2
4444
4545 let IdxStartedHeight = 3
4646
4747 let IdxWinAmount = 4
4848
4949 let IdxAssetId = 5
5050
5151 let RESERVATIONKEY = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN"]
5252
5353 let GAMESCOUNTERKEY = "$GAME_NUM"
5454
5555 let STATESUBMITTED = "SUBMITTED"
5656
5757 let STATEWON = "WON"
5858
5959 let STATELOST = "LOST"
6060
6161 func getIntOr (key,default) = if (isDefined(getInteger(this, key)))
6262 then getIntegerValue(this, key)
6363 else default
6464
6565
6666 func setInt (key,value) = DataEntry(key, value)
6767
6868
6969 func incrementInt (key) = setInt(key, (getIntOr(key, -1) + 1))
7070
7171
7272 func changeInt (key,by) = setInt(key, (getIntOr(key, 0) + by))
7373
7474
7575 func increaseReserveAmount (winAmount,assetId) = {
7676 let newReservedAmount = (getIntOr(RESERVATIONKEY[assetId], 0) + winAmount)
77- if ((newReservedAmount > wavesBalance(this)))
77+ if ((newReservedAmount > assetBalance(this, ASSETS[assetId])))
7878 then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.")
7979 else newReservedAmount
8080 }
8181
8282
8383 func decreaseReservedAmount (gameId,assetId,winAmount) = if ((0 > (getIntOr(RESERVATIONKEY[assetId], 0) - winAmount)))
8484 then throw("Invalid Dice Roller account state - reserved amount is less than 0")
8585 else changeInt(RESERVATIONKEY[assetId], -(winAmount))
8686
8787
8888 func validateAndGetAssetId (assetId) = if ((assetId == ASSETS[0]))
8989 then 0
9090 else if ((assetId == ASSETS[1]))
9191 then 1
9292 else throw("Invalid payment asset")
9393
9494
9595 func validateBetAndGetWinAmount (betAmount,assetId,playerChoice) = {
9696 let dicesCount = size(playerChoice)
9797 let commission = getCommission(assetId)
9898 func checkAmount (a,x) = if (a)
9999 then true
100100 else (betAmount == ((x * DECIMALS[assetId]) + commission))
101101
102102 if (!({
103- let $list44394472 = BETS
104- let $size44394472 = size($list44394472)
105- let $acc044394472 = false
106- if (($size44394472 == 0))
107- then $acc044394472
103+ let $list47844817 = BETS
104+ let $size47844817 = size($list47844817)
105+ let $acc047844817 = false
106+ if (($size47844817 == 0))
107+ then $acc047844817
108108 else {
109- let $acc144394472 = checkAmount($acc044394472, $list44394472[0])
110- if (($size44394472 == 1))
111- then $acc144394472
109+ let $acc147844817 = checkAmount($acc047844817, $list47844817[0])
110+ if (($size47844817 == 1))
111+ then $acc147844817
112112 else {
113- let $acc244394472 = checkAmount($acc144394472, $list44394472[1])
114- if (($size44394472 == 2))
115- then $acc244394472
113+ let $acc247844817 = checkAmount($acc147844817, $list47844817[1])
114+ if (($size47844817 == 2))
115+ then $acc247844817
116116 else {
117- let $acc344394472 = checkAmount($acc244394472, $list44394472[2])
118- if (($size44394472 == 3))
119- then $acc344394472
117+ let $acc347844817 = checkAmount($acc247844817, $list47844817[2])
118+ if (($size47844817 == 3))
119+ then $acc347844817
120120 else {
121- let $acc444394472 = checkAmount($acc344394472, $list44394472[3])
122- if (($size44394472 == 4))
123- then $acc444394472
121+ let $acc447844817 = checkAmount($acc347844817, $list47844817[3])
122+ if (($size47844817 == 4))
123+ then $acc447844817
124124 else {
125- let $acc544394472 = checkAmount($acc444394472, $list44394472[4])
126- if (($size44394472 == 5))
127- then $acc544394472
125+ let $acc547844817 = checkAmount($acc447844817, $list47844817[4])
126+ if (($size47844817 == 5))
127+ then $acc547844817
128128 else {
129- let $acc644394472 = checkAmount($acc544394472, $list44394472[5])
129+ let $acc647844817 = checkAmount($acc547844817, $list47844817[5])
130130 throw("List size exceed 5")
131131 }
132132 }
133133 }
134134 }
135135 }
136136 }
137137 }))
138138 then throw("Bet amount is not valid")
139139 else if ((parseInt(playerChoice) == unit))
140140 then throw("Invalid player's choice")
141141 else if ((dicesCount != 1))
142142 then throw("Invalid length of player's choice")
143143 else {
144144 let bet = (betAmount - commission)
145145 ((bet * RATE) / RATEMULT)
146146 }
147147 }
148148
149149
150150 func generateRandInt (gameId,rsaSign) = {
151151 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
152152 if (!(rsaSigValid))
153153 then throw("Invalid RSA signature")
154154 else {
155155 let rand = (toInt(sha256(rsaSign)) % 2)
156156 let result = if ((0 > rand))
157157 then (-1 * rand)
158158 else rand
159159 toString(result)
160160 }
161161 }
162162
163163
164164 func isPlayerWin (playerChoice,randStr) = {
165165 let s = size(playerChoice)
166166 if ((s == 1))
167167 then (playerChoice == randStr)
168168 else false
169169 }
170170
171171
172172 func formatGameData (gameState,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = (((((((((((gameState + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(startedHeight)) + "_") + toString(winAmount)) + "_") + toString(assetId)) + (if ((randOrEmpty == ""))
173173 then ""
174174 else ("_" + randOrEmpty)))
175175
176176
177177 func extractGameData (gameId) = split(match getString(this, gameId) {
178178 case str: String =>
179179 str
180180 case _ =>
181181 throw((("Game: " + gameId) + " not found."))
182182 }, "_")
183183
184184
185185 func winScriptSet (gameId,playerAddress,winAmount,assetId,newGameDataStr,winByTimeout,decreasedReserves) = {
186186 let wSetCommonData = [decreasedReserves]
187187 let tSetCommonData = [ScriptTransfer(playerAddress, winAmount, ASSETS[assetId])]
188188 if (winByTimeout)
189189 then {
190190 let newGameDataStrAdjusted = (newGameDataStr + "_TIMEOUT")
191191 let gameData = DataEntry(gameId, newGameDataStrAdjusted)
192192 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
193193 }
194194 else {
195195 let gameData = DataEntry(gameId, newGameDataStr)
196196 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
197197 }
198198 }
199199
200200
201201 @Callable(i)
202202 func bet (playerChoice) = {
203203 let gameId = toBase58String(i.transactionId)
204204 if ((i.payment == unit))
205205 then throw("No payment")
206206 else if (isDefined(getString(this, gameId)))
207207 then throw((("Bet for: " + gameId) + " was already made."))
208208 else {
209209 let p = extract(i.payment)
210210 let assetId = validateAndGetAssetId(p.assetId)
211211 let commission = getCommission(assetId)
212212 let winAmount = validateBetAndGetWinAmount(p.amount, assetId, playerChoice)
213213 let txIdUsed = isDefined(getString(this, gameId))
214214 let playerPubKey58 = toBase58String(i.callerPublicKey)
215215 let gameDataStr = formatGameData(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmount, assetId, "")
216216 ScriptResult(WriteSet([DataEntry(RESERVATIONKEY[assetId], increaseReserveAmount(winAmount, assetId)), incrementInt(GAMESCOUNTERKEY), DataEntry(gameId, gameDataStr)]), TransferSet([ScriptTransfer(SERVER, commission, unit)]))
217217 }
218218 }
219219
220220
221221
222222 @Callable(i)
223223 func withdraw (gameId,rsaSign) = {
224224 let gameData = extractGameData(gameId)
225225 let gameState = gameData[IdxGameState]
226226 let playerChoice = gameData[IdxPlayerChoice]
227227 let startedHeight = parseIntValue(gameData[IdxStartedHeight])
228228 let winAmount = parseIntValue(gameData[IdxWinAmount])
229229 let assetId = parseIntValue(gameData[IdxAssetId])
230230 let playerPubKey58 = gameData[IdxPlayerPubKey58]
231231 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
232232 let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
233233 let decreasedReserves = decreaseReservedAmount(gameId, assetId, winAmount)
234234 if ((gameState != STATESUBMITTED))
235235 then throw("Invalid game state for passed gameId")
236236 else if (winByTimeout)
237237 then {
238238 let randStr = take(playerChoice, 1)
239239 let newGameDataStr = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
240240 winScriptSet(gameId, playerAddress, winAmount, assetId, newGameDataStr, winByTimeout, decreasedReserves)
241241 }
242242 else {
243243 let randStr = generateRandInt(gameId, rsaSign)
244244 if (isPlayerWin(playerChoice, randStr))
245245 then {
246246 let newGameDataStr = formatGameData(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
247247 winScriptSet(gameId, playerAddress, winAmount, assetId, newGameDataStr, winByTimeout, decreasedReserves)
248248 }
249249 else {
250250 let newGameDataStr = formatGameData(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, randStr)
251251 WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
252252 }
253253 }
254254 }
255255
256256
257257 @Verifier(tx)
258258 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
259259 then match tx {
260260 case ttx: TransferTransaction =>
261261 let assetId = validateAndGetAssetId(ttx.assetId)
262262 ((assetBalance(this, ttx.assetId) - ttx.amount) >= getIntOr(RESERVATIONKEY[assetId], 0))
263263 case stx: SetScriptTransaction =>
264264 if ((getIntOr(RESERVATIONKEY[0], 0) == 0))
265265 then (getIntOr(RESERVATIONKEY[1], 0) == 0)
266266 else false
267267 case _ =>
268268 false
269269 }
270270 else false
271271

github/deemru/w8io/3ef1775 
81.80 ms