tx · GLCyqiub9bagxgFqpkEbYMuXGWcMURgUX3WoQi5Asxh2 3P9DaReo3xvAQ5wzEzkF3Qbxm4fmxkoB1ik: -0.00500000 Waves 2024.03.27 10:31 [4102080] smart account 3P9DaReo3xvAQ5wzEzkF3Qbxm4fmxkoB1ik > SELF 0.00000000 Waves
{ "type": 13, "id": "GLCyqiub9bagxgFqpkEbYMuXGWcMURgUX3WoQi5Asxh2", "fee": 500000, "feeAssetId": null, "timestamp": 1711524699658, "version": 2, "chainId": 87, "sender": "3P9DaReo3xvAQ5wzEzkF3Qbxm4fmxkoB1ik", "senderPublicKey": "5Zt1wYPgfh4zJWozYGoGxuudhP7Zh8H1HJTfVzqpJ8LF", "proofs": [ "2nm3e93dZZkpt2HUKpAEnTSecW86bGpW1yxSZFfFyqqBy1GXYfACYKvy8bk8sBmERvc6wQcQKt8L1KCdjbS63hcz" ], "script": "base64:BgIECAISACMAA1NFUAICX18ADUNPTlRSQUNUX05BTUUCEnd4ZGFvX2Z1bmRpbmcucmlkZQAGU0NBTEU4AIDC1y8ABVdBVkVTAgVXQVZFUwEHd3JhcEVycgEBcwkArAICCQCsAgIFDUNPTlRSQUNUX05BTUUCAjogBQFzAQh0aHJvd0VycgEBcwkAAgEJAQd3cmFwRXJyAQUBcwEPYXNzZXRJZFRvU3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgMJAAECBQckbWF0Y2gwAgRVbml0BQVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ9zdHJpbmdUb0Fzc2V0SWQBDWFzc2V0SWRTdHJpbmcDCQAAAgUNYXNzZXRJZFN0cmluZwUFV0FWRVMFBHVuaXQJANkEAQUNYXNzZXRJZFN0cmluZwEWa2V5TWFpblRyZWFzdXJ5QWRkcmVzcwAJALkJAgkAzAgCAgIlcwkAzAgCAhNtYWluVHJlYXN1cnlBZGRyZXNzBQNuaWwFA1NFUAEXa2V5V2F2ZXNVU0RUUG9vbEFkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgIUV2F2ZXNVU0RUUG9vbEFkZHJlc3MFA25pbAUDU0VQAQ9rZXlXWERBT0FkZHJlc3MACQC5CQIJAMwIAgICJXMJAMwIAgIUV1hEQU9jb250cmFjdEFkZHJlc3MFA25pbAUDU0VQAQ9rZXlXWERBT2Fzc2V0SWQACQC5CQIJAMwIAgICJXMJAMwIAgIMV1hEQU9hc3NldElkBQNuaWwFA1NFUAEOa2V5VVNEVGFzc2V0SWQACQC5CQIJAMwIAgICJXMJAMwIAgILVVNEVGFzc2V0SWQFA25pbAUDU0VQARNrZXlQcm9jZXNzRmVlQW1vdW50AAkAuQkCCQDMCAICAiVzCQDMCAICEHByb2Nlc3NGZWVBbW91bnQFA25pbAUDU0VQAQprZXlIaXN0b3J5AgZhY3Rpb24EdHhJZAkAuQkCCQDMCAICBCVzJXMJAMwIAgUGYWN0aW9uCQDMCAIFBHR4SWQFA25pbAUDU0VQARRmb3JtYXRQcm9jZXNzSGlzdG9yeQMSY2xhaW1lZFdhdmVzQW1vdW50D3NlbmRXWERBT2Ftb3VudBBwcm9jZXNzRmVlQW1vdW50CQC5CQIJAMwIAgIGJWQlZCVkCQDMCAIJAKQDAQUSY2xhaW1lZFdhdmVzQW1vdW50CQDMCAIJAKQDAQUPc2VuZFdYREFPYW1vdW50CQDMCAIJAKQDAQUQcHJvY2Vzc0ZlZUFtb3VudAUDbmlsBQNTRVAAGW1haW5UcmVhc3VyeUFkZHJlc3NTdHJpbmcJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJARZrZXlNYWluVHJlYXN1cnlBZGRyZXNzAAAZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAkBEUBleHRyTmF0aXZlKDEwNjIpAQUZbWFpblRyZWFzdXJ5QWRkcmVzc1N0cmluZwAad2F2ZXNVU0RUcG9vbEFkZHJlc3NTdHJpbmcJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJARdrZXlXYXZlc1VTRFRQb29sQWRkcmVzcwAAGndhdmVzVVNEVHBvb2xBZGRyZXNzT3JGYWlsCQERQGV4dHJOYXRpdmUoMTA2MikBBRp3YXZlc1VTRFRwb29sQWRkcmVzc1N0cmluZwASd3hkYW9BZGRyZXNzU3RyaW5nCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEPa2V5V1hEQU9BZGRyZXNzAAASd3hkYW9BZGRyZXNzT3JGYWlsCQERQGV4dHJOYXRpdmUoMTA2MikBBRJ3eGRhb0FkZHJlc3NTdHJpbmcBDXN0cmluZ1RvQXNzZXQBDWFzc2V0SWRTdHJpbmcDCQAAAgUNYXNzZXRJZFN0cmluZwUFV0FWRVMFBHVuaXQJANkEAQUNYXNzZXRJZFN0cmluZwENYXNzZXRUb1N0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWIFBVdBVkVTAQpnZXRCYWxhbmNlAgdhZGRyZXNzDWFzc2V0SWRTdHJpbmcEB2Fzc2V0SWQJAQ1zdHJpbmdUb0Fzc2V0AQUNYXNzZXRJZFN0cmluZwQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDwBwIFB2FkZHJlc3MFAWIICQDvBwEFB2FkZHJlc3MJYXZhaWxhYmxlABBwcm9jZXNzRmVlQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJARNrZXlQcm9jZXNzRmVlQW1vdW50AACgwh4AEXVzZHRBc3NldElkU3RyaW5nCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEOa2V5VVNEVGFzc2V0SWQAABJ3eGRhb0Fzc2V0SWRTdHJpbmcJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAQ9rZXlXWERBT2Fzc2V0SWQAAAx3eGRhb0Fzc2V0SWQJAQ1zdHJpbmdUb0Fzc2V0AQUSd3hkYW9Bc3NldElkU3RyaW5nARZjbGFpbVdhdmVzRnJvbVRyZWFzdXJ5AAQPb2xkV2F2ZXNCYWxhbmNlCQEKZ2V0QmFsYW5jZQIFBHRoaXMFBVdBVkVTAwkAAAIFD29sZFdhdmVzQmFsYW5jZQUPb2xkV2F2ZXNCYWxhbmNlBA5nZXRXYXZlc0ludm9rZQkA/AcEBRltYWluVHJlYXN1cnlBZGRyZXNzT3JGYWlsAgVDbGFpbQUDbmlsBQNuaWwDCQAAAgUOZ2V0V2F2ZXNJbnZva2UFDmdldFdhdmVzSW52b2tlBA9uZXdXYXZlc0JhbGFuY2UJAQpnZXRCYWxhbmNlAgUEdGhpcwUFV0FWRVMDCQAAAgUPbmV3V2F2ZXNCYWxhbmNlBQ9uZXdXYXZlc0JhbGFuY2UJAGUCBQ9uZXdXYXZlc0JhbGFuY2UFD29sZFdhdmVzQmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZ2V0UG9vbEJhbGFuY2UCC3Bvb2xBZGRyZXNzDWFzc2V0SWRTdHJpbmcEDGludm9rZVJlc3VsdAkA/AcEBQtwb29sQWRkcmVzcwIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQ1hc3NldElkU3RyaW5nBQNuaWwFA25pbAQHJG1hdGNoMAUMaW52b2tlUmVzdWx0AwkAAQIFByRtYXRjaDACA0ludAQHYmFsYW5jZQUHJG1hdGNoMAUHYmFsYW5jZQkBCHRocm93RXJyAQItZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWSB1bmV4cGVjdGVkIHZhbHVlARFnZXRXYXZlc1VTRFRQcmljZQAEEHBvb2xXYXZlc0JhbGFuY2UJAQ5nZXRQb29sQmFsYW5jZQIFGndhdmVzVVNEVHBvb2xBZGRyZXNzT3JGYWlsBQVXQVZFUwQPcG9vbFVzZHRCYWxhbmNlCQEOZ2V0UG9vbEJhbGFuY2UCBRp3YXZlc1VTRFRwb29sQWRkcmVzc09yRmFpbAURdXNkdEFzc2V0SWRTdHJpbmcEAmNoCQDMCAIDCQBmAgUQcG9vbFdhdmVzQmFsYW5jZQAABgkBCHRocm93RXJyAQI2V0FWRVMvVVNEVCBwb29sIFdhdmVzIGJhbGFuY2Ugc2hvdWxkIGJlIGdyZWF0ZXIgdGhhdCAwCQDMCAIDCQBmAgUPcG9vbFVzZHRCYWxhbmNlAAAGCQEIdGhyb3dFcnIBAjVXQVZFUy9VU0RUIHBvb2wgVVNEVCBiYWxhbmNlIHNob3VsZCBiZSBncmVhdGVyIHRoYXQgMAUDbmlsAwkAAAIFAmNoBQJjaAkAawMFD3Bvb2xVc2R0QmFsYW5jZQUGU0NBTEU4BRBwb29sV2F2ZXNCYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFnZXRXWERBT1VzZHRQcmljZQAEC3ByaWNlSW52b2tlCQD8BwQFEnd4ZGFvQWRkcmVzc09yRmFpbAIEY2FsbAkAzAgCAgVwcmljZQkAzAgCBQNuaWwFA25pbAUDbmlsBAxpbnZva2VSZXN1bHQEByRtYXRjaDAFC3ByaWNlSW52b2tlAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBcgUHJG1hdGNoMAQHJG1hdGNoMQkAkQMCBQFyAAADCQABAgUHJG1hdGNoMQIDSW50BAFpBQckbWF0Y2gxBQFpBQR1bml0BQR1bml0BAp3eERBT3ByaWNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDGludm9rZVJlc3VsdAkBB3dyYXBFcnIBAiRVbmV4cGVjdGVkIFdYREFPIFByaWNlIGludm9rZSByZXN1bHQEAmNoCQDMCAIDCQBmAgUKd3hEQU9wcmljZQAABgkBCHRocm93RXJyAQIkV1hEQU8gcHJpY2Ugc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwBQNuaWwDCQAAAgUCY2gFAmNoBQp3eERBT3ByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARJnZXRXYXZlc1dYREFPUHJpY2UABA53YXZlc1VzZHRQcmljZQkBEWdldFdhdmVzVVNEVFByaWNlAAQOd3hkYW9Vc2R0UHJpY2UJARFnZXRXWERBT1VzZHRQcmljZQAJAGsDBQ53YXZlc1VzZHRQcmljZQUGU0NBTEU4BQ53eGRhb1VzZHRQcmljZQEPY2FsY1dYREFPYW1vdW50AQt3YXZlc0Ftb3VudAQFcHJpY2UJARJnZXRXYXZlc1dYREFPUHJpY2UABAt3eERBT2Ftb3VudAMJAGcCAAAFBXByaWNlCQEIdGhyb3dFcnIBAh5wcmljZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAJAGsDBQt3YXZlc0Ftb3VudAUFcHJpY2UFBlNDQUxFOAULd3hEQU9hbW91bnQBAWkBB3Byb2Nlc3MABAt3YXZlc0Ftb3VudAkBFmNsYWltV2F2ZXNGcm9tVHJlYXN1cnkAAwkAAAIFC3dhdmVzQW1vdW50BQt3YXZlc0Ftb3VudAQPc3dhcFdhdmVzQW1vdW50CQBlAgULd2F2ZXNBbW91bnQFEHByb2Nlc3NGZWVBbW91bnQDCQAAAgUPc3dhcFdhdmVzQW1vdW50BQ9zd2FwV2F2ZXNBbW91bnQED3d4REFPc2VuZEFtb3VudAkBD2NhbGNXWERBT2Ftb3VudAEFD3N3YXBXYXZlc0Ftb3VudAMJAAACBQ93eERBT3NlbmRBbW91bnQFD3d4REFPc2VuZEFtb3VudAQCY2gJAMwIAgMJAGYCBQ9zd2FwV2F2ZXNBbW91bnQAAAYJAQh0aHJvd0VycgECOmNsYWltZWQgd2F2ZXMgYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gcHJvY2Vzc2luZyBmZWUJAMwIAgMJAGYCBQ93eERBT3NlbmRBbW91bnQAAAYJAQh0aHJvd0VycgECKldYREFPIHNlbmQgYW1vdW50IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAUDbmlsAwkAAAIFAmNoBQJjaAQQcHJvY2Vzc2luZ0NhbGxlcggFAWkMb3JpZ2luQ2FsbGVyCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEHByb2Nlc3NpbmdDYWxsZXIFEHByb2Nlc3NGZWVBbW91bnQJAQ1zdHJpbmdUb0Fzc2V0AQUFV0FWRVMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUZbWFpblRyZWFzdXJ5QWRkcmVzc09yRmFpbAUPd3hEQU9zZW5kQW1vdW50BQx3eGRhb0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleUhpc3RvcnkCAgdwcm9jZXNzCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJARRmb3JtYXRQcm9jZXNzSGlzdG9yeQMFC3dhdmVzQW1vdW50BQ93eERBT3NlbmRBbW91bnQFEHByb2Nlc3NGZWVBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgDj4d6w", "height": 4102080, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BppQSjskGs7uykaWUFPUJeQyuraVAVMo2LWRku1C8uM4 Next: none Diff:
Old | New | Differences | |
---|---|---|---|
164 | 164 | } | |
165 | 165 | ||
166 | 166 | ||
167 | - | func getWXDAOPrice () = SCALE8 | |
167 | + | func getWavesWXDAOPrice () = { | |
168 | + | let wavesUsdtPrice = getWavesUSDTPrice() | |
169 | + | let wxdaoUsdtPrice = getWXDAOUsdtPrice() | |
170 | + | fraction(wavesUsdtPrice, SCALE8, wxdaoUsdtPrice) | |
171 | + | } | |
168 | 172 | ||
169 | 173 | ||
170 | 174 | func calcWXDAOamount (wavesAmount) = { | |
171 | - | let price = | |
175 | + | let price = getWavesWXDAOPrice() | |
172 | 176 | let wxDAOamount = if ((0 >= price)) | |
173 | 177 | then throwErr("price should be greater than 0") | |
174 | 178 | else fraction(wavesAmount, price, SCALE8) |
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 | 119 | func getPoolBalance (poolAddress,assetIdString) = { | |
120 | 120 | let invokeResult = invoke(poolAddress, "getAccBalanceWrapperREADONLY", [assetIdString], nil) | |
121 | 121 | match invokeResult { | |
122 | 122 | case balance: Int => | |
123 | 123 | balance | |
124 | 124 | case _ => | |
125 | 125 | throwErr("getAccBalanceWrapperREADONLY unexpected value") | |
126 | 126 | } | |
127 | 127 | } | |
128 | 128 | ||
129 | 129 | ||
130 | 130 | func getWavesUSDTPrice () = { | |
131 | 131 | let poolWavesBalance = getPoolBalance(wavesUSDTpoolAddressOrFail, WAVES) | |
132 | 132 | let poolUsdtBalance = getPoolBalance(wavesUSDTpoolAddressOrFail, usdtAssetIdString) | |
133 | 133 | let ch = [if ((poolWavesBalance > 0)) | |
134 | 134 | then true | |
135 | 135 | else throwErr("WAVES/USDT pool Waves balance should be greater that 0"), if ((poolUsdtBalance > 0)) | |
136 | 136 | then true | |
137 | 137 | else throwErr("WAVES/USDT pool USDT balance should be greater that 0")] | |
138 | 138 | if ((ch == ch)) | |
139 | 139 | then fraction(poolUsdtBalance, SCALE8, poolWavesBalance) | |
140 | 140 | else throw("Strict value is not equal to itself.") | |
141 | 141 | } | |
142 | 142 | ||
143 | 143 | ||
144 | 144 | func getWXDAOUsdtPrice () = { | |
145 | 145 | let priceInvoke = invoke(wxdaoAddressOrFail, "call", ["price", nil], nil) | |
146 | 146 | let invokeResult = match priceInvoke { | |
147 | 147 | case r: List[Any] => | |
148 | 148 | match r[0] { | |
149 | 149 | case i: Int => | |
150 | 150 | i | |
151 | 151 | case _ => | |
152 | 152 | unit | |
153 | 153 | } | |
154 | 154 | case _ => | |
155 | 155 | unit | |
156 | 156 | } | |
157 | 157 | let wxDAOprice = valueOrErrorMessage(invokeResult, wrapErr("Unexpected WXDAO Price invoke result")) | |
158 | 158 | let ch = [if ((wxDAOprice > 0)) | |
159 | 159 | then true | |
160 | 160 | else throwErr("WXDAO price should be greater than 0")] | |
161 | 161 | if ((ch == ch)) | |
162 | 162 | then wxDAOprice | |
163 | 163 | else throw("Strict value is not equal to itself.") | |
164 | 164 | } | |
165 | 165 | ||
166 | 166 | ||
167 | - | func getWXDAOPrice () = SCALE8 | |
167 | + | func getWavesWXDAOPrice () = { | |
168 | + | let wavesUsdtPrice = getWavesUSDTPrice() | |
169 | + | let wxdaoUsdtPrice = getWXDAOUsdtPrice() | |
170 | + | fraction(wavesUsdtPrice, SCALE8, wxdaoUsdtPrice) | |
171 | + | } | |
168 | 172 | ||
169 | 173 | ||
170 | 174 | func calcWXDAOamount (wavesAmount) = { | |
171 | - | let price = | |
175 | + | let price = getWavesWXDAOPrice() | |
172 | 176 | let wxDAOamount = if ((0 >= price)) | |
173 | 177 | then throwErr("price should be greater than 0") | |
174 | 178 | else fraction(wavesAmount, price, SCALE8) | |
175 | 179 | wxDAOamount | |
176 | 180 | } | |
177 | 181 | ||
178 | 182 | ||
179 | 183 | @Callable(i) | |
180 | 184 | func process () = { | |
181 | 185 | let wavesAmount = claimWavesFromTreasury() | |
182 | 186 | if ((wavesAmount == wavesAmount)) | |
183 | 187 | then { | |
184 | 188 | let swapWavesAmount = (wavesAmount - processFeeAmount) | |
185 | 189 | if ((swapWavesAmount == swapWavesAmount)) | |
186 | 190 | then { | |
187 | 191 | let wxDAOsendAmount = calcWXDAOamount(swapWavesAmount) | |
188 | 192 | if ((wxDAOsendAmount == wxDAOsendAmount)) | |
189 | 193 | then { | |
190 | 194 | let ch = [if ((swapWavesAmount > 0)) | |
191 | 195 | then true | |
192 | 196 | else throwErr("claimed waves amount should be greater than processing fee"), if ((wxDAOsendAmount > 0)) | |
193 | 197 | then true | |
194 | 198 | else throwErr("WXDAO send amount should be greater than 0")] | |
195 | 199 | if ((ch == ch)) | |
196 | 200 | then { | |
197 | 201 | let processingCaller = i.originCaller | |
198 | 202 | [ScriptTransfer(processingCaller, processFeeAmount, stringToAsset(WAVES)), ScriptTransfer(mainTreasuryAddressOrFail, wxDAOsendAmount, wxdaoAssetId), StringEntry(keyHistory("process", toBase58String(i.transactionId)), formatProcessHistory(wavesAmount, wxDAOsendAmount, processFeeAmount))] | |
199 | 203 | } | |
200 | 204 | else throw("Strict value is not equal to itself.") | |
201 | 205 | } | |
202 | 206 | else throw("Strict value is not equal to itself.") | |
203 | 207 | } | |
204 | 208 | else throw("Strict value is not equal to itself.") | |
205 | 209 | } | |
206 | 210 | else throw("Strict value is not equal to itself.") | |
207 | 211 | } | |
208 | 212 | ||
209 | 213 |
github/deemru/w8io/6500d08 27.47 ms ◑