tx · 4q1xdM2iyqiSDxLytspKghbxdJXXWkhaA3hbPT1wRMqD

3Mr7HCJPTazuYjJbfbbpRMvZX8xrNTjT1Kx:  -0.01000000 Waves

2023.02.17 09:37 [2453268] smart account 3Mr7HCJPTazuYjJbfbbpRMvZX8xrNTjT1Kx > SELF 0.00000000 Waves

{ "type": 13, "id": "4q1xdM2iyqiSDxLytspKghbxdJXXWkhaA3hbPT1wRMqD", "fee": 1000000, "feeAssetId": null, "timestamp": 1676615841565, "version": 2, "chainId": 84, "sender": "3Mr7HCJPTazuYjJbfbbpRMvZX8xrNTjT1Kx", "senderPublicKey": "D35PGQCSSdrp9pvujggj7b2DaCK1BhcU3kho7tikKJYs", "proofs": [ "5W5imtz45fhLkmLFbdkJ9Sdw5juyEZBpVeg3dABQDKeQdisGJat1SGGeFtic1pKpBP96jQPzRTuZW6zp8SVN11Nu" ], "script": "base64:BgIaCAISABIDCgEBEgQKAhgREgQKAggBEgMKAQgBAAR0VVNEASCrJEpqtkJG69L843mwYbrDrmlXTVJ6ykUcp0AdEbApDgUBaQEHZGVwb3NpdAADCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUUGF5bWVudCBub3QgYXR0YWNoZWQEA3BtdAkAkQMCCQEFdmFsdWUBCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQR0VVNECQACAQIXaG9sZGVkIHBheW1lbnQgbm90IHRVU0QECmN1cnJlbnRLZXkJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQNY3VycmVudEFtb3VudAQHJG1hdGNoMAkAmggCBQR0aGlzBQpjdXJyZW50S2V5AwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABAluZXdBbW91bnQJAGQCBQ1jdXJyZW50QW1vdW50CAUDcG10BmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUKY3VycmVudEtleQUJbmV3QW1vdW50BQNuaWwBaQEId2l0aGRyYXcBBmFtb3VudAQKY3VycmVudEtleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBA1jdXJyZW50QW1vdW50BAckbWF0Y2gwCQCaCAIFBHRoaXMFCmN1cnJlbnRLZXkDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAECW5ld0Ftb3VudAkAZQIFDWN1cnJlbnRBbW91bnQFBmFtb3VudAMJAGYCAAAFBmFtb3VudAkAAgECHkNhbid0IHdpdGhkcmF3IG5lZ2F0aXZlIGFtb3VudAMJAGYCAAAFCW5ld0Ftb3VudAkAAgECEk5vdCBlbm91Z2ggYmFsYW5jZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpjdXJyZW50S2V5BQluZXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQFBHVuaXQFA25pbAUEdW5pdAFpAQpzZXRPcHRpb25zAgRvcHRzBHZhbHMECG9wdF9zaXplCQCQAwEFBG9wdHMDCQBnAgBkBQhvcHRfc2l6ZQQMb3B0aW9uc19hZGRyCQEHQWRkcmVzcwEB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CQABAgUHJG1hdGNoMAIEVW5pdAIIbm8gYWRtaW4JAAIBAgtNYXRjaCBlcnJvcgoBB2FkZF9lbG0BB29wdGlvbnMEA29wdAkAtQkCBQdvcHRpb25zAgF8CQELU3RyaW5nRW50cnkCCQCRAwIFA29wdAAACQCRAwIFA29wdAABAwkBAiE9AgUHaXNBZG1pbgIIbm8gYWRtaW4FAXIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9Zb3Ugbm90IGFkbWluOiAFCWFkbWluTGlzdAILLCBpc0FkbWluOiAFB2lzQWRtaW4CFCwgY2FsbGVyQWRkcmVzc1N0cjogBRBjYWxsZXJBZGRyZXNzU3RyAgIsIAkAAgECEFVuc2V0IGFkbWluIGxpc3QJAAIBAi9UaGUgbnVtYmVyIG9mIGxpc3QgZWxlbWVudHMgbXVzdCBub3QgZXhjZWVkIDEwMAFpAQlzZXRPcHRpb24CCHZhcmlhYmxlBXZhbHVlBAxvcHRpb25zX2FkZHIJAQdBZGRyZXNzAQEaAVRBW/gr9hfqKqHLxIrx+8e7siBhMf6HIMEECWFkbWluTGlzdAQHJG1hdGNoMAkAnQgCBQxvcHRpb25zX2FkZHICCmFkbWluX2xpc3QDCQABAgUHJG1hdGNoMAIEVW5pdAIFdW5zZXQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwBQF4CQACAQILTWF0Y2ggZXJyb3IEEGNhbGxlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgUJYWRtaW5MaXN0AgV1bnNldAQEdGVzdAkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQlhZG1pbkxpc3QFEGNhbGxlckFkZHJlc3NTdHIEB2lzQWRtaW4EByRtYXRjaDAFBHRlc3QDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwBQF4AwkAAQIFByRtYXRjaDACBFVuaXQCCG5vIGFkbWluCQACAQILTWF0Y2ggZXJyb3IDCQECIT0CBQdpc0FkbWluAghubyBhZG1pbgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQh2YXJpYWJsZQUFdmFsdWUFA25pbAUEdW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD1lvdSBub3QgYWRtaW46IAUJYWRtaW5MaXN0AgssIGlzQWRtaW46IAUHaXNBZG1pbgIULCBjYWxsZXJBZGRyZXNzU3RyOiAFEGNhbGxlckFkZHJlc3NTdHICAiwgCQACAQIQVW5zZXQgYWRtaW4gbGlzdAFpAQlkZWxPcHRpb24BCHZhcmlhYmxlBAxvcHRpb25zX2FkZHIJAQdBZGRyZXNzAQEaAVRBW/gr9hfqKqHLxIrx+8e7siBhMf6HIMEECWFkbWluTGlzdAQHJG1hdGNoMAkAnQgCBQxvcHRpb25zX2FkZHICCmFkbWluX2xpc3QDCQABAgUHJG1hdGNoMAIEVW5pdAIFdW5zZXQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwBQF4CQACAQILTWF0Y2ggZXJyb3IEEGNhbGxlckFkZHJlc3NTdHIJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AgUJYWRtaW5MaXN0AgV1bnNldAQEdGVzdAkAnQgCCQERQGV4dHJOYXRpdmUoMTA2MikBBQlhZG1pbkxpc3QFEGNhbGxlckFkZHJlc3NTdHIEB2lzQWRtaW4EByRtYXRjaDAFBHRlc3QDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF4BQckbWF0Y2gwBQF4AwkAAQIFByRtYXRjaDACBFVuaXQCCG5vIGFkbWluCQACAQILTWF0Y2ggZXJyb3IDCQECIT0CBQdpc0FkbWluAghubyBhZG1pbgkAlAoCCQDMCAIJAQtEZWxldGVFbnRyeQEFCHZhcmlhYmxlBQNuaWwFBHVuaXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9Zb3Ugbm90IGFkbWluOiAFCWFkbWluTGlzdAILLCBpc0FkbWluOiAFB2lzQWRtaW4CFCwgY2FsbGVyQWRkcmVzc1N0cjogBRBjYWxsZXJBZGRyZXNzU3RyAgIsIAkAAgECEFVuc2V0IGFkbWluIGxpc3QBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5o9fibg==", "height": 2453268, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: F4LhcqZYvbaG74MnUZNpdS4iM6rMcfBaF5c3ZLTdKpyM Next: 3QC6LXWqgbeGjsau8BkuVdzwmPJ68uZNMKKXXT53qeim Diff:
OldNewDifferences
44 let tUSD = base58'CX4p6XcuSBUvv44r1avCqYka5PYAVzBK5hSXaT7maU85'
55
66 @Callable(i)
7-func deposit () = {
8- let pmt = value(i.payments)[0]
9- if (isDefined(pmt.assetId))
10- then throw("can hodl waves only at the moment")
11- else if ((pmt.assetId != tUSD))
7+func deposit () = if ((size(i.payments) == 0))
8+ then throw("Payment not attached")
9+ else {
10+ let pmt = value(i.payments)[0]
11+ if ((pmt.assetId != tUSD))
1212 then throw("holded payment not tUSD")
1313 else {
1414 let currentKey = toBase58String(i.caller.bytes)
2121 let newAmount = (currentAmount + pmt.amount)
2222 [IntegerEntry(currentKey, newAmount)]
2323 }
24- }
24+ }
2525
2626
2727
5959 throw("Match error")
6060 }
6161 func addStringEntry (accum,nextValue) = {
62- let $t026292652 = accum
63- let result = $t026292652._1
64- let j = $t026292652._2
62+ let $t026152638 = accum
63+ let result = $t026152638._1
64+ let j = $t026152638._2
6565 $Tuple2((result :+ IntegerEntry(opts[j], nextValue)), (j + 1))
6666 }
6767
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let tUSD = base58'CX4p6XcuSBUvv44r1avCqYka5PYAVzBK5hSXaT7maU85'
55
66 @Callable(i)
7-func deposit () = {
8- let pmt = value(i.payments)[0]
9- if (isDefined(pmt.assetId))
10- then throw("can hodl waves only at the moment")
11- else if ((pmt.assetId != tUSD))
7+func deposit () = if ((size(i.payments) == 0))
8+ then throw("Payment not attached")
9+ else {
10+ let pmt = value(i.payments)[0]
11+ if ((pmt.assetId != tUSD))
1212 then throw("holded payment not tUSD")
1313 else {
1414 let currentKey = toBase58String(i.caller.bytes)
1515 let currentAmount = match getInteger(this, currentKey) {
1616 case a: Int =>
1717 a
1818 case _ =>
1919 0
2020 }
2121 let newAmount = (currentAmount + pmt.amount)
2222 [IntegerEntry(currentKey, newAmount)]
2323 }
24- }
24+ }
2525
2626
2727
2828 @Callable(i)
2929 func withdraw (amount) = {
3030 let currentKey = toBase58String(i.caller.bytes)
3131 let currentAmount = match getInteger(this, currentKey) {
3232 case a: Int =>
3333 a
3434 case _ =>
3535 0
3636 }
3737 let newAmount = (currentAmount - amount)
3838 if ((0 > amount))
3939 then throw("Can't withdraw negative amount")
4040 else if ((0 > newAmount))
4141 then throw("Not enough balance")
4242 else $Tuple2([IntegerEntry(currentKey, newAmount), ScriptTransfer(i.caller, amount, unit)], unit)
4343 }
4444
4545
4646
4747 @Callable(i)
4848 func setOptions (opts,vals) = {
4949 let opt_size = size(opts)
5050 if ((100 >= opt_size))
5151 then {
5252 let options_addr = Address(base58'3MusfsY6PqDh1YnF7YyTi5ffVT16Dm2bqf6')
5353 let adminList = match getString(options_addr, "admin_list") {
5454 case _: Unit =>
5555 "unset"
5656 case x: String =>
5757 x
5858 case _ =>
5959 throw("Match error")
6060 }
6161 func addStringEntry (accum,nextValue) = {
62- let $t026292652 = accum
63- let result = $t026292652._1
64- let j = $t026292652._2
62+ let $t026152638 = accum
63+ let result = $t026152638._1
64+ let j = $t026152638._2
6565 $Tuple2((result :+ IntegerEntry(opts[j], nextValue)), (j + 1))
6666 }
6767
6868 let r = {
6969 let $l = vals
7070 let $s = size($l)
7171 let $acc0 = $Tuple2(nil, 0)
7272 func $f0_1 ($a,$i) = if (($i >= $s))
7373 then $a
7474 else addStringEntry($a, $l[$i])
7575
7676 func $f0_2 ($a,$i) = if (($i >= $s))
7777 then $a
7878 else throw("List size exceeds 100")
7979
8080 $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($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($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($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($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($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($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), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
8181 }
8282 let callerAddressStr = toString(i.caller)
8383 if ((adminList != "unset"))
8484 then {
8585 let test = getString(addressFromStringValue(adminList), callerAddressStr)
8686 let isAdmin = match test {
8787 case x: String =>
8888 x
8989 case _: Unit =>
9090 "no admin"
9191 case _ =>
9292 throw("Match error")
9393 }
9494 func add_elm (options) = {
9595 let opt = split(options, "|")
9696 StringEntry(opt[0], opt[1])
9797 }
9898
9999 if ((isAdmin != "no admin"))
100100 then r
101101 else throw((((((("You not admin: " + adminList) + ", isAdmin: ") + isAdmin) + ", callerAddressStr: ") + callerAddressStr) + ", "))
102102 }
103103 else throw("Unset admin list")
104104 }
105105 else throw("The number of list elements must not exceed 100")
106106 }
107107
108108
109109
110110 @Callable(i)
111111 func setOption (variable,value) = {
112112 let options_addr = Address(base58'3MusfsY6PqDh1YnF7YyTi5ffVT16Dm2bqf6')
113113 let adminList = match getString(options_addr, "admin_list") {
114114 case _: Unit =>
115115 "unset"
116116 case x: String =>
117117 x
118118 case _ =>
119119 throw("Match error")
120120 }
121121 let callerAddressStr = toString(i.caller)
122122 if ((adminList != "unset"))
123123 then {
124124 let test = getString(addressFromStringValue(adminList), callerAddressStr)
125125 let isAdmin = match test {
126126 case x: String =>
127127 x
128128 case _: Unit =>
129129 "no admin"
130130 case _ =>
131131 throw("Match error")
132132 }
133133 if ((isAdmin != "no admin"))
134134 then $Tuple2([IntegerEntry(variable, value)], unit)
135135 else throw((((((("You not admin: " + adminList) + ", isAdmin: ") + isAdmin) + ", callerAddressStr: ") + callerAddressStr) + ", "))
136136 }
137137 else throw("Unset admin list")
138138 }
139139
140140
141141
142142 @Callable(i)
143143 func delOption (variable) = {
144144 let options_addr = Address(base58'3MusfsY6PqDh1YnF7YyTi5ffVT16Dm2bqf6')
145145 let adminList = match getString(options_addr, "admin_list") {
146146 case _: Unit =>
147147 "unset"
148148 case x: String =>
149149 x
150150 case _ =>
151151 throw("Match error")
152152 }
153153 let callerAddressStr = toString(i.caller)
154154 if ((adminList != "unset"))
155155 then {
156156 let test = getString(addressFromStringValue(adminList), callerAddressStr)
157157 let isAdmin = match test {
158158 case x: String =>
159159 x
160160 case _: Unit =>
161161 "no admin"
162162 case _ =>
163163 throw("Match error")
164164 }
165165 if ((isAdmin != "no admin"))
166166 then $Tuple2([DeleteEntry(variable)], unit)
167167 else throw((((((("You not admin: " + adminList) + ", isAdmin: ") + isAdmin) + ", callerAddressStr: ") + callerAddressStr) + ", "))
168168 }
169169 else throw("Unset admin list")
170170 }
171171
172172
173173 @Verifier(tx)
174174 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
175175

github/deemru/w8io/169f3d6 
47.12 ms