tx · BfZaSV3ihCm5cYVrzJb8vcqyseWNPsak1BF6zTV7Vii2

3PRAEZqBjrUDaDvv45HGWPb94DhD6UuZfWg:  -0.00500000 Waves

2023.09.19 10:20 [3827738] smart account 3PRAEZqBjrUDaDvv45HGWPb94DhD6UuZfWg > SELF 0.00000000 Waves

{ "type": 13, "id": "BfZaSV3ihCm5cYVrzJb8vcqyseWNPsak1BF6zTV7Vii2", "fee": 500000, "feeAssetId": null, "timestamp": 1695108026841, "version": 1, "sender": "3PRAEZqBjrUDaDvv45HGWPb94DhD6UuZfWg", "senderPublicKey": "DWfBoSph5SQ9fuKvBjSecymWnfmRnBFh9FYg2QEV6bwS", "proofs": [ "3LWXXDnJufjDvr1yWDgJTbHvfDQmLrxYHpHfrQ32XfdYqZdcF4Ye5NXeYNaDR7oxhU9u9aDQe4dVmkKJncWLuaWh" ], "script": "base64:BgIWCAISBAoCCAESBQoDCAEBEgMKAQgSAA8AEmNvbmZpZ0FkZHJlc3NTdG9yZQIGY29uZmlnAA1jb25maWdBZGRyZXNzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFEmNvbmZpZ0FkZHJlc3NTdG9yZQIfY2hpbGQ6IGNvbmZpZyBhZGRyZXNzIG5vdCBmb3VuZAIWaW52YWxpZCBjb25maWcgYWRkcmVzcwAGSEVJR0hUBQZoZWlnaHQBDm9wQWxsb3dlZFN0b3JlAQJvcAkArAICCQCsAgICA29wXwUCb3ACCF9hbGxvd2VkAA12b3RpbmdSZXN1bHRzCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDWNvbmZpZ0FkZHJlc3MCFmNvbnRyYWN0X3ZvdGluZ19yZXN1bHQCGW5vIGNvbnRyYWN0X3ZvdGluZ19yZXN1bHQCHmludmFsaWQgY29udHJhY3Rfdm90aW5nX3Jlc3VsdAEVd2F2ZWxldHNQZXJCbG9ja1N0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCE193YXZlbGV0c19wZXJfYmxvY2sBEHN0YXJ0SGVpZ2h0U3RvcmUBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwINX3N0YXJ0X2hlaWdodAEMY2xhaW1lZFN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEHdhdmVsZXRzX2NsYWltZWQBEW1heENsYWltYWJsZVN0b3JlAQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCF193YXZlbGV0c19tYXhfY2xhaW1hYmxlAAhzdW1TdG9yZQIWd2F2ZWxldHNfcGVyX2Jsb2NrX3N1bQAIbWF4U3RvcmUCFndhdmVsZXRzX3Blcl9ibG9ja19tYXgAB21heGltdW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIWd2F2ZWxldHNfcGVyX2Jsb2NrX21heACw0MlaAAZvbGRTdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIc3VtU3RvcmUAAAEMYXZhaWxhYmxlTm93AQJ0bwQNcGVyQmxvY2tTdG9yZQkBFXdhdmVsZXRzUGVyQmxvY2tTdG9yZQEFAnRvBAhwZXJCbG9jawkAnwgBBQ1wZXJCbG9ja1N0b3JlBAV0b3RhbAMJAQEhAQkBCWlzRGVmaW5lZAEFCHBlckJsb2NrAAAECmZpcnN0QmxvY2sJAQV2YWx1ZQEJAJ8IAQkBEHN0YXJ0SGVpZ2h0U3RvcmUBBQJ0bwQGYmxvY2tzCQBlAgUGaGVpZ2h0BQpmaXJzdEJsb2NrCQBoAgkBBXZhbHVlAQUIcGVyQmxvY2sFBmJsb2NrcwQFZ3JhbnQJAJcDAQkAzAgCBQV0b3RhbAkAzAgCCQELdmFsdWVPckVsc2UCCQCfCAEJARFtYXhDbGFpbWFibGVTdG9yZQEFAnRvBQV0b3RhbAUDbmlsBAdjbGFpbWVkCQELdmFsdWVPckVsc2UCCQCfCAEJAQxjbGFpbWVkU3RvcmUBBQJ0bwAABAZyZXN1bHQJAGUCBQVncmFudAUHY2xhaW1lZAMJAGYCAAAFBnJlc3VsdAkAAgECFW5lZ2F0aXZlIGF2YWlsYWJsZU5vdwUGcmVzdWx0ARNzZXRTY2hlZHVsZUludGVybmFsBAJ0bxB3YXZlbGV0c1BlckJsb2NrDG1heENsYWltYWJsZQNzdW0DCQBmAgAABRB3YXZlbGV0c1BlckJsb2NrCQACAQIfd2F2ZWxldHNQZXJCbG9jayBzaG91bGQgYmUgPj0gMAQNcGVyQmxvY2tTdG9yZQkBFXdhdmVsZXRzUGVyQmxvY2tTdG9yZQEFAnRvBAtvbGRQZXJCbG9jawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1wZXJCbG9ja1N0b3JlAAAEBm5ld1N1bQkAZAIJAGUCBQNzdW0FC29sZFBlckJsb2NrBRB3YXZlbGV0c1BlckJsb2NrBAxoZWlnaHRTdG9yZTEJARBzdGFydEhlaWdodFN0b3JlAQUCdG8EB2NsYWltZWQJAQxjbGFpbWVkU3RvcmUBBQJ0bwMJAGYCBQZuZXdTdW0FB21heGltdW0JAAIBAhBtYXhpbXVtIGV4Y2VlZGVkBBJtYXhDbGFpbWFibGVTdG9yZTEJARFtYXhDbGFpbWFibGVTdG9yZQEFAnRvBBFtYXhDbGFpbWFibGVFbnRyeQMJAAACBQxtYXhDbGFpbWFibGUAAAUDbmlsAwkAAAIFDG1heENsYWltYWJsZQD///////////8BCQDMCAIJAQtEZWxldGVFbnRyeQEFEm1heENsYWltYWJsZVN0b3JlMQUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJtYXhDbGFpbWFibGVTdG9yZTEFDG1heENsYWltYWJsZQUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNcGVyQmxvY2tTdG9yZQUQd2F2ZWxldHNQZXJCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgUMaGVpZ2h0U3RvcmUxBQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIFB2NsYWltZWQJAQEtAQkBDGF2YWlsYWJsZU5vdwEFAnRvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhzdW1TdG9yZQUGbmV3U3VtBQNuaWwFEW1heENsYWltYWJsZUVudHJ5BQZuZXdTdW0EAWkBCnNldFNjZWR1bGUCAnRvEHdhdmVsZXRzUGVyQmxvY2sDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgZkZW5pZWQJARNzZXRTY2hlZHVsZUludGVybmFsBAUCdG8FEHdhdmVsZXRzUGVyQmxvY2sAAAUGb2xkU3VtAWkBC3NldFNjaGVkdWxlAwJ0bxB3YXZlbGV0c1BlckJsb2NrDG1heENsYWltYWJsZQMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECBmRlbmllZAkBE3NldFNjaGVkdWxlSW50ZXJuYWwEBQJ0bwUQd2F2ZWxldHNQZXJCbG9jawUMbWF4Q2xhaW1hYmxlBQZvbGRTdW0BaQEQc2V0TXVsdGlTY2hlZHVsZQEJc2NoZWR1bGVzAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIGZGVuaWVkCgEEZm9sZAIDYWNjCHNjaGVkdWxlAwkAAAIFCHNjaGVkdWxlAgAJAAIBAhFpbnZhbGlkIHNjaGVkdWxlcwQFcGFydHMJALUJAgUIc2NoZWR1bGUCAT0DCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAippbnZhbGlkIGZvcm1hdDogYWRyPXdhdmVsZXRzUGVyQmxvY2tbLG1heF0EAnRvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQVwYXJ0cwAACQCsAgICEWludmFsaWQgYWRkcmVzczogCQCRAwIFBXBhcnRzAAAEDWJsb2NrTWF4UGFydHMJALUJAgkAkQMCBQVwYXJ0cwABAgEsBAh3YXZlbGV0cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUNYmxvY2tNYXhQYXJ0cwAACQCsAgICGWludmFsaWQgd2F2ZXRldHMgbnVtYmVyOiAJAJEDAgUNYmxvY2tNYXhQYXJ0cwAABAxtYXhDbGFpbWFibGUDCQAAAgkAkAMBBQ1ibG9ja01heFBhcnRzAAIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFDWJsb2NrTWF4UGFydHMAAQkArAICAhRpbnZhbGlkIG1heCBudW1iZXI6IAkAkQMCBQ1ibG9ja01heFBhcnRzAAEAAAQLJHQwNDAzMTQwNjMFA2FjYwQEY21kcwgFCyR0MDQwMzE0MDYzAl8xBANzdW0IBQskdDA0MDMxNDA2MwJfMgQJYWRkcmVzc2VzCAULJHQwNDAzMTQwNjMCXzMEBXRvU3RyCQClCAEFAnRvAwkBCWlzRGVmaW5lZAEJAM8IAgUJYWRkcmVzc2VzBQV0b1N0cgkAAgEJAKwCAgILZHVibGljYXRlOiAFBXRvU3RyBAskdDA0MTk0NDI3MwkBE3NldFNjaGVkdWxlSW50ZXJuYWwEBQV0b1N0cgUId2F2ZWxldHMFDG1heENsYWltYWJsZQUDc3VtBAduZXdDbWRzCAULJHQwNDE5NDQyNzMCXzEEBm5ld1N1bQgFCyR0MDQxOTQ0MjczAl8yCQCVCgMJAM4IAgUEY21kcwUHbmV3Q21kcwUGbmV3U3VtCQDOCAIFCWFkZHJlc3NlcwkAzAgCBQV0b1N0cgUDbmlsBAskdDA0MzQxNDQxNwoAAiRsCQC1CQIFCXNjaGVkdWxlcwIBfAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQZvbGRTdW0FA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBARjbWRzCAULJHQwNDM0MTQ0MTcCXzEEA3N1bQgFCyR0MDQzNDE0NDE3Al8yBAJ4XwgFCyR0MDQzNDE0NDE3Al8zCQCUCgIFBGNtZHMFA3N1bQFpAQVDbGFpbQAEBXRvQWRyCAUBaQZjYWxsZXIEAnRvCQClCAEFBXRvQWRyBAFhCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQkBFXdhdmVsZXRzUGVyQmxvY2tTdG9yZQEFAnRvAhFhZGRyZXNzIG5vdCBmb3VuZAMJAAACBQFhBQFhBA1jbGFpbWVkU3RvcmUxCQEMY2xhaW1lZFN0b3JlAQUCdG8EB2NsYWltZWQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNY2xhaW1lZFN0b3JlMQAABAZhbW91bnQJAQxhdmFpbGFibGVOb3cBBQJ0bwQHcGF5bWVudAkAlwMBCQDMCAIICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFB3BheW1lbnQAAAkAAgECEG5vdGhpbmcgdG8gY2xhaW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUFdG9BZHIFB3BheW1lbnQFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFDWNsYWltZWRTdG9yZTEJAGQCBQdjbGFpbWVkBQdwYXltZW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AxQ31rw==", "chainId": 87, "height": 3827738, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: HsiWcTrammu6zv4bhqWu93fUje9qsiveb3jULbsBZUpE Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let configAddressStore = "config"
5+
6+let configAddress = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, configAddressStore), "child: config address not found")), "invalid config address")
7+
8+let HEIGHT = height
9+
10+func opAllowedStore (op) = (("op_" + op) + "_allowed")
11+
12+
13+let votingResults = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "contract_voting_result"), "no contract_voting_result")), "invalid contract_voting_result")
14+
15+func waveletsPerBlockStore (address) = (address + "_wavelets_per_block")
16+
17+
18+func startHeightStore (address) = (address + "_start_height")
19+
20+
21+func claimedStore (address) = (address + "wavelets_claimed")
22+
23+
24+func maxClaimableStore (address) = (address + "_wavelets_max_claimable")
25+
26+
27+let sumStore = "wavelets_per_block_sum"
28+
29+let maxStore = "wavelets_per_block_max"
30+
31+let maximum = valueOrElse(getInteger(this, "wavelets_per_block_max"), 189950000)
32+
33+let oldSum = valueOrElse(getInteger(sumStore), 0)
34+
35+func availableNow (to) = {
36+ let perBlockStore = waveletsPerBlockStore(to)
37+ let perBlock = getInteger(perBlockStore)
38+ let total = if (!(isDefined(perBlock)))
39+ then 0
40+ else {
41+ let firstBlock = value(getInteger(startHeightStore(to)))
42+ let blocks = (height - firstBlock)
43+ (value(perBlock) * blocks)
44+ }
45+ let grant = min([total, valueOrElse(getInteger(maxClaimableStore(to)), total)])
46+ let claimed = valueOrElse(getInteger(claimedStore(to)), 0)
47+ let result = (grant - claimed)
48+ if ((0 > result))
49+ then throw("negative availableNow")
50+ else result
51+ }
52+
53+
54+func setScheduleInternal (to,waveletsPerBlock,maxClaimable,sum) = if ((0 > waveletsPerBlock))
55+ then throw("waveletsPerBlock should be >= 0")
56+ else {
57+ let perBlockStore = waveletsPerBlockStore(to)
58+ let oldPerBlock = valueOrElse(getInteger(perBlockStore), 0)
59+ let newSum = ((sum - oldPerBlock) + waveletsPerBlock)
60+ let heightStore1 = startHeightStore(to)
61+ let claimed = claimedStore(to)
62+ if ((newSum > maximum))
63+ then throw("maximum exceeded")
64+ else {
65+ let maxClaimableStore1 = maxClaimableStore(to)
66+ let maxClaimableEntry = if ((maxClaimable == 0))
67+ then nil
68+ else if ((maxClaimable == -1))
69+ then [DeleteEntry(maxClaimableStore1)]
70+ else [IntegerEntry(maxClaimableStore1, maxClaimable)]
71+ $Tuple2(([IntegerEntry(perBlockStore, waveletsPerBlock), IntegerEntry(heightStore1, height), IntegerEntry(claimed, -(availableNow(to))), IntegerEntry(sumStore, newSum)] ++ maxClaimableEntry), newSum)
72+ }
73+ }
74+
75+
76+@Callable(i)
77+func setScedule (to,waveletsPerBlock) = if ((i.caller != this))
78+ then throw("denied")
79+ else setScheduleInternal(to, waveletsPerBlock, 0, oldSum)
80+
81+
82+
83+@Callable(i)
84+func setSchedule (to,waveletsPerBlock,maxClaimable) = if ((i.caller != this))
85+ then throw("denied")
86+ else setScheduleInternal(to, waveletsPerBlock, maxClaimable, oldSum)
87+
88+
89+
90+@Callable(i)
91+func setMultiSchedule (schedules) = if ((i.caller != this))
92+ then throw("denied")
93+ else {
94+ func fold (acc,schedule) = if ((schedule == ""))
95+ then throw("invalid schedules")
96+ else {
97+ let parts = split(schedule, "=")
98+ if ((size(parts) != 2))
99+ then throw("invalid format: adr=waveletsPerBlock[,max]")
100+ else {
101+ let to = valueOrErrorMessage(addressFromString(parts[0]), ("invalid address: " + parts[0]))
102+ let blockMaxParts = split(parts[1], ",")
103+ let wavelets = valueOrErrorMessage(parseInt(blockMaxParts[0]), ("invalid wavetets number: " + blockMaxParts[0]))
104+ let maxClaimable = if ((size(blockMaxParts) == 2))
105+ then valueOrErrorMessage(parseInt(blockMaxParts[1]), ("invalid max number: " + blockMaxParts[1]))
106+ else 0
107+ let $t040314063 = acc
108+ let cmds = $t040314063._1
109+ let sum = $t040314063._2
110+ let addresses = $t040314063._3
111+ let toStr = toString(to)
112+ if (isDefined(indexOf(addresses, toStr)))
113+ then throw(("dublicate: " + toStr))
114+ else {
115+ let $t041944273 = setScheduleInternal(toStr, wavelets, maxClaimable, sum)
116+ let newCmds = $t041944273._1
117+ let newSum = $t041944273._2
118+ $Tuple3((cmds ++ newCmds), newSum, (addresses ++ [toStr]))
119+ }
120+ }
121+ }
122+
123+ let $t043414417 = {
124+ let $l = split(schedules, "|")
125+ let $s = size($l)
126+ let $acc0 = $Tuple3(nil, oldSum, nil)
127+ func $f0_1 ($a,$i) = if (($i >= $s))
128+ then $a
129+ else fold($a, $l[$i])
130+
131+ func $f0_2 ($a,$i) = if (($i >= $s))
132+ then $a
133+ else throw("List size exceeds 20")
134+
135+ $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)
136+ }
137+ let cmds = $t043414417._1
138+ let sum = $t043414417._2
139+ let x_ = $t043414417._3
140+ $Tuple2(cmds, sum)
141+ }
142+
143+
144+
145+@Callable(i)
146+func Claim () = {
147+ let toAdr = i.caller
148+ let to = toString(toAdr)
149+ let a = valueOrErrorMessage(getInteger(waveletsPerBlockStore(to)), "address not found")
150+ if ((a == a))
151+ then {
152+ let claimedStore1 = claimedStore(to)
153+ let claimed = valueOrElse(getInteger(claimedStore1), 0)
154+ let amount = availableNow(to)
155+ let payment = min([wavesBalance(this).available, amount])
156+ if ((payment == 0))
157+ then throw("nothing to claim")
158+ else [ScriptTransfer(toAdr, payment, unit), IntegerEntry(claimedStore1, (claimed + payment))]
159+ }
160+ else throw("Strict value is not equal to itself.")
161+ }
162+
163+

github/deemru/w8io/6500d08 
29.39 ms