tx · 7vZ7dU3uwpq6b7L59ZzQRNMq3cA6KsGrfk9G9aKVYRZ2 3PFe3tWVs5Ckv25NLpjnk7FePThMjfcFvxM: -0.01000000 Waves 2024.02.05 10:00 [4028429] smart account 3PFe3tWVs5Ckv25NLpjnk7FePThMjfcFvxM > SELF 0.00000000 Waves
{ "type": 13, "id": "7vZ7dU3uwpq6b7L59ZzQRNMq3cA6KsGrfk9G9aKVYRZ2", "fee": 1000000, "feeAssetId": null, "timestamp": 1707116406858, "version": 2, "chainId": 87, "sender": "3PFe3tWVs5Ckv25NLpjnk7FePThMjfcFvxM", "senderPublicKey": "9hMgJtjZvTDCisH8nZfVJrhvXAMDRww5a3DvqA41oebE", "proofs": [ "3Pj1Kgp7p2dwLXSr4hZw646w3f1wJmg5VWMihcwbfckVVTmCbz6aKhV8Majbtq18eUob4mWQaRW479zCPM9GhqGj" ], "script": "base64:BgIOCAISAwoBARIAEgMKAQgJAANTRVACAl9fABFtYWluX2NvbnRyYWN0X2tleQINbWFpbl9jb250cmFjdAAabWFpbl9jb250cmFjdF9scF9wb29sc19rZXkCCGxwX3Bvb2xzACptYWluX2NvbnRyYWN0X2NsYWltX3Bvb2xfcmV3YXJkc19mdW5jX25hbWUCEGNsYWltUG9vbFJld2FyZHMAFndhdmVzX2V4Y2hhbmdlX2FkZHJlc3MBGgFXs+bmVRgRabDkMw+IUUOknK7W1UsDSxFYAAx0d2FwX2FkZHJlc3MBGgFXVq9RYiUpObVv36bYzOK+Sw5Q/aDKQM8EAAlzYnRfYXNzZXQBIA2elOTfeSK5fnBNDI4xmz0HD4KyfeWQBuTkngeg6lHCAAh3eF9hc3NldAEgkwEcq6nHbiVXzmaecba9qmv4POhYCyru2aBOuzzcFLEBD2FzQWRkcmVzc1N0cmluZwEHYWRkcmVzcwQHJG1hdGNoMAkApggBBQdhZGRyZXNzAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEAWEFByRtYXRjaDAJAKUIAQUBYQkAAgECIGZhaWwgdG8gY2FzdCBpbnRvIEFkZHJlc3MgU3RyaW5nAwFpARZjbGFpbVJld2FyZHNPblR3b1Bvb2xzAQJpZAQVbWFpbl9jb250cmFjdF9hZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCiCAEFEW1haW5fY29udHJhY3Rfa2V5AiMzUDhFSDZTTE4xblV5OTJDUXp1NTMxeVhDeVdheGhzM1FocwQFcG9vbHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzBRptYWluX2NvbnRyYWN0X2xwX3Bvb2xzX2tleQUDU0VQBAhzaXhQb29scwMJAAACBQJpZAAACQDMCAIJAJEDAgUFcG9vbHMAAAkAzAgCCQCRAwIFBXBvb2xzAAEFA25pbAMJAAACBQJpZAABCQDMCAIJAJEDAgUFcG9vbHMAAgkAzAgCCQCRAwIFBXBvb2xzAAMFA25pbAMJAAACBQJpZAACCQDMCAIJAJEDAgUFcG9vbHMABAkAzAgCCQCRAwIFBXBvb2xzAAUFA25pbAMJAAACBQJpZAADCQDMCAIJAJEDAgUFcG9vbHMABgkAzAgCCQCRAwIFBXBvb2xzAAcFA25pbAMJAAACBQJpZAAECQDMCAIJAJEDAgUFcG9vbHMACAkAzAgCCQCRAwIFBXBvb2xzAAkFA25pbAMJAAACBQJpZAAFCQDMCAIJAJEDAgUFcG9vbHMACgkAzAgCCQCRAwIFBXBvb2xzAAwFA25pbAMJAAACBQJpZAAGCQDMCAIJAJEDAgUFcG9vbHMACwUDbmlsBQNuaWwKAQxwb29sc0FjdGlvbnMCA2FjYwRwb29sBBBpbnZvY2F0aW9uUmVzdWx0CQD8BwQFFW1haW5fY29udHJhY3RfYWRkcmVzcwUqbWFpbl9jb250cmFjdF9jbGFpbV9wb29sX3Jld2FyZHNfZnVuY19uYW1lCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFEGludm9jYXRpb25SZXN1bHQFEGludm9jYXRpb25SZXN1bHQFA2FjYwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQGcmVzdWx0CgACJGwFCHNpeFBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUEdW5pdAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMcG9vbHNBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwMJAAACBQZyZXN1bHQFBnJlc3VsdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEm1haW5faW5mb19yZWFkb25seQAEDW1haW5fY29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKIIAQURbWFpbl9jb250cmFjdF9rZXkCIzNQOEVINlNMTjFuVXk5MkNRenU1MzF5WEN5V2F4aHMzUWhzBBVtYWluX2NvbnRyYWN0X2FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDW1haW5fY29udHJhY3QECHRvdGFsR3d4BAZyZXN1bHQJAPwHBAkBB0FkZHJlc3MBBRZ3YXZlc19leGNoYW5nZV9hZGRyZXNzAhNnd3hVc2VySW5mb1JFQURPTkxZCQDMCAIFDW1haW5fY29udHJhY3QFA25pbAUDbmlsAwkAAAIFBnJlc3VsdAUGcmVzdWx0BAckbWF0Y2gwBQZyZXN1bHQDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAN2YWwFByRtYXRjaDAKAAFACQCRAwIFA3ZhbAAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAAgECGEZBVEFMOiBJbmNvbnNpc3RlbnQgZGF0YQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQh0b3RhbEd3eAUIdG90YWxHd3gEDnNidF9zdGFrZV9wb29sCQERQGV4dHJOYXRpdmUoMTA1MykCBRVtYWluX2NvbnRyYWN0X2FkZHJlc3MCDnNidF9zdGFrZV9wb29sBBZhZGRpdGlvbmFsX3Jld2FyZF9wb29sCQERQGV4dHJOYXRpdmUoMTA1MykCBRVtYWluX2NvbnRyYWN0X2FkZHJlc3MCFmFkZGl0aW9uYWxfcmV3YXJkX3Bvb2wED3RvdGFsX3d4X2xvY2tlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzAg90b3RhbF93eF9sb2NrZWQEEm1haW5fY29udHJhY3RfZGF0YQkAlgoEBQh0b3RhbEd3eAUOc2J0X3N0YWtlX3Bvb2wFFmFkZGl0aW9uYWxfcmV3YXJkX3Bvb2wFD3RvdGFsX3d4X2xvY2tlZAQFcG9vbHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUVbWFpbl9jb250cmFjdF9hZGRyZXNzBRptYWluX2NvbnRyYWN0X2xwX3Bvb2xzX2tleQUDU0VQBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEPc2V0TWFpbkNvbnRyYWN0AQdhZGRyZXNzAwkBAiE9AgUEdGhpcwgFAWkGY2FsbGVyCQACAQIJb25seSBzZWxmCQDMCAIJAQtTdHJpbmdFbnRyeQIFEW1haW5fY29udHJhY3Rfa2V5CQEPYXNBZGRyZXNzU3RyaW5nAQUHYWRkcmVzcwUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tledJ2uLI=", "height": 4028429, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E4YhWugyXjcodnHMKSfGAGKW9ug8eZRDoZpY2RJBZsb5 Next: BNDuZy2rYMhUWpq2Ri4AnPgPYC9fvc5HAw7eKw6bkPxn Diff:
Old | New | Differences | |
---|---|---|---|
97 | 97 | let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked") | |
98 | 98 | let main_contract_data = $Tuple4(totalGwx, sbt_stake_pool, additional_reward_pool, total_wx_locked) | |
99 | 99 | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
100 | - | func pools_data_collecting (acc,pool) = { | |
101 | - | let pool_address = addressFromStringValue(pool) | |
102 | - | let pool_token = getStringValue(pool_address, "token") | |
103 | - | let pool_token_amount = valueOrElse(getInteger(pool_address, "tokens"), 0) | |
104 | - | let pool_reward_assets_untoched = getStringValue(pool_address, "rewards") | |
105 | - | let pool_reward_assets = split(pool_reward_assets_untoched, ",") | |
106 | - | let pool_killed = getBooleanValue(pool_address, "is_killed") | |
107 | - | let pool_locked_period = getIntegerValue(pool_address, "locked_period") | |
108 | - | let pool_total_claimed_sbt = getIntegerValue(main_contract_address, (pool + "__total_sbt_claimed")) | |
109 | - | let pool_total_claimed_wx = getIntegerValue(main_contract_address, (pool + "__total_wx_claimed")) | |
110 | - | func pools_reward_assets_twap_collecting (acc,pool_asset) = { | |
111 | - | let twap_result = invoke(Address(twap_address), "twap", [pool, pool_asset, pool_token, -604800000, 0], nil) | |
112 | - | if ((twap_result == twap_result)) | |
113 | - | then match twap_result { | |
114 | - | case val: String => | |
115 | - | (acc ++ [((pool_asset + "_") + val)]) | |
116 | - | case _ => | |
117 | - | throw("FATAL: Inconsistent data") | |
118 | - | } | |
119 | - | else throw("Strict value is not equal to itself.") | |
120 | - | } | |
121 | - | ||
122 | - | let pool_twap_result = { | |
123 | - | let $l = pool_reward_assets | |
124 | - | let $s = size($l) | |
125 | - | let $acc0 = nil | |
126 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
127 | - | then $a | |
128 | - | else pools_reward_assets_twap_collecting($a, $l[$i]) | |
129 | - | ||
130 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
131 | - | then $a | |
132 | - | else throw("List size exceeds 3") | |
133 | - | ||
134 | - | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) | |
135 | - | } | |
136 | - | (acc ++ [$Tuple9(pool, pool_token, pool_reward_assets_untoched, pool_token_amount, pool_killed, pool_locked_period, pool_twap_result, pool_total_claimed_sbt, pool_total_claimed_wx)]) | |
137 | - | } | |
138 | - | ||
139 | - | let pools_data = { | |
140 | - | let $l = (pools ++ [sbt_stake_pool]) | |
141 | - | let $s = size($l) | |
142 | - | let $acc0 = nil | |
143 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
144 | - | then $a | |
145 | - | else pools_data_collecting($a, $l[$i]) | |
146 | - | ||
147 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
148 | - | then $a | |
149 | - | else throw("List size exceeds 15") | |
150 | - | ||
151 | - | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
152 | - | } | |
153 | - | $Tuple2(nil, $Tuple2(main_contract_data, pools_data)) | |
154 | - | } | |
155 | - | else throw("Strict value is not equal to itself.") | |
156 | - | } | |
157 | - | ||
158 | - | ||
159 | - | ||
160 | - | @Callable(i) | |
161 | - | func user_info_readonly (user) = { | |
162 | - | let main_contract = valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs") | |
163 | - | let main_contract_address = addressFromStringValue(main_contract) | |
164 | - | let sbt_stake_pool = getStringValue(main_contract_address, "sbt_stake_pool") | |
165 | - | let additional_reward_pool = getStringValue(main_contract_address, "additional_reward_pool") | |
166 | - | let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked") | |
167 | - | let sbt_stake_pool_address = addressFromStringValue(sbt_stake_pool) | |
168 | - | let user_sbt_pool_total_locked = { | |
169 | - | let @ = invoke(sbt_stake_pool_address, "claimable_tokens", [user], nil) | |
170 | - | if ($isInstanceOf(@, "Int")) | |
171 | - | then @ | |
172 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
173 | - | } | |
174 | - | if ((user_sbt_pool_total_locked == user_sbt_pool_total_locked)) | |
175 | - | then { | |
176 | - | let user_sbt_pool_total_claimed_wx = { | |
177 | - | let @ = invoke(sbt_stake_pool_address, "claimed_reward", [user, toBase58String(sbt_asset)], nil) | |
178 | - | if ($isInstanceOf(@, "Int")) | |
179 | - | then @ | |
180 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
181 | - | } | |
182 | - | if ((user_sbt_pool_total_claimed_wx == user_sbt_pool_total_claimed_wx)) | |
183 | - | then { | |
184 | - | let user_sbt_pool_unclaimed_wx = { | |
185 | - | let @ = invoke(sbt_stake_pool_address, "claimable_reward", [user, toBase58String(wx_asset)], nil) | |
186 | - | if ($isInstanceOf(@, "Int")) | |
187 | - | then @ | |
188 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
189 | - | } | |
190 | - | if ((user_sbt_pool_unclaimed_wx == user_sbt_pool_unclaimed_wx)) | |
191 | - | then { | |
192 | - | let user_sbt_pool_waiting_to_unlock = { | |
193 | - | let @ = invoke(sbt_stake_pool_address, "user_locked_readonly", [user], nil) | |
194 | - | if ($isInstanceOf(@, "String")) | |
195 | - | then @ | |
196 | - | else throw(($getType(@) + " couldn't be cast to String")) | |
197 | - | } | |
198 | - | if ((user_sbt_pool_waiting_to_unlock == user_sbt_pool_waiting_to_unlock)) | |
199 | - | then { | |
200 | - | let user_sbt_pool_data = $Tuple4(user_sbt_pool_total_locked, user_sbt_pool_total_claimed_wx, user_sbt_pool_unclaimed_wx, user_sbt_pool_waiting_to_unlock) | |
201 | - | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
202 | - | func pools_data_accounting (acc,pool) = { | |
203 | - | let pool_address = addressFromStringValue(pool) | |
204 | - | let pool_token = getStringValue(pool_address, "token") | |
205 | - | let user_staked_amount = { | |
206 | - | let @ = invoke(pool_address, "claimable_tokens", [user], nil) | |
207 | - | if ($isInstanceOf(@, "Int")) | |
208 | - | then @ | |
209 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
210 | - | } | |
211 | - | if ((user_staked_amount == user_staked_amount)) | |
212 | - | then { | |
213 | - | let user_total_wx_claimed = { | |
214 | - | let @ = invoke(pool_address, "claimed_reward", [user, toBase58String(wx_asset)], nil) | |
215 | - | if ($isInstanceOf(@, "Int")) | |
216 | - | then @ | |
217 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
218 | - | } | |
219 | - | if ((user_total_wx_claimed == user_total_wx_claimed)) | |
220 | - | then { | |
221 | - | let user_total_sbt_claimed = { | |
222 | - | let @ = invoke(pool_address, "claimed_reward", [user, toBase58String(sbt_asset)], nil) | |
223 | - | if ($isInstanceOf(@, "Int")) | |
224 | - | then @ | |
225 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
226 | - | } | |
227 | - | if ((user_total_sbt_claimed == user_total_sbt_claimed)) | |
228 | - | then { | |
229 | - | let user_unclaimed_wx = { | |
230 | - | let @ = invoke(pool_address, "claimable_reward", [user, toBase58String(wx_asset)], nil) | |
231 | - | if ($isInstanceOf(@, "Int")) | |
232 | - | then @ | |
233 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
234 | - | } | |
235 | - | if ((user_unclaimed_wx == user_unclaimed_wx)) | |
236 | - | then { | |
237 | - | let user_unclaimed_Sbt = { | |
238 | - | let @ = invoke(pool_address, "claimable_reward", [user, toBase58String(sbt_asset)], nil) | |
239 | - | if ($isInstanceOf(@, "Int")) | |
240 | - | then @ | |
241 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
242 | - | } | |
243 | - | if ((user_unclaimed_Sbt == user_unclaimed_Sbt)) | |
244 | - | then (acc ++ [$Tuple7(pool, pool_token, user_staked_amount, user_total_wx_claimed, user_total_sbt_claimed, user_unclaimed_wx, user_unclaimed_Sbt)]) | |
245 | - | else throw("Strict value is not equal to itself.") | |
246 | - | } | |
247 | - | else throw("Strict value is not equal to itself.") | |
248 | - | } | |
249 | - | else throw("Strict value is not equal to itself.") | |
250 | - | } | |
251 | - | else throw("Strict value is not equal to itself.") | |
252 | - | } | |
253 | - | else throw("Strict value is not equal to itself.") | |
254 | - | } | |
255 | - | ||
256 | - | let user_pools_data = { | |
257 | - | let $l = pools | |
258 | - | let $s = size($l) | |
259 | - | let $acc0 = nil | |
260 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
261 | - | then $a | |
262 | - | else pools_data_accounting($a, $l[$i]) | |
263 | - | ||
264 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
265 | - | then $a | |
266 | - | else throw("List size exceeds 15") | |
267 | - | ||
268 | - | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
269 | - | } | |
270 | - | $Tuple2(nil, $Tuple2(user_sbt_pool_data, user_pools_data)) | |
271 | - | } | |
272 | - | else throw("Strict value is not equal to itself.") | |
273 | - | } | |
274 | - | else throw("Strict value is not equal to itself.") | |
275 | - | } | |
276 | - | else throw("Strict value is not equal to itself.") | |
100 | + | nil | |
277 | 101 | } | |
278 | 102 | else throw("Strict value is not equal to itself.") | |
279 | 103 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let SEP = "__" | |
5 | 5 | ||
6 | 6 | let main_contract_key = "main_contract" | |
7 | 7 | ||
8 | 8 | let main_contract_lp_pools_key = "lp_pools" | |
9 | 9 | ||
10 | 10 | let main_contract_claim_pool_rewards_func_name = "claimPoolRewards" | |
11 | 11 | ||
12 | 12 | let waves_exchange_address = base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP' | |
13 | 13 | ||
14 | 14 | let twap_address = base58'3P9qEs3aQgRgzBLo7hRvQahNRJvTTGoTWAP' | |
15 | 15 | ||
16 | 16 | let sbt_asset = base58'vAYvjoLheNuvi2wRdQYK9NUjJ6ZQ5EkAtx7jy36rK13' | |
17 | 17 | ||
18 | 18 | let wx_asset = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on' | |
19 | 19 | ||
20 | 20 | func asAddressString (address) = match addressFromString(address) { | |
21 | 21 | case a: Address => | |
22 | 22 | toString(a) | |
23 | 23 | case _ => | |
24 | 24 | throw("fail to cast into Address String") | |
25 | 25 | } | |
26 | 26 | ||
27 | 27 | ||
28 | 28 | @Callable(i) | |
29 | 29 | func claimRewardsOnTwoPools (id) = { | |
30 | 30 | let main_contract_address = addressFromStringValue(valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs")) | |
31 | 31 | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
32 | 32 | let sixPools = if ((id == 0)) | |
33 | 33 | then [pools[0], pools[1]] | |
34 | 34 | else if ((id == 1)) | |
35 | 35 | then [pools[2], pools[3]] | |
36 | 36 | else if ((id == 2)) | |
37 | 37 | then [pools[4], pools[5]] | |
38 | 38 | else if ((id == 3)) | |
39 | 39 | then [pools[6], pools[7]] | |
40 | 40 | else if ((id == 4)) | |
41 | 41 | then [pools[8], pools[9]] | |
42 | 42 | else if ((id == 5)) | |
43 | 43 | then [pools[10], pools[12]] | |
44 | 44 | else if ((id == 6)) | |
45 | 45 | then [pools[11]] | |
46 | 46 | else nil | |
47 | 47 | func poolsActions (acc,pool) = { | |
48 | 48 | let invocationResult = invoke(main_contract_address, main_contract_claim_pool_rewards_func_name, [pool], nil) | |
49 | 49 | if ((invocationResult == invocationResult)) | |
50 | 50 | then acc | |
51 | 51 | else throw("Strict value is not equal to itself.") | |
52 | 52 | } | |
53 | 53 | ||
54 | 54 | let result = { | |
55 | 55 | let $l = sixPools | |
56 | 56 | let $s = size($l) | |
57 | 57 | let $acc0 = unit | |
58 | 58 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
59 | 59 | then $a | |
60 | 60 | else poolsActions($a, $l[$i]) | |
61 | 61 | ||
62 | 62 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
63 | 63 | then $a | |
64 | 64 | else throw("List size exceeds 15") | |
65 | 65 | ||
66 | 66 | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
67 | 67 | } | |
68 | 68 | if ((result == result)) | |
69 | 69 | then nil | |
70 | 70 | else throw("Strict value is not equal to itself.") | |
71 | 71 | } | |
72 | 72 | ||
73 | 73 | ||
74 | 74 | ||
75 | 75 | @Callable(i) | |
76 | 76 | func main_info_readonly () = { | |
77 | 77 | let main_contract = valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs") | |
78 | 78 | let main_contract_address = addressFromStringValue(main_contract) | |
79 | 79 | let totalGwx = { | |
80 | 80 | let result = invoke(Address(waves_exchange_address), "gwxUserInfoREADONLY", [main_contract], nil) | |
81 | 81 | if ((result == result)) | |
82 | 82 | then match result { | |
83 | 83 | case val: List[Any] => | |
84 | 84 | let @ = val[0] | |
85 | 85 | if ($isInstanceOf(@, "Int")) | |
86 | 86 | then @ | |
87 | 87 | else throw(($getType(@) + " couldn't be cast to Int")) | |
88 | 88 | case _ => | |
89 | 89 | throw("FATAL: Inconsistent data") | |
90 | 90 | } | |
91 | 91 | else throw("Strict value is not equal to itself.") | |
92 | 92 | } | |
93 | 93 | if ((totalGwx == totalGwx)) | |
94 | 94 | then { | |
95 | 95 | let sbt_stake_pool = getStringValue(main_contract_address, "sbt_stake_pool") | |
96 | 96 | let additional_reward_pool = getStringValue(main_contract_address, "additional_reward_pool") | |
97 | 97 | let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked") | |
98 | 98 | let main_contract_data = $Tuple4(totalGwx, sbt_stake_pool, additional_reward_pool, total_wx_locked) | |
99 | 99 | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
100 | - | func pools_data_collecting (acc,pool) = { | |
101 | - | let pool_address = addressFromStringValue(pool) | |
102 | - | let pool_token = getStringValue(pool_address, "token") | |
103 | - | let pool_token_amount = valueOrElse(getInteger(pool_address, "tokens"), 0) | |
104 | - | let pool_reward_assets_untoched = getStringValue(pool_address, "rewards") | |
105 | - | let pool_reward_assets = split(pool_reward_assets_untoched, ",") | |
106 | - | let pool_killed = getBooleanValue(pool_address, "is_killed") | |
107 | - | let pool_locked_period = getIntegerValue(pool_address, "locked_period") | |
108 | - | let pool_total_claimed_sbt = getIntegerValue(main_contract_address, (pool + "__total_sbt_claimed")) | |
109 | - | let pool_total_claimed_wx = getIntegerValue(main_contract_address, (pool + "__total_wx_claimed")) | |
110 | - | func pools_reward_assets_twap_collecting (acc,pool_asset) = { | |
111 | - | let twap_result = invoke(Address(twap_address), "twap", [pool, pool_asset, pool_token, -604800000, 0], nil) | |
112 | - | if ((twap_result == twap_result)) | |
113 | - | then match twap_result { | |
114 | - | case val: String => | |
115 | - | (acc ++ [((pool_asset + "_") + val)]) | |
116 | - | case _ => | |
117 | - | throw("FATAL: Inconsistent data") | |
118 | - | } | |
119 | - | else throw("Strict value is not equal to itself.") | |
120 | - | } | |
121 | - | ||
122 | - | let pool_twap_result = { | |
123 | - | let $l = pool_reward_assets | |
124 | - | let $s = size($l) | |
125 | - | let $acc0 = nil | |
126 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
127 | - | then $a | |
128 | - | else pools_reward_assets_twap_collecting($a, $l[$i]) | |
129 | - | ||
130 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
131 | - | then $a | |
132 | - | else throw("List size exceeds 3") | |
133 | - | ||
134 | - | $f0_2($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3) | |
135 | - | } | |
136 | - | (acc ++ [$Tuple9(pool, pool_token, pool_reward_assets_untoched, pool_token_amount, pool_killed, pool_locked_period, pool_twap_result, pool_total_claimed_sbt, pool_total_claimed_wx)]) | |
137 | - | } | |
138 | - | ||
139 | - | let pools_data = { | |
140 | - | let $l = (pools ++ [sbt_stake_pool]) | |
141 | - | let $s = size($l) | |
142 | - | let $acc0 = nil | |
143 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
144 | - | then $a | |
145 | - | else pools_data_collecting($a, $l[$i]) | |
146 | - | ||
147 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
148 | - | then $a | |
149 | - | else throw("List size exceeds 15") | |
150 | - | ||
151 | - | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
152 | - | } | |
153 | - | $Tuple2(nil, $Tuple2(main_contract_data, pools_data)) | |
154 | - | } | |
155 | - | else throw("Strict value is not equal to itself.") | |
156 | - | } | |
157 | - | ||
158 | - | ||
159 | - | ||
160 | - | @Callable(i) | |
161 | - | func user_info_readonly (user) = { | |
162 | - | let main_contract = valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs") | |
163 | - | let main_contract_address = addressFromStringValue(main_contract) | |
164 | - | let sbt_stake_pool = getStringValue(main_contract_address, "sbt_stake_pool") | |
165 | - | let additional_reward_pool = getStringValue(main_contract_address, "additional_reward_pool") | |
166 | - | let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked") | |
167 | - | let sbt_stake_pool_address = addressFromStringValue(sbt_stake_pool) | |
168 | - | let user_sbt_pool_total_locked = { | |
169 | - | let @ = invoke(sbt_stake_pool_address, "claimable_tokens", [user], nil) | |
170 | - | if ($isInstanceOf(@, "Int")) | |
171 | - | then @ | |
172 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
173 | - | } | |
174 | - | if ((user_sbt_pool_total_locked == user_sbt_pool_total_locked)) | |
175 | - | then { | |
176 | - | let user_sbt_pool_total_claimed_wx = { | |
177 | - | let @ = invoke(sbt_stake_pool_address, "claimed_reward", [user, toBase58String(sbt_asset)], nil) | |
178 | - | if ($isInstanceOf(@, "Int")) | |
179 | - | then @ | |
180 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
181 | - | } | |
182 | - | if ((user_sbt_pool_total_claimed_wx == user_sbt_pool_total_claimed_wx)) | |
183 | - | then { | |
184 | - | let user_sbt_pool_unclaimed_wx = { | |
185 | - | let @ = invoke(sbt_stake_pool_address, "claimable_reward", [user, toBase58String(wx_asset)], nil) | |
186 | - | if ($isInstanceOf(@, "Int")) | |
187 | - | then @ | |
188 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
189 | - | } | |
190 | - | if ((user_sbt_pool_unclaimed_wx == user_sbt_pool_unclaimed_wx)) | |
191 | - | then { | |
192 | - | let user_sbt_pool_waiting_to_unlock = { | |
193 | - | let @ = invoke(sbt_stake_pool_address, "user_locked_readonly", [user], nil) | |
194 | - | if ($isInstanceOf(@, "String")) | |
195 | - | then @ | |
196 | - | else throw(($getType(@) + " couldn't be cast to String")) | |
197 | - | } | |
198 | - | if ((user_sbt_pool_waiting_to_unlock == user_sbt_pool_waiting_to_unlock)) | |
199 | - | then { | |
200 | - | let user_sbt_pool_data = $Tuple4(user_sbt_pool_total_locked, user_sbt_pool_total_claimed_wx, user_sbt_pool_unclaimed_wx, user_sbt_pool_waiting_to_unlock) | |
201 | - | let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP) | |
202 | - | func pools_data_accounting (acc,pool) = { | |
203 | - | let pool_address = addressFromStringValue(pool) | |
204 | - | let pool_token = getStringValue(pool_address, "token") | |
205 | - | let user_staked_amount = { | |
206 | - | let @ = invoke(pool_address, "claimable_tokens", [user], nil) | |
207 | - | if ($isInstanceOf(@, "Int")) | |
208 | - | then @ | |
209 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
210 | - | } | |
211 | - | if ((user_staked_amount == user_staked_amount)) | |
212 | - | then { | |
213 | - | let user_total_wx_claimed = { | |
214 | - | let @ = invoke(pool_address, "claimed_reward", [user, toBase58String(wx_asset)], nil) | |
215 | - | if ($isInstanceOf(@, "Int")) | |
216 | - | then @ | |
217 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
218 | - | } | |
219 | - | if ((user_total_wx_claimed == user_total_wx_claimed)) | |
220 | - | then { | |
221 | - | let user_total_sbt_claimed = { | |
222 | - | let @ = invoke(pool_address, "claimed_reward", [user, toBase58String(sbt_asset)], nil) | |
223 | - | if ($isInstanceOf(@, "Int")) | |
224 | - | then @ | |
225 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
226 | - | } | |
227 | - | if ((user_total_sbt_claimed == user_total_sbt_claimed)) | |
228 | - | then { | |
229 | - | let user_unclaimed_wx = { | |
230 | - | let @ = invoke(pool_address, "claimable_reward", [user, toBase58String(wx_asset)], nil) | |
231 | - | if ($isInstanceOf(@, "Int")) | |
232 | - | then @ | |
233 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
234 | - | } | |
235 | - | if ((user_unclaimed_wx == user_unclaimed_wx)) | |
236 | - | then { | |
237 | - | let user_unclaimed_Sbt = { | |
238 | - | let @ = invoke(pool_address, "claimable_reward", [user, toBase58String(sbt_asset)], nil) | |
239 | - | if ($isInstanceOf(@, "Int")) | |
240 | - | then @ | |
241 | - | else throw(($getType(@) + " couldn't be cast to Int")) | |
242 | - | } | |
243 | - | if ((user_unclaimed_Sbt == user_unclaimed_Sbt)) | |
244 | - | then (acc ++ [$Tuple7(pool, pool_token, user_staked_amount, user_total_wx_claimed, user_total_sbt_claimed, user_unclaimed_wx, user_unclaimed_Sbt)]) | |
245 | - | else throw("Strict value is not equal to itself.") | |
246 | - | } | |
247 | - | else throw("Strict value is not equal to itself.") | |
248 | - | } | |
249 | - | else throw("Strict value is not equal to itself.") | |
250 | - | } | |
251 | - | else throw("Strict value is not equal to itself.") | |
252 | - | } | |
253 | - | else throw("Strict value is not equal to itself.") | |
254 | - | } | |
255 | - | ||
256 | - | let user_pools_data = { | |
257 | - | let $l = pools | |
258 | - | let $s = size($l) | |
259 | - | let $acc0 = nil | |
260 | - | func $f0_1 ($a,$i) = if (($i >= $s)) | |
261 | - | then $a | |
262 | - | else pools_data_accounting($a, $l[$i]) | |
263 | - | ||
264 | - | func $f0_2 ($a,$i) = if (($i >= $s)) | |
265 | - | then $a | |
266 | - | else throw("List size exceeds 15") | |
267 | - | ||
268 | - | $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($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
269 | - | } | |
270 | - | $Tuple2(nil, $Tuple2(user_sbt_pool_data, user_pools_data)) | |
271 | - | } | |
272 | - | else throw("Strict value is not equal to itself.") | |
273 | - | } | |
274 | - | else throw("Strict value is not equal to itself.") | |
275 | - | } | |
276 | - | else throw("Strict value is not equal to itself.") | |
100 | + | nil | |
277 | 101 | } | |
278 | 102 | else throw("Strict value is not equal to itself.") | |
279 | 103 | } | |
280 | 104 | ||
281 | 105 | ||
282 | 106 | ||
283 | 107 | @Callable(i) | |
284 | 108 | func setMainContract (address) = if ((this != i.caller)) | |
285 | 109 | then throw("only self") | |
286 | 110 | else [StringEntry(main_contract_key, asAddressString(address))] | |
287 | 111 | ||
288 | 112 | ||
289 | 113 | @Verifier(tx) | |
290 | 114 | func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey) | |
291 | 115 |
github/deemru/w8io/3ef1775 52.43 ms ◑