@sentio/sdk 1.16.3 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/aptos-processor.d.ts +21 -0
- package/lib/aptos-processor.js +65 -0
- package/lib/aptos-processor.js.map +1 -0
- package/lib/bind-options.d.ts +2 -0
- package/lib/bind-options.js +4 -1
- package/lib/bind-options.js.map +1 -1
- package/lib/builtin/eacaggregatorproxy/index.d.ts +2 -0
- package/lib/builtin/eacaggregatorproxy/index.js +22 -0
- package/lib/builtin/eacaggregatorproxy/index.js.map +1 -0
- package/lib/builtin/eacaggregatorproxy/test-utils.d.ts +6 -0
- package/lib/builtin/eacaggregatorproxy/test-utils.js +57 -0
- package/lib/builtin/eacaggregatorproxy/test-utils.js.map +1 -0
- package/lib/builtin/internal/EACAggregatorProxy.d.ts +460 -0
- package/lib/builtin/internal/EACAggregatorProxy.js +3 -0
- package/lib/builtin/internal/EACAggregatorProxy.js.map +1 -0
- package/lib/builtin/internal/eacaggregatorproxy_processor.d.ts +317 -0
- package/lib/builtin/internal/eacaggregatorproxy_processor.js +813 -0
- package/lib/builtin/internal/eacaggregatorproxy_processor.js.map +1 -0
- package/lib/builtin/internal/factories/EACAggregatorProxy__factory.d.ts +46 -0
- package/lib/builtin/internal/factories/EACAggregatorProxy__factory.js +527 -0
- package/lib/builtin/internal/factories/EACAggregatorProxy__factory.js.map +1 -0
- package/lib/builtin/internal/factories/index.d.ts +1 -0
- package/lib/builtin/internal/factories/index.js +3 -1
- package/lib/builtin/internal/factories/index.js.map +1 -1
- package/lib/builtin/internal/index.d.ts +2 -0
- package/lib/builtin/internal/index.js +3 -1
- package/lib/builtin/internal/index.js.map +1 -1
- package/lib/context.d.ts +5 -0
- package/lib/context.js +15 -3
- package/lib/context.js.map +1 -1
- package/lib/gen/processor/protos/processor.d.ts +2 -0
- package/lib/gen/processor/protos/processor.js +19 -0
- package/lib/gen/processor/protos/processor.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -1
- package/lib/index.js.map +1 -1
- package/lib/meter.js +17 -0
- package/lib/meter.js.map +1 -1
- package/lib/numberish.js +7 -0
- package/lib/numberish.js.map +1 -1
- package/lib/processor-state.d.ts +2 -0
- package/lib/processor-state.js +1 -0
- package/lib/processor-state.js.map +1 -1
- package/lib/service.js +47 -0
- package/lib/service.js.map +1 -1
- package/lib/solana/builtin/spl-token-processor.d.ts +16 -1
- package/lib/solana/builtin/spl-token-processor.js +120 -0
- package/lib/solana/builtin/spl-token-processor.js.map +1 -1
- package/lib/solana/builtin/types.d.ts +97 -0
- package/lib/solana/builtin/types.js.map +1 -1
- package/lib/test/{mirrorworld.d.ts → aptos.test.d.ts} +0 -0
- package/lib/test/aptos.test.js +142 -0
- package/lib/test/aptos.test.js.map +1 -0
- package/lib/test/erc20-template.test.js +21 -2
- package/lib/test/erc20-template.test.js.map +1 -1
- package/lib/test/erc20.js +4 -5
- package/lib/test/erc20.js.map +1 -1
- package/lib/test/erc20.test.js +0 -13
- package/lib/test/erc20.test.js.map +1 -1
- package/lib/test/{tic-tac-toe.d.ts → error-capture.test.d.ts} +0 -0
- package/lib/test/error-capture.test.js +76 -0
- package/lib/test/error-capture.test.js.map +1 -0
- package/lib/test/solana.test.js +1 -17
- package/lib/test/solana.test.js.map +1 -1
- package/lib/test/souffl3.d.ts +1 -0
- package/lib/test/souffl3.js +24 -0
- package/lib/test/souffl3.js.map +1 -0
- package/lib/test/sui.test.js +28 -1
- package/lib/test/sui.test.js.map +1 -1
- package/lib/test/test-provider.d.ts +1 -1
- package/lib/test/test-provider.js +11 -5
- package/lib/test/test-provider.js.map +1 -1
- package/lib/test/types/{game_wallet.d.ts → basic_1.d.ts} +2 -21
- package/lib/test/types/basic_1.js +66 -0
- package/lib/test/types/basic_1.js.map +1 -0
- package/lib/test/types/basic_1_processor.d.ts +13 -0
- package/lib/test/types/basic_1_processor.js +41 -0
- package/lib/test/types/basic_1_processor.js.map +1 -0
- package/lib/utils/chainlink-oracles-goerli.csv +8 -0
- package/lib/utils/chainlink-oracles.csv +217 -0
- package/lib/utils/dex-price.d.ts +22 -0
- package/lib/utils/dex-price.js +114 -0
- package/lib/utils/dex-price.js.map +1 -0
- package/lib/utils/dex-price.test.d.ts +1 -0
- package/lib/utils/dex-price.test.js +22 -0
- package/lib/utils/dex-price.test.js.map +1 -0
- package/lib/utils/erc20.d.ts +1 -0
- package/lib/utils/erc20.js +7 -3
- package/lib/utils/erc20.js.map +1 -1
- package/lib/utils/index.d.ts +3 -1
- package/lib/utils/index.js +6 -1
- package/lib/utils/index.js.map +1 -1
- package/package.json +3 -3
- package/src/abis/EACAggregatorProxy.json +227 -0
- package/src/aptos-processor.ts +75 -0
- package/src/bind-options.ts +1 -0
- package/src/builtin/eacaggregatorproxy/index.ts +6 -0
- package/src/builtin/eacaggregatorproxy/test-utils.ts +89 -0
- package/src/builtin/internal/EACAggregatorProxy.ts +861 -0
- package/src/builtin/internal/eacaggregatorproxy_processor.ts +1417 -0
- package/src/builtin/internal/factories/EACAggregatorProxy__factory.ts +533 -0
- package/src/builtin/internal/factories/index.ts +1 -0
- package/src/builtin/internal/index.ts +2 -0
- package/src/context.ts +15 -2
- package/src/gen/processor/protos/processor.ts +20 -0
- package/src/index.ts +2 -1
- package/src/meter.ts +18 -2
- package/src/numberish.ts +7 -0
- package/src/processor-state.ts +3 -0
- package/src/service.ts +51 -0
- package/src/solana/builtin/spl-token-processor.ts +137 -1
- package/src/solana/builtin/types.ts +11 -0
- package/src/test/abis/solana/basic_1.json +62 -0
- package/src/test/aptos.test.ts +148 -0
- package/src/test/erc20-template.test.ts +26 -3
- package/src/test/erc20.test.ts +1 -15
- package/src/test/erc20.ts +4 -5
- package/src/test/error-capture.test.ts +82 -0
- package/src/test/solana.test.ts +1 -18
- package/src/test/souffl3.ts +24 -0
- package/src/test/sui.test.ts +31 -2
- package/src/test/test-provider.ts +11 -5
- package/src/test/types/basic_1.ts +62 -0
- package/src/test/types/basic_1_processor.ts +41 -0
- package/src/utils/chainlink-oracles-goerli.csv +8 -0
- package/src/utils/chainlink-oracles.csv +217 -0
- package/src/utils/dex-price.test.ts +24 -0
- package/src/utils/dex-price.ts +136 -0
- package/src/utils/erc20.ts +5 -1
- package/src/utils/index.ts +3 -1
- package/lib/test/erc20-template.d.ts +0 -1
- package/lib/test/erc20-template.js +0 -23
- package/lib/test/erc20-template.js.map +0 -1
- package/lib/test/mirrorworld.js +0 -42
- package/lib/test/mirrorworld.js.map +0 -1
- package/lib/test/tic-tac-toe.js +0 -31
- package/lib/test/tic-tac-toe.js.map +0 -1
- package/lib/test/types/game_wallet.js +0 -1396
- package/lib/test/types/game_wallet.js.map +0 -1
- package/lib/test/types/game_wallet_processor.d.ts +0 -107
- package/lib/test/types/game_wallet_processor.js +0 -105
- package/lib/test/types/game_wallet_processor.js.map +0 -1
- package/src/test/abis/solana/mirrorworld.json +0 -1392
- package/src/test/erc20-template.ts +0 -25
- package/src/test/mirrorworld.ts +0 -40
- package/src/test/sentio.yaml +0 -4
- package/src/test/tic-tac-toe.ts +0 -31
- package/src/test/types/game_wallet.ts +0 -1392
- package/src/test/types/game_wallet_processor.ts +0 -113
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
1INCH / ETH,1inch,Crypto,0x72AFAECF99C9d9C8215fF44C77B94B99C28741e8
|
|
2
|
+
1INCH / USD,1inch,Crypto,0xc929ad75B72593967DE83E7F7Cda0493458261D9
|
|
3
|
+
AAPL / USD,Apple,Equities,0x139C8512Cde1778e9b9a8e721ce1aEbd4dD43587
|
|
4
|
+
AAVE / ETH,Aave,Crypto,0x6Df09E975c830ECae5bd4eD9d90f3A95a4f88012
|
|
5
|
+
AAVE / USD,Aave,Crypto,0x547a514d5e3769680Ce22B2361c10Ea13619e8a9
|
|
6
|
+
ADA / USD,Cardano,Crypto,0xAE48c91dF1fE419994FFDa27da09D5aC69c30f55
|
|
7
|
+
ADX / USD,Adex,Crypto,0x231e764B44b2C1b7Ca171fa8021A24ed520Cde10
|
|
8
|
+
ALBT / USD,Aliiance Block,Crypto,0x057e52Fb830318E096CD96F369f0DB4B196fBfa7
|
|
9
|
+
ALCX / ETH,Alchemix,Crypto,0x194a9AaF2e0b67c35915cD01101585A33Fe25CAa
|
|
10
|
+
ALCX / USD,Alchemix,Crypto,0xc355e4C0B3ff4Ed0B49EaACD55FE29B311f42976
|
|
11
|
+
ALGO / USD,Algorand,Crypto,0xC33c0400dBD8043c5bE09512501Ce59253D499cE
|
|
12
|
+
ALPHA / ETH,Alpha Finance,Crypto,0x89c7926c7c15fD5BFDB1edcFf7E7fC8283B578F6
|
|
13
|
+
AMP / USD,Amp,Crypto,0x8797ABc4641dE76342b8acE9C63e3301DC35e3d8
|
|
14
|
+
AMPL / ETH,Ampleforth,Crypto,0x492575FDD11a0fCf2C6C719867890a7648d526eB
|
|
15
|
+
AMPL / USD,Ampleforth,Crypto,0xe20CA8D7546932360e37E9D72c1a47334af57706
|
|
16
|
+
AMZN / USD,Amazon,Equities,0x8994115d287207144236c13Be5E2bDbf6357D9Fd
|
|
17
|
+
ANKR / USD,Ankr,Crypto,0x7eed379bf00005CfeD29feD4009669dE9Bcc21ce
|
|
18
|
+
ANT / ETH,Aragon,Crypto,0x8f83670260F8f7708143b836a2a6F11eF0aBac01
|
|
19
|
+
APE / ETH,APECoin,Crypto,0xc7de7f4d4C9c991fF62a07D18b3E31e349833A18
|
|
20
|
+
APE / USD,APECoin,Crypto,0xD10aBbC76679a20055E167BB80A24ac851b37056
|
|
21
|
+
ARPA / USD,ARPA Chain,Crypto,0xc40ec815A2f8eb9912BD688d3bdE6B6D50A37ff2
|
|
22
|
+
ATOM / ETH,Cosmos,Crypto,0x15c8eA24Ba2d36671Fa22aD4Cff0a8eafe144352
|
|
23
|
+
ATOM / USD,Cosmos,Crypto,0xDC4BDB458C6361093069Ca2aD30D74cc152EdC75
|
|
24
|
+
AUD / USD,Australian Dollar,Forex,0x77F9710E7d0A19669A13c055F62cd80d313dF022
|
|
25
|
+
AVAX / USD,Avalanche,Crypto,0xFF3EEb22B5E3dE6e705b44749C2559d704923FD7
|
|
26
|
+
AXS / ETH,Axie Infinity,Crypto,0x8B4fC5b68cD50eAc1dD33f695901624a4a1A0A8b
|
|
27
|
+
BADGER / ETH,Badger DAO,Crypto,0x58921Ac140522867bf50b9E009599Da0CA4A2379
|
|
28
|
+
BADGER / USD,Badger DAO,Crypto,0x66a47b7206130e6FF64854EF0E1EDfa237E65339
|
|
29
|
+
BAL / ETH,Balancer,Crypto,0xC1438AA3823A6Ba0C159CfA8D98dF5A994bA120b
|
|
30
|
+
BAL / USD,Balancer,Crypto,0xdF2917806E30300537aEB49A7663062F4d1F2b5F
|
|
31
|
+
BAND / ETH,Band Protocol,Crypto,0x0BDb051e10c9718d1C29efbad442E88D38958274
|
|
32
|
+
BAND / USD,Band Protocol,Crypto,0x919C77ACc7373D000b329c1276C76586ed2Dd19F
|
|
33
|
+
BAT / ETH,Basic Attention Token,Crypto,0x0d16d4528239e9ee52fa531af613AcdB23D88c94
|
|
34
|
+
BAT / USD,Basic Attention Token,Crypto,0x9441D7556e7820B5ca42082cfa99487D56AcA958
|
|
35
|
+
BCH / USD,Bitcoin Cash,Crypto,0x9F0F69428F923D6c95B781F89E165C9b2df9789D
|
|
36
|
+
BETA / ETH,Beta Finance,Crypto,0x8eb7bAe1eCd3dcf87159Eb5BACe78209722F795B
|
|
37
|
+
BIT / USD,BitDAO,Crypto,0x7b33EbfA52F215a30FaD5a71b3FeE57a4831f1F0
|
|
38
|
+
BNB / ETH,BNB,Crypto,0xc546d2d06144F9DD42815b8bA46Ee7B8FcAFa4a2
|
|
39
|
+
BNB / USD,BNB,Crypto,0x14e613AC84a31f709eadbdF89C6CC390fDc9540A
|
|
40
|
+
BNT / ETH,Bancor,Crypto,0xCf61d1841B178fe82C8895fe60c2EDDa08314416
|
|
41
|
+
BNT / USD,Bancor,Crypto,0x1E6cF0D433de4FE882A437ABC654F58E1e78548c
|
|
42
|
+
BOND / ETH,Barnbridge,Crypto,0xdd22A54e05410D8d1007c38b5c7A3eD74b855281
|
|
43
|
+
BRL / USD,Brazilian Real,Forex,0x971E8F1B779A5F1C36e1cd7ef44Ba1Cc2F5EeE0f
|
|
44
|
+
BTC / ETH,Bitcoin,Crypto,0xdeb288F737066589598e9214E782fa5A8eD689e8
|
|
45
|
+
BTC / USD,Bitcoin,Crypto,0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c
|
|
46
|
+
BUSD / ETH,Binance USD,Crypto,0x614715d2Af89E6EC99A233818275142cE88d1Cfd
|
|
47
|
+
BUSD / USD,Binance USD,Crypto,0x833D8Eb16D306ed1FbB5D7A2E019e106B960965A
|
|
48
|
+
C98 / USD,C98,Crypto,0xE95CDc33E1F5BfE7eB26f45E29C6C9032B97db7F
|
|
49
|
+
CAD / USD,Canadian Dollar,Forex,0xa34317DB73e77d453b1B8d04550c44D10e981C8e
|
|
50
|
+
CAKE / USD,Pancakeswap,Crypto,0xEb0adf5C06861d6c07174288ce4D0a8128164003
|
|
51
|
+
CEL / ETH,Celsius,Crypto,0x75FbD83b4bd51dEe765b2a01e8D3aa1B020F9d33
|
|
52
|
+
CELO / ETH,Celo,Crypto,0x9ae96129ed8FE0C707D6eeBa7b90bB1e139e543e
|
|
53
|
+
CHF / USD,Swiss Franc,Forex,0x449d117117838fFA61263B61dA6301AA2a88B13A
|
|
54
|
+
CNY / USD,Chinese Yuan,Forex,0xeF8A4aF35cd47424672E3C590aBD37FBB7A7759a
|
|
55
|
+
COMP / ETH,Compound,Crypto,0x1B39Ee86Ec5979ba5C322b826B3ECb8C79991699
|
|
56
|
+
COMP / USD,Compound,Crypto,0xdbd020CAeF83eFd542f4De03e3cF0C28A4428bd5
|
|
57
|
+
CREAM / ETH,CREAM Finance,Crypto,0x82597CFE6af8baad7c0d441AA82cbC3b51759607
|
|
58
|
+
CRO / ETH,Cronos,Crypto,0xcA696a9Eb93b81ADFE6435759A29aB4cf2991A96
|
|
59
|
+
CRO / USD,Cronos,Crypto,0x00Cb80Cf097D9aA9A3779ad8EE7cF98437eaE050
|
|
60
|
+
CRV / ETH,Curve DAO,Crypto,0x8a12Be339B0cD1829b91Adc01977caa5E9ac121e
|
|
61
|
+
CRV / USD,Curve DAO,Crypto,0xCd627aA160A6fA45Eb793D19Ef54f5062F20f33f
|
|
62
|
+
CSPR / USD,Casper Network,Crypto,0x9e37a8Ee3bFa8eD6783Db031Dc458d200b226074
|
|
63
|
+
CTSI / ETH,Cartesi,Crypto,0x0a1d1b9847d602e789be38B802246161FFA24930
|
|
64
|
+
CVX / ETH,Convex Finance,Crypto,0xC9CbF687f43176B302F03f5e58470b77D07c61c6
|
|
65
|
+
CVX / USD,Convex Finance,Crypto,0xd962fC30A72A84cE50161031391756Bf2876Af5D
|
|
66
|
+
DAI / ETH,DAI,Crypto,0x773616E4d11A78F511299002da57A0a94577F1f4
|
|
67
|
+
DAI / USD,DAI,Crypto,0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9
|
|
68
|
+
DASH / USD,Dash,Crypto,0xFb0cADFEa136E9E343cfb55B863a6Df8348ab912
|
|
69
|
+
DIA / USD,DIA,Equities,0xeE636E1f7A0A846EEc2385E729CeA7D1b339D40D
|
|
70
|
+
DODO / USD,Dodo,Crypto,0x9613A51Ad59EE375e6D8fa12eeef0281f1448739
|
|
71
|
+
DOGE / USD,Dogecoin,Crypto,0x2465CefD3b488BE410b941b1d4b2767088e2A028
|
|
72
|
+
DOT / USD,Polkadot,Crypto,0x1C07AFb8E2B827c5A4739C6d59Ae3A5035f28734
|
|
73
|
+
DPI / USD,DefiPulse Index,Crypto,0xD2A593BF7594aCE1faD597adb697b5645d5edDB2
|
|
74
|
+
DYDX / USD,dYdX,Crypto,0x478909D4D798f3a1F11fFB25E4920C959B4aDe0b
|
|
75
|
+
ENJ / ETH,Enjin Coin,Crypto,0x24D9aB51950F3d62E9144fdC2f3135DAA6Ce8D1B
|
|
76
|
+
ENJ / USD,Enjin Coin,Crypto,0x23905C55dC11D609D5d11Dc604905779545De9a7
|
|
77
|
+
ENS / USD,Ethereum Name Service,Crypto,0x5C00128d4d1c2F4f652C267d7bcdD7aC99C16E16
|
|
78
|
+
EOS / USD,EOS,Crypto,0x10a43289895eAff840E8d45995BBa89f9115ECEe
|
|
79
|
+
ERN / USD,Ethernity Chain,Crypto,0x0a87e12689374A4EF49729582B474a1013cceBf8
|
|
80
|
+
ETC / USD,Ethereum Classic,Crypto,0xaEA2808407B7319A31A383B6F8B60f04BCa23cE2
|
|
81
|
+
ETH / BTC,Ethereum,Crypto,0xAc559F25B1619171CbC396a50854A3240b6A4e99
|
|
82
|
+
ETH / USD,Ethereum,Crypto,0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419
|
|
83
|
+
EUR / USD,Euro,Forex,0xb49f677943BC038e9857d61E7d053CaA2C1734C1
|
|
84
|
+
EURT / USD,Tether Euro,Crypto,0x01D391A48f4F7339aC64CA2c83a07C22F95F587a
|
|
85
|
+
FARM / ETH,Harvest Finance,Crypto,0x611E0d2709416E002A3f38085e4e1cf77c015921
|
|
86
|
+
FB / USD,Meta,Equities,0xCe1051646393087e706288C1B57Fd26446657A7f
|
|
87
|
+
FEI / ETH,FEI Protocol,Crypto,0x7F0D2c2838c6AC24443d13e23d99490017bDe370
|
|
88
|
+
FEI / USD,FEI Protocol,Crypto,0x31e0a88fecB6eC0a411DBe0e9E76391498296EE9
|
|
89
|
+
FIL / ETH,Filecoin,Crypto,0x0606Be69451B1C9861Ac6b3626b99093b713E801
|
|
90
|
+
FLOW / USD,Flow,Crypto,0xD9BdD9f5ffa7d89c846A5E3231a093AE4b3469D2
|
|
91
|
+
FOR / USD,ForTube,Crypto,0x456834f736094Fb0AAD40a9BBc9D4a0f37818A54
|
|
92
|
+
FORTH / USD,Ampleforth Governance,Crypto,0x7D77Fd73E468baECe26852776BeaF073CDc55fA0
|
|
93
|
+
FOX / USD,Shapeshift FOX,Crypto,0xccA02FFEFAcE21325befD6616cB4Ba5fCB047480
|
|
94
|
+
FRAX / ETH,FRAX,Crypto,0x14d04Fff8D21bd62987a5cE9ce543d2F1edF5D3E
|
|
95
|
+
FRAX / USD,FRAX,Crypto,0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD
|
|
96
|
+
FTM / ETH,Fantom,Crypto,0x2DE7E4a9488488e0058B95854CC2f7955B35dC9b
|
|
97
|
+
FTT / ETH,FTX Token,Crypto,0xF0985f7E2CaBFf22CecC5a71282a89582c382EFE
|
|
98
|
+
FTT / USD,FTX Token,Crypto,0x84e3946C6df27b453315a1B38e4dECEF23d9F16F
|
|
99
|
+
FXS / USD,Frax Share,Crypto,0x6Ebc52C8C1089be9eB3945C4350B68B8E4C2233f
|
|
100
|
+
GBP / USD,Pound Sterling,Forex,0x5c0Ab2d9b5a7ed9f470386e82BB36A3613cDd4b5
|
|
101
|
+
GHST / ETH,Aavegotchi,Crypto,0x5877385f9F51B46Bbd93F24AD278D681E1Fd2A93
|
|
102
|
+
GLM / USD,Golen,Crypto,0x83441C3A10F4D05de6e0f2E849A850Ccf27E6fa7
|
|
103
|
+
GNO / ETH,Gnosis,Crypto,0xA614953dF476577E90dcf4e3428960e221EA4727
|
|
104
|
+
GOOGL / USD,Alphabet,Equities,0x36D39936BeA501755921beB5A382a88179070219
|
|
105
|
+
GRT / ETH,The Graph,Crypto,0x17D054eCac33D91F7340645341eFB5DE9009F1C1
|
|
106
|
+
GRT / USD,The Graph,Crypto,0x86cF33a451dE9dc61a2862FD94FF4ad4Bd65A5d2
|
|
107
|
+
GTC / ETH,GitCoin,Crypto,0x0e773A17a01E2c92F5d4c53435397E2bd48e215F
|
|
108
|
+
GUSD / ETH,Gemini Dollar,Crypto,0x96d15851CBac05aEe4EFD9eA3a3DD9BDEeC9fC28
|
|
109
|
+
GUSD / USD,Gemini Dollar,Crypto,0xa89f5d2365ce98B3cD68012b6f503ab1416245Fc
|
|
110
|
+
HBAR / USD,Hedera Hashgraph,Crypto,0x38C5ae3ee324ee027D88c5117ee58d07c9b4699b
|
|
111
|
+
HIGH / USD,Highstreet,Crypto,0xe2F95bC12FE8a3C35684Be7586C39fD7c0E5b403
|
|
112
|
+
HT / USD,Huobi Token,Crypto,0xE1329B3f6513912CAf589659777b66011AEE5880
|
|
113
|
+
HUSD / ETH,HUSD,Crypto,0x1B61BAD1495161bCb6C03DDB0E41622c0270bB1A
|
|
114
|
+
ILV / ETH,Illuvium,Crypto,0xf600984CCa37cd562E74E3EE514289e3613ce8E4
|
|
115
|
+
IMX / USD,Immutable X,Crypto,0xBAEbEFc1D023c0feCcc047Bff42E75F15Ff213E6
|
|
116
|
+
INJ / USD,Injective Protocol,Crypto,0xaE2EbE3c4D20cE13cE47cbb49b6d7ee631Cd816e
|
|
117
|
+
INR / USD,Indian Rupee,Forex,0x605D5c2fBCeDb217D7987FC0951B5753069bC360
|
|
118
|
+
IOST / USD,IOST,Crypto,0xd0935838935349401c73a06FCde9d63f719e84E5
|
|
119
|
+
IOTX / USD,IoTeX,Crypto,0x96c45535d235148Dc3ABA1E48A6E3cFB3510f4E2
|
|
120
|
+
JPY / USD,Japanese Yen,Forex,0xBcE206caE7f0ec07b545EddE332A47C2F75bbeb3
|
|
121
|
+
KNC / ETH,Kyber Network Crystal,Crypto,0x656c0544eF4C98A6a98491833A89204Abb045d6b
|
|
122
|
+
KNC / USD,Kyber Network,Crypto,0xf8fF43E991A81e6eC886a3D281A2C6cC19aE70Fc
|
|
123
|
+
KP3R / ETH,Keep3r v1,Crypto,0xe7015CCb7E5F788B8c1010FC22343473EaaC3741
|
|
124
|
+
KRW / USD,Korean Won,Forex,0x01435677FB11763550905594A16B645847C1d0F3
|
|
125
|
+
KSM / USD,Kusama,Crypto,0x06E4164E24E72B879D93360D1B9fA05838A62EB5
|
|
126
|
+
LDO / ETH,Lido DAO,Crypto,0x4e844125952D32AcdF339BE976c98E22F6F318dB
|
|
127
|
+
LINK / ETH,Chainlink,Crypto,0xDC530D9457755926550b59e8ECcdaE7624181557
|
|
128
|
+
LINK / USD,Chainlink,Crypto,0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c
|
|
129
|
+
LON / ETH,Tokenlon,Crypto,0x13A8F2cC27ccC2761ca1b21d2F3E762445f201CE
|
|
130
|
+
LRC / ETH,Loopring,Crypto,0x160AC928A16C93eD4895C2De6f81ECcE9a7eB7b4
|
|
131
|
+
LTC / USD,Litecoin,Crypto,0x6AF09DF7563C363B5763b9102712EbeD3b9e859B
|
|
132
|
+
LUSD / USD,Liquity USD,Crypto,0x3D7aE7E594f2f2091Ad8798313450130d0Aba3a0
|
|
133
|
+
MANA / ETH,Decentraland,Crypto,0x82A44D92D6c329826dc557c5E1Be6ebeC5D5FeB9
|
|
134
|
+
MANA / USD,Decentraland,Crypto,0x56a4857acbcfe3a66965c251628B1c9f1c408C19
|
|
135
|
+
MATIC / USD,Polygon (MATIC),Crypto,0x7bAC85A8a13A4BcD8abb3eB7d6b4d632c5a57676
|
|
136
|
+
MIM / USD,Magic Internet Money,Crypto,0x7A364e8770418566e3eb2001A96116E6138Eb32F
|
|
137
|
+
MKR / ETH,Maker,Crypto,0x24551a8Fb2A7211A25a17B1481f043A8a8adC7f2
|
|
138
|
+
MKR / USD,Maker,Crypto,0xec1D1B3b0443256cc3860e24a46F108e699484Aa
|
|
139
|
+
MLN / ETH,Melon,Crypto,0xDaeA8386611A157B08829ED4997A8A62B557014C
|
|
140
|
+
MSFT / USD,Microsoft,Equities,0x021Fb44bfeafA0999C7b07C4791cf4B859C3b431
|
|
141
|
+
NEAR / USD,NEAR Protocol,Crypto,0xC12A6d1D827e23318266Ef16Ba6F397F2F91dA9b
|
|
142
|
+
NFLX / USD,Netflix,Equities,0x67C2e69c5272B94AF3C90683a9947C39Dc605ddE
|
|
143
|
+
NMR / ETH,Numeraire,Crypto,0x9cB2A01A7E64992d32A34db7cEea4c919C391f6A
|
|
144
|
+
NMR / USD,Numeraire,Crypto,0xcC445B35b3636bC7cC7051f4769D8982ED0d449A
|
|
145
|
+
NZD / USD,New Zealand Dollar,Forex,0x3977CFc9e4f29C184D4675f4EB8e0013236e5f3e
|
|
146
|
+
OCEAN / ETH,Ocean Protocol,Crypto,0x9b0FC4bb9981e5333689d69BdBF66351B9861E62
|
|
147
|
+
OGN / ETH,Origin Protocol,Crypto,0x2c881B6f3f6B5ff6C975813F87A4dad0b241C15b
|
|
148
|
+
OHMv2 / ETH,Olympus v2,Crypto,0x9a72298ae3886221820B1c878d12D872087D3a23
|
|
149
|
+
OKB / USD,OKB,Crypto,0x22134617Ae0f6CA8D89451e5Ae091c94f7D743DC
|
|
150
|
+
OM / USD,Mantra DAO,Crypto,0xb9583cfBdEeacd2705546F392E43F8E03eB92216
|
|
151
|
+
OMG / ETH,Omisego,Crypto,0x57C9aB3e56EE4a83752c181f241120a3DBba06a1
|
|
152
|
+
OMG / USD,Omisego,Crypto,0x7D476f061F8212A8C9317D5784e72B4212436E93
|
|
153
|
+
ONT / USD,Ontology,Crypto,0xcDa3708C5c2907FCca52BB3f9d3e4c2028b89319
|
|
154
|
+
ORN / ETH,Orion Protocol,Crypto,0xbA9B2a360eb8aBdb677d6d7f27E12De11AA052ef
|
|
155
|
+
OXT / USD,Orchid Protocol,Crypto,0xd75AAaE4AF0c398ca13e2667Be57AF2ccA8B5de6
|
|
156
|
+
PAXG / ETH,Pax Gold,Crypto,0x9B97304EA12EFed0FAd976FBeCAad46016bf269e
|
|
157
|
+
PERP / ETH,Perpetual Protocol,Crypto,0x3b41D5571468904D4e53b6a8d93A6BaC43f02dC9
|
|
158
|
+
PERP / USD,Perpetual Protocol,Crypto,0x01cE1210Fe8153500F60f7131d63239373D7E26C
|
|
159
|
+
PHA / USD,Phala Network,Crypto,0x2B1248028fe48864c4f1c305E524e2e6702eAFDF
|
|
160
|
+
PHP / USD,Philippines Peso,Forex,0x9481e7ad8BE6BbB22A8B9F7B9fB7588d1df65DF6
|
|
161
|
+
PLA / USD,Playdapp,Crypto,0xbc535B134DdF81fc83254a3D0Ed2C0C60144405E
|
|
162
|
+
RAI / ETH,RAI Reflex Index,Crypto,0x4ad7B025127e89263242aB68F0f9c4E5C033B489
|
|
163
|
+
RARI / ETH,Rarible,Crypto,0x2a784368b1D492f458Bf919389F42c18315765F5
|
|
164
|
+
REN / ETH,Ren,Crypto,0x3147D7203354Dc06D9fd350c7a2437bcA92387a4
|
|
165
|
+
REN / USD,Ren,Crypto,0x0f59666EDE214281e956cb3b2D0d69415AfF4A01
|
|
166
|
+
REP / ETH,Augur,Crypto,0xD4CE430C3b67b3E2F7026D86E7128588629e2455
|
|
167
|
+
REQ / USD,Request Network,Crypto,0x2F05888D185970f178f40610306a0Cc305e52bBF
|
|
168
|
+
RLC / ETH,iExec RLC,Crypto,0x4cba1e1fdc738D0fe8DB3ee07728E2Bc4DA676c6
|
|
169
|
+
RUNE / ETH,THORChain,Crypto,0x875D60C44cfbC38BaA4Eb2dDB76A767dEB91b97e
|
|
170
|
+
SAND / USD,The Sandbox,Crypto,0x35E3f7E558C04cE7eEE1629258EcbbA03B36Ec56
|
|
171
|
+
SGD / USD,Singapore Dollar,Forex,0xe25277fF4bbF9081C75Ab0EB13B4A13a721f3E13
|
|
172
|
+
SHIB / ETH,Shiba Inu,Crypto,0x8dD1CD88F43aF196ae478e91b9F5E4Ac69A97C61
|
|
173
|
+
SNX / ETH,Synthetix Network,Crypto,0x79291A9d692Df95334B1a0B3B4AE6bC606782f8c
|
|
174
|
+
SNX / USD,Synthetix Network,Crypto,0xDC3EA94CD0AC27d9A86C180091e7f78C683d3699
|
|
175
|
+
SOL / USD,Solana,Crypto,0x4ffC43a60e009B551865A93d232E33Fce9f01507
|
|
176
|
+
SPELL / USD,Spell Token,Crypto,0x8c110B94C5f1d347fAcF5E1E938AB2db60E3c9a8
|
|
177
|
+
SRM / ETH,Serum,Crypto,0x050c048c9a0CD0e76f166E2539F87ef2acCEC58f
|
|
178
|
+
STETH / ETH,Lido Staked ETH,Crypto,0x86392dC19c0b719886221c78AB11eb8Cf5c52812
|
|
179
|
+
SUSD / ETH,sUSD (Synthetix),Crypto,0x8e0b7e6062272B5eF4524250bFFF8e5Bd3497757
|
|
180
|
+
SUSHI / ETH,Sushi,Crypto,0xe572CeF69f43c2E488b33924AF04BDacE19079cf
|
|
181
|
+
SUSHI / USD,Sushi,Crypto,0xCc70F09A6CC17553b2E31954cD36E4A2d89501f7
|
|
182
|
+
SXP / USD,Swipe,Crypto,0xFb0CfD6c19e25DB4a08D8a204a387cEa48Cc138f
|
|
183
|
+
TOKE / USD,Tokemak,Crypto,0x104cD02b2f22972E8d8542867a36bDeDA4f104d8
|
|
184
|
+
TOMO / USD,Tomochain,Crypto,0x3d44925a8E9F9DFd90390E58e92Ec16c996A331b
|
|
185
|
+
TRIBE / ETH,Tribe,Crypto,0x84a24deCA415Acc0c395872a9e6a63E27D6225c8
|
|
186
|
+
TRU / USD,Truefi,Crypto,0x26929b85fE284EeAB939831002e1928183a10fb1
|
|
187
|
+
TRY / USD,Turkish Lira,Forex,0xB09fC5fD3f11Cf9eb5E1C5Dba43114e3C9f477b5
|
|
188
|
+
TSLA / USD,Tesla,Equities,0x1ceDaaB50936881B3e449e47e40A2cDAF5576A4a
|
|
189
|
+
TUSD / ETH,TrueUSD,Crypto,0x3886BA987236181D98F2401c507Fb8BeA7871dF2
|
|
190
|
+
TUSD / USD,True USD,Crypto,0xec746eCF986E2927Abd291a2A1716c940100f8Ba
|
|
191
|
+
UMA / ETH,Uma,Crypto,0xf817B69EA583CAFF291E287CaE00Ea329d22765C
|
|
192
|
+
UMEE / ETH,Umee,Crypto,0xa554F3a8D05f22aC7e105311211AAbAf727e1CcB
|
|
193
|
+
UNI / ETH,Uniswap,Crypto,0xD6aA3D25116d8dA79Ea0246c4826EB951872e02e
|
|
194
|
+
UNI / USD,Uniswap,Crypto,0x553303d460EE0afB37EdFf9bE42922D8FF63220e
|
|
195
|
+
USDC / ETH,Circle USD,Crypto,0x986b5E1e1755e3C2440e960477f25201B0a8bbD4
|
|
196
|
+
USDC / USD,Circle USD,Crypto,0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6
|
|
197
|
+
USDK / USD,USDK,Crypto,0xfAC81Ea9Dd29D8E9b212acd6edBEb6dE38Cb43Af
|
|
198
|
+
USDN / USD,Neutrino USD,Crypto,0x7a8544894F7FD0C69cFcBE2b4b2E277B0b9a4355
|
|
199
|
+
USDP / USD,Pax Dollar,Crypto,0x09023c0DA49Aaf8fc3fA3ADF34C6A7016D38D5e3
|
|
200
|
+
USDT / ETH,Tether,Crypto,0xEe9F2375b4bdF6387aa8265dD4FB8F16512A1d46
|
|
201
|
+
USDT / USD,Tether USD,Crypto,0x3E7d1eAB13ad0104d2750B8863b489D65364e32D
|
|
202
|
+
WBTC / BTC,Wrapped Bitcoin,Crypto,0xfdFD9C85aD200c506Cf9e21F1FD8dd01932FBB23
|
|
203
|
+
WING / USD,Wing Finance,Crypto,0x134fE0a225Fb8e6683617C13cEB6B3319fB4fb82
|
|
204
|
+
WNXM / ETH,Wrapped NXM,Crypto,0xe5Dc0A609Ab8bCF15d3f35cFaa1Ff40f521173Ea
|
|
205
|
+
WTI / USD,WTI Crude,Commodities,0xf3584F4dd3b467e73C2339EfD008665a70A4185c
|
|
206
|
+
XAG / USD,Silver,Commodities,0x379589227b15F1a12195D3f2d90bBc9F31f95235
|
|
207
|
+
XAU / USD,Gold,Commodities,0x214eD9Da11D2fbe465a6fc601a91E62EbEc1a0D6
|
|
208
|
+
XCN / USD,Chain,Crypto,0xeb988B77b94C186053282BfcD8B7ED55142D3cAB
|
|
209
|
+
XLM / USD,Stellar,Crypto,0x64168007BAcbB5fF3f52639db22C6300827f5036
|
|
210
|
+
XMR / USD,Monero,Crypto,0xFA66458Cce7Dd15D8650015c4fce4D278271618F
|
|
211
|
+
XRP / USD,Ripple,Crypto,0xCed2660c6Dd1Ffd856A5A82C67f3482d88C50b12
|
|
212
|
+
YFI / ETH,Yearn Finance,Crypto,0x7c5d4F8345e66f68099581Db340cd65B078C41f4
|
|
213
|
+
YFI / USD,Yearn Finance,Crypto,0xA027702dbb89fbd58938e4324ac03B58d812b0E1
|
|
214
|
+
YFII / ETH,YFII Finance,Crypto,0xaaB2f6b45B28E962B3aCd1ee4fC88aEdDf557756
|
|
215
|
+
ZRX / ETH,0x,Crypto,0x2Da4983a622a8498bb1a21FaE9D8F6C664939962
|
|
216
|
+
ZRX / USD,0x,Crypto,0x2885d15b8Af22648b98B122b22FDF4D2a56c6023
|
|
217
|
+
sUSD / USD,sUSD (Synthetix),Crypto,0xad35Bd71b9aFE6e4bDc266B345c198eaDEf9Ad94
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BlockTag } from '@ethersproject/providers';
|
|
2
|
+
export declare enum PriceUnit {
|
|
3
|
+
USD = 0,
|
|
4
|
+
ETH = 1,
|
|
5
|
+
BTC = 2
|
|
6
|
+
}
|
|
7
|
+
export interface DexPriceResult {
|
|
8
|
+
price?: number;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
declare class DexPrice {
|
|
12
|
+
private USD_ORACLE_MAP;
|
|
13
|
+
private ETH_ORACLE_MAP;
|
|
14
|
+
private BTC_ORACLE_MAP;
|
|
15
|
+
private ASSETS_INFOS;
|
|
16
|
+
private readonly chainId;
|
|
17
|
+
constructor(csvFileName: string, chainId: number);
|
|
18
|
+
getPrice(asset: string, blockTag?: BlockTag, unit?: PriceUnit): Promise<DexPriceResult>;
|
|
19
|
+
}
|
|
20
|
+
export declare const EthereumDexPrice: DexPrice;
|
|
21
|
+
export declare const GoerliDexPrice: DexPrice;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GoerliDexPrice = exports.EthereumDexPrice = exports.PriceUnit = void 0;
|
|
7
|
+
const eacaggregatorproxy_processor_1 = require("../builtin/internal/eacaggregatorproxy_processor");
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const fs_1 = __importDefault(require("fs"));
|
|
10
|
+
const sync_1 = require("csv-parse/sync");
|
|
11
|
+
const erc20_1 = require("./erc20");
|
|
12
|
+
var PriceUnit;
|
|
13
|
+
(function (PriceUnit) {
|
|
14
|
+
PriceUnit[PriceUnit["USD"] = 0] = "USD";
|
|
15
|
+
PriceUnit[PriceUnit["ETH"] = 1] = "ETH";
|
|
16
|
+
PriceUnit[PriceUnit["BTC"] = 2] = "BTC";
|
|
17
|
+
})(PriceUnit = exports.PriceUnit || (exports.PriceUnit = {}));
|
|
18
|
+
// Load price feed from https://docs.chain.link/docs/data-feeds/price-feeds/addresses/?network=ethereum
|
|
19
|
+
// and then use EACAggregatorProxy contract to get price
|
|
20
|
+
class DexPrice {
|
|
21
|
+
USD_ORACLE_MAP = new Map();
|
|
22
|
+
ETH_ORACLE_MAP = new Map();
|
|
23
|
+
BTC_ORACLE_MAP = new Map();
|
|
24
|
+
ASSETS_INFOS = new Map();
|
|
25
|
+
chainId;
|
|
26
|
+
constructor(csvFileName, chainId) {
|
|
27
|
+
this.chainId = chainId;
|
|
28
|
+
const csvFilePath = path_1.default.resolve(__dirname, csvFileName);
|
|
29
|
+
const fileContent = fs_1.default.readFileSync(csvFilePath, { encoding: 'utf-8' });
|
|
30
|
+
const headers = ['Pair', 'Asset', 'Type', 'Address'];
|
|
31
|
+
const records = (0, sync_1.parse)(fileContent, {
|
|
32
|
+
delimiter: ',',
|
|
33
|
+
columns: headers,
|
|
34
|
+
skip_empty_lines: true,
|
|
35
|
+
});
|
|
36
|
+
for (const record of records) {
|
|
37
|
+
const pair = record.Pair.split('/');
|
|
38
|
+
const asset = pair[0].trim().toLowerCase();
|
|
39
|
+
const target = pair[1].trim().toLowerCase();
|
|
40
|
+
const address = record.Address.toLowerCase();
|
|
41
|
+
if (target === 'usd') {
|
|
42
|
+
this.USD_ORACLE_MAP.set(asset, address);
|
|
43
|
+
}
|
|
44
|
+
else if (target === 'eth') {
|
|
45
|
+
this.ETH_ORACLE_MAP.set(asset, address);
|
|
46
|
+
}
|
|
47
|
+
else if (target == 'btc') {
|
|
48
|
+
this.BTC_ORACLE_MAP.set(asset, address);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.error('wrong asset record:' + JSON.stringify(record));
|
|
52
|
+
}
|
|
53
|
+
// console.log(asset, target, address)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// asset: symbol of the asset
|
|
57
|
+
// unit: usd, eth or btc
|
|
58
|
+
// blockTag: blockNumber of block symbol like "latest"
|
|
59
|
+
// returns the asset price,
|
|
60
|
+
// throw exception if calling to price feed failed, e.g. due to a invalid block number
|
|
61
|
+
async getPrice(asset, blockTag = 'latest', unit = PriceUnit.USD) {
|
|
62
|
+
// if (chainId !== 1 && chainId !== 5) {
|
|
63
|
+
// return {
|
|
64
|
+
// error: "current dex price only support chain 1 (mainnet) or 5 (goerli)"
|
|
65
|
+
// }
|
|
66
|
+
// }
|
|
67
|
+
let oracleMap = this.USD_ORACLE_MAP;
|
|
68
|
+
switch (unit) {
|
|
69
|
+
case PriceUnit.ETH:
|
|
70
|
+
oracleMap = this.ETH_ORACLE_MAP;
|
|
71
|
+
break;
|
|
72
|
+
case PriceUnit.BTC:
|
|
73
|
+
oracleMap = this.BTC_ORACLE_MAP;
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
}
|
|
77
|
+
asset = asset.trim().toLowerCase();
|
|
78
|
+
const addr = oracleMap.get(asset);
|
|
79
|
+
if (!addr) {
|
|
80
|
+
return {
|
|
81
|
+
error: 'No price feed found for asset',
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const contract = (0, eacaggregatorproxy_processor_1.getEACAggregatorProxyContract)(addr, this.chainId);
|
|
85
|
+
try {
|
|
86
|
+
const price = await contract.latestAnswer({
|
|
87
|
+
blockTag: blockTag,
|
|
88
|
+
});
|
|
89
|
+
let decimal = this.ASSETS_INFOS.get(asset);
|
|
90
|
+
if (!decimal) {
|
|
91
|
+
decimal = await contract.decimals();
|
|
92
|
+
this.ASSETS_INFOS.set(asset, decimal);
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
price: (0, erc20_1.scaleDown)(price, decimal).toNumber(),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
return {
|
|
100
|
+
error: 'Price query error for ' +
|
|
101
|
+
asset +
|
|
102
|
+
' failed at ' +
|
|
103
|
+
addr +
|
|
104
|
+
' at chain ' +
|
|
105
|
+
this.chainId +
|
|
106
|
+
'. Details: ' +
|
|
107
|
+
e.toString(),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.EthereumDexPrice = new DexPrice('chainlink-oracles.csv', 1);
|
|
113
|
+
exports.GoerliDexPrice = new DexPrice('chainlink-oracles-goerli.csv', 5);
|
|
114
|
+
//# sourceMappingURL=dex-price.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dex-price.js","sourceRoot":"","sources":["../../src/utils/dex-price.ts"],"names":[],"mappings":"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","sourcesContent":["import { getEACAggregatorProxyContract } from '../builtin/internal/eacaggregatorproxy_processor'\nimport path from 'path'\nimport fs from 'fs'\n\nimport { parse } from 'csv-parse/sync'\nimport { BlockTag } from '@ethersproject/providers'\nimport { scaleDown } from './erc20'\n\ntype OralceRecord = {\n Pair: string\n Asset: string\n Type: string\n Address: string\n}\n\nexport enum PriceUnit {\n USD = 0,\n ETH = 1,\n BTC = 2,\n}\n\nexport interface DexPriceResult {\n price?: number\n error?: string\n}\n\n// Load price feed from https://docs.chain.link/docs/data-feeds/price-feeds/addresses/?network=ethereum\n// and then use EACAggregatorProxy contract to get price\nclass DexPrice {\n private USD_ORACLE_MAP = new Map<string, string>()\n private ETH_ORACLE_MAP = new Map<string, string>()\n private BTC_ORACLE_MAP = new Map<string, string>()\n private ASSETS_INFOS = new Map<string, number>()\n\n private readonly chainId: number\n\n constructor(csvFileName: string, chainId: number) {\n this.chainId = chainId\n const csvFilePath = path.resolve(__dirname, csvFileName)\n const fileContent = fs.readFileSync(csvFilePath, { encoding: 'utf-8' })\n const headers = ['Pair', 'Asset', 'Type', 'Address']\n\n const records: OralceRecord[] = parse(fileContent, {\n delimiter: ',',\n columns: headers,\n skip_empty_lines: true,\n })\n\n for (const record of records) {\n const pair = record.Pair.split('/')\n const asset = pair[0].trim().toLowerCase()\n const target = pair[1].trim().toLowerCase()\n const address = record.Address.toLowerCase()\n if (target === 'usd') {\n this.USD_ORACLE_MAP.set(asset, address)\n } else if (target === 'eth') {\n this.ETH_ORACLE_MAP.set(asset, address)\n } else if (target == 'btc') {\n this.BTC_ORACLE_MAP.set(asset, address)\n } else {\n console.error('wrong asset record:' + JSON.stringify(record))\n }\n\n // console.log(asset, target, address)\n }\n }\n\n // asset: symbol of the asset\n // unit: usd, eth or btc\n // blockTag: blockNumber of block symbol like \"latest\"\n // returns the asset price,\n // throw exception if calling to price feed failed, e.g. due to a invalid block number\n async getPrice(\n asset: string,\n blockTag: BlockTag = 'latest',\n unit: PriceUnit = PriceUnit.USD\n ): Promise<DexPriceResult> {\n // if (chainId !== 1 && chainId !== 5) {\n // return {\n // error: \"current dex price only support chain 1 (mainnet) or 5 (goerli)\"\n // }\n // }\n\n let oracleMap = this.USD_ORACLE_MAP\n switch (unit) {\n case PriceUnit.ETH:\n oracleMap = this.ETH_ORACLE_MAP\n break\n case PriceUnit.BTC:\n oracleMap = this.BTC_ORACLE_MAP\n break\n default:\n }\n\n asset = asset.trim().toLowerCase()\n\n const addr = oracleMap.get(asset)\n if (!addr) {\n return {\n error: 'No price feed found for asset',\n }\n }\n\n const contract = getEACAggregatorProxyContract(addr, this.chainId)\n try {\n const price = await contract.latestAnswer({\n blockTag: blockTag,\n })\n\n let decimal = this.ASSETS_INFOS.get(asset)\n if (!decimal) {\n decimal = await contract.decimals()\n this.ASSETS_INFOS.set(asset, decimal)\n }\n\n return {\n price: scaleDown(price, decimal).toNumber(),\n }\n } catch (e) {\n return {\n error:\n 'Price query error for ' +\n asset +\n ' failed at ' +\n addr +\n ' at chain ' +\n this.chainId +\n '. Details: ' +\n e.toString(),\n }\n }\n }\n}\n\nexport const EthereumDexPrice = new DexPrice('chainlink-oracles.csv', 1)\nexport const GoerliDexPrice = new DexPrice('chainlink-oracles-goerli.csv', 5)\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const dex_price_1 = require("./dex-price");
|
|
4
|
+
const sdk_1 = require("@sentio/sdk");
|
|
5
|
+
const test_1 = require("../test");
|
|
6
|
+
const chai_1 = require("chai");
|
|
7
|
+
describe('dex price tests', () => {
|
|
8
|
+
global.PROCESSOR_STATE = new sdk_1.ProcessorState();
|
|
9
|
+
const haveProviders = (0, test_1.loadTestProvidersFromEnv)(['1', '5']);
|
|
10
|
+
const testIf = haveProviders ? test : test.skip;
|
|
11
|
+
testIf('get price at mainnet', async () => {
|
|
12
|
+
const usdc = await dex_price_1.EthereumDexPrice.getPrice('usdc', 15677823);
|
|
13
|
+
(0, chai_1.expect)(usdc.price).eq(0.99991649);
|
|
14
|
+
const compound = await dex_price_1.EthereumDexPrice.getPrice('COMP', 15677823);
|
|
15
|
+
(0, chai_1.expect)(compound.price).eq(60.27);
|
|
16
|
+
});
|
|
17
|
+
testIf('get price at goerli', async () => {
|
|
18
|
+
const dai = await dex_price_1.GoerliDexPrice.getPrice('DAI', 7712734);
|
|
19
|
+
(0, chai_1.expect)(dai.price).eq(0.99971281);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=dex-price.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dex-price.test.js","sourceRoot":"","sources":["../../src/utils/dex-price.test.ts"],"names":[],"mappings":";;AAAA,2CAA8D;AAC9D,qCAA4C;AAC5C,kCAAkD;AAClD,+BAA6B;AAE7B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,CAAC,eAAe,GAAG,IAAI,oBAAc,EAAE,CAAA;IAC7C,MAAM,aAAa,GAAG,IAAA,+BAAwB,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAE1D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAE/C,MAAM,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,4BAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC9D,IAAA,aAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;QAEjC,MAAM,QAAQ,GAAG,MAAM,4BAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAClE,IAAA,aAAM,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,0BAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACzD,IAAA,aAAM,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { EthereumDexPrice, GoerliDexPrice } from './dex-price'\nimport { ProcessorState } from '@sentio/sdk'\nimport { loadTestProvidersFromEnv } from '../test'\nimport { expect } from 'chai'\n\ndescribe('dex price tests', () => {\n global.PROCESSOR_STATE = new ProcessorState()\n const haveProviders = loadTestProvidersFromEnv(['1', '5'])\n\n const testIf = haveProviders ? test : test.skip\n\n testIf('get price at mainnet', async () => {\n const usdc = await EthereumDexPrice.getPrice('usdc', 15677823)\n expect(usdc.price).eq(0.99991649)\n\n const compound = await EthereumDexPrice.getPrice('COMP', 15677823)\n expect(compound.price).eq(60.27)\n })\n\n testIf('get price at goerli', async () => {\n const dai = await GoerliDexPrice.getPrice('DAI', 7712734)\n expect(dai.price).eq(0.99971281)\n })\n})\n"]}
|
package/lib/utils/erc20.d.ts
CHANGED
|
@@ -12,3 +12,4 @@ export declare const NATIVE_ETH: {
|
|
|
12
12
|
};
|
|
13
13
|
export declare function getERC20TokenInfo(tokenAddress: string, chainId?: number): Promise<TokenInfo>;
|
|
14
14
|
export declare function getER20NormalizedAmount(tokenAddress: string, amount: BigNumber, chainId: number): Promise<BigDecimal>;
|
|
15
|
+
export declare function scaleDown(amount: BigNumber, decimal: number): BigDecimal;
|
package/lib/utils/erc20.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getER20NormalizedAmount = exports.getERC20TokenInfo = exports.NATIVE_ETH = exports.TokenInfo = void 0;
|
|
3
|
+
exports.scaleDown = exports.getER20NormalizedAmount = exports.getERC20TokenInfo = exports.NATIVE_ETH = exports.TokenInfo = void 0;
|
|
4
4
|
const error_1 = require("../error");
|
|
5
5
|
const erc20_1 = require("../builtin/erc20");
|
|
6
6
|
const erc20bytes_processor_1 = require("../builtin/internal/erc20bytes_processor");
|
|
@@ -55,8 +55,12 @@ async function getERC20TokenInfo(tokenAddress, chainId = 1) {
|
|
|
55
55
|
exports.getERC20TokenInfo = getERC20TokenInfo;
|
|
56
56
|
async function getER20NormalizedAmount(tokenAddress, amount, chainId) {
|
|
57
57
|
const tokenInfo = await getERC20TokenInfo(tokenAddress, chainId);
|
|
58
|
-
|
|
59
|
-
return (0, convert_1.toBigDecimal)(amount).dividedBy(divider);
|
|
58
|
+
return scaleDown(amount, tokenInfo.decimal);
|
|
60
59
|
}
|
|
61
60
|
exports.getER20NormalizedAmount = getER20NormalizedAmount;
|
|
61
|
+
function scaleDown(amount, decimal) {
|
|
62
|
+
const divider = new sdk_1.BigDecimal(10).pow(decimal);
|
|
63
|
+
return (0, convert_1.toBigDecimal)(amount).dividedBy(divider);
|
|
64
|
+
}
|
|
65
|
+
exports.scaleDown = scaleDown;
|
|
62
66
|
//# sourceMappingURL=erc20.js.map
|
package/lib/utils/erc20.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../src/utils/erc20.ts"],"names":[],"mappings":";;;AAEA,oCAA8C;AAC9C,4CAAmD;AACnD,mFAAgF;AAChF,qCAAwC;AACxC,uCAAwC;AACxC,mCAA8B;AAE9B,MAAa,SAAS;IACpB,MAAM,CAAQ;IACd,IAAI,CAAQ;IACZ,OAAO,CAAQ;CAChB;AAJD,8BAIC;AAEY,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,YAAY;CACnB,CAAA;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;AAEzC,KAAK,UAAU,iBAAiB,CAAC,YAAoB,EAAE,OAAO,GAAG,CAAC;IACvE,MAAM,GAAG,GAAG,OAAO,GAAG,YAAY,CAAA;IAClC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAA;KACX;IACD,MAAM,QAAQ,GAAG,IAAA,wBAAgB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,IAAA,4CAAqB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAElE,IAAI;QACF,kEAAkE;QAClE,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI;YACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;SAC7B;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;SAC5D;QAED,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI;YACF,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;SACjC;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;SAChE;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACzC,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QACjD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAA,2BAAmB,EAAC,CAAC,EAAE,SAAS,CAAC,CAAA;KACxC;AACH,CAAC;AAhCD,8CAgCC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,MAAiB,EACjB,OAAe;IAEf,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,IAAI,gBAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"erc20.js","sourceRoot":"","sources":["../../src/utils/erc20.ts"],"names":[],"mappings":";;;AAEA,oCAA8C;AAC9C,4CAAmD;AACnD,mFAAgF;AAChF,qCAAwC;AACxC,uCAAwC;AACxC,mCAA8B;AAE9B,MAAa,SAAS;IACpB,MAAM,CAAQ;IACd,IAAI,CAAQ;IACZ,OAAO,CAAQ;CAChB;AAJD,8BAIC;AAEY,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,YAAY;CACnB,CAAA;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;AAEzC,KAAK,UAAU,iBAAiB,CAAC,YAAoB,EAAE,OAAO,GAAG,CAAC;IACvE,MAAM,GAAG,GAAG,OAAO,GAAG,YAAY,CAAA;IAClC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAA;KACX;IACD,MAAM,QAAQ,GAAG,IAAA,wBAAgB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,IAAA,4CAAqB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAElE,IAAI;QACF,kEAAkE;QAClE,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI;YACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;SAC7B;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;SAC5D;QAED,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI;YACF,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;SACjC;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;SAChE;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACzC,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QACjD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAA,2BAAmB,EAAC,CAAC,EAAE,SAAS,CAAC,CAAA;KACxC;AACH,CAAC;AAhCD,8CAgCC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,MAAiB,EACjB,OAAe;IAEf,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAChE,OAAO,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;AAC7C,CAAC;AAPD,0DAOC;AAED,SAAgB,SAAS,CAAC,MAAiB,EAAE,OAAe;IAC1D,MAAM,OAAO,GAAG,IAAI,gBAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/C,OAAO,IAAA,sBAAY,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChD,CAAC;AAHD,8BAGC","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber'\n\nimport { transformEtherError } from '../error'\nimport { getERC20Contract } from '../builtin/erc20'\nimport { getERC20BytesContract } from '../builtin/internal/erc20bytes_processor'\nimport { BigDecimal } from '@sentio/sdk'\nimport { toBigDecimal } from './convert'\nimport { utils } from 'ethers'\n\nexport class TokenInfo {\n symbol: string\n name: string\n decimal: number\n}\n\nexport const NATIVE_ETH = {\n symbol: 'ETH',\n decimal: 18,\n name: 'Native ETH',\n}\n\nconst TOKEN_INFOS = new Map<string, TokenInfo>()\n\nexport async function getERC20TokenInfo(tokenAddress: string, chainId = 1): Promise<TokenInfo> {\n const key = chainId + tokenAddress\n const res = TOKEN_INFOS.get(key)\n if (res) {\n return res\n }\n const contract = getERC20Contract(tokenAddress, chainId)\n const bytesContract = getERC20BytesContract(tokenAddress, chainId)\n\n try {\n // TODO maybe not do try catch, just do raw call the parse results\n let name = ''\n try {\n name = await contract.name()\n } catch (e) {\n name = utils.parseBytes32String(await bytesContract.name())\n }\n\n let symbol = ''\n try {\n symbol = await contract.symbol()\n } catch (e) {\n symbol = utils.parseBytes32String(await bytesContract.symbol())\n }\n\n const decimal = await contract.decimals()\n const info: TokenInfo = { name, symbol, decimal }\n TOKEN_INFOS.set(key, info)\n return info\n } catch (e) {\n throw transformEtherError(e, undefined)\n }\n}\n\nexport async function getER20NormalizedAmount(\n tokenAddress: string,\n amount: BigNumber,\n chainId: number\n): Promise<BigDecimal> {\n const tokenInfo = await getERC20TokenInfo(tokenAddress, chainId)\n return scaleDown(amount, tokenInfo.decimal)\n}\n\nexport function scaleDown(amount: BigNumber, decimal: number) {\n const divider = new BigDecimal(10).pow(decimal)\n return toBigDecimal(amount).dividedBy(divider)\n}\n"]}
|
package/lib/utils/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { getChainName } from './chainmap';
|
|
2
2
|
export { toBigDecimal, metricValueToNumberish } from './convert';
|
|
3
|
-
export { getERC20TokenInfo, getER20NormalizedAmount, TokenInfo, NATIVE_ETH } from './erc20';
|
|
3
|
+
export { getERC20TokenInfo, getER20NormalizedAmount, scaleDown, TokenInfo, NATIVE_ETH } from './erc20';
|
|
4
|
+
export { EthereumDexPrice, GoerliDexPrice, PriceUnit } from './dex-price';
|
|
5
|
+
export type { DexPriceResult } from './dex-price';
|
package/lib/utils/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NATIVE_ETH = exports.TokenInfo = exports.getER20NormalizedAmount = exports.getERC20TokenInfo = exports.metricValueToNumberish = exports.toBigDecimal = exports.getChainName = void 0;
|
|
3
|
+
exports.PriceUnit = exports.GoerliDexPrice = exports.EthereumDexPrice = exports.NATIVE_ETH = exports.TokenInfo = exports.scaleDown = exports.getER20NormalizedAmount = exports.getERC20TokenInfo = exports.metricValueToNumberish = exports.toBigDecimal = exports.getChainName = void 0;
|
|
4
4
|
var chainmap_1 = require("./chainmap");
|
|
5
5
|
Object.defineProperty(exports, "getChainName", { enumerable: true, get: function () { return chainmap_1.getChainName; } });
|
|
6
6
|
var convert_1 = require("./convert");
|
|
@@ -9,6 +9,11 @@ Object.defineProperty(exports, "metricValueToNumberish", { enumerable: true, get
|
|
|
9
9
|
var erc20_1 = require("./erc20");
|
|
10
10
|
Object.defineProperty(exports, "getERC20TokenInfo", { enumerable: true, get: function () { return erc20_1.getERC20TokenInfo; } });
|
|
11
11
|
Object.defineProperty(exports, "getER20NormalizedAmount", { enumerable: true, get: function () { return erc20_1.getER20NormalizedAmount; } });
|
|
12
|
+
Object.defineProperty(exports, "scaleDown", { enumerable: true, get: function () { return erc20_1.scaleDown; } });
|
|
12
13
|
Object.defineProperty(exports, "TokenInfo", { enumerable: true, get: function () { return erc20_1.TokenInfo; } });
|
|
13
14
|
Object.defineProperty(exports, "NATIVE_ETH", { enumerable: true, get: function () { return erc20_1.NATIVE_ETH; } });
|
|
15
|
+
var dex_price_1 = require("./dex-price");
|
|
16
|
+
Object.defineProperty(exports, "EthereumDexPrice", { enumerable: true, get: function () { return dex_price_1.EthereumDexPrice; } });
|
|
17
|
+
Object.defineProperty(exports, "GoerliDexPrice", { enumerable: true, get: function () { return dex_price_1.GoerliDexPrice; } });
|
|
18
|
+
Object.defineProperty(exports, "PriceUnit", { enumerable: true, get: function () { return dex_price_1.PriceUnit; } });
|
|
14
19
|
//# sourceMappingURL=index.js.map
|
package/lib/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AAAhC,wGAAA,YAAY,OAAA;AACrB,qCAAgE;AAAvD,uGAAA,YAAY,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAC7C,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AAAhC,wGAAA,YAAY,OAAA;AACrB,qCAAgE;AAAvD,uGAAA,YAAY,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAC7C,iCAAsG;AAA7F,0GAAA,iBAAiB,OAAA;AAAE,gHAAA,uBAAuB,OAAA;AAAE,kGAAA,SAAS,OAAA;AAAE,kGAAA,SAAS,OAAA;AAAE,mGAAA,UAAU,OAAA;AACrF,yCAAyE;AAAhE,6GAAA,gBAAgB,OAAA;AAAE,2GAAA,cAAc,OAAA;AAAE,sGAAA,SAAS,OAAA","sourcesContent":["export { getChainName } from './chainmap'\nexport { toBigDecimal, metricValueToNumberish } from './convert'\nexport { getERC20TokenInfo, getER20NormalizedAmount, scaleDown, TokenInfo, NATIVE_ETH } from './erc20'\nexport { EthereumDexPrice, GoerliDexPrice, PriceUnit } from './dex-price'\nexport type { DexPriceResult } from './dex-price'\n"]}
|
package/package.json
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sentio/sdk",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.17.0",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"compile_target": "yarn tsc -b src/target-ethers-sentio/tsconfig.json",
|
|
7
|
-
"compile": "tsc -p . && cp src/cli/webpack.config.js lib/cli",
|
|
7
|
+
"compile": "tsc -p . && cp src/cli/webpack.config.js lib/cli && cp src/utils/*.csv lib/utils",
|
|
8
8
|
"build": "yarn gen && yarn compile",
|
|
9
9
|
"start_ts": "ts-node --files src/processor-runner.ts ../examples/x2y2/src/processor.ts",
|
|
10
|
-
"start_ts_solana": "ts-node --files src/processor-runner.ts ../examples/mirrorworld/src/processor.ts",
|
|
11
10
|
"start": "ts-node --files src/processor-runner.ts ../examples/x2y2/dist/lib.js",
|
|
12
11
|
"start_js": "node lib/processor.js ../examples/x2y2/dist/lib.js",
|
|
13
12
|
"ts-start": "ts-node --files src/processor-runner.ts ./src/anyswap/src/processor.ts",
|
|
@@ -31,6 +30,7 @@
|
|
|
31
30
|
"bs58": "^5.0.0",
|
|
32
31
|
"command-line-args": "^5.2.1",
|
|
33
32
|
"command-line-usage": "^6.1.3",
|
|
33
|
+
"csv-parse": "^5.3.0",
|
|
34
34
|
"ethers": "~5.7.1",
|
|
35
35
|
"form-data": "^4.0.0",
|
|
36
36
|
"fs-extra": "^10.1.0",
|