tx · GKMWzcsZDL5awfmDMA6ZgbQUirL8weiuvgTFHMnGQ2v2

3P3NVrhiyHBc4oUWNhtZRnJA5uLX9n39TK9:  -0.01000000 Waves

2022.05.25 16:33 [3132763] smart account 3P3NVrhiyHBc4oUWNhtZRnJA5uLX9n39TK9 > SELF 0.00000000 Waves

{ "type": 13, "id": "GKMWzcsZDL5awfmDMA6ZgbQUirL8weiuvgTFHMnGQ2v2", "fee": 1000000, "feeAssetId": null, "timestamp": 1653485635001, "version": 1, "sender": "3P3NVrhiyHBc4oUWNhtZRnJA5uLX9n39TK9", "senderPublicKey": "GeY4VJBhADH72vNVpDy6WUGW2rM2e2TjfnK8d4Kxzz59", "proofs": [ "2jh1gNA5ZdVHnKbKzgdfaojKhqub7gYFGb7JxN3KTmfTUqCdUWyFZqfsJoraaCoJPL2qx5iRcFrFxCUQ7q2bJQg9" ], "script": "base64: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", "chainId": 87, "height": 3132763, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Fi2XMhCEj71FwSgZgcxDtfoEAN22eWWiRurpGDHvBukj Next: FcGnZMLzf85ueyh6gMKVYNLiyzFY9kAKdDKEauwSnoWc Diff:
OldNewDifferences
127127 }
128128
129129
130+let limiter = match getString(configAddress, "limiter") {
131+ case d: String =>
132+ addressFromStringValue(d)
133+ case _ =>
134+ unit
135+}
136+
137+func ensureLimit (action,rsr,user,amount) = match limiter {
138+ case l: Address =>
139+ asInt(invoke(l, "validateLimit", [action, toString(rsr), user, amount], nil))
140+ case _ =>
141+ true
142+}
143+
144+
130145 @Callable(i)
131146 func initialize (ca) = [writeConstString(configStore, ca)]
132147
212227 let amt = asInt(invoke(rsr, "redeemAtokensFor", [user], [AttachedPayment(fromBase58String(aTokenId), wd)]))
213228 if ((amt == amt))
214229 then {
215- let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
216- if ((pRw == pRw))
217- then $Tuple2(nil, wd)
230+ let e = ensureLimit("withdraw", rsr, user, amt)
231+ if ((e == e))
232+ then {
233+ let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
234+ if ((pRw == pRw))
235+ then $Tuple2(nil, wd)
236+ else throw("Strict value is not equal to itself.")
237+ }
218238 else throw("Strict value is not equal to itself.")
219239 }
220240 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
55 then StringEntry(key, value)
66 else throw(("already initialized: " + key))
77
88
99 func asInt (value) = match value {
1010 case int: Int =>
1111 int
1212 case _ =>
1313 throw("1")
1414 }
1515
1616
1717 let configStore = "config"
1818
1919 let configAddress = addressFromStringValue(getStringValue(this, configStore))
2020
2121 let locker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "lp_locker"), "no lp_locker address in config")), "bad lp_locker address in config")
2222
2323 let reservesStr = valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no rewardable_reserves registered")
2424
2525 let reserves = split(reservesStr, "|")
2626
2727 let mVD = match getString(configAddress, "vires_distributor") {
2828 case d: String =>
2929 addressFromStringValue(d)
3030 case _ =>
3131 unit
3232 }
3333
3434 let VD = valueOrErrorMessage(mVD, "no distr")
3535
3636 let dC = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "dividends_contract"), "no dividends_contract")), "bad div")
3737
3838 let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_minter"), "main: no viresMinter")), "bad minter")
3939
4040 let maybeViresAssetId = getString(viresMinter, "assetId")
4141
4242 let viresAssetId = valueOrErrorMessage(fromBase58String(valueOrErrorMessage(maybeViresAssetId, "no vires id")), "invalid vires id")
4343
4444 func reserveBy (store,value) = {
4545 func fold (a,r) = match a {
4646 case found: Address =>
4747 found
4848 case _ =>
4949 let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
5050 if ((valueOrErrorMessage(getString(rsr, store), ("rsr has no " + store)) == value))
5151 then rsr
5252 else unit
5353 }
5454
5555 match let $l = reserves
5656 let $s = size($l)
5757 let $acc0 = unit
5858 func $f0_1 ($a,$i) = if (($i >= $s))
5959 then $a
6060 else fold($a, $l[$i])
6161
6262 func $f0_2 ($a,$i) = if (($i >= $s))
6363 then $a
6464 else throw("List size exceeds 7")
6565
6666 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7) {
6767 case found: Address =>
6868 found
6969 case _ =>
7070 throw(("unknown " + store))
7171 }
7272 }
7373
7474
7575 func vlR (r) = if (contains(reservesStr, r))
7676 then valueOrErrorMessage(addressFromString(r), "main: bad rsr")
7777 else throw(("unknown rsr:" + r))
7878
7979
8080 let maybeProtected = match getString(configAddress, "protected_reserve") {
8181 case pds: String =>
8282 valueOrErrorMessage(addressFromString(pds), "bad protected")
8383 case _ =>
8484 unit
8585 }
8686
8787 let protectedReserve = valueOrErrorMessage(maybeProtected, "no protected rsr")
8888
8989 func ensureNoProtected (user) = {
9090 let has = match maybeProtected {
9191 case pa: Address =>
9292 valueOrElse(getBoolean(pa, ("protected_collateral_" + user)), false)
9393 case _ =>
9494 false
9595 }
9696 if (has)
9797 then throw("disallowed")
9898 else unit
9999 }
100100
101101
102102 let aTIdS = "aTokenId"
103103
104104 func lockOrPayout (recipient,amt,lock) = if (!(lock))
105105 then [ScriptTransfer(recipient, amt, viresAssetId)]
106106 else {
107107 let doLock = invoke(dC, "lockFor", [toString(recipient), 1], [AttachedPayment(viresAssetId, amt)])
108108 if ((doLock == doLock))
109109 then nil
110110 else throw("Strict value is not equal to itself.")
111111 }
112112
113113
114114 func sR (rsr) = match mVD {
115115 case a: Address =>
116116 invoke(a, "syncHeight", [rsr], nil)
117117 case _ =>
118118 unit
119119 }
120120
121121
122122 func uS (rsr,action,user,userChange,streamChange) = match mVD {
123123 case a: Address =>
124124 invoke(a, "onAction", [rsr, action, user, userChange, streamChange], nil)
125125 case _ =>
126126 unit
127127 }
128128
129129
130+let limiter = match getString(configAddress, "limiter") {
131+ case d: String =>
132+ addressFromStringValue(d)
133+ case _ =>
134+ unit
135+}
136+
137+func ensureLimit (action,rsr,user,amount) = match limiter {
138+ case l: Address =>
139+ asInt(invoke(l, "validateLimit", [action, toString(rsr), user, amount], nil))
140+ case _ =>
141+ true
142+}
143+
144+
130145 @Callable(i)
131146 func initialize (ca) = [writeConstString(configStore, ca)]
132147
133148
134149
135150 @Callable(i)
136151 func withdrawUnlockedLPTokens (aTokenId) = {
137152 let user = toString(i.caller)
138153 let checks = reserveBy(aTIdS, aTokenId)
139154 if ((checks == checks))
140155 then {
141156 let c = invoke(locker, "cleanUpDistributionFor", [user, aTokenId], nil)
142157 if ((c == c))
143158 then {
144159 let wd = asInt(invoke(locker, "withdraw", [user, aTokenId, user], nil))
145160 if ((wd == wd))
146161 then $Tuple2(nil, wd)
147162 else throw("Strict value is not equal to itself.")
148163 }
149164 else throw("Strict value is not equal to itself.")
150165 }
151166 else throw("Strict value is not equal to itself.")
152167 }
153168
154169
155170
156171 @Callable(i)
157172 func supplyUnlockedLPTokens (aTokenId) = {
158173 let user = toString(i.caller)
159174 let rsr = reserveBy(aTIdS, aTokenId)
160175 if ((rsr == rsr))
161176 then {
162177 let c = invoke(locker, "cleanUpDistributionFor", [user, aTokenId], nil)
163178 if ((c == c))
164179 then {
165180 let wd = asInt(invoke(locker, "withdraw", [user, aTokenId, toString(this)], nil))
166181 if ((wd == wd))
167182 then {
168183 let checks = ensureNoProtected(user)
169184 if ((checks == checks))
170185 then {
171186 let sh = sR(toString(rsr))
172187 if ((sh == sh))
173188 then {
174189 let replenishAmt = asInt(invoke(rsr, "replenishWithAtokenFor", [user], [AttachedPayment(fromBase58String(aTokenId), wd)]))
175190 if ((replenishAmt == replenishAmt))
176191 then {
177192 let pRw = uS(toString(rsr), "deposit", user, replenishAmt, 0)
178193 if ((pRw == pRw))
179194 then $Tuple2(nil, wd)
180195 else throw("Strict value is not equal to itself.")
181196 }
182197 else throw("Strict value is not equal to itself.")
183198 }
184199 else throw("Strict value is not equal to itself.")
185200 }
186201 else throw("Strict value is not equal to itself.")
187202 }
188203 else throw("Strict value is not equal to itself.")
189204 }
190205 else throw("Strict value is not equal to itself.")
191206 }
192207 else throw("Strict value is not equal to itself.")
193208 }
194209
195210
196211
197212 @Callable(i)
198213 func redeemUnlockedLPTokens (aTokenId) = {
199214 let user = toString(i.caller)
200215 let rsr = reserveBy(aTIdS, aTokenId)
201216 if ((rsr == rsr))
202217 then {
203218 let c = invoke(locker, "cleanUpDistributionFor", [user, aTokenId], nil)
204219 if ((c == c))
205220 then {
206221 let wd = asInt(invoke(locker, "withdraw", [user, aTokenId, toString(this)], nil))
207222 if ((wd == wd))
208223 then {
209224 let sh = sR(toString(rsr))
210225 if ((sh == sh))
211226 then {
212227 let amt = asInt(invoke(rsr, "redeemAtokensFor", [user], [AttachedPayment(fromBase58String(aTokenId), wd)]))
213228 if ((amt == amt))
214229 then {
215- let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
216- if ((pRw == pRw))
217- then $Tuple2(nil, wd)
230+ let e = ensureLimit("withdraw", rsr, user, amt)
231+ if ((e == e))
232+ then {
233+ let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
234+ if ((pRw == pRw))
235+ then $Tuple2(nil, wd)
236+ else throw("Strict value is not equal to itself.")
237+ }
218238 else throw("Strict value is not equal to itself.")
219239 }
220240 else throw("Strict value is not equal to itself.")
221241 }
222242 else throw("Strict value is not equal to itself.")
223243 }
224244 else throw("Strict value is not equal to itself.")
225245 }
226246 else throw("Strict value is not equal to itself.")
227247 }
228248 else throw("Strict value is not equal to itself.")
229249 }
230250
231251
232252
233253 @Callable(i)
234254 func claimLpReward (rsr,amt,lock) = {
235255 let v = vlR(rsr)
236256 if ((v == v))
237257 then {
238258 let aTokenId = valueOrErrorMessage(getString(v, aTIdS), "no aTokenId in reserve")
239259 let user = toString(i.caller)
240260 let c = asInt(invoke(locker, "claimLpRewardFor", [user, aTokenId, amt], nil))
241261 if ((c == c))
242262 then lockOrPayout(i.caller, c, lock)
243263 else throw("Strict value is not equal to itself.")
244264 }
245265 else throw("Strict value is not equal to itself.")
246266 }
247267
248268

github/deemru/w8io/6500d08 
50.70 ms