tx · BgbxUebSwZ9JdDcbqT4tk6jSkyPQmNgfhcJYk9F5FnDL

3PQYENg7XVfcNUdD3iLmaQrRZovotzkd3DD:  -0.03700000 Waves

2022.11.17 00:55 [3385630] smart account 3PQYENg7XVfcNUdD3iLmaQrRZovotzkd3DD > SELF 0.00000000 Waves

{ "type": 13, "id": "BgbxUebSwZ9JdDcbqT4tk6jSkyPQmNgfhcJYk9F5FnDL", "fee": 3700000, "feeAssetId": null, "timestamp": 1668635735369, "version": 2, "chainId": 87, "sender": "3PQYENg7XVfcNUdD3iLmaQrRZovotzkd3DD", "senderPublicKey": "p3Jb42DMqmmPmo4hoTJHfR6vQPLcXU8FgNDNS6GiGvV", "proofs": [ "2DLpkGWggEHXCEVtg1dqv7WYhbGJj9fQC6SeZAUhaXU2BYT3LV1xmraWDZSbNJS15UqpANAdy2pVxzZsP2uxs5Nq" ], "script": "base64:BgIQCAISAwoBCBIDCgEBEgASABYAC2tfaW5zdXJhbmNlAgtrX2luc3VyYW5jZQAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzAAVrX2FtbQIFa19hbW0AD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfbWFuYWdlcl9hZGRyZXNzAhFrX21hbmFnZXJfYWRkcmVzcwAUa19jb2xsYXRlcmFsX2FkZHJlc3MCFGtfY29sbGF0ZXJhbF9hZGRyZXNzAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzAQlpbnN1cmFuY2UACQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFC2tfaW5zdXJhbmNlAAABC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwITQ29vcmRpbmF0b3Igbm90IHNldAITQ29vcmRpbmF0b3Igbm90IHNldAELaXNXaGl0ZWxpc3QBCF9hZGRyZXNzCQELdmFsdWVPckVsc2UCCQCbCAIJAQtjb29yZGluYXRvcgAJAQ50b0NvbXBvc2l0ZUtleQIFBWtfYW1tBQhfYWRkcmVzcwcBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEMYWRtaW5BZGRyZXNzAAkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAhVBZG1pbiBhZGRyZXNzIG5vdCBzZXQBDmFkbWluUHVibGljS2V5AAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBC2Nvb3JkaW5hdG9yAAUSa19hZG1pbl9wdWJsaWNfa2V5AhhBZG1pbiBwdWJsaWMga2V5IG5vdCBzZXQBCnF1b3RlQXNzZXQACQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AhNRdW90ZSBhc3NldCBub3Qgc2V0ARFxdW90ZUFzc2V0U3Rha2luZwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQCG1F1b3RlIGFzc2V0IHN0YWtpbmcgbm90IHNldAEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAg9NYW5hZ2VyIG5vdCBzZXQCD01hbmFnZXIgbm90IHNldAERY29sbGF0ZXJhbEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFFGtfY29sbGF0ZXJhbF9hZGRyZXNzAhJDb2xsYXRlcmFsIG5vdCBzZXQCEkNvbGxhdGVyYWwgbm90IHNldAEPdXBkYXRlSW5zdXJhbmNlAQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrX2luc3VyYW5jZQUBaQUDbmlsBAFpAQppbml0aWFsaXplAQxfY29vcmRpbmF0b3IDCQELaW5pdGlhbGl6ZWQACQACAQITQWxyZWFkeSBpbml0aWFsaXplZAkAzAgCCQELU3RyaW5nRW50cnkCBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwUMX2Nvb3JkaW5hdG9yCQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgUDbmlsAWkBCHdpdGhkcmF3AQdfYW1vdW50AwMDCQEBIQEDCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgYJAAACCAUBaQZjYWxsZXIJARFjb2xsYXRlcmFsQWRkcmVzcwAGCQEBIQEJAQtpbml0aWFsaXplZAAGCQBmAgUHX2Ftb3VudAkBCWluc3VyYW5jZQAJAAIBCQCsAgIJAKwCAgkArAICAiRJbnZhbGlkIHdpdGhkcmF3IHBhcmFtcyAoaW5zdXJhbmNlKSAJAKQDAQUHX2Ftb3VudAIDID4gCQCkAwEJAQlpbnN1cmFuY2UABAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQACQDMCAIFB19hbW91bnQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkBD3VwZGF0ZUluc3VyYW5jZQEJAGUCCQEJaW5zdXJhbmNlAAUHX2Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFB19hbW91bnQJAQpxdW90ZUFzc2V0AAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB2RlcG9zaXQABAdfYW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEKcXVvdGVBc3NldAAGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEDAwkBC2lzV2hpdGVsaXN0AQkApQgBCAUBaQZjYWxsZXIGCQAAAggFAWkGY2FsbGVyCQERY29sbGF0ZXJhbEFkZHJlc3MABgkAAAIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhZJbnZhbGlkIGRlcG9zaXQgcGFyYW1zBAVzdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQkBD3VwZGF0ZUluc3VyYW5jZQEJAGQCCQEJaW5zdXJhbmNlAAUHX2Ftb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBtaWdyYXRlTGlxdWlkaXR5AAQGYW1vdW50CQEJaW5zdXJhbmNlAAQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCBQZhbW91bnQJAMwIAgkA2AQBCQEKcXVvdGVBc3NldAAFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UEBXN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQZhbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAJAQ5hZG1pblB1YmxpY0tleQAZ/N6k", "height": 3385630, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E4dX1DjFmJyQnXsVYtFiGfTeTbWC4rPDwGAmoL1pjapa Next: none Diff:
OldNewDifferences
1616 let k_quote_staking = "k_quote_staking"
1717
1818 let k_manager_address = "k_manager_address"
19+
20+let k_collateral_address = "k_collateral_address"
1921
2022 let k_initialized = "k_initialized"
2123
4951 func managerAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_manager_address), "Manager not set")), "Manager not set")
5052
5153
54+func collateralAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_collateral_address), "Collateral not set")), "Collateral not set")
55+
56+
5257 func updateInsurance (i) = [IntegerEntry(k_insurance, i)]
5358
5459
6065
6166
6267 @Callable(i)
63-func withdraw (_amount) = if (if (if (!(isWhitelist(toString(i.caller))))
68+func withdraw (_amount) = if (if (if (!(if (isWhitelist(toString(i.caller)))
69+ then true
70+ else (i.caller == collateralAddress())))
6471 then true
6572 else !(initialized()))
6673 then true
6774 else (_amount > insurance()))
68- then throw(((("Invalid withdraw params " + toString(_amount)) + " > ") + toString(insurance())))
75+ then throw(((("Invalid withdraw params (insurance) " + toString(_amount)) + " > ") + toString(insurance())))
6976 else {
7077 let unstake = invoke(managerAddress(), "withdraw", [toBase58String(quoteAsset()), _amount], nil)
7178 if ((unstake == unstake))
8289 then true
8390 else !(initialized()))
8491 then true
85- else if (!(isWhitelist(toString(i.caller))))
86- then (i.caller != adminAddress())
87- else false)
92+ else !(if (if (isWhitelist(toString(i.caller)))
93+ then true
94+ else (i.caller == collateralAddress()))
95+ then true
96+ else (i.caller == adminAddress())))
8897 then throw("Invalid deposit params")
8998 else {
9099 let stake = invoke(managerAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), _amount)])
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let k_insurance = "k_insurance"
55
66 let k_coordinatorAddress = "k_coordinatorAddress"
77
88 let k_amm = "k_amm"
99
1010 let k_admin_address = "k_admin_address"
1111
1212 let k_admin_public_key = "k_admin_public_key"
1313
1414 let k_quote_asset = "k_quote_asset"
1515
1616 let k_quote_staking = "k_quote_staking"
1717
1818 let k_manager_address = "k_manager_address"
19+
20+let k_collateral_address = "k_collateral_address"
1921
2022 let k_initialized = "k_initialized"
2123
2224 func toCompositeKey (_key,_address) = ((_key + "_") + _address)
2325
2426
2527 func insurance () = valueOrElse(getInteger(this, k_insurance), 0)
2628
2729
2830 func coordinator () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, k_coordinatorAddress), "Coordinator not set")), "Coordinator not set")
2931
3032
3133 func isWhitelist (_address) = valueOrElse(getBoolean(coordinator(), toCompositeKey(k_amm, _address)), false)
3234
3335
3436 func initialized () = valueOrElse(getBoolean(this, k_initialized), false)
3537
3638
3739 func adminAddress () = addressFromString(valueOrErrorMessage(getString(coordinator(), k_admin_address), "Admin address not set"))
3840
3941
4042 func adminPublicKey () = fromBase58String(valueOrErrorMessage(getString(coordinator(), k_admin_public_key), "Admin public key not set"))
4143
4244
4345 func quoteAsset () = fromBase58String(valueOrErrorMessage(getString(coordinator(), k_quote_asset), "Quote asset not set"))
4446
4547
4648 func quoteAssetStaking () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_quote_staking), "Quote asset staking not set")), "Quote asset staking not set")
4749
4850
4951 func managerAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_manager_address), "Manager not set")), "Manager not set")
5052
5153
54+func collateralAddress () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(coordinator(), k_collateral_address), "Collateral not set")), "Collateral not set")
55+
56+
5257 func updateInsurance (i) = [IntegerEntry(k_insurance, i)]
5358
5459
5560 @Callable(i)
5661 func initialize (_coordinator) = if (initialized())
5762 then throw("Already initialized")
5863 else [StringEntry(k_coordinatorAddress, _coordinator), BooleanEntry(k_initialized, true)]
5964
6065
6166
6267 @Callable(i)
63-func withdraw (_amount) = if (if (if (!(isWhitelist(toString(i.caller))))
68+func withdraw (_amount) = if (if (if (!(if (isWhitelist(toString(i.caller)))
69+ then true
70+ else (i.caller == collateralAddress())))
6471 then true
6572 else !(initialized()))
6673 then true
6774 else (_amount > insurance()))
68- then throw(((("Invalid withdraw params " + toString(_amount)) + " > ") + toString(insurance())))
75+ then throw(((("Invalid withdraw params (insurance) " + toString(_amount)) + " > ") + toString(insurance())))
6976 else {
7077 let unstake = invoke(managerAddress(), "withdraw", [toBase58String(quoteAsset()), _amount], nil)
7178 if ((unstake == unstake))
7279 then (updateInsurance((insurance() - _amount)) ++ [ScriptTransfer(i.caller, _amount, quoteAsset())])
7380 else throw("Strict value is not equal to itself.")
7481 }
7582
7683
7784
7885 @Callable(i)
7986 func deposit () = {
8087 let _amount = i.payments[0].amount
8188 if (if (if ((i.payments[0].assetId != quoteAsset()))
8289 then true
8390 else !(initialized()))
8491 then true
85- else if (!(isWhitelist(toString(i.caller))))
86- then (i.caller != adminAddress())
87- else false)
92+ else !(if (if (isWhitelist(toString(i.caller)))
93+ then true
94+ else (i.caller == collateralAddress()))
95+ then true
96+ else (i.caller == adminAddress())))
8897 then throw("Invalid deposit params")
8998 else {
9099 let stake = invoke(managerAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), _amount)])
91100 if ((stake == stake))
92101 then updateInsurance((insurance() + _amount))
93102 else throw("Strict value is not equal to itself.")
94103 }
95104 }
96105
97106
98107
99108 @Callable(i)
100109 func migrateLiquidity () = {
101110 let amount = insurance()
102111 let unstake = invoke(quoteAssetStaking(), "unlockNeutrino", [amount, toBase58String(quoteAsset())], nil)
103112 if ((unstake == unstake))
104113 then {
105114 let stake = invoke(managerAddress(), "deposit", nil, [AttachedPayment(quoteAsset(), amount)])
106115 if ((stake == stake))
107116 then nil
108117 else throw("Strict value is not equal to itself.")
109118 }
110119 else throw("Strict value is not equal to itself.")
111120 }
112121
113122
114123 @Verifier(tx)
115124 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], adminPublicKey())
116125

github/deemru/w8io/6500d08 
39.26 ms