tx · cvPnZ41PGYVNu2GTVJdDJAmN75V2gZ29EJw2Y9bh3zF

3P8gsxa1xt1xSjDP4HR728y7o9QQginK2eU:  -0.02100000 Waves

2023.03.23 20:29 [3568530] smart account 3P8gsxa1xt1xSjDP4HR728y7o9QQginK2eU > SELF 0.00000000 Waves

{ "type": 13, "id": "cvPnZ41PGYVNu2GTVJdDJAmN75V2gZ29EJw2Y9bh3zF", "fee": 2100000, "feeAssetId": null, "timestamp": 1679592600232, "version": 2, "chainId": 87, "sender": "3P8gsxa1xt1xSjDP4HR728y7o9QQginK2eU", "senderPublicKey": "FQcGKT4w9tnuigudoGoUWmGxV6JqMaac6kwNKWaA61uJ", "proofs": [ "5UQuebW54Rtvwgr4gHta2JEMNjX127pkisYeRsuQiJnbQw1PuKmtgntSxtMKcdu5EJWNDv7f9VXAwWiB7yXz62B2" ], "script": "base64:AAIFAAAAAAAAACoIAhIDCgEIEgYKBAEBCAgSAwoBCBIDCgEIEgMKAQgSBAoCCAgSBAoCCAgAAAAVAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIAAAAHYWRkcmVzcwAAAANrZXkEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAHYWRkcmVzcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWECAAAAAAEAAAAVdHJ5R2V0SW50ZWdlckV4dGVybmFsAAAAAgAAAAdhZGRyZXNzAAAAA2tleQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAdhZGRyZXNzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYgUAAAAHJG1hdGNoMAUAAAABYgAAAAAAAAAAAAEAAAAMdHJ5R2V0U3RyaW5nAAAAAQAAAANrZXkJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIFAAAABHRoaXMFAAAAA2tleQEAAAAJZ2V0T3JhY2xlAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAAAx0cnlHZXRTdHJpbmcAAAABAgAAABRzdGF0aWNfb3JhY2xlQWRkcmVzcwEAAAANZ2V0RWdnQXNzZXRJZAAAAAAJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAEXN0YXRpY19lZ2dBc3NldElkAQAAABNnZXRJbmN1YmF0b3JBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABdzdGF0aWNfaW5jdWJhdG9yQWRkcmVzcwEAAAARZ2V0QnJlZWRlckFkZHJlc3MAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAFXN0YXRpY19icmVlZGVyQWRkcmVzcwEAAAAPZ2V0SXRlbXNBZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABNzdGF0aWNfaXRlbXNBZGRyZXNzAQAAABdnZXRGZWVBZ2dyZWdhdG9yQWRkcmVzcwAAAAAJAQAAAAdBZGRyZXNzAAAAAQkAAlkAAAABCQEAAAAUdHJ5R2V0U3RyaW5nRXh0ZXJuYWwAAAACCQEAAAAJZ2V0T3JhY2xlAAAAAAIAAAAUc3RhdGljX2ZlZUFnZ3JlZ2F0b3IBAAAADmdldEJ1cm5BZGRyZXNzAAAAAAkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEJAQAAABR0cnlHZXRTdHJpbmdFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABJzdGF0aWNfYnVybkFkZHJlc3MBAAAAE2dldE1hcmtldFBsYWNlUHJveHkAAAAACQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQkBAAAAFHRyeUdldFN0cmluZ0V4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAHnN0YXRpY19tYXJrZXRQbGFjZVByb3h5QWRkcmVzcwAAAAAOa0dsb2JhbENvdW50ZXICAAAADkdMT0JBTF9DT1VOVEVSAQAAAA1nZXRGZWVQZXJjZW50AAAAAAkBAAAAFXRyeUdldEludGVnZXJFeHRlcm5hbAAAAAIJAQAAAAlnZXRPcmFjbGUAAAAAAgAAABVzdGF0aWNfbWFya2V0UGxhY2VGZWUBAAAAFmdldEFydGVmYWN0c0ZlZVBlcmNlbnQAAAAACQEAAAAVdHJ5R2V0SW50ZWdlckV4dGVybmFsAAAAAgkBAAAACWdldE9yYWNsZQAAAAACAAAAHnN0YXRpY19tYXJrZXRQbGFjZUZlZUFydGVmYWN0cwEAAAANdHJ5R2V0SW50ZWdlcgAAAAEAAAADa2V5CQEAAAAVdHJ5R2V0SW50ZWdlckV4dGVybmFsAAAAAgUAAAAEdGhpcwUAAAADa2V5AQAAAA10cnlHZXRCb29sZWFuAAAAAQAAAANrZXkEAAAAByRtYXRjaDAJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0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", "height": 3568530, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: ArW9rw4Nv5vgahcTxew885w1kksrsCSFQjAgGDKmwWZx Next: Gfx3fN8NNw5WqFdbxBesXm1Rkb7wRSoM658BfqF5FMGM Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func tryGetStringExternal (address,key) = match getString(address, key) {
55 case a: String =>
66 a
77 case _ =>
88 ""
99 }
1010
1111
1212 func tryGetIntegerExternal (address,key) = match getInteger(address, key) {
1313 case b: Int =>
1414 b
1515 case _ =>
1616 0
1717 }
1818
1919
2020 func tryGetString (key) = tryGetStringExternal(this, key)
2121
2222
2323 func getOracle () = Address(fromBase58String(tryGetString("static_oracleAddress")))
2424
2525
2626 func getEggAssetId () = fromBase58String(tryGetStringExternal(getOracle(), "static_eggAssetId"))
2727
2828
2929 func getIncubatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_incubatorAddress")))
3030
3131
3232 func getBreederAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_breederAddress")))
3333
3434
3535 func getItemsAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_itemsAddress")))
3636
3737
3838 func getFeeAggregatorAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_feeAggregator")))
3939
4040
4141 func getBurnAddress () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_burnAddress")))
4242
4343
4444 func getMarketPlaceProxy () = Address(fromBase58String(tryGetStringExternal(getOracle(), "static_marketPlaceProxyAddress")))
4545
4646
4747 let kGlobalCounter = "GLOBAL_COUNTER"
4848
4949 func getFeePercent () = tryGetIntegerExternal(getOracle(), "static_marketPlaceFee")
5050
5151
5252 func getArtefactsFeePercent () = tryGetIntegerExternal(getOracle(), "static_marketPlaceFeeArtefacts")
5353
5454
5555 func tryGetInteger (key) = tryGetIntegerExternal(this, key)
5656
5757
5858 func tryGetBoolean (key) = match getBoolean(this, key) {
5959 case b: Boolean =>
6060 b
6161 case _ =>
6262 false
6363 }
6464
6565
6666 func getGlobalCounter () = tryGetInteger(kGlobalCounter)
6767
6868
6969 func getAssetGenotype (assetId) = if ((value(assetInfo(assetId)).issuer == getItemsAddress()))
7070 then "ART"
7171 else {
7272 let asset1 = match getString(getIncubatorAddress(), toBase58String(assetId)) {
7373 case b: String =>
7474 b
7575 case _ =>
7676 ""
7777 }
7878 if ((asset1 != ""))
7979 then asset1
8080 else {
8181 let asset2 = match getString(getBreederAddress(), toBase58String(assetId)) {
8282 case c: String =>
8383 c
8484 case _ =>
8585 ""
8686 }
8787 if ((asset2 != ""))
8888 then asset2
8989 else ""
9090 }
9191 }
9292
9393
9494 func getBidCancelResults (auctionId,bidId) = {
9595 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
9696 let paymentAssetId = if ((isEggSell == true))
9797 then getEggAssetId()
9898 else unit
9999 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
100100 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
101101 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
102102 [StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + bidAuthor) + "\", \"amount\": \"") + toString(bidAmount)) + "\", \"status\": \"cancelled\"}")), StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"), "cancelled"), DeleteEntry(((((("address_" + bidAuthor) + "_auction_") + auctionId) + "_bid_") + bidId)), ScriptTransfer(Address(fromBase58String(bidAuthor)), bidAmount, paymentAssetId)]
103103 }
104104
105105
106106 func getBool (key) = match getBoolean(this, key) {
107107 case b: Boolean =>
108108 b
109109 case _ =>
110110 false
111111 }
112112
113113
114114 func isTestEnv () = getBool("TESTENV")
115115
116116
117117 @Callable(i)
118118 func configureOracle (oracle) = if ((i.caller != this))
119119 then throw("MCO: admin only")
120120 else [StringEntry("static_oracleAddress", oracle)]
121121
122122
123123
124124 @Callable(i)
125125 func initAuction (startPrice,instantPrice,description,eggSell) = {
126126 let globalCounter = getGlobalCounter()
127127 let auctionId = (toBase58String(i.transactionId) + toString(globalCounter))
128128 let pmt = value(i.payments[0])
129129 let assetId = value(pmt.assetId)
130130 let asset = getAssetGenotype(assetId)
131131 if ((pmt.amount != 1))
132132 then throw("MIA: NFT is not attached")
133133 else if ((asset == ""))
134134 then throw("MIA: You can only sell an NFT-duck created in incubator or breeder")
135135 else [StringEntry((("auction_" + auctionId) + "_status"), "open"), BooleanEntry((("auction_" + auctionId) + "_eggSell"), (eggSell == "true")), IntegerEntry(kGlobalCounter, (globalCounter + 1)), StringEntry((("auction_" + toBase58String(assetId)) + "_last"), auctionId), StringEntry((("auction_" + auctionId) + "_assetGen"), asset), StringEntry((("auction_" + auctionId) + "_assetId"), toBase58String(assetId)), IntegerEntry((("auction_" + auctionId) + "_startedAt"), lastBlock.timestamp), StringEntry((("auction_" + auctionId) + "_owner"), toString(i.originCaller)), StringEntry((("auction_" + auctionId) + "_description"), description), IntegerEntry((("auction_" + auctionId) + "_startPrice"), startPrice), BooleanEntry((("auction_" + auctionId) + "_isArtefact"), (value(assetInfo(assetId)).issuer == getItemsAddress())), IntegerEntry((("auction_" + auctionId) + "_instantPrice"), instantPrice), StringEntry((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_lockedNFT"), toBase58String(assetId))]
136136 }
137137
138138
139139
140140 @Callable(i)
141141 func cancelAuction (auctionId) = {
142142 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
143143 if ((toString(i.originCaller) != auctionOwner))
144144 then throw("MCA: Only allowed to auction owner")
145145 else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
146146 then throw("MCA: auction is close")
147147 else [StringEntry((("auction_" + auctionId) + "_status"), "cancelled"), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))]
148148 }
149149
150150
151151
152152 @Callable(i)
153153 func instantBuy (auctionId) = {
154154 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
155155 let paymentAssetId = if ((isEggSell == true))
156156 then getEggAssetId()
157157 else unit
158158 let paymentAssetName = if ((isEggSell == true))
159159 then "EGG"
160160 else "WAVES"
161161 let pmt = value(i.payments[0])
162162 let amount = pmt.amount
163163 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
164164 let bidId = toBase58String(i.transactionId)
165165 let auctionStatus = tryGetString((("auction_" + auctionId) + "_status"))
166166 let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
167167 then getArtefactsFeePercent()
168168 else getFeePercent()
169169 if ((pmt.assetId != paymentAssetId))
170170 then throw((("MIB: Auction does only support " + paymentAssetName) + " payments."))
171171 else if ((auctionStatus != "open"))
172172 then throw("MIB: Auction is closed. You cannot place a bid.")
173173 else {
174174 let instantPrice = tryGetInteger((("auction_" + auctionId) + "_instantPrice"))
175175 if ((instantPrice > amount))
176176 then throw(("MIB: For instant purchase you need to pay at least " + toString(instantPrice)))
177177 else {
178178 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
179179 let recordPrice = tryGetInteger((assetId + "_recordPrice"))
180180 let newRecordPrice = max([recordPrice, amount])
181181 let burnCall = if (isEggSell)
182182 then {
183183 let invokeResult = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), fraction(amount, finalFee, 1000))])
184184 if ((invokeResult == invokeResult))
185185 then nil
186186 else throw("Strict value is not equal to itself.")
187187 }
188188 else [ScriptTransfer(getFeeAggregatorAddress(), fraction(amount, finalFee, 1000), unit)]
189189 let caller = if ((getMarketPlaceProxy() == i.caller))
190190 then i.originCaller
191191 else i.caller
192192 $Tuple2(([StringEntry((("auction_" + auctionId) + "_status"), "finished"), IntegerEntry((("auction_" + auctionId) + "_finalPrice"), amount), IntegerEntry((assetId + "_recordPrice"), newRecordPrice), StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + toString(caller)) + "\", \"amount\": \"") + toString(amount)) + "\", \"status\": \"finished\"}")), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(caller, 1, fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId")))), ScriptTransfer(addressFromStringValue(auctionOwner), fraction(amount, (1000 - finalFee), 1000), paymentAssetId)] ++ burnCall), fromBase58String(getStringValue(this, (("auction_" + auctionId) + "_assetId"))))
193193 }
194194 }
195195 }
196196
197197
198198
199199 @Callable(i)
200200 func placeBid (auctionId) = {
201201 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
202202 let paymentAssetId = if ((isEggSell == true))
203203 then getEggAssetId()
204204 else unit
205205 let paymentAssetName = if ((isEggSell == true))
206206 then "EGG"
207207 else "WAVES"
208208 let pmt = value(i.payments[0])
209209 let amount = pmt.amount
210210 let bidId = toBase58String(i.transactionId)
211211 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
212212 if ((pmt.assetId != paymentAssetId))
213213 then throw((("MPB: Auction does only support " + paymentAssetName) + " payments."))
214214 else {
215215 let minPrice = tryGetInteger((("auction_" + auctionId) + "_startPrice"))
216216 if ((minPrice > amount))
217217 then throw(("MPB: The minimal initial price is set as " + toString(minPrice)))
218218 else [StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"), toString(i.originCaller)), StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + toString(i.originCaller)) + "\", \"amount\": \"") + toString(amount)) + "\", \"status\": \"open\"}")), IntegerEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"), amount), StringEntry(((((("address_" + toString(i.originCaller)) + "_auction_") + auctionId) + "_bid_") + bidId), assetId), StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"), "open")]
219219 }
220220 }
221221
222222
223223
224224 @Callable(i)
225225 func cancelBid (auctionId,bidId) = {
226226 let assetId = getStringValue(this, (("auction_" + auctionId) + "_assetId"))
227227 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
228228 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
229229 if ((toString(i.originCaller) != bidAuthor))
230230 then throw("MCB: Only allowed to the bid author")
231231 else if ((tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status")) != "open"))
232232 then throw("MCB: bid is not open")
233233 else getBidCancelResults(auctionId, bidId)
234234 }
235235
236236
237237
238238 @Callable(i)
239239 func acceptBid (auctionId,bidId) = {
240240 let isEggSell = tryGetBoolean((("auction_" + auctionId) + "_eggSell"))
241241 let paymentAssetId = if ((isEggSell == true))
242242 then getEggAssetId()
243243 else unit
244244 let auctionOwner = tryGetString((("auction_" + auctionId) + "_owner"))
245245 let bidAuthor = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_author"))
246246 let bidAmount = tryGetInteger((((("auction_" + auctionId) + "_bid_") + bidId) + "_amount"))
247247 let bidStatus = tryGetString((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"))
248248 let assetId = tryGetString((("auction_" + auctionId) + "_assetId"))
249249 let finalFee = if ((tryGetBoolean((("auction_" + auctionId) + "_isArtefact")) == true))
250250 then getArtefactsFeePercent()
251251 else getFeePercent()
252252 if ((toString(i.originCaller) != auctionOwner))
253253 then throw("MAB: Only allowed to auction owner")
254254 else if ((bidStatus != "open"))
255255 then throw("MAB: Bid was cancelled and cannot be accepted")
256256 else if ((tryGetString((("auction_" + auctionId) + "_status")) != "open"))
257257 then throw("MAB: Auction was closed")
258258 else {
259259 let recordPrice = tryGetInteger((assetId + "_recordPrice"))
260260 let newRecordPrice = max([recordPrice, bidAmount])
261261 let burnCall = if (isEggSell)
262262 then {
263263 let invokeResult = invoke(getBurnAddress(), "burnAttachedPayments", nil, [AttachedPayment(getEggAssetId(), fraction(bidAmount, finalFee, 1000))])
264264 if ((invokeResult == invokeResult))
265265 then nil
266266 else throw("Strict value is not equal to itself.")
267267 }
268268 else [ScriptTransfer(getFeeAggregatorAddress(), fraction(bidAmount, finalFee, 1000), unit)]
269269 ([StringEntry((((("auction_" + auctionId) + "_bid_") + bidId) + "_status"), "finished"), StringEntry((("auction_" + auctionId) + "_status"), "finished"), StringEntry((((("assetId_" + assetId) + "_bid_") + bidId) + "_data"), (((((("{\"auctionId\": \"" + auctionId) + "\", \"author\": \"") + toString(i.originCaller)) + "\", \"amount\": \"") + toString(bidAmount)) + "\", \"status\": \"finished\"}")), IntegerEntry((("auction_" + auctionId) + "_finalPrice"), bidAmount), IntegerEntry((assetId + "_recordPrice"), newRecordPrice), DeleteEntry(((((("address_" + bidAuthor) + "_auction_") + auctionId) + "_bid_") + bidId)), DeleteEntry((((("address_" + auctionOwner) + "_auction_") + auctionId) + "_lockedNFT")), ScriptTransfer(i.originCaller, fraction(bidAmount, (1000 - finalFee), 1000), paymentAssetId), ScriptTransfer(addressFromStringValue(bidAuthor), 1, fromBase58String(assetId))] ++ burnCall)
270270 }
271271 }
272272
273273
274274 @Verifier(tx)
275275 func verify () = if (isTestEnv())
276276 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
277277 else {
278278 let firstUser = base58'FzsTVRXqD46KW5yj6qGNVrsouvWjpCQvD1446A96iGt4'
279279 let secondUser = base58'E23yUg8eun5nXB1nZRDf7RTyRADKxQhGNXdpTYonEvtU'
280280 let thirdUser = base58'Ga8WEBTPXbHuoXRD355mQ6ms8PsM2RFYKeA1mEP32CFe'
281281 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
282282 then 1
283283 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
284284 then 1
285285 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
286286 then 1
287287 else 0
288288 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
289289 then 1
290290 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
291291 then 1
292292 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
293293 then 1
294294 else 0
295295 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
296296 then 1
297297 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
298298 then 1
299299 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
300300 then 1
301301 else 0
302302 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
303303 match tx {
304304 case _ =>
305305 (signaturesCount >= 2)
306306 }
307307 }
308308

github/deemru/w8io/3ef1775 
51.59 ms