tx · 9oazsGWyM7yZrH5Wkr7qJYBFDGBkkmunkfPq4qH4w3xE

3MsHLxtFiNikjypo49aYbDZs1VQeRUA1xkh:  -0.01000000 Waves

2019.10.18 20:02 [725714] smart account 3MsHLxtFiNikjypo49aYbDZs1VQeRUA1xkh > SELF 0.00000000 Waves

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

github/deemru/w8io/169f3d6 
28.32 ms