tx · 5E5vWgTygqayjA4seh67fAZjgALCAsoC1L67AyNhXg12

3P6H3u6gEvsXtBxsE2ynEN4Ja8DoShNe9DX:  -0.01000000 Waves

2023.04.14 04:59 [3599217] smart account 3P6H3u6gEvsXtBxsE2ynEN4Ja8DoShNe9DX > SELF 0.00000000 Waves

{ "type": 13, "id": "5E5vWgTygqayjA4seh67fAZjgALCAsoC1L67AyNhXg12", "fee": 1000000, "feeAssetId": null, "timestamp": 1681437613336, "version": 2, "chainId": 87, "sender": "3P6H3u6gEvsXtBxsE2ynEN4Ja8DoShNe9DX", "senderPublicKey": "CyibfafNisE7HoNKGG4vtGpEBW2suztudsFunYKtJRiZ", "proofs": [ "4B5vaDFk8nAiLrx8qHzi7kuedQmc2rZxWt8XPDxLCt9WDn3ZmV1mu6TixbvEzyBitqXgT7CyeV8Qq3mGzwoKDcyo" ], "script": "base64:BgIQCAISABIECgIIARIECgIIAQsABlNjYWxlOACAwtcvAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQ10cnlHZXRCb29sZWFuAQNrZXkEByRtYXRjaDAJAJsIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAWIFByRtYXRjaDAFAWIHAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABDHRyeUdldEJpbmFyeQEDa2V5BAckbWF0Y2gwCQCcCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwBQFiAQABDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBDWdldEFzc2V0Qnl0ZXMBCmFzc2V0SWRTdHIDCQAAAgUKYXNzZXRJZFN0cgIFV0FWRVMFBHVuaXQJANkEAQUKYXNzZXRJZFN0cgEKZ2V0QmFsYW5jZQEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQphc3NldElkU3RyAAZhc3NldHMJAMwIAgEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kJAMwIAgEg8b90j2kCa66vzjuwb/Nd8MVKoTFsVrfc+ipKoeuRGkkFA25pbAAMYXNzZXREb21haW5zCQDMCAICClVTRFQtRVJDMjAJAMwIAgIKVVNEQy1FUkMyMAUDbmlsAANmZWUAoMIeAwFpARBwcm92aWRlTGlxdWlkaXR5AAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEB2Fzc2V0SW4ICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQKYXNzZXRJblN0cgkBDmdldEFzc2V0U3RyaW5nAQUHYXNzZXRJbgQLYXNzZXRBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAxhc3NldEluSW5kZXgJAM8IAgUGYXNzZXRzBQdhc3NldEluAwkAAAIFDGFzc2V0SW5JbmRleAUEdW5pdAkAAgECGG5vbi12YWxpZCBhc3NldCBhdHRhY2hlZAMJAGcCAAAFC2Fzc2V0QW1vdW50CQACAQIZYXR0YWNoIG1vcmUgdGhhbiAwIHRva2VucwQNcHJldkxpcXVpZGl0eQkBDXRyeUdldEludGVnZXIBCQCsAgIFB2FkZHJlc3MCCV9zdXBwbGllZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdhZGRyZXNzAglfc3VwcGxpZWQJAGQCBQ1wcmV2TGlxdWlkaXR5BQthc3NldEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgIPZ2xvYmFsX3N1cHBsaWVkCQBkAgkBDXRyeUdldEludGVnZXIBAg9nbG9iYWxfc3VwcGxpZWQFC2Fzc2V0QW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SW5TdHICCF9iYWxhbmNlCQBkAgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SW5TdHICCF9iYWxhbmNlBQthc3NldEFtb3VudAUDbmlsAWkBEXdpdGhkcmF3TGlxdWlkaXR5Aghhc3NldE91dAZhbW91bnQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBA1wcmV2TGlxdWlkaXR5CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUHYWRkcmVzcwIJX3N1cHBsaWVkBA1hc3NldE91dEJ5dGVzCQENZ2V0QXNzZXRCeXRlcwEFCGFzc2V0T3V0BA1hc3NldE91dEluZGV4CQDPCAIFBmFzc2V0cwUNYXNzZXRPdXRCeXRlcwMJAAACBQ1hc3NldE91dEluZGV4BQR1bml0CQACAQIZbm9uLXZhbGlkIGFzc2V0IHJlcXVlc3RlZAMJAGcCAAAFBmFtb3VudAkAAgECI29wZXJhdGlvbnMgYWJvdmUgMCB0b2tlbnMgc3VwcG9ydGVkAwkAZgIFBmFtb3VudAUNcHJldkxpcXVpZGl0eQkAAgECNXByb3ZpZGVkIGxpcXVpZGl0eSBpcyBzbWFsbGVyIHRoYW4gYW1vdW50IHRvIHdpdGhkcmF3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB2FkZHJlc3MCCV9zdXBwbGllZAkAZQIFDXByZXZMaXF1aWRpdHkFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgIPZ2xvYmFsX3N1cHBsaWVkCQBlAgkBDXRyeUdldEludGVnZXIBAg9nbG9iYWxfc3VwcGxpZWQFBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhhc3NldE91dAIIX2JhbGFuY2UJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUIYXNzZXRPdXQCCF9iYWxhbmNlBQZhbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUHYWRkcmVzcwUGYW1vdW50BQ1hc3NldE91dEJ5dGVzBQNuaWwBaQEEc3dhcAIIYXNzZXRPdXQMbWluVG9SZWNlaXZlBAdhc3NldEluCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQECmFzc2V0SW5TdHIJAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SW4EDWFzc2V0SW5BbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAxhc3NldEluSW5kZXgJAM8IAgUGYXNzZXRzBQdhc3NldEluBA1hc3NldE91dEJ5dGVzCQENZ2V0QXNzZXRCeXRlcwEFCGFzc2V0T3V0BA5hc3NldE91dEFtb3VudAkAZQIFDWFzc2V0SW5BbW91bnQJAGsDBQ1hc3NldEluQW1vdW50CQBlAgUGU2NhbGU4BQNmZWUFBlNjYWxlOAMJAAACBQxhc3NldEluSW5kZXgFBHVuaXQJAAIBAhhub24tdmFsaWQgYXNzZXQgYXR0YWNoZWQDCQBnAgAABQ1hc3NldEluQW1vdW50CQACAQIZYXR0YWNoIG1vcmUgdGhhbiAwIHRva2VucwMJAGYCBQ5hc3NldE91dEFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgIFCGFzc2V0T3V0AghfYmFsYW5jZQkAAgECGGNvbnRyYWN0IG91dCBvZiByZXNlcnZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhhc3NldE91dAIIX2JhbGFuY2UJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUIYXNzZXRPdXQCCF9iYWxhbmNlBQ5hc3NldE91dEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldEluU3RyAghfYmFsYW5jZQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldEluU3RyAghfYmFsYW5jZQUNYXNzZXRJbkFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDmFzc2V0T3V0QW1vdW50BQ1hc3NldE91dEJ5dGVzBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5coJxOA==", "height": 3599217, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: A3Zgr8N89cYbFjosZug1wvMERDbsQwEsz6e4Y3fpkkZZ Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let Scale8 = 100000000
5+
6+func tryGetInteger (key) = match getInteger(this, key) {
7+ case b: Int =>
8+ b
9+ case _ =>
10+ 0
11+}
12+
13+
14+func tryGetBoolean (key) = match getBoolean(this, key) {
15+ case b: Boolean =>
16+ b
17+ case _ =>
18+ false
19+}
20+
21+
22+func tryGetString (key) = match getString(this, key) {
23+ case b: String =>
24+ b
25+ case _ =>
26+ ""
27+}
28+
29+
30+func tryGetBinary (key) = match getBinary(this, key) {
31+ case b: ByteVector =>
32+ b
33+ case _ =>
34+ base58''
35+}
36+
37+
38+func getAssetString (assetId) = match assetId {
39+ case b: ByteVector =>
40+ toBase58String(b)
41+ case _ =>
42+ "WAVES"
43+}
44+
45+
46+func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
47+ then unit
48+ else fromBase58String(assetIdStr)
49+
50+
51+func getBalance (assetIdStr) = if ((assetIdStr == "WAVES"))
52+ then wavesBalance(this).available
53+ else assetBalance(this, fromBase58String(assetIdStr))
54+
55+
56+let assets = [base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi', base58'HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW']
57+
58+let assetDomains = ["USDT-ERC20", "USDC-ERC20"]
59+
60+let fee = 500000
61+
62+@Callable(i)
63+func provideLiquidity () = {
64+ let address = toString(i.caller)
65+ let assetIn = i.payments[0].assetId
66+ let assetInStr = getAssetString(assetIn)
67+ let assetAmount = i.payments[0].amount
68+ let assetInIndex = indexOf(assets, assetIn)
69+ if ((assetInIndex == unit))
70+ then throw("non-valid asset attached")
71+ else if ((0 >= assetAmount))
72+ then throw("attach more than 0 tokens")
73+ else {
74+ let prevLiquidity = tryGetInteger((address + "_supplied"))
75+[IntegerEntry((address + "_supplied"), (prevLiquidity + assetAmount)), IntegerEntry("global_supplied", (tryGetInteger("global_supplied") + assetAmount)), IntegerEntry((assetInStr + "_balance"), (tryGetInteger((assetInStr + "_balance")) + assetAmount))]
76+ }
77+ }
78+
79+
80+
81+@Callable(i)
82+func withdrawLiquidity (assetOut,amount) = {
83+ let address = toString(i.caller)
84+ let prevLiquidity = tryGetInteger((address + "_supplied"))
85+ let assetOutBytes = getAssetBytes(assetOut)
86+ let assetOutIndex = indexOf(assets, assetOutBytes)
87+ if ((assetOutIndex == unit))
88+ then throw("non-valid asset requested")
89+ else if ((0 >= amount))
90+ then throw("operations above 0 tokens supported")
91+ else if ((amount > prevLiquidity))
92+ then throw("provided liquidity is smaller than amount to withdraw")
93+ else [IntegerEntry((address + "_supplied"), (prevLiquidity - amount)), IntegerEntry("global_supplied", (tryGetInteger("global_supplied") - amount)), IntegerEntry((assetOut + "_balance"), (tryGetInteger((assetOut + "_balance")) - amount)), ScriptTransfer(addressFromStringValue(address), amount, assetOutBytes)]
94+ }
95+
96+
97+
98+@Callable(i)
99+func swap (assetOut,minToReceive) = {
100+ let assetIn = i.payments[0].assetId
101+ let assetInStr = getAssetString(assetIn)
102+ let assetInAmount = i.payments[0].amount
103+ let assetInIndex = indexOf(assets, assetIn)
104+ let assetOutBytes = getAssetBytes(assetOut)
105+ let assetOutAmount = (assetInAmount - fraction(assetInAmount, (Scale8 - fee), Scale8))
106+ if ((assetInIndex == unit))
107+ then throw("non-valid asset attached")
108+ else if ((0 >= assetInAmount))
109+ then throw("attach more than 0 tokens")
110+ else if ((assetOutAmount > tryGetInteger((assetOut + "_balance"))))
111+ then throw("contract out of reserves")
112+ else [IntegerEntry((assetOut + "_balance"), (tryGetInteger((assetOut + "_balance")) - assetOutAmount)), IntegerEntry((assetInStr + "_balance"), (tryGetInteger((assetInStr + "_balance")) + assetInAmount)), ScriptTransfer(i.caller, assetOutAmount, assetOutBytes)]
113+ }
114+
115+
116+@Verifier(tx)
117+func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
118+

github/deemru/w8io/873ac7e 
17.59 ms