2022.07.05 20:32 [3192266] smart account 3PFHm5TYKw4vVzj4rW8s3Yso88aD73Dai1C > SELF 0.00000000 Waves
{ "type": 13, "id": "H4xbKFA1up88sUU4pCqCc9Ra22SEvAVdhqsnW1jVfsNb", "fee": 1000000, "feeAssetId": null, "timestamp": 1657042365559, "version": 1, "sender": "3PFHm5TYKw4vVzj4rW8s3Yso88aD73Dai1C", "senderPublicKey": "EGZr2MRyXu5ukMZP1QZQpcVQikDiWHfk8YDwD4pnHWXH", "proofs": [ "3QQwkxp625meeEUsbLYiV4x8JPHschLCZcxGxRauSsEvZmMZsDxLYfj7NxoYNiudg2NmNvyHwA9nwcqz9k4hNkci" ], "script": "base64:AAIFAAAAAAAAABIIAhIDCgEIEgMKAQgSBAoCCAEAAAAOAAAAAANidGMCAAAALDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTAAAAAANldGgCAAAALDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51AAAAAAR1c2R0AgAAACwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgAAAAAEdXNkYwIAAAAsNlh0SGpwWGJzOVJSSlAyU3I5R1V5VnF6QUNjYnk5VGtUaEhYbmpWQzVDREoAAAAABHVzZG4CAAAALERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAAAAAARldXJuAgAAACxEVWsyWVR4aFJvQXFNSkx1czRHMmIzZlI4aE1IVmg2ZWl5Rng1cjI5VlI2dAAAAAAFd2F2ZXMCAAAABVdBVkVTAAAAAAV2aXJlcwIAAAAsRFNiYmhMc1NUZURnNUxzaXVmazJBbmVoM0RqVnFKdVByMk05dVUxZ3d5NXAAAAAAA2RhaQIAAAAsOHpVWWJkQjhRNm1EaHBjWFl2NTJqaTh5Y2ZqNFNEWDRnSlhTN1lZM2RBNFIAAAAABGJ1c2QCAAAALDhETGlZWmpvM1VVYVJCVEhVN0F5b3FnNGlod2I2WUgxQWZYcnJoZGpRN0sxAAAAAAZvcmFjbGUJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVfDie6J0VNaFBRlO8j93/SEhv32EQCrlFgAAAAACWV1ck9yYWNsZQkBAAAAB0FkZHJlc3MAAAABAQAAABoBV0u6oXE63UA2IgEgsjTTyOjtmSXCPSGaSAAAAAAGZG9sbGFyAAAAAAAAD0JAAQAAAA1nZXRWaXJlc1ByaWNlAAAAAAQAAAAKc3dvcGZpUGFpcgkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQIAAAAjM1BKNDhQM3Ayd3ZXVWpnUWFRaVoyY0ZicjhxbXhNb2tCR2QEAAAAC2tleUJhbGFuY2VBAgAAAA9BX2Fzc2V0X2JhbGFuY2UEAAAAC2tleUJhbGFuY2VCAgAAAA9CX2Fzc2V0X2JhbGFuY2UEAAAACGJhbGFu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", "chainId": 87, "height": 3192266, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DhowA7eiYpJ4EcusbnPXAiS4XZrjMxkrSr8qXMxkkWCt Next: F1ANSchE8F642kAZ3BLzrnvmsEtTjtzMPTmQyFF3zJPb Diff:
Old | New | Differences | |
---|---|---|---|
17 | 17 | ||
18 | 18 | let vires = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" | |
19 | 19 | ||
20 | + | let dai = "8zUYbdB8Q6mDhpcXYv52ji8ycfj4SDX4gJXS7YY3dA4R" | |
21 | + | ||
22 | + | let busd = "8DLiYZjo3UUaRBTHU7Ayoqg4ihwb6YH1AfXrrhdjQ7K1" | |
23 | + | ||
20 | 24 | let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') | |
21 | 25 | ||
22 | 26 | let eurOracle = Address(base58'3P8qJyxUqizCWWtEn2zsLZVPzZAjdNGppB1') | |
34 | 38 | ||
35 | 39 | ||
36 | 40 | @Callable(i) | |
37 | - | func init () = if ( | |
38 | - | then throw(" | |
39 | - | else [StringEntry(" | |
41 | + | func init (config) = if ((i.caller != this)) | |
42 | + | then throw("only self can init") | |
43 | + | else [StringEntry("config", config)] | |
40 | 44 | ||
41 | 45 | ||
42 | 46 | ||
52 | 56 | then dollar | |
53 | 57 | else if ((tokenId == usdn)) | |
54 | 58 | then dollar | |
55 | - | else if ((tokenId == btc)) | |
56 | - | then getIntegerValue(oracle, "%s%s__price__BTC-USDT") | |
57 | - | else if ((tokenId == eth)) | |
58 | - | then getIntegerValue(oracle, "%s%s__price__ETH-USDT") | |
59 | - | else if ((tokenId == waves)) | |
60 | - | then getIntegerValue(oracle, "%s%s__price__WAVES-USDT") | |
61 | - | else if ((tokenId == eurn)) | |
62 | - | then ((dollar * dollar) / getIntegerValue(eurOracle, "%s%s__price__EUR")) | |
63 | - | else if ((tokenId == vires)) | |
64 | - | then getViresPrice() | |
65 | - | else throw("unknown token") | |
59 | + | else if ((tokenId == dai)) | |
60 | + | then dollar | |
61 | + | else if ((tokenId == busd)) | |
62 | + | then dollar | |
63 | + | else if ((tokenId == btc)) | |
64 | + | then getIntegerValue(oracle, "%s%s__price__BTC-USDT") | |
65 | + | else if ((tokenId == eth)) | |
66 | + | then getIntegerValue(oracle, "%s%s__price__ETH-USDT") | |
67 | + | else if ((tokenId == waves)) | |
68 | + | then getIntegerValue(oracle, "%s%s__price__WAVES-USDT") | |
69 | + | else if ((tokenId == eurn)) | |
70 | + | then ((dollar * dollar) / getIntegerValue(eurOracle, "%s%s__price__EUR")) | |
71 | + | else if ((tokenId == vires)) | |
72 | + | then getViresPrice() | |
73 | + | else throw("unknown token") | |
66 | 74 | } | |
67 | 75 | $Tuple2(nil, price) | |
68 | 76 | } | |
71 | 79 | ||
72 | 80 | @Callable(i) | |
73 | 81 | func overridePrice (tokenId,price) = { | |
74 | - | let | |
75 | - | if ((toString(i.caller) != | |
82 | + | let admStr = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "config"), "no config")), "bad config address"), "admin"), "no admin in config") | |
83 | + | if ((toString(i.caller) != admStr)) | |
76 | 84 | then throw("only admin can do") | |
77 | 85 | else if ((price == -1)) | |
78 | 86 | then [DeleteEntry((tokenId + "_override"))] |
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 | 18 | let vires = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" | |
19 | 19 | ||
20 | + | let dai = "8zUYbdB8Q6mDhpcXYv52ji8ycfj4SDX4gJXS7YY3dA4R" | |
21 | + | ||
22 | + | let busd = "8DLiYZjo3UUaRBTHU7Ayoqg4ihwb6YH1AfXrrhdjQ7K1" | |
23 | + | ||
20 | 24 | let oracle = Address(base58'3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF') | |
21 | 25 | ||
22 | 26 | let eurOracle = Address(base58'3P8qJyxUqizCWWtEn2zsLZVPzZAjdNGppB1') | |
23 | 27 | ||
24 | 28 | let dollar = 1000000 | |
25 | 29 | ||
26 | 30 | func getViresPrice () = { | |
27 | 31 | let swopfiPair = addressFromStringValue("3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd") | |
28 | 32 | let keyBalanceA = "A_asset_balance" | |
29 | 33 | let keyBalanceB = "B_asset_balance" | |
30 | 34 | let balanceA = getIntegerValue(swopfiPair, keyBalanceA) | |
31 | 35 | let balanceB = getIntegerValue(swopfiPair, keyBalanceB) | |
32 | 36 | fraction(balanceB, (100 * dollar), balanceA) | |
33 | 37 | } | |
34 | 38 | ||
35 | 39 | ||
36 | 40 | @Callable(i) | |
37 | - | func init () = if ( | |
38 | - | then throw(" | |
39 | - | else [StringEntry(" | |
41 | + | func init (config) = if ((i.caller != this)) | |
42 | + | then throw("only self can init") | |
43 | + | else [StringEntry("config", config)] | |
40 | 44 | ||
41 | 45 | ||
42 | 46 | ||
43 | 47 | @Callable(i) | |
44 | 48 | func price (tokenId) = { | |
45 | 49 | let price = match getInteger(this, (tokenId + "_override")) { | |
46 | 50 | case p: Int => | |
47 | 51 | p | |
48 | 52 | case _ => | |
49 | 53 | if ((tokenId == usdt)) | |
50 | 54 | then dollar | |
51 | 55 | else if ((tokenId == usdc)) | |
52 | 56 | then dollar | |
53 | 57 | else if ((tokenId == usdn)) | |
54 | 58 | then dollar | |
55 | - | else if ((tokenId == btc)) | |
56 | - | then getIntegerValue(oracle, "%s%s__price__BTC-USDT") | |
57 | - | else if ((tokenId == eth)) | |
58 | - | then getIntegerValue(oracle, "%s%s__price__ETH-USDT") | |
59 | - | else if ((tokenId == waves)) | |
60 | - | then getIntegerValue(oracle, "%s%s__price__WAVES-USDT") | |
61 | - | else if ((tokenId == eurn)) | |
62 | - | then ((dollar * dollar) / getIntegerValue(eurOracle, "%s%s__price__EUR")) | |
63 | - | else if ((tokenId == vires)) | |
64 | - | then getViresPrice() | |
65 | - | else throw("unknown token") | |
59 | + | else if ((tokenId == dai)) | |
60 | + | then dollar | |
61 | + | else if ((tokenId == busd)) | |
62 | + | then dollar | |
63 | + | else if ((tokenId == btc)) | |
64 | + | then getIntegerValue(oracle, "%s%s__price__BTC-USDT") | |
65 | + | else if ((tokenId == eth)) | |
66 | + | then getIntegerValue(oracle, "%s%s__price__ETH-USDT") | |
67 | + | else if ((tokenId == waves)) | |
68 | + | then getIntegerValue(oracle, "%s%s__price__WAVES-USDT") | |
69 | + | else if ((tokenId == eurn)) | |
70 | + | then ((dollar * dollar) / getIntegerValue(eurOracle, "%s%s__price__EUR")) | |
71 | + | else if ((tokenId == vires)) | |
72 | + | then getViresPrice() | |
73 | + | else throw("unknown token") | |
66 | 74 | } | |
67 | 75 | $Tuple2(nil, price) | |
68 | 76 | } | |
69 | 77 | ||
70 | 78 | ||
71 | 79 | ||
72 | 80 | @Callable(i) | |
73 | 81 | func overridePrice (tokenId,price) = { | |
74 | - | let | |
75 | - | if ((toString(i.caller) != | |
82 | + | let admStr = valueOrErrorMessage(getString(valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, "config"), "no config")), "bad config address"), "admin"), "no admin in config") | |
83 | + | if ((toString(i.caller) != admStr)) | |
76 | 84 | then throw("only admin can do") | |
77 | 85 | else if ((price == -1)) | |
78 | 86 | then [DeleteEntry((tokenId + "_override"))] | |
79 | 87 | else [IntegerEntry((tokenId + "_override"), price)] | |
80 | 88 | } | |
81 | 89 | ||
82 | 90 |
github/deemru/w8io/786bc32 49.63 ms ◑