tx · HVXpHf1dHvSS4DuLe3HP8h86vSTFjT4aojj9JURuqtoj

3MwVo8ZMe2ppruTxNXhSWPgtRQy8iKSBubC:  -0.01000000 Waves

2019.10.15 21:11 [721411] smart account 3MwVo8ZMe2ppruTxNXhSWPgtRQy8iKSBubC > SELF 0.00000000 Waves

{ "type": 13, "id": "HVXpHf1dHvSS4DuLe3HP8h86vSTFjT4aojj9JURuqtoj", "fee": 1000000, "feeAssetId": null, "timestamp": 1571163079346, "version": 1, "sender": "3MwVo8ZMe2ppruTxNXhSWPgtRQy8iKSBubC", "senderPublicKey": "DM3SrUSRbffDdTiWBy6d23RMSJLqJHUNFsibDGx89aNk", "proofs": [ "4i3aCf6wgL4W4MNkek9yTxnhCkdVKTXoixh6Bbv2YZLv6aAZJVfipiAJgDMGTNt7YnCygMvENcYCZXevZkW9b6i" ], "script": "base64:AAIDAAAAAAAAAAoIARIAEgQKAgEIAAAAIAAAAAAHV0FWRUxFVAkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gAAAAABU1SVEVDAAAAAAAAAABkAAAAAApwbXRPblN0YXJ0CQAAaAAAAAIAAAAAAAAAAAoFAAAABU1SVEVDAAAAABBwYXJ0eU93bmVyUHViS2V5CQACWQAAAAECAAAALEZDYVA0akxoTGF3ekVxYndBUUdBVnZQUUJ2MmgzTGRFUkN4N2Zja0R2bnpyAAAAABFwYXJ0eU93bmVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAQcGFydHlPd25lclB1YktleQAAAAANbGVhc2luZ1BlcmlvZAAAAAAAAAknwAAAAAAGd2luQW10CQAAaAAAAAIAAAAAAAAAAAEFAAAAB1dBVkVMRVQAAAAACmhlaWdodFN0ZXAAAAAAAAAAAAMAAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAAAACwICAAAAAA5ibG9ja3NQZXJSb3VuZAAAAAAAAAAADAAAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24AAAAAAAAAAAgAAAAAA01SVAkAAlkAAAABAgAAACw4YjRqRTdYMXlDTmNiRjRZWFpHQktjOFQ1eGRpdDdiMWdFTnh4eDMxZGF1YQAAAAAGTWluRkVFCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAHV0FWRUxFVAAAAAAAAAAD6AAAAAAMSWR4V2luSGVpZ2h0AAAAAAAAAAAAAAAAAAxJZHhXaW5QdWJLZXkAAAAAAAAAAAEAAAAADElkeExlYXNpbmdJZAAAAAAAAAAAAgEAAAAVZ2V0Um91bmREYXRhS2V5T3JGYWlsAAAAAQAAAAVyb3VuZAMJAABmAAAAAgAAAAAAAAAAAAUAAAAFcm91bmQJAAACAAAAAQIAAAAUSW52YWxpZCByb3VuZCBudW1iZXIJAAEsAAAAAgIAAAAFcm91bmQJAAGkAAAAAQUAAAAFcm91bmQBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQAAAAVyb3VuZAQAAAAMcm91bmREYXRhT3B0CQAEHQAAAAIFAAAABHRoaXMJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMcm91bmREYXRhU3RyAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAADHJvdW5kRGF0YU9wdAkBAAAAB2V4dHJhY3QAAAABBQAAAAxyb3VuZERhdGFPcHQCAAAAAAQAAAAUcGFydHlPd25lckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAEXBhcnR5T3duZXJBZGRyZXNzAAAABWJ5dGVzAwkBAAAAAiE9AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAAJAAS1AAAAAgUAAAAMcm91bmREYXRhU3RyAgAAAAFfCQAETAAAAAICAAAAATAJAARMAAAAAgkAAaQAAAABBQAAAApwbXRPblN0YXJ0CQAETAAAAAIFAAAAFHBhcnR5T3duZXJBZGRyZXNzU3RyCQAETAAAAAICAAAACVVOREVGSU5FRAUAAAADbmlsAQAAAA9yZWFkU2hhcmVkU3RhdGUAAAAABAAAAA5zaGFyZWRTdGF0ZU9wdAkABB0AAAACBQAAAAR0aGlzAgAAABFSb3VuZHNTaGFyZWRTdGF0ZQQAAAAOc2hhcmVkU3RhdGVTdHIDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAOc2hhcmVkU3RhdGVPcHQJAQAAAAdleHRyYWN0AAAAAQUAAAAOc2hhcmVkU3RhdGVPcHQCAAAAAAMJAQAAAAIhPQAAAAIFAAAADnNoYXJlZFN0YXRlU3RyAgAAAAAJAAS1AAAAAgUAAAAOc2hhcmVkU3RhdGVTdHICAAAAAV8JAARMAAAAAgIAAAAACQAETAAAAAICAAAAATAJAARMAAAAAgIAAAAABQAAAANuaWwBAAAAE3dyaXRlU2V0T2ZSb3VuZERhdGEAAAAGAAAABHR5cGUAAAAFcm91bmQAAAAMbmV3V2luSGVpZ2h0AAAAD25ld1dpblB1YktleVN0cgAAAAxuZXdXaW5QdWJLZXkAAAALbGVhc2luZ0lkNTgEAAAAD25ld1dpbkhlaWdodFN0cgkAAaQAAAABBQAAAAxuZXdXaW5IZWlnaHQDCQAAAAAAAAIFAAAABHR5cGUCAAAABE1PVkUEAAAAEG5ld1dpbkFkZHJlc3NTdHIJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAMbmV3V2luUHViS2V5BAAAAA1hZGRyZXNzTGVuZ3RoCQABMQAAAAEFAAAAEG5ld1dpbkFkZHJlc3NTdHIEAAAAC3NoYXJlZFN0YXRlCQEAAAAPcmVhZFNoYXJlZFN0YXRlAAAAAAQAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyCQABpAAAAAEJAABkAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAC3NoYXJlZFN0YXRlAAAAAAAAAAABAAAAAAAAAAABBAAAABNjdXJyTGFzdFBsYXllcnNBZGRyCQABkQAAAAIFAAAAC3NoYXJlZFN0YXRlAAAAAAAAAAACBAAAABJuZXdMYXN0UGxheWVyc0FkZHIDAwkBAAAAAiE9AAAAAgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgIAAAAACQAAZgAAAAIJAAExAAAAAQUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkAAGgAAAACCQAAZAAAAAIFAAAADWFkZHJlc3NMZW5ndGgAAAAAAAAAAAEAAAAAAAAAAAoHCQABLAAAAAIJAAEsAAAAAgIAAAABLQUAAAAQbmV3V2luQWRkcmVzc1N0cgkBAAAACWRyb3BSaWdodAAAAAIFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAABkAAAAAgUAAAANYWRkcmVzc0xlbmd0aAAAAAAAAAAAAQkAASwAAAACCQABLAAAAAICAAAAAS0FAAAAEG5ld1dpbkFkZHJlc3NTdHIFAAAAE2N1cnJMYXN0UGxheWVyc0FkZHIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAQAAABVnZXRSb3VuZERhdGFLZXlPckZhaWwAAAABBQAAAAVyb3VuZAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA9uZXdXaW5IZWlnaHRTdHICAAAAAV8FAAAAD25ld1dpblB1YktleVN0cgIAAAABXwUAAAALbGVhc2luZ0lkNTgJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAHTEVBU0lORwkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAFWdldFJvdW5kRGF0YUtleU9yRmFpbAAAAAEFAAAABXJvdW5kCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAPbmV3V2luUHViS2V5U3RyAgAAAAFfBQAAAAtsZWFzaW5nSWQ1OAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAwVW5zdXBwb3J0ZWQgdHlwZSBpbiB3cml0ZVNldE9mUm91bmREYXRhIG1ldGhvZDogBQAAAAR0eXBlAAAAAAZvZmZzZXQJAABlAAAAAgUAAAAGaGVpZ2h0BQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAMY3VyclJvdW5kTnVtAwkAAGcAAAACBQAAAAZvZmZzZXQAAAAAAAAAAAAJAABpAAAAAgUAAAAGb2Zmc2V0BQAAAA5ibG9ja3NQZXJSb3VuZAkAAAIAAAABCQABLAAAAAICAAAALVBsZWFzZSBkbyBub3QgaHVycnkuIE1SVCBwYXJ0eSB3aWxsIHN0YXJ0IG9uIAkAAaQAAAABBQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAPY3VyclJvdW5kSGVpZ2h0CQAAagAAAAIFAAAABm9mZnNldAUAAAAOYmxvY2tzUGVyUm91bmQAAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0CQAAZAAAAAIJAABoAAAAAgUAAAAMY3VyclJvdW5kTnVtBQAAAA5ibG9ja3NQZXJSb3VuZAUAAAARYmxvY2tzT25HYW1lU3RhcnQAAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kCQAAZAAAAAIFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BQAAABRibG9ja3NQZXJDb21wZXRpdGlvbgAAAAARY3VyclJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAADGN1cnJSb3VuZE51bQAAAAANY3VycldpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEWN1cnJSb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5IZWlnaHQAAAAADWN1cnJNaW5QbXRBbXQFAAAACnBtdE9uU3RhcnQAAAAADGlzUGF1c2VCeVdpbgMJAABnAAAAAgUAAAAGaGVpZ2h0BQAAAA1jdXJyV2luSGVpZ2h0CQAAZgAAAAIFAAAADWN1cnJXaW5IZWlnaHQFAAAAFGN1cnJSb3VuZEhlaWdodFN0YXJ0BwAAAAANaXNQYXVzZUJ5VGltZQkAAGYAAAACBQAAAA9jdXJyUm91bmRIZWlnaHQFAAAAFGJsb2Nrc1BlckNvbXBldGl0aW9uAAAAAAdpc1BhdXNlAwUAAAAMaXNQYXVzZUJ5V2luBgUAAAANaXNQYXVzZUJ5VGltZQAAAAANaXNDb21wZXRpdGlvbgkBAAAAASEAAAABBQAAAAdpc1BhdXNlAAAAAgAAAANpbnYBAAAABG1vdmUAAAAABAAAABZvdmVyZmxvd2VkTmV3V2luSGVpZ2h0CQAAZAAAAAIFAAAABmhlaWdodAUAAAAKaGVpZ2h0U3RlcAQAAAAMbmV3V2luSGVpZ2h0AwkAAGcAAAACBQAAABZvdmVyZmxvd2VkTmV3V2luSGVpZ2h0BQAAABdjdXJyUm91bmRDb21wZXRpdGlvbkVuZAUAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQFAAAAFm92ZXJmbG93ZWROZXdXaW5IZWlnaHQEAAAAB3BheW1lbnQDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA2ludgAAAAdwYXltZW50CQEAAAAHZXh0cmFjdAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkAAAIAAAABAgAAADpQbGVhc2UgYXR0YWNoIHBheW1lbnQgd2l0aCBNUlQgdG8gcGFydGljaXBhdGUgaW4gTVJUIHBhcnR5AwUAAAAHaXNQYXVzZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAARU29ycnkgYnV0IHJvdW5kICMJAAGkAAAAAQUAAAAMY3VyclJvdW5kTnVtAgAAAA0gaXMgZmluaXNoZWQuAwkBAAAAAiE9AAAAAggFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAUAAAADTVJUCQAAAgAAAAECAAAAPVBsZWFzZSB1c2UgTVJUIGFzIGEgcGF5bWVudCBhc3NldCB0byBwYXJ0aWNpcGF0ZSBpbiBNUlQgcGFydHkDCQAAZgAAAAIFAAAADWN1cnJNaW5QbXRBbXQIBQAAAAdwYXltZW50AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAICAAAARVNvcnJ5IG15IGZyaWVuZCBidXQgeW91ciBwYXltZW50IGlzIHRvIHNtYWxsLiBDdXJyZW50IG1pbiBwYXltZW50IGlzIAkAAaQAAAABBQAAAA1jdXJyTWluUG10QW10CQEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAYCAAAABE1PVkUFAAAADGN1cnJSb3VuZE51bQUAAAAMbmV3V2luSGVpZ2h0CQACWAAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5CAUAAAADaW52AAAAD2NhbGxlclB1YmxpY0tleQIAAAAJVU5ERUZJTkVEAAAAA2ludgEAAAARcmVnaXN0ZXJMZWFzaW5nVHgAAAACAAAABXJvdW5kAAAAC2xlYXNpbmdJZDU4BAAAAAlsZWFzaW5nSWQJAAJZAAAAAQUAAAALbGVhc2luZ0lkNTgEAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAABXJvdW5kBAAAAAx3aW5uZXJQdWJLZXkJAAJZAAAAAQkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAAxJZHhXaW5QdWJLZXkDCQAAZgAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0JAAACAAAAAQIAAAA+SW1wb3NzaWJsZSB0byByZWdpc3RlciBsZWFzaW5nIHRyYW5zYWN0aW9uIGZvciByb3VuZCBpbiBmdXR1cmUDAwkAAAAAAAACBQAAAAVyb3VuZAUAAAAMY3VyclJvdW5kTnVtBQAAAA1pc0NvbXBldGl0aW9uBwkAAAIAAAABAgAAAE9JbXBvc3NpYmxlIHRvIHJlZ2lzdGVyIGxlYXNpbmcgdHJhbnNhY3Rpb24gLSB3aW5uZXIgaGFzIG5vdCBiZWVuIGRl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", "chainId": 84, "height": 721411, "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 = 3
19+
20+let blocksOnGameStart = 721410
21+
22+let blocksPerRound = 12
23+
24+let blocksPerCompetition = 8
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, "UNDEFINED"]
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+let isPauseByWin = if ((height >= currWinHeight))
105+ then (currWinHeight > currRoundHeightStart)
106+ else false
107+
108+let isPauseByTime = (currRoundHeight > blocksPerCompetition)
109+
110+let isPause = if (isPauseByWin)
111+ then true
112+ else isPauseByTime
113+
114+let isCompetition = !(isPause)
115+
116+@Callable(inv)
117+func move () = {
118+ let overflowedNewWinHeight = (height + heightStep)
119+ let newWinHeight = if ((overflowedNewWinHeight >= currRoundCompetitionEnd))
120+ then currRoundCompetitionEnd
121+ else overflowedNewWinHeight
122+ let payment = if (isDefined(inv.payment))
123+ then extract(inv.payment)
124+ else throw("Please attach payment with MRT to participate in MRT party")
125+ if (isPause)
126+ then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
127+ else if ((payment.assetId != MRT))
128+ then throw("Please use MRT as a payment asset to participate in MRT party")
129+ else if ((currMinPmtAmt > payment.amount))
130+ then throw(("Sorry my friend but your payment is to small. Current min payment is " + toString(currMinPmtAmt)))
131+ else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toBase58String(inv.callerPublicKey), inv.callerPublicKey, "UNDEFINED")
132+ }
133+
134+
135+
136+@Callable(inv)
137+func registerLeasingTx (round,leasingId58) = {
138+ let leasingId = fromBase58String(leasingId58)
139+ let roundDataList = readRoundDataListOrFail(round)
140+ let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
141+ if ((round > currRoundNum))
142+ then throw("Impossible to register leasing transaction for round in future")
143+ else if (if ((round == currRoundNum))
144+ then isCompetition
145+ else false)
146+ then throw("Impossible to register leasing transaction - winner has not been determined yet")
147+ else if ((size(leasingId58) != 44))
148+ then throw("Invalid leasing transaction id length")
149+ else if ((0 >= size(leasingId)))
150+ then throw("Leasing transaction id is not encoded as Base58 format")
151+ else if (isDefined(transactionHeightById(leasingId)))
152+ then throw("Passed leasingId58 has already existed in blockchain")
153+ else if ((roundDataList[IdxLeasingId] != "UNDEFINED"))
154+ then throw(("Leasing tx id has already registrered for round " + toString(round)))
155+ else if ((inv.callerPublicKey != winnerPubKey))
156+ then throw("Leasing tx can be registered by round winner only")
157+ else {
158+ let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
159+ writeSetOfRoundData("LEASING", round, roundWinHeight, roundDataList[IdxWinPubKey], toBytes(""), leasingId58)
160+ }
161+ }
162+
163+
164+@Verifier(tx)
165+func verify () = {
166+ let leasingPeriodEnded = (height > (blocksOnGameStart + leasingPeriod))
167+ match tx {
168+ case ltx: LeaseTransaction =>
169+ let sig = ltx.proofs[0]
170+ let round = toInt(ltx.proofs[1])
171+ let roundDataList = readRoundDataListOrFail(round)
172+ let roundWinPubKey = fromBase58String(roundDataList[IdxWinPubKey])
173+ let registeredLeasingId = fromBase58String(roundDataList[IdxLeasingId])
174+ if (leasingPeriodEnded)
175+ then throw("Sorry but leasing period has been ended")
176+ else if (!(sigVerify(ltx.bodyBytes, sig, roundWinPubKey)))
177+ then throw("Invalid leasing transaction signature. Leasing is allowed for winner only.")
178+ else if ((ltx.id != registeredLeasingId))
179+ then throw("Leasing transaction id doesn't match with registered leasing id")
180+ else if ((ltx.amount != winAmt))
181+ then throw(("Impossible to lease less or greater than " + toString(winAmt)))
182+ else if ((ltx.fee != MinFEE))
183+ then throw(("Impossible to lease with fee less or greater than " + toString(MinFEE)))
184+ else true
185+ case cltx: LeaseCancelTransaction =>
186+ if (!(leasingPeriodEnded))
187+ then throw("MRT party has not finished yet. Leasing Cancel is not allowed.")
188+ else if (!(sigVerify(tx.bodyBytes, tx.proofs[0], partyOwnerPubKey)))
189+ then throw("Leasing Cancel is allowed to Party Owner only")
190+ else if ((cltx.fee != MinFEE))
191+ then throw(("Impossible to cancle leasing with fee less or greater than " + toString(MinFEE)))
192+ else true
193+ case ttx: TransferTransaction =>
194+ if (!(leasingPeriodEnded))
195+ then throw("MRT party has not finished yet. Transfer is not allowed.")
196+ else if ((addressFromRecipient(ttx.recipient).bytes != partyOwnerAddress.bytes))
197+ then throw("Transfer is allowed to Party Owner address only")
198+ else if (!(sigVerify(ttx.bodyBytes, ttx.proofs[0], partyOwnerPubKey)))
199+ then throw("Transfer is allowed for Party Owner only.")
200+ else true
201+ case stx: SetScriptTransaction =>
202+ sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
203+ case _ =>
204+ false
205+ }
206+ }
207+

github/deemru/w8io/873ac7e 
38.28 ms