tx · AgWioc1hgPeYvWuumpRDLuDL5HskcwCGXVQ76tvVJsJA

3P9DaReo3xvAQ5wzEzkF3Qbxm4fmxkoB1ik:  -0.00500000 Waves

2024.03.27 09:50 [4102041] smart account 3P9DaReo3xvAQ5wzEzkF3Qbxm4fmxkoB1ik > SELF 0.00000000 Waves

{ "type": 13, "id": "AgWioc1hgPeYvWuumpRDLuDL5HskcwCGXVQ76tvVJsJA", "fee": 500000, "feeAssetId": null, "timestamp": 1711522252531, "version": 2, "chainId": 87, "sender": "3P9DaReo3xvAQ5wzEzkF3Qbxm4fmxkoB1ik", "senderPublicKey": "5Zt1wYPgfh4zJWozYGoGxuudhP7Zh8H1HJTfVzqpJ8LF", "proofs": [ "2CLja4DhyVx6aCMCH9Nv3GFvepELnQA1PWYAXewnKdPL3uwTbVp3GYbXdbBST7S2kzcBp4zjX6fpdxbCk1pdxUv3" ], "script": "base64:BgIECAISACIAA1NFUAICX18ADUNPTlRSQUNUX05BTUUCEnd4ZGFvX2Z1bmRpbmcucmlkZQAGU0NBTEU4AIDC1y8ABVdBVkVTAgVXQVZFUwEHd3JhcEVycgEBcwkArAICCQCsAgIFDUNPTlRSQUNUX05BTUUCAjogBQFzAQh0aHJvd0VycgEBcwkAAgEJAQd3cmFwRXJyAQUBcwEPYXNzZXRJZFRvU3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgMJAAECBQckbWF0Y2gwAgRVbml0BQVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ9zdHJpbmdUb0Fzc2V0SWQBDWFzc2V0SWRTdHJpbmcDCQAAAgUNYXNzZXRJZFN0cmluZwUFV0FWRVMFBHVuaXQJANkEAQUNYXNzZXRJZFN0cmluZwEWa2V5TWFpblRyZWFzdXJ5QWRkcmVzcwAJALkJAgkAzAgCAgIlcwkAzAgCAhNtYWluVHJlYXN1cnlBZGRyZXNzBQNuaWwFA1NFUAEXa2V5V2F2ZXNVU0RUUG9vbEFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgIUV2F2ZXNVU0RUUG9vbEFkZHJlc3MFA25pbAUDU0VQAQ9rZXlXWERBT0FkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgIUV1hEQU9jb250cmFjdEFkZHJlc3MFA25pbAUDU0VQAQ9rZXlXWERBT2Fzc2V0SWQACQC5CQIJAMwIAgICJXMJAMwIAgIMV1hEQU9hc3NldElkBQNuaWwFA1NFUAEOa2V5VVNEVGFzc2V0SWQACQC5CQIJAMwIAgICJXMJAMwIAgILVVNEVGFzc2V0SWQFA25pbAUDU0VQARNrZXlQcm9jZXNzRmVlQW1vdW50AAkAuQkCCQDMCAICAiVzCQDMCAICEHByb2Nlc3NGZWVBbW91bnQFA25pbAUDU0VQAQprZXlIaXN0b3J5AgZhY3Rpb24EdHhJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUGYWN0aW9uCQDMCAIFBHR4SWQFA25pbAUDU0VQARRmb3JtYXRQcm9jZXNzSGlzdG9yeQMSY2xhaW1lZFdhdmVzQW1vdW50D3NlbmRXWERBT2Ftb3VudBBwcm9jZXNzRmVlQW1vdW50CQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIJAKQDAQUSY2xhaW1lZFdhdmVzQW1vdW50CQDMCAIJAKQDAQUPc2VuZFdYREFPYW1vdW50CQDMCAIJAKQDAQUQcHJvY2Vzc0ZlZUFtb3VudAUDbmlsBQNTRVAAGW1haW5UcmVhc3VyeUFkZHJlc3NTdHJpbmcJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJARZrZXlNYWluVHJlYXN1cnlBZGRyZXNzAAAZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAkBEUBleHRyTmF0aXZlKDEwNjIpAQUZbWFpblRyZWFzdXJ5QWRkcmVzc1N0cmluZwAad2F2ZXNVU0RUcG9vbEFkZHJlc3NTdHJpbmcJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJARdrZXlXYXZlc1VTRFRQb29sQWRkcmVzcwAAGndhdmVzVVNEVHBvb2xBZGRyZXNzT3JGYWlsCQERQGV4dHJOYXRpdmUoMTA2MikBBRp3YXZlc1VTRFRwb29sQWRkcmVzc1N0cmluZwASd3hkYW9BZGRyZXNzU3RyaW5nCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEPa2V5V1hEQU9BZGRyZXNzAAASd3hkYW9BZGRyZXNzT3JGYWlsCQERQGV4dHJOYXRpdmUoMTA2MikBBRJ3eGRhb0FkZHJlc3NTdHJpbmcBDXN0cmluZ1RvQXNzZXQBDWFzc2V0SWRTdHJpbmcDCQAAAgUNYXNzZXRJZFN0cmluZwUFV0FWRVMFBHVuaXQJAJsDAQUNYXNzZXRJZFN0cmluZwENYXNzZXRUb1N0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIFBVdBVkVTAQpnZXRCYWxhbmNlAgdhZGRyZXNzDWFzc2V0SWRTdHJpbmcEB2Fzc2V0SWQJAQ1zdHJpbmdUb0Fzc2V0AQUNYXNzZXRJZFN0cmluZwQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDwBwIFB2FkZHJlc3MFAWIICQDvBwEFB2FkZHJlc3MJYXZhaWxhYmxlABBwcm9jZXNzRmVlQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARNrZXlQcm9jZXNzRmVlQW1vdW50AACgwh4AEXVzZHRBc3NldElkU3RyaW5nCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEOa2V5VVNEVGFzc2V0SWQAABJ3eGRhb0Fzc2V0SWRTdHJpbmcJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAQ9rZXlXWERBT2Fzc2V0SWQAAAx3eGRhb0Fzc2V0SWQJAQ1zdHJpbmdUb0Fzc2V0AQUSd3hkYW9Bc3NldElkU3RyaW5nARZjbGFpbVdhdmVzRnJvbVRyZWFzdXJ5AAQPb2xkV2F2ZXNCYWxhbmNlCQEKZ2V0QmFsYW5jZQIFBHRoaXMFBVdBVkVTAwkAAAIFD29sZFdhdmVzQmFsYW5jZQUPb2xkV2F2ZXNCYWxhbmNlBA5nZXRXYXZlc0ludm9rZQkA/AcEBRltYWluVHJlYXN1cnlBZGRyZXNzT3JGYWlsAgVDbGFpbQUDbmlsBQNuaWwDCQAAAgUOZ2V0V2F2ZXNJbnZva2UFDmdldFdhdmVzSW52b2tlBA9uZXdXYXZlc0JhbGFuY2UJAQpnZXRCYWxhbmNlAgUEdGhpcwUFV0FWRVMDCQAAAgUPbmV3V2F2ZXNCYWxhbmNlBQ9uZXdXYXZlc0JhbGFuY2UJAGUCBQ9uZXdXYXZlc0JhbGFuY2UFD29sZFdhdmVzQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERZ2V0V2F2ZXNVU0RUUHJpY2UABBBwb29sV2F2ZXNCYWxhbmNlCQEKZ2V0QmFsYW5jZQIFGndhdmVzVVNEVHBvb2xBZGRyZXNzT3JGYWlsBQVXQVZFUwQPcG9vbFVzZHRCYWxhbmNlCQEKZ2V0QmFsYW5jZQIFGndhdmVzVVNEVHBvb2xBZGRyZXNzT3JGYWlsBRF1c2R0QXNzZXRJZFN0cmluZwQCY2gJAMwIAgMJAGYCBRBwb29sV2F2ZXNCYWxhbmNlAAAGCQEIdGhyb3dFcnIBAjZXQVZFUy9VU0RUIHBvb2wgV2F2ZXMgYmFsYW5jZSBzaG91bGQgYmUgZ3JlYXRlciB0aGF0IDAJAMwIAgMJAGYCBQ9wb29sVXNkdEJhbGFuY2UAAAYJAQh0aHJvd0VycgECNVdBVkVTL1VTRFQgcG9vbCBVU0RUIGJhbGFuY2Ugc2hvdWxkIGJlIGdyZWF0ZXIgdGhhdCAwBQNuaWwDCQAAAgUCY2gFAmNoCQBrAwUPcG9vbFVzZHRCYWxhbmNlBQZTQ0FMRTgFEHBvb2xXYXZlc0JhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEWdldFdYREFPVXNkdFByaWNlAAQLcHJpY2VJbnZva2UJAPwHBAUSd3hkYW9BZGRyZXNzT3JGYWlsAgVwcmljZQUDbmlsBQNuaWwEDGludm9rZVJlc3VsdAQHJG1hdGNoMAULcHJpY2VJbnZva2UDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAFyBQckbWF0Y2gwBAckbWF0Y2gxCQCRAwIFAXIAAAMJAAECBQckbWF0Y2gxAgNJbnQEAWkFByRtYXRjaDEFAWkFBHVuaXQFBHVuaXQECnd4REFPcHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUMaW52b2tlUmVzdWx0CQEHd3JhcEVycgECJFVuZXhwZWN0ZWQgV1hEQU8gUHJpY2UgaW52b2tlIHJlc3VsdAQCY2gJAMwIAgMJAGYCBQp3eERBT3ByaWNlAAAGCQEIdGhyb3dFcnIBAiRXWERBTyBwcmljZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAFA25pbAMJAAACBQJjaAUCY2gFCnd4REFPcHJpY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDWdldFdYREFPUHJpY2UABQZTQ0FMRTgBD2NhbGNXWERBT2Ftb3VudAELd2F2ZXNBbW91bnQEBXByaWNlCQENZ2V0V1hEQU9QcmljZQAEC3d4REFPYW1vdW50AwkAZwIAAAUFcHJpY2UJAQh0aHJvd0VycgECHnByaWNlIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAkAawMFC3dhdmVzQW1vdW50BQVwcmljZQUGU0NBTEU4BQt3eERBT2Ftb3VudAEBaQEHcHJvY2VzcwAEC3dhdmVzQW1vdW50CQEWY2xhaW1XYXZlc0Zyb21UcmVhc3VyeQADCQAAAgULd2F2ZXNBbW91bnQFC3dhdmVzQW1vdW50BA9zd2FwV2F2ZXNBbW91bnQJAGUCBQt3YXZlc0Ftb3VudAUQcHJvY2Vzc0ZlZUFtb3VudAMJAAACBQ9zd2FwV2F2ZXNBbW91bnQFD3N3YXBXYXZlc0Ftb3VudAQPd3hEQU9zZW5kQW1vdW50CQEPY2FsY1dYREFPYW1vdW50AQUPc3dhcFdhdmVzQW1vdW50AwkAAAIFD3d4REFPc2VuZEFtb3VudAUPd3hEQU9zZW5kQW1vdW50BAJjaAkAzAgCAwkAZgIFD3N3YXBXYXZlc0Ftb3VudAAABgkBCHRocm93RXJyAQI6Y2xhaW1lZCB3YXZlcyBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBwcm9jZXNzaW5nIGZlZQkAzAgCAwkAZgIFD3d4REFPc2VuZEFtb3VudAAABgkBCHRocm93RXJyAQIqV1hEQU8gc2VuZCBhbW91bnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwBQNuaWwDCQAAAgUCY2gFAmNoBBBwcm9jZXNzaW5nQ2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUQcHJvY2Vzc2luZ0NhbGxlcgUQcHJvY2Vzc0ZlZUFtb3VudAkBDXN0cmluZ1RvQXNzZXQBBQVXQVZFUwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRltYWluVHJlYXN1cnlBZGRyZXNzT3JGYWlsBQ93eERBT3NlbmRBbW91bnQFDHd4ZGFvQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5SGlzdG9yeQICB3Byb2Nlc3MJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkBFGZvcm1hdFByb2Nlc3NIaXN0b3J5AwULd2F2ZXNBbW91bnQFD3d4REFPc2VuZEFtb3VudAUQcHJvY2Vzc0ZlZUFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuADxgdHk=", "height": 4102041, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7LVQCVBXahFthkryGRqXegLy5kkaPPNvWbkeNeGrPKn4 Next: G1iiPuB9A1qrE8HYnobAwH1JvoTw9w3kW3Fbp88bZc6q Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let SEP = "__"
5+
6+let CONTRACT_NAME = "wxdao_funding.ride"
7+
8+let SCALE8 = 100000000
9+
10+let WAVES = "WAVES"
11+
12+func wrapErr (s) = ((CONTRACT_NAME + ": ") + s)
13+
14+
15+func throwErr (s) = throw(wrapErr(s))
16+
17+
18+func assetIdToString (assetId) = match assetId {
19+ case b: ByteVector =>
20+ toBase58String(b)
21+ case _: Unit =>
22+ WAVES
23+ case _ =>
24+ throw("Match error")
25+}
26+
27+
28+func stringToAssetId (assetIdString) = if ((assetIdString == WAVES))
29+ then unit
30+ else fromBase58String(assetIdString)
31+
32+
33+func keyMainTreasuryAddress () = makeString(["%s", "mainTreasuryAddress"], SEP)
34+
35+
36+func keyWavesUSDTPoolAddress () = makeString(["%s", "WavesUSDTPoolAddress"], SEP)
37+
38+
39+func keyWXDAOAddress () = makeString(["%s", "WXDAOcontractAddress"], SEP)
40+
41+
42+func keyWXDAOassetId () = makeString(["%s", "WXDAOassetId"], SEP)
43+
44+
45+func keyUSDTassetId () = makeString(["%s", "USDTassetId"], SEP)
46+
47+
48+func keyProcessFeeAmount () = makeString(["%s", "processFeeAmount"], SEP)
49+
50+
51+func keyHistory (action,txId) = makeString(["%s%s", action, txId], SEP)
52+
53+
54+func formatProcessHistory (claimedWavesAmount,sendWXDAOamount,processFeeAmount) = makeString(["%d%d%d", toString(claimedWavesAmount), toString(sendWXDAOamount), toString(processFeeAmount)], SEP)
55+
56+
57+let mainTreasuryAddressString = getStringValue(this, keyMainTreasuryAddress())
58+
59+let mainTreasuryAddressOrFail = addressFromStringValue(mainTreasuryAddressString)
60+
61+let wavesUSDTpoolAddressString = getStringValue(this, keyWavesUSDTPoolAddress())
62+
63+let wavesUSDTpoolAddressOrFail = addressFromStringValue(wavesUSDTpoolAddressString)
64+
65+let wxdaoAddressString = getStringValue(this, keyWXDAOAddress())
66+
67+let wxdaoAddressOrFail = addressFromStringValue(wxdaoAddressString)
68+
69+func stringToAsset (assetIdString) = if ((assetIdString == WAVES))
70+ then unit
71+ else toBytes(assetIdString)
72+
73+
74+func assetToString (assetId) = match assetId {
75+ case b: ByteVector =>
76+ toBase58String(b)
77+ case _ =>
78+ WAVES
79+}
80+
81+
82+func getBalance (address,assetIdString) = {
83+ let assetId = stringToAsset(assetIdString)
84+ match assetId {
85+ case b: ByteVector =>
86+ assetBalance(address, b)
87+ case _ =>
88+ wavesBalance(address).available
89+ }
90+ }
91+
92+
93+let processFeeAmount = valueOrElse(getInteger(this, keyProcessFeeAmount()), 500000)
94+
95+let usdtAssetIdString = getStringValue(this, keyUSDTassetId())
96+
97+let wxdaoAssetIdString = getStringValue(this, keyWXDAOassetId())
98+
99+let wxdaoAssetId = stringToAsset(wxdaoAssetIdString)
100+
101+func claimWavesFromTreasury () = {
102+ let oldWavesBalance = getBalance(this, WAVES)
103+ if ((oldWavesBalance == oldWavesBalance))
104+ then {
105+ let getWavesInvoke = invoke(mainTreasuryAddressOrFail, "Claim", nil, nil)
106+ if ((getWavesInvoke == getWavesInvoke))
107+ then {
108+ let newWavesBalance = getBalance(this, WAVES)
109+ if ((newWavesBalance == newWavesBalance))
110+ then (newWavesBalance - oldWavesBalance)
111+ else throw("Strict value is not equal to itself.")
112+ }
113+ else throw("Strict value is not equal to itself.")
114+ }
115+ else throw("Strict value is not equal to itself.")
116+ }
117+
118+
119+func getWavesUSDTPrice () = {
120+ let poolWavesBalance = getBalance(wavesUSDTpoolAddressOrFail, WAVES)
121+ let poolUsdtBalance = getBalance(wavesUSDTpoolAddressOrFail, usdtAssetIdString)
122+ let ch = [if ((poolWavesBalance > 0))
123+ then true
124+ else throwErr("WAVES/USDT pool Waves balance should be greater that 0"), if ((poolUsdtBalance > 0))
125+ then true
126+ else throwErr("WAVES/USDT pool USDT balance should be greater that 0")]
127+ if ((ch == ch))
128+ then fraction(poolUsdtBalance, SCALE8, poolWavesBalance)
129+ else throw("Strict value is not equal to itself.")
130+ }
131+
132+
133+func getWXDAOUsdtPrice () = {
134+ let priceInvoke = invoke(wxdaoAddressOrFail, "price", nil, nil)
135+ let invokeResult = match priceInvoke {
136+ case r: List[Any] =>
137+ match r[0] {
138+ case i: Int =>
139+ i
140+ case _ =>
141+ unit
142+ }
143+ case _ =>
144+ unit
145+ }
146+ let wxDAOprice = valueOrErrorMessage(invokeResult, wrapErr("Unexpected WXDAO Price invoke result"))
147+ let ch = [if ((wxDAOprice > 0))
148+ then true
149+ else throwErr("WXDAO price should be greater than 0")]
150+ if ((ch == ch))
151+ then wxDAOprice
152+ else throw("Strict value is not equal to itself.")
153+ }
154+
155+
156+func getWXDAOPrice () = SCALE8
157+
158+
159+func calcWXDAOamount (wavesAmount) = {
160+ let price = getWXDAOPrice()
161+ let wxDAOamount = if ((0 >= price))
162+ then throwErr("price should be greater than 0")
163+ else fraction(wavesAmount, price, SCALE8)
164+ wxDAOamount
165+ }
166+
167+
168+@Callable(i)
169+func process () = {
170+ let wavesAmount = claimWavesFromTreasury()
171+ if ((wavesAmount == wavesAmount))
172+ then {
173+ let swapWavesAmount = (wavesAmount - processFeeAmount)
174+ if ((swapWavesAmount == swapWavesAmount))
175+ then {
176+ let wxDAOsendAmount = calcWXDAOamount(swapWavesAmount)
177+ if ((wxDAOsendAmount == wxDAOsendAmount))
178+ then {
179+ let ch = [if ((swapWavesAmount > 0))
180+ then true
181+ else throwErr("claimed waves amount should be greater than processing fee"), if ((wxDAOsendAmount > 0))
182+ then true
183+ else throwErr("WXDAO send amount should be greater than 0")]
184+ if ((ch == ch))
185+ then {
186+ let processingCaller = i.originCaller
187+[ScriptTransfer(processingCaller, processFeeAmount, stringToAsset(WAVES)), ScriptTransfer(mainTreasuryAddressOrFail, wxDAOsendAmount, wxdaoAssetId), StringEntry(keyHistory("process", toBase58String(i.transactionId)), formatProcessHistory(wavesAmount, wxDAOsendAmount, processFeeAmount))]
188+ }
189+ else throw("Strict value is not equal to itself.")
190+ }
191+ else throw("Strict value is not equal to itself.")
192+ }
193+ else throw("Strict value is not equal to itself.")
194+ }
195+ else throw("Strict value is not equal to itself.")
196+ }
197+
198+

github/deemru/w8io/3ef1775 
21.07 ms