2023.03.14 19:43 [3555514] smart account 3PAoGogbTXt7nC4mvK7C8fQPJ1sQ5Yww21a > SELF 0.00000000 Waves

{ "type": 13, "id": "G7i7k32FAiXX9DdzmAk5TeCFreZ2LvnPGKumpnDB1ZGs", "fee": 1000000, "feeAssetId": null, "timestamp": 1678812225683, "version": 2, "chainId": 87, "sender": "3PAoGogbTXt7nC4mvK7C8fQPJ1sQ5Yww21a", "senderPublicKey": "4p5qEyFsj1gQ3nGXZ9T4yLEDyn7q8d7wE4fNKcyWLkCr", "proofs": [ "JJheGWPKcd6m5fBCWKZ6GGPrfX9CqGwDq6RhUGQZjZQjQ26wntXnwjtEXCeeZEoR4cQUDZKJVbVQdwtQH4a7gS6" ], "script": "base64:BgIRCAISABIGCgQICAEBEgMKAQESARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwACFHN0YXRpY19vcmFjbGVBZGRyZXNzARFzdGF0aWNLZXlfYXNzZXRJZAACDnN0YXRpY19hc3NldElkARNzdGF0aWNLZXlfc3RhcnRUaW1lAAIQc3RhdGljX3N0YXJ0VGltZQERc3RhdGljS2V5X2VuZFRpbWUAAg5zdGF0aWNfZW5kVGltZQEVa2V5X3RvdGFsVGlja2V0SXNzdWVkAAIFdG90YWwBEGtleV9sYXN0VHhIZWlnaHQAAgZoZWlnaHQBEmtleV91c2VyQnlUaWNrZXROcgEGbnVtYmVyCQCsAgICB3RpY2tldF8JAKQDAQUGbnVtYmVyAQ9rZXlfdGlja2V0T3duZXICB2FkZHJlc3MGbnVtYmVyCQCsAgIJAKwCAgkArAICAgZvd25lcl8FB2FkZHJlc3MCAV8JAKQDAQUGbnVtYmVyAQprZXlfd2lubmVyAgZ3aW5uZXIFcHJpemUJAKwCAgkArAICCQCsAgICB3dpbm5lcl8FBndpbm5lcgIBXwUFcHJpemUBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWEFByRtYXRjaDAFAWECAAEJZ2V0T3JhY2xlAAkBB0FkZHJlc3MBCQDZBAEJAQx0cnlHZXRTdHJpbmcBCQEXc3RhdGljS2V5X29yYWNsZUFkZHJlc3MAAQpnZXRBc3NldElkAAkA2QQBCQEMdHJ5R2V0U3RyaW5nAQkBEXN0YXRpY0tleV9hc3NldElkAAAFcHJpY2UAwIQ9AA52cmZIZWlnaHRBZGRlZAAKAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQdnZXRCb29sAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQlpc1Rlc3RFbnYACQEHZ2V0Qm9vbAECB1RFU1RFTlYBD2dldFJhbmRvbU51bWJlcgQIdmFyaWFudHMEdHhJZBRoYXRjaGluZ0ZpbmlzaEhlaWdodAZvZmZzZXQED3JhbmRvbVNlZWRCbG9jawkBBXZhbHVlAQkA7QcBCQBlAgUUaGF0Y2hpbmdGaW5pc2hIZWlnaHQAAQQKcmFuZG9tSGFzaAkA9wMBCQDLAQIJAMsBAgEGAbd1k/zrBQR0eElkCQEFdmFsdWUBCAUPcmFuZG9tU2VlZEJsb2NrA3ZyZgkAagIJALIJAgUKcmFuZG9tSGFzaAUGb2Zmc2V0BQh2YXJpYW50cwMBaQEGcmV3YXJkAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCENoZWF0ZXIhBAdlbmRUaW1lCQERQGV4dHJOYXRpdmUoMTA1NSkBCQERc3RhdGljS2V5X2VuZFRpbWUAAwkAZgIFB2VuZFRpbWUIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQACAQIbVGhlIHJhZmZsZSBpcyBzdGlsbCBvbmdvaW5nBAphbW91bnRTb2xkCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEVa2V5X3RvdGFsVGlja2V0SXNzdWVkAAQFdGllcjEDCQBnAgUKYW1vdW50U29sZABkBA1udW1iZXJzUmFuZG9tCQEPZ2V0UmFuZG9tTnVtYmVyBAUKYW1vdW50U29sZAgFAWkNdHJhbnNhY3Rpb25JZAkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARBrZXlfbGFzdFR4SGVpZ2h0AAUOdnJmSGVpZ2h0QWRkZWQAAQQGd2lubmVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQESa2V5X3VzZXJCeVRpY2tldE5yAQUNbnVtYmVyc1JhbmRvbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleV93aW5uZXICBQZ3aW5uZXICB0dFTkVTSVMFDW51bWJlcnNSYW5kb20FA25pbAUDbmlsBAV0aWVyMgMJAGcCBQphbW91bnRTb2xkAPoBBA1udW1iZXJzUmFuZG9tCQEPZ2V0UmFuZG9tTnVtYmVyBAUKYW1vdW50U29sZAgFAWkNdHJhbnNhY3Rpb25JZAkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARBrZXlfbGFzdFR4SGVpZ2h0AAUOdnJmSGVpZ2h0QWRkZWQAAgQGd2lubmVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQESa2V5X3VzZXJCeVRpY2tldE5yAQUNbnVtYmVyc1JhbmRvbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleV93aW5uZXICBQZ3aW5uZXICBTIwRUdHBQ1udW1iZXJzUmFuZG9tBQNuaWwFA25pbAQFdGllcjMDCQBnAgUKYW1vdW50U29sZAD0AwQNbnVtYmVyc1JhbmRvbQkBD2dldFJhbmRvbU51bWJlcgQFCmFtb3VudFNvbGQIBQFpDXRyYW5zYWN0aW9uSWQJAGQCCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEQa2V5X2xhc3RUeEhlaWdodAAFDnZyZkhlaWdodEFkZGVkAAMEBndpbm5lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBEmtleV91c2VyQnlUaWNrZXROcgEFDW51bWJlcnNSYW5kb20JAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlfd2lubmVyAgUGd2lubmVyAgVPQlNUSQUNbnVtYmVyc1JhbmRvbQUDbmlsBQNuaWwEBXRpZXI0AwkAZwIFCmFtb3VudFNvbGQA6AcEDW51bWJlcnNSYW5kb20JAQ9nZXRSYW5kb21OdW1iZXIEBQphbW91bnRTb2xkCAUBaQ10cmFuc2FjdGlvbklkCQBkAgkBEUBleHRyTmF0aXZlKDEwNTUpAQkBEGtleV9sYXN0VHhIZWlnaHQABQ52cmZIZWlnaHRBZGRlZAAEBAZ3aW5uZXIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJARJrZXlfdXNlckJ5VGlja2V0TnIBBQ1udW1iZXJzUmFuZG9tCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5X3dpbm5lcgIFBndpbm5lcgICSlUFDW51bWJlcnNSYW5kb20FA25pbAUDbmlsBAV0aWVyNQMJAGcCBQphbW91bnRTb2xkAMQTBA1udW1iZXJzUmFuZG9tCQEPZ2V0UmFuZG9tTnVtYmVyBAUKYW1vdW50U29sZAgFAWkNdHJhbnNhY3Rpb25JZAkAZAIJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARBrZXlfbGFzdFR4SGVpZ2h0AAUOdnJmSGVpZ2h0QWRkZWQABQQGd2lubmVyCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQESa2V5X3VzZXJCeVRpY2tldE5yAQUNbnVtYmVyc1JhbmRvbQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleV93aW5uZXICBQZ3aW5uZXICBTMwRUdHBQ1udW1iZXJzUmFuZG9tBQNuaWwFA25pbAQFdGllcjYDCQBnAgUKYW1vdW50U29sZACIJwQNbnVtYmVyc1JhbmRvbQkBD2dldFJhbmRvbU51bWJlcgQFCmFtb3VudFNvbGQIBQFpDXRyYW5zYWN0aW9uSWQJAGQCCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEQa2V5X2xhc3RUeEhlaWdodAAFDnZyZkhlaWdodEFkZGVkAAYEBndpbm5lcgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkBEmtleV91c2VyQnlUaWNrZXROcgEFDW51bWJlcnNSYW5kb20JAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlfd2lubmVyAgUGd2lubmVyAgZDVVNUT00FDW51bWJlcnNSYW5kb20FA25pbAUDbmlsCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgUFdGllcjEFBXRpZXIyBQV0aWVyMwUFdGllcjQFBXRpZXI1BQV0aWVyNgFpAQVzZXR1cAQGb3JhY2xlB2Fzc2V0SWQJc3RhcnRUaW1lB2VuZFRpbWUDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQtTdHJpbmdFbnRyeQIJARdzdGF0aWNLZXlfb3JhY2xlQWRkcmVzcwAFBm9yYWNsZQkAzAgCCQELU3RyaW5nRW50cnkCCQERc3RhdGljS2V5X2Fzc2V0SWQABQdhc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETc3RhdGljS2V5X3N0YXJ0VGltZQAFCXN0YXJ0VGltZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEXN0YXRpY0tleV9lbmRUaW1lAAUHZW5kVGltZQUDbmlsAWkBCWJ1eVRpY2tldAEGYW1vdW50BAx0b3RhbFRpY2tldHMJAQ10cnlHZXRJbnRlZ2VyAQkBFWtleV90b3RhbFRpY2tldElzc3VlZAAEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBA1yZWR1Y3Rpb25QZXJjAwkAZgIFBmFtb3VudAAEBQZhbW91bnQAAAQKdG90YWxQcmljZQkAaAIFBXByaWNlBQZhbW91bnQEGHRvdGFsUHJpY2VBZnRlclJlZHVjdGlvbgkAZQIFCnRvdGFsUHJpY2UJAGgCCQBpAgUKdG90YWxQcmljZQBkBQ1yZWR1Y3Rpb25QZXJjBAdwbXRVU0RUCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCQEFdmFsdWUBCAUHcG10VVNEVAdhc3NldElkCQEKZ2V0QXNzZXRJZAAJAAIBAidUQlQ6IFBsZWFzZSBhdHRhY2ggdGhlIGNvcnJlY3QgcGF5bWVudCEDCQECIT0CCAUHcG10VVNEVAZhbW91bnQFGHRvdGFsUHJpY2VBZnRlclJlZHVjdGlvbgkAAgECIlRCVDogUGxlYXNlIGF0dGFjaCBlbm91Z2ggcGF5bWVudCEKAQtoYW5kbGVUb3BVcAIDYWNjBWluZGV4AwkAZwIFBmFtb3VudAUFaW5kZXgEAm5yCQBkAgUFaW5kZXgFDHRvdGFsVGlja2V0cwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIJAM4IAgUDYWNjCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlfdXNlckJ5VGlja2V0TnIBBQJucgUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleV90aWNrZXRPd25lcgIFB2FkZHJlc3MFAm5yBQJucgUDbmlsCQDOCAIFA2FjYwUDbmlsBAFmCgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaGFuZGxlVG9wVXACBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlfdG90YWxUaWNrZXRJc3N1ZWQACQBkAgUMdG90YWxUaWNrZXRzBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlfbGFzdFR4SGVpZ2h0AAUGaGVpZ2h0BQNuaWwFAWYBAnR4AQZ2ZXJpZnkAAwkBCWlzVGVzdEVudgAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkECWZpcnN0VXNlcgEg3tbGUeRTFtBlgOsBmioL0PeXUfocdpF+m44GQ3cXvSUECnNlY29uZFVzZXIBIMFs347t041zj4ui+fqJD/R1zUQbVHJSo7Sc0lakLeB1BAl0aGlyZFVzZXIBIOdb9I6q0vlJnm6EJrj5fh/cZ6h93Cu41Op7zfJoCsElBA9maXJzdFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQlmaXJzdFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCWZpcnN0VXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJZmlyc3RVc2VyAAEAAAQQc2Vjb25kVXNlclNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCnNlY29uZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFCnNlY29uZFVzZXIAAQAABA90aGlyZFVzZXJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQl0aGlyZFVzZXIAAQMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCXRoaXJkVXNlcgABAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUJdGhpcmRVc2VyAAEAAAQPc2lnbmF0dXJlc0NvdW50CQBkAgkAZAIFD2ZpcnN0VXNlclNpZ25lZAUQc2Vjb25kVXNlclNpZ25lZAUPdGhpcmRVc2VyU2lnbmVkBAckbWF0Y2gwBQJ0eAkAZwIFD3NpZ25hdHVyZXNDb3VudAACuqTX6A==", "height": 3555514, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8X3pysuUmCHKVLS1sUGZH7nBiL6fhqba84YH3i6kfpNL Next: 2eqVS3wLGZD3Am56EZGYU4JNTVh7hda4a2mjA1YTvpuk Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func staticKey_oracleAddress () = "static_oracleAddress"
55
66
77 func staticKey_assetId () = "static_assetId"
88
99
1010 func staticKey_startTime () = "static_startTime"
1111
1212
1313 func staticKey_endTime () = "static_endTime"
1414
1515
1616 func key_totalTicketIssued () = "total"
1717
1818
1919 func key_lastTxHeight () = "height"
2020
2121
2222 func key_userByTicketNr (number) = ("ticket_" + toString(number))
2323
2424
2525 func key_ticketOwner (address,number) = ((("owner_" + address) + "_") + toString(number))
2626
2727
2828 func key_winner (winner,prize) = ((("winner_" + winner) + "_") + prize)
2929
3030
3131 func tryGetString (key) = match getString(this, key) {
3232 case a: String =>
3333 a
3434 case _ =>
3535 ""
3636 }
3737
3838
3939 func getOracle () = Address(fromBase58String(tryGetString(staticKey_oracleAddress())))
4040
4141
4242 func getAssetId () = fromBase58String(tryGetString(staticKey_assetId()))
4343
4444
4545 let price = 1000000
4646
4747 let vrfHeightAdded = 10
4848
4949 func tryGetInteger (key) = match getInteger(this, key) {
5050 case b: Int =>
5151 b
5252 case _ =>
5353 0
5454 }
5555
5656
5757 func getBool (key) = match getBoolean(this, key) {
5858 case b: Boolean =>
5959 b
6060 case _ =>
6161 false
6262 }
6363
6464
6565 func isTestEnv () = getBool("TESTENV")
6666
6767
6868 func getRandomNumber (variants,txId,hatchingFinishHeight,offset) = {
6969 let randomSeedBlock = value(blockInfoByHeight((hatchingFinishHeight - 1)))
7070 let randomHash = sha256(((base58'raffeee' + txId) + value(randomSeedBlock.vrf)))
7171 (toInt(randomHash, offset) % variants)
7272 }
7373
7474
7575 @Callable(i)
7676 func reward () = if ((i.caller != this))
7777 then throw("Cheater!")
7878 else {
7979 let endTime = getIntegerValue(staticKey_endTime())
8080 if ((endTime > lastBlock.timestamp))
8181 then throw("The raffle is still ongoing")
8282 else {
8383 let amountSold = getIntegerValue(key_totalTicketIssued())
8484 let tier1 = if ((amountSold >= 100))
8585 then {
8686 let numbersRandom = getRandomNumber(amountSold, i.transactionId, (getIntegerValue(key_lastTxHeight()) + vrfHeightAdded), 1)
8787 let winner = getStringValue(this, key_userByTicketNr(numbersRandom))
8888 [IntegerEntry(key_winner(winner, "GENESIS"), numbersRandom)]
8989 }
9090 else nil
9191 let tier2 = if ((amountSold >= 250))
9292 then {
9393 let numbersRandom = getRandomNumber(amountSold, i.transactionId, (getIntegerValue(key_lastTxHeight()) + vrfHeightAdded), 2)
9494 let winner = getStringValue(this, key_userByTicketNr(numbersRandom))
9595 [IntegerEntry(key_winner(winner, "20EGG"), numbersRandom)]
9696 }
9797 else nil
9898 let tier3 = if ((amountSold >= 500))
9999 then {
100100 let numbersRandom = getRandomNumber(amountSold, i.transactionId, (getIntegerValue(key_lastTxHeight()) + vrfHeightAdded), 3)
101101 let winner = getStringValue(this, key_userByTicketNr(numbersRandom))
102102 [IntegerEntry(key_winner(winner, "OBSTI"), numbersRandom)]
103103 }
104104 else nil
105105 let tier4 = if ((amountSold >= 1000))
106106 then {
107107 let numbersRandom = getRandomNumber(amountSold, i.transactionId, (getIntegerValue(key_lastTxHeight()) + vrfHeightAdded), 4)
108108 let winner = getStringValue(this, key_userByTicketNr(numbersRandom))
109109 [IntegerEntry(key_winner(winner, "JU"), numbersRandom)]
110110 }
111111 else nil
112112 let tier5 = if ((amountSold >= 2500))
113113 then {
114114 let numbersRandom = getRandomNumber(amountSold, i.transactionId, (getIntegerValue(key_lastTxHeight()) + vrfHeightAdded), 5)
115115 let winner = getStringValue(this, key_userByTicketNr(numbersRandom))
116116 [IntegerEntry(key_winner(winner, "30EGG"), numbersRandom)]
117117 }
118118 else nil
119119 let tier6 = if ((amountSold >= 5000))
120120 then {
121121 let numbersRandom = getRandomNumber(amountSold, i.transactionId, (getIntegerValue(key_lastTxHeight()) + vrfHeightAdded), 6)
122122 let winner = getStringValue(this, key_userByTicketNr(numbersRandom))
123123 [IntegerEntry(key_winner(winner, "CUSTOM"), numbersRandom)]
124124 }
125125 else nil
126126 (((((tier1 ++ tier2) ++ tier3) ++ tier4) ++ tier5) ++ tier6)
127127 }
128128 }
129129
130130
131131
132132 @Callable(i)
133133 func setup (oracle,assetId,startTime,endTime) = if ((i.caller != this))
134134 then throw("admin only")
135135 else [StringEntry(staticKey_oracleAddress(), oracle), StringEntry(staticKey_assetId(), assetId), IntegerEntry(staticKey_startTime(), startTime), IntegerEntry(staticKey_endTime(), endTime)]
136136
137137
138138
139139 @Callable(i)
140140 func buyTicket (amount) = {
141141 let totalTickets = tryGetInteger(key_totalTicketIssued())
142142 let user = toString(i.caller)
143143 let reductionPerc = if ((amount > 4))
144144 then amount
145145 else 0
146146 let totalPrice = (price * amount)
147147 let totalPriceAfterReduction = (totalPrice - ((totalPrice / 100) * reductionPerc))
148148 let pmtUSDT = value(i.payments[0])
149149 if ((value(pmtUSDT.assetId) != getAssetId()))
150150 then throw("TBT: Please attach the correct payment!")
151151 else if ((pmtUSDT.amount != totalPriceAfterReduction))
152152 then throw("TBT: Please attach enough payment!")
153153 else {
154154 func handleTopUp (acc,index) = if ((amount >= index))
155155 then {
156156 let nr = (index + totalTickets)
157157 let address = toString(i.caller)
158158 (acc ++ [StringEntry(key_userByTicketNr(nr), address), IntegerEntry(key_ticketOwner(address, nr), nr)])
159159 }
160160 else (acc ++ nil)
161161
162162 let f = {
163163 let $l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
164164 let $s = size($l)
165165 let $acc0 = nil
166166 func $f0_1 ($a,$i) = if (($i >= $s))
167167 then $a
168168 else handleTopUp($a, $l[$i])
169169
170170 func $f0_2 ($a,$i) = if (($i >= $s))
171171 then $a
172172 else throw("List size exceeds 15")
173173
174174 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
175175 }
176176 ([IntegerEntry(key_totalTicketIssued(), (totalTickets + amount)), IntegerEntry(key_lastTxHeight(), height)] ++ f)
177177 }
178178 }
179179
180180
181181 @Verifier(tx)
182182 func verify () = if (isTestEnv())
183183 then sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
184184 else {
185185 let firstUser = base58'FzsTVRXqD46KW5yj6qGNVrsouvWjpCQvD1446A96iGt4'
186186 let secondUser = base58'E23yUg8eun5nXB1nZRDf7RTyRADKxQhGNXdpTYonEvtU'
187187 let thirdUser = base58'Ga8WEBTPXbHuoXRD355mQ6ms8PsM2RFYKeA1mEP32CFe'
188188 let firstUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], firstUser))
189189 then 1
190190 else if (sigVerify(tx.bodyBytes, tx.proofs[1], firstUser))
191191 then 1
192192 else if (sigVerify(tx.bodyBytes, tx.proofs[2], firstUser))
193193 then 1
194194 else 0
195195 let secondUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], secondUser))
196196 then 1
197197 else if (sigVerify(tx.bodyBytes, tx.proofs[1], secondUser))
198198 then 1
199199 else if (sigVerify(tx.bodyBytes, tx.proofs[2], secondUser))
200200 then 1
201201 else 0
202202 let thirdUserSigned = if (sigVerify(tx.bodyBytes, tx.proofs[0], thirdUser))
203203 then 1
204204 else if (sigVerify(tx.bodyBytes, tx.proofs[1], thirdUser))
205205 then 1
206206 else if (sigVerify(tx.bodyBytes, tx.proofs[2], thirdUser))
207207 then 1
208208 else 0
209209 let signaturesCount = ((firstUserSigned + secondUserSigned) + thirdUserSigned)
210210 match tx {
211211 case _ =>
212212 (signaturesCount >= 2)
213213 }
214214 }
215215

github/deemru/w8io/786bc32 
37.01 ms