tx · HhgAdUtkc3K7GSYx9t3VJxW8Gnbgpf5pLmzr3b8R53Dt

3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ:  -0.02000000 Waves

2019.12.10 16:35 [802753] smart account 3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ > SELF 0.00000000 Waves

{ "type": 13, "id": "HhgAdUtkc3K7GSYx9t3VJxW8Gnbgpf5pLmzr3b8R53Dt", "fee": 2000000, "feeAssetId": null, "timestamp": 1575984847958, "version": 1, "sender": "3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ", "senderPublicKey": "5hFJATDiJD8dJsn37rMkyq5azHhoGyy3mSuG98wX4q4S", "proofs": [ "Mrc83G5Td6nKchcVioDNxqdsDRh4d8SA6MZLBrrzvA93h4TvUZgmx7y1UZ35orcDfDJeT8Sd8up7XF9n6GTeads" ], "script": "base64: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cgUAAAATY3Vyckxhc3RQbGF5ZXJzQWRkcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACBQAAAAlyb3VuZERhdGEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAICAAAAEVJvdW5kc1NoYXJlZFN0YXRlCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAD25ld1dpbkhlaWdodFN0cgIAAAABXwUAAAAVbmV3VG90YWxHYW1lc0NvdW50U3RyAgAAAAFfBQAAABJuZXdMYXN0UGxheWVyc0FkZHIFAAAAA25pbAMJAAAAAAAAAgUAAAAEdHlwZQIAAAAIV0lUSERSQVcJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgUAAAAJcm91bmREYXRhBQAAAANuaWwJAAACAAAAAQkAASwAAAACAgAAADBVbnN1cHBvcnRlZCB0eXBlIGluIHdyaXRlU2V0T2ZSb3VuZERhdGEgbWV0aG9kOiAFAAAABHR5cGUAAAAABm9mZnNldAkAAGUAAAACBQAAAAZoZWlnaHQFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAAxjdXJyUm91bmROdW0DCQAAZwAAAAIFAAAABm9mZnNldAAAAAAAAAAAAAkAAGkAAAACBQAAAAZvZmZzZXQFAAAADmJsb2Nrc1BlclJvdW5kCQAAAgAAAAEJAAEsAAAAAgIAAAAtUGxlYXNlIGRvIG5vdCBodXJyeS4gTVJUIHBhcnR5IHdpbGwgc3RhcnQgb24gCQABpAAAAAEFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0AAAAAA9jdXJyUm91bmRIZWlnaHQJAABqAAAAAgUAAAAGb2Zmc2V0BQAAAA5ibG9ja3NQZXJSb3VuZAAAAAAUY3VyclJvdW5kSGVpZ2h0U3RhcnQJAABkAAAAAgkAAGgAAAACBQAAAAxjdXJyUm91bmROdW0FAAAADmJsb2Nrc1BlclJvdW5kBQAAABFibG9ja3NPbkdhbWVTdGFydAAAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQJAABkAAAAAgUAAAAUY3VyclJvdW5kSGVpZ2h0U3RhcnQFAAAAFGJsb2Nrc1BlckNvbXBldGl0aW9uAAAAABFjdXJyUm91bmREYXRhTGlzdAkBAAAAF3JlYWRSb3VuZERhdGFMaXN0T3JGYWlsAAAAAQUAAAAMY3VyclJvdW5kTnVtAAAAAA1jdXJyV2luSGVpZ2h0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAARY3VyclJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAAAAAANY3Vyck1pblBtdEFtdAUAAAAHcG10U3RlcAEAAAANaXNXaW5CeUhlaWdodAAAAAEAAAABaAkAAGcAAAACBQAAAAZoZWlnaHQFAAAAAWgAAAAAHGF0TGVhc3RPbmVNb3ZlSW5Sb3VuZFByZXNlbnQJAABmAAAAAgUAAAANY3VycldpbkhlaWdodAUAAAAUY3VyclJvdW5kSGVpZ2h0U3RhcnQAAAAAFmZpcnN0Q291bnRkb3duRmluaXNoZWQDCQAAAAAAAAIFAAAADWN1cnJXaW5IZWlnaHQAAAAAAAAAAAAJAQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQkAAGQAAAACBQAAABRjdXJyUm91bmRIZWlnaHRTdGFydAUAAAAKaGVpZ2h0U3RlcAcAAAAADGlzUGF1c2VCeVdpbgMJAQAAAA1pc1dpbkJ5SGVpZ2h0AAAAAQUAAAANY3VycldpbkhlaWdodAUAAAAcYXRMZWFzdE9uZU1vdmVJblJvdW5kUHJlc2VudAcAAAAADWlzUGF1c2VCeVRpbWUDCQAAZgAAAAIFAAAAD2N1cnJSb3VuZEhlaWdodAUAAAAUYmxvY2tzUGVyQ29tcGV0aXRpb24GBQAAABZmaXJzdENvdW50ZG93bkZpbmlzaGVkAAAAAAdpc1BhdXNlAwUAAAAMaXNQYXVzZUJ5V2luBgUAAAANaXNQYXVzZUJ5VGltZQAAAAANaXNDb21wZXRpdGlvbgkBAAAAASEAAAABBQAAAAdpc1BhdXNlAQAAAARtb3ZlAAAAAQAAAAFwAwkBAAAAASEAAAABBQAAAA1pc0NvbXBldGl0aW9uCQAAAgAAAAECAAAAAW8EAAAADXJvdW5kRGF0YUxpc3QJAQAAABdyZWFkUm91bmREYXRhTGlzdE9yRmFpbAAAAAEFAAAADGN1cnJSb3VuZE51bQQAAAAMd2lubmVyUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5AwkAAAAAAAACBQAAAAFwBQAAAAx3aW5uZXJQdWJLZXkJAAACAAAAAQIAAAABPQMJAQAAAAIhPQAAAAIFAAAADWN1cnJXaW5IZWlnaHQJAABkAAAAAgUAAAAGaGVpZ2h0AAAAAAAAAAABCQAAAgAAAAECAAAAASEGAAAAAwAAAANpbnYBAAAABW1vdmVyAAAAAAQAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAkAAGQAAAACBQAAAAZoZWlnaHQFAAAACmhlaWdodFN0ZXAEAAAADG5ld1dpbkhlaWdodAMJAABnAAAAAgUAAAAWb3ZlcmZsb3dlZE5ld1dpbkhlaWdodAUAAAAXY3VyclJvdW5kQ29tcGV0aXRpb25FbmQFAAAAF2N1cnJSb3VuZENvbXBldGl0aW9uRW5kBQAAABZvdmVyZmxvd2VkTmV3V2luSGVpZ2h0BAAAAAdwYXltZW50AwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANpbnYAAAAHcGF5bWVudAkBAAAAB2V4dHJhY3QAAAABCAUAAAADaW52AAAAB3BheW1lbnQJAAACAAAAAQIAAAA6UGxlYXNlIGF0dGFjaCBwYXltZW50IHdpdGggTVJUIHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAABnAAAAAgUAAAAMY3VyclJvdW5kTnVtBQAAAAltYXhSb3VuZHMJAAACAAAAAQIAAAARTVJUIHBhcnR5IGlzIG92ZXIDBQAAAAdpc1BhdXNlCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAABFTb3JyeSBidXQgcm91bmQgIwkAAaQAAAABBQAAAAxjdXJyUm91bmROdW0CAAAADSBpcyBmaW5pc2hlZC4DCQEAAAACIT0AAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAANNUlQJAAACAAAAAQIAAAA9UGxlYXNlIHVzZSBNUlQgYXMgYSBwYXltZW50IGFzc2V0IHRvIHBhcnRpY2lwYXRlIGluIE1SVCBwYXJ0eQMJAABmAAAAAgUAAAANY3Vyck1pblBtdEFtdAgFAAAAB3BheW1lbnQAAAAGYW1vdW50CQAAAgAAAAEJAAEsAAAAAgIAAABGU29ycnkgbXkgZnJpZW5kIGJ1dCB5b3VyIHBheW1lbnQgaXMgdG9vIHNtYWxsLiBDdXJyZW50IG1pbiBwYXltZW50IGlzIAkAAaQAAAABBQAAAA1jdXJyTWluUG10QW10CQEAAAATd3JpdGVTZXRPZlJvdW5kRGF0YQAAAAYCAAAABE1PVkUFAAAADGN1cnJSb3VuZE51bQUAAAAMbmV3V2luSGVpZ2h0CQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5CQACWAAAAAEIBQAAAANpbnYAAAAPY2FsbGVyUHVibGljS2V5AgAAAAE/AAAAA2ludgEAAAAId2l0aGRyYXcAAAABAAAABXJvdW5kBAAAAA1yb3VuZERhdGFMaXN0CQEAAAAXcmVhZFJvdW5kRGF0YUxpc3RPckZhaWwAAAABBQAAAAVyb3VuZAQAAAAMd2lubmVyUHViS2V5CQACWQAAAAEJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAAMSWR4V2luUHViS2V5BAAAAAx3aXRoZHJhd0lkNTgJAAGRAAAAAgUAAAANcm91bmREYXRhTGlzdAUAAAANSWR4V2l0aGRyYXdJZAMJAABmAAAAAgUAAAAFcm91bmQFAAAADGN1cnJSb3VuZE51bQkAAAIAAAABAgAAADVJbXBvc3NpYmxlIHRvIHdpdGhkcmF3IHdpbiBhbW91bnQgZm9yIHJvdW5kIGluIGZ1dHVyZQMDCQAAAAAAAAIFAAAABXJvdW5kBQAAAAxjdXJyUm91bmROdW0FAAAADWlzQ29tcGV0aXRpb24HCQAAAgAAAAECAAAARkltcG9zc2libGUgdG8gd2l0aGRyYXcgd2luIGFtb3VudCAtIHdpbm5lciBoYXMgbm90IGJlZW4gZGV0ZXJtaW5lZCB5ZXQDCQEAAAACIT0AAAACBQAAAAx3aXRoZHJhd0lkNTgCAAAAAT8JAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAEVdpbm5lciBvZiByb3VuZCAjCQABpAAAAAEFAAAABXJvdW5kAgAAABwgaGFzIGFscmVhZHkgdGFrZW4gdGhlIHByaXplBAAAABN3aXRoZHJhd1BlcmlvZEVuZGVkCQAAZgAAAAIFAAAABmhlaWdodAkAAGQAAAACCQAAZAAAAAIFAAAAEWJsb2Nrc09uR2FtZVN0YXJ0CQAAaAAAAAIFAAAACW1heFJvdW5kcwUAAAAOYmxvY2tzUGVyUm91bmQFAAAADndpdGhkcmF3UGVyaW9kBAAAAA93aW5BbXRSZWNpcGllbnQDBQAAABN3aXRoZHJhd1BlcmlvZEVuZGVkBQAAABFwYXJ0eU93bmVyQWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAMd2lubmVyUHViS2V5BAAAAA5yb3VuZFdpbkhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpbkhlaWdodAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAABN3cml0ZVNldE9mUm91bmREYXRhAAAABgIAAAAIV0lUSERSQVcFAAAABXJvdW5kBQAAAA5yb3VuZFdpbkhlaWdodAkAAZEAAAACBQAAAA1yb3VuZERhdGFMaXN0BQAAAA1JZHhXaW5BZGRyZXNzCQABkQAAAAIFAAAADXJvdW5kRGF0YUxpc3QFAAAADElkeFdpblB1YktleQkAAlgAAAABCAUAAAADaW52AAAADXRyYW5zYWN0aW9uSWQJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAAPd2luQW10UmVjaXBpZW50BQAAAAZ3aW5BbXQFAAAABHVuaXQFAAAAA25pbAAAAAFpAQAAAAFmAAAAAQAAAAVyb3VuZAQAAAADUlNBCQEAAAAcQGV4dHJVc2VyKGFkZHJlc3NGcm9tU3RyaW5nKQAAAAECAAAAIzNOM0tDMnRkdm5NSkd4MW02dmlkbmdZbVE5VngxdkQyNXlRBAAAAAZrZWVwZXIFAAAAA1JTQQQAAAADcHViCQEAAAARQGV4dHJOYXRpdmUoMTA1MikAAAACBQAAAAZrZWVwZXICAAAAA3B1YgQAAAABcgkABBoAAAACBQAAAAR0aGlzAgAAAAZTVEFUVVMEAAAABG1zZzAJAQAAABFAZXh0ck5hdGl2ZSgxMDUyKQAAAAIFAAAABmtlZXBlcgIAAAAFbXNnXzAEAAAABHNpZzAJAQAAABFAZXh0ck5hdGl2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", "chainId": 84, "height": 802753, "spentComplexity": 0 } View: original | compacted Prev: 6V2jXF1wBerwg9iHtemsNCgz99pQMZohn3aCeNdZdMzR Next: 4dg1xsgPuA7LXoET1eVEejYrrL8yn6avT5xvaHtVcdmC Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let WAVELET = ((100 * 1000) * 1000)
55
66 let MRTEC = 100
77
88 let maxRounds = 60
99
1010 let pmtStep = (100 * MRTEC)
1111
1212 let partyOwnerPubKey = fromBase58String("5iDk2vYUH5w9nvKjSqvnXdHGsYQW4MahQ5EuUknXZLMA")
1313
1414 let partyOwnerAddress = addressFromPublicKey(partyOwnerPubKey)
1515
1616 let partyAddress = addressFromPublicKey(fromBase58String("6t6PHEFx7BAyh9qckqcDeajUVNiH6WNsyHggXkLx27Jo"))
1717
1818 let withdrawPeriod = 43200
1919
2020 let winAmt = (500 * WAVELET)
2121
2222 let heightStep = 15
2323
2424 let blocksOnGameStart = 1824280
2525
2626 let blocksPerRound = 1460
2727
2828 let blocksPerCompetition = 1450
2929
3030 let MRT = fromBase58String("4uK8i4ThRGbehENwa6MxyLtxAjAo1Rj9fduborGExarC")
3131
3232 let MinFEE = ((5 * WAVELET) / 1000)
3333
3434 let IdxWinHeight = 0
3535
3636 let IdxWinAddress = 1
3737
3838 let IdxWinPubKey = 2
3939
4040 let IdxWithdrawId = 3
4141
4242 func getRoundDataKeyOrFail (round) = if ((0 > round))
4343 then throw("Invalid round number")
4444 else ("round" + toString(round))
4545
4646
4747 func readRoundDataListOrFail (round) = {
4848 let roundDataOpt = getString(partyAddress, getRoundDataKeyOrFail(round))
4949 let roundDataStr = if (isDefined(roundDataOpt))
5050 then extract(roundDataOpt)
5151 else ""
5252 if ((roundDataStr != ""))
5353 then split(roundDataStr, "_")
5454 else ["0", toString(pmtStep), "?", "?", "?", "0"]
5555 }
5656
5757
5858 func readSharedState () = {
5959 let sharedStateOpt = getString(partyAddress, "RoundsSharedState")
6060 let sharedStateStr = if (isDefined(sharedStateOpt))
6161 then extract(sharedStateOpt)
6262 else ""
6363 if ((sharedStateStr != ""))
6464 then split(sharedStateStr, "_")
6565 else ["?", "0", "?"]
6666 }
6767
6868
6969 func writeSetOfRoundData (type,round,newWinHeight,newWinAddressStr,newWinPubKeyStr,withdrawId58) = {
7070 let newWinHeightStr = toString(newWinHeight)
7171 let roundData = DataEntry(getRoundDataKeyOrFail(round), ((((((newWinHeightStr + "_") + newWinAddressStr) + "_") + newWinPubKeyStr) + "_") + withdrawId58))
7272 if ((type == "MOVE"))
7373 then {
7474 let addressLength = size(newWinAddressStr)
7575 let sharedState = readSharedState()
7676 let newTotalGamesCountStr = toString((parseIntValue(sharedState[1]) + 1))
7777 let currLastPlayersAddr = if ((sharedState[2] == "?"))
7878 then ""
7979 else sharedState[2]
8080 let newLastPlayersAddr = if (if ((currLastPlayersAddr != ""))
8181 then (size(currLastPlayersAddr) > ((addressLength + 1) * 10))
8282 else false)
8383 then (("-" + newWinAddressStr) + dropRight(currLastPlayersAddr, (addressLength + 1)))
8484 else (("-" + newWinAddressStr) + currLastPlayersAddr)
8585 WriteSet([roundData, DataEntry("RoundsSharedState", ((((newWinHeightStr + "_") + newTotalGamesCountStr) + "_") + newLastPlayersAddr))])
8686 }
8787 else if ((type == "WITHDRAW"))
8888 then WriteSet([roundData])
8989 else throw(("Unsupported type in writeSetOfRoundData method: " + type))
9090 }
9191
9292
9393 let offset = (height - blocksOnGameStart)
9494
9595 let currRoundNum = if ((offset >= 0))
9696 then (offset / blocksPerRound)
9797 else throw(("Please do not hurry. MRT party will start on " + toString(blocksOnGameStart)))
9898
9999 let currRoundHeight = (offset % blocksPerRound)
100100
101101 let currRoundHeightStart = ((currRoundNum * blocksPerRound) + blocksOnGameStart)
102102
103103 let currRoundCompetitionEnd = (currRoundHeightStart + blocksPerCompetition)
104104
105105 let currRoundDataList = readRoundDataListOrFail(currRoundNum)
106106
107107 let currWinHeight = parseIntValue(currRoundDataList[IdxWinHeight])
108108
109109 let currMinPmtAmt = pmtStep
110110
111111 func isWinByHeight (h) = (height >= h)
112112
113113
114114 let atLeastOneMoveInRoundPresent = (currWinHeight > currRoundHeightStart)
115115
116116 let firstCountdownFinished = if ((currWinHeight == 0))
117117 then isWinByHeight((currRoundHeightStart + heightStep))
118118 else false
119119
120120 let isPauseByWin = if (isWinByHeight(currWinHeight))
121121 then atLeastOneMoveInRoundPresent
122122 else false
123123
124124 let isPauseByTime = if ((currRoundHeight > blocksPerCompetition))
125125 then true
126126 else firstCountdownFinished
127127
128128 let isPause = if (isPauseByWin)
129129 then true
130130 else isPauseByTime
131131
132132 let isCompetition = !(isPause)
133133
134134 func move (p) = if (!(isCompetition))
135135 then throw("o")
136136 else {
137137 let roundDataList = readRoundDataListOrFail(currRoundNum)
138138 let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
139139 if ((p == winnerPubKey))
140140 then throw("=")
141141 else if ((currWinHeight != (height + 1)))
142142 then throw("!")
143143 else true
144144 }
145145
146146
147147 @Callable(inv)
148148 func mover () = {
149149 let overflowedNewWinHeight = (height + heightStep)
150150 let newWinHeight = if ((overflowedNewWinHeight >= currRoundCompetitionEnd))
151151 then currRoundCompetitionEnd
152152 else overflowedNewWinHeight
153153 let payment = if (isDefined(inv.payment))
154154 then extract(inv.payment)
155155 else throw("Please attach payment with MRT to participate in MRT party")
156156 if ((currRoundNum >= maxRounds))
157157 then throw("MRT party is over")
158158 else if (isPause)
159159 then throw((("Sorry but round #" + toString(currRoundNum)) + " is finished."))
160160 else if ((payment.assetId != MRT))
161161 then throw("Please use MRT as a payment asset to participate in MRT party")
162162 else if ((currMinPmtAmt > payment.amount))
163163 then throw(("Sorry my friend but your payment is too small. Current min payment is " + toString(currMinPmtAmt)))
164164 else writeSetOfRoundData("MOVE", currRoundNum, newWinHeight, toString(addressFromPublicKey(inv.callerPublicKey)), toBase58String(inv.callerPublicKey), "?")
165165 }
166166
167167
168168
169169 @Callable(inv)
170170 func withdraw (round) = {
171171 let roundDataList = readRoundDataListOrFail(round)
172172 let winnerPubKey = fromBase58String(roundDataList[IdxWinPubKey])
173173 let withdrawId58 = roundDataList[IdxWithdrawId]
174174 if ((round > currRoundNum))
175175 then throw("Impossible to withdraw win amount for round in future")
176176 else if (if ((round == currRoundNum))
177177 then isCompetition
178178 else false)
179179 then throw("Impossible to withdraw win amount - winner has not been determined yet")
180180 else if ((withdrawId58 != "?"))
181181 then throw((("Winner of round #" + toString(round)) + " has already taken the prize"))
182182 else {
183183 let withdrawPeriodEnded = (height > ((blocksOnGameStart + (maxRounds * blocksPerRound)) + withdrawPeriod))
184184 let winAmtRecipient = if (withdrawPeriodEnded)
185185 then partyOwnerAddress
186186 else addressFromPublicKey(winnerPubKey)
187187 let roundWinHeight = parseIntValue(roundDataList[IdxWinHeight])
188188 ScriptResult(writeSetOfRoundData("WITHDRAW", round, roundWinHeight, roundDataList[IdxWinAddress], roundDataList[IdxWinPubKey], toBase58String(inv.transactionId)), TransferSet([ScriptTransfer(winAmtRecipient, winAmt, unit)]))
189189 }
190190 }
191191
192192
193193
194194 @Callable(i)
195195 func f (round) = {
196196 let RSA = addressFromStringValue("3N3KC2tdvnMJGx1m6vidngYmQ9Vx1vD25yQ")
197197 let keeper = RSA
198198 let pub = getBinaryValue(keeper, "pub")
199199 let r = getInteger(this, "STATUS")
200200 let msg0 = getBinaryValue(keeper, "msg_0")
201201 let sig0 = getBinaryValue(keeper, "sig_0")
202202 let add0 = addressFromPublicKey(take(msg0, 32))
203203 let msg1 = getBinaryValue(keeper, "msg_0")
204204 let sig1 = getBinaryValue(keeper, "sig_0")
205205 let add1 = addressFromPublicKey(take(msg1, 32))
206206 let msg2 = getBinaryValue(keeper, "msg_0")
207207 let sig2 = getBinaryValue(keeper, "sig_0")
208208 let add2 = addressFromPublicKey(take(msg2, 32))
209209 let msg3 = getBinaryValue(keeper, "msg_0")
210210 let sig3 = getBinaryValue(keeper, "sig_0")
211211 let add3 = addressFromPublicKey(take(msg3, 32))
212212 let msg4 = getBinaryValue(keeper, "msg_0")
213213 let sig4 = getBinaryValue(keeper, "sig_0")
214214 let add4 = addressFromPublicKey(take(msg4, 32))
215215 let add5 = addressFromPublicKey(take(drop(msg4, 32), 32))
216216 let add6 = addressFromPublicKey(take(drop(drop(msg4, 32), 32), 32))
217217 let add7 = addressFromPublicKey(take(drop(drop(drop(msg4, 32), 32), 32), 32))
218218 let add8 = addressFromPublicKey(take(drop(drop(drop(drop(msg4, 32), 32), 32), 32), 32))
219219 let add9 = addressFromPublicKey(take(drop(drop(drop(drop(drop(msg4, 32), 32), 32), 32), 32), 32))
220220 let v0 = if (rsaVerify(SHA512, msg0, sig0, pub))
221221 then 1
222222 else 0
223223 let v1 = if (rsaVerify(SHA512, msg1, sig1, pub))
224224 then 1
225225 else 0
226226 let v2 = if (rsaVerify(SHA512, msg2, sig2, pub))
227227 then 1
228228 else 0
229229 let v3 = if (rsaVerify(SHA512, msg3, sig3, pub))
230230 then 1
231231 else 0
232232 let v4 = if (rsaVerify(SHA512, msg4, sig4, pub))
233233 then 1
234234 else 0
235235 let v01 = if (rsaVerify(SHA512, msg0, sig1, pub))
236236 then 1
237237 else 0
238238 let v11 = if (rsaVerify(SHA512, msg1, sig2, pub))
239239 then 1
240240 else 0
241241 let v21 = if (rsaVerify(SHA512, msg2, sig3, pub))
242242 then 1
243243 else 0
244244 let v31 = if (rsaVerify(SHA512, msg3, sig4, pub))
245245 then 1
246246 else 0
247247 let v41 = if (rsaVerify(SHA512, msg4, sig0, pub))
248248 then 1
249249 else 0
250250 if ((((((((v0 + v1) + v2) + v3) + v4) + v31) + v41) == round))
251251 then throw("F")
252252 else if (!(isDefined(getInteger(this, toString(round)))))
253253 then ScriptResult(WriteSet([DataEntry(toString(round), round)]), TransferSet(nil))
254254 else throw("R")
255255 }
256256
257257
258258 @Verifier(tx)
259259 func verify () = if (true)
260260 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
261261 else {
262262 let withdrawPeriodEnded = (height > ((blocksOnGameStart + (maxRounds * blocksPerRound)) + withdrawPeriod))
263263 match tx {
264264 case ttx: TransferTransaction =>
265265 sigVerify(ttx.bodyBytes, ttx.proofs[0], ttx.senderPublicKey)
266266 case itx: InvokeScriptTransaction =>
267267 if (!(sigVerify(itx.bodyBytes, itx.proofs[0], itx.senderPublicKey)))
268268 then throw("s")
269269 else move(itx.senderPublicKey)
270270 case btx: BurnTransaction =>
271271 if (!(withdrawPeriodEnded))
272272 then throw("MRT party has not finished yet. Burn is not allowed.")
273273 else if (!(sigVerify(btx.bodyBytes, btx.proofs[0], partyOwnerPubKey)))
274274 then throw("Burn is allowed for Party Owner only.")
275275 else if ((btx.fee != MinFEE))
276276 then throw(("Impossible to burn with fee less or greater than " + toString(MinFEE)))
277277 else true
278278 case _ =>
279279 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
280280 }
281281 }
282282

github/deemru/w8io/169f3d6 
42.63 ms