tx · AhM1RL3w52YmkfxYrmQdSaVfzxuvBZjvw1HE9fPBX65P

3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir:  -0.01000000 Waves

2023.05.11 22:59 [3639135] smart account 3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir > SELF 0.00000000 Waves

{ "type": 13, "id": "AhM1RL3w52YmkfxYrmQdSaVfzxuvBZjvw1HE9fPBX65P", "fee": 1000000, "feeAssetId": null, "timestamp": 1683835217519, "version": 2, "chainId": 87, "sender": "3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir", "senderPublicKey": "8er5GibY1hbf7RjN9rdnQW5Ua9xM7UtDohqbdEukAT7v", "proofs": [ "cRHy3Ad7T36jq1HTZuqfcf9vhgx83q8H7rJNtiQXLujy2DE6dwsfcz4yonyYUDcJvYtcZb1DzcWVCrMNaposvnD" ], "script": "base64:BgIZCAISBgoECAgBGBIDCgEIEgMKAQgSAwoBCAgAEExhc3RDb250ZXN0SWRLZXkCD2xhc3RfY29udGVzdF9pZAANQ29udGVzdFByZWZpeAIIY29udGVzdF8ADFN0YXR1c19EcmFmdAIFZHJhZnQADVN0YXR1c19BY3RpdmUCBmFjdGl2ZQALU3RhdHVzX1N0b3ACBHN0b3AADVN0YXR1c19EZWx0ZWQCB2RlbGV0ZWQBDWNhbGNQcml6ZUZ1bmQBCHBheW1lbnRzCgEEY2FsYwIFYWNjdW0EbmV4dAQJYXNzZXROYW1lBAckbWF0Y2gwCAUEbmV4dAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAXQFByRtYXRjaDAJANgEAQUBdAIFV0FWRVMDAwkAZgIJALECAQUJYXNzZXROYW1lAAAJAGYCCAUEbmV4dAZhbW91bnQAAAcJAM0IAgUFYWNjdW0JAKwCAgkArAICBQlhc3NldE5hbWUCAToJAKQDAQgFBG5leHQGYW1vdW50BQVhY2N1bQkAugkCCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRjYWxjAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAgF8ARFnZXRQcml6ZVRyYW5zZmVycwIMcHJpemVGdW5kU3RyCXJlY2lwaWVudAoBBGNhbGMCBWFjY3VtBG5leHQEBXBhcnRzCQC1CQIFBG5leHQCAToEB2Fzc2V0SWQDCQAAAgkAkQMCBQVwYXJ0cwAAAgVXQVZFUwUEdW5pdAkA2QQBCQCRAwIFBXBhcnRzAAAJAM0IAgUFYWNjdW0JAQ5TY3JpcHRUcmFuc2ZlcgMFCXJlY2lwaWVudAkBBXZhbHVlAQkAtgkBCQCRAwIFBXBhcnRzAAEFB2Fzc2V0SWQKAAIkbAkAvAkCBQxwcml6ZUZ1bmRTdHICAXwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGNhbGMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEAWkBBmNyZWF0ZQQEbmFtZQRkZXNjCWVuZEhlaWdodAV0YXNrcwQMcHJpemVGdW5kU3RyCQENY2FsY1ByaXplRnVuZAEIBQFpCHBheW1lbnRzAwkAAAIJALECAQUMcHJpemVGdW5kU3RyAAAJAAIBAgtObyBwYXltZW50cwMJAAACCQCQAwEFBXRhc2tzAAAJAAIBAhBUYXNrcyBsaXN0IGVtcHR5AwkAAAIJALECAQUEbmFtZQAACQACAQIKTmFtZSBlbXB0eQMJAAACCQCxAgEFBGRlc2MAAAkAAgECCkRlc2MgZW1wdHkDCQBmAgUGaGVpZ2h0BQllbmRIZWlnaHQJAAIBAhBJbnZhbGlkIGRhdGUgZW5kBAljb250ZXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUQTGFzdENvbnRlc3RJZEtleQABCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgVfbmFtZQUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUNQ29udGVzdFByZWZpeAkApAMBBQljb250ZXN0SWQCBV9kZXNjBQRkZXNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUNQ29udGVzdFByZWZpeAkApAMBBQljb250ZXN0SWQCDF9zdGFydEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUNQ29udGVzdFByZWZpeAkApAMBBQljb250ZXN0SWQCCl9lbmRIZWlnaHQFCWVuZEhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUNQ29udGVzdFByZWZpeAkApAMBBQljb250ZXN0SWQCBl9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgpfcHJpemVGdW5kBQxwcml6ZUZ1bmRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgZfdGFza3MJALoJAgUFdGFza3MCATsJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgdfc3RhdHVzBQ1TdGF0dXNfQWN0aXZlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBMYXN0Q29udGVzdElkS2V5CQBkAgUJY29udGVzdElkAAEFA25pbAUJY29udGVzdElkAWkBC3BhcnRpY2lwYXRlAQljb250ZXN0SWQEDENvbnRlc3RJZFN0cgkArAICBQ1Db250ZXN0UHJlZml4BQljb250ZXN0SWQEGENvbnRlc3RQYXJ0aWNpcGFudFByZWZpeAkArAICCQCsAgIFDENvbnRlc3RJZFN0cgINX3BhcnRpY2lwYW50XwkApQgBCAUBaQZjYWxsZXIEHENvbnRlc3RQYXJ0aWNpcGFudEFkZHJlc3NLZXkJAKwCAgUYQ29udGVzdFBhcnRpY2lwYW50UHJlZml4AghfYWRkcmVzcwQHaXNPd25lcgQHJG1hdGNoMAkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAkAAAIFAXQJAKUIAQgFAWkGY2FsbGVyCQACAQIURGF0YSBnZXQgb3duZXIgZXJyb3IEB2lzRXhpc3QEByRtYXRjaDAJAKIIAQUcQ29udGVzdFBhcnRpY2lwYW50QWRkcmVzc0tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXQFByRtYXRjaDAGBwQRcGFydGljaXBhbnRzQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAAAAwUHaXNPd25lcgkAAgECGE93bmVyIGNhbm5vdCBwYXJ0aWNpcGF0ZQMFB2lzRXhpc3QJAAIBAh1Zb3UgYXJlIGFscmVhZHkgcGFydGljaXBhdGluZwkAzAgCCQELU3RyaW5nRW50cnkCBRxDb250ZXN0UGFydGljaXBhbnRBZGRyZXNzS2V5CQClCAEIBQFpBmNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBRhDb250ZXN0UGFydGljaXBhbnRQcmVmaXgCCl9zdGFydGVkQXQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAkAZAIFEXBhcnRpY2lwYW50c0NvdW50AAEFA25pbAFpAQ11bnBhcnRpY2lwYXRlAQljb250ZXN0SWQEDENvbnRlc3RJZFN0cgkArAICBQ1Db250ZXN0UHJlZml4BQljb250ZXN0SWQEGENvbnRlc3RQYXJ0aWNpcGFudFByZWZpeAkArAICCQCsAgIFDENvbnRlc3RJZFN0cgINX3BhcnRpY2lwYW50XwkApQgBCAUBaQZjYWxsZXIEHENvbnRlc3RQYXJ0aWNpcGFudEFkZHJlc3NLZXkJAKwCAgUYQ29udGVzdFBhcnRpY2lwYW50UHJlZml4AghfYWRkcmVzcwQHaXNFeGlzdAQHJG1hdGNoMAkAoggBBRxDb250ZXN0UGFydGljaXBhbnRBZGRyZXNzS2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAYHBBFwYXJ0aWNpcGFudHNDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50AAADCQEBIQEFB2lzRXhpc3QJAAIBAhlZb3UgYXJlIG5vdCBwYXJ0aWNpcGF0aW5nCQDMCAIJAQtEZWxldGVFbnRyeQEFHENvbnRlc3RQYXJ0aWNpcGFudEFkZHJlc3NLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBRhDb250ZXN0UGFydGljaXBhbnRQcmVmaXgCCl9zdGFydGVkQXQJAMwIAgMJAAACCQBlAgURcGFydGljaXBhbnRzQ291bnQAAQAACQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50CQEMSW50ZWdlckVudHJ5AgkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAkAZQIFEXBhcnRpY2lwYW50c0NvdW50AAEFA25pbAFpAQZyZW1vdmUBCWNvbnRlc3RJZAQMQ29udGVzdElkU3RyCQCsAgIFDUNvbnRlc3RQcmVmaXgFCWNvbnRlc3RJZAQRcGFydGljaXBhbnRzQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAAABAxwcml6ZUZ1bmRTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIKX3ByaXplRnVuZAIZUHJpemUgZnVuZCBkYXRhIG5vdCBmb3VuZAQHaXNPd25lcgQHJG1hdGNoMAkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAkAAAIFAXQJAKUIAQgFAWkGY2FsbGVyCQACAQIURGF0YSBnZXQgb3duZXIgZXJyb3IDCQEBIQEFB2lzT3duZXIJAAIBAhVZb3UgYXJlIG5vdCB0aGUgb3duZXIDCQBmAgURcGFydGljaXBhbnRzQ291bnQAAAkAAgECL1RoZSBudW1iZXIgb2YgcGFydGljaXBhbnRzIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQxDb250ZXN0SWRTdHICBV9uYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgVfZGVzYwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgIMX3N0YXJ0SGVpZ2h0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgpfZW5kSGVpZ2h0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgZfb3duZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQxDb250ZXN0SWRTdHICCl9wcml6ZUZ1bmQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQxDb250ZXN0SWRTdHICBl90YXNrcwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgIHX3N0YXR1cwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50BQNuaWwJARFnZXRQcml6ZVRyYW5zZmVycwIFDHByaXplRnVuZFN0cggFAWkGY2FsbGVyAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlebEL4y0=", "height": 3639135, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AXj54ZCXyCT7mXHC2nfVCfZy1am9j2FpsYhM4ZfuhwMZ Next: FCdtaYaWWff2Vf8uFLmaDwSj2o1SsMU9DrFo6E8rUXNA Diff:
OldNewDifferences
8484 then throw("Invalid date end")
8585 else {
8686 let contestId = valueOrElse(getInteger(LastContestIdKey), 1)
87- $Tuple2([StringEntry(((ContestPrefix + toString(contestId)) + "_name"), name), StringEntry(((ContestPrefix + toString(contestId)) + "_desc"), desc), IntegerEntry(((ContestPrefix + toString(contestId)) + "_endHeight"), endHeight), StringEntry(((ContestPrefix + toString(contestId)) + "_owner"), toString(i.caller)), StringEntry(((ContestPrefix + toString(contestId)) + "_prizeFund"), prizeFundStr), StringEntry(((ContestPrefix + toString(contestId)) + "_tasks"), makeString_2C(tasks, ";")), StringEntry(((ContestPrefix + toString(contestId)) + "_status"), Status_Active), IntegerEntry(LastContestIdKey, (contestId + 1))], contestId)
87+ $Tuple2([StringEntry(((ContestPrefix + toString(contestId)) + "_name"), name), StringEntry(((ContestPrefix + toString(contestId)) + "_desc"), desc), IntegerEntry(((ContestPrefix + toString(contestId)) + "_startHeight"), height), IntegerEntry(((ContestPrefix + toString(contestId)) + "_endHeight"), endHeight), StringEntry(((ContestPrefix + toString(contestId)) + "_owner"), toString(i.caller)), StringEntry(((ContestPrefix + toString(contestId)) + "_prizeFund"), prizeFundStr), StringEntry(((ContestPrefix + toString(contestId)) + "_tasks"), makeString_2C(tasks, ";")), StringEntry(((ContestPrefix + toString(contestId)) + "_status"), Status_Active), IntegerEntry(LastContestIdKey, (contestId + 1))], contestId)
8888 }
8989 }
9090
153153 then throw("You are not the owner")
154154 else if ((participantsCount > 0))
155155 then throw("The number of participants is greater than zero")
156- else ([DeleteEntry((ContestIdStr + "_name")), DeleteEntry((ContestIdStr + "_desc")), DeleteEntry((ContestIdStr + "_endHeight")), DeleteEntry((ContestIdStr + "_owner")), DeleteEntry((ContestIdStr + "_prizeFund")), DeleteEntry((ContestIdStr + "_tasks")), DeleteEntry((ContestIdStr + "_status")), DeleteEntry((ContestIdStr + "_participantsCount"))] ++ getPrizeTransfers(prizeFundStr, i.caller))
156+ else ([DeleteEntry((ContestIdStr + "_name")), DeleteEntry((ContestIdStr + "_desc")), DeleteEntry((ContestIdStr + "_startHeight")), DeleteEntry((ContestIdStr + "_endHeight")), DeleteEntry((ContestIdStr + "_owner")), DeleteEntry((ContestIdStr + "_prizeFund")), DeleteEntry((ContestIdStr + "_tasks")), DeleteEntry((ContestIdStr + "_status")), DeleteEntry((ContestIdStr + "_participantsCount"))] ++ getPrizeTransfers(prizeFundStr, i.caller))
157157 }
158158
159159
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let LastContestIdKey = "last_contest_id"
55
66 let ContestPrefix = "contest_"
77
88 let Status_Draft = "draft"
99
1010 let Status_Active = "active"
1111
1212 let Status_Stop = "stop"
1313
1414 let Status_Delted = "deleted"
1515
1616 func calcPrizeFund (payments) = {
1717 func calc (accum,next) = {
1818 let assetName = match next.assetId {
1919 case t: ByteVector =>
2020 toBase58String(t)
2121 case _ =>
2222 "WAVES"
2323 }
2424 if (if ((size(assetName) > 0))
2525 then (next.amount > 0)
2626 else false)
2727 then (accum :+ ((assetName + ":") + toString(next.amount)))
2828 else accum
2929 }
3030
3131 makeString_2C({
3232 let $l = payments
3333 let $s = size($l)
3434 let $acc0 = nil
3535 func $f0_1 ($a,$i) = if (($i >= $s))
3636 then $a
3737 else calc($a, $l[$i])
3838
3939 func $f0_2 ($a,$i) = if (($i >= $s))
4040 then $a
4141 else throw("List size exceeds 10")
4242
4343 $f0_2($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)
4444 }, "|")
4545 }
4646
4747
4848 func getPrizeTransfers (prizeFundStr,recipient) = {
4949 func calc (accum,next) = {
5050 let parts = split(next, ":")
5151 let assetId = if ((parts[0] == "WAVES"))
5252 then unit
5353 else fromBase58String(parts[0])
5454 (accum :+ ScriptTransfer(recipient, value(parseInt(parts[1])), assetId))
5555 }
5656
5757 let $l = split_4C(prizeFundStr, "|")
5858 let $s = size($l)
5959 let $acc0 = nil
6060 func $f0_1 ($a,$i) = if (($i >= $s))
6161 then $a
6262 else calc($a, $l[$i])
6363
6464 func $f0_2 ($a,$i) = if (($i >= $s))
6565 then $a
6666 else throw("List size exceeds 10")
6767
6868 $f0_2($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)
6969 }
7070
7171
7272 @Callable(i)
7373 func create (name,desc,endHeight,tasks) = {
7474 let prizeFundStr = calcPrizeFund(i.payments)
7575 if ((size(prizeFundStr) == 0))
7676 then throw("No payments")
7777 else if ((size(tasks) == 0))
7878 then throw("Tasks list empty")
7979 else if ((size(name) == 0))
8080 then throw("Name empty")
8181 else if ((size(desc) == 0))
8282 then throw("Desc empty")
8383 else if ((height > endHeight))
8484 then throw("Invalid date end")
8585 else {
8686 let contestId = valueOrElse(getInteger(LastContestIdKey), 1)
87- $Tuple2([StringEntry(((ContestPrefix + toString(contestId)) + "_name"), name), StringEntry(((ContestPrefix + toString(contestId)) + "_desc"), desc), IntegerEntry(((ContestPrefix + toString(contestId)) + "_endHeight"), endHeight), StringEntry(((ContestPrefix + toString(contestId)) + "_owner"), toString(i.caller)), StringEntry(((ContestPrefix + toString(contestId)) + "_prizeFund"), prizeFundStr), StringEntry(((ContestPrefix + toString(contestId)) + "_tasks"), makeString_2C(tasks, ";")), StringEntry(((ContestPrefix + toString(contestId)) + "_status"), Status_Active), IntegerEntry(LastContestIdKey, (contestId + 1))], contestId)
87+ $Tuple2([StringEntry(((ContestPrefix + toString(contestId)) + "_name"), name), StringEntry(((ContestPrefix + toString(contestId)) + "_desc"), desc), IntegerEntry(((ContestPrefix + toString(contestId)) + "_startHeight"), height), IntegerEntry(((ContestPrefix + toString(contestId)) + "_endHeight"), endHeight), StringEntry(((ContestPrefix + toString(contestId)) + "_owner"), toString(i.caller)), StringEntry(((ContestPrefix + toString(contestId)) + "_prizeFund"), prizeFundStr), StringEntry(((ContestPrefix + toString(contestId)) + "_tasks"), makeString_2C(tasks, ";")), StringEntry(((ContestPrefix + toString(contestId)) + "_status"), Status_Active), IntegerEntry(LastContestIdKey, (contestId + 1))], contestId)
8888 }
8989 }
9090
9191
9292
9393 @Callable(i)
9494 func participate (contestId) = {
9595 let ContestIdStr = (ContestPrefix + contestId)
9696 let ContestParticipantPrefix = ((ContestIdStr + "_participant_") + toString(i.caller))
9797 let ContestParticipantAddressKey = (ContestParticipantPrefix + "_address")
9898 let isOwner = match getString((ContestIdStr + "_owner")) {
9999 case t: String =>
100100 (t == toString(i.caller))
101101 case _ =>
102102 throw("Data get owner error")
103103 }
104104 let isExist = match getString(ContestParticipantAddressKey) {
105105 case t: String =>
106106 true
107107 case _ =>
108108 false
109109 }
110110 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
111111 if (isOwner)
112112 then throw("Owner cannot participate")
113113 else if (isExist)
114114 then throw("You are already participating")
115115 else [StringEntry(ContestParticipantAddressKey, toString(i.caller)), IntegerEntry((ContestParticipantPrefix + "_startedAt"), height), IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount + 1))]
116116 }
117117
118118
119119
120120 @Callable(i)
121121 func unparticipate (contestId) = {
122122 let ContestIdStr = (ContestPrefix + contestId)
123123 let ContestParticipantPrefix = ((ContestIdStr + "_participant_") + toString(i.caller))
124124 let ContestParticipantAddressKey = (ContestParticipantPrefix + "_address")
125125 let isExist = match getString(ContestParticipantAddressKey) {
126126 case t: String =>
127127 true
128128 case _ =>
129129 false
130130 }
131131 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
132132 if (!(isExist))
133133 then throw("You are not participating")
134134 else [DeleteEntry(ContestParticipantAddressKey), DeleteEntry((ContestParticipantPrefix + "_startedAt")), if (((participantsCount - 1) == 0))
135135 then DeleteEntry((ContestIdStr + "_participantsCount"))
136136 else IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount - 1))]
137137 }
138138
139139
140140
141141 @Callable(i)
142142 func remove (contestId) = {
143143 let ContestIdStr = (ContestPrefix + contestId)
144144 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
145145 let prizeFundStr = valueOrErrorMessage(getString((ContestIdStr + "_prizeFund")), "Prize fund data not found")
146146 let isOwner = match getString((ContestIdStr + "_owner")) {
147147 case t: String =>
148148 (t == toString(i.caller))
149149 case _ =>
150150 throw("Data get owner error")
151151 }
152152 if (!(isOwner))
153153 then throw("You are not the owner")
154154 else if ((participantsCount > 0))
155155 then throw("The number of participants is greater than zero")
156- else ([DeleteEntry((ContestIdStr + "_name")), DeleteEntry((ContestIdStr + "_desc")), DeleteEntry((ContestIdStr + "_endHeight")), DeleteEntry((ContestIdStr + "_owner")), DeleteEntry((ContestIdStr + "_prizeFund")), DeleteEntry((ContestIdStr + "_tasks")), DeleteEntry((ContestIdStr + "_status")), DeleteEntry((ContestIdStr + "_participantsCount"))] ++ getPrizeTransfers(prizeFundStr, i.caller))
156+ else ([DeleteEntry((ContestIdStr + "_name")), DeleteEntry((ContestIdStr + "_desc")), DeleteEntry((ContestIdStr + "_startHeight")), DeleteEntry((ContestIdStr + "_endHeight")), DeleteEntry((ContestIdStr + "_owner")), DeleteEntry((ContestIdStr + "_prizeFund")), DeleteEntry((ContestIdStr + "_tasks")), DeleteEntry((ContestIdStr + "_status")), DeleteEntry((ContestIdStr + "_participantsCount"))] ++ getPrizeTransfers(prizeFundStr, i.caller))
157157 }
158158
159159
160160 @Verifier(tx)
161161 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
162162

github/deemru/w8io/6500d08 
37.77 ms