tx · FsrdZYYPFeSPqqfEg7g4gRnStKoJEMrjPxTMFKF74th8

3MrzRgERMgNC4UHfqGMKKmLobSfyLsjf7G9:  -0.01000000 Waves

2019.10.22 11:40 [731045] smart account 3MrzRgERMgNC4UHfqGMKKmLobSfyLsjf7G9 > SELF 0.00000000 Waves

{ "type": 13, "id": "FsrdZYYPFeSPqqfEg7g4gRnStKoJEMrjPxTMFKF74th8", "fee": 1000000, "feeAssetId": null, "timestamp": 1571733670851, "version": 1, "sender": "3MrzRgERMgNC4UHfqGMKKmLobSfyLsjf7G9", "senderPublicKey": "edH8nkpbnHLLsz4PrhiBVjJEkX5HA9JSAbfvCUJ2cQ6", "proofs": [ "4Xp9rvXyQL6AF8X3dL4XLMzY5VgRxQmLQCcZxKx3Fn2bJSy8f4Bss62Gq51626i6wA2zUzCXCCqGoKxAky4s4GZv" ], "script": "base64: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AAAACQAEtQAAAAIFAAAADnNoYXJlZFN0YXRlU3RyAgAAAAFfCQAETAAAAAICAAAAAAkABEwAAAACAgAAAAEwCQAETAAAAAICAAAAAAUAAAADbmlsAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABwAAAAR0eXBlAAAABXJvdW5kAAAADG5ld1dpbkhlaWdodAAAAA9uZXdXaW5QdWJLZXlTdHIAAAAMbmV3V2luUHViS2V5AAAAC2xlYXNpbmdJZDU4AAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0BAAAAA9uZXdXaW5IZWlnaHRTdHIJAAGkAAAAAQUAAAAMbmV3V2luSGVpZ2h0BAAAAAlyb3VuZERhdGEJAQAAAAlEYXRhRW50cnkAAAACCQEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQUAAAAFcm91bmQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAPbmV3V2luUHViS2V5U3RyAgAAAAFfBQAAAAtsZWFzaW5nSWQ1OAIAAAABXwkAAaQAAAABBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAETU9WRQQAAAAQbmV3V2luQWRkcmVzc1N0cgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAAxuZXdXaW5QdWJLZXkEAAAADWFkZHJlc3NMZW5ndGgJAAExAAAAAQUAAAAQbmV3V2luQWRkcmVzc1N0cgQAAAALc2hhcmVkU3RhdGUJAQAAAA9yZWFkU2hhcmVkU3RhdGUAAAAABAAAABVuZXdUb3RhbEdhbWVzQ291bnRTdHIJAAGkAAAAAQkAAGQAAAACCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAALc2hhcmVkU3RhdGUAAAAAAAAAAAEAAAAAAAAAAAEEAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAAGRAAAAAgUAAAALc2hhcmVkU3RhdGUAAAAAAAAAAAIEAAAAEm5ld0xhc3RQbGF5ZXJzQWRkcgMDCQEAAAACIT0AAAACBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyAgAAAAAJAABmAAAAAgkAATEAAAABBQAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQAAaAAAAAIJAABkAAAAAgUAAAANYWRkcmVzc0xlbmd0aAAAAAAAAAAAAQAAAAAAAAAACgcJAAEsAAAAAgkAASwAAAACAgAAAAEtBQAAABBuZXdXaW5BZGRyZXNzU3RyCQEAAAAJZHJvcFJpZ2h0AAAAAgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAGQAAAACBQAAAA1hZGRyZXNzTGVuZ3RoAAAAAAAAAAABCQABLAAAAAIJAAEsAAAAAgIAAAABLQUAAAAQbmV3V2luQWRkcmVzc1N0cgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAHTEVBU0lORwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEFAAAAA25pbAkAAAIAAAABCQABLAAAAAICAAAAMFVuc3VwcG9ydGVkIHR5cGUgaW4gd3JpdGVTZXRPZlJvdW5kRGF0YSBtZXRob2Q6IAUAAAAEdHlwZQAAAAAGb2Zmc2V0CQAAZQAAAAIFAAAABmhlaWdodAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAADGN1cnJSb3VuZE51bQMJAABnAAAAAgUAAAAGb2Zmc2V0AAAAAAAAAAAACQAAaQAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQJAAACAAAAAQkAASwAAAACAgAAAC1QbGVhc2UgZG8gbm90IGh1cnJ5LiBNUlQgcGFydHkgd2lsbCBzdGFydCBvbiAJAAGkAAAAAQUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAD2N1cnJSb3VuZEhlaWdodAkAAGoAAAACBQAAAAZvZmZzZXQFAAAADmJsb2Nrc1BlclJvdW5kAAAAABRjdXJyUm91bmRIZWlnaHRTdGFydAkAAGQAAAACCQAAaAAAAAIFAAAADGN1cnJSb3VuZE51bQUAAAAOYmxvY2tzUGVyUm91bmQFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAkAAGQAAAACBQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAUAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAEWN1cnJSb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAxjdXJyUm91bmROdW0AAAAADWN1cnJXaW5IZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABFjdXJyUm91bmREYXRhTGlzdAUAAAAMSWR4V2luSGVpZ2h0AAAAAA1jdXJyTWluUG10QW10BQAAAAdwbXRTdGVwAQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQAAAAFoCQAAZwAAAAIFAAAABmhlaWdodAUAAAABaAAAAAAcYXRMZWFzdE9uZU1vdmVJblJvdW5kUHJlc2VudAkAAGYAAAACBQAAAA1jdXJyV2luSGVpZ2h0BQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAAAAAAWZmlyc3RDb3VudGRvd25GaW5pc2hlZAMJAAAAAAAAAgUAAAANY3VycldpbkhlaWdodAAAAAAAAAAAAAkBAAAADWlzV2luQnlIZWlnaHQAAAABCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAAApoZWlnaHRTdGVwBwAAAAAMaXNQYXVzZUJ5V2luAwkBAAAADWlzV2luQnlIZWlnaHQAAAABBQAAAA1jdXJyV2luSGVpZ2h0BQAAABxhdExlYXN0T25lTW92ZUluUm91bmRQcmVzZW50BwAAAAANaXNQYXVzZUJ5VGltZQMJAABmAAAAAgUAAAAPY3VyclJvdW5kSGVpZ2h0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgYFAAAAFmZpcnN0Q291bnRkb3duRmluaXNoZWQAAAAAB2lzUGF1c2UDBQAAAAxpc1BhdXNlQnlXaW4GBQAAAA1pc1BhdXNlQnlUaW1lAAAAAA1pc0NvbXBldGl0aW9uCQEAAAABIQAAAAEFAAAAB2lzUGF1c2UAAAACAAAAA2ludgEAAAAEbW92ZQAAAAAEAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAApoZWlnaHRTdGVwBAAAAAxuZXdXaW5IZWlnaHQDCQAAZwAAAAIFAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQFAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kBQAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAUAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAQAAAAHcGF5bWVudAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAQAAAAdleHRyYWN0AAAAAQgFAAAAA2ludgAAAAdwYXltZW50CQAAAgAAAAECAAAAOlBsZWFzZSBhdHRhY2ggcGF5bWVudCB3aXRoIE1SVCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDCQAAZwAAAAIFAAAADGN1cnJSb3VuZE51bQUAAAAJbWF4Um91bmRzCQAAAgAAAAECAAAAEU1SVCBwYXJ0eSBpcyBvdmVyAwUAAAAHaXNQYXVzZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARU29ycnkgYnV0IHJvdW5kICMJAAGkAAAAAQUAAAAMY3VyclJvdW5kTnVtAgAAAA0gaXMgZmluaXNoZWQuAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAADTVJUCQAAAgAAAAECAAAAPVBsZWFzZSB1c2UgTVJUIGFzIGEgcGF5bWVudCBhc3NldCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDCQAAZgAAAAIFAAAADWN1cnJNaW5QbXRBbXQIBQAAAAdwYXltZW50AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAICAAAARVNvcnJ5IG15IGZyaWVuZCBidXQgeW91ciBwYXltZW50IGlzIHRvIHNtYWxsLiBDdXJyZW50IG1pbiBwYXltZW50IGlzIAkAAaQAAAABBQAAAA1jdXJyTWluUG10QW10CQEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAcCAAAABE1PVkUFAAAADGN1cnJSb3VuZE51bQUAAAAMbmV3V2luSGVpZ2h0CQACWAAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5CAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQIAAAABPwAAAAAAAAAAAAAAAANpbnYBAAAAEXJlZ2lzdGVyTGVhc2luZ1R4AAAAAgAAAAVyb3VuZAAAAAtsZWFzaW5nSWQ1OAQAAAAJbGVhc2luZ0lkCQACWQAAAAEFAAAAC2xlYXNpbmdJZDU4BAAAAA1yb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMd2lubmVyUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5BAAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAAFUlkeExlYXNpbmdJZFZhbGlkVGlsbAMJAABmAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQkAAAIAAAABAgAAAD5JbXBvc3NpYmxlIHRvIHJlZ2lzdGVyIGxlYXNpbmcgdHJhbnNhY3Rpb24gZm9yIHJvdW5kIGluIGZ1dHVyZQMDCQAAAAAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0FAAAADWlzQ29tcGV0aXRpb24HCQAAAgAAAAECAAAAT0ltcG9zc2libGUgdG8gcmVnaXN0ZXIgbGVhc2luZyB0cmFuc2FjdGlvbiAtIHdpbm5lciBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCB5ZXQDCQAAZgAAAAIJAADIAAAAAQkAAlkAAAABBQAAAAtsZWFzaW5nSWQ1OAAAAAAAAAAAZAkAAAIAAAABAgAAACVJbnZhbGlkIGxlYXNpbmcgdHJhbnNhY3Rpb24gaWQgbGVuZ3RoAwkAAGcAAAACAAAAAAAAAAAACQAAyAAAAAEFAAAACWxlYXNpbmdJZAkAAAIAAAABAgAAADZMZWFzaW5nIHRyYW5zYWN0aW9uIGlkIGlzIG5vdCBlbmNvZGVkIGFzIEJhc2U1OCBmb3JtYXQDCQEAAAAJaXNEZWZpbmVkAAAAAQkAA+kAAAABBQAAAAlsZWFzaW5nSWQJAAACAAAAAQIAAAAyUGFzc2VkIGxlYXNpbmdJZCBoYXMgYWxyZWFkeSBleGlzdGVkIGluIGJsb2NrY2hhaW4DAwkBAAAAAiE9AAAAAgUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQAAAAAAAAAAAAJAABnAAAAAgUAAAAXbGVhc2VJZEV4cGlyYXRpb25IZWlnaHQFAAAABmhlaWdodAcJAAACAAAAAQkAASwAAAACAgAAAChMZWFzaW5nIGlkIGNhbiBiZSByZS1yZWdpc3RlcmVkIG9ubHkgb24gCQABpAAAAAEFAAAAF2xlYXNlSWRFeHBpcmF0aW9uSGVpZ2h0AwkBAAAAAiE9AAAAAggFAAAAA2ludgAAAA9jYWxsZXJQdWJsaWNLZXkFAAAADHdpbm5lclB1YktleQkAAAIAAAABAgAAADFMZWFzaW5nIHR4IGNhbiBiZSByZWdpc3RlcmVkIGJ5IHJvdW5kIHdpbm5lciBvbmx5BAAAAA5yb3VuZFdpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAkBAAAAE3dyaXRlU2V0T2ZSb3VuZERhdGEAAAAHAgAAAAdMRUFTSU5HBQAAAAVyb3VuZAUAAAAOcm91bmRXaW5IZWlnaHQJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5CQABmwAAAAECAAAAAAUAAAALbGVhc2luZ0lkNTgJAABkAAAAAgUAAAAGaGVpZ2h0BQAAABFsZWFzaW5nSWRMaWZldGltZQAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAGYAAAACBQAAAAZoZWlnaHQJAABkAAAAAgkAAGQAAAACBQAAABFibG9ja3NPbkdhbWVTdGFydAkAAGgAAAACBQAAAAltYXhSb3VuZHMFAAAADmJsb2Nrc1BlclJvdW5kBQAAAA1sZWFzaW5nUGVyaW9kBAAAAAckbWF0Y2gwBQAAAAJ0eAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAQTGVhc2VUcmFuc2FjdGlvbgQAAAADbHR4BQAAAAckbWF0Y2gwBAAAAANzaWcJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAAEAAAADnJvdW5kQmFzZTU4U3RyCQACWAAAAAEJAAGRAAAAAggFAAAAA2x0eAAAAAZwcm9vZnMAAAAAAAAAAAEEAAAABXJvdW5kCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAS2AAAAAQkBAAAACnByb29mVG9TdHIAAAABBQAAAA5yb3VuZEJhc2U1OFN0cgIAAAA9RXJyb3IgZHVyaW5nIGNvbnZlcnRpbmcgcm91bmQgbnVtIGludG8gaW50ZWdlciByZXByZXNlbnRhdGlvbgQAAAANcm91bmREYXRhTGlzdAkBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQUAAAAFcm91bmQEAAAADnJvdW5kV2luUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5BAAAABNyZWdpc3RlcmVkTGVhc2luZ0lkCQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4TGVhc2luZ0lkBAAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAAFUlkeExlYXNpbmdJZFZhbGlkVGlsbAMFAAAAEmxlYXNpbmdQZXJpb2RFbmRlZAkAAAIAAAABAgAAACdTb3JyeSBidXQgbGVhc2luZyBwZXJpb2QgaGFzIGJlZW4gZW5kZWQDCQAAZgAAAAIFAAAABmhlaWdodAkAAGUAAAACBQAAABdsZWFzZUlkRXhwaXJhdGlvbkhlaWdodAUAAAAXbGVhc2luZ0lkRGlmZkluTGlmZXRpbWUJAAACAAAAAQIAAABCU29ycnkgYnV0IGxpZmV0aW1lIG9mIHlvdXIgbGVhc2luZyB0cmFuc2FjdGlvbiBpZCBoYXMgYmVl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", "chainId": 84, "height": 731045, "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 maxRounds = 10
9+
10+let pmtStep = (10 * MRTEC)
11+
12+let partyOwnerPubKey = fromBase58String("FCaP4jLhLawzEqbwAQGAVvPQBv2h3LdERCx7fckDvnzr")
13+
14+let partyOwnerAddress = addressFromPublicKey(partyOwnerPubKey)
15+
16+let leasingPeriod = 5
17+
18+let leasingIdLifetime = 3
19+
20+let leasingIdDiffInLifetime = 1
21+
22+let leasingAmt = (1 * WAVELET)
23+
24+let heightStep = 2
25+
26+let blocksOnGameStart = 731045
27+
28+let blocksPerRound = 5
29+
30+let blocksPerCompetition = 3
31+
32+let MRT = fromBase58String("8b4jE7X1yCNcbF4YXZGBKc8T5xdit7b1gENxxx31daua")
33+
34+let MinFEE = ((5 * WAVELET) / 1000)
35+
36+let IdxWinHeight = 0
37+
38+let IdxWinPubKey = 1
39+
40+let IdxLeasingId = 2
41+
42+let IdxLeasingIdValidTill = 3
43+
44+func convertChar (charBase58) = {
45+ let B0 = "q"
46+ let B1 = "r"
47+ let B2 = "s"
48+ let B3 = "t"
49+ let B4 = "u"
50+ let B5 = "v"
51+ let B6 = "w"
52+ let B7 = "x"
53+ let B8 = "y"
54+ let B9 = "z"
55+ if ((charBase58 == B0))
56+ then "0"
57+ else if ((charBase58 == B1))
58+ then "1"
59+ else if ((charBase58 == B2))
60+ then "2"
61+ else if ((charBase58 == B3))
62+ then "3"
63+ else if ((charBase58 == B4))
64+ then "4"
65+ else if ((charBase58 == B5))
66+ then "5"
67+ else if ((charBase58 == B6))
68+ then "6"
69+ else if ((charBase58 == B7))
70+ then "7"
71+ else if ((charBase58 == B8))
72+ then "8"
73+ else if ((charBase58 == B9))
74+ then "9"
75+ else throw("Unsupported char")
76+ }
77+
78+
79+func proofToStr (roundNumProof) = {
80+ let s = size(roundNumProof)
81+ if ((s > 2))
82+ then throw("Invalid ecoded round - size couldn't be greater than 2")
83+ else if ((0 >= s))
84+ then throw("Invalid ecoded round - size couldn't be less than or equals 0")
85+ else if ((s == 1))
86+ then convertChar(take(roundNumProof, 1))
87+ else if ((s == 2))
88+ then (convertChar(take(roundNumProof, 1)) + convertChar(take(drop(roundNumProof, 1), 1)))
89+ else throw("Invalid encoded round")
90+ }
91+
92+
93+func getRoundDataKeyOrFail (round) = if ((0 > round))
94+ then throw("Invalid round number")
95+ else ("round" + toString(round))
96+
97+
98+func readRoundDataListOrFail (round) = {
99+ let roundDataOpt = getString(this, getRoundDataKeyOrFail(round))
100+ let roundDataStr = if (isDefined(roundDataOpt))
101+ then extract(roundDataOpt)
102+ else ""
103+ let partyOwnerAddressStr = toBase58String(partyOwnerAddress.bytes)
104+ if ((roundDataStr != ""))
105+ then split(roundDataStr, "_")
106+ else ["0", toString(pmtStep), partyOwnerAddressStr, "?", "0"]
107+ }
108+
109+
110+func readSharedState () = {
111+ let sharedStateOpt = getString(this, "RoundsSharedState")
112+ let sharedStateStr = if (isDefined(sharedStateOpt))
113+ then extract(sharedStateOpt)
114+ else ""
115+ if ((sharedStateStr != ""))
116+ then split(sharedStateStr, "_")
117+ else ["", "0", ""]
118+ }
119+
120+
121+func writeSetOfRoundData (type,round,newWinHeight,newWinPubKeyStr,newWinPubKey,leasingId58,leaseIdExpirationHeight) = {
122+ let newWinHeightStr = toString(newWinHeight)
123+ let roundData = DataEntry(getRoundDataKeyOrFail(round), ((((((newWinHeightStr + "_") + newWinPubKeyStr) + "_") + leasingId58) + "_") + toString(leaseIdExpirationHeight)))
124+ if ((type == "MOVE"))
125+ then {
126+ let newWinAddressStr = toString(addressFromPublicKey(newWinPubKey))
127+ let addressLength = size(newWinAddressStr)
128+ let sharedState = readSharedState()
129+ let newTotalGamesCountStr = toString((parseIntValue(sharedState[1]) + 1))
130+ let currLastPlayersAddr = sharedState[2]
131+ let newLastPlayersAddr = if (if ((currLastPlayersAddr != ""))
132+ then (size(currLastPlayersAddr) > ((addressLength + 1) * 10))
133+ else false)
134+ then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (addressLength + 1)))
135+ else (("-" + newWinAddressStr) + currLastPlayersAddr)
136+ WriteSet([roundData, DataEntry("RoundsSharedState", ((((newWinHeightStr + "_") + newTotalGamesCountStr) + "_") + newLastPlayersAddr))])
137+ }
138+ else if ((type == "LEASING"))
139+ then WriteSet([roundData])
140+ else throw(("Unsupported type in writeSetOfRoundData method: " + type))
141+ }
142+
143+
144+let offset = (height - blocksOnGameStart)
145+
146+let currRoundNum = if ((offset >= 0))
147+ then (offset / blocksPerRound)
148+ else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
149+
150+let currRoundHeight = (offset % blocksPerRound)
151+
152+let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
153+
154+let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
155+
156+let currRoundDataList = readRoundDataListOrFail(currRoundNum)
157+
158+let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
159+
160+let currMinPmtAmt = pmtStep
161+
162+func isWinByHeight (h) = (height >= h)
163+
164+
165+let atLeastOneMoveInRoundPresent = (currWinHeight > currRoundHeightStart)
166+
167+let firstCountdownFinished = if ((currWinHeight == 0))
168+ then isWinByHeight((currRoundHeightStart + heightStep))
169+ else false
170+
171+let isPauseByWin = if (isWinByHeight(currWinHeight))
172+ then atLeastOneMoveInRoundPresent
173+ else false
174+
175+let isPauseByTime = if ((currRoundHeight > blocksPerCompetition))
176+ then true
177+ else firstCountdownFinished
178+
179+let isPause = if (isPauseByWin)
180+ then true
181+ else isPauseByTime
182+
183+let isCompetition = !(isPause)
184+
185+@Callable(inv)
186+func move () = {
187+ let overflowedNewWinHeight = (height + heightStep)
188+ let newWinHeight = if ((overflowedNewWinHeight >= currRoundCompetitionEnd))
189+ then currRoundCompetitionEnd
190+ else overflowedNewWinHeight
191+ let payment = if (isDefined(inv.payment))
192+ then extract(inv.payment)
193+ else throw("Please attach payment with MRT to participate in MRT party")
194+ if ((currRoundNum >= maxRounds))
195+ then throw("MRT party is over")
196+ else if (isPause)
197+ then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
198+ else if ((payment.assetId != MRT))
199+ then throw("Please use MRT as a payment asset to participate in MRT party")
200+ else if ((currMinPmtAmt > payment.amount))
201+ then throw(("Sorry my friend but your payment is to small. Current min payment is " + toString(currMinPmtAmt)))
202+ else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toBase58String(inv.callerPublicKey), inv.callerPublicKey, "?", 0)
203+ }
204+
205+
206+
207+@Callable(inv)
208+func registerLeasingTx (round,leasingId58) = {
209+ let leasingId = fromBase58String(leasingId58)
210+ let roundDataList = readRoundDataListOrFail(round)
211+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
212+ let leaseIdExpirationHeight = parseIntValue(roundDataList[IdxLeasingIdValidTill])
213+ if ((round > currRoundNum))
214+ then throw("Impossible to register leasing transaction for round in future")
215+ else if (if ((round == currRoundNum))
216+ then isCompetition
217+ else false)
218+ then throw("Impossible to register leasing transaction - winner has not been determined yet")
219+ else if ((size(fromBase58String(leasingId58)) > 100))
220+ then throw("Invalid leasing transaction id length")
221+ else if ((0 >= size(leasingId)))
222+ then throw("Leasing transaction id is not encoded as Base58 format")
223+ else if (isDefined(transactionHeightById(leasingId)))
224+ then throw("Passed leasingId has already existed in blockchain")
225+ else if (if ((leaseIdExpirationHeight != 0))
226+ then (leaseIdExpirationHeight >= height)
227+ else false)
228+ then throw(("Leasing id can be re-registered only on " + toString(leaseIdExpirationHeight)))
229+ else if ((inv.callerPublicKey != winnerPubKey))
230+ then throw("Leasing tx can be registered by round winner only")
231+ else {
232+ let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
233+ writeSetOfRoundData("LEASING", round, roundWinHeight, roundDataList[IdxWinPubKey], toBytes(""), leasingId58, (height + leasingIdLifetime))
234+ }
235+ }
236+
237+
238+@Verifier(tx)
239+func verify () = {
240+ let leasingPeriodEnded = (height > ((blocksOnGameStart + (maxRounds * blocksPerRound)) + leasingPeriod))
241+ match tx {
242+ case ltx: LeaseTransaction =>
243+ let sig = ltx.proofs[0]
244+ let roundBase58Str = toBase58String(ltx.proofs[1])
245+ let round = valueOrErrorMessage(parseInt(proofToStr(roundBase58Str)), "Error during converting round num into integer representation")
246+ let roundDataList = readRoundDataListOrFail(round)
247+ let roundWinPubKey = fromBase58String(roundDataList[IdxWinPubKey])
248+ let registeredLeasingId = fromBase58String(roundDataList[IdxLeasingId])
249+ let leaseIdExpirationHeight = parseIntValue(roundDataList[IdxLeasingIdValidTill])
250+ if (leasingPeriodEnded)
251+ then throw("Sorry but leasing period has been ended")
252+ else if ((height > (leaseIdExpirationHeight - leasingIdDiffInLifetime)))
253+ then throw("Sorry but lifetime of your leasing transaction id has been expired")
254+ else if (!(sigVerify(ltx.bodyBytes, sig, roundWinPubKey)))
255+ then throw("Invalid leasing transaction signature. Leasing is allowed for winner only.")
256+ else if ((ltx.id != registeredLeasingId))
257+ then throw("Leasing transaction id doesn't match with registered leasing id")
258+ else if ((ltx.amount != leasingAmt))
259+ then throw(("Impossible to lease less or greater than " + toString(leasingAmt)))
260+ else if ((ltx.fee != MinFEE))
261+ then throw(("Impossible to lease with fee less or greater than " + toString(MinFEE)))
262+ else true
263+ case cltx: LeaseCancelTransaction =>
264+ if (!(leasingPeriodEnded))
265+ then throw("MRT party has not finished yet. Leasing Cancel is not allowed.")
266+ else if (!(sigVerify(tx.bodyBytes, tx.proofs[0], partyOwnerPubKey)))
267+ then throw("Leasing Cancel is allowed to Party Owner only")
268+ else if ((cltx.fee != MinFEE))
269+ then throw(("Impossible to cancle leasing with fee less or greater than " + toString(MinFEE)))
270+ else true
271+ case ttx: TransferTransaction =>
272+ if (!(leasingPeriodEnded))
273+ then throw("MRT party has not finished yet. Transfer is not allowed.")
274+ else if ((addressFromRecipient(ttx.recipient).bytes != partyOwnerAddress.bytes))
275+ then throw("Transfer is allowed to Party Owner address only")
276+ else if (!(sigVerify(ttx.bodyBytes, ttx.proofs[0], partyOwnerPubKey)))
277+ then throw("Transfer is allowed for Party Owner only.")
278+ else true
279+ case stx: SetScriptTransaction =>
280+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
281+ case _ =>
282+ false
283+ }
284+ }
285+

github/deemru/w8io/873ac7e 
21.82 ms