2021.10.18 20:35 [2817003] smart account 3PFHm5TYKw4vVzj4rW8s3Yso88aD73Dai1C > SELF 0.00000000 Waves
{ "type": 13, "id": "4TSrfQJeNa8ifhuZa1bVGMvL7yXS7VxtTmiNGFfwQvdv", "fee": 1000000, "feeAssetId": null, "timestamp": 1634578603435, "version": 1, "sender": "3PFHm5TYKw4vVzj4rW8s3Yso88aD73Dai1C", "senderPublicKey": "EGZr2MRyXu5ukMZP1QZQpcVQikDiWHfk8YDwD4pnHWXH", "proofs": [ "3DLXWjyeTDAC59nY5WrHS5fPYXcDRaCS7WaC1QLP93duikpjFMEw3jRUF5pKT7rxxTQJCCoHeXFuqVSthbYfsNiy" ], "script": "base64:AAIFAAAAAAAAAA8IAhIAEgMKAQgSBAoCCAEAAAAMAAAAAANidGMCAAAALDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTAAAAAANldGgCAAAALDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51AAAAAAR1c2R0AgAAACwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgAAAAAEdXNkYwIAAAAsNlh0SGpwWGJzOVJSSlAyU3I5R1V5VnF6QUNjYnk5VGtUaEhYbmpWQzVDREoAAAAABHVzZG4CAAAALERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAAAAARldXJuAgAAACxEVWsyWVR4aFJvQXFNSkx1czRHMmIzZlI4aE1IVmg2ZWl5Rng1cjI5VlI2dAAAAAAFd2F2ZXMCAAAABVdBVkVTAAAAAAV2aXJlcwIAAAAsRFNiYmhMc1NUZURnNUxzaXVmazJBbmVoM0RqVnFKdVByMk05dVUxZ3d5NXAAAAAABm9yYWNsZQkBAAAAB0FkZHJlc3MAAAABAQAAABoBV8OJ7onRU1oUFGU7yP3f9ISG/fYRAKuUWAAAAAAJZXVyT3JhY2xlCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFXS7qhcTrdQDYiASCyNNPI6O2ZJcI9IZpIAAAAAAZkb2xsYXIAAAAAAAAPQkABAAAADWdldFZpcmVzUHJpY2UAAAAABAAAAApzd29wZmlQYWlyCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABAgAAACMzUEo0OFAzcDJ3dldVamdRYVFpWjJjRmJyOHFteE1va0JHZAQAAAALa2V5QmFsYW5jZUECAAAAD0FfYXNzZXRfYmFsYW5jZQQAAAALa2V5QmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQQAAAAIYmFsYW5jZUEJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAACnN3b3BmaVBhaXIFAAAAC2tleUJhbGFuY2VBBAAAAAhiYWxhbmNlQgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAKc3dvcGZpUGFpcgUAAAALa2V5QmFsYW5jZUIJAABrAAAAAwUAAAAIYmFsYW5jZUIJAABoAAAAAgAAAAAAAAAAZAUAAAAGZG9sbGFyBQAAAAhiYWxhbmNlQgAAAAMAAAABaQEAAAAEaW5pdAAAAAADCQEAAAAJaXNEZWZpbmVkAAAAAQkABB0AAAACBQAAAAR0aGlzAgAAAAVhZG1pbgkAAAIAAAABAgAAAAxhbHJlYWR5IGluaXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAFYWRtaW4JAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAAANuaWwAAAABaQEAAAAFcHJpY2UAAAABAAAAB3Rva2VuSWQEAAAABXByaWNlBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAHdG9rZW5JZAIAAAAJX292ZXJyaWRlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAXAFAAAAByRtYXRjaDAFAAAAAXADCQAAAAAAAAIFAAAAB3Rva2VuSWQFAAAABHVzZHQFAAAABmRvbGxhcgMJAAAAAAAAAgUAAAAHdG9rZW5JZAUAAAAEdXNkYwUAAAAGZG9sbGFyAwkAAAAAAAACBQAAAAd0b2tlbklkBQAAAAR1c2RuBQAAAAZkb2xsYXIDCQAAAAAAAAIFAAAAB3Rva2VuSWQFAAAAA2J0YwkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAGb3JhY2xlAgAAABUlcyVzX19wcmljZV9fQlRDLVVTRFQDCQAAAAAAAAIFAAAAB3Rva2VuSWQFAAAAA2V0aAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAGb3JhY2xlAgAAABUlcyVzX19wcmljZV9fRVRILVVTRFQDCQAAAAAAAAIFAAAAB3Rva2VuSWQFAAAABXdhdmVzCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAZvcmFjbGUCAAAAFyVzJXNfX3ByaWNlX19XQVZFUy1VU0RUAwkAAAAAAAACBQAAAAd0b2tlbklkBQAAAARldXJuCQAAaQAAAAIJAABoAAAAAgUAAAAGZG9sbGFyBQAAAAZkb2xsYXIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAACWV1ck9yYWNsZQIAAAAQJXMlc19fcHJpY2VfX0VVUgMJAAAAAAAAAgUAAAAHdG9rZW5JZAUAAAAFdmlyZXMJAQAAAA1nZXRWaXJlc1ByaWNlAAAAAAkAAAIAAAABAgAAAA11bmtub3duIHRva2VuCQAFFAAAAAIFAAAAA25pbAUAAAAFcHJpY2UAAAABaQEAAAANb3ZlcnJpZGVQcmljZQAAAAIAAAAHdG9rZW5JZAAAAAVwcmljZQQAAAADYWRtCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwIAAAAFYWRtaW4CAAAADW5vIGFkbWluIGNvbmYDCQEAAAACIT0AAAACCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgUAAAADYWRtCQAAAgAAAAECAAAAEW9ubHkgYWRtaW4gY2FuIGRvAwkAAAAAAAACBQAAAAVwcmljZQD//////////wkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAAB3Rva2VuSWQCAAAACV9vdmVycmlkZQUAAAADbmlsCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAAB3Rva2VuSWQCAAAACV9vdmVycmlkZQUAAAAFcHJpY2UFAAAAA25pbAAAAACFtJ5h", "chainId": 87, "height": 2817003, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3TkGyxQZ7Uyavbb4FvajcEFB3wno92SafeXhMKmU9bSk Next: DhowA7eiYpJ4EcusbnPXAiS4XZrjMxkrSr8qXMxkkWCt Diff:
Old | New | Differences | |
---|---|---|---|
15 | 15 | ||
16 | 16 | let waves = "WAVES" | |
17 | 17 | ||
18 | + | let vires = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" | |
19 | + | ||
18 | 20 | let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') | |
19 | 21 | ||
20 | 22 | let eurOracle = Address(base58'3P8qJyxUqizCWWtEn2zsLZVPzZAjdNGppB1') | |
21 | 23 | ||
22 | 24 | let dollar = 1000000 | |
25 | + | ||
26 | + | func getViresPrice () = { | |
27 | + | let swopfiPair = addressFromStringValue("3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd") | |
28 | + | let keyBalanceA = "A_asset_balance" | |
29 | + | let keyBalanceB = "B_asset_balance" | |
30 | + | let balanceA = getIntegerValue(swopfiPair, keyBalanceA) | |
31 | + | let balanceB = getIntegerValue(swopfiPair, keyBalanceB) | |
32 | + | fraction(balanceB, (100 * dollar), balanceB) | |
33 | + | } | |
34 | + | ||
23 | 35 | ||
24 | 36 | @Callable(i) | |
25 | 37 | func init () = if (isDefined(getString(this, "admin"))) | |
48 | 60 | then getIntegerValue(oracle, "%s%s__price__WAVES-USDT") | |
49 | 61 | else if ((tokenId == eurn)) | |
50 | 62 | then ((dollar * dollar) / getIntegerValue(eurOracle, "%s%s__price__EUR")) | |
51 | - | else throw("unknown token") | |
63 | + | else if ((tokenId == vires)) | |
64 | + | then getViresPrice() | |
65 | + | else throw("unknown token") | |
52 | 66 | } | |
53 | 67 | $Tuple2(nil, price) | |
54 | 68 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let btc = "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" | |
5 | 5 | ||
6 | 6 | let eth = "474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" | |
7 | 7 | ||
8 | 8 | let usdt = "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" | |
9 | 9 | ||
10 | 10 | let usdc = "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" | |
11 | 11 | ||
12 | 12 | let usdn = "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" | |
13 | 13 | ||
14 | 14 | let eurn = "DUk2YTxhRoAqMJLus4G2b3fR8hMHVh6eiyFx5r29VR6t" | |
15 | 15 | ||
16 | 16 | let waves = "WAVES" | |
17 | 17 | ||
18 | + | let vires = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" | |
19 | + | ||
18 | 20 | let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') | |
19 | 21 | ||
20 | 22 | let eurOracle = Address(base58'3P8qJyxUqizCWWtEn2zsLZVPzZAjdNGppB1') | |
21 | 23 | ||
22 | 24 | let dollar = 1000000 | |
25 | + | ||
26 | + | func getViresPrice () = { | |
27 | + | let swopfiPair = addressFromStringValue("3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd") | |
28 | + | let keyBalanceA = "A_asset_balance" | |
29 | + | let keyBalanceB = "B_asset_balance" | |
30 | + | let balanceA = getIntegerValue(swopfiPair, keyBalanceA) | |
31 | + | let balanceB = getIntegerValue(swopfiPair, keyBalanceB) | |
32 | + | fraction(balanceB, (100 * dollar), balanceB) | |
33 | + | } | |
34 | + | ||
23 | 35 | ||
24 | 36 | @Callable(i) | |
25 | 37 | func init () = if (isDefined(getString(this, "admin"))) | |
26 | 38 | then throw("already init") | |
27 | 39 | else [StringEntry("admin", toString(i.caller))] | |
28 | 40 | ||
29 | 41 | ||
30 | 42 | ||
31 | 43 | @Callable(i) | |
32 | 44 | func price (tokenId) = { | |
33 | 45 | let price = match getInteger(this, (tokenId + "_override")) { | |
34 | 46 | case p: Int => | |
35 | 47 | p | |
36 | 48 | case _ => | |
37 | 49 | if ((tokenId == usdt)) | |
38 | 50 | then dollar | |
39 | 51 | else if ((tokenId == usdc)) | |
40 | 52 | then dollar | |
41 | 53 | else if ((tokenId == usdn)) | |
42 | 54 | then dollar | |
43 | 55 | else if ((tokenId == btc)) | |
44 | 56 | then getIntegerValue(oracle, "%s%s__price__BTC-USDT") | |
45 | 57 | else if ((tokenId == eth)) | |
46 | 58 | then getIntegerValue(oracle, "%s%s__price__ETH-USDT") | |
47 | 59 | else if ((tokenId == waves)) | |
48 | 60 | then getIntegerValue(oracle, "%s%s__price__WAVES-USDT") | |
49 | 61 | else if ((tokenId == eurn)) | |
50 | 62 | then ((dollar * dollar) / getIntegerValue(eurOracle, "%s%s__price__EUR")) | |
51 | - | else throw("unknown token") | |
63 | + | else if ((tokenId == vires)) | |
64 | + | then getViresPrice() | |
65 | + | else throw("unknown token") | |
52 | 66 | } | |
53 | 67 | $Tuple2(nil, price) | |
54 | 68 | } | |
55 | 69 | ||
56 | 70 | ||
57 | 71 | ||
58 | 72 | @Callable(i) | |
59 | 73 | func overridePrice (tokenId,price) = { | |
60 | 74 | let adm = valueOrErrorMessage(getString(this, "admin"), "no admin conf") | |
61 | 75 | if ((toString(i.caller) != adm)) | |
62 | 76 | then throw("only admin can do") | |
63 | 77 | else if ((price == -1)) | |
64 | 78 | then [DeleteEntry((tokenId + "_override"))] | |
65 | 79 | else [IntegerEntry((tokenId + "_override"), price)] | |
66 | 80 | } | |
67 | 81 | ||
68 | 82 |
github/deemru/w8io/786bc32 29.85 ms ◑