tx · 5LF2VpEugC1jMdxK558BdQbWAiehHSZv1JqAkjs3AcwV

3MupUouLsuV3aTwaZv2TM69VkDBUSQ6Xw9D:  -0.03400000 Waves

2023.03.03 23:02 [2474332] smart account 3MupUouLsuV3aTwaZv2TM69VkDBUSQ6Xw9D > SELF 0.00000000 Waves

{ "type": 13, "id": "5LF2VpEugC1jMdxK558BdQbWAiehHSZv1JqAkjs3AcwV", "fee": 3400000, "feeAssetId": null, "timestamp": 1677873853717, "version": 2, "chainId": 84, "sender": "3MupUouLsuV3aTwaZv2TM69VkDBUSQ6Xw9D", "senderPublicKey": "EjqRoq1WePrhXmPrEaqyCJtYr88atkFmDM8pvro1tFun", "proofs": [ "4tjsR5A7DDnPHHuKikVxKJmChW2FCCLLJvkPgLZ2xNw9QmtSmAmzbYSEhnVfShEhb3po62ePxmWAwwt7qtSbSoCh" ], "script": "base64:BgIiCAISBgoECAgICBIECgIICBIECgIIARIAEgMKAQgSAwoBCBIAB2tfZnVuZHMCB2tfZnVuZHMAD2tfdmlyZXNfYWRkcmVzcwIPa192aXJlc19hZGRyZXNzAA1rX3ZpcmVzX3ZhdWx0Ag1rX3ZpcmVzX3ZhdWx0ABZrX2Fzc2V0X2NsYWltZWRfcHJvZml0AhZrX2Fzc2V0X2NsYWltZWRfcHJvZml0ABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwAPa19hZG1pbl9hZGRyZXNzAg9rX2FkbWluX2FkZHJlc3MADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQBDnRvQ29tcG9zaXRlS2V5AgRfa2V5CF9hZGRyZXNzCQCsAgIJAKwCAgUEX2tleQIBXwUIX2FkZHJlc3MBCWJhbGFuY2VPZgEIX2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUHa19mdW5kcwUIX2Fzc2V0SWQAAAELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCJ0Nvb3JkaW5hdG9yIG5vdCBzZXQgVmlyZXMgQXNzZXQgTWFuYWdlcgEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQCD01hbmFnZXIgbm90IHNldAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEMdmlyZXNBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFD2tfdmlyZXNfYWRkcmVzcwINVmlyZXMgbm90IHNldAEKdmlyZXNWYXVsdAEIX2Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUNa192aXJlc192YXVsdAUIX2Fzc2V0SWQJAKwCAgITTm8gdmF1bHQgZm9yIHRva2VuIAUIX2Fzc2V0SWQJAKwCAgIaSW52YWxpZCBhZGRyZXNzIGZvciB0b2tlbiAFCF9hc3NldElkAQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAAACBQhfYWRkcmVzcwkApQgBCQEObWFuYWdlckFkZHJlc3MAAQt1cGRhdGVGdW5kcwIIX2Fzc2V0SWQGX3ZhbHVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQdrX2Z1bmRzBQhfYXNzZXRJZAUGX3ZhbHVlBQNuaWwGAWkBCmluaXRpYWxpemUEDF9jb29yZGluYXRvcg1fdmlyZXNBZGRyZXNzDV9xdW90ZUFzc2V0SWQQX3F1b3RlQXNzZXRWYXVsdAMDCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIUVW5hYmxlIHRvIGluaXRpYWxpemUJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUMX2Nvb3JkaW5hdG9yCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tfdmlyZXNfYWRkcmVzcwkApQgBCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1fdmlyZXNBZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdmlyZXNfdmF1bHQFDV9xdW90ZUFzc2V0SWQJAKUIAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUQX3F1b3RlQXNzZXRWYXVsdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQ1hZGRUb2tlblZhdWx0AghfYXNzZXRJZA1fdmF1bHRBZGRyZXNzAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhxJbnZhbGlkIGFkZFRva2VuVmF1bHQgcGFyYW1zCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfdmlyZXNfdmF1bHQFCF9hc3NldElkCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDV92YXVsdEFkZHJlc3MFA25pbAFpAQh3aXRoZHJhdwIIX2Fzc2V0SWQHX2Ftb3VudAMDAwkBASEBCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAGYCBQdfYW1vdW50CQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAi5JbnZhbGlkIHdpdGhkcmF3IHBhcmFtcyAodmlyZXMgYXNzZXQgbWFuYWdlcikgCQCkAwEFB19hbW91bnQCAyA+IAkApAMBCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQEB3Vuc3Rha2UJAPwHBAkBDHZpcmVzQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFCF9hc3NldElkCQDMCAIFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEE2N1cnJlbnRBc3NldEJhbGFuY2UJAGUCCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQFB19hbW91bnQJAM4IAgkBC3VwZGF0ZUZ1bmRzAgUIX2Fzc2V0SWQFE2N1cnJlbnRBc3NldEJhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdfYW1vdW50CQDZBAEFCF9hc3NldElkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEHZGVwb3NpdAAEB19hbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAhfYXNzZXRJZAkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAIKTm8gYXNzZXRJZAMDCQEBIQEJAQtpbml0aWFsaXplZAAGAwkBASEBCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAcJAAIBAixJbnZhbGlkIGRlcG9zaXQgcGFyYW1zICh2aXJlcyBhc3NldCBtYW5hZ2VyKQQFdmF1bHQJAQp2aXJlc1ZhdWx0AQUIX2Fzc2V0SWQEBXN0YWtlCQD8BwQJAQx2aXJlc0FkZHJlc3MAAgdkZXBvc2l0CQDMCAIJAKUIAQUFdmF1bHQJAMwIAgcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBNjdXJyZW50QXNzZXRCYWxhbmNlCQBkAgkBCWJhbGFuY2VPZgEFCF9hc3NldElkBQdfYW1vdW50CQELdXBkYXRlRnVuZHMCBQhfYXNzZXRJZAUTY3VycmVudEFzc2V0QmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtjbGFpbVByb2ZpdAEIX2Fzc2V0SWQDAwkBASEBCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyCQEObWFuYWdlckFkZHJlc3MACQACAQIwSW52YWxpZCBjbGFpbVByb2ZpdCBwYXJhbXMgKHZpcmVzIGFzc2V0IG1hbmFnZXIpBA1jdXJyZW50QW1vdW50CQD8BwQJAQp2aXJlc1ZhdWx0AQUIX2Fzc2V0SWQCEGdldEN1cnJlbnRUb3RhbHMJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQ1jdXJyZW50QW1vdW50BQ1jdXJyZW50QW1vdW50BBNjdXJyZW50QXNzZXRCYWxhbmNlBAckbWF0Y2gwBQ1jdXJyZW50QW1vdW50AwkAAQIFByRtYXRjaDACFChJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwCAUBdAJfMwkAAgECGkludmFsaWQgY3VycmVudEFtb3VudCB0eXBlBAZwcm9maXQJAGUCBRNjdXJyZW50QXNzZXRCYWxhbmNlCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQEB3Vuc3Rha2UJAPwHBAkBDHZpcmVzQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIFCF9hc3NldElkCQDMCAIFBnByb2ZpdAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGcHJvZml0CQDZBAEFCF9hc3NldElkBQNuaWwFBnByb2ZpdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARB2aWV3X2NsYWltUHJvZml0AQhfYXNzZXRJZAMJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECNUludmFsaWQgdmlld19jbGFpbVByb2ZpdCBwYXJhbXMgKHZpcmVzIGFzc2V0IG1hbmFnZXIpBA1jdXJyZW50QW1vdW50CQD8BwQJAQp2aXJlc1ZhdWx0AQUIX2Fzc2V0SWQCEGdldEN1cnJlbnRUb3RhbHMJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAACBQ1jdXJyZW50QW1vdW50BQ1jdXJyZW50QW1vdW50BBNjdXJyZW50QXNzZXRCYWxhbmNlBAckbWF0Y2gwBQ1jdXJyZW50QW1vdW50AwkAAQIFByRtYXRjaDACFChJbnQsIEludCwgSW50LCBJbnQpBAF0BQckbWF0Y2gwCAUBdAJfMwkAAgECGkludmFsaWQgY3VycmVudEFtb3VudCB0eXBlBAZwcm9maXQJAGUCBRNjdXJyZW50QXNzZXRCYWxhbmNlCQEJYmFsYW5jZU9mAQUIX2Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQkBCWJhbGFuY2VPZgEFCF9hc3NldElkAgEsCQCkAwEFE2N1cnJlbnRBc3NldEJhbGFuY2UCASwJAKQDAQUGcHJvZml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleefC3L8=", "height": 2474332, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let k_funds = "k_funds"
5+
6+let k_vires_address = "k_vires_address"
7+
8+let k_vires_vault = "k_vires_vault"
9+
10+let k_asset_claimed_profit = "k_asset_claimed_profit"
11+
12+let k_coordinatorAddress = "k_coordinatorAddress"
13+
14+let k_manager_address = "k_manager_address"
15+
16+let k_admin_address = "k_admin_address"
17+
18+let k_initialized = "k_initialized"
19+
20+func toCompositeKey (_key,_address) = ((_key + "_") + _address)
21+
22+
23+func balanceOf (_assetId) = valueOrElse(getInteger(this, toCompositeKey(k_funds, _assetId)), 0)
24+
25+
26+func coordinator () = valueOrErrorMessage(addressFromString(getStringValue(this, k_coordinatorAddress)), "Coordinator not set Vires Asset Manager")
27+
28+
29+func managerAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_manager_address), "Manager not set")), "Manager not set")
30+
31+
32+func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
33+
34+
35+func adminAddress () = addressFromString(getStringValue(coordinator(), k_admin_address))
36+
37+
38+func viresAddress () = valueOrErrorMessage(addressFromString(getStringValue(this, k_vires_address)), "Vires not set")
39+
40+
41+func viresVault (_assetId) = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, toCompositeKey(k_vires_vault, _assetId)), ("No vault for token " + _assetId))), ("Invalid address for token " + _assetId))
42+
43+
44+func isWhitelist (_address) = (_address == toString(managerAddress()))
45+
46+
47+func updateFunds (_assetId,_value) = [IntegerEntry(toCompositeKey(k_funds, _assetId), _value)]
48+
49+
50+@Callable(i)
51+func initialize (_coordinator,_viresAddress,_quoteAssetId,_quoteAssetVault) = if (if (initialized())
52+ then true
53+ else (i.caller != this))
54+ then throw("Unable to initialize")
55+ else [StringEntry(k_coordinatorAddress, toString(addressFromStringValue(_coordinator))), StringEntry(k_vires_address, toString(addressFromStringValue(_viresAddress))), StringEntry(toCompositeKey(k_vires_vault, _quoteAssetId), toString(addressFromStringValue(_quoteAssetVault))), BooleanEntry(k_initialized, true)]
56+
57+
58+
59+@Callable(i)
60+func addTokenVault (_assetId,_vaultAddress) = if (if (!(initialized()))
61+ then true
62+ else (i.caller != adminAddress()))
63+ then throw("Invalid addTokenVault params")
64+ else [StringEntry(toCompositeKey(k_vires_vault, _assetId), toString(addressFromStringValue(_vaultAddress)))]
65+
66+
67+
68+@Callable(i)
69+func withdraw (_assetId,_amount) = if (if (if (!(isWhitelist(toString(i.caller))))
70+ then true
71+ else !(initialized()))
72+ then true
73+ else (_amount > balanceOf(_assetId)))
74+ then throw(((("Invalid withdraw params (vires asset manager) " + toString(_amount)) + " > ") + toString(balanceOf(_assetId))))
75+ else {
76+ let unstake = invoke(viresAddress(), "withdraw", [_assetId, _amount], nil)
77+ if ((unstake == unstake))
78+ then {
79+ let currentAssetBalance = (balanceOf(_assetId) - _amount)
80+ (updateFunds(_assetId, currentAssetBalance) ++ [ScriptTransfer(i.caller, _amount, fromBase58String(_assetId))])
81+ }
82+ else throw("Strict value is not equal to itself.")
83+ }
84+
85+
86+
87+@Callable(i)
88+func deposit () = {
89+ let _amount = i.payments[0].amount
90+ let _assetId = toBase58String(valueOrErrorMessage(i.payments[0].assetId, "No assetId"))
91+ if (if (!(initialized()))
92+ then true
93+ else if (!(isWhitelist(toString(i.caller))))
94+ then (i.caller != adminAddress())
95+ else false)
96+ then throw("Invalid deposit params (vires asset manager)")
97+ else {
98+ let vault = viresVault(_assetId)
99+ let stake = invoke(viresAddress(), "deposit", [toString(vault), false], [AttachedPayment(i.payments[0].assetId, _amount)])
100+ if ((stake == stake))
101+ then {
102+ let currentAssetBalance = (balanceOf(_assetId) + _amount)
103+ updateFunds(_assetId, currentAssetBalance)
104+ }
105+ else throw("Strict value is not equal to itself.")
106+ }
107+ }
108+
109+
110+
111+@Callable(i)
112+func claimProfit (_assetId) = if (if (!(initialized()))
113+ then true
114+ else (i.caller != managerAddress()))
115+ then throw("Invalid claimProfit params (vires asset manager)")
116+ else {
117+ let currentAmount = invoke(viresVault(_assetId), "getCurrentTotals", [toString(this)], nil)
118+ if ((currentAmount == currentAmount))
119+ then {
120+ let currentAssetBalance = match currentAmount {
121+ case t: (Int, Int, Int, Int) =>
122+ t._3
123+ case _ =>
124+ throw("Invalid currentAmount type")
125+ }
126+ let profit = (currentAssetBalance - balanceOf(_assetId))
127+ let unstake = invoke(viresAddress(), "withdraw", [_assetId, profit], nil)
128+ if ((unstake == unstake))
129+ then $Tuple2([ScriptTransfer(i.caller, profit, fromBase58String(_assetId))], profit)
130+ else throw("Strict value is not equal to itself.")
131+ }
132+ else throw("Strict value is not equal to itself.")
133+ }
134+
135+
136+
137+@Callable(i)
138+func view_claimProfit (_assetId) = if (!(initialized()))
139+ then throw("Invalid view_claimProfit params (vires asset manager)")
140+ else {
141+ let currentAmount = invoke(viresVault(_assetId), "getCurrentTotals", [toString(this)], nil)
142+ if ((currentAmount == currentAmount))
143+ then {
144+ let currentAssetBalance = match currentAmount {
145+ case t: (Int, Int, Int, Int) =>
146+ t._3
147+ case _ =>
148+ throw("Invalid currentAmount type")
149+ }
150+ let profit = (currentAssetBalance - balanceOf(_assetId))
151+ throw(((((toString(balanceOf(_assetId)) + ",") + toString(currentAssetBalance)) + ",") + toString(profit)))
152+ }
153+ else throw("Strict value is not equal to itself.")
154+ }
155+
156+
157+@Verifier(tx)
158+func verify () = {
159+ let coordinatorStr = getString(this, k_coordinatorAddress)
160+ if (isDefined(coordinatorStr))
161+ then {
162+ let admin = getString(addressFromStringValue(value(coordinatorStr)), k_admin_address)
163+ if (isDefined(admin))
164+ then valueOrElse(getBoolean(addressFromStringValue(value(admin)), ((("status_" + toString(this)) + "_") + toBase58String(tx.id))), false)
165+ else throw("unable to verify: admin not set in coordinator")
166+ }
167+ else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
168+ }
169+

github/deemru/w8io/169f3d6 
24.67 ms