tx · AXj54ZCXyCT7mXHC2nfVCfZy1am9j2FpsYhM4ZfuhwMZ

3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir:  -0.01000000 Waves

2023.05.09 23:23 [3636284] smart account 3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir > SELF 0.00000000 Waves

{ "type": 13, "id": "AXj54ZCXyCT7mXHC2nfVCfZy1am9j2FpsYhM4ZfuhwMZ", "fee": 1000000, "feeAssetId": null, "timestamp": 1683663837548, "version": 2, "chainId": 87, "sender": "3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir", "senderPublicKey": "8er5GibY1hbf7RjN9rdnQW5Ua9xM7UtDohqbdEukAT7v", "proofs": [ "3o8UKHDKbKv5sfFSaq2rDcJqo21y2CNpe69RtEnMg5JvXG9hjD1WW4ruBabo6PS4N3ob7vrEmwU5gtf1YmJxYkzp" ], "script": "base64:BgIZCAISBgoECAgBGBIDCgEIEgMKAQgSAwoBCAgAEExhc3RDb250ZXN0SWRLZXkCD2xhc3RfY29udGVzdF9pZAANQ29udGVzdFByZWZpeAIIY29udGVzdF8ADFN0YXR1c19EcmFmdAIFZHJhZnQADVN0YXR1c19BY3RpdmUCBmFjdGl2ZQALU3RhdHVzX1N0b3ACBHN0b3AADVN0YXR1c19EZWx0ZWQCB2RlbGV0ZWQBDWNhbGNQcml6ZUZ1bmQBCHBheW1lbnRzCgEEY2FsYwIFYWNjdW0EbmV4dAQJYXNzZXROYW1lBAckbWF0Y2gwCAUEbmV4dAdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAXQFByRtYXRjaDAJANgEAQUBdAIFV0FWRVMDAwkAZgIJALECAQUJYXNzZXROYW1lAAAJAGYCCAUEbmV4dAZhbW91bnQAAAcJAM0IAgUFYWNjdW0JAKwCAgkArAICBQlhc3NldE5hbWUCAToJAKQDAQgFBG5leHQGYW1vdW50BQVhY2N1bQkAugkCCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRjYWxjAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAgF8ARFnZXRQcml6ZVRyYW5zZmVycwIMcHJpemVGdW5kU3RyCXJlY2lwaWVudAoBBGNhbGMCBWFjY3VtBG5leHQEBXBhcnRzCQC1CQIFBG5leHQCAToEB2Fzc2V0SWQDCQAAAgkAkQMCBQVwYXJ0cwAAAgVXQVZFUwUEdW5pdAkA2QQBCQCRAwIFBXBhcnRzAAAJAM0IAgUFYWNjdW0JAQ5TY3JpcHRUcmFuc2ZlcgMFCXJlY2lwaWVudAkBBXZhbHVlAQkAtgkBCQCRAwIFBXBhcnRzAAEFB2Fzc2V0SWQKAAIkbAkAvAkCBQxwcml6ZUZ1bmRTdHICAXwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGNhbGMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEAWkBBmNyZWF0ZQQEbmFtZQRkZXNjCWVuZEhlaWdodAV0YXNrcwQMcHJpemVGdW5kU3RyCQENY2FsY1ByaXplRnVuZAEIBQFpCHBheW1lbnRzAwkAAAIJALECAQUMcHJpemVGdW5kU3RyAAAJAAIBAgtObyBwYXltZW50cwMJAAACCQCQAwEFBXRhc2tzAAAJAAIBAhBUYXNrcyBsaXN0IGVtcHR5AwkAAAIJALECAQUEbmFtZQAACQACAQIKTmFtZSBlbXB0eQMJAAACCQCxAgEFBGRlc2MAAAkAAgECCkRlc2MgZW1wdHkDCQBmAgUGaGVpZ2h0BQllbmRIZWlnaHQJAAIBAhBJbnZhbGlkIGRhdGUgZW5kBAljb250ZXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUQTGFzdENvbnRlc3RJZEtleQABCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgVfbmFtZQUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUNQ29udGVzdFByZWZpeAkApAMBBQljb250ZXN0SWQCBV9kZXNjBQRkZXNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUNQ29udGVzdFByZWZpeAkApAMBBQljb250ZXN0SWQCCl9lbmRIZWlnaHQFCWVuZEhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUNQ29udGVzdFByZWZpeAkApAMBBQljb250ZXN0SWQCBl9vd25lcgkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgpfcHJpemVGdW5kBQxwcml6ZUZ1bmRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgZfdGFza3MJALoJAgUFdGFza3MCATsJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgdfc3RhdHVzBQ1TdGF0dXNfQWN0aXZlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBMYXN0Q29udGVzdElkS2V5CQBkAgUJY29udGVzdElkAAEFA25pbAUJY29udGVzdElkAWkBC3BhcnRpY2lwYXRlAQljb250ZXN0SWQEDENvbnRlc3RJZFN0cgkArAICBQ1Db250ZXN0UHJlZml4BQljb250ZXN0SWQEGENvbnRlc3RQYXJ0aWNpcGFudFByZWZpeAkArAICCQCsAgIFDENvbnRlc3RJZFN0cgINX3BhcnRpY2lwYW50XwkApQgBCAUBaQZjYWxsZXIEHENvbnRlc3RQYXJ0aWNpcGFudEFkZHJlc3NLZXkJAKwCAgUYQ29udGVzdFBhcnRpY2lwYW50UHJlZml4AghfYWRkcmVzcwQHaXNPd25lcgQHJG1hdGNoMAkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAkAAAIFAXQJAKUIAQgFAWkGY2FsbGVyCQACAQIURGF0YSBnZXQgb3duZXIgZXJyb3IEB2lzRXhpc3QEByRtYXRjaDAJAKIIAQUcQ29udGVzdFBhcnRpY2lwYW50QWRkcmVzc0tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXQFByRtYXRjaDAGBwQRcGFydGljaXBhbnRzQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAAAAwUHaXNPd25lcgkAAgECGE93bmVyIGNhbm5vdCBwYXJ0aWNpcGF0ZQMFB2lzRXhpc3QJAAIBAh1Zb3UgYXJlIGFscmVhZHkgcGFydGljaXBhdGluZwkAzAgCCQELU3RyaW5nRW50cnkCBRxDb250ZXN0UGFydGljaXBhbnRBZGRyZXNzS2V5CQClCAEIBQFpBmNhbGxlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBRhDb250ZXN0UGFydGljaXBhbnRQcmVmaXgCCl9zdGFydGVkQXQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAkAZAIFEXBhcnRpY2lwYW50c0NvdW50AAEFA25pbAFpAQ11bnBhcnRpY2lwYXRlAQljb250ZXN0SWQEDENvbnRlc3RJZFN0cgkArAICBQ1Db250ZXN0UHJlZml4BQljb250ZXN0SWQEGENvbnRlc3RQYXJ0aWNpcGFudFByZWZpeAkArAICCQCsAgIFDENvbnRlc3RJZFN0cgINX3BhcnRpY2lwYW50XwkApQgBCAUBaQZjYWxsZXIEHENvbnRlc3RQYXJ0aWNpcGFudEFkZHJlc3NLZXkJAKwCAgUYQ29udGVzdFBhcnRpY2lwYW50UHJlZml4AghfYWRkcmVzcwQHaXNFeGlzdAQHJG1hdGNoMAkAoggBBRxDb250ZXN0UGFydGljaXBhbnRBZGRyZXNzS2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAYHBBFwYXJ0aWNpcGFudHNDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50AAADCQEBIQEFB2lzRXhpc3QJAAIBAhlZb3UgYXJlIG5vdCBwYXJ0aWNpcGF0aW5nCQDMCAIJAQtEZWxldGVFbnRyeQEFHENvbnRlc3RQYXJ0aWNpcGFudEFkZHJlc3NLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBRhDb250ZXN0UGFydGljaXBhbnRQcmVmaXgCCl9zdGFydGVkQXQJAMwIAgMJAAACCQBlAgURcGFydGljaXBhbnRzQ291bnQAAQAACQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50CQEMSW50ZWdlckVudHJ5AgkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAkAZQIFEXBhcnRpY2lwYW50c0NvdW50AAEFA25pbAFpAQZyZW1vdmUBCWNvbnRlc3RJZAQMQ29udGVzdElkU3RyCQCsAgIFDUNvbnRlc3RQcmVmaXgFCWNvbnRlc3RJZAQRcGFydGljaXBhbnRzQ291bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAAABAxwcml6ZUZ1bmRTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIKX3ByaXplRnVuZAIZUHJpemUgZnVuZCBkYXRhIG5vdCBmb3VuZAQHaXNPd25lcgQHJG1hdGNoMAkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAkAAAIFAXQJAKUIAQgFAWkGY2FsbGVyCQACAQIURGF0YSBnZXQgb3duZXIgZXJyb3IDCQEBIQEFB2lzT3duZXIJAAIBAhVZb3UgYXJlIG5vdCB0aGUgb3duZXIDCQBmAgURcGFydGljaXBhbnRzQ291bnQAAAkAAgECL1RoZSBudW1iZXIgb2YgcGFydGljaXBhbnRzIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQxDb250ZXN0SWRTdHICBV9uYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgVfZGVzYwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgIKX2VuZEhlaWdodAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgpfcHJpemVGdW5kCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgZfdGFza3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQxDb250ZXN0SWRTdHICB19zdGF0dXMJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQxDb250ZXN0SWRTdHICEl9wYXJ0aWNpcGFudHNDb3VudAUDbmlsCQERZ2V0UHJpemVUcmFuc2ZlcnMCBQxwcml6ZUZ1bmRTdHIIBQFpBmNhbGxlcgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXk1pHY+", "height": 3636284, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AWuKxb1yvEHcMEV2Boyd5o6J5RKy3grXVyCUccw1GP4H Next: AhM1RL3w52YmkfxYrmQdSaVfzxuvBZjvw1HE9fPBX65P Diff:
OldNewDifferences
9393 @Callable(i)
9494 func participate (contestId) = {
9595 let ContestIdStr = (ContestPrefix + contestId)
96- let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
96+ let ContestParticipantPrefix = ((ContestIdStr + "_participant_") + toString(i.caller))
97+ let ContestParticipantAddressKey = (ContestParticipantPrefix + "_address")
9798 let isOwner = match getString((ContestIdStr + "_owner")) {
9899 case t: String =>
99100 (t == toString(i.caller))
100101 case _ =>
101102 throw("Data get owner error")
102103 }
103- let isExist = match getString(ContestAddressKey) {
104+ let isExist = match getString(ContestParticipantAddressKey) {
104105 case t: String =>
105106 true
106107 case _ =>
111112 then throw("Owner cannot participate")
112113 else if (isExist)
113114 then throw("You are already participating")
114- else [StringEntry(ContestAddressKey, toString(i.caller)), IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount + 1))]
115+ else [StringEntry(ContestParticipantAddressKey, toString(i.caller)), IntegerEntry((ContestParticipantPrefix + "_startedAt"), height), IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount + 1))]
115116 }
116117
117118
119120 @Callable(i)
120121 func unparticipate (contestId) = {
121122 let ContestIdStr = (ContestPrefix + contestId)
122- let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
123- let isExist = match getString(ContestAddressKey) {
123+ let ContestParticipantPrefix = ((ContestIdStr + "_participant_") + toString(i.caller))
124+ let ContestParticipantAddressKey = (ContestParticipantPrefix + "_address")
125+ let isExist = match getString(ContestParticipantAddressKey) {
124126 case t: String =>
125127 true
126128 case _ =>
129131 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
130132 if (!(isExist))
131133 then throw("You are not participating")
132- else [DeleteEntry(ContestAddressKey), if (((participantsCount - 1) == 0))
134+ else [DeleteEntry(ContestParticipantAddressKey), DeleteEntry((ContestParticipantPrefix + "_startedAt")), if (((participantsCount - 1) == 0))
133135 then DeleteEntry((ContestIdStr + "_participantsCount"))
134136 else IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount - 1))]
135137 }
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)
8787 $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)
8888 }
8989 }
9090
9191
9292
9393 @Callable(i)
9494 func participate (contestId) = {
9595 let ContestIdStr = (ContestPrefix + contestId)
96- let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
96+ let ContestParticipantPrefix = ((ContestIdStr + "_participant_") + toString(i.caller))
97+ let ContestParticipantAddressKey = (ContestParticipantPrefix + "_address")
9798 let isOwner = match getString((ContestIdStr + "_owner")) {
9899 case t: String =>
99100 (t == toString(i.caller))
100101 case _ =>
101102 throw("Data get owner error")
102103 }
103- let isExist = match getString(ContestAddressKey) {
104+ let isExist = match getString(ContestParticipantAddressKey) {
104105 case t: String =>
105106 true
106107 case _ =>
107108 false
108109 }
109110 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
110111 if (isOwner)
111112 then throw("Owner cannot participate")
112113 else if (isExist)
113114 then throw("You are already participating")
114- else [StringEntry(ContestAddressKey, toString(i.caller)), IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount + 1))]
115+ else [StringEntry(ContestParticipantAddressKey, toString(i.caller)), IntegerEntry((ContestParticipantPrefix + "_startedAt"), height), IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount + 1))]
115116 }
116117
117118
118119
119120 @Callable(i)
120121 func unparticipate (contestId) = {
121122 let ContestIdStr = (ContestPrefix + contestId)
122- let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
123- let isExist = match getString(ContestAddressKey) {
123+ let ContestParticipantPrefix = ((ContestIdStr + "_participant_") + toString(i.caller))
124+ let ContestParticipantAddressKey = (ContestParticipantPrefix + "_address")
125+ let isExist = match getString(ContestParticipantAddressKey) {
124126 case t: String =>
125127 true
126128 case _ =>
127129 false
128130 }
129131 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
130132 if (!(isExist))
131133 then throw("You are not participating")
132- else [DeleteEntry(ContestAddressKey), if (((participantsCount - 1) == 0))
134+ else [DeleteEntry(ContestParticipantAddressKey), DeleteEntry((ContestParticipantPrefix + "_startedAt")), if (((participantsCount - 1) == 0))
133135 then DeleteEntry((ContestIdStr + "_participantsCount"))
134136 else IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount - 1))]
135137 }
136138
137139
138140
139141 @Callable(i)
140142 func remove (contestId) = {
141143 let ContestIdStr = (ContestPrefix + contestId)
142144 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
143145 let prizeFundStr = valueOrErrorMessage(getString((ContestIdStr + "_prizeFund")), "Prize fund data not found")
144146 let isOwner = match getString((ContestIdStr + "_owner")) {
145147 case t: String =>
146148 (t == toString(i.caller))
147149 case _ =>
148150 throw("Data get owner error")
149151 }
150152 if (!(isOwner))
151153 then throw("You are not the owner")
152154 else if ((participantsCount > 0))
153155 then throw("The number of participants is greater than zero")
154156 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))
155157 }
156158
157159
158160 @Verifier(tx)
159161 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
160162

github/deemru/w8io/3ef1775 
45.63 ms