tx · 6ihkpsxMytTz4d8TyTBAxjQzBqDja3ZmrzvXgXKQGey2

3Mr1FdiZzG9iTQUtPmQEs1hBVbyQhG6LU93:  -0.01500000 Waves

2021.08.04 12:26 [1643414] smart account 3Mr1FdiZzG9iTQUtPmQEs1hBVbyQhG6LU93 > SELF 0.00000000 Waves

{ "type": 13, "id": "6ihkpsxMytTz4d8TyTBAxjQzBqDja3ZmrzvXgXKQGey2", "fee": 1500000, "feeAssetId": null, "timestamp": 1628069229635, "version": 1, "sender": "3Mr1FdiZzG9iTQUtPmQEs1hBVbyQhG6LU93", "senderPublicKey": "De2GV53Brxd2GCQnLJWRugSidGtrVvPL9kJn2Dh4NTpJ", "proofs": [ "2HGxGW4dv1eay59cSi52xKGcp1t2p5Qdp5GjaZCa5bUp2zVKi5XiYm4Y8rTLBRat129mZejYNDGdJwZEdSKkq3EY" ], "script": "base64:AAIEAAAAAAAAABQIAhIFCgMICAESAwoBCBIECgIIAgAAADUAAAAABldBVkVTRAAAAAAABfXhAAAAAAAFVVNETkQAAAAAAAAPQkAAAAAABEVHR0QAAAAAAAAAAGQAAAAACERFQ0lNQUxTCQAETAAAAAIFAAAABldBVkVTRAkABEwAAAACBQAAAAVVU0RORAkABEwAAAACBQAAAARFR0dEBQAAAANuaWwAAAAABkFTU0VUUwkABEwAAAACBQAAAAR1bml0CQAETAAAAAIJAAJZAAAAAQIAAAAsMjVGRXFFalJrcUs2eUNraVQ3THo2U0FZejdnVUZDdHhmQ0NobnJWRkQ1QVQJAARMAAAAAgkAAlkAAAABAgAAACxIc0V3V3V1UWpVb2hyWDI2Rng4dGc1ZWlMNExERDd1bTZqcU5xRmdFUng2ZwUAAAADbmlsAAAAAAtCRVRESVZJREVSUwkABEwAAAACAAAAAAAAAAABCQAETAAAAAIAAAAAAAAAAAEJAARMAAAAAgAAAAAAAAAACgUAAAADbmlsAAAAAAtNSU5GRUVXQVZFUwkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAUFAAAABldBVkVTRAAAAAAAAAAD6AAAAAAEQkVUMQAAAAAAAAAAAQAAAAAEQkVUMgAAAAAAAAAAAgAAAAAEQkVUNAAAAAAAAAAABAAAAAAEQkVUOAAAAAAAAAAACAAAAAAFQkVUMTQAAAAAAAAAAA4AAAAACFJBVEVNVUxUAAAAAAAAACcQAAAAAAVSQVRFMQAAAAAAAACa5wAAAAAFUkFURTIAAAAAAAAAYBgAAAAABVJBVEUzAAAAAAAAAEo4AAAAAAVSQVRFNAAAAAAAAAA3eAAAAAAFUkFURTUAAAAAAAAALIgAAAAABVJBVEVTCQAETAAAAAIFAAAABVJBVEUxCQAETAAAAAIFAAAABVJBVEUyCQAETAAAAAIFAAAABVJBVEUzCQAETAAAAAIFAAAABVJBVEU0CQAETAAAAAIFAAAABVJBVEU1BQAAAANuaWwAAAAABEJFVFMJAARMAAAAAgUAAAAEQkVUMQkABEwAAAACBQAAAARCRVQyCQAETAAAAAIFAAAABEJFVDQJAARMAAAAAgUAAAAEQkVUOAkABEwAAAACBQAAAAVCRVQxNAUAAAADbmlsAAAAAAxJZHhHYW1lU3RhdGUAAAAAAAAAAAAAAAAAD0lkeFBsYXllckNob2ljZQAAAAAAAAAAAQAAAAARSWR4UGxheWVyUHViS2V5NTgAAAAAAAAAAAIAAAAAEElkeFN0YXJ0ZWRIZWlnaHQAAAAAAAAAAAMAAAAADElkeFdpbkFtb3VudAAAAAAAAAAABAAAAAAKSWR4QXNzZXRJZAAAAAAAAAAABQAAAAAOUkVTRVJWQVRJT05LRVkJAARMAAAAAgIAAAAWJFJFU0VSVkVEX0FNT1VOVF9XQVZFUwkABEwAAAACAgAAABUkUkVTRVJWRURfQU1PVU5UX1VTRE4JAARMAAAAAgIAAAAUJFJFU0VSVkVEX0FNT1VOVF9FR0cFAAAAA25pbAAAAAAPR0FNRVNDT1VOVEVSS0VZAgAAAAkkR0FNRV9OVU0AAAAADlJTQVBVQkxJQzY0S0VZAgAAAA0kUlNBX1BVQkxJQzY0AAAAABBTRVJWRVJBRERSRVNTS0VZAgAAAA0kQkVOWl9BRERSRVNTAAAAABBSQU5EVElNRUZSQU1FS0VZAgAAABYkUkFORF9PUkFDTEVfVElNRUZSQU1FAAAAAA5TVEFURVNVQk1JVFRFRAIAAAAJU1VCTUlUVEVEAAAAAAhTVEFURVdPTgIAAAADV09OAAAAAAlTVEFURUxPU1QCAAAABExPU1QBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQABLAAAAAIFAAAAA2tleQIAAAAjIGtleSBpcyBub3Qgc3BlY2lmaWVkIGluIHRoaXMuc3RhdGUAAAAACVJTQVBVQkxJQwkAAlsAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAAOUlNBUFVCTElDNjRLRVkAAAAABlNFUlZFUgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAAEFNFUlZFUkFERFJFU1NLRVkAAAAAE1JBTkRPUkFDTEVUSU1FRlJBTUUJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAAQUkFORFRJTUVGUkFNRUtFWQAAAAAAAAAc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YXR1cwAAAAxwbGF5ZXJDaG9pY2UAAAAOcGxheWVyUHViS2V5NTgAAAANc3RhcnRlZEhlaWdodAAAAAl3aW5BbW91bnQAAAAHYXNzZXRJZAAAAAtyYW5kT3JFbXB0eQkABLkAAAACCQAETAAAAAIFAAAACmdhbWVTdGF0dXMJAARMAAAAAgUAAAAMcGxheWVyQ2hvaWNlCQAETAAAAAIFAAAADnBsYXllclB1YktleTU4CQAETAAAAAIFAAAADXN0YXJ0ZWRIZWlnaHQJAARMAAAAAgUAAAAJd2luQW1vdW50CQAETAAAAAIFAAAAB2Fzc2V0SWQJAARMAAAAAgMJAAAAAAAAAgUAAAALcmFuZE9yRW1wdHkCAAAAAAIAAAAABQAAAAtyYW5kT3JFbXB0eQUAAAADbmlsAgAAAAFfAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcAAAAKZ2FtZVN0YXR1cwAAAAxwbGF5ZXJDaG9pY2UAAAAOcGxheWVyUHViS2V5NTgAAAANc3RhcnRlZEhlaWdodAAAAAl3aW5BbW91bnQAAAAHYXNzZXRJZAAAAAtyYW5kT3JFbXB0eQkBAAAAD2Zvcm1hdEdhbWVEYXRhUwAAAAcFAAAACmdhbWVTdGF0dXMFAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgJAAGkAAAAAQUAAAANc3RhcnRlZEhlaWdodAkAAaQAAAABBQAAAAl3aW5BbW91bnQJAAGkAAAAAQUAAAAHYXNzZXRJZAUAAAALcmFuZE9yRW1wdHkBAAAADmZpbmlzaEdhbWVEYXRhAAAABAAAAAxvcmlnR2FtZURhdGEAAAAKZ2FtZVN0YXR1cwAAAARyYW5kAAAADHdpbkJ5VGltZW91dAQAAAAOZmluaXNoR2FtZURhdGEJAQAAAA9mb3JtYXRHYW1lRGF0YVMAAAAHBQAAAApnYW1lU3RhdHVzCQABkQAAAAIFAAAADG9yaWdHYW1lRGF0YQUAAAAPSWR4UGxheWVyQ2hvaWNlCQABkQAAAAIFAAAADG9yaWdHYW1lRGF0YQUAAAARSWR4UGxheWVyUHViS2V5NTgJAAGRAAAAAgUAAAAMb3JpZ0dhbWVEYXRhBQAAABBJZHhTdGFydGVkSGVpZ2h0CQABkQAAAAIFAAAADG9yaWdHYW1lRGF0YQUAAAAMSWR4V2luQW1vdW50CQABkQAAAAIFAAAADG9yaWdHYW1lRGF0YQUAAAAKSWR4QXNzZXRJZAUAAAAEcmFuZAMFAAAADHdpbkJ5VGltZW91dAkAASwAAAACBQAAAA5maW5pc2hHYW1lRGF0YQIAAAAIX1RJTUVPVVQFAAAADmZpbmlzaEdhbWVEYXRhAQAAAA9leHRyYWN0R2FtZURhdGEAAAABAAAABmdhbWVJZAkABLUAAAACBAAAAAckbWF0Y2gwCQAEHQAAAAIFAAAABHRoaXMFAAAABmdhbWVJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAANzdHIFAAAAByRtYXRjaDAFAAAAA3N0cgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAGR2FtZTogBQAAAAZnYW1lSWQCAAAACyBub3QgZm91bmQuAgAAAAFfAAAAAwAAAAFpAQAAAAtjb25zdHJ1Y3RvcgAAAAMAAAALcnNhUHVibGljNjQAAAALYmVuekFkZHJlc3MAAAATcmFuZE9yYWNsZVRpbWVGcmFtZQMJAQAAAAIhPQAAAAIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQUAAAAEdGhpcwkAAAIAAAABAgAAAA5ub3QgYXV0aG9yaXplZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA5SU0FQVUJMSUM2NEtFWQUAAAALcnNhUHVibGljNjQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAQU0VSVkVSQUREUkVTU0tFWQUAAAALYmVuekFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEFJBTkRUSU1FRlJBTUVLRVkFAAAAE3JhbmRPcmFjbGVUaW1lRnJhbWUFAAAAA25pbAAAAAFpAQAAAANiZXQAAAABAAAADHBsYXllckNob2ljZQQAAAAGZ2FtZUlkCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQDCQAAZwAAAAIAAAAAAAAAAAEJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMJAAACAAAAAQIAAAAbMiBwYXltZW50cyBtdXN0IGJlIGF0dGFjaGVkAwkBAAAACWlzRGVmaW5lZAAAAAEJAAQdAAAAAgUAAAAEdGhpcwUAAAAGZ2FtZUlkCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAlCZXQgZm9yOiAFAAAABmdhbWVJZAIAAAASIHdhcyBhbHJlYWR5IG1hZGUuBAAAAAZiZXRQbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAABmZlZVBtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAAGZmVlUG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAtZmVlUG10ICgybmQgcGF5bWVudCkgYXNzZXRJZCBtdXN0IGJlIGluIFdhdmVzAwkAAGYAAAACBQAAAAtNSU5GRUVXQVZFUwgFAAAABmZlZVBtdAAAAAZhbW91bnQJAAACAAAAAQIAAAArZmVlUG10ICgybmQgcGF5bWVudCkgbXVzdCBiZSA+PSAwLjAwNSBXYXZlcwQAAAAPaW50ZXJuYWxBc3NldElkCQEAAAAVdmFsaWRhdGVBbmRHZXRBc3NldElkAAAAAQgFAAAABmJldFBtdAAAAAdhc3NldElkBAAAAApjb21taXNzaW9uCAUAAAAGZmVlUG10AAAABmFtb3VudAQAAAAJd2luQW1vdW50CQEAAAAadmFsaWRhdGVCZXRBbmRHZXRXaW5BbW91bnQAAAADCAUAAAAGYmV0UG10AAAABmFtb3VudAUAAAAPaW50ZXJuYWxBc3NldElkBQAAAAxwbGF5ZXJDaG9pY2UEAAAADnBsYXllclB1YktleTU4CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAIZ2FtZURhdGEJAQAAAA5mb3JtYXRHYW1lRGF0YQAAAAcFAAAADlNUQVRFU1VCTUlUVEVEBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAAZoZWlnaHQFAAAACXdpbkFtb3VudAUAAAAPaW50ZXJuYWxBc3NldElkAgAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkFAAAAD2ludGVybmFsQXNzZXRJZAkBAAAAFWluY3JlYXNlUmVzZXJ2ZUFtb3VudAAAAAIFAAAACXdpbkFtb3VudAUAAAAPaW50ZXJuYWxBc3NldElkCQAETAAAAAIJAQAAAAxpbmNyZW1lbnRJbnQAAAABBQAAAA9HQU1FU0NPVU5URVJLRVkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAAhnYW1lRGF0YQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAAAZTRVJWRVIFAAAACmNvbW1pc3Npb24IBQAAAAZmZWVQbXQAAAAHYXNzZXRJZAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAgAAAAZnYW1lSWQAAAAHcnNhU2lnbgQAAAAIZ2FtZURhdGEJAQAAAA9leHRyYWN0R2FtZURhdGEAAAABBQAAAAZnYW1lSWQEAAAACWdhbWVTdGF0ZQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAMSWR4R2FtZVN0YXRlBAAAAAxwbGF5ZXJDaG9pY2UJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAAD0lkeFBsYXllckNob2ljZQQAAAANc3RhcnRlZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGdhbWVEYXRhBQAAABBJZHhTdGFydGVkSGVpZ2h0BAAAAAl3aW5BbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhnYW1lRGF0YQUAAAAMSWR4V2luQW1vdW50BAAAAAdhc3NldElkCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIZ2FtZURhdGEFAAAACklkeEFzc2V0SWQEAAAADnBsYXllclB1YktleTU4CQABkQAAAAIFAAAACGdhbWVEYXRhBQAAABFJZHhQbGF5ZXJQdWJLZXk1OAQAAAANcGxheWVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABBQAAAA5wbGF5ZXJQdWJLZXk1OAMJAQAAAAIhPQAAAAIFAAAACWdhbWVTdGF0ZQUAAAAOU1RBVEVTVUJNSVRURUQJAAACAAAAAQIAAAAkSW52YWxpZCBnYW1lIHN0YXRlIGZvciBwYXNzZWQgZ2FtZUlkAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAAAZTRVJWRVIJAAACAAAAAQIAAAArUmVndWxhciB3aXRoZHJhdyBjYW4gYmUgZG9uZSBieSBzZXJ2ZXIgb25seQQAAAAMd2luQnlUaW1lb3V0CQAAZgAAAAIJAABlAAAAAgUAAAAGaGVpZ2h0BQAAAA1zdGFydGVkSGVpZ2h0BQAAABNSQU5ET1JBQ0xFVElNRUZSQU1FBAAAAApyYW5kQ2hvaXNlAwUAAAAMd2luQnlUaW1lb3V0CQABLwAAAAIFAAAADHBsYXllckNob2ljZQAAAAAAAAAAAQkBAAAAEmdlbmVyYXRlUmFuZENob2lzZQAAAAIFAAAABmdhbWVJZAUAAAAHcnNhU2lnbgQAAAAJcGxheWVyV2luCQEAAAALaXNQbGF5ZXJXaW4AAAACBQAAAAxwbGF5ZXJDaG9pY2UFAAAACnJhbmRDaG9pc2UEAAAADW5ld0dhbWVTdGF0dXMDBQAAAAlwbGF5ZXJXaW4FAAAACFNUQVRFV09OBQAAAAlTVEFURUxPU1QEAAAAC25ld0dhbWVEYXRhCQEAAAAOZmluaXNoR2FtZURhdGEAAAAEBQAAAAhnYW1lRGF0YQUAAAANbmV3R2FtZVN0YXR1cwUAAAAKcmFuZENob2lzZQUAAAAMd2luQnlUaW1lb3V0CQAETgAAAAIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAAtuZXdHYW1lRGF0YQkABEwAAAACCQEAAAAWZGVjcmVhc2VSZXNlcnZlZEFtb3VudAAAAAMFAAAABmdhbWVJZAUAAAAHYXNzZXRJZAUAAAAJd2luQW1vdW50BQAAAANuaWwDBQAAAAlwbGF5ZXJXaW4JAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAANcGxheWVyQWRkcmVzcwUAAAAJd2luQW1vdW50CQABkQAAAAIFAAAABkFTU0VUUwUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAANuaWwAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAEAAAAB2Fzc2V0SWQJAQAAABV2YWxpZGF0ZUFuZEdldEFzc2V0SWQAAAABCAUAAAADdHR4AAAAB2Fzc2V0SWQJAABnAAAAAgkAAGUAAAACCQEAAAAPZ2V0QXNzZXRCYWxhbmNlAAAAAQgFAAAAA3R0eAAAAAdhc3NldElkCAUAAAADdHR4AAAABmFtb3VudAkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQUAAAAHYXNzZXRJZAAAAAAAAAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAA3N0eAUAAAAHJG1hdGNoMAMDCQAAAAAAAAIJAQAAAAhnZXRJbnRPcgAAAAIJAAGRAAAAAgUAAAAOUkVTRVJWQVRJT05LRVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAgkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAcJAAAAAAAAAgkBAAAACGdldEludE9yAAAAAgkAAZEAAAACBQAAAA5SRVNFUlZBVElPTktFWQAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAcHBz4b64k=", "chainId": 84, "height": 1643414, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 921cQV3NjtRLNtq8Kk3UT62X4wYWgD7kq2Kwxmn4VRbD Next: EzkncbAfPAMFL7pHEye5HMDz51ASkLNDPprVp3SHupHH Diff:
OldNewDifferences
192192
193193 func formatGameDataS (gameStatus,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = makeString([gameStatus, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, if ((randOrEmpty == ""))
194194 then ""
195- else ("_" + randOrEmpty)], "_")
195+ else randOrEmpty], "_")
196196
197197
198198 func formatGameData (gameStatus,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = formatGameDataS(gameStatus, playerChoice, playerPubKey58, toString(startedHeight), toString(winAmount), toString(assetId), randOrEmpty)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let WAVESD = 100000000
55
66 let USDND = 1000000
77
88 let EGGD = 100
99
1010 let DECIMALS = [WAVESD, USDND, EGGD]
1111
1212 let ASSETS = [unit, fromBase58String("25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT"), fromBase58String("HsEwWuuQjUohrX26Fx8tg5eiL4LDD7um6jqNqFgERx6g")]
1313
1414 let BETDIVIDERS = [1, 1, 10]
1515
1616 let MINFEEWAVES = ((5 * WAVESD) / 1000)
1717
1818 let BET1 = 1
1919
2020 let BET2 = 2
2121
2222 let BET4 = 4
2323
2424 let BET8 = 8
2525
2626 let BET14 = 14
2727
2828 let RATEMULT = 10000
2929
3030 let RATE1 = 39655
3131
3232 let RATE2 = 24600
3333
3434 let RATE3 = 19000
3535
3636 let RATE4 = 14200
3737
3838 let RATE5 = 11400
3939
4040 let RATES = [RATE1, RATE2, RATE3, RATE4, RATE5]
4141
4242 let BETS = [BET1, BET2, BET4, BET8, BET14]
4343
4444 let IdxGameState = 0
4545
4646 let IdxPlayerChoice = 1
4747
4848 let IdxPlayerPubKey58 = 2
4949
5050 let IdxStartedHeight = 3
5151
5252 let IdxWinAmount = 4
5353
5454 let IdxAssetId = 5
5555
5656 let RESERVATIONKEY = ["$RESERVED_AMOUNT_WAVES", "$RESERVED_AMOUNT_USDN", "$RESERVED_AMOUNT_EGG"]
5757
5858 let GAMESCOUNTERKEY = "$GAME_NUM"
5959
6060 let RSAPUBLIC64KEY = "$RSA_PUBLIC64"
6161
6262 let SERVERADDRESSKEY = "$BENZ_ADDRESS"
6363
6464 let RANDTIMEFRAMEKEY = "$RAND_ORACLE_TIMEFRAME"
6565
6666 let STATESUBMITTED = "SUBMITTED"
6767
6868 let STATEWON = "WON"
6969
7070 let STATELOST = "LOST"
7171
7272 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), (key + " key is not specified in this.state"))
7373
7474
7575 let RSAPUBLIC = fromBase64String(getStringOrFail(RSAPUBLIC64KEY))
7676
7777 let SERVER = addressFromStringValue(getStringOrFail(SERVERADDRESSKEY))
7878
7979 let RANDORACLETIMEFRAME = valueOrElse(getInteger(this, RANDTIMEFRAMEKEY), 7200)
8080
8181 func getIntOr (key,default) = if (isDefined(getInteger(this, key)))
8282 then getIntegerValue(this, key)
8383 else default
8484
8585
8686 func setInt (key,value) = IntegerEntry(key, value)
8787
8888
8989 func incrementInt (key) = setInt(key, (getIntOr(key, -1) + 1))
9090
9191
9292 func changeInt (key,by) = setInt(key, (getIntOr(key, 0) + by))
9393
9494
9595 func getAssetBalance (assetIdOrUnit) = match assetIdOrUnit {
9696 case assetId: ByteVector =>
9797 assetBalance(this, assetId)
9898 case _ =>
9999 wavesBalance(this).available
100100 }
101101
102102
103103 func increaseReserveAmount (winAmount,assetId) = {
104104 let newReservedAmount = (getIntOr(RESERVATIONKEY[assetId], 0) + winAmount)
105105 if ((newReservedAmount > getAssetBalance(ASSETS[assetId])))
106106 then throw("Insufficient funds on Dice Roller account. Transaction was rejected for your safety.")
107107 else newReservedAmount
108108 }
109109
110110
111111 func decreaseReservedAmount (gameId,assetId,winAmount) = if ((0 > (getIntOr(RESERVATIONKEY[assetId], 0) - winAmount)))
112112 then throw("Invalid Dice Roller account state - reserved amount is less than 0")
113113 else changeInt(RESERVATIONKEY[assetId], -(winAmount))
114114
115115
116116 func validateAndGetAssetId (assetId) = if ((assetId == ASSETS[0]))
117117 then 0
118118 else if ((assetId == ASSETS[1]))
119119 then 1
120120 else if ((assetId == ASSETS[2]))
121121 then 2
122122 else throw("Invalid payment asset")
123123
124124
125125 func validateBetAndGetWinAmount (bet,internalAssetId,playerChoice) = {
126126 let dicesCount = size(playerChoice)
127127 func checkAmount (a,x) = if (a)
128128 then true
129129 else (bet == ((x * DECIMALS[internalAssetId]) / BETDIVIDERS[internalAssetId]))
130130
131131 if (!({
132132 let $l = BETS
133133 let $s = size($l)
134134 let $acc0 = false
135135 func 1 ($a,$i) = if (($i >= $s))
136136 then $a
137137 else checkAmount($a, $l[$i])
138138
139139 func 2 ($a,$i) = if (($i >= $s))
140140 then $a
141141 else throw("List size exceeds 5")
142142
143143 2(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5)
144144 }))
145145 then throw("Bet amount is not valid")
146146 else if ((parseInt(playerChoice) == unit))
147147 then throw("Invalid player's choice")
148148 else if (if ((1 > dicesCount))
149149 then true
150150 else (dicesCount > 5))
151151 then throw("Invalid dices count in player's choice")
152152 else ((bet * RATES[(dicesCount - 1)]) / RATEMULT)
153153 }
154154
155155
156156 func generateRandChoise (gameId,rsaSign) = {
157157 let rsaSigValid = rsaVerify_16Kb(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
158158 if (!(rsaSigValid))
159159 then throw("Invalid RSA signature")
160160 else {
161161 let rand = (toInt(sha256(rsaSign)) % 6)
162162 let result = if ((0 > rand))
163163 then (-1 * rand)
164164 else rand
165165 toString((result + 1))
166166 }
167167 }
168168
169169
170170 func isPlayerWin (playerChoice,randChoise) = {
171171 let s = size(playerChoice)
172172 func check (a,x) = if (a)
173173 then true
174174 else if ((s >= x))
175175 then (take(drop(playerChoice, (x - 1)), 1) == randChoise)
176176 else false
177177
178178 let $l = [1, 2, 3, 4, 5]
179179 let $s = size($l)
180180 let $acc0 = false
181181 func 1 ($a,$i) = if (($i >= $s))
182182 then $a
183183 else check($a, $l[$i])
184184
185185 func 2 ($a,$i) = if (($i >= $s))
186186 then $a
187187 else throw("List size exceeds 5")
188188
189189 2(1(1(1(1(1($acc0, 0), 1), 2), 3), 4), 5)
190190 }
191191
192192
193193 func formatGameDataS (gameStatus,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = makeString([gameStatus, playerChoice, playerPubKey58, startedHeight, winAmount, assetId, if ((randOrEmpty == ""))
194194 then ""
195- else ("_" + randOrEmpty)], "_")
195+ else randOrEmpty], "_")
196196
197197
198198 func formatGameData (gameStatus,playerChoice,playerPubKey58,startedHeight,winAmount,assetId,randOrEmpty) = formatGameDataS(gameStatus, playerChoice, playerPubKey58, toString(startedHeight), toString(winAmount), toString(assetId), randOrEmpty)
199199
200200
201201 func finishGameData (origGameData,gameStatus,rand,winByTimeout) = {
202202 let finishGameData = formatGameDataS(gameStatus, origGameData[IdxPlayerChoice], origGameData[IdxPlayerPubKey58], origGameData[IdxStartedHeight], origGameData[IdxWinAmount], origGameData[IdxAssetId], rand)
203203 if (winByTimeout)
204204 then (finishGameData + "_TIMEOUT")
205205 else finishGameData
206206 }
207207
208208
209209 func extractGameData (gameId) = split(match getString(this, gameId) {
210210 case str: String =>
211211 str
212212 case _ =>
213213 throw((("Game: " + gameId) + " not found."))
214214 }, "_")
215215
216216
217217 @Callable(i)
218218 func constructor (rsaPublic64,benzAddress,randOracleTimeFrame) = if ((addressFromPublicKey(i.callerPublicKey) != this))
219219 then throw("not authorized")
220220 else [StringEntry(RSAPUBLIC64KEY, rsaPublic64), StringEntry(SERVERADDRESSKEY, benzAddress), IntegerEntry(RANDTIMEFRAMEKEY, randOracleTimeFrame)]
221221
222222
223223
224224 @Callable(i)
225225 func bet (playerChoice) = {
226226 let gameId = toBase58String(i.transactionId)
227227 if ((1 >= size(i.payments)))
228228 then throw("2 payments must be attached")
229229 else if (isDefined(getString(this, gameId)))
230230 then throw((("Bet for: " + gameId) + " was already made."))
231231 else {
232232 let betPmt = value(i.payments[0])
233233 let feePmt = value(i.payments[1])
234234 if (isDefined(feePmt.assetId))
235235 then throw("feePmt (2nd payment) assetId must be in Waves")
236236 else if ((MINFEEWAVES > feePmt.amount))
237237 then throw("feePmt (2nd payment) must be >= 0.005 Waves")
238238 else {
239239 let internalAssetId = validateAndGetAssetId(betPmt.assetId)
240240 let commission = feePmt.amount
241241 let winAmount = validateBetAndGetWinAmount(betPmt.amount, internalAssetId, playerChoice)
242242 let playerPubKey58 = toBase58String(i.callerPublicKey)
243243 let gameData = formatGameData(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmount, internalAssetId, "")
244244 [IntegerEntry(RESERVATIONKEY[internalAssetId], increaseReserveAmount(winAmount, internalAssetId)), incrementInt(GAMESCOUNTERKEY), StringEntry(gameId, gameData), ScriptTransfer(SERVER, commission, feePmt.assetId)]
245245 }
246246 }
247247 }
248248
249249
250250
251251 @Callable(i)
252252 func withdraw (gameId,rsaSign) = {
253253 let gameData = extractGameData(gameId)
254254 let gameState = gameData[IdxGameState]
255255 let playerChoice = gameData[IdxPlayerChoice]
256256 let startedHeight = parseIntValue(gameData[IdxStartedHeight])
257257 let winAmount = parseIntValue(gameData[IdxWinAmount])
258258 let assetId = parseIntValue(gameData[IdxAssetId])
259259 let playerPubKey58 = gameData[IdxPlayerPubKey58]
260260 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
261261 if ((gameState != STATESUBMITTED))
262262 then throw("Invalid game state for passed gameId")
263263 else if ((i.caller != SERVER))
264264 then throw("Regular withdraw can be done by server only")
265265 else {
266266 let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
267267 let randChoise = if (winByTimeout)
268268 then take(playerChoice, 1)
269269 else generateRandChoise(gameId, rsaSign)
270270 let playerWin = isPlayerWin(playerChoice, randChoise)
271271 let newGameStatus = if (playerWin)
272272 then STATEWON
273273 else STATELOST
274274 let newGameData = finishGameData(gameData, newGameStatus, randChoise, winByTimeout)
275275 ([StringEntry(gameId, newGameData), decreaseReservedAmount(gameId, assetId, winAmount)] ++ (if (playerWin)
276276 then [ScriptTransfer(playerAddress, winAmount, ASSETS[assetId])]
277277 else nil))
278278 }
279279 }
280280
281281
282282 @Verifier(tx)
283283 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
284284 then match tx {
285285 case ttx: TransferTransaction =>
286286 let assetId = validateAndGetAssetId(ttx.assetId)
287287 ((getAssetBalance(ttx.assetId) - ttx.amount) >= getIntOr(RESERVATIONKEY[assetId], 0))
288288 case stx: SetScriptTransaction =>
289289 if (if ((getIntOr(RESERVATIONKEY[0], 0) == 0))
290290 then (getIntOr(RESERVATIONKEY[1], 0) == 0)
291291 else false)
292292 then (getIntOr(RESERVATIONKEY[2], 0) == 0)
293293 else false
294294 case _ =>
295295 false
296296 }
297297 else false
298298

github/deemru/w8io/3ef1775 
58.02 ms