tx · Hs1apbjo26xbuWppSAhRK3M7ukcrkz3Z3oE15d21EWS5

3N7ZNeqp9M3qxubRjtT1zKKVWp4bJVjLv9H:  -0.01000000 Waves

2019.10.16 19:10 [722769] smart account 3N7ZNeqp9M3qxubRjtT1zKKVWp4bJVjLv9H > SELF 0.00000000 Waves

{ "type": 13, "id": "Hs1apbjo26xbuWppSAhRK3M7ukcrkz3Z3oE15d21EWS5", "fee": 1000000, "feeAssetId": null, "timestamp": 1571242242721, "version": 1, "sender": "3N7ZNeqp9M3qxubRjtT1zKKVWp4bJVjLv9H", "senderPublicKey": "FUvrzXd7tXWFnF6cXMpqNNHYmKWgDJm2NUuxKk8AqSQp", "proofs": [ "3wEUwoYLPgbcpFDBbTFN8umySy7dHV9bjB5wawAZJiQ9jQFTzxX5E7R9YdnbwaoThFCiX8MNYGfdxLMKwc9bDXVu" ], "script": "base64:AAIDAAAAAAAAAAoIARIAEgQKAgEIAAAAIwAAAAAHV0FWRUxFVAkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gAAAAABU1SVEVDAAAAAAAAAABkAAAAAApwbXRPblN0YXJ0CQAAaAAAAAIAAAAAAAAAAAoFAAAABU1SVEVDAAAAABBwYXJ0eU93bmVyUHViS2V5CQACWQAAAAECAAAALEZDYVA0akxoTGF3ekVxYndBUUdBVnZQUUJ2MmgzTGRFUkN4N2Zja0R2bnpyAAAAABFwYXJ0eU93bmVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAQcGFydHlPd25lclB1YktleQAAAAANbGVhc2luZ1BlcmlvZAAAAAAAAAknwAAAAAAGd2luQW10CQAAaAAAAAIAAAAAAAAAAAEFAAAAB1dBVkVMRVQAAAAACmhlaWdodFN0ZXAAAAAAAAAAAAIAAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAAAACwdQAAAAAA5ibG9ja3NQZXJSb3VuZAAAAAAAAAAABQAAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAAAAAAAMAAAAAA01SVAkAAlkAAAABAgAAACw4YjRqRTdYMXlDTmNiRjRZWFpHQktjOFQ1eGRpdDdiMWdFTnh4eDMxZGF1YQAAAAAGTWluRkVFCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAHV0FWRUxFVAAAAAAAAAAD6AAAAAAMSWR4V2luSGVpZ2h0AAAAAAAAAAAAAAAAAAxJZHhXaW5QdWJLZXkAAAAAAAAAAAEAAAAADElkeExlYXNpbmdJZAAAAAAAAAAAAgEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQAAAAVyb3VuZAMJAABmAAAAAgAAAAAAAAAAAAUAAAAFcm91bmQJAAACAAAAAQIAAAAUSW52YWxpZCByb3VuZCBudW1iZXIJAAEsAAAAAgIAAAAFcm91bmQJAAGkAAAAAQUAAAAFcm91bmQBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQAAAAVyb3VuZAQAAAAMcm91bmREYXRhT3B0CQAEHQAAAAIFAAAABHRoaXMJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMcm91bmREYXRhU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADHJvdW5kRGF0YU9wdAkBAAAAB2V4dHJhY3QAAAABBQAAAAxyb3VuZERhdGFPcHQCAAAAAAQAAAAUcGFydHlPd25lckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAEXBhcnR5T3duZXJBZGRyZXNzAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAAJAAS1AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAFfCQAETAAAAAICAAAAATAJAARMAAAAAgkAAaQAAAABBQAAAApwbXRPblN0YXJ0CQAETAAAAAIFAAAAFHBhcnR5T3duZXJBZGRyZXNzU3RyCQAETAAAAAICAAAAAT8FAAAAA25pbAEAAAAPcmVhZFNoYXJlZFN0YXRlAAAAAAQAAAAOc2hhcmVkU3RhdGVPcHQJAAQdAAAAAgUAAAAEdGhpcwIAAAARUm91bmRzU2hhcmVkU3RhdGUEAAAADnNoYXJlZFN0YXRlU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0CQEAAAAHZXh0cmFjdAAAAAEFAAAADnNoYXJlZFN0YXRlT3B0AgAAAAADCQEAAAACIT0AAAACBQAAAA5zaGFyZWRTdGF0ZVN0cgIAAAAACQAEtQAAAAIFAAAADnNoYXJlZFN0YXRlU3RyAgAAAAFfCQAETAAAAAICAAAAAAkABEwAAAACAgAAAAEwCQAETAAAAAICAAAAAAUAAAADbmlsAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgAAAAR0eXBlAAAABXJvdW5kAAAADG5ld1dpbkhlaWdodAAAAA9uZXdXaW5QdWJLZXlTdHIAAAAMbmV3V2luUHViS2V5AAAAC2xlYXNpbmdJZDU4BAAAAA9uZXdXaW5IZWlnaHRTdHIJAAGkAAAAAQUAAAAMbmV3V2luSGVpZ2h0AwkAAAAAAAACBQAAAAR0eXBlAgAAAARNT1ZFBAAAABBuZXdXaW5BZGRyZXNzU3RyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAADG5ld1dpblB1YktleQQAAAANYWRkcmVzc0xlbmd0aAkAATEAAAABBQAAABBuZXdXaW5BZGRyZXNzU3RyBAAAAAtzaGFyZWRTdGF0ZQkBAAAAD3JlYWRTaGFyZWRTdGF0ZQAAAAAEAAAAFW5ld1RvdGFsR2FtZXNDb3VudFN0cgkAAaQAAAABCQAAZAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAtzaGFyZWRTdGF0ZQAAAAAAAAAAAQAAAAAAAAAAAQQAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAZEAAAACBQAAAAtzaGFyZWRTdGF0ZQAAAAAAAAAAAgQAAAASbmV3TGFzdFBsYXllcnNBZGRyAwMJAQAAAAIhPQAAAAIFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHICAAAAAAkAAGYAAAACCQABMQAAAAEFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAABoAAAAAgkAAGQAAAACBQAAAA1hZGRyZXNzTGVuZ3RoAAAAAAAAAAABAAAAAAAAAAAKBwkAASwAAAACCQABLAAAAAICAAAAAS0FAAAAEG5ld1dpbkFkZHJlc3NTdHIJAQAAAAlkcm9wUmlnaHQAAAACBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQAAZAAAAAIFAAAADWFkZHJlc3NMZW5ndGgAAAAAAAAAAAEJAAEsAAAAAgkAASwAAAACAgAAAAEtBQAAABBuZXdXaW5BZGRyZXNzU3RyBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQUAAAAFcm91bmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAPbmV3V2luSGVpZ2h0U3RyAgAAAAFfBQAAAA9uZXdXaW5QdWJLZXlTdHICAAAAAV8FAAAAC2xlYXNpbmdJZDU4CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACAgAAABFSb3VuZHNTaGFyZWRTdGF0ZQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA9uZXdXaW5IZWlnaHRTdHICAAAAAV8FAAAAFW5ld1RvdGFsR2FtZXNDb3VudFN0cgIAAAABXwUAAAASbmV3TGFzdFBsYXllcnNBZGRyBQAAAANuaWwDCQAAAAAAAAIFAAAABHR5cGUCAAAAB0xFQVNJTkcJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA9uZXdXaW5IZWlnaHRTdHICAAAAAV8FAAAAD25ld1dpblB1YktleVN0cgIAAAABXwUAAAALbGVhc2luZ0lkNTgFAAAAA25pbAkAAAIAAAABCQABLAAAAAICAAAAMFVuc3VwcG9ydGVkIHR5cGUgaW4gd3JpdGVTZXRPZlJvdW5kRGF0YSBtZXRob2Q6IAUAAAAEdHlwZQAAAAAGb2Zmc2V0CQAAZQAAAAIFAAAABmhlaWdodAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAADGN1cnJSb3VuZE51bQMJAABnAAAAAgUAAAAGb2Zmc2V0AAAAAAAAAAAACQAAaQAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQJAAACAAAAAQkAASwAAAACAgAAAC1QbGVhc2UgZG8gbm90IGh1cnJ5LiBNUlQgcGFydHkgd2lsbCBzdGFydCBvbiAJAAGkAAAAAQUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAD2N1cnJSb3VuZEhlaWdodAkAAGoAAAACBQAAAAZvZmZzZXQFAAAADmJsb2Nrc1BlclJvdW5kAAAAABRjdXJyUm91bmRIZWlnaHRTdGFydAkAAGQAAAACCQAAaAAAAAIFAAAADGN1cnJSb3VuZE51bQUAAAAOYmxvY2tzUGVyUm91bmQFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAkAAGQAAAACBQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAUAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAEWN1cnJSb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAxjdXJyUm91bmROdW0AAAAADWN1cnJXaW5IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjdXJyUm91bmREYXRhTGlzdAUAAAAMSWR4V2luSGVpZ2h0AAAAAA1jdXJyTWluUG10QW10BQAAAApwbXRPblN0YXJ0AQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQAAAAFoCQAAZwAAAAIFAAAABmhlaWdodAUAAAABaAAAAAAcYXRMZWFzdE9uZU1vdmVJblJvdW5kUHJlc2VudAkAAGYAAAACBQAAAA1jdXJyV2luSGVpZ2h0BQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAAAAAAWZmlyc3RDb3VudGRvd25GaW5pc2hlZAMJAAAAAAAAAgUAAAANY3VycldpbkhlaWdodAAAAAAAAAAAAAkBAAAADWlzV2luQnlIZWlnaHQAAAABCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAAApoZWlnaHRTdGVwBwAAAAAMaXNQYXVzZUJ5V2luAwkBAAAADWlzV2luQnlIZWlnaHQAAAABBQAAAA1jdXJyV2luSGVpZ2h0BQAAABxhdExlYXN0T25lTW92ZUluUm91bmRQcmVzZW50BwAAAAANaXNQYXVzZUJ5VGltZQMJAABmAAAAAgUAAAAPY3VyclJvdW5kSGVpZ2h0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgYFAAAAFmZpcnN0Q291bnRkb3duRmluaXNoZWQAAAAAB2lzUGF1c2UDBQAAAAxpc1BhdXNlQnlXaW4GBQAAAA1pc1BhdXNlQnlUaW1lAAAAAA1pc0NvbXBldGl0aW9uCQEAAAABIQAAAAEFAAAAB2lzUGF1c2UAAAACAAAAA2ludgEAAAAEbW92ZQAAAAAEAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAApoZWlnaHRTdGVwBAAAAAxuZXdXaW5IZWlnaHQDCQAAZwAAAAIFAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQFAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kBQAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAUAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAQAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAA2ludgAAAAdwYXltZW50CQAAAgAAAAECAAAAOlBsZWFzZSBhdHRhY2ggcGF5bWVudCB3aXRoIE1SVCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDBQAAAAdpc1BhdXNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFTb3JyeSBidXQgcm91bmQgIwkAAaQAAAABBQAAAAxjdXJyUm91bmROdW0CAAAADSBpcyBmaW5pc2hlZC4DCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAANNUlQJAAACAAAAAQIAAAA9UGxlYXNlIHVzZSBNUlQgYXMgYSBwYXltZW50IGFzc2V0IHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAABmAAAAAgUAAAANY3Vyck1pblBtdEFtdAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAABFU29ycnkgbXkgZnJpZW5kIGJ1dCB5b3VyIHBheW1lbnQgaXMgdG8gc21hbGwuIEN1cnJlbnQgbWluIHBheW1lbnQgaXMgCQABpAAAAAEFAAAADWN1cnJNaW5QbXRBbXQJAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgIAAAAETU9WRQUAAAAMY3VyclJvdW5kTnVtBQAAAAxuZXdXaW5IZWlnaHQJAAJYAAAAAQgFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5AgAAAAE/AAAAA2ludgEAAAARcmVnaXN0ZXJMZWFzaW5nVHgAAAACAAAABXJvdW5kAAAAC2xlYXNpbmdJZDU4BAAAAAlsZWFzaW5nSWQJAAJZAAAAAQUAAAALbGVhc2luZ0lkNTgEAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAABXJvdW5kBAAAAAx3aW5uZXJQdWJLZXkJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5QdWJLZXkDCQAAZgAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0JAAACAAAAAQIAAAA+SW1wb3NzaWJsZSB0byByZWdpc3RlciBsZWFzaW5nIHRyYW5zYWN0aW9uIGZvciByb3VuZCBpbiBmdXR1cmUDAwkAAAAAAAACBQAAAAVyb3VuZAUAAAAMY3VyclJvdW5kTnVtBQAAAA1pc0NvbXBldGl0aW9uBwkAAAIAAAABAgAAAE9JbXBvc3NpYmxlIHRvIHJlZ2lzdGVyIGxlYXNpbmcgdHJhbnNhY3Rpb24gLSB3aW5uZXIgaGFzIG5vdCBiZWVuIGRldGVybWluZWQgeWV0AwkBAAAAAiE9AAAAAgkAATEAAAABBQAAAAtsZWFzaW5nSWQ1OAAAAAAAAAAALAkAAAIAAAABAgAAACVJbnZhbGlkIGxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgbGVuZ3RoAwkAAGcAAAACAAAAAAAAAAAACQAAyAAAAAEFAAAACWxlYXNpbmdJZAkAAAIAAAABAgAAADZMZWFzaW5nIHRyYW5zYWN0aW9uIGlkIGlzIG5vdCBlbmNvZGVkIGFzIEJhc2U1OCBmb3JtYXQDCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+kAAAABBQAAAAlsZWFzaW5nSWQJAAACAAAAAQIAAAA0UGFzc2VkIGxlYXNpbmdJZDU4IGhhcyBhbHJlYWR5IGV4aXN0ZWQgaW4gYmxvY2tjaGFpbgMJAQAAAAIhPQAAAAIJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4TGVhc2luZ0lkAgAAAAE/CQAAAgAAAAEJAAEsAAAAAgIAAAAwTGVhc2luZyB0eCBpZCBoYXMgYWxyZWFkeSByZWdpc3RyZXJlZCBmb3Igcm91bmQgCQABpAAAAAEFAAAABXJvdW5kAwkBAAAAAiE9AAAAAggFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADHdpbm5lclB1YktleQkAAAIAAAABAgAAADFMZWFzaW5nIHR4IGNhbiBiZSByZWdpc3RlcmVkIGJ5IHJvdW5kIHdpbm5lciBvbmx5BAAAAA5yb3VuZFdpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAkBAAAAE3dyaXRlU2V0T2ZSb3VuZERhdGEAAAAGAgAAAAdMRUFTSU5HBQAAAAVyb3VuZAUAAAAOcm91bmRXaW5IZWlnaHQJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5CQABmwAAAAECAAAAAAUAAAALbGVhc2luZ0lkNTgAAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAABJsZWFzaW5nUGVyaW9kRW5kZWQJAABmAAAAAgUAAAAGaGVpZ2h0CQAAZAAAAAIFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0BQAAAA1sZWFzaW5nUGVyaW9kBAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAQTGVhc2VUcmFuc2FjdGlvbgQAAAADbHR4BQAAAAckbWF0Y2gwBAAAAANzaWcJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAAEAAAABXJvdW5kCQAEsQAAAAEJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAEEAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAABXJvdW5kBAAAAA5yb3VuZFdpblB1YktleQkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQQAAAATcmVnaXN0ZXJlZExlYXNpbmdJZAkAAlkAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeExlYXNpbmdJZAMFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAACdTb3JyeSBidXQgbGVhc2luZyBwZXJpb2QgaGFzIGJlZW4gZW5kZWQDCQEAAAABIQAAAAEJAAH0AAAAAwgFAAAAA2x0eAAAAAlib2R5Qnl0ZXMFAAAAA3NpZwUAAAAOcm91bmRXaW5QdWJLZXkJAAACAAAAAQIAAABKSW52YWxpZCBsZWFzaW5nIHRyYW5zYWN0aW9uIHNpZ25hdHVyZS4gTGVhc2luZyBpcyBhbGxv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", "chainId": 84, "height": 722769, "spentComplexity": 0 } View: original | compacted Prev: none Next: none 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 pmtOnStart = (10 * MRTEC)
9+
10+let partyOwnerPubKey = fromBase58String("FCaP4jLhLawzEqbwAQGAVvPQBv2h3LdERCx7fckDvnzr")
11+
12+let partyOwnerAddress = addressFromPublicKey(partyOwnerPubKey)
13+
14+let leasingPeriod = 600000
15+
16+let winAmt = (1 * WAVELET)
17+
18+let heightStep = 2
19+
20+let blocksOnGameStart = 722768
21+
22+let blocksPerRound = 5
23+
24+let blocksPerCompetition = 3
25+
26+let MRT = fromBase58String("8b4jE7X1yCNcbF4YXZGBKc8T5xdit7b1gENxxx31daua")
27+
28+let MinFEE = ((5 * WAVELET) / 1000)
29+
30+let IdxWinHeight = 0
31+
32+let IdxWinPubKey = 1
33+
34+let IdxLeasingId = 2
35+
36+func getRoundDataKeyOrFail (round) = if ((0 > round))
37+ then throw("Invalid round number")
38+ else ("round" + toString(round))
39+
40+
41+func readRoundDataListOrFail (round) = {
42+ let roundDataOpt = getString(this, getRoundDataKeyOrFail(round))
43+ let roundDataStr = if (isDefined(roundDataOpt))
44+ then extract(roundDataOpt)
45+ else ""
46+ let partyOwnerAddressStr = toBase58String(partyOwnerAddress.bytes)
47+ if ((roundDataStr != ""))
48+ then split(roundDataStr, "_")
49+ else ["0", toString(pmtOnStart), partyOwnerAddressStr, "?"]
50+ }
51+
52+
53+func readSharedState () = {
54+ let sharedStateOpt = getString(this, "RoundsSharedState")
55+ let sharedStateStr = if (isDefined(sharedStateOpt))
56+ then extract(sharedStateOpt)
57+ else ""
58+ if ((sharedStateStr != ""))
59+ then split(sharedStateStr, "_")
60+ else ["", "0", ""]
61+ }
62+
63+
64+func writeSetOfRoundData (type,round,newWinHeight,newWinPubKeyStr,newWinPubKey,leasingId58) = {
65+ let newWinHeightStr = toString(newWinHeight)
66+ if ((type == "MOVE"))
67+ then {
68+ let newWinAddressStr = toString(addressFromPublicKey(newWinPubKey))
69+ let addressLength = size(newWinAddressStr)
70+ let sharedState = readSharedState()
71+ let newTotalGamesCountStr = toString((parseIntValue(sharedState[1]) + 1))
72+ let currLastPlayersAddr = sharedState[2]
73+ let newLastPlayersAddr = if (if ((currLastPlayersAddr != ""))
74+ then (size(currLastPlayersAddr) > ((addressLength + 1) * 10))
75+ else false)
76+ then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (addressLength + 1)))
77+ else (("-" + newWinAddressStr) + currLastPlayersAddr)
78+ WriteSet([DataEntry(getRoundDataKeyOrFail(round), ((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58)), DataEntry("RoundsSharedState", ((((newWinHeightStr + "_") + newTotalGamesCountStr) + "_") + newLastPlayersAddr))])
79+ }
80+ else if ((type == "LEASING"))
81+ then WriteSet([DataEntry(getRoundDataKeyOrFail(round), ((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58))])
82+ else throw(("Unsupported type in writeSetOfRoundData method: " + type))
83+ }
84+
85+
86+let offset = (height - blocksOnGameStart)
87+
88+let currRoundNum = if ((offset >= 0))
89+ then (offset / blocksPerRound)
90+ else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
91+
92+let currRoundHeight = (offset % blocksPerRound)
93+
94+let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
95+
96+let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
97+
98+let currRoundDataList = readRoundDataListOrFail(currRoundNum)
99+
100+let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
101+
102+let currMinPmtAmt = pmtOnStart
103+
104+func isWinByHeight (h) = (height >= h)
105+
106+
107+let atLeastOneMoveInRoundPresent = (currWinHeight > currRoundHeightStart)
108+
109+let firstCountdownFinished = if ((currWinHeight == 0))
110+ then isWinByHeight((currRoundHeightStart + heightStep))
111+ else false
112+
113+let isPauseByWin = if (isWinByHeight(currWinHeight))
114+ then atLeastOneMoveInRoundPresent
115+ else false
116+
117+let isPauseByTime = if ((currRoundHeight > blocksPerCompetition))
118+ then true
119+ else firstCountdownFinished
120+
121+let isPause = if (isPauseByWin)
122+ then true
123+ else isPauseByTime
124+
125+let isCompetition = !(isPause)
126+
127+@Callable(inv)
128+func move () = {
129+ let overflowedNewWinHeight = (height + heightStep)
130+ let newWinHeight = if ((overflowedNewWinHeight >= currRoundCompetitionEnd))
131+ then currRoundCompetitionEnd
132+ else overflowedNewWinHeight
133+ let payment = if (isDefined(inv.payment))
134+ then extract(inv.payment)
135+ else throw("Please attach payment with MRT to participate in MRT party")
136+ if (isPause)
137+ then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
138+ else if ((payment.assetId != MRT))
139+ then throw("Please use MRT as a payment asset to participate in MRT party")
140+ else if ((currMinPmtAmt > payment.amount))
141+ then throw(("Sorry my friend but your payment is to small. Current min payment is " + toString(currMinPmtAmt)))
142+ else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toBase58String(inv.callerPublicKey), inv.callerPublicKey, "?")
143+ }
144+
145+
146+
147+@Callable(inv)
148+func registerLeasingTx (round,leasingId58) = {
149+ let leasingId = fromBase58String(leasingId58)
150+ let roundDataList = readRoundDataListOrFail(round)
151+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
152+ if ((round > currRoundNum))
153+ then throw("Impossible to register leasing transaction for round in future")
154+ else if (if ((round == currRoundNum))
155+ then isCompetition
156+ else false)
157+ then throw("Impossible to register leasing transaction - winner has not been determined yet")
158+ else if ((size(leasingId58) != 44))
159+ then throw("Invalid leasing transaction id length")
160+ else if ((0 >= size(leasingId)))
161+ then throw("Leasing transaction id is not encoded as Base58 format")
162+ else if (isDefined(transactionHeightById(leasingId)))
163+ then throw("Passed leasingId58 has already existed in blockchain")
164+ else if ((roundDataList[IdxLeasingId] != "?"))
165+ then throw(("Leasing tx id has already registrered for round " + toString(round)))
166+ else if ((inv.callerPublicKey != winnerPubKey))
167+ then throw("Leasing tx can be registered by round winner only")
168+ else {
169+ let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
170+ writeSetOfRoundData("LEASING", round, roundWinHeight, roundDataList[IdxWinPubKey], toBytes(""), leasingId58)
171+ }
172+ }
173+
174+
175+@Verifier(tx)
176+func verify () = {
177+ let leasingPeriodEnded = (height > (blocksOnGameStart + leasingPeriod))
178+ match tx {
179+ case ltx: LeaseTransaction =>
180+ let sig = ltx.proofs[0]
181+ let round = toInt(ltx.proofs[1])
182+ let roundDataList = readRoundDataListOrFail(round)
183+ let roundWinPubKey = fromBase58String(roundDataList[IdxWinPubKey])
184+ let registeredLeasingId = fromBase58String(roundDataList[IdxLeasingId])
185+ if (leasingPeriodEnded)
186+ then throw("Sorry but leasing period has been ended")
187+ else if (!(sigVerify(ltx.bodyBytes, sig, roundWinPubKey)))
188+ then throw("Invalid leasing transaction signature. Leasing is allowed for winner only.")
189+ else if ((ltx.id != registeredLeasingId))
190+ then throw("Leasing transaction id doesn't match with registered leasing id")
191+ else if ((ltx.amount != winAmt))
192+ then throw(("Impossible to lease less or greater than " + toString(winAmt)))
193+ else if ((ltx.fee != MinFEE))
194+ then throw(("Impossible to lease with fee less or greater than " + toString(MinFEE)))
195+ else true
196+ case cltx: LeaseCancelTransaction =>
197+ if (!(leasingPeriodEnded))
198+ then throw("MRT party has not finished yet. Leasing Cancel is not allowed.")
199+ else if (!(sigVerify(tx.bodyBytes, tx.proofs[0], partyOwnerPubKey)))
200+ then throw("Leasing Cancel is allowed to Party Owner only")
201+ else if ((cltx.fee != MinFEE))
202+ then throw(("Impossible to cancle leasing with fee less or greater than " + toString(MinFEE)))
203+ else true
204+ case ttx: TransferTransaction =>
205+ if (!(leasingPeriodEnded))
206+ then throw("MRT party has not finished yet. Transfer is not allowed.")
207+ else if ((addressFromRecipient(ttx.recipient).bytes != partyOwnerAddress.bytes))
208+ then throw("Transfer is allowed to Party Owner address only")
209+ else if (!(sigVerify(ttx.bodyBytes, ttx.proofs[0], partyOwnerPubKey)))
210+ then throw("Transfer is allowed for Party Owner only.")
211+ else true
212+ case stx: SetScriptTransaction =>
213+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
214+ case _ =>
215+ false
216+ }
217+ }
218+

github/deemru/w8io/169f3d6 
25.35 ms