tx · Hw3SNazPHe8p4mpHEsP9yb6LQFRUuJn91p5D9Wuryj4a

3Mw2SwhjzafPSAUmkX9GoKRBPBAp2xY9nRs:  -0.01000000 Waves

2019.09.20 17:26 [684764] smart account 3Mw2SwhjzafPSAUmkX9GoKRBPBAp2xY9nRs > SELF 0.00000000 Waves

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

github/deemru/w8io/873ac7e 
41.92 ms