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:
OldNewDifferences
9797 let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked")
9898 let main_contract_data = $Tuple4(totalGwx, sbt_stake_pool, additional_reward_pool, total_wx_locked)
9999 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
277101 }
278102 else throw("Strict value is not equal to itself.")
279103 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SEP = "__"
55
66 let main_contract_key = "main_contract"
77
88 let main_contract_lp_pools_key = "lp_pools"
99
1010 let main_contract_claim_pool_rewards_func_name = "claimPoolRewards"
1111
1212 let waves_exchange_address = base58'3PJL8Hn8LACaSBWLQ3UVhctA5cTQLBFwBAP'
1313
1414 let twap_address = base58'3P9qEs3aQgRgzBLo7hRvQahNRJvTTGoTWAP'
1515
1616 let sbt_asset = base58'vAYvjoLheNuvi2wRdQYK9NUjJ6ZQ5EkAtx7jy36rK13'
1717
1818 let wx_asset = base58'Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on'
1919
2020 func asAddressString (address) = match addressFromString(address) {
2121 case a: Address =>
2222 toString(a)
2323 case _ =>
2424 throw("fail to cast into Address String")
2525 }
2626
2727
2828 @Callable(i)
2929 func claimRewardsOnTwoPools (id) = {
3030 let main_contract_address = addressFromStringValue(valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs"))
3131 let pools = split(getStringValue(main_contract_address, main_contract_lp_pools_key), SEP)
3232 let sixPools = if ((id == 0))
3333 then [pools[0], pools[1]]
3434 else if ((id == 1))
3535 then [pools[2], pools[3]]
3636 else if ((id == 2))
3737 then [pools[4], pools[5]]
3838 else if ((id == 3))
3939 then [pools[6], pools[7]]
4040 else if ((id == 4))
4141 then [pools[8], pools[9]]
4242 else if ((id == 5))
4343 then [pools[10], pools[12]]
4444 else if ((id == 6))
4545 then [pools[11]]
4646 else nil
4747 func poolsActions (acc,pool) = {
4848 let invocationResult = invoke(main_contract_address, main_contract_claim_pool_rewards_func_name, [pool], nil)
4949 if ((invocationResult == invocationResult))
5050 then acc
5151 else throw("Strict value is not equal to itself.")
5252 }
5353
5454 let result = {
5555 let $l = sixPools
5656 let $s = size($l)
5757 let $acc0 = unit
5858 func $f0_1 ($a,$i) = if (($i >= $s))
5959 then $a
6060 else poolsActions($a, $l[$i])
6161
6262 func $f0_2 ($a,$i) = if (($i >= $s))
6363 then $a
6464 else throw("List size exceeds 15")
6565
6666 $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)
6767 }
6868 if ((result == result))
6969 then nil
7070 else throw("Strict value is not equal to itself.")
7171 }
7272
7373
7474
7575 @Callable(i)
7676 func main_info_readonly () = {
7777 let main_contract = valueOrElse(getString(main_contract_key), "3P8EH6SLN1nUy92CQzu531yXCyWaxhs3Qhs")
7878 let main_contract_address = addressFromStringValue(main_contract)
7979 let totalGwx = {
8080 let result = invoke(Address(waves_exchange_address), "gwxUserInfoREADONLY", [main_contract], nil)
8181 if ((result == result))
8282 then match result {
8383 case val: List[Any] =>
8484 let @ = val[0]
8585 if ($isInstanceOf(@, "Int"))
8686 then @
8787 else throw(($getType(@) + " couldn't be cast to Int"))
8888 case _ =>
8989 throw("FATAL: Inconsistent data")
9090 }
9191 else throw("Strict value is not equal to itself.")
9292 }
9393 if ((totalGwx == totalGwx))
9494 then {
9595 let sbt_stake_pool = getStringValue(main_contract_address, "sbt_stake_pool")
9696 let additional_reward_pool = getStringValue(main_contract_address, "additional_reward_pool")
9797 let total_wx_locked = getIntegerValue(main_contract_address, "total_wx_locked")
9898 let main_contract_data = $Tuple4(totalGwx, sbt_stake_pool, additional_reward_pool, total_wx_locked)
9999 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
277101 }
278102 else throw("Strict value is not equal to itself.")
279103 }
280104
281105
282106
283107 @Callable(i)
284108 func setMainContract (address) = if ((this != i.caller))
285109 then throw("only self")
286110 else [StringEntry(main_contract_key, asAddressString(address))]
287111
288112
289113 @Verifier(tx)
290114 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
291115

github/deemru/w8io/3ef1775 
52.43 ms