tx · 8Ysvn4ohk34QgGPePe5YWNF8r51QMXi7THPshSk7wTq3

3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir:  -0.01000000 Waves

2023.05.09 22:45 [3636245] smart account 3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir > SELF 0.00000000 Waves

{ "type": 13, "id": "8Ysvn4ohk34QgGPePe5YWNF8r51QMXi7THPshSk7wTq3", "fee": 1000000, "feeAssetId": null, "timestamp": 1683661616557, "version": 2, "chainId": 87, "sender": "3PLJHro4tbUssVMHY538QqsVZWPVHTUpHir", "senderPublicKey": "8er5GibY1hbf7RjN9rdnQW5Ua9xM7UtDohqbdEukAT7v", "proofs": [ "49n8Pvj8wiXCaxV1hP1AjbWnBMgizEdDLQrirXYhjyGeHokQnparQvNNisujEpau2Cgq9WqmooLpAVAsnrv21Pse" ], "script": "base64:BgIZCAISBgoECAgBGBIDCgEIEgMKAQgSAwoBCAgAEExhc3RDb250ZXN0SWRLZXkCD2xhc3RfY29udGVzdF9pZAANQ29udGVzdFByZWZpeAIIY29udGVzdF8ADFN0YXR1c19EcmFmdAIFZHJhZnQADVN0YXR1c19BY3RpdmUCBmFjdGl2ZQALU3RhdHVzX1N0b3ACBHN0b3AADVN0YXR1c19EZWx0ZWQCB2RlbGV0ZWQBDmNhbGNQcml6ZUZvdW5kAQhwYXltZW50cwoBBGNhbGMCBWFjY3VtBG5leHQECWFzc2V0TmFtZQQHJG1hdGNoMAgFBG5leHQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAF0BQckbWF0Y2gwCQDYBAEFAXQCBVdBVkVTAwMJAGYCCQCxAgEFCWFzc2V0TmFtZQAACQBmAggFBG5leHQGYW1vdW50AAAHCQDNCAIFBWFjY3VtCQCsAgIJAKwCAgUJYXNzZXROYW1lAgE6CQCkAwEIBQRuZXh0BmFtb3VudAUFYWNjdW0JALoJAgoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEY2FsYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgIBfAERZ2V0UHJpemVUcmFuc2ZlcnMCDHByaXplRnVuZFN0cglyZWNpcGllbnQKAQRjYWxjAgVhY2N1bQRuZXh0BAVwYXJ0cwkAtQkCBQRuZXh0AgE6BAdhc3NldElkAwkAAAIJAJEDAgUFcGFydHMAAAIFV0FWRVMFBHVuaXQJANkEAQkAkQMCBQVwYXJ0cwAACQDNCAIFBWFjY3VtCQEOU2NyaXB0VHJhbnNmZXIDBQlyZWNpcGllbnQJAQV2YWx1ZQEJALYJAQkAkQMCBQVwYXJ0cwABBQdhc3NldElkCgACJGwJALwJAgUMcHJpemVGdW5kU3RyAgF8CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRjYWxjAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAFpAQZjcmVhdGUEBG5hbWUEZGVzYwllbmRIZWlnaHQFdGFza3MEDXByaXplRm91bmRTdHIJAQ5jYWxjUHJpemVGb3VuZAEIBQFpCHBheW1lbnRzAwkAAAIJALECAQUNcHJpemVGb3VuZFN0cgAACQACAQILTm8gcGF5bWVudHMDCQAAAgkAkAMBBQV0YXNrcwAACQACAQIQVGFza3MgbGlzdCBlbXB0eQMJAAACCQCxAgEFBG5hbWUAAAkAAgECCk5hbWUgZW1wdHkDCQAAAgkAsQIBBQRkZXNjAAAJAAIBAgpEZXNjIGVtcHR5AwkAZgIFBmhlaWdodAUJZW5kSGVpZ2h0CQACAQIQSW52YWxpZCBkYXRlIGVuZAQJY29udGVzdElkCQELdmFsdWVPckVsc2UCCQCfCAEFEExhc3RDb250ZXN0SWRLZXkAAQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQ1Db250ZXN0UHJlZml4CQCkAwEFCWNvbnRlc3RJZAIFX25hbWUFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgVfZGVzYwUEZGVzYwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgpfZW5kSGVpZ2h0BQllbmRIZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgZfb3duZXIJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQ1Db250ZXN0UHJlZml4CQCkAwEFCWNvbnRlc3RJZAILX3ByaXplRm91bmQFDXByaXplRm91bmRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgZfdGFza3MJALoJAgUFdGFza3MCATsJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFDUNvbnRlc3RQcmVmaXgJAKQDAQUJY29udGVzdElkAgdfc3RhdHVzBQ1TdGF0dXNfQWN0aXZlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBMYXN0Q29udGVzdElkS2V5CQBkAgUJY29udGVzdElkAAEFA25pbAUJY29udGVzdElkAWkBC3BhcnRpY2lwYXRlAQljb250ZXN0SWQEDENvbnRlc3RJZFN0cgkArAICBQ1Db250ZXN0UHJlZml4BQljb250ZXN0SWQEEUNvbnRlc3RBZGRyZXNzS2V5CQCsAgIJAKwCAgkArAICBQxDb250ZXN0SWRTdHICDV9wYXJ0aWNpcGFudF8JAKUIAQgFAWkGY2FsbGVyAghfYWRkcmVzcwQHaXNPd25lcgQHJG1hdGNoMAkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAkAAAIFAXQJAKUIAQgFAWkGY2FsbGVyCQACAQIURGF0YSBnZXQgb3duZXIgZXJyb3IEB2lzRXhpc3QEByRtYXRjaDAJAKIIAQURQ29udGVzdEFkZHJlc3NLZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF0BQckbWF0Y2gwBgcEEXBhcnRpY2lwYW50c0NvdW50CQELdmFsdWVPckVsc2UCCQCfCAEJAKwCAgUMQ29udGVzdElkU3RyAhJfcGFydGljaXBhbnRzQ291bnQAAAMFB2lzT3duZXIJAAIBAhhPd25lciBjYW5ub3QgcGFydGljaXBhdGUDBQdpc0V4aXN0CQACAQIdWW91IGFyZSBhbHJlYWR5IHBhcnRpY2lwYXRpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgURQ29udGVzdEFkZHJlc3NLZXkJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50CQBkAgURcGFydGljaXBhbnRzQ291bnQAAQUDbmlsAWkBDXVucGFydGljaXBhdGUBCWNvbnRlc3RJZAQMQ29udGVzdElkU3RyCQCsAgIFDUNvbnRlc3RQcmVmaXgFCWNvbnRlc3RJZAQRQ29udGVzdEFkZHJlc3NLZXkJAKwCAgkArAICCQCsAgIFDENvbnRlc3RJZFN0cgINX3BhcnRpY2lwYW50XwkApQgBCAUBaQZjYWxsZXICCF9hZGRyZXNzBAdpc0V4aXN0BAckbWF0Y2gwCQCiCAEFEUNvbnRlc3RBZGRyZXNzS2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAYHBBFwYXJ0aWNpcGFudHNDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50AAADCQEBIQEFB2lzRXhpc3QJAAIBAhlZb3UgYXJlIG5vdCBwYXJ0aWNpcGF0aW5nCQDMCAIJAQtEZWxldGVFbnRyeQEFEUNvbnRlc3RBZGRyZXNzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50CQBlAgURcGFydGljaXBhbnRzQ291bnQAAQUDbmlsAWkBBnJlbW92ZQEJY29udGVzdElkBAxDb250ZXN0SWRTdHIJAKwCAgUNQ29udGVzdFByZWZpeAUJY29udGVzdElkBBFwYXJ0aWNpcGFudHNDb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQCsAgIFDENvbnRlc3RJZFN0cgISX3BhcnRpY2lwYW50c0NvdW50AAAEDHByaXplRnVuZFN0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAKwCAgUMQ29udGVzdElkU3RyAgtfcHJpemVGb3VuZAIZUHJpemUgZnVuZCBkYXRhIG5vdCBmb3VuZAQHaXNPd25lcgQHJG1hdGNoMAkAoggBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBdAUHJG1hdGNoMAkAAAIFAXQJAKUIAQgFAWkGY2FsbGVyCQACAQIURGF0YSBnZXQgb3duZXIgZXJyb3IDCQEBIQEFB2lzT3duZXIJAAIBAhVZb3UgYXJlIG5vdCB0aGUgb3duZXIDCQBmAgURcGFydGljaXBhbnRzQ291bnQAAAkAAgECL1RoZSBudW1iZXIgb2YgcGFydGljaXBhbnRzIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvCQDOCAIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQxDb250ZXN0SWRTdHICBV9uYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgVfZGVzYwkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgIKX2VuZEhlaWdodAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgIGX293bmVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgtfcHJpemVGb3VuZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFDENvbnRlc3RJZFN0cgIGX3Rhc2tzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAgdfc3RhdHVzCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUMQ29udGVzdElkU3RyAhJfcGFydGljaXBhbnRzQ291bnQFA25pbAkBEWdldFByaXplVHJhbnNmZXJzAgUMcHJpemVGdW5kU3RyCAUBaQZjYWxsZXIBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5AT02ww==", "height": 3636245, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2yjppeAEeE9DJG5r2EHyZfa5GJp4TTR5B3LuRBa2tYW2 Next: Car4zTFsfhJJ8pWQexuEF5JvFSwdEGHindj4r4vgEWAt Diff:
OldNewDifferences
9393 @Callable(i)
9494 func participate (contestId) = {
9595 let ContestIdStr = (ContestPrefix + contestId)
96- let ContestAddressKey = ((ContestIdStr + "_participant_") + toString(i.caller))
96+ let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
9797 let isOwner = match getString((ContestIdStr + "_owner")) {
9898 case t: String =>
9999 (t == toString(i.caller))
119119 @Callable(i)
120120 func unparticipate (contestId) = {
121121 let ContestIdStr = (ContestPrefix + contestId)
122- let ContestAddressKey = ((ContestIdStr + "_participant_") + toString(i.caller))
122+ let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
123123 let isExist = match getString(ContestAddressKey) {
124124 case t: String =>
125125 true
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 calcPrizeFound (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 prizeFoundStr = calcPrizeFound(i.payments)
7575 if ((size(prizeFoundStr) == 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)) + "_prizeFound"), prizeFoundStr), 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))
96+ let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
9797 let isOwner = match getString((ContestIdStr + "_owner")) {
9898 case t: String =>
9999 (t == toString(i.caller))
100100 case _ =>
101101 throw("Data get owner error")
102102 }
103103 let isExist = match getString(ContestAddressKey) {
104104 case t: String =>
105105 true
106106 case _ =>
107107 false
108108 }
109109 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
110110 if (isOwner)
111111 then throw("Owner cannot participate")
112112 else if (isExist)
113113 then throw("You are already participating")
114114 else [StringEntry(ContestAddressKey, toString(i.caller)), IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount + 1))]
115115 }
116116
117117
118118
119119 @Callable(i)
120120 func unparticipate (contestId) = {
121121 let ContestIdStr = (ContestPrefix + contestId)
122- let ContestAddressKey = ((ContestIdStr + "_participant_") + toString(i.caller))
122+ let ContestAddressKey = (((ContestIdStr + "_participant_") + toString(i.caller)) + "_address")
123123 let isExist = match getString(ContestAddressKey) {
124124 case t: String =>
125125 true
126126 case _ =>
127127 false
128128 }
129129 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
130130 if (!(isExist))
131131 then throw("You are not participating")
132132 else [DeleteEntry(ContestAddressKey), IntegerEntry((ContestIdStr + "_participantsCount"), (participantsCount - 1))]
133133 }
134134
135135
136136
137137 @Callable(i)
138138 func remove (contestId) = {
139139 let ContestIdStr = (ContestPrefix + contestId)
140140 let participantsCount = valueOrElse(getInteger((ContestIdStr + "_participantsCount")), 0)
141141 let prizeFundStr = valueOrErrorMessage(getString((ContestIdStr + "_prizeFound")), "Prize fund data not found")
142142 let isOwner = match getString((ContestIdStr + "_owner")) {
143143 case t: String =>
144144 (t == toString(i.caller))
145145 case _ =>
146146 throw("Data get owner error")
147147 }
148148 if (!(isOwner))
149149 then throw("You are not the owner")
150150 else if ((participantsCount > 0))
151151 then throw("The number of participants is greater than zero")
152152 else ([DeleteEntry((ContestIdStr + "_name")), DeleteEntry((ContestIdStr + "_desc")), DeleteEntry((ContestIdStr + "_endHeight")), DeleteEntry((ContestIdStr + "_owner")), DeleteEntry((ContestIdStr + "_prizeFound")), DeleteEntry((ContestIdStr + "_tasks")), DeleteEntry((ContestIdStr + "_status")), DeleteEntry((ContestIdStr + "_participantsCount"))] ++ getPrizeTransfers(prizeFundStr, i.caller))
153153 }
154154
155155
156156 @Verifier(tx)
157157 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
158158

github/deemru/w8io/0e76f2f 
34.63 ms