@sentio/sdk 1.16.4 → 1.17.1
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/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.js.map +1 -1
- package/lib/test/erc20.test.js.map +1 -1
- 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/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/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.test.ts +1 -1
- package/src/test/erc20.ts +0 -1
- package/src/test/solana.test.ts +1 -18
- package/src/test/souffl3.ts +24 -0
- 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/mirrorworld.js +0 -42
- package/lib/test/mirrorworld.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/mirrorworld.ts +0 -40
- package/src/test/types/game_wallet.ts +0 -1392
- package/src/test/types/game_wallet_processor.ts +0 -113
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export const basic_1_idl = {
|
|
2
|
+
"version": "0.1.0",
|
|
3
|
+
"name": "basic_1",
|
|
4
|
+
"instructions": [
|
|
5
|
+
{
|
|
6
|
+
"name": "initialize",
|
|
7
|
+
"accounts": [
|
|
8
|
+
{
|
|
9
|
+
"name": "myAccount",
|
|
10
|
+
"isMut": true,
|
|
11
|
+
"isSigner": true
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "user",
|
|
15
|
+
"isMut": true,
|
|
16
|
+
"isSigner": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "systemProgram",
|
|
20
|
+
"isMut": false,
|
|
21
|
+
"isSigner": false
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"args": [
|
|
25
|
+
{
|
|
26
|
+
"name": "data",
|
|
27
|
+
"type": "u64"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "update",
|
|
33
|
+
"accounts": [
|
|
34
|
+
{
|
|
35
|
+
"name": "myAccount",
|
|
36
|
+
"isMut": true,
|
|
37
|
+
"isSigner": false
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"args": [
|
|
41
|
+
{
|
|
42
|
+
"name": "data",
|
|
43
|
+
"type": "u64"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"accounts": [
|
|
49
|
+
{
|
|
50
|
+
"name": "MyAccount",
|
|
51
|
+
"type": {
|
|
52
|
+
"kind": "struct",
|
|
53
|
+
"fields": [
|
|
54
|
+
{
|
|
55
|
+
"name": "data",
|
|
56
|
+
"type": "u64"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { BorshInstructionCoder, Instruction, Idl, BN } from '@project-serum/anchor'
|
|
2
|
+
import { SolanaBaseProcessor, SolanaContext, SolanaBindOptions } from "@sentio/sdk"
|
|
3
|
+
import { basic_1_idl } from "./basic_1"
|
|
4
|
+
import bs58 from 'bs58'
|
|
5
|
+
import { PublicKey } from '@solana/web3.js'
|
|
6
|
+
|
|
7
|
+
export class Basic1Processor extends SolanaBaseProcessor {
|
|
8
|
+
static bind(options: SolanaBindOptions): Basic1Processor {
|
|
9
|
+
if (options && !options.name) {
|
|
10
|
+
options.name = 'Basic1'
|
|
11
|
+
}
|
|
12
|
+
return new Basic1Processor(options)
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
decodeInstruction: (rawInstruction: string) => Instruction | null = (rawInstruction) => {
|
|
16
|
+
const instructionCoder = new BorshInstructionCoder(basic_1_idl as Idl)
|
|
17
|
+
const decodedIns = instructionCoder.decode(Buffer.from(bs58.decode(rawInstruction)))
|
|
18
|
+
return decodedIns
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
onInitialize(handler: (args: { data: BN }, ctx: SolanaContext) => void): Basic1Processor {
|
|
23
|
+
this.onInstruction('initialize', (ins: Instruction, ctx) => {
|
|
24
|
+
if (ins) {
|
|
25
|
+
handler(ins.data as { data: BN }, ctx)
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
return this
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
onUpdate(handler: (args: { data: BN }, ctx: SolanaContext) => void): Basic1Processor {
|
|
32
|
+
this.onInstruction('update', (ins: Instruction, ctx) => {
|
|
33
|
+
if (ins) {
|
|
34
|
+
handler(ins.data as { data: BN }, ctx)
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
return this
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
BTC / ETH,,,0x779877A7B0D9E8603169DdbD7836e478b4624789
|
|
2
|
+
BTC / USD,,,0xA39434A63A52E749F02807ae27335515BA4b07F7
|
|
3
|
+
DAI / USD,,,0x0d79df66BE487753B02D015Fb622DED7f0E9798d
|
|
4
|
+
ETH / USD,,,0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e
|
|
5
|
+
FORTH / USD,,,0x7A65Cf6C2ACE993f09231EC1Ea7363fb29C13f2F
|
|
6
|
+
LINK / ETH,,,0xb4c4a493AB6356497713A78FFA6c60FB53517c63
|
|
7
|
+
LINK / USD,,,0x48731cF7e84dc94C5f84577882c14Be11a5B7456
|
|
8
|
+
USDC / USD,,,0xAb5c49580294Aff77670F839ea425f5b78ab3Ae7
|
|
@@ -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,24 @@
|
|
|
1
|
+
import { EthereumDexPrice, GoerliDexPrice } from './dex-price'
|
|
2
|
+
import { ProcessorState } from '@sentio/sdk'
|
|
3
|
+
import { loadTestProvidersFromEnv } from '../test'
|
|
4
|
+
import { expect } from 'chai'
|
|
5
|
+
|
|
6
|
+
describe('dex price tests', () => {
|
|
7
|
+
global.PROCESSOR_STATE = new ProcessorState()
|
|
8
|
+
const haveProviders = loadTestProvidersFromEnv(['1', '5'])
|
|
9
|
+
|
|
10
|
+
const testIf = haveProviders ? test : test.skip
|
|
11
|
+
|
|
12
|
+
testIf('get price at mainnet', async () => {
|
|
13
|
+
const usdc = await EthereumDexPrice.getPrice('usdc', 15677823)
|
|
14
|
+
expect(usdc.price).eq(0.99991649)
|
|
15
|
+
|
|
16
|
+
const compound = await EthereumDexPrice.getPrice('COMP', 15677823)
|
|
17
|
+
expect(compound.price).eq(60.27)
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
testIf('get price at goerli', async () => {
|
|
21
|
+
const dai = await GoerliDexPrice.getPrice('DAI', 7712734)
|
|
22
|
+
expect(dai.price).eq(0.99971281)
|
|
23
|
+
})
|
|
24
|
+
})
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { getEACAggregatorProxyContract } from '../builtin/internal/eacaggregatorproxy_processor'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import fs from 'fs'
|
|
4
|
+
|
|
5
|
+
import { parse } from 'csv-parse/sync'
|
|
6
|
+
import { BlockTag } from '@ethersproject/providers'
|
|
7
|
+
import { scaleDown } from './erc20'
|
|
8
|
+
|
|
9
|
+
type OralceRecord = {
|
|
10
|
+
Pair: string
|
|
11
|
+
Asset: string
|
|
12
|
+
Type: string
|
|
13
|
+
Address: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export enum PriceUnit {
|
|
17
|
+
USD = 0,
|
|
18
|
+
ETH = 1,
|
|
19
|
+
BTC = 2,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface DexPriceResult {
|
|
23
|
+
price?: number
|
|
24
|
+
error?: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Load price feed from https://docs.chain.link/docs/data-feeds/price-feeds/addresses/?network=ethereum
|
|
28
|
+
// and then use EACAggregatorProxy contract to get price
|
|
29
|
+
class DexPrice {
|
|
30
|
+
private USD_ORACLE_MAP = new Map<string, string>()
|
|
31
|
+
private ETH_ORACLE_MAP = new Map<string, string>()
|
|
32
|
+
private BTC_ORACLE_MAP = new Map<string, string>()
|
|
33
|
+
private ASSETS_INFOS = new Map<string, number>()
|
|
34
|
+
|
|
35
|
+
private readonly chainId: number
|
|
36
|
+
|
|
37
|
+
constructor(csvFileName: string, chainId: number) {
|
|
38
|
+
this.chainId = chainId
|
|
39
|
+
const csvFilePath = path.resolve(__dirname, csvFileName)
|
|
40
|
+
const fileContent = fs.readFileSync(csvFilePath, { encoding: 'utf-8' })
|
|
41
|
+
const headers = ['Pair', 'Asset', 'Type', 'Address']
|
|
42
|
+
|
|
43
|
+
const records: OralceRecord[] = parse(fileContent, {
|
|
44
|
+
delimiter: ',',
|
|
45
|
+
columns: headers,
|
|
46
|
+
skip_empty_lines: true,
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
for (const record of records) {
|
|
50
|
+
const pair = record.Pair.split('/')
|
|
51
|
+
const asset = pair[0].trim().toLowerCase()
|
|
52
|
+
const target = pair[1].trim().toLowerCase()
|
|
53
|
+
const address = record.Address.toLowerCase()
|
|
54
|
+
if (target === 'usd') {
|
|
55
|
+
this.USD_ORACLE_MAP.set(asset, address)
|
|
56
|
+
} else if (target === 'eth') {
|
|
57
|
+
this.ETH_ORACLE_MAP.set(asset, address)
|
|
58
|
+
} else if (target == 'btc') {
|
|
59
|
+
this.BTC_ORACLE_MAP.set(asset, address)
|
|
60
|
+
} else {
|
|
61
|
+
console.error('wrong asset record:' + JSON.stringify(record))
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// console.log(asset, target, address)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// asset: symbol of the asset
|
|
69
|
+
// unit: usd, eth or btc
|
|
70
|
+
// blockTag: blockNumber of block symbol like "latest"
|
|
71
|
+
// returns the asset price,
|
|
72
|
+
// throw exception if calling to price feed failed, e.g. due to a invalid block number
|
|
73
|
+
async getPrice(
|
|
74
|
+
asset: string,
|
|
75
|
+
blockTag: BlockTag = 'latest',
|
|
76
|
+
unit: PriceUnit = PriceUnit.USD
|
|
77
|
+
): Promise<DexPriceResult> {
|
|
78
|
+
// if (chainId !== 1 && chainId !== 5) {
|
|
79
|
+
// return {
|
|
80
|
+
// error: "current dex price only support chain 1 (mainnet) or 5 (goerli)"
|
|
81
|
+
// }
|
|
82
|
+
// }
|
|
83
|
+
|
|
84
|
+
let oracleMap = this.USD_ORACLE_MAP
|
|
85
|
+
switch (unit) {
|
|
86
|
+
case PriceUnit.ETH:
|
|
87
|
+
oracleMap = this.ETH_ORACLE_MAP
|
|
88
|
+
break
|
|
89
|
+
case PriceUnit.BTC:
|
|
90
|
+
oracleMap = this.BTC_ORACLE_MAP
|
|
91
|
+
break
|
|
92
|
+
default:
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
asset = asset.trim().toLowerCase()
|
|
96
|
+
|
|
97
|
+
const addr = oracleMap.get(asset)
|
|
98
|
+
if (!addr) {
|
|
99
|
+
return {
|
|
100
|
+
error: 'No price feed found for asset',
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const contract = getEACAggregatorProxyContract(addr, this.chainId)
|
|
105
|
+
try {
|
|
106
|
+
const price = await contract.latestAnswer({
|
|
107
|
+
blockTag: blockTag,
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
let decimal = this.ASSETS_INFOS.get(asset)
|
|
111
|
+
if (!decimal) {
|
|
112
|
+
decimal = await contract.decimals()
|
|
113
|
+
this.ASSETS_INFOS.set(asset, decimal)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
price: scaleDown(price, decimal).toNumber(),
|
|
118
|
+
}
|
|
119
|
+
} catch (e) {
|
|
120
|
+
return {
|
|
121
|
+
error:
|
|
122
|
+
'Price query error for ' +
|
|
123
|
+
asset +
|
|
124
|
+
' failed at ' +
|
|
125
|
+
addr +
|
|
126
|
+
' at chain ' +
|
|
127
|
+
this.chainId +
|
|
128
|
+
'. Details: ' +
|
|
129
|
+
e.toString(),
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export const EthereumDexPrice = new DexPrice('chainlink-oracles.csv', 1)
|
|
136
|
+
export const GoerliDexPrice = new DexPrice('chainlink-oracles-goerli.csv', 5)
|
package/src/utils/erc20.ts
CHANGED
|
@@ -61,6 +61,10 @@ export async function getER20NormalizedAmount(
|
|
|
61
61
|
chainId: number
|
|
62
62
|
): Promise<BigDecimal> {
|
|
63
63
|
const tokenInfo = await getERC20TokenInfo(tokenAddress, chainId)
|
|
64
|
-
|
|
64
|
+
return scaleDown(amount, tokenInfo.decimal)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function scaleDown(amount: BigNumber, decimal: number) {
|
|
68
|
+
const divider = new BigDecimal(10).pow(decimal)
|
|
65
69
|
return toBigDecimal(amount).dividedBy(divider)
|
|
66
70
|
}
|
package/src/utils/index.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/test/mirrorworld.js
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const game_wallet_processor_1 = require("./types/game_wallet_processor");
|
|
4
|
-
game_wallet_processor_1.GameWalletProcessor.bind({ address: 'F78NhTC9XmP1DKsCBRz5LGdQc4n4yFbj2dURiv7T9gGZ' })
|
|
5
|
-
.onDistributeWithoutUser((payload, ctx) => {
|
|
6
|
-
const amount = payload.amount.toNumber();
|
|
7
|
-
ctx.meter.Counter('deposit_pool_total_value').add(amount);
|
|
8
|
-
ctx.meter.Counter('deposit_pool_current_value').add(amount);
|
|
9
|
-
ctx.meter.Counter('distribution_pool_total_value').sub(amount);
|
|
10
|
-
})
|
|
11
|
-
.onDeposit((payload, ctx) => {
|
|
12
|
-
const amount = payload.amount.toNumber();
|
|
13
|
-
ctx.meter.Counter('deposit_pool_total_value').add(amount);
|
|
14
|
-
ctx.meter.Counter('deposit_pool_current_value').add(amount);
|
|
15
|
-
})
|
|
16
|
-
.onWithdraw((payload, ctx) => {
|
|
17
|
-
const amount = payload.amount.toNumber();
|
|
18
|
-
ctx.meter.Counter('deposit_pool_total_value').add(amount);
|
|
19
|
-
ctx.meter.Counter('distribution_pool_total_value').sub(amount);
|
|
20
|
-
})
|
|
21
|
-
.onSpend((payload, ctx) => {
|
|
22
|
-
const amount = payload.amount.toNumber();
|
|
23
|
-
ctx.meter.Counter('deposit_pool_total_value').add(amount);
|
|
24
|
-
ctx.meter.Counter('distribution_pool_total_value').sub(amount);
|
|
25
|
-
})
|
|
26
|
-
.onDistribute((payload, ctx) => {
|
|
27
|
-
const amount = payload.amount.toNumber();
|
|
28
|
-
ctx.meter.Counter('deposit_pool_total_value').add(amount);
|
|
29
|
-
ctx.meter.Counter('deposit_pool_current_value').add(amount);
|
|
30
|
-
ctx.meter.Counter('distribution_pool_total_value').sub(amount);
|
|
31
|
-
})
|
|
32
|
-
.onSpendWithoutUser((payload, ctx) => {
|
|
33
|
-
const amount = payload.amount.toNumber();
|
|
34
|
-
ctx.meter.Counter('deposit_pool_total_value').add(amount);
|
|
35
|
-
ctx.meter.Counter('deposit_pool_current_value').sub(amount);
|
|
36
|
-
})
|
|
37
|
-
.onAddDistributeSupply((payload, ctx) => {
|
|
38
|
-
const amount = payload.amount.toNumber();
|
|
39
|
-
ctx.meter.Counter('distribution_pool_total_value').add(amount);
|
|
40
|
-
})
|
|
41
|
-
.startSlot(142700000);
|
|
42
|
-
//# sourceMappingURL=mirrorworld.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mirrorworld.js","sourceRoot":"","sources":["../../src/test/mirrorworld.ts"],"names":[],"mappings":";;AAAA,yEAAmE;AAEnE,2CAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;KAClF,uBAAuB,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAChE,CAAC,CAAC;KACD,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC7D,CAAC,CAAC;KACD,UAAU,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAChE,CAAC,CAAC;KACD,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAChE,CAAC,CAAC;KACD,YAAY,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAChE,CAAC,CAAC;KACD,kBAAkB,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACzD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC7D,CAAC,CAAC;KACD,qBAAqB,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IACxC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAChE,CAAC,CAAC;KACD,SAAS,CAAC,SAAS,CAAC,CAAA","sourcesContent":["import { GameWalletProcessor } from './types/game_wallet_processor'\n\nGameWalletProcessor.bind({ address: 'F78NhTC9XmP1DKsCBRz5LGdQc4n4yFbj2dURiv7T9gGZ' })\n .onDistributeWithoutUser((payload, ctx) => {\n const amount = payload.amount.toNumber()\n ctx.meter.Counter('deposit_pool_total_value').add(amount)\n ctx.meter.Counter('deposit_pool_current_value').add(amount)\n ctx.meter.Counter('distribution_pool_total_value').sub(amount)\n })\n .onDeposit((payload, ctx) => {\n const amount = payload.amount.toNumber()\n ctx.meter.Counter('deposit_pool_total_value').add(amount)\n ctx.meter.Counter('deposit_pool_current_value').add(amount)\n })\n .onWithdraw((payload, ctx) => {\n const amount = payload.amount.toNumber()\n ctx.meter.Counter('deposit_pool_total_value').add(amount)\n ctx.meter.Counter('distribution_pool_total_value').sub(amount)\n })\n .onSpend((payload, ctx) => {\n const amount = payload.amount.toNumber()\n ctx.meter.Counter('deposit_pool_total_value').add(amount)\n ctx.meter.Counter('distribution_pool_total_value').sub(amount)\n })\n .onDistribute((payload, ctx) => {\n const amount = payload.amount.toNumber()\n ctx.meter.Counter('deposit_pool_total_value').add(amount)\n ctx.meter.Counter('deposit_pool_current_value').add(amount)\n ctx.meter.Counter('distribution_pool_total_value').sub(amount)\n })\n .onSpendWithoutUser((payload, ctx) => {\n const amount = payload.amount.toNumber()\n ctx.meter.Counter('deposit_pool_total_value').add(amount)\n ctx.meter.Counter('deposit_pool_current_value').sub(amount)\n })\n .onAddDistributeSupply((payload, ctx) => {\n const amount = payload.amount.toNumber()\n ctx.meter.Counter('distribution_pool_total_value').add(amount)\n })\n .startSlot(142700000)\n"]}
|