tx · 8EEWkREpJgKRDr1QHUXVHLSmYZpTfVerw19rUGeSEGZE

3N7Esyo3BUCC77zhiPcYYNBxZjUwR3HQes4:  -0.01000000 Waves

2019.10.15 14:00 [720964] smart account 3N7Esyo3BUCC77zhiPcYYNBxZjUwR3HQes4 > SELF 0.00000000 Waves

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

github/deemru/w8io/026f985 
36.47 ms