tx · ETyRhAfQpKqLjZ9MzDa8LYc9HJMiPp55Fk2CP2yLHnYJ

3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ:  -0.02000000 Waves

2019.12.10 16:22 [802741] smart account 3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ > SELF 0.00000000 Waves

{ "type": 13, "id": "ETyRhAfQpKqLjZ9MzDa8LYc9HJMiPp55Fk2CP2yLHnYJ", "fee": 2000000, "feeAssetId": null, "timestamp": 1575984123966, "version": 1, "sender": "3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ", "senderPublicKey": "5hFJATDiJD8dJsn37rMkyq5azHhoGyy3mSuG98wX4q4S", "proofs": [ "27RT8za6rSwpSAg8KaXAqZnyWf7SWziT9u6sURwTGFUT8Cb9ruBqUwmKmKtB9PWcmnaLwuGVyyEVD3s9aGmYVFeR" ], "script": "base64:AAIDAAAAAAAAAA4IARIAEgMKAQESAwoBAQAAACcAAAAAB1dBVkVMRVQJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoAAAAAAVNUlRFQwAAAAAAAAAAZAAAAAAJbWF4Um91bmRzAAAAAAAAAAA8AAAAAAdwbXRTdGVwCQAAaAAAAAIAAAAAAAAAAGQFAAAABU1SVEVDAAAAABBwYXJ0eU93bmVyUHViS2V5CQACWQAAAAECAAAALDVpRGsydllVSDV3OW52S2pTcXZuWGRIR3NZUVc0TWFoUTVFdVVrblhaTE1BAAAAABFwYXJ0eU93bmVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAQcGFydHlPd25lclB1YktleQAAAAAMcGFydHlBZGRyZXNzCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAECAAAALDZ0NlBIRUZ4N0JBeWg5cWNrcWNEZWFqVVZOaUg2V05zeUhnZ1hrTHgyN0pvAAAAAA53aXRoZHJhd1BlcmlvZAAAAAAAAACowAAAAAAGd2luQW10CQAAaAAAAAIAAAAAAAAAAfQFAAAAB1dBVkVMRVQAAAAACmhlaWdodFN0ZXAAAAAAAAAAAA8AAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAAAAG9YYAAAAAA5ibG9ja3NQZXJSb3VuZAAAAAAAAAAFtAAAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAAAAABaoAAAAAA01SVAkAAlkAAAABAgAAACw0dUs4aTRUaFJHYmVoRU53YTZNeHlMdHhBakFvMVJqOWZkdWJvckdFeGFyQwAAAAAGTWluRkVFCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAHV0FWRUxFVAAAAAAAAAAD6AAAAAAMSWR4V2luSGVpZ2h0AAAAAAAAAAAAAAAAAA1JZHhXaW5BZGRyZXNzAAAAAAAAAAABAAAAAAxJZHhXaW5QdWJLZXkAAAAAAAAAAAIAAAAADUlkeFdpdGhkcmF3SWQAAAAAAAAAAAMBAAAAFWdldFJvdW5kRGF0YUtleU9yRmFpbAAAAAEAAAAFcm91bmQDCQAAZgAAAAIAAAAAAAAAAAAFAAAABXJvdW5kCQAAAgAAAAECAAAAFEludmFsaWQgcm91bmQgbnVtYmVyCQABLAAAAAICAAAABXJvdW5kCQABpAAAAAEFAAAABXJvdW5kAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEAAAAFcm91bmQEAAAADHJvdW5kRGF0YU9wdAkABB0AAAACBQAAAAxwYXJ0eUFkZHJlc3MJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMcm91bmREYXRhU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADHJvdW5kRGF0YU9wdAkBAAAAB2V4dHJhY3QAAAABBQAAAAxyb3VuZERhdGFPcHQCAAAAAAMJAQAAAAIhPQAAAAIFAAAADHJvdW5kRGF0YVN0cgIAAAAACQAEtQAAAAIFAAAADHJvdW5kRGF0YVN0cgIAAAABXwkABEwAAAACAgAAAAEwCQAETAAAAAIJAAGkAAAAAQUAAAAHcG10U3RlcAkABEwAAAACAgAAAAE/CQAETAAAAAICAAAAAT8JAARMAAAAAgIAAAABPwkABEwAAAACAgAAAAEwBQAAAANuaWwBAAAAD3JlYWRTaGFyZWRTdGF0ZQAAAAAEAAAADnNoYXJlZFN0YXRlT3B0CQAEHQAAAAIFAAAADHBhcnR5QWRkcmVzcwIAAAARUm91bmRzU2hhcmVkU3RhdGUEAAAADnNoYXJlZFN0YXRlU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0CQEAAAAHZXh0cmFjdAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0AgAAAAADCQEAAAACIT0AAAACBQAAAA5zaGFyZWRTdGF0ZVN0cgIAAAAACQAEtQAAAAIFAAAADnNoYXJlZFN0YXRlU3RyAgAAAAFfCQAETAAAAAICAAAAAT8JAARMAAAAAgIAAAABMAkABEwAAAACAgAAAAE/BQAAAANuaWwBAAAAE3dyaXRlU2V0T2ZSb3VuZERhdGEAAAAGAAAABHR5cGUAAAAFcm91bmQAAAAMbmV3V2luSGVpZ2h0AAAAEG5ld1dpbkFkZHJlc3NTdHIAAAAPbmV3V2luUHViS2V5U3RyAAAADHdpdGhkcmF3SWQ1OAQAAAAPbmV3V2luSGVpZ2h0U3RyCQABpAAAAAEFAAAADG5ld1dpbkhlaWdodAQAAAAJcm91bmREYXRhCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldFJvdW5kRGF0YUtleU9yRmFpbAAAAAEFAAAABXJvdW5kCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA9uZXdXaW5IZWlnaHRTdHICAAAAAV8FAAAAEG5ld1dpbkFkZHJlc3NTdHICAAAAAV8FAAAAD25ld1dpblB1YktleVN0cgIAAAABXwUAAAAMd2l0aGRyYXdJZDU4AwkAAAAAAAACBQAAAAR0eXBlAgAAAARNT1ZFBAAAAA1hZGRyZXNzTGVuZ3RoCQABMQAAAAEFAAAAEG5ld1dpbkFkZHJlc3NTdHIEAAAAC3NoYXJlZFN0YXRlCQEAAAAPcmVhZFNoYXJlZFN0YXRlAAAAAAQAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyCQABpAAAAAEJAABkAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC3NoYXJlZFN0YXRlAAAAAAAAAAABAAAAAAAAAAABBAAAABNjdXJyTGFzdFBsYXllcnNBZGRyAwkAAAAAAAACCQABkQAAAAIFAAAAC3NoYXJlZFN0YXRlAAAAAAAAAAACAgAAAAE/AgAAAAAJAAGRAAAAAgUAAAALc2hhcmVkU3RhdGUAAAAAAAAAAAIEAAAAEm5ld0xhc3RQbGF5ZXJzQWRkcgMDCQEAAAACIT0AAAACBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyAgAAAAAJAABmAAAAAgkAATEAAAABBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQAAaAAAAAIJAABkAAAAAgUAAAANYWRkcmVzc0xlbmd0aAAAAAAAAAAAAQAAAAAAAAAACgcJAAEsAAAAAgkAASwAAAACAgAAAAEtBQAAABBuZXdXaW5BZGRyZXNzU3RyCQEAAAAJZHJvcFJpZ2h0AAAAAgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAGQAAAACBQAAAA1hZGRyZXNzTGVuZ3RoAAAAAAAAAAABCQABLAAAAAIJAAEsAAAAAgIAAAABLQUAAAAQbmV3V2luQWRkcmVzc1N0cgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAIV0lUSERSQVcJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgUAAAAJcm91bmREYXRhBQAAAANuaWwJAAACAAAAAQkAASwAAAACAgAAADBVbnN1cHBvcnRlZCB0eXBlIGluIHdyaXRlU2V0T2ZSb3VuZERhdGEgbWV0aG9kOiAFAAAABHR5cGUAAAAABm9mZnNldAkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAAxjdXJyUm91bmROdW0DCQAAZwAAAAIFAAAABm9mZnNldAAAAAAAAAAAAAkAAGkAAAACBQAAAAZvZmZzZXQFAAAADmJsb2Nrc1BlclJvdW5kCQAAAgAAAAEJAAEsAAAAAgIAAAAtUGxlYXNlIGRvIG5vdCBodXJyeS4gTVJUIHBhcnR5IHdpbGwgc3RhcnQgb24gCQABpAAAAAEFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAA9jdXJyUm91bmRIZWlnaHQJAABqAAAAAgUAAAAGb2Zmc2V0BQAAAA5ibG9ja3NQZXJSb3VuZAAAAAAUY3VyclJvdW5kSGVpZ2h0U3RhcnQJAABkAAAAAgkAAGgAAAACBQAAAAxjdXJyUm91bmROdW0FAAAADmJsb2Nrc1BlclJvdW5kBQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQJAABkAAAAAgUAAAAUY3VyclJvdW5kSGVpZ2h0U3RhcnQFAAAAFGJsb2Nrc1BlckNvbXBldGl0aW9uAAAAABFjdXJyUm91bmREYXRhTGlzdAkBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQUAAAAMY3VyclJvdW5kTnVtAAAAAA1jdXJyV2luSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARY3VyclJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAAAAAANY3Vyck1pblBtdEFtdAUAAAAHcG10U3RlcAEAAAANaXNXaW5CeUhlaWdodAAAAAEAAAABaAkAAGcAAAACBQAAAAZoZWlnaHQFAAAAAWgAAAAAHGF0TGVhc3RPbmVNb3ZlSW5Sb3VuZFByZXNlbnQJAABmAAAAAgUAAAANY3VycldpbkhlaWdodAUAAAAUY3VyclJvdW5kSGVpZ2h0U3RhcnQAAAAAFmZpcnN0Q291bnRkb3duRmluaXNoZWQDCQAAAAAAAAIFAAAADWN1cnJXaW5IZWlnaHQAAAAAAAAAAAAJAQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQkAAGQAAAACBQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAUAAAAKaGVpZ2h0U3RlcAcAAAAADGlzUGF1c2VCeVdpbgMJAQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQUAAAANY3VycldpbkhlaWdodAUAAAAcYXRMZWFzdE9uZU1vdmVJblJvdW5kUHJlc2VudAcAAAAADWlzUGF1c2VCeVRpbWUDCQAAZgAAAAIFAAAAD2N1cnJSb3VuZEhlaWdodAUAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24GBQAAABZmaXJzdENvdW50ZG93bkZpbmlzaGVkAAAAAAdpc1BhdXNlAwUAAAAMaXNQYXVzZUJ5V2luBgUAAAANaXNQYXVzZUJ5VGltZQAAAAANaXNDb21wZXRpdGlvbgkBAAAAASEAAAABBQAAAAdpc1BhdXNlAQAAAARtb3ZlAAAAAQAAAAFwAwkBAAAAASEAAAABBQAAAA1pc0NvbXBldGl0aW9uCQAAAgAAAAECAAAAAW8EAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAADGN1cnJSb3VuZE51bQQAAAAMd2lubmVyUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5AwkAAAAAAAACBQAAAAFwBQAAAAx3aW5uZXJQdWJLZXkJAAACAAAAAQIAAAABPQMJAQAAAAIhPQAAAAIFAAAADWN1cnJXaW5IZWlnaHQJAABkAAAAAgUAAAAGaGVpZ2h0AAAAAAAAAAABCQAAAgAAAAECAAAAASEGAAAAAwAAAANpbnYBAAAABW1vdmVyAAAAAAQAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAkAAGQAAAACBQAAAAZoZWlnaHQFAAAACmhlaWdodFN0ZXAEAAAADG5ld1dpbkhlaWdodAMJAABnAAAAAgUAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAUAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQFAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kBQAAABZvdmVyZmxvd2VkTmV3V2luSGVpZ2h0BAAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAAACAAAAAQIAAAA6UGxlYXNlIGF0dGFjaCBwYXltZW50IHdpdGggTVJUIHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAABnAAAAAgUAAAAMY3VyclJvdW5kTnVtBQAAAAltYXhSb3VuZHMJAAACAAAAAQIAAAARTVJUIHBhcnR5IGlzIG92ZXIDBQAAAAdpc1BhdXNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFTb3JyeSBidXQgcm91bmQgIwkAAaQAAAABBQAAAAxjdXJyUm91bmROdW0CAAAADSBpcyBmaW5pc2hlZC4DCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAANNUlQJAAACAAAAAQIAAAA9UGxlYXNlIHVzZSBNUlQgYXMgYSBwYXltZW50IGFzc2V0IHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAABmAAAAAgUAAAANY3Vyck1pblBtdEFtdAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAABGU29ycnkgbXkgZnJpZW5kIGJ1dCB5b3VyIHBheW1lbnQgaXMgdG9vIHNtYWxsLiBDdXJyZW50IG1pbiBwYXltZW50IGlzIAkAAaQAAAABBQAAAA1jdXJyTWluUG10QW10CQEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAYCAAAABE1PVkUFAAAADGN1cnJSb3VuZE51bQUAAAAMbmV3V2luSGVpZ2h0CQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5CQACWAAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5AgAAAAE/AAAAA2ludgEAAAAId2l0aGRyYXcAAAABAAAABXJvdW5kBAAAAA1yb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMd2lubmVyUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5BAAAAAx3aXRoZHJhd0lkNTgJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAANSWR4V2l0aGRyYXdJZAMJAABmAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQkAAAIAAAABAgAAADVJbXBvc3NpYmxlIHRvIHdpdGhkcmF3IHdpbiBhbW91bnQgZm9yIHJvdW5kIGluIGZ1dHVyZQMDCQAAAAAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0FAAAADWlzQ29tcGV0aXRpb24HCQAAAgAAAAECAAAARkltcG9zc2libGUgdG8gd2l0aGRyYXcgd2luIGFtb3VudCAtIHdpbm5lciBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCB5ZXQDCQEAAAACIT0AAAACBQAAAAx3aXRoZHJhd0lkNTgCAAAAAT8JAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEVdpbm5lciBvZiByb3VuZCAjCQABpAAAAAEFAAAABXJvdW5kAgAAABwgaGFzIGFscmVhZHkgdGFrZW4gdGhlIHByaXplBAAAABN3aXRoZHJhd1BlcmlvZEVuZGVkCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACCQAAZAAAAAIFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0CQAAaAAAAAIFAAAACW1heFJvdW5kcwUAAAAOYmxvY2tzUGVyUm91bmQFAAAADndpdGhkcmF3UGVyaW9kBAAAAA93aW5BbXRSZWNpcGllbnQDBQAAABN3aXRoZHJhd1BlcmlvZEVuZGVkBQAAABFwYXJ0eU93bmVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAMd2lubmVyUHViS2V5BAAAAA5yb3VuZFdpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgIAAAAIV0lUSERSQVcFAAAABXJvdW5kBQAAAA5yb3VuZFdpbkhlaWdodAkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAA1JZHhXaW5BZGRyZXNzCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQkAAlgAAAABCAUAAAADaW52AAAADXRyYW5zYWN0aW9uSWQJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPd2luQW10UmVjaXBpZW50BQAAAAZ3aW5BbXQFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAAFmAAAAAQAAAAVyb3VuZAQAAAADUlNBCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNOM0tDMnRkdm5NSkd4MW02dmlkbmdZbVE5VngxdkQyNXlRBAAAAAZrZWVwZXIFAAAAA1JTQQQAAAADcHViCQEAAAARQGV4dHJOYXRpdmUoMTA1MikAAAACBQAAAAZrZWVwZXICAAAAA3B1YgQAAAABcgkABBoAAAACBQAAAAR0aGlzAgAAAAZTVEFUVVMEAAAABG1zZzAJAQAAABFAZXh0ck5hdGl2ZSgxMDUyKQAAAAIFAAAABmtlZXBlcgIAAAAFbXNnXzAEAAAABHNpZzAJAQAAABFAZXh0ck5hdGl2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", "chainId": 84, "height": 802741, "spentComplexity": 0 } View: original | compacted Prev: none Next: 45HQZxbbnCNWKNn7H471MjoXpCDcdLWYrQ9Ms87rsJwG Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 3 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let WAVELET = ((100 * 1000) * 1000)
5+
6+let MRTEC = 100
7+
8+let maxRounds = 60
9+
10+let pmtStep = (100 * MRTEC)
11+
12+let partyOwnerPubKey = fromBase58String("5iDk2vYUH5w9nvKjSqvnXdHGsYQW4MahQ5EuUknXZLMA")
13+
14+let partyOwnerAddress = addressFromPublicKey(partyOwnerPubKey)
15+
16+let partyAddress = addressFromPublicKey(fromBase58String("6t6PHEFx7BAyh9qckqcDeajUVNiH6WNsyHggXkLx27Jo"))
17+
18+let withdrawPeriod = 43200
19+
20+let winAmt = (500 * WAVELET)
21+
22+let heightStep = 15
23+
24+let blocksOnGameStart = 1824280
25+
26+let blocksPerRound = 1460
27+
28+let blocksPerCompetition = 1450
29+
30+let MRT = fromBase58String("4uK8i4ThRGbehENwa6MxyLtxAjAo1Rj9fduborGExarC")
31+
32+let MinFEE = ((5 * WAVELET) / 1000)
33+
34+let IdxWinHeight = 0
35+
36+let IdxWinAddress = 1
37+
38+let IdxWinPubKey = 2
39+
40+let IdxWithdrawId = 3
41+
42+func getRoundDataKeyOrFail (round) = if ((0 > round))
43+ then throw("Invalid round number")
44+ else ("round" + toString(round))
45+
46+
47+func readRoundDataListOrFail (round) = {
48+ let roundDataOpt = getString(partyAddress, getRoundDataKeyOrFail(round))
49+ let roundDataStr = if (isDefined(roundDataOpt))
50+ then extract(roundDataOpt)
51+ else ""
52+ if ((roundDataStr != ""))
53+ then split(roundDataStr, "_")
54+ else ["0", toString(pmtStep), "?", "?", "?", "0"]
55+ }
56+
57+
58+func readSharedState () = {
59+ let sharedStateOpt = getString(partyAddress, "RoundsSharedState")
60+ let sharedStateStr = if (isDefined(sharedStateOpt))
61+ then extract(sharedStateOpt)
62+ else ""
63+ if ((sharedStateStr != ""))
64+ then split(sharedStateStr, "_")
65+ else ["?", "0", "?"]
66+ }
67+
68+
69+func writeSetOfRoundData (type,round,newWinHeight,newWinAddressStr,newWinPubKeyStr,withdrawId58) = {
70+ let newWinHeightStr = toString(newWinHeight)
71+ let roundData = DataEntry(getRoundDataKeyOrFail(round), ((((((newWinHeightStr + "_") + newWinAddressStr) + "_") + newWinPubKeyStr) + "_") + withdrawId58))
72+ if ((type == "MOVE"))
73+ then {
74+ let addressLength = size(newWinAddressStr)
75+ let sharedState = readSharedState()
76+ let newTotalGamesCountStr = toString((parseIntValue(sharedState[1]) + 1))
77+ let currLastPlayersAddr = if ((sharedState[2] == "?"))
78+ then ""
79+ else sharedState[2]
80+ let newLastPlayersAddr = if (if ((currLastPlayersAddr != ""))
81+ then (size(currLastPlayersAddr) > ((addressLength + 1) * 10))
82+ else false)
83+ then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (addressLength + 1)))
84+ else (("-" + newWinAddressStr) + currLastPlayersAddr)
85+ WriteSet([roundData, DataEntry("RoundsSharedState", ((((newWinHeightStr + "_") + newTotalGamesCountStr) + "_") + newLastPlayersAddr))])
86+ }
87+ else if ((type == "WITHDRAW"))
88+ then WriteSet([roundData])
89+ else throw(("Unsupported type in writeSetOfRoundData method: " + type))
90+ }
91+
92+
93+let offset = (height - blocksOnGameStart)
94+
95+let currRoundNum = if ((offset >= 0))
96+ then (offset / blocksPerRound)
97+ else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
98+
99+let currRoundHeight = (offset % blocksPerRound)
100+
101+let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
102+
103+let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
104+
105+let currRoundDataList = readRoundDataListOrFail(currRoundNum)
106+
107+let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
108+
109+let currMinPmtAmt = pmtStep
110+
111+func isWinByHeight (h) = (height >= h)
112+
113+
114+let atLeastOneMoveInRoundPresent = (currWinHeight > currRoundHeightStart)
115+
116+let firstCountdownFinished = if ((currWinHeight == 0))
117+ then isWinByHeight((currRoundHeightStart + heightStep))
118+ else false
119+
120+let isPauseByWin = if (isWinByHeight(currWinHeight))
121+ then atLeastOneMoveInRoundPresent
122+ else false
123+
124+let isPauseByTime = if ((currRoundHeight > blocksPerCompetition))
125+ then true
126+ else firstCountdownFinished
127+
128+let isPause = if (isPauseByWin)
129+ then true
130+ else isPauseByTime
131+
132+let isCompetition = !(isPause)
133+
134+func move (p) = if (!(isCompetition))
135+ then throw("o")
136+ else {
137+ let roundDataList = readRoundDataListOrFail(currRoundNum)
138+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
139+ if ((p == winnerPubKey))
140+ then throw("=")
141+ else if ((currWinHeight != (height + 1)))
142+ then throw("!")
143+ else true
144+ }
145+
146+
147+@Callable(inv)
148+func mover () = {
149+ let overflowedNewWinHeight = (height + heightStep)
150+ let newWinHeight = if ((overflowedNewWinHeight >= currRoundCompetitionEnd))
151+ then currRoundCompetitionEnd
152+ else overflowedNewWinHeight
153+ let payment = if (isDefined(inv.payment))
154+ then extract(inv.payment)
155+ else throw("Please attach payment with MRT to participate in MRT party")
156+ if ((currRoundNum >= maxRounds))
157+ then throw("MRT party is over")
158+ else if (isPause)
159+ then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
160+ else if ((payment.assetId != MRT))
161+ then throw("Please use MRT as a payment asset to participate in MRT party")
162+ else if ((currMinPmtAmt > payment.amount))
163+ then throw(("Sorry my friend but your payment is too small. Current min payment is " + toString(currMinPmtAmt)))
164+ else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toString(addressFromPublicKey(inv.callerPublicKey)), toBase58String(inv.callerPublicKey), "?")
165+ }
166+
167+
168+
169+@Callable(inv)
170+func withdraw (round) = {
171+ let roundDataList = readRoundDataListOrFail(round)
172+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
173+ let withdrawId58 = roundDataList[IdxWithdrawId]
174+ if ((round > currRoundNum))
175+ then throw("Impossible to withdraw win amount for round in future")
176+ else if (if ((round == currRoundNum))
177+ then isCompetition
178+ else false)
179+ then throw("Impossible to withdraw win amount - winner has not been determined yet")
180+ else if ((withdrawId58 != "?"))
181+ then throw((("Winner of round #" + toString(round)) + " has already taken the prize"))
182+ else {
183+ let withdrawPeriodEnded = (height > ((blocksOnGameStart + (maxRounds * blocksPerRound)) + withdrawPeriod))
184+ let winAmtRecipient = if (withdrawPeriodEnded)
185+ then partyOwnerAddress
186+ else addressFromPublicKey(winnerPubKey)
187+ let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
188+ ScriptResult(writeSetOfRoundData("WITHDRAW", round, roundWinHeight, roundDataList[IdxWinAddress], roundDataList[IdxWinPubKey], toBase58String(inv.transactionId)), TransferSet([ScriptTransfer(winAmtRecipient, winAmt, unit)]))
189+ }
190+ }
191+
192+
193+
194+@Callable(i)
195+func f (round) = {
196+ let RSA = addressFromStringValue("3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ")
197+ let keeper = RSA
198+ let pub = getBinaryValue(keeper, "pub")
199+ let r = getInteger(this, "STATUS")
200+ let msg0 = getBinaryValue(keeper, "msg_0")
201+ let sig0 = getBinaryValue(keeper, "sig_0")
202+ let add0 = addressFromPublicKey(take(msg0, 32))
203+ let msg1 = getBinaryValue(keeper, "msg_0")
204+ let sig1 = getBinaryValue(keeper, "sig_0")
205+ let add1 = addressFromPublicKey(take(msg1, 32))
206+ let msg2 = getBinaryValue(keeper, "msg_0")
207+ let sig2 = getBinaryValue(keeper, "sig_0")
208+ let add2 = addressFromPublicKey(take(msg2, 32))
209+ let msg3 = getBinaryValue(keeper, "msg_0")
210+ let sig3 = getBinaryValue(keeper, "sig_0")
211+ let add3 = addressFromPublicKey(take(msg3, 32))
212+ let msg4 = getBinaryValue(keeper, "msg_0")
213+ let sig4 = getBinaryValue(keeper, "sig_0")
214+ let add4 = addressFromPublicKey(take(msg4, 32))
215+ let add5 = addressFromPublicKey(take(drop(msg4, 32), 32))
216+ let add6 = addressFromPublicKey(take(drop(drop(msg4, 32), 32), 32))
217+ let add7 = addressFromPublicKey(take(drop(drop(drop(msg4, 32), 32), 32), 32))
218+ let add8 = addressFromPublicKey(take(drop(drop(drop(drop(msg4, 32), 32), 32), 32), 32))
219+ let add9 = addressFromPublicKey(take(drop(drop(drop(drop(drop(msg4, 32), 32), 32), 32), 32), 32))
220+ let v0 = if (rsaVerify(SHA512, msg0, sig0, pub))
221+ then 1
222+ else 0
223+ let v1 = if (rsaVerify(SHA512, msg1, sig1, pub))
224+ then 1
225+ else 0
226+ let v2 = if (rsaVerify(SHA512, msg2, sig2, pub))
227+ then 1
228+ else 0
229+ let v3 = if (rsaVerify(SHA512, msg3, sig3, pub))
230+ then 1
231+ else 0
232+ let v4 = if (rsaVerify(SHA512, msg4, sig4, pub))
233+ then 1
234+ else 0
235+ let v01 = if (rsaVerify(SHA512, msg0, sig1, pub))
236+ then 1
237+ else 0
238+ let v11 = if (rsaVerify(SHA512, msg1, sig2, pub))
239+ then 1
240+ else 0
241+ let v21 = if (rsaVerify(SHA512, msg2, sig3, pub))
242+ then 1
243+ else 0
244+ let v31 = if (rsaVerify(SHA512, msg3, sig4, pub))
245+ then 1
246+ else 0
247+ let v41 = if (rsaVerify(SHA512, msg4, sig0, pub))
248+ then 1
249+ else 0
250+ if ((((((((v0 + v1) + v2) + v3) + v4) + v31) + v41) == round))
251+ then throw("F")
252+ else if ((round != r))
253+ then ScriptResult(WriteSet([DataEntry("STATUS", round)]), TransferSet(nil))
254+ else throw("R")
255+ }
256+
257+
258+@Verifier(tx)
259+func verify () = if (true)
260+ then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
261+ else {
262+ let withdrawPeriodEnded = (height > ((blocksOnGameStart + (maxRounds * blocksPerRound)) + withdrawPeriod))
263+ match tx {
264+ case ttx: TransferTransaction =>
265+ sigVerify(ttx.bodyBytes, ttx.proofs[0], ttx.senderPublicKey)
266+ case itx: InvokeScriptTransaction =>
267+ if (!(sigVerify(itx.bodyBytes, itx.proofs[0], itx.senderPublicKey)))
268+ then throw("s")
269+ else move(itx.senderPublicKey)
270+ case btx: BurnTransaction =>
271+ if (!(withdrawPeriodEnded))
272+ then throw("MRT party has not finished yet. Burn is not allowed.")
273+ else if (!(sigVerify(btx.bodyBytes, btx.proofs[0], partyOwnerPubKey)))
274+ then throw("Burn is allowed for Party Owner only.")
275+ else if ((btx.fee != MinFEE))
276+ then throw(("Impossible to burn with fee less or greater than " + toString(MinFEE)))
277+ else true
278+ case _ =>
279+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
280+ }
281+ }
282+

github/deemru/w8io/873ac7e 
23.36 ms