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