2022.05.20 18:35 [3125649] smart account 3P3NVrhiyHBc4oUWNhtZRnJA5uLX9n39TK9 > SELF 0.00000000 Waves

{ "type": 13, "id": "Fi2XMhCEj71FwSgZgcxDtfoEAN22eWWiRurpGDHvBukj", "fee": 1000000, "feeAssetId": null, "timestamp": 1653060833715, "version": 1, "sender": "3P3NVrhiyHBc4oUWNhtZRnJA5uLX9n39TK9", "senderPublicKey": "GeY4VJBhADH72vNVpDy6WUGW2rM2e2TjfnK8d4Kxzz59", "proofs": [ "4fWEwH7M528hSkxfz3h4iS6AypPYhpmXDKSgLd6g9E4osDuLqyRepXRqSnR959EbuTubqB1KaMLXu8ME2CDJG73D" ], "script": "base64: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", "chainId": 87, "height": 3125649, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: GKMWzcsZDL5awfmDMA6ZgbQUirL8weiuvgTFHMnGQ2v2 Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 5 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+func writeConstString (key,value) = if (!(isDefined(getString(this, key))))
5+ then StringEntry(key, value)
6+ else throw(("already initialized: " + key))
7+
8+
9+func asInt (value) = match value {
10+ case int: Int =>
11+ int
12+ case _ =>
13+ throw("1")
14+}
15+
16+
17+let configStore = "config"
18+
19+let configAddress = addressFromStringValue(getStringValue(this, configStore))
20+
21+let locker = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "lp_locker"), "no lp_locker address in config")), "bad lp_locker address in config")
22+
23+let reservesStr = valueOrErrorMessage(getString(configAddress, "rewardable_reserves"), "no rewardable_reserves registered")
24+
25+let reserves = split(reservesStr, "|")
26+
27+let mVD = match getString(configAddress, "vires_distributor") {
28+ case d: String =>
29+ addressFromStringValue(d)
30+ case _ =>
31+ unit
32+}
33+
34+let VD = valueOrErrorMessage(mVD, "no distr")
35+
36+let dC = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "dividends_contract"), "no dividends_contract")), "bad div")
37+
38+let viresMinter = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(configAddress, "vires_minter"), "main: no viresMinter")), "bad minter")
39+
40+let maybeViresAssetId = getString(viresMinter, "assetId")
41+
42+let viresAssetId = valueOrErrorMessage(fromBase58String(valueOrErrorMessage(maybeViresAssetId, "no vires id")), "invalid vires id")
43+
44+func reserveBy (store,value) = {
45+ func fold (a,r) = match a {
46+ case found: Address =>
47+ found
48+ case _ =>
49+ let rsr = valueOrErrorMessage(addressFromString(r), "rsr bad address")
50+ if ((valueOrErrorMessage(getString(rsr, store), ("rsr has no " + store)) == value))
51+ then rsr
52+ else unit
53+ }
54+
55+ match let $l = reserves
56+ let $s = size($l)
57+ let $acc0 = unit
58+ func $f0_1 ($a,$i) = if (($i >= $s))
59+ then $a
60+ else fold($a, $l[$i])
61+
62+ func $f0_2 ($a,$i) = if (($i >= $s))
63+ then $a
64+ else throw("List size exceeds 7")
65+
66+ $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) {
67+ case found: Address =>
68+ found
69+ case _ =>
70+ throw(("unknown " + store))
71+ }
72+ }
73+
74+
75+func vlR (r) = if (contains(reservesStr, r))
76+ then valueOrErrorMessage(addressFromString(r), "main: bad rsr")
77+ else throw(("unknown rsr:" + r))
78+
79+
80+let maybeProtected = match getString(configAddress, "protected_reserve") {
81+ case pds: String =>
82+ valueOrErrorMessage(addressFromString(pds), "bad protected")
83+ case _ =>
84+ unit
85+}
86+
87+let protectedReserve = valueOrErrorMessage(maybeProtected, "no protected rsr")
88+
89+func ensureNoProtected (user) = {
90+ let has = match maybeProtected {
91+ case pa: Address =>
92+ valueOrElse(getBoolean(pa, ("protected_collateral_" + user)), false)
93+ case _ =>
94+ false
95+ }
96+ if (has)
97+ then throw("disallowed")
98+ else unit
99+ }
100+
101+
102+let aTIdS = "aTokenId"
103+
104+func lockOrPayout (recipient,amt,lock) = if (!(lock))
105+ then [ScriptTransfer(recipient, amt, viresAssetId)]
106+ else {
107+ let doLock = invoke(dC, "lockFor", [toString(recipient), 1], [AttachedPayment(viresAssetId, amt)])
108+ if ((doLock == doLock))
109+ then nil
110+ else throw("Strict value is not equal to itself.")
111+ }
112+
113+
114+func sR (rsr) = match mVD {
115+ case a: Address =>
116+ invoke(a, "syncHeight", [rsr], nil)
117+ case _ =>
118+ unit
119+}
120+
121+
122+func uS (rsr,action,user,userChange,streamChange) = match mVD {
123+ case a: Address =>
124+ invoke(a, "onAction", [rsr, action, user, userChange, streamChange], nil)
125+ case _ =>
126+ unit
127+}
128+
129+
130+@Callable(i)
131+func initialize (ca) = [writeConstString(configStore, ca)]
132+
133+
134+
135+@Callable(i)
136+func withdrawUnlockedLPTokens (aTokenId) = {
137+ let user = toString(i.caller)
138+ let checks = reserveBy(aTIdS, aTokenId)
139+ if ((checks == checks))
140+ then {
141+ let c = invoke(locker, "cleanUpDistributionFor", [user, aTokenId], nil)
142+ if ((c == c))
143+ then {
144+ let wd = asInt(invoke(locker, "withdraw", [user, aTokenId, user], nil))
145+ if ((wd == wd))
146+ then $Tuple2(nil, wd)
147+ else throw("Strict value is not equal to itself.")
148+ }
149+ else throw("Strict value is not equal to itself.")
150+ }
151+ else throw("Strict value is not equal to itself.")
152+ }
153+
154+
155+
156+@Callable(i)
157+func supplyUnlockedLPTokens (aTokenId) = {
158+ let user = toString(i.caller)
159+ let rsr = reserveBy(aTIdS, aTokenId)
160+ if ((rsr == rsr))
161+ then {
162+ let c = invoke(locker, "cleanUpDistributionFor", [user, aTokenId], nil)
163+ if ((c == c))
164+ then {
165+ let wd = asInt(invoke(locker, "withdraw", [user, aTokenId, toString(this)], nil))
166+ if ((wd == wd))
167+ then {
168+ let checks = ensureNoProtected(user)
169+ if ((checks == checks))
170+ then {
171+ let sh = sR(toString(rsr))
172+ if ((sh == sh))
173+ then {
174+ let replenishAmt = asInt(invoke(rsr, "replenishWithAtokenFor", [user], [AttachedPayment(fromBase58String(aTokenId), wd)]))
175+ if ((replenishAmt == replenishAmt))
176+ then {
177+ let pRw = uS(toString(rsr), "deposit", user, replenishAmt, 0)
178+ if ((pRw == pRw))
179+ then $Tuple2(nil, wd)
180+ else throw("Strict value is not equal to itself.")
181+ }
182+ else throw("Strict value is not equal to itself.")
183+ }
184+ else throw("Strict value is not equal to itself.")
185+ }
186+ else throw("Strict value is not equal to itself.")
187+ }
188+ else throw("Strict value is not equal to itself.")
189+ }
190+ else throw("Strict value is not equal to itself.")
191+ }
192+ else throw("Strict value is not equal to itself.")
193+ }
194+
195+
196+
197+@Callable(i)
198+func redeemUnlockedLPTokens (aTokenId) = {
199+ let user = toString(i.caller)
200+ let rsr = reserveBy(aTIdS, aTokenId)
201+ if ((rsr == rsr))
202+ then {
203+ let c = invoke(locker, "cleanUpDistributionFor", [user, aTokenId], nil)
204+ if ((c == c))
205+ then {
206+ let wd = asInt(invoke(locker, "withdraw", [user, aTokenId, toString(this)], nil))
207+ if ((wd == wd))
208+ then {
209+ let sh = sR(toString(rsr))
210+ if ((sh == sh))
211+ then {
212+ let amt = asInt(invoke(rsr, "redeemAtokensFor", [user], [AttachedPayment(fromBase58String(aTokenId), wd)]))
213+ if ((amt == amt))
214+ then {
215+ let pRw = uS(toString(rsr), "deposit", user, 0, -(amt))
216+ if ((pRw == pRw))
217+ then $Tuple2(nil, wd)
218+ else throw("Strict value is not equal to itself.")
219+ }
220+ else throw("Strict value is not equal to itself.")
221+ }
222+ else throw("Strict value is not equal to itself.")
223+ }
224+ else throw("Strict value is not equal to itself.")
225+ }
226+ else throw("Strict value is not equal to itself.")
227+ }
228+ else throw("Strict value is not equal to itself.")
229+ }
230+
231+
232+
233+@Callable(i)
234+func claimLpReward (rsr,amt,lock) = {
235+ let v = vlR(rsr)
236+ if ((v == v))
237+ then {
238+ let aTokenId = valueOrErrorMessage(getString(v, aTIdS), "no aTokenId in reserve")
239+ let user = toString(i.caller)
240+ let c = asInt(invoke(locker, "claimLpRewardFor", [user, aTokenId, amt], nil))
241+ if ((c == c))
242+ then lockOrPayout(i.caller, c, lock)
243+ else throw("Strict value is not equal to itself.")
244+ }
245+ else throw("Strict value is not equal to itself.")
246+ }
247+
248+

github/deemru/w8io/786bc32 
24.74 ms