tx · DfWKZnmQhX4otL2F3cqZYE76fDq65gFh5Qo81js8y3cD

3MpdJJV3WyZufiGHRtb7xbY2Vsc2pBFcJYZ:  -0.01400000 Waves

2021.05.14 04:51 [1524713] smart account 3MpdJJV3WyZufiGHRtb7xbY2Vsc2pBFcJYZ > SELF 0.00000000 Waves

{ "type": 13, "id": "DfWKZnmQhX4otL2F3cqZYE76fDq65gFh5Qo81js8y3cD", "fee": 1400000, "feeAssetId": null, "timestamp": 1620957095393, "version": 1, "sender": "3MpdJJV3WyZufiGHRtb7xbY2Vsc2pBFcJYZ", "senderPublicKey": "ALG9JVGNn9aCL68dbg1AmW6yDQv1b8EDLq99pQS8L1k6", "proofs": [ "4acF2ossDifTyP4iZyWJy9e82ETgXMoA7i8Ypm5yQ8mDQYxRRZvDHsWHvVnzNErU7vmfuvFdXNaov78g2MqHWZTc" ], "script": "base64:AAIEAAAAAAAAAA8IAhIAEgMKAQgSBAoCCAEAAAAWAAAAABNnYW1lTWFzdGVyUHVibGljS2V5AQAAACCKqFcQ1VSNQa7ZONz4ZD59H7wLfuowVwcQ1qI/fK6ACwAAAAAKZGljZU51bWJlcgkABEwAAAACAAAAAAAAAAACCQAETAAAAAIAAAAAAAAAAAMJAARMAAAAAgAAAAAAAAAABAkABEwAAAACAAAAAAAAAAAFCQAETAAAAAIAAAAAAAAAAAYJAARMAAAAAgAAAAAAAAAABwkABEwAAAACAAAAAAAAAAAICQAETAAAAAIAAAAAAAAAAAkJAARMAAAAAgAAAAAAAAAACgkABEwAAAACAAAAAAAAAAALCQAETAAAAAIAAAAAAAAAAAwFAAAAA25pbAAAAAAJZ2FtZVRva2VuAQAAACCvQNOoGbkt3wVk9kpr+yD9dOUY7LBdGNCbLK5MVkSodQAAAAAJUlNBUFVCTElDCQACWwAAAAECAAABkmJhc2U2NDpNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQWpudDJQZE4xUGRqZDoKN3JzWHpiYXBndWNuOWUxWGZmVXgxbzdnckFsdzhDNk5GdXYxUFBqN0tuUTZSdE45eGhuaUxGNHhLbGM3Ly9UWVhkMXVIV214OXZ1OWhqY2lZWDlVTVJKbmhsWk8ycTM0bXhQZGNnTERLaEpIRE43MjZLSTB3SHBGUTVkSE15em9NTGRXc2FoRmMxV3gvWHhyb0syS2MxeTJKQldOMmFrUmxreFNEY2x1cWJiVWNXTXlyd0c2aVd1VmxoZWo1eGZjdWVyZy9wc0szNVdHbjdTTEYyOXRXdVIyeCsyNG5NK0JKVXN1Ukc3eUJaVWhHcll6SmsyZ3ZwdWNSTGVhNkFGUnZvdzdSZHlNWUF3S0ZycjZtZ1EwVmNVdzJUNzUwZTFvR2FuWTBVZFUzTlBzS0lndlU0RnQ0dWliTWxNTUJKdmNyc0ViRFFIZkRsd0lEQVFBQgAAAAAJR0FNRVNUQVJUAAAAAAAAAAAAAAAAAA5HQU1FSU5QUk9HUkVTUwAAAAAAAAAAAQAAAAAMR0FNRUZJTklTSEVEAAAAAAAAAAACAAAAABBnYW1lQ291bnRlckxhYmVsAgAAAA1HX0dBTUVDT1VOVEVSAAAAABJnYW1lVG90YWxCZXRzTGFiZWwCAAAAEEdfVE9UQUxDUkFQU0JFVFMAAAAAEGxhc3RSb2xsZWROdW1iZXIAAAAAAAAAAAABAAAAE2F1dGhvcml6ZVBlcm1pc3Npb24AAAABAAAAD2NhbGxlclB1YmxpY0tleQkBAAAAAiE9AAAAAgUAAAAPY2FsbGVyUHVibGljS2V5BQAAABNnYW1lTWFzdGVyUHVibGljS2V5AQAAABlnYW1lQ3VycmVudFBvaW50RGljZUxhYmVsAAAAAQAAAAtnYW1lQ291bnRlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAAC2dhbWVDb3VudGVyAgAAAAtfRklSU1RQT0lOVAEAAAAXZ2FtZUZpcnN0UG9pbnREaWNlTGFiZWwAAAABAAAAC2dhbWVDb3VudGVyCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAALZ2FtZUNvdW50ZXICAAAADV9DVVJSRU5UUE9JTlQBAAAADmdhbWVTdGF0ZUxhYmVsAAAAAQAAAAtnYW1lQ291bnRlcgkAASwAAAACCQABLAAAAAICAAAAAkdfCQABpAAAAAEFAAAAC2dhbWVDb3VudGVyAgAAAAZfU1RBVEUBAAAAD2dhbWVTdW1TaGFMYWJlbAAAAAEAAAALZ2FtZUNvdW50ZXIJAAEsAAAAAgkAASwAAAACAgAAAAJHXwkAAaQAAAABBQAAAAtnYW1lQ291bnRlcgIAAAAHX1NVTVNIQQEAAAAUZ2FtZVN0YXJ0SGVpZ2h0TGFiZWwAAAABAAAAC2dhbWVDb3VudGVyCQABLAAAAAIJAAEsAAAAAgIAAAACR18JAAGkAAAAAQUAAAALZ2FtZUNvdW50ZXICAAAADF9TVEFSVEhFSUdIVAEAAAAMZ2V0R2FtZVN0YXRlAAAAAQAAAAtnYW1lQ291bnRlcgkABBoAAAACBQAAAAR0aGlzCQEAAAAOZ2FtZVN0YXRlTGFiZWwAAAABBQAAAAtnYW1lQ291bnRlcgEAAAANZ2V0R2FtZVN1bVNoYQAAAAEAAAALZ2FtZUNvdW50ZXIJAAQdAAAAAgUAAAAEdGhpcwkBAAAAD2dhbWVTdW1TaGFMYWJlbAAAAAEFAAAAC2dhbWVDb3VudGVyAQAAAA5nZXRTdGFydEhlaWdodAAAAAEAAAALZ2FtZUNvdW50ZXIJAAQaAAAAAgUAAAAEdGhpcwkBAAAAFGdhbWVTdGFydEhlaWdodExhYmVsAAAAAQUAAAALZ2FtZUNvdW50ZXIBAAAAEmdldENyYXBHYW1lQ291bnRlcgAAAAAJAAQaAAAAAgUAAAAEdGhpcwUAAAAQZ2FtZUNvdW50ZXJMYWJlbAEAAAARZ2V0Rmlyc3RQb2ludERpY2UAAAABAAAAC2dhbWVDb3VudGVyCQAEGgAAAAIFAAAABHRoaXMJAQAAABdnYW1lRmlyc3RQb2ludERpY2VMYWJlbAAAAAEFAAAAC2dhbWVDb3VudGVyAQAAABNnZXRDdXJyZW50UG9pbnREaWNlAAAAAQAAAAtnYW1lQ291bnRlcgkABBoAAAACBQAAAAR0aGlzCQEAAAAZZ2FtZUN1cnJlbnRQb2ludERpY2VMYWJlbAAAAAEFAAAAC2dhbWVDb3VudGVyAAAAAwAAAAFpAQAAAAhpbml0R2FtZQAAAAADCQEAAAATYXV0aG9yaXplUGVybWlzc2lvbgAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkAAAIAAAABAgAAABJpbml0R2FtZV9GT1JCSURERU4EAAAAByRtYXRjaDAJAQAAABJnZXRDcmFwR2FtZUNvdW50ZXIAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAB2NvdW50ZXIFAAAAByRtYXRjaDAJAAACAAAAAQIAAAARSU5JVF9BTFJFQURZX0RPTkUJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEGdhbWVDb3VudGVyTGFiZWwAAAAAAAAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEmdhbWVUb3RhbEJldHNMYWJlbAAAAAAAAAAAAAUAAAADbmlsAAAAAWkBAAAACXN0YXJ0R2FtZQAAAAEAAAAKcmFuZG9tSGFzaAMJAQAAABNhdXRob3JpemVQZXJtaXNzaW9uAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAE3N0YXJ0R2FtZV9GT1JCSURERU4EAAAAByRtYXRjaDAJAQAAABJnZXRDcmFwR2FtZUNvdW50ZXIA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", "chainId": 84, "height": 1524713, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4fGk4DJzXDkCsscfRx3FK3efjCQxcrzdKtcX3xLkEY8y Next: DHHXEY35goVZFhWHVw9chVpH2Kchy87k5QCneCd4EJso Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let gameMasterPublicKey = base58'ALG9JVGNn9aCL68dbg1AmW6yDQv1b8EDLq99pQS8L1k6'
55
66 let diceNumber = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
77
88 let gameToken = base58'Co7gTLr7ZJvVKwToLpuZJqmkVecy5uwupYH6qCkKuhc8'
99
1010 let RSAPUBLIC = fromBase64String("base64:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjnt2PdN1Pdjd:
1111 7rsXzbapgucn9e1XffUx1o7grAlw8C6NFuv1PPj7KnQ6RtN9xhniLF4xKlc7//TYXd1uHWmx9vu9hjciYX9UMRJnhlZO2q34mxPdcgLDKhJHDN726KI0wHpFQ5dHMyzoMLdWsahFc1Wx/XxroK2Kc1y2JBWN2akRlkxSDcluqbbUcWMyrwG6iWuVlhej5xfcuerg/psK35WGn7SLF29tWuR2x+24nM+BJUsuRG7yBZUhGrYzJk2gvpucRLea6AFRvow7RdyMYAwKFrr6mgQ0VcUw2T750e1oGanY0UdU3NPsKIgvU4Ft4uibMlMMBJvcrsEbDQHfDlwIDAQAB")
1212
1313 let GAMESTART = 0
1414
1515 let GAMEINPROGRESS = 1
1616
1717 let GAMEFINISHED = 2
1818
1919 let gameCounterLabel = "G_GAMECOUNTER"
2020
2121 let gameTotalBetsLabel = "G_TOTALCRAPSBETS"
2222
2323 let lastRolledNumber = 0
2424
2525 func authorizePermission (callerPublicKey) = (callerPublicKey != gameMasterPublicKey)
2626
2727
2828 func gameCurrentPointDiceLabel (gameCounter) = (("G_" + toString(gameCounter)) + "_FIRSTPOINT")
2929
3030
3131 func gameFirstPointDiceLabel (gameCounter) = (("G_" + toString(gameCounter)) + "_CURRENTPOINT")
3232
3333
3434 func gameStateLabel (gameCounter) = (("G_" + toString(gameCounter)) + "_STATE")
3535
3636
3737 func gameSumShaLabel (gameCounter) = (("G_" + toString(gameCounter)) + "_SUMSHA")
3838
3939
4040 func gameStartHeightLabel (gameCounter) = (("G_" + toString(gameCounter)) + "_STARTHEIGHT")
4141
4242
4343 func getGameState (gameCounter) = getInteger(this, gameStateLabel(gameCounter))
4444
4545
4646 func getGameSumSha (gameCounter) = getString(this, gameSumShaLabel(gameCounter))
4747
4848
4949 func getStartHeight (gameCounter) = getInteger(this, gameStartHeightLabel(gameCounter))
5050
5151
5252 func getCrapGameCounter () = getInteger(this, gameCounterLabel)
5353
5454
5555 func getFirstPointDice (gameCounter) = getInteger(this, gameFirstPointDiceLabel(gameCounter))
5656
5757
5858 func getCurrentPointDice (gameCounter) = getInteger(this, gameCurrentPointDiceLabel(gameCounter))
5959
6060
6161 @Callable(i)
6262 func initGame () = if (authorizePermission(i.callerPublicKey))
6363 then throw("initGame_FORBIDDEN")
6464 else match getCrapGameCounter() {
6565 case counter: Int =>
6666 throw("INIT_ALREADY_DONE")
6767 case _ =>
6868 [IntegerEntry(gameCounterLabel, 0), IntegerEntry(gameTotalBetsLabel, 0)]
6969 }
7070
7171
7272
7373 @Callable(i)
7474 func startGame (randomHash) = if (authorizePermission(i.callerPublicKey))
7575 then throw("startGame_FORBIDDEN")
7676 else match getCrapGameCounter() {
7777 case number: Int =>
7878 let newNumber = (number + 1)
7979 [IntegerEntry(gameCounterLabel, newNumber), IntegerEntry(gameStateLabel(newNumber), 0), IntegerEntry(gameStartHeightLabel(newNumber), lastBlock.height), StringEntry(gameSumShaLabel(newNumber), toBase58String(sha256(fromBase64String(randomHash))))]
8080 case _ =>
8181 throw("INIT_NEED")
8282 }
8383
8484
8585
8686 @Callable(i)
8787 func throwDices (rsaSign,gameNumber) = if (authorizePermission(i.callerPublicKey))
8888 then throw("throwDices_FORBIDDEN")
8989 else match getGameState(gameNumber) {
9090 case state: Int =>
9191 if ((state == GAMEFINISHED))
9292 then throw("Game is finished")
9393 else match getGameSumSha(gameNumber) {
9494 case sumSha: String =>
9595 let sig = fromBase64String(rsaSign)
9696 let rsaSigValid = rsaVerify(SHA256, fromBase58String(sumSha), sig, RSAPUBLIC)
9797 match blockInfoByHeight((lastBlock.height - 1)) {
9898 case previousBlock: BlockInfo =>
9999 let randomHash = sha256((take(sig, 4) + take(previousBlock.generationSignature, 4)))
100100 if (!(rsaSigValid))
101101 then throw("INVALID_RSA_SIGN")
102102 else {
103103 let randNumber = (toInt(randomHash) % 37)
104104 throw(("fsdfsd " + toBase64String(randomHash)))
105105 }
106106 case _ =>
107107 throw("Last block doesn't exist.")
108108 }
109109 case _ =>
110110 throw("SHA doesn't exist")
111111 }
112112 case _ =>
113113 throw("Game does not exist or has already ended.")
114114 }
115115
116116
117117 @Verifier(tx)
118118 func verify () = match tx {
119119 case _ =>
120120 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
121121 }
122122

github/deemru/w8io/169f3d6 
27.94 ms