tx · 5LX94pVzYnM3nqdbnvG7pYpm4MYo9HBjfifSAiZiVCwx

3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89:  -0.01400000 Waves

2019.08.24 13:25 [645097] smart account 3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89 > SELF 0.00000000 Waves

{ "type": 13, "id": "5LX94pVzYnM3nqdbnvG7pYpm4MYo9HBjfifSAiZiVCwx", "fee": 1400000, "feeAssetId": null, "timestamp": 1566642326263, "version": 1, "sender": "3MsGBnTzBhrNe6w1KpLYPkzdDdxWudm4U89", "senderPublicKey": "FgbqvGasMMrXxbhwrsgEiCgJLjXPjgn8kHxsZiVmLrkb", "proofs": [ "4TbfaMKLGdn1UUXn3sv9SiGo4qnBf3E1ZTGUF4Xq279jX9pUq1NBAoTGUkcx688GnJyajM6tFxsrbfDZriK1NRbh" ], "script": "base64:AAIDAAAAAAAAAAAAAAAsAAAAAAlSU0FQVUJMSUMJAAJbAAAAAQIAAAN7YmFzZTY0OkxTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVUoyVkVORFFWTlpRME5SUkRVMVprNTZZekJYUmpkVVFVNUNaMnR4YUd0cFJ6bDNNRUpCVVZWR1FVUkJhazFSYzNkRFVWbEVWbEZSUjBWM1Nrc0tWVVJGVlUxQ1NVZEJNVlZGUTJoTlRFMUVRWFJXUlZaVVZrTXhVMVV3UlhkSWFHTk9UVlJCZDA1VVNUUk5SRWwzVDBSVmVGZG9ZMDVOYWtGM1RsUkpNUXBOUkVsM1QwUlZlRmRxUVdwTlVYTjNRMUZaUkZaUlVVZEZkMHBMVlVSRlZVMUNTVWRCTVZWRlEyaE5URTFFUVhSV1JWWlVWa014VTFVd1JYZG5XamgzQ2tSUldVcExiMXBKYUhaalRrRlJSVUpDVVVGRVoxa3dRVTFKUjBwQmIwZENRVTVIUlZsWWRHWm5SRkpzVjFWVFJHNHphR0ZaTkU1V1ZsRnBTMGs1UTNvS1ZHaHZkV0U1SzBSNFNuVnBjMlY1ZW0xQ1FtVTNVbTlvTVZKUWNXUjJiWFJQU0cxRlVHSktLMnRZV2xsb1ltOTZlbEJTWWtaSFNFTktlVUptUTB4NlVRcG1WbTl6T1M5eFZWRTRPSFU0TTJJd1UwWkJNazFIYlZGWFVVRnNVblJNZVRZMlJXdFNOSEpFVW5kVWFqSkVlbEkwUlVWWVowVkxjRWwyYnpoV1FuTXZDak1yYzBoTVJqTkZVMmRCYUVGblRVSkJRVVYzUkZGWlNrdHZXa2xvZG1OT1FWRkZSa0pSUVVSbldVVkJSVm8yYlZoR1JuRXpRWHBtWVhGWFNHMURlVEVLUVZKcWJHRjFXVUZoT0ZwdFZVWnVURzB3Wlcxbk9XUnJWa0pLTmpOaFJYRkJVbWgwYjJzMllrUlJSSHBUU25ocFRIQkRSVVkyUnpSaUwwNTJMMDB2VFFwTWVXaFFLMDl2VDFSdFJWUk5aV2RCVmxGTmNUY3hZMmh2VmtwNVQwWkZOVUowVVdFMlRTOXNRMGhGVDNsaE5WRlZabTlTUmpKSVJqbEZhbEpHTkRSTENqTlBTeXQxTTJsMlZGTnFNM3AzYW5Sd2RXUlpOVmh2UFFv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UmF3RGF0YVN0cgAAAAEFAAAACnJhd0RhdGFTdHIBAAAAEkV4dHJhY3RSZXNlcnZlZEFtdAAAAAAEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwUAAAAOUkVTRVJWQVRJT05LRVkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAAeVmFsaWRhdGVBbmRJbmNyZWFzZVJlc2VydmVkQW10AAAAAQAAAAZ3aW5BbXQEAAAAEW5ld1Jlc2VydmVkQW1vdW50CQAAZAAAAAIJAQAAABJFeHRyYWN0UmVzZXJ2ZWRBbXQAAAAABQAAAAZ3aW5BbXQEAAAAB2JhbGFuY2UJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAR0aGlzAwkAAGYAAAACBQAAABFuZXdSZXNlcnZlZEFtb3VudAUAAAAHYmFsYW5jZQkAAAIAAAABAgAAAFlJbnN1ZmZpY2llbnQgZnVuZHMgb24gUnVzc2lhbiBSb3VsZXR0ZSBhY2NvdW50LiBUcmFuc2FjdGlvbiB3YXMgcmVqZWN0ZWQgZm9yIHlvdXIgc2FmZXR5LgUAAAARbmV3UmVzZXJ2ZWRBbW91bnQBAAAAEEluY3JlbWVudEdhbWVOdW0AAAAABAAAAAdnYW1lTnVtBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMFAAAAD0dBTUVTQ09VTlRFUktFWQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAANudW0FAAAAByRtYXRjaDAFAAAAA251bQAAAAAAAAAAAAkAAGQAAAACBQAAAAdnYW1lTnVtAAAAAAAAAAABAQAAABNEZWNyZWFzZVJlc2VydmVkQW10AAAAAgAAAAZnYW1lSWQAAAAGd2luQW10BAAAABFuZXdSZXNlcnZlZEFtb3VudAkAAGUAAAACCQEAAAASRXh0cmFjdFJlc2VydmVkQW10AAAAAAUAAAAGd2luQW10AwkAAGYAAAACAAAAAAAAAAAABQAAABFuZXdSZXNlcnZlZEFtb3VudAkAAAIAAAABAgAAAEdJbnZhbGlkIFJ1c3NpYW4gUm91bGV0dGUgYWNjb3VudCBzdGF0ZSAtIHJlc2VydmVkIGFtb3Vu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bW1vbkRhdGEEAAAACGdhbWVEYXRhCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAGZ2FtZUlkBQAAAA5uZXdHYW1lRGF0YVN0cgkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgUAAAAIZ2FtZURhdGEFAAAADndTZXRDb21tb25EYXRhCQEAAAALVHJhbnNmZXJTZXQAAAABBQAAAA50U2V0Q29tbW9uRGF0YQAAAAIAAAABaQEAAAADYmV0AAAAAQAAAAxwbGF5ZXJDaG9pY2UJAAACAAAAAQkAASwAAAACAgAAAAZFcnJvcjoJAAJaAAAAAQkAAZsAAAABAgAAApctLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQnZUQ0NBU1lDQ1FENTVmTnpjMFdGN1RBTkJna3Foa2lHOXcwQkFRVUZBREFqTVFzd0NRWURWUVFHRXdKSwpVREVVTUJJR0ExVUVDaE1MTURBdFZFVlRWQzFTVTBFd0hoY05NVEF3TlRJNE1ESXdPRFV4V2hjTk1qQXdOVEkxCk1ESXdPRFV4V2pBak1Rc3dDUVlEVlFRR0V3SktVREVVTUJJR0ExVUVDaE1MTURBdFZFVlRWQzFTVTBFd2daOHcKRFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTkdFWVh0ZmdEUmxXVVNEbjNoYVk0TlZWUWlLSTlDegpUaG91YTkrRHhKdWlzZXl6bUJCZTdSb2gxUlBxZHZtdE9IbUVQYkora1haWWhib3p6UFJiRkdIQ0p5QmZDTHpRCmZWb3M5L3FVUTg4dTgzYjBTRkEyTUdtUVdRQWxSdEx5NjZFa1I0ckRSd1RqMkR6UjRFRVhnRUtwSXZvOFZCcy8KMytzSExGM0VTZ0FoQWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdZRUFFWjZtWEZGcTNBemZhcVdIbUN5MQpBUmpsYXVZQWE4Wm1VRm5MbTBlbWc5ZGtWQko2M2FFcUFSaHRvazZiRFFEelNKeGlMcENFRjZHNGIvTnYvTS9NCkx5aFArT29PVG1FVE1lZ0FWUU1xNzFjaG9WSnlPRkU1QnRRYTZNL2xDSEVPeWE1UVVmb1JGMkhGOUVqUkY0NEsKM09LK3UzaXZUU2ozendqdHB1ZFk1WG89Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0AAAABaQEAAAAId2l0aGRyYXcAAAACAAAABmdhbWVJZAAAAAdyc2FTaWduBAAAAAxnYW1lRGF0YUxpc3QJAQAAABNFeHRyYWN0R2FtZURhdGFMaXN0AAAAAQUAAAAGZ2FtZUlkBAAAAAlnYW1lU3RhdGUJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAxJZHhHYW1lU3RhdGUEAAAADHBsYXllckNob2ljZQkAAZEAAAACBQAAAAxnYW1lRGF0YUxpc3QFAAAAD0lkeFBsYXllckNob2ljZQQAAAANc3RhcnRlZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAAQSWR4U3RhcnRlZEhlaWdodAQAAAAGd2luQW10CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAMZ2FtZURhdGFMaXN0BQAAAAlJZHhXaW5BbXQEAAAADnBsYXllclB1YktleTU4CQABkQAAAAIFAAAADGdhbWVEYXRhTGlzdAUAAAARSWR4UGxheWVyUHViS2V5NTgEAAAADXBsYXllckFkZHJlc3MJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAOcGxheWVyUHViS2V5NTgEAAAADHdpbkJ5VGltZW91dAkAAGYAAAACCQAAZQAAAAIFAAAABmhlaWdodAUAAAANc3RhcnRlZEhlaWdodAUAAAATUkFORE9SQUNMRVRJTUVGUkFNRQQAAAARZGVjcmVhc2VkUmVzZXJ2ZXMJAQAAABNEZWNyZWFzZVJlc2VydmVkQW10AAAAAgUAAAAGZ2FtZUlkBQAAAAZ3aW5BbXQDCQEAAAACIT0AAAACBQAAAAlnYW1lU3RhdGUFAAAADlNUQVRFU1VCTUlUVEVECQAAAgAAAAECAAAAJEludmFsaWQgZ2FtZSBzdGF0ZSBmb3IgcGFzc2VkIGdhbWVJZAMFAAAADHdpbkJ5VGltZW91dAQAAAAHcmFuZFN0cgkBAAAACWdldFdpblN0cgAAAAEFAAAADHBsYXllckNob2ljZQQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACFNUQVRFV09OBQAAAAxwbGF5ZXJDaG9pY2UFAAAADnBsYXllclB1YktleTU4BQAAAA1zdGFydGVkSGVpZ2h0BQAAAAZ3aW5BbXQFAAAAB3JhbmRTdHIJAQAAAAxXaW5TY3JpcHRTZXQAAAAGBQAAAAZnYW1lSWQFAAAADXBsYXllckFkZHJlc3MFAAAABndpbkFtdAUAAAAObmV3R2FtZURhdGFTdHIFAAAADHdpbkJ5VGltZW91dAUAAAARZGVjcmVhc2VkUmVzZXJ2ZXMEAAAAB3JhbmRJbnQJAQAAAA9HZW5lcmF0ZVJhbmRJbnQAAAACBQAAAAZnYW1lSWQFAAAAB3JzYVNpZ24EAAAAB3JhbmRTdHIJAQAAAAlSYW5kVG9TdHIAAAABBQAAAAdyYW5kSW50AwkBAAAAC0lzUGxheWVyV2luAAAAAgUAAAAMcGxheWVyQ2hvaWNlBQAAAAdyYW5kU3RyBAAAAA5uZXdHYW1lRGF0YVN0cgkBAAAAEUZvcm1hdEdhbWVEYXRhU3RyAAAABgUAAAAIU1RBVEVXT04FAAAADHBsYXllckNob2ljZQUAAAAOcGxheWVyUHViS2V5NTgFAAAADXN0YXJ0ZWRIZWlnaHQFAAAABndpbkFtdAUAAAAHcmFuZFN0cgkBAAAADFdpblNjcmlwdFNldAAAAAYFAAAABmdhbWVJZAUAAAANcGxheWVyQWRkcmVzcwUAAAAGd2luQW10BQAAAA5uZXdHYW1lRGF0YVN0cgUAAAAMd2luQnlUaW1lb3V0BQAAABFkZWNyZWFzZWRSZXNlcnZlcwQAAAAObmV3R2FtZURhdGFTdHIJAQAAABFGb3JtYXRHYW1lRGF0YVN0cgAAAAYFAAAACVNUQVRFTE9TVAUAAAAMcGxheWVyQ2hvaWNlBQAAAA5wbGF5ZXJQdWJLZXk1OAUAAAANc3RhcnRlZEhlaWdodAUAAAAGd2luQW10BQAAAAdyYW5kU3RyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAZnYW1lSWQFAAAADm5ld0dhbWVEYXRhU3RyCQAETAAAAAIFAAAAEWRlY3JlYXNlZFJlc2VydmVzBQAAAANuaWwAAAAAXdukNw==", "chainId": 84, "height": 645097, "spentComplexity": 0 } View: original | compacted Prev: EuxXJDDwfxomFkZHwXQmS78kGcnvxpUC9xd4R9aNHetA Next: GcHJTdZxhKzhVin24jFkp1fwVYt9ubJdnHdQnVDYSexi Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let RSAPUBLIC = fromBase64String("base64:MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGHEUXK/02X83U1723dnMiBMgMvuSMXNKP0abtoSaF/s6rFT8AS4uqkTt5hTs73HkYE0KERF6f/TE4DNSFhX1I/B58I0E6SZA7G2MtIwdDzYFydL8mjE6B2h9hZINjjZTe9r3D6xUsAvybE/EwYt5MHqoovGdRD2aYazOqqk0J93AgMBAAE=")
4+let RSAPUBLIC = fromBase64String("base64:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQVNZQ0NRRDU1Zk56YzBXRjdUQU5CZ2txaGtpRzl3MEJBUVVGQURBak1Rc3dDUVlEVlFRR0V3SksKVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdIaGNOTVRBd05USTRNREl3T0RVeFdoY05NakF3TlRJMQpNREl3T0RVeFdqQWpNUXN3Q1FZRFZRUUdFd0pLVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdnWjh3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5HRVlYdGZnRFJsV1VTRG4zaGFZNE5WVlFpS0k5Q3oKVGhvdWE5K0R4SnVpc2V5em1CQmU3Um9oMVJQcWR2bXRPSG1FUGJKK2tYWlloYm96elBSYkZHSENKeUJmQ0x6UQpmVm9zOS9xVVE4OHU4M2IwU0ZBMk1HbVFXUUFsUnRMeTY2RWtSNHJEUndUajJEelI0RUVYZ0VLcEl2bzhWQnMvCjMrc0hMRjNFU2dBaEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBRVo2bVhGRnEzQXpmYXFXSG1DeTEKQVJqbGF1WUFhOFptVUZuTG0wZW1nOWRrVkJKNjNhRXFBUmh0b2s2YkRRRHpTSnhpTHBDRUY2RzRiL052L00vTQpMeWhQK09vT1RtRVRNZWdBVlFNcTcxY2hvVkp5T0ZFNUJ0UWE2TS9sQ0hFT3lhNVFVZm9SRjJIRjlFalJGNDRLCjNPSyt1M2l2VFNqM3p3anRwdWRZNVhvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t")
55
66 let SERVER = addressFromStringValue("3NAPoUBwL7jaPW3ngVF3dT5b68q4eaHAiiC")
77
280280
281281
282282 @Callable(i)
283-func bet (playerChoice) = {
284- let newGameNum = IncrementGameNum()
285- let gameId = toBase58String(i.transactionId)
286- let pmt = extract(i.payment)
287- let betNotInWaves = isDefined(pmt.assetId)
288- let feeNotInWaves = isDefined(pmt.assetId)
289- let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
290- let txIdUsed = isDefined(getString(this, gameId))
291- if (betNotInWaves)
292- then throw("Bet amount must be in Waves")
293- else if (feeNotInWaves)
294- then throw("Transaction's fee must be in Waves")
295- else if (txIdUsed)
296- then throw("Passed txId had been used before. Game aborted.")
297- else {
298- let playerPubKey58 = toBase58String(i.callerPublicKey)
299- let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
300- let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
301- let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
302- let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]
303- ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
304- }
305- }
283+func bet (playerChoice) = throw(("Error:" + toBase64String(toBytes("-----BEGIN CERTIFICATE-----
284+MIIBvTCCASYCCQD55fNzc0WF7TANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJK
285+UDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwHhcNMTAwNTI4MDIwODUxWhcNMjAwNTI1
286+MDIwODUxWjAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwgZ8w
287+DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANGEYXtfgDRlWUSDn3haY4NVVQiKI9Cz
288+Thoua9+DxJuiseyzmBBe7Roh1RPqdvmtOHmEPbJ+kXZYhbozzPRbFGHCJyBfCLzQ
289+fVos9/qUQ88u83b0SFA2MGmQWQAlRtLy66EkR4rDRwTj2DzR4EEXgEKpIvo8VBs/
290+3+sHLF3ESgAhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAEZ6mXFFq3AzfaqWHmCy1
291+ARjlauYAa8ZmUFnLm0emg9dkVBJ63aEqARhtok6bDQDzSJxiLpCEF6G4b/Nv/M/M
292+LyhP+OoOTmETMegAVQMq71choVJyOFE5BtQa6M/lCHEOya5QUfoRF2HF9EjRF44K
293+3OK+u3ivTSj3zwjtpudY5Xo=
294+-----END CERTIFICATE-----"))))
306295
307296
308297
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let RSAPUBLIC = fromBase64String("base64:MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgGHEUXK/02X83U1723dnMiBMgMvuSMXNKP0abtoSaF/s6rFT8AS4uqkTt5hTs73HkYE0KERF6f/TE4DNSFhX1I/B58I0E6SZA7G2MtIwdDzYFydL8mjE6B2h9hZINjjZTe9r3D6xUsAvybE/EwYt5MHqoovGdRD2aYazOqqk0J93AgMBAAE=")
4+let RSAPUBLIC = fromBase64String("base64:LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ2VENDQVNZQ0NRRDU1Zk56YzBXRjdUQU5CZ2txaGtpRzl3MEJBUVVGQURBak1Rc3dDUVlEVlFRR0V3SksKVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdIaGNOTVRBd05USTRNREl3T0RVeFdoY05NakF3TlRJMQpNREl3T0RVeFdqQWpNUXN3Q1FZRFZRUUdFd0pLVURFVU1CSUdBMVVFQ2hNTE1EQXRWRVZUVkMxU1UwRXdnWjh3CkRRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU5HRVlYdGZnRFJsV1VTRG4zaGFZNE5WVlFpS0k5Q3oKVGhvdWE5K0R4SnVpc2V5em1CQmU3Um9oMVJQcWR2bXRPSG1FUGJKK2tYWlloYm96elBSYkZHSENKeUJmQ0x6UQpmVm9zOS9xVVE4OHU4M2IwU0ZBMk1HbVFXUUFsUnRMeTY2RWtSNHJEUndUajJEelI0RUVYZ0VLcEl2bzhWQnMvCjMrc0hMRjNFU2dBaEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnWUVBRVo2bVhGRnEzQXpmYXFXSG1DeTEKQVJqbGF1WUFhOFptVUZuTG0wZW1nOWRrVkJKNjNhRXFBUmh0b2s2YkRRRHpTSnhpTHBDRUY2RzRiL052L00vTQpMeWhQK09vT1RtRVRNZWdBVlFNcTcxY2hvVkp5T0ZFNUJ0UWE2TS9sQ0hFT3lhNVFVZm9SRjJIRjlFalJGNDRLCjNPSyt1M2l2VFNqM3p3anRwdWRZNVhvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t")
55
66 let SERVER = addressFromStringValue("3NAPoUBwL7jaPW3ngVF3dT5b68q4eaHAiiC")
77
88 let RANDORACLETIMEFRAME = 4320
99
1010 let WAVELET = ((100 * 1000) * 1000)
1111
1212 let COMMISSION = ((9 * WAVELET) / 1000)
1313
1414 let BET1 = (1 * WAVELET)
1515
1616 let BET2 = (2 * WAVELET)
1717
1818 let BET4 = (4 * WAVELET)
1919
2020 let BET8 = (8 * WAVELET)
2121
2222 let BET14 = (14 * WAVELET)
2323
2424 let RATEMULT = 10000
2525
2626 let RATE1 = 39655
2727
2828 let RATE2 = 24600
2929
3030 let RATE3 = 19000
3131
3232 let RATE4 = 14200
3333
3434 let RATE5 = 11400
3535
3636 let IdxGameState = 0
3737
3838 let IdxPlayerChoice = 1
3939
4040 let IdxPlayerPubKey58 = 2
4141
4242 let IdxStartedHeight = 3
4343
4444 let IdxWinAmt = 4
4545
4646 let IdxRandOrEmpty = 5
4747
4848 let GAMESCOUNTERKEY = "$GAME_NUM"
4949
5050 let RESERVATIONKEY = "$RESERVED_AMOUNT"
5151
5252 let STATESUBMITTED = "SUBMITTED"
5353
5454 let STATEWON = "WON"
5555
5656 let STATELOST = "LOST"
5757
5858 func getAnswer (playerChoice) = BET14
5959
6060
6161 func GenerateRandInt (gameId,rsaSign) = {
6262 let rsaSigValid = rsaVerify(SHA256, toBytes(gameId), rsaSign, RSAPUBLIC)
6363 if (rsaSigValid)
6464 then {
6565 let rand = (toInt(sha256(rsaSign)) % 6)
6666 if ((0 > rand))
6767 then ((-1 * rand) + 1)
6868 else (rand + 1)
6969 }
7070 else throw("Invalid RSA signature")
7171 }
7272
7373
7474 func RemoveUnderscoreIfPresent (remaining) = if ((size(remaining) > 0))
7575 then drop(remaining, 1)
7676 else remaining
7777
7878
7979 func ParseNextAttribute (remaining) = {
8080 let s = size(remaining)
8181 if ((s > 0))
8282 then {
8383 let nn = parseIntValue(take(remaining, 2))
8484 let v = take(drop(remaining, 2), nn)
8585 let tmpRemaining = drop(remaining, (nn + 2))
8686 let remainingState = RemoveUnderscoreIfPresent(tmpRemaining)
8787 [v, remainingState]
8888 }
8989 else throw("Empty string was passed into parseNextAttribute func")
9090 }
9191
9292
9393 func ParseGameRawDataStr (rawStateStr) = {
9494 let gameState = ParseNextAttribute(rawStateStr)
9595 let playerChoice = ParseNextAttribute(gameState[1])
9696 let playerPubKey58 = ParseNextAttribute(playerChoice[1])
9797 let startedHeight = ParseNextAttribute(playerPubKey58[1])
9898 let winAmt = ParseNextAttribute(startedHeight[1])
9999 [gameState[0], playerChoice[0], playerPubKey58[0], startedHeight[0], winAmt[0]]
100100 }
101101
102102
103103 func ExtractGameDataList (gameId) = {
104104 let rawDataStr = match getString(this, gameId) {
105105 case str: String =>
106106 str
107107 case _ =>
108108 throw(("Couldn't find game by " + gameId))
109109 }
110110 ParseGameRawDataStr(rawDataStr)
111111 }
112112
113113
114114 func ExtractReservedAmt () = match getInteger(this, RESERVATIONKEY) {
115115 case a: Int =>
116116 a
117117 case _ =>
118118 0
119119 }
120120
121121
122122 func ValidateAndIncreaseReservedAmt (winAmt) = {
123123 let newReservedAmount = (ExtractReservedAmt() + winAmt)
124124 let balance = wavesBalance(this)
125125 if ((newReservedAmount > balance))
126126 then throw("Insufficient funds on Russian Roulette account. Transaction was rejected for your safety.")
127127 else newReservedAmount
128128 }
129129
130130
131131 func IncrementGameNum () = {
132132 let gameNum = match getInteger(this, GAMESCOUNTERKEY) {
133133 case num: Int =>
134134 num
135135 case _ =>
136136 0
137137 }
138138 (gameNum + 1)
139139 }
140140
141141
142142 func DecreaseReservedAmt (gameId,winAmt) = {
143143 let newReservedAmount = (ExtractReservedAmt() - winAmt)
144144 if ((0 > newReservedAmount))
145145 then throw("Invalid Russian Roulette account state - reserved amount is less than 0")
146146 else DataEntry(RESERVATIONKEY, newReservedAmount)
147147 }
148148
149149
150150 func FormatGameDataParam (p) = {
151151 let s = size(p)
152152 if ((s == 0))
153153 then throw("Parameter size must be greater then 0")
154154 else if ((s > 99))
155155 then throw("Parameter size must be less then 100")
156156 else if ((10 > s))
157157 then (("0" + toString(s)) + p)
158158 else (toString(s) + p)
159159 }
160160
161161
162162 func FormatGameDataStr (gameState,playerChoice,playerPubKey58,startedHeight,winAmt,randOrEmpty) = {
163163 let fullStateStr = ((((((((FormatGameDataParam(gameState) + "_") + FormatGameDataParam(playerChoice)) + "_") + FormatGameDataParam(playerPubKey58)) + "_") + FormatGameDataParam(toString(startedHeight))) + "_") + FormatGameDataParam(toString(winAmt)))
164164 if ((randOrEmpty == ""))
165165 then fullStateStr
166166 else ((fullStateStr + "_") + FormatGameDataParam(randOrEmpty))
167167 }
168168
169169
170170 func RandToStr (r) = if ((r == 1))
171171 then "1"
172172 else if ((r == 2))
173173 then "2"
174174 else if ((r == 3))
175175 then "3"
176176 else if ((r == 4))
177177 then "4"
178178 else if ((r == 5))
179179 then "5"
180180 else if ((r == 6))
181181 then "6"
182182 else throw(("Unsupported r parameter passed: expected=[1,...,6] actual=" + toString(r)))
183183
184184
185185 func ValidateBetAndDefineWinAmt (betAmt,playerChoice) = {
186186 let betAmtValid = if (if (if (if (if ((betAmt == (BET1 + COMMISSION)))
187187 then true
188188 else (betAmt == (BET2 + COMMISSION)))
189189 then true
190190 else (betAmt == (BET4 + COMMISSION)))
191191 then true
192192 else (betAmt == (BET8 + COMMISSION)))
193193 then true
194194 else (betAmt == (BET14 + COMMISSION)))
195195 then true
196196 else false
197197 if (betAmtValid)
198198 then {
199199 let bulletsCount = size(playerChoice)
200200 let bet = (betAmt - COMMISSION)
201201 let b1 = parseIntValue(take(playerChoice, 1))
202202 let forB2 = drop(playerChoice, 1)
203203 let b2 = parseIntValue(take(forB2, 1))
204204 let forB3 = drop(forB2, 1)
205205 let b3 = parseIntValue(take(forB3, 1))
206206 let forB4 = drop(forB3, 1)
207207 let b4 = parseIntValue(take(forB4, 1))
208208 let forB5 = drop(forB4, 1)
209209 let b5 = parseIntValue(take(forB5, 1))
210210 let forB6 = drop(forB5, 1)
211211 let b6 = parseIntValue(take(forB6, 1))
212212 let activeBullets = (((((b1 + b2) + b3) + b4) + b5) + b6)
213213 if ((activeBullets == 5))
214214 then ((bet * RATE1) / RATEMULT)
215215 else if ((activeBullets == 4))
216216 then ((bet * RATE2) / RATEMULT)
217217 else if ((activeBullets == 3))
218218 then ((bet * RATE3) / RATEMULT)
219219 else if ((activeBullets == 2))
220220 then ((bet * RATE4) / RATEMULT)
221221 else if ((activeBullets == 1))
222222 then ((bet * RATE5) / RATEMULT)
223223 else throw(("Invalid player's choice, active bullets = " + toString(activeBullets)))
224224 }
225225 else throw("Bet amount is not in range")
226226 }
227227
228228
229229 func getWinStr (playerChoice) = {
230230 let b1 = parseIntValue(take(playerChoice, 1))
231231 let forB2 = drop(playerChoice, 1)
232232 let b2 = parseIntValue(take(forB2, 1))
233233 let forB3 = drop(playerChoice, 1)
234234 let b3 = parseIntValue(take(forB3, 1))
235235 let forB4 = drop(playerChoice, 1)
236236 let b4 = parseIntValue(take(forB4, 1))
237237 let forB5 = drop(playerChoice, 1)
238238 let b5 = parseIntValue(take(forB5, 1))
239239 let forB6 = drop(playerChoice, 1)
240240 let b6 = parseIntValue(take(forB6, 1))
241241 if ((b1 == 0))
242242 then "1"
243243 else if ((b2 == 0))
244244 then "2"
245245 else if ((b3 == 0))
246246 then "3"
247247 else if ((b4 == 0))
248248 then "4"
249249 else if ((b5 == 0))
250250 then "5"
251251 else if ((b6 == 0))
252252 then "6"
253253 else throw("Bet amount is not in range")
254254 }
255255
256256
257257 func IsPlayerWin (playerChoice,randStr) = {
258258 let randInt = parseIntValue(randStr)
259259 let choiceArray = split(playerChoice, "")
260260 if ((choiceArray[(randInt - 1)] == "0"))
261261 then true
262262 else false
263263 }
264264
265265
266266 func WinScriptSet (gameId,playerAddress,winAmt,newGameDataStr,winByTimeout,decreasedReserves) = {
267267 let wSetCommonData = [decreasedReserves]
268268 let tSetCommonData = [ScriptTransfer(playerAddress, winAmt, unit)]
269269 if (winByTimeout)
270270 then {
271271 let newGameDataStrAdjusted = ((newGameDataStr + "_") + FormatGameDataParam("TIMEOUT"))
272272 let gameData = DataEntry(gameId, newGameDataStrAdjusted)
273273 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
274274 }
275275 else {
276276 let gameData = DataEntry(gameId, newGameDataStr)
277277 ScriptResult(WriteSet(gameData :: wSetCommonData), TransferSet(tSetCommonData))
278278 }
279279 }
280280
281281
282282 @Callable(i)
283-func bet (playerChoice) = {
284- let newGameNum = IncrementGameNum()
285- let gameId = toBase58String(i.transactionId)
286- let pmt = extract(i.payment)
287- let betNotInWaves = isDefined(pmt.assetId)
288- let feeNotInWaves = isDefined(pmt.assetId)
289- let winAmt = ValidateBetAndDefineWinAmt(pmt.amount, playerChoice)
290- let txIdUsed = isDefined(getString(this, gameId))
291- if (betNotInWaves)
292- then throw("Bet amount must be in Waves")
293- else if (feeNotInWaves)
294- then throw("Transaction's fee must be in Waves")
295- else if (txIdUsed)
296- then throw("Passed txId had been used before. Game aborted.")
297- else {
298- let playerPubKey58 = toBase58String(i.callerPublicKey)
299- let gameDataStr = FormatGameDataStr(STATESUBMITTED, playerChoice, playerPubKey58, height, winAmt, "")
300- let readableGameData = ((((((((STATESUBMITTED + "_") + playerChoice) + "_") + playerPubKey58) + "_") + toString(height)) + "_") + toString(winAmt))
301- let serverTransfer = [ScriptTransfer(SERVER, COMMISSION, unit)]
302- let betData = [DataEntry(RESERVATIONKEY, ValidateAndIncreaseReservedAmt(winAmt)), DataEntry(GAMESCOUNTERKEY, newGameNum), DataEntry(gameId, gameDataStr)]
303- ScriptResult(WriteSet(betData), TransferSet(serverTransfer))
304- }
305- }
283+func bet (playerChoice) = throw(("Error:" + toBase64String(toBytes("-----BEGIN CERTIFICATE-----
284+MIIBvTCCASYCCQD55fNzc0WF7TANBgkqhkiG9w0BAQUFADAjMQswCQYDVQQGEwJK
285+UDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwHhcNMTAwNTI4MDIwODUxWhcNMjAwNTI1
286+MDIwODUxWjAjMQswCQYDVQQGEwJKUDEUMBIGA1UEChMLMDAtVEVTVC1SU0EwgZ8w
287+DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANGEYXtfgDRlWUSDn3haY4NVVQiKI9Cz
288+Thoua9+DxJuiseyzmBBe7Roh1RPqdvmtOHmEPbJ+kXZYhbozzPRbFGHCJyBfCLzQ
289+fVos9/qUQ88u83b0SFA2MGmQWQAlRtLy66EkR4rDRwTj2DzR4EEXgEKpIvo8VBs/
290+3+sHLF3ESgAhAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAEZ6mXFFq3AzfaqWHmCy1
291+ARjlauYAa8ZmUFnLm0emg9dkVBJ63aEqARhtok6bDQDzSJxiLpCEF6G4b/Nv/M/M
292+LyhP+OoOTmETMegAVQMq71choVJyOFE5BtQa6M/lCHEOya5QUfoRF2HF9EjRF44K
293+3OK+u3ivTSj3zwjtpudY5Xo=
294+-----END CERTIFICATE-----"))))
306295
307296
308297
309298 @Callable(i)
310299 func withdraw (gameId,rsaSign) = {
311300 let gameDataList = ExtractGameDataList(gameId)
312301 let gameState = gameDataList[IdxGameState]
313302 let playerChoice = gameDataList[IdxPlayerChoice]
314303 let startedHeight = parseIntValue(gameDataList[IdxStartedHeight])
315304 let winAmt = parseIntValue(gameDataList[IdxWinAmt])
316305 let playerPubKey58 = gameDataList[IdxPlayerPubKey58]
317306 let playerAddress = addressFromPublicKey(fromBase58String(playerPubKey58))
318307 let winByTimeout = ((height - startedHeight) > RANDORACLETIMEFRAME)
319308 let decreasedReserves = DecreaseReservedAmt(gameId, winAmt)
320309 if ((gameState != STATESUBMITTED))
321310 then throw("Invalid game state for passed gameId")
322311 else if (winByTimeout)
323312 then {
324313 let randStr = getWinStr(playerChoice)
325314 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
326315 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
327316 }
328317 else {
329318 let randInt = GenerateRandInt(gameId, rsaSign)
330319 let randStr = RandToStr(randInt)
331320 if (IsPlayerWin(playerChoice, randStr))
332321 then {
333322 let newGameDataStr = FormatGameDataStr(STATEWON, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
334323 WinScriptSet(gameId, playerAddress, winAmt, newGameDataStr, winByTimeout, decreasedReserves)
335324 }
336325 else {
337326 let newGameDataStr = FormatGameDataStr(STATELOST, playerChoice, playerPubKey58, startedHeight, winAmt, randStr)
338327 WriteSet([DataEntry(gameId, newGameDataStr), decreasedReserves])
339328 }
340329 }
341330 }
342331
343332

github/deemru/w8io/169f3d6 
57.87 ms