tx · CG5krZ5MdMUimCrsQrFYJfncEC1miJQ3ruc6hY1ngV77

3N2VYC5XcuW5krZLuXurs2vFhYAmwiwq3xQ:  -0.01400000 Waves

2021.02.20 18:24 [1406630] smart account 3N2VYC5XcuW5krZLuXurs2vFhYAmwiwq3xQ > SELF 0.00000000 Waves

{ "type": 13, "id": "CG5krZ5MdMUimCrsQrFYJfncEC1miJQ3ruc6hY1ngV77", "fee": 1400000, "feeAssetId": null, "timestamp": 1613834706740, "version": 2, "chainId": 84, "sender": "3N2VYC5XcuW5krZLuXurs2vFhYAmwiwq3xQ", "senderPublicKey": "4PEWw3mZQrBc1au7QeTFtyDyHq1Kec71TYNDK6JQogiV", "proofs": [ "ymqtMnQ41xAJKa4prZ51XqpbixcKv63PTMdsvU8sS7qaakqStC56UUi8bgGFxy73hY6b5zYqLZPNaBYdRP3YH7m" ], "script": "base64:AAIDAAAAAAAAAA4IARIAEgASBgoECAgICAAAACsAAAAADXJzYVB1YmxpY0tleTEJAAJbAAAAAQIAAAGITUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFsNm91VVp5VXJ5VUcyTGxGMnVZUVhkYi9FNlVobFpBYnFsT0pVQ1hrZTRYM29zYXlhNjNiTlFlVU5QSzdtLzlRTjloRGl1bTRLa2lvOUYycitSOTJ2TWdXYWx1dll2aUZHSnc4VjhYTDh5aGNwa0tnWUpVUTB2ME1DYnBJOWM3aFNLUk54dmFJOWppa1lHeUdOU3NGZElUd2NYM2EweEptRGZ3Q3NzUDc2bUlBQzZ2WEROdVNjZXkrdjNualErNm8vN0FvdjhZRmlzWkxLbXhnWm52dVhESW45enBOaGlndGxJT1RLZVkxSTROWlE3ektEbEp6U2J6QlJTV1dhTlpBV0R2bHdGci9aUU9NTlEyNHBoS1ZtbmVQVEVWRkFTc3VtVWlJQkxYYlR3NzhiL1NZM2Jnejc5ZGh3OEExUHU1Tlc0WDloaWNybU5yMUV5WDM5VXNURFFJREFRQUIAAAAADXJzYVB1YmxpY0tleTIJAAJbAAAAAQIAAAGITUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFsNm91VVp5VXJ5VUcyTGxGMnVZUVhkYi9FNlVobFpBYnFsT0pVQ1hrZTRYM29zYXlhNjNiTlFlVU5QSzdtLzlRTjloRGl1bTRLa2lvOUYycitSOTJ2TWdXYWx1dll2aUZHSnc4VjhYTDh5aGNwa0tnWUpVUTB2ME1DYnBJOWM3aFNLUk54dmFJOWppa1lHeUdOU3NGZElUd2NYM2EweEptRGZ3Q3NzUDc2bUlBQzZ2WEROdVNjZXkrdjNualErNm8vN0FvdjhZRmlzWkxLbXhnWm52dVhESW45enBOaGlndGxJT1RLZVkxSTROWlE3ektEbEp6U2J6QlJTV1dhTlpBV0R2bHdGci9aUU9NTlEyNHBoS1ZtbmVQVEVWRkFTc3VtVWlJQkxYYlR3NzhiL1NZM2Jnejc5ZGh3OEExUHU1Tlc0WDloaWNybU5yMUV5WDM5VXNURFFJREFRQUIAAAAADXJzYVB1YmxpY0tleTMJAAJbAAAAAQIAAAGITUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFsNm91VVp5VXJ5VUcyTGxGMnVZUVhkYi9FNlVobFpBYnFsT0pVQ1hrZTRYM29zYXlhNjNiTlFlVU5QSzdtLzlRTjloRGl1bTRLa2lvOUYycitSOTJ2TWdXYWx1dll2aUZHSnc4VjhYTDh5aGNwa0tnWUpVUTB2ME1DYnBJOWM3aFNLUk54dmFJOWppa1lHeUdOU3NGZElUd2NYM2EweEptRGZ3Q3NzUDc2bUlBQzZ2WEROdVNjZXkrdjNualErNm8vN0FvdjhZRmlzWkxLbXhnWm52dVhESW45enBOaGlndGxJT1RLZVkxSTROWlE3ektEbEp6U2J6QlJTV1dhTlpBV0R2bHdGci9aUU9NTlEyNHBoS1ZtbmVQVEVWRkFTc3VtVWlJQkxYYlR3NzhiL1NZM2Jnejc5ZGh3OEExUHU1Tlc0WDloaWNybU5yMUV5WDM5VXNURFFJREFRQUIAAAAADWdhbWVQdWJsaWNLZXkJAAJZAAAAAQIAAAAsNFBFV3czbVpRckJjMWF1N1FlVEZ0eUR5SHExS2VjNzFUWU5ESzZKUW9naVYAAAAAC2dhbWVBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA1nYW1lUHVibGljS2V5AAAAAA5hZG1pblB1YmxpY0tleQEAAAAggzLkuJqUE4qL17LXPsNzT5/7nIlMqx/RpZeDMnz36GwAAAAADGFkbWluQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAOYWRtaW5QdWJsaWNLZXkAAAAABWRydW0xCQAETAAAAAICAAAAATYJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATQJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABNAkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATcJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAEyCQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE0BQAAAANuaWwAAAAABWRydW0yCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATQJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAExCQAETAAAAAICAAAAATYJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATQJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAE3CQAETAAAAAICAAAAATUJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAEzBQAAAANuaWwAAAAABWRydW0zCQAETAAAAAICAAAAATMJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAE1CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABNwkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABMwkABEwAAAACAgAAAAE2CQAETAAAAAICAAAAATQJAARMAAAAAgIAAAABMgkABEwAAAACAgAAAAEzCQAETAAAAAICAAAAATEJAARMAAAAAgIAAAABNgkABEwAAAACAgAAAAE0CQAETAAAAAICAAAAATIJAARMAAAAAgIAAAABMQkABEwAAAACAgAAAAE1CQAE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RGF0YUxpc3QAAAAAAAAAAAAEAAAACnBsYXllckFkZHIJAAGRAAAAAgUAAAALYmV0RGF0YUxpc3QAAAAAAAAAAAEEAAAACWJldEFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC2JldERhdGFMaXN0AAAAAAAAAAACBAAAAAhkcnVtMUludAkBAAAACHJzYVRvSW50AAAAAwUAAAAHc2lnbk1zZwUAAAAIcnNhU2lnbjEFAAAADXJzYVB1YmxpY0tleTEEAAAACGRydW0ySW50CQEAAAAIcnNhVG9JbnQAAAADBQAAAAdzaWduTXNnBQAAAAhyc2FTaWduMgUAAAANcnNhUHVibGljS2V5MgQAAAAIZHJ1bTNJbnQJAQAAAAhyc2FUb0ludAAAAAMFAAAAB3NpZ25Nc2cFAAAACHJzYVNpZ24zBQAAAA1yc2FQdWJsaWNLZXkzBAAAAAt0aHJlZUluQVJvdwkAASwAAAACCQABLAAAAAIJAAGRAAAAAgUAAAAFZHJ1bTEFAAAACGRydW0xSW50CQABkQAAAAIFAAAABWRydW0yBQAAAAhkcnVtMkludAkAAZEAAAACBQAAAAVkcnVtMwUAAAAIZHJ1bTNJbnQEAAAAD2VsZW1lbnRUb1N0cmluZwkAASwAAAACCQABLAAAAAIJAQAAAA9kcnVtSW50VG9TdHJpbmcAAAABBQAAAAhkcnVtMUludAkBAAAAD2RydW1JbnRUb1N0cmluZwAAAAEFAAAACGRydW0ySW50CQEAAAAPZHJ1bUludFRvU3RyaW5nAAAAAQUAAAAIZHJ1bTNJbnQEAAAACWFtb3VudFdvbgkAAGkAAAACCQAAaAAAAAIJAQAAABBkZWZpbmVNdWx0aXBsaWVyAAAAAQUAAAALdGhyZWVJbkFSb3cJAQAAAAx3YXZlc0JhbGFuY2UAAAABBQAAAAtnYW1lQWRkcmVzcwAAAAAAAAAAZAQAAAAHJG1hdGNoMAkBAAAADWdhbWVHZXRTdGF0dXMAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAABXN0YXRlBQAAAAckbWF0Y2gwAwkBAAAAAiE9AAAAAgUAAAAFc3RhdGUCAAAABkFDVElWRQkAAAIAAAABAgAAABRTTE9UX0dBTUVfTk9UX0FDVElWRQQAAAAHJG1hdGNoMQkBAAAAEGdhbWVHZXRCZXRTdGF0dXMAAAABBQAAAApwbGF5ZXJBZGRyAwkAAAEAAAACBQAAAAckbWF0Y2gxAgAAAAZTdHJpbmcEAAAADWdhbWVCZXRTdGF0dXMFAAAAByRtYXRjaDEDCQEAAAACIT0AAAACBQAAAA1nYW1lQmV0U3RhdHVzAgAAAANCRVQJAAACAAAAAQIAAAAfUExBQ0VfQV9CRVRfQkVGT1JFX1lPVV9DQU5fUExBWQMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAApwbGF5ZXJBZGRyCQAAAgAAAAECAAAAEk5PVF9DVVJSRU5UX1BMQVlFUgMJAQAAAAIhPQAAAAIFAAAACWFtb3VudFdvbgAAAAAAAAAAAAQAAAAHJG1hdGNoMgkBAAAADmFkZHJlc3NHZXRXaW5zAAAAAQUAAAAKcGxheWVyQWRkcgMJAAABAAAAAgUAAAAHJG1hdGNoMgIAAAADSW50BAAAAARXSU5TBQAAAAckbWF0Y2gyBAAAAAZuZXdXaW4JAABkAAAAAgUAAAAEV0lOUwAAAAAAAAAAAQMJAAAAAAAAAgUAAAALdGhyZWVJbkFSb3cCAAAAAzQ0NAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAAxnYW1lTGFiZWxCZXQAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAALVFJJUExFX0JBUl8FAAAACnBsYXllckFkZHICAAAAAV8JAAGkAAAAAQUAAAAJYmV0QW1vdW50AgAAAAdfV0FWRVNfCQABpAAAAAEFAAAABmhlaWdodAIAAAABXwkAAaQAAAABBQAAAAZuZXdXaW4CAAAAAV8JAAGRAAAAAgUAAAALYmV0RGF0YUxpc3QAAAAAAAAAAAYCAAAAAV8JAAGRAAAAAgUAAAALYmV0RGF0YUxpc3QAAAAAAAAAAAcCAAAAAV8FAAAAC3RocmVlSW5BUm93AgAAAAFfBQAAAA9lbGVtZW50VG9TdHJpbmcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABBhZGRyZXNzTGFiZWxXaW5zAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAABm5ld1dpbgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMZ2FtZUxhYmVsUm93CQABLAAAAAIJAAEsAAAAAgkAAaQAAAABAAAAAAAAAAAAAgAAAAFfBQAAAApwbGF5ZXJBZGRyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAApwbGF5ZXJBZGRyBQAAAAlhbW91bnRXb24FAAAABHVuaXQFAAAAA25pbAMJAABnAAAAAgUAAAAEV0lOUwAAAAAAAAAAyAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAAAxnYW1lTGFiZWxCZXQAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAGYmV0V2luBQAAAApwbGF5ZXJBZGRyAgAAAAFfCQABpAAAAAEFAAAACWJldEFtb3VudAIAAAAHX1dBVkVTXwkAAaQAAAABBQAAAAZoZWlnaHQCAAAAAV8JAAGkAAAAAQAAAAAAAAAAAAIAAAABXwkAAZEAAAACBQAAAAtiZXREYXRhTGlzdAAAAAAAAAAABgIAAAABXwkAAZEAAAACBQAAAAtiZXREYXRhTGlzdAAAAAAAAAAABwIAAAABXwUAAAALdGhyZWVJbkFSb3cCAAAAAV8FAAAAD2VsZW1lbnRUb1N0cmluZwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGFkZHJlc3NMYWJlbFdpbnMAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMZ2FtZUxhYmVsUm93CQABLAAAAAIJAAEsAAAAAgkAAaQAAAABAAAAAAAAAAAAAgAAAAFfBQAAAApwbGF5ZXJBZGRyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAApwbGF5ZXJBZGRyBQAAAAlhbW91bnRXb24FAAAABHVuaXQFAAAAA25pbAMDCQAAAAAAAAIFAAAACnBsYXllckFkZHIFAAAACXJvd1BsYXllcgkAAAAAAAACBQAAAANyb3cAAAAAAAAAAAUHCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAADGdhbWVMYWJlbEJldAAAAAEJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAZiZXRXaW4FAAAACnBsYXllckFkZHICAAAAAV8JAAGkAAAAAQUAAAAJYmV0QW1vdW50AgAAAAdfV0FWRVNfCQABpAAAAAEFAAAABmhlaWdodAIAAAABXwkAAaQAAAABBQAAAAZuZXdXaW4CAAAAAV8JAAGkAAAAAQAAAAAAAAAAAAIAAAABXwkAAZEAAAACBQAAAAtiZXREYXRhTGlzdAAAAAAAAAAABwIAAAABXwUAAAALdGhyZWVJbkFSb3cCAAAAAV8FAAAAD2VsZW1lbnRUb1N0cmluZwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEGFkZHJlc3NMYWJlbFdpbnMAAAABCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAAGbmV3V2luCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxnYW1lTGFiZWxSb3cJAAEsAAAAAgkAASwAAAACCQABpAAAAAEAAAAAAAAAAAACAAAAAV8FAAAACnBsYXllckFkZHIFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAEFAAAACnBsYXllckFkZHIFAAAACWFtb3VudFdvbgUAAAAEdW5pdAUAAAADbmlsCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAADGdhbWVMYWJlbEJldAAAAAEFAAAACnBsYXllckFkZHIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAABmJldFdpbgIAAAABXwUAAAAKcGxheWVyQWRkcgIAAAABXwkAAaQAAAABBQAAAAliZXRBbW91bnQCAAAAB19XQVZFU18JAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAFfCQABpAAAAAEFAAAABm5ld1dpbgIAAAABXwkAAaQAAAABBQAAAAZuZXdXaW4CAAAAAV8JAAGRAAAAAgUAAAALYmV0RGF0YUxpc3QAAAAAAAAAAAcCAAAAAV8FAAAAC3RocmVlSW5BUm93AgAAAAFfBQAAAA9lbGVtZW50VG9TdHJpbmcCAAAAAV8JAAGkAAAAAQUAAAAJYW1vdW50V29uCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAQYWRkcmVzc0xhYmVsV2lucwAAAAEJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAAZuZXdXaW4JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADGdhbWVMYWJlbFJvdwkAASwAAAACCQABLAAAAAIJAAGkAAAAAQUAAAAGbmV3V2luAgAAAAFfBQAAAApwbGF5ZXJBZGRyBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAHEBleHRyVXNlcihhZGRyZXNzRnJvbVN0cmluZykAAAABBQAAAApwbGF5ZXJBZGRyBQAAAAlhbW91bnRXb24FAAAABHVuaXQFAAAAA25pbAkAAAIAAAABAgAAABdJTklUX1dJTjphZGRyZXNzR2V0V2lucwQAAAAHJG1hdGNoMgkBAAAAD2FkZHJlc3NHZXRMb3NlcwAAAAEFAAAACnBsYXllckFkZHIDCQAAAQAAAAIFAAAAByRtYXRjaDICAAAAA0ludAQAAAAFTE9TRVMFAAAAByRtYXRjaDIEAAAAB25ld0xvc2UJAABkAAAAAgUAAAAFTE9TRVMAAAAAAAAAAAEDCQAAZwAAAAIFAAAABUxPU0VTAAAAAAAAAAAFCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAMZ2FtZUxhYmVsQmV0AAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAHYmV0TG9zZQUAAAAKcGxheWVyQWRkcgIAAAABXwkAAaQAAAABBQAAAAliZXRBbW91bnQCAAAAB19XQVZFU18JAAGkAAAAAQUAAAAGaGVpZ2h0AgAAAAFfCQABkQAAAAIFAAAAC2JldERhdGFMaXN0AAAAAAAAAAAFAgAAAAFfCQABkQAAAAIFAAAAC2JldERhdGFMaXN0AAAAAAAAAAAGAgAAAANfMF8FAAAAC3RocmVlSW5BUm93AgAAAAFfBQAAAA9lbGVtZW50VG9TdHJpbmcJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABFhZGRyZXNzTGFiZWxMb3NlcwAAAAEJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyAAAAAAAAAAAACQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxnYW1lTGFiZWxSb3cJAAEsAAAAAgkAASwAAAACCQABpAAAAAEAAAAAAAAAAAACAAAAAV8FAAAACnBsYXllckFkZHIFAAAAA25pbAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAADGdhbWVMYWJlbEJldAAAAAEJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAdiZXRMb3NlBQAAAApwbGF5ZXJBZGRyAgAAAAFfCQABpAAAAAEFAAAACWJldEFtb3VudAIAAAAHX1dBVkVTXwkAAaQAAAABBQAAAAZoZWlnaHQCAAAAAV8JAAGRAAAAAgUAAAALYmV0RGF0YUxpc3QAAAAAAAAAAAUCAAAAAV8JAAGRAAAAAgUAAAALYmV0RGF0YUxpc3QAAAAAAAAAAAYCAAAAAV8JAAGkAAAAAQUAAAAHbmV3TG9zZQIAAAABXwUAAAALdGhyZWVJbkFSb3cCAAAAAV8FAAAAD2VsZW1lbnRUb1N0cmluZwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEWFkZHJlc3NMYWJlbExvc2VzAAAAAQkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAB25ld0xvc2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADGdhbWVMYWJlbFJvdwkAASwAAAACCQABLAAAAAIJAAGkAAAAAQUAAAAHbmV3TG9zZQIAAAABXwUAAAAKcGxheWVyQWRkcgUAAAADbmlsCQAAAgAAAAECAAAACklOSVRfTE9TRVMJAAACAAAAAQIAAAAKQkVUX1BMQUNFRAkAAAIAAAABAgAAAApJTklUX0VSUk9SAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAMJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA1nYW1lUHVibGljS2V5BAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAAAAAnR4BQAAAAckbWF0Y2gwBgcH6HwejA==", "height": 1406630, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G9TkojrzyfTAngB7m69qMxaNVZQV1bRkkVcm8xfbkiM7 Next: none Diff:
OldNewDifferences
161161
162162
163163 @Callable(i)
164-func initGame () = if ((i.callerPublicKey != adminPublicKey))
164+func initSlotGame () = if ((i.callerPublicKey != adminPublicKey))
165165 then throw("initGame_FORBBIDEN")
166166 else match gameGetCounter() {
167167 case GAMESCOUNTER: Int =>
173173
174174
175175 @Callable(i)
176-func makeBet () = {
176+func placeBet () = {
177177 let playerAddress = extract(i.caller)
178178 let pmt = extract(i.payment)
179179 let betAmount = pmt.amount
185185 else match gameGetCounter() {
186186 case GAMESCOUNTER: Int =>
187187 if (!(pmtAmtCorrect))
188- then throw("MAKEBET:WRONG_BET_AMOUNT")
188+ then throw("PLACEBET:_WRONG_BET_AMOUNT")
189189 else {
190190 let newGameCounter = (GAMESCOUNTER + 1)
191- match gameGetBetStatus(toString(playerAddress)) {
192- case betStatus: String =>
193- if ((betStatus != "PLAYED"))
194- then throw("COMPLETE_ PREVIOUS_GAME")
195- else WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
191+ match addressGetWins(toString(playerAddress)) {
192+ case WINS: Int =>
193+ if ((WINS >= 0))
194+ then match gameGetBetStatus(toString(playerAddress)) {
195+ case betStatus: String =>
196+ if ((betStatus != "PLAYED"))
197+ then throw("COMPLETE_ PREVIOUS_GAME")
198+ else WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0"))])
199+ case _ =>
200+ WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0"))])
201+ }
202+ else throw("BAD_WIN_INIT")
196203 case _ =>
197- WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
204+ match gameGetBetStatus(toString(playerAddress)) {
205+ case betStatus: String =>
206+ if ((betStatus != "PLAYED"))
207+ then throw("COMPLETE_ PREVIOUS_GAME")
208+ else WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
209+ case _ =>
210+ WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
211+ }
198212 }
199213 }
200214 case _ =>
232246 then throw("PLACE_A_BET_BEFORE_YOU_CAN_PLAY")
233247 else if ((i.caller != addressFromStringValue(playerAddr)))
234248 then throw("NOT_CURRENT_PLAYER")
235- else if ((amountWon == 0))
249+ else if ((amountWon != 0))
236250 then match addressGetWins(playerAddr) {
237251 case WINS: Int =>
238252 let newWin = (WINS + 1)
244258 then (row == 5)
245259 else false)
246260 then ScriptResult(WriteSet([DataEntry(gameLabelBet(toString(i.caller)), (((((((((((((((betWin + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(newWin)) + "_") + toString(0)) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString)), DataEntry(addressLabelWins(toString(i.caller)), newWin), DataEntry(gameLabelRow, ((toString(0) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
247- else ScriptResult(WriteSet([DataEntry(gameLabelBet(playerAddr), ((((((((((((((((("PASSED_" + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(newWin)) + "_") + toString(newWin)) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString) + "_") + toString(amountWon))), DataEntry(addressLabelWins(toString(i.caller)), newWin), DataEntry(gameLabelRow, ((toString(newWin) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
261+ else ScriptResult(WriteSet([DataEntry(gameLabelBet(playerAddr), ((((((((((((((((((betWin + "_") + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(newWin)) + "_") + toString(newWin)) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString) + "_") + toString(amountWon))), DataEntry(addressLabelWins(toString(i.caller)), newWin), DataEntry(gameLabelRow, ((toString(newWin) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
248262 case _ =>
249263 throw("INIT_WIN:addressGetWins")
250264 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let rsaPublicKey1 = fromBase64String("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6ouUZyUryUG2LlF2uYQXdb/E6UhlZAbqlOJUCXke4X3osaya63bNQeUNPK7m/9QN9hDium4Kkio9F2r+R92vMgWaluvYviFGJw8V8XL8yhcpkKgYJUQ0v0MCbpI9c7hSKRNxvaI9jikYGyGNSsFdITwcX3a0xJmDfwCssP76mIAC6vXDNuScey+v3njQ+6o/7Aov8YFisZLKmxgZnvuXDIn9zpNhigtlIOTKeY1I4NZQ7zKDlJzSbzBRSWWaNZAWDvlwFr/ZQOMNQ24phKVmnePTEVFASsumUiIBLXbTw78b/SY3bgz79dhw8A1Pu5NW4X9hicrmNr1EyX39UsTDQIDAQAB")
55
66 let rsaPublicKey2 = fromBase64String("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6ouUZyUryUG2LlF2uYQXdb/E6UhlZAbqlOJUCXke4X3osaya63bNQeUNPK7m/9QN9hDium4Kkio9F2r+R92vMgWaluvYviFGJw8V8XL8yhcpkKgYJUQ0v0MCbpI9c7hSKRNxvaI9jikYGyGNSsFdITwcX3a0xJmDfwCssP76mIAC6vXDNuScey+v3njQ+6o/7Aov8YFisZLKmxgZnvuXDIn9zpNhigtlIOTKeY1I4NZQ7zKDlJzSbzBRSWWaNZAWDvlwFr/ZQOMNQ24phKVmnePTEVFASsumUiIBLXbTw78b/SY3bgz79dhw8A1Pu5NW4X9hicrmNr1EyX39UsTDQIDAQAB")
77
88 let rsaPublicKey3 = fromBase64String("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6ouUZyUryUG2LlF2uYQXdb/E6UhlZAbqlOJUCXke4X3osaya63bNQeUNPK7m/9QN9hDium4Kkio9F2r+R92vMgWaluvYviFGJw8V8XL8yhcpkKgYJUQ0v0MCbpI9c7hSKRNxvaI9jikYGyGNSsFdITwcX3a0xJmDfwCssP76mIAC6vXDNuScey+v3njQ+6o/7Aov8YFisZLKmxgZnvuXDIn9zpNhigtlIOTKeY1I4NZQ7zKDlJzSbzBRSWWaNZAWDvlwFr/ZQOMNQ24phKVmnePTEVFASsumUiIBLXbTw78b/SY3bgz79dhw8A1Pu5NW4X9hicrmNr1EyX39UsTDQIDAQAB")
99
1010 let gamePublicKey = fromBase58String("4PEWw3mZQrBc1au7QeTFtyDyHq1Kec71TYNDK6JQogiV")
1111
1212 let gameAddress = addressFromPublicKey(gamePublicKey)
1313
1414 let adminPublicKey = base58'9q9RHvinFqVkB47ZiRgEFtRPdV5zCvG2JZrXxFMYU2ou'
1515
1616 let adminAddress = addressFromPublicKey(adminPublicKey)
1717
1818 let drum1 = ["6", "1", "5", "4", "3", "2", "1", "3", "5", "2", "4", "1", "7", "3", "2", "3", "1", "4", "1", "3", "5", "2", "1", "4", "2", "6", "5", "2", "1", "4"]
1919
2020 let drum2 = ["1", "3", "4", "2", "3", "5", "1", "6", "4", "2", "1", "1", "4", "2", "1", "6", "3", "4", "1", "2", "5", "4", "1", "5", "3", "2", "7", "5", "1", "3"]
2121
2222 let drum3 = ["3", "2", "5", "2", "7", "4", "1", "3", "6", "4", "2", "3", "1", "6", "4", "2", "1", "5", "2", "5", "1", "3", "7", "1", "2", "6", "4", "1", "3", "1"]
2323
2424 let stateAcc = "ACCEPTED"
2525
2626 let betPlaced = "PENDING"
2727
2828 let betWin = "WON"
2929
3030 let betLose = "LOST"
3131
3232 let gameTimeFrame = 3
3333
3434 let wavesId = unit
3535
3636 let wavesMinAmt = 20000000
3737
3838 let wavesMaxAmt = (wavesMinAmt * 10)
3939
4040 let gameLabelCounter = "GAMESCOUNTER"
4141
4242 let gameLabel = (toString(gameAddress) + "_GAME_ADDRESS")
4343
4444 let gameLabelStatus = (("G_" + toString(gameAddress)) + "_STATUS")
4545
4646 let gameLabelRow = (("R_" + toString(gameAddress)) + "_ROW_WIN/LOSE")
4747
4848 func gameGetCounter () = getInteger(this, gameLabelCounter)
4949
5050
5151 func gameGet () = getString(this, gameLabel)
5252
5353
5454 func gameGetStatus () = getString(this, gameLabelStatus)
5555
5656
5757 func gameGetRow () = getString(this, gameLabelRow)
5858
5959
6060 func gameLabelBetStatus (playerAddr) = (playerAddr + "_BET_STATUS")
6161
6262
6363 func gameLabelBet (playerAddr) = (playerAddr + "_BETDATA")
6464
6565
6666 func gameGetBetStatus (playerAddr) = getString(this, gameLabelBetStatus(playerAddr))
6767
6868
6969 func gameGetBet (playerAddr) = getString(this, gameLabelBet(playerAddr))
7070
7171
7272 func addressLabelAmount (addr) = (("B_" + addr) + "_AMOUNT")
7373
7474
7575 func addressLabelWins (addr) = (("B_" + addr) + "_WINS")
7676
7777
7878 func addressLabelLoses (addr) = (("B_" + addr) + "_LOSES")
7979
8080
8181 func addressGetAmount (addr) = getInteger(this, addressLabelAmount(addr))
8282
8383
8484 func addressGetWins (addr) = getInteger(this, addressLabelWins(addr))
8585
8686
8787 func addressGetLoses (addr) = getInteger(this, addressLabelLoses(addr))
8888
8989
9090 func gameGetData () = {
9191 let gameData = gameGet()
9292 let a = match gameData {
9393 case a: String =>
9494 a
9595 case _ =>
9696 throw("GAME_DATA_ERROR")
9797 }
9898 split(a, "_")
9999 }
100100
101101
102102 func gameGetRowData () = {
103103 let gameRowData = gameGetRow()
104104 let a = match gameRowData {
105105 case a: String =>
106106 a
107107 case _ =>
108108 throw("GAME_DATA_ERROR")
109109 }
110110 split(a, "_")
111111 }
112112
113113
114114 func gameGetBetData (playerAddr) = {
115115 let gameBetData = gameGetBet(playerAddr)
116116 let a = match gameBetData {
117117 case a: String =>
118118 a
119119 case _ =>
120120 throw("BET_DATA_ERROR")
121121 }
122122 split(a, "_")
123123 }
124124
125125
126126 func pmtAmtCheck (betAmount) = if (if ((betAmount >= wavesMinAmt))
127127 then (wavesMaxAmt >= betAmount)
128128 else false)
129129 then true
130130 else throw("Bet amount is not in range")
131131
132132
133133 func rsaToInt (msg,rsaSign,rsaPublicKey) = {
134134 let rsaCheck = rsaVerify(SHA256, toBytes(msg), fromBase64String(rsaSign), rsaPublicKey)
135135 if (rsaCheck)
136136 then (toInt(sha256(fromBase64String(rsaSign))) % 29)
137137 else throw("Invalid RSA Signature")
138138 }
139139
140140
141141 func drumIntToString (drumInt) = if ((10 > drumInt))
142142 then ("0" + toString(drumInt))
143143 else toString(drumInt)
144144
145145
146146 func defineMultiplier (threeInARow) = if ((threeInARow == "777"))
147147 then 100
148148 else if ((threeInARow == "666"))
149149 then 20
150150 else if ((threeInARow == "555"))
151151 then 14
152152 else if ((threeInARow == "444"))
153153 then 10
154154 else if ((threeInARow == "333"))
155155 then 7
156156 else if ((threeInARow == "222"))
157157 then 5
158158 else if ((threeInARow == "111"))
159159 then 2
160160 else 0
161161
162162
163163 @Callable(i)
164-func initGame () = if ((i.callerPublicKey != adminPublicKey))
164+func initSlotGame () = if ((i.callerPublicKey != adminPublicKey))
165165 then throw("initGame_FORBBIDEN")
166166 else match gameGetCounter() {
167167 case GAMESCOUNTER: Int =>
168168 throw("INIT_ALREADY_DONE")
169169 case _ =>
170170 WriteSet([DataEntry(gameLabelCounter, 0), DataEntry(gameLabelStatus, "ACTIVE"), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelRow, ("0_" + toString(gameAddress)))])
171171 }
172172
173173
174174
175175 @Callable(i)
176-func makeBet () = {
176+func placeBet () = {
177177 let playerAddress = extract(i.caller)
178178 let pmt = extract(i.payment)
179179 let betAmount = pmt.amount
180180 let pmtAmtCorrect = pmtAmtCheck(betAmount)
181181 match gameGetStatus() {
182182 case state: String =>
183183 if ((state != "ACTIVE"))
184184 then throw("SLOT_GAME_NOT_INITIALIZED")
185185 else match gameGetCounter() {
186186 case GAMESCOUNTER: Int =>
187187 if (!(pmtAmtCorrect))
188- then throw("MAKEBET:WRONG_BET_AMOUNT")
188+ then throw("PLACEBET:_WRONG_BET_AMOUNT")
189189 else {
190190 let newGameCounter = (GAMESCOUNTER + 1)
191- match gameGetBetStatus(toString(playerAddress)) {
192- case betStatus: String =>
193- if ((betStatus != "PLAYED"))
194- then throw("COMPLETE_ PREVIOUS_GAME")
195- else WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
191+ match addressGetWins(toString(playerAddress)) {
192+ case WINS: Int =>
193+ if ((WINS >= 0))
194+ then match gameGetBetStatus(toString(playerAddress)) {
195+ case betStatus: String =>
196+ if ((betStatus != "PLAYED"))
197+ then throw("COMPLETE_ PREVIOUS_GAME")
198+ else WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0"))])
199+ case _ =>
200+ WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0"))])
201+ }
202+ else throw("BAD_WIN_INIT")
196203 case _ =>
197- WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
204+ match gameGetBetStatus(toString(playerAddress)) {
205+ case betStatus: String =>
206+ if ((betStatus != "PLAYED"))
207+ then throw("COMPLETE_ PREVIOUS_GAME")
208+ else WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
209+ case _ =>
210+ WriteSet([DataEntry(gameLabelCounter, newGameCounter), DataEntry(gameLabel, ((stateAcc + "_WAVES_") + toString(height))), DataEntry(gameLabelBetStatus(toString(playerAddress)), "BET"), DataEntry(addressLabelAmount(toString(playerAddress)), betAmount), DataEntry(gameLabelBet(toString(playerAddress)), (((((((betPlaced + "_") + toString(playerAddress)) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_0_0_0_0_0")), DataEntry(addressLabelWins(toString(playerAddress)), 0), DataEntry(addressLabelLoses(toString(playerAddress)), 0)])
211+ }
198212 }
199213 }
200214 case _ =>
201215 throw("INIT_NEEDED_FOR_COUNT")
202216 }
203217 case _ =>
204218 throw("INIT_ERROR")
205219 }
206220 }
207221
208222
209223
210224 @Callable(i)
211225 func playGame (signMsg,rsaSign1,rsaSign2,rsaSign3) = {
212226 let rowDatatList = gameGetRowData()
213227 let row = parseIntValue(rowDatatList[0])
214228 let rowPlayer = rowDatatList[1]
215229 let betDataList = gameGetBetData(toString(i.caller))
216230 let betStatus = betDataList[0]
217231 let playerAddr = betDataList[1]
218232 let betAmount = parseIntValue(betDataList[2])
219233 let drum1Int = rsaToInt(signMsg, rsaSign1, rsaPublicKey1)
220234 let drum2Int = rsaToInt(signMsg, rsaSign2, rsaPublicKey2)
221235 let drum3Int = rsaToInt(signMsg, rsaSign3, rsaPublicKey3)
222236 let threeInARow = ((drum1[drum1Int] + drum2[drum2Int]) + drum3[drum3Int])
223237 let elementToString = ((drumIntToString(drum1Int) + drumIntToString(drum2Int)) + drumIntToString(drum3Int))
224238 let amountWon = ((defineMultiplier(threeInARow) * wavesBalance(gameAddress)) / 100)
225239 match gameGetStatus() {
226240 case state: String =>
227241 if ((state != "ACTIVE"))
228242 then throw("SLOT_GAME_NOT_ACTIVE")
229243 else match gameGetBetStatus(playerAddr) {
230244 case gameBetStatus: String =>
231245 if ((gameBetStatus != "BET"))
232246 then throw("PLACE_A_BET_BEFORE_YOU_CAN_PLAY")
233247 else if ((i.caller != addressFromStringValue(playerAddr)))
234248 then throw("NOT_CURRENT_PLAYER")
235- else if ((amountWon == 0))
249+ else if ((amountWon != 0))
236250 then match addressGetWins(playerAddr) {
237251 case WINS: Int =>
238252 let newWin = (WINS + 1)
239253 if ((threeInARow == "444"))
240254 then ScriptResult(WriteSet([DataEntry(gameLabelBet(toString(i.caller)), ((((((((((((((("TRIPLE_BAR_" + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(newWin)) + "_") + betDataList[6]) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString)), DataEntry(addressLabelWins(toString(i.caller)), newWin), DataEntry(gameLabelRow, ((toString(0) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
241255 else if ((WINS >= 200))
242256 then ScriptResult(WriteSet([DataEntry(gameLabelBet(toString(i.caller)), (((((((((((((((betWin + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(0)) + "_") + betDataList[6]) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString)), DataEntry(addressLabelWins(toString(i.caller)), 0), DataEntry(gameLabelRow, ((toString(0) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
243257 else if (if ((playerAddr == rowPlayer))
244258 then (row == 5)
245259 else false)
246260 then ScriptResult(WriteSet([DataEntry(gameLabelBet(toString(i.caller)), (((((((((((((((betWin + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(newWin)) + "_") + toString(0)) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString)), DataEntry(addressLabelWins(toString(i.caller)), newWin), DataEntry(gameLabelRow, ((toString(0) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
247- else ScriptResult(WriteSet([DataEntry(gameLabelBet(playerAddr), ((((((((((((((((("PASSED_" + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(newWin)) + "_") + toString(newWin)) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString) + "_") + toString(amountWon))), DataEntry(addressLabelWins(toString(i.caller)), newWin), DataEntry(gameLabelRow, ((toString(newWin) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
261+ else ScriptResult(WriteSet([DataEntry(gameLabelBet(playerAddr), ((((((((((((((((((betWin + "_") + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + toString(newWin)) + "_") + toString(newWin)) + "_") + betDataList[7]) + "_") + threeInARow) + "_") + elementToString) + "_") + toString(amountWon))), DataEntry(addressLabelWins(toString(i.caller)), newWin), DataEntry(gameLabelRow, ((toString(newWin) + "_") + playerAddr))]), TransferSet([ScriptTransfer(addressFromStringValue(playerAddr), amountWon, unit)]))
248262 case _ =>
249263 throw("INIT_WIN:addressGetWins")
250264 }
251265 else match addressGetLoses(playerAddr) {
252266 case LOSES: Int =>
253267 let newLose = (LOSES + 1)
254268 if ((LOSES >= 5))
255269 then WriteSet([DataEntry(gameLabelBet(toString(i.caller)), (((((((((((((betLose + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + betDataList[5]) + "_") + betDataList[6]) + "_0_") + threeInARow) + "_") + elementToString)), DataEntry(addressLabelLoses(toString(i.caller)), 0), DataEntry(gameLabelRow, ((toString(0) + "_") + playerAddr))])
256270 else WriteSet([DataEntry(gameLabelBet(toString(i.caller)), (((((((((((((((betLose + playerAddr) + "_") + toString(betAmount)) + "_WAVES_") + toString(height)) + "_") + betDataList[5]) + "_") + betDataList[6]) + "_") + toString(newLose)) + "_") + threeInARow) + "_") + elementToString)), DataEntry(addressLabelLoses(toString(i.caller)), newLose), DataEntry(gameLabelRow, ((toString(newLose) + "_") + playerAddr))])
257271 case _ =>
258272 throw("INIT_LOSES")
259273 }
260274 case _ =>
261275 throw("BET_PLACED")
262276 }
263277 case _ =>
264278 throw("INIT_ERROR")
265279 }
266280 }
267281
268282
269283 @Verifier(tx)
270284 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], gamePublicKey))
271285 then match tx {
272286 case tx: SetScriptTransaction =>
273287 true
274288 case _ =>
275289 false
276290 }
277291 else false
278292

github/deemru/w8io/873ac7e 
48.77 ms