tx · 3sMMGG2ovWWdum6tZJvPVUGRu4xYk4KbPd2aTRH2zeU6 3PPhk52YuwKTFT2U865di1Pepj4bFHxubFY: -0.03800000 Waves 2022.11.08 11:25 [3373272] smart account 3PPhk52YuwKTFT2U865di1Pepj4bFHxubFY > SELF 0.00000000 Waves
{ "type": 13, "id": "3sMMGG2ovWWdum6tZJvPVUGRu4xYk4KbPd2aTRH2zeU6", "fee": 3800000, "feeAssetId": null, "timestamp": 1667895930494, "version": 2, "chainId": 87, "sender": "3PPhk52YuwKTFT2U865di1Pepj4bFHxubFY", "senderPublicKey": "5EhD7NvoyShNGdN6g6ps2X6FieUun2o7TTggY1CL9wH9", "proofs": [ "APFwHT7RiUdLt2NWB5d4CwR41kmh9Y1d9T1z8AMubrXMMBZTkxVDR9U6TYrrUeKKpCbF2Fihc9p45EjKXZBKr4E" ], "script": "base64:BgIeCAISAwoBCBIDCgEIEgMKAQgSBQoDCAgBEgQKAggBAgEPY2hlY2tfd2hpdGVsaXN0AQZjYWxsZXIDCQAAAgUEdGhpcwUGY2FsbGVyBgQHJG1hdGNoMAkAoAgBCQCsAgICAldfCQDYBAEIBQZjYWxsZXIFYnl0ZXMDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBeAUHJG1hdGNoMAUBeAcBCmNsYWltX2ZvbGQCBWFjY3VtBWluZGV4BAkkdDAzNjU0MDkFBWFjY3VtBARsaXN0CAUJJHQwMzY1NDA5Al8xBAZhbW91bnQIBQkkdDAzNjU0MDkCXzIEB2FpcmRyb3AIBQkkdDAzNjU0MDkCXzMEB2NsYWltZXIIBQkkdDAzNjU0MDkCXzQDCQBnAgAABQZhbW91bnQJAJYKBAUEbGlzdAAABQdhaXJkcm9wBQdjbGFpbWVyBAlhc3NldF9rZXkJAKwCAgkArAICBQdhaXJkcm9wAgNfWF8JANgEAQkAmgMBBQVpbmRleAQIYXNzZXRfaWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUJYXNzZXRfa2V5CQCWCgQJAM4IAgUEbGlzdAkAzAgCCQELRGVsZXRlRW50cnkBBQlhc3NldF9rZXkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUHY2xhaW1lcgABBQhhc3NldF9pZAUDbmlsCQBlAgUGYW1vdW50AAEFB2FpcmRyb3AFB2NsYWltZXIFAWkBDXdoaXRlbGlzdF9hZGQBBHVzZXIDCQECIT0CBQR0aGlzCAUBaQZjYWxsZXIJAAIBAhhDYWxsZXIgaXMgbm90IGRBcHAgb3duZXIJAJQKAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICAgJXXwUEdXNlcgYFA25pbAUEdW5pdAFpARB3aGl0ZWxpc3RfcmVtb3ZlAQR1c2VyAwkBAiE9AgUEdGhpcwgFAWkGY2FsbGVyCQACAQIYQ2FsbGVyIGlzIG5vdCBkQXBwIG93bmVyCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICAgJXXwUEdXNlcgUDbmlsBQR1bml0AWkBCXB1dF9hc3NldAEHYWlyZHJvcAMJAQEhAQkBD2NoZWNrX3doaXRlbGlzdAEIBQFpBmNhbGxlcgkAAgECF0NhbGxlciBub3QgaW4gd2hpdGVsaXN0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISV3JvbmcgcGF5bWVudCBzaXplAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQAAQkAAgECFFdyb25nIHBheW1lbnQgYW1vdW50BANrZXkJAKwCAgUHYWlyZHJvcAIEX2VuZAQDZW5kBAckbWF0Y2gwCQCfCAEFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWoFByRtYXRjaDAFAWoAAAQCaWQJANgEAQkBBXZhbHVlAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQkAZAIFA2VuZAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQdhaXJkcm9wAgNfWF8JANgEAQkAmgMBBQNlbmQFAmlkBQNuaWwFBHVuaXQBaQEFYWxsb3cDB2FpcmRyb3AHYWNjb3VudAZhbW91bnQDCQEBIQEJAQ9jaGVja193aGl0ZWxpc3QBCAUBaQZjYWxsZXIJAAIBAhdDYWxsZXIgbm90IGluIHdoaXRlbGlzdAMJAGcCAAAFBmFtb3VudAkAAgECDFdyb25nIGFtb3VudAQDa2V5CQCsAgIJAKwCAgUHYWlyZHJvcAIDX0FfBQdhY2NvdW50BAdhbGxvd2VkBAckbWF0Y2gwCQCfCAEFA2tleQMJAAECBQckbWF0Y2gwAgNJbnQEAWoFByRtYXRjaDAFAWoAAAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkJAGQCBQdhbGxvd2VkBQZhbW91bnQFA25pbAUEdW5pdAFpAQVjbGFpbQIHYWlyZHJvcAZhbW91bnQECWtfYWxsb3dlZAkArAICCQCsAgIFB2FpcmRyb3ACA19BXwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAdhbGxvd2VkCQERQGV4dHJOYXRpdmUoMTA1NSkBBQlrX2FsbG93ZWQDCQBmAgUGYW1vdW50BQdhbGxvd2VkCQACAQIbQ2FsbGVyIG5vdCBhbGxvd2VkIHRvIGNsYWltBAdrX2JlZ2luCQCsAgIFB2FpcmRyb3ACBl9iZWdpbgQFa19lbmQJAKwCAgUHYWlyZHJvcAIEX2VuZAQFYmVnaW4EByRtYXRjaDAJAJ8IAQUHa19iZWdpbgMJAAECBQckbWF0Y2gwAgNJbnQEAWoFByRtYXRjaDAFAWoAAAQDZW5kBAckbWF0Y2gwCQCfCAEFBWtfZW5kAwkAAQIFByRtYXRjaDACA0ludAQBagUHJG1hdGNoMAUBagAAAwMJAGcCAAAFBmFtb3VudAYJAGYCBQZhbW91bnQAFAkAAgECKVdyb25nIGFtb3VudCAoc2hvdWxkIGJlIGluIHJhbmdlIDEgLS0gMjApAwkAZgIFBmFtb3VudAkAZQIFA2VuZAUFYmVnaW4JAAIBAhJObyBhc3NldHMgaW4gc3RvY2sEB2luZGljZXMJAMwIAgUFYmVnaW4JAMwIAgkAZAIFBWJlZ2luAAEJAMwIAgkAZAIFBWJlZ2luAAIJAMwIAgkAZAIFBWJlZ2luAAMJAMwIAgkAZAIFBWJlZ2luAAQJAMwIAgkAZAIFBWJlZ2luAAUJAMwIAgkAZAIFBWJlZ2luAAYJAMwIAgkAZAIFBWJlZ2luAAcJAMwIAgkAZAIFBWJlZ2luAAgJAMwIAgkAZAIFBWJlZ2luAAkJAMwIAgkAZAIFBWJlZ2luAAoJAMwIAgkAZAIFBWJlZ2luAAsJAMwIAgkAZAIFBWJlZ2luAAwJAMwIAgkAZAIFBWJlZ2luAA0JAMwIAgkAZAIFBWJlZ2luAA4JAMwIAgkAZAIFBWJlZ2luAA8JAMwIAgkAZAIFBWJlZ2luABAJAMwIAgkAZAIFBWJlZ2luABEJAMwIAgkAZAIFBWJlZ2luABIJAMwIAgkAZAIFBWJlZ2luABMFA25pbAQLJHQwMzI1ODM0MTEKAAIkbAUHaW5kaWNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAUDbmlsBQZhbW91bnQFB2FpcmRyb3AJAQdBZGRyZXNzAQgIBQFpBmNhbGxlcgVieXRlcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2xhaW1fZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBARsaXN0CAULJHQwMzI1ODM0MTECXzEEB2Ftb3VudF8IBQskdDAzMjU4MzQxMQJfMgQIYWlyZHJvcF8IBQskdDAzMjU4MzQxMQJfMwQIY2xhaW1lcl8IBQskdDAzMjU4MzQxMQJfNAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtfYWxsb3dlZAkAZQIFB2FsbG93ZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUHa19iZWdpbgkAZAIFBWJlZ2luBQZhbW91bnQFA25pbAUEbGlzdAUEdW5pdACgVNj5", "height": 3373272, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: C4RVZH5Q2a1myQH3R5UTvwbHQTRZaM4Rg8br246edqC6 Full:
Old | New | Differences | |
---|---|---|---|
1 | - | # no script | |
1 | + | {-# STDLIB_VERSION 6 #-} | |
2 | + | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | + | {-# CONTENT_TYPE DAPP #-} | |
4 | + | func check_whitelist (caller) = if ((this == caller)) | |
5 | + | then true | |
6 | + | else match getBoolean(("W_" + toBase58String(caller.bytes))) { | |
7 | + | case x: Boolean => | |
8 | + | x | |
9 | + | case _ => | |
10 | + | false | |
11 | + | } | |
12 | + | ||
13 | + | ||
14 | + | func claim_fold (accum,index) = { | |
15 | + | let $t0365409 = accum | |
16 | + | let list = $t0365409._1 | |
17 | + | let amount = $t0365409._2 | |
18 | + | let airdrop = $t0365409._3 | |
19 | + | let claimer = $t0365409._4 | |
20 | + | if ((0 >= amount)) | |
21 | + | then $Tuple4(list, 0, airdrop, claimer) | |
22 | + | else { | |
23 | + | let asset_key = ((airdrop + "_X_") + toBase58String(toBytes(index))) | |
24 | + | let asset_id = fromBase58String(getStringValue(asset_key)) | |
25 | + | $Tuple4((list ++ [DeleteEntry(asset_key), ScriptTransfer(claimer, 1, asset_id)]), (amount - 1), airdrop, claimer) | |
26 | + | } | |
27 | + | } | |
28 | + | ||
29 | + | ||
30 | + | @Callable(i) | |
31 | + | func whitelist_add (user) = if ((this != i.caller)) | |
32 | + | then throw("Caller is not dApp owner") | |
33 | + | else $Tuple2([BooleanEntry(("W_" + user), true)], unit) | |
34 | + | ||
35 | + | ||
36 | + | ||
37 | + | @Callable(i) | |
38 | + | func whitelist_remove (user) = if ((this != i.caller)) | |
39 | + | then throw("Caller is not dApp owner") | |
40 | + | else $Tuple2([DeleteEntry(("W_" + user))], unit) | |
41 | + | ||
42 | + | ||
43 | + | ||
44 | + | @Callable(i) | |
45 | + | func put_asset (airdrop) = if (!(check_whitelist(i.caller))) | |
46 | + | then throw("Caller not in whitelist") | |
47 | + | else if ((size(i.payments) != 1)) | |
48 | + | then throw("Wrong payment size") | |
49 | + | else if ((i.payments[0].amount != 1)) | |
50 | + | then throw("Wrong payment amount") | |
51 | + | else { | |
52 | + | let key = (airdrop + "_end") | |
53 | + | let end = match getInteger(key) { | |
54 | + | case j: Int => | |
55 | + | j | |
56 | + | case _ => | |
57 | + | 0 | |
58 | + | } | |
59 | + | let id = toBase58String(value(i.payments[0].assetId)) | |
60 | + | $Tuple2([IntegerEntry(key, (end + 1)), StringEntry(((airdrop + "_X_") + toBase58String(toBytes(end))), id)], unit) | |
61 | + | } | |
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | @Callable(i) | |
66 | + | func allow (airdrop,account,amount) = if (!(check_whitelist(i.caller))) | |
67 | + | then throw("Caller not in whitelist") | |
68 | + | else if ((0 >= amount)) | |
69 | + | then throw("Wrong amount") | |
70 | + | else { | |
71 | + | let key = ((airdrop + "_A_") + account) | |
72 | + | let allowed = match getInteger(key) { | |
73 | + | case j: Int => | |
74 | + | j | |
75 | + | case _ => | |
76 | + | 0 | |
77 | + | } | |
78 | + | $Tuple2([IntegerEntry(key, (allowed + amount))], unit) | |
79 | + | } | |
80 | + | ||
81 | + | ||
82 | + | ||
83 | + | @Callable(i) | |
84 | + | func claim (airdrop,amount) = { | |
85 | + | let k_allowed = ((airdrop + "_A_") + toBase58String(i.caller.bytes)) | |
86 | + | let allowed = getIntegerValue(k_allowed) | |
87 | + | if ((amount > allowed)) | |
88 | + | then throw("Caller not allowed to claim") | |
89 | + | else { | |
90 | + | let k_begin = (airdrop + "_begin") | |
91 | + | let k_end = (airdrop + "_end") | |
92 | + | let begin = match getInteger(k_begin) { | |
93 | + | case j: Int => | |
94 | + | j | |
95 | + | case _ => | |
96 | + | 0 | |
97 | + | } | |
98 | + | let end = match getInteger(k_end) { | |
99 | + | case j: Int => | |
100 | + | j | |
101 | + | case _ => | |
102 | + | 0 | |
103 | + | } | |
104 | + | if (if ((0 >= amount)) | |
105 | + | then true | |
106 | + | else (amount > 20)) | |
107 | + | then throw("Wrong amount (should be in range 1 -- 20)") | |
108 | + | else if ((amount > (end - begin))) | |
109 | + | then throw("No assets in stock") | |
110 | + | else { | |
111 | + | let indices = [begin, (begin + 1), (begin + 2), (begin + 3), (begin + 4), (begin + 5), (begin + 6), (begin + 7), (begin + 8), (begin + 9), (begin + 10), (begin + 11), (begin + 12), (begin + 13), (begin + 14), (begin + 15), (begin + 16), (begin + 17), (begin + 18), (begin + 19)] | |
112 | + | let $t032583411 = { | |
113 | + | let $l = indices | |
114 | + | let $s = size($l) | |
115 | + | let $acc0 = $Tuple4(nil, amount, airdrop, Address(i.caller.bytes)) | |
116 | + | func $f0_1 ($a,$i) = if (($i >= $s)) | |
117 | + | then $a | |
118 | + | else claim_fold($a, $l[$i]) | |
119 | + | ||
120 | + | func $f0_2 ($a,$i) = if (($i >= $s)) | |
121 | + | then $a | |
122 | + | else throw("List size exceeds 20") | |
123 | + | ||
124 | + | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20) | |
125 | + | } | |
126 | + | let list = $t032583411._1 | |
127 | + | let amount_ = $t032583411._2 | |
128 | + | let airdrop_ = $t032583411._3 | |
129 | + | let claimer_ = $t032583411._4 | |
130 | + | $Tuple2(([IntegerEntry(k_allowed, (allowed - amount)), IntegerEntry(k_begin, (begin + amount))] ++ list), unit) | |
131 | + | } | |
132 | + | } | |
133 | + | } | |
134 | + | ||
135 | + |
github/deemru/w8io/3ef1775 20.18 ms ◑