@sentio/sdk 2.40.0-rc.3 → 2.40.0-rc.31
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/aptos-processor.d.ts +1 -1
- package/lib/aptos/aptos-processor.d.ts.map +1 -1
- package/lib/aptos/aptos-processor.js +1 -1
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/context.d.ts +2 -2
- package/lib/aptos/context.d.ts.map +1 -1
- package/lib/aptos/context.js +1 -1
- package/lib/aptos/ext/aptos-dex.d.ts +1 -1
- package/lib/aptos/ext/aptos-dex.d.ts.map +1 -1
- package/lib/aptos/ext/aptos-dex.js +1 -1
- package/lib/aptos/ext/aptos-dex.js.map +1 -1
- package/lib/aptos/ext/coin-event.d.ts +1 -1
- package/lib/aptos/ext/coin-event.d.ts.map +1 -1
- package/lib/aptos/ext/coin.js +2 -2
- package/lib/aptos/ext/coin.js.map +1 -1
- package/lib/eth/account-processor.d.ts +21 -7
- package/lib/eth/account-processor.d.ts.map +1 -1
- package/lib/eth/account-processor.js +2 -2
- package/lib/eth/account-processor.js.map +1 -1
- package/lib/eth/base-processor-template.d.ts +24 -8
- package/lib/eth/base-processor-template.d.ts.map +1 -1
- package/lib/eth/base-processor-template.js.map +1 -1
- package/lib/eth/base-processor.d.ts +30 -10
- package/lib/eth/base-processor.d.ts.map +1 -1
- package/lib/eth/base-processor.js +6 -6
- package/lib/eth/base-processor.js.map +1 -1
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.d.ts +100 -31
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js +1295 -46
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc1155-processor.d.ts +55 -16
- package/lib/eth/builtin/internal/erc1155-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc1155-processor.js +510 -16
- package/lib/eth/builtin/internal/erc1155-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc20-processor.d.ts +79 -24
- package/lib/eth/builtin/internal/erc20-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc20-processor.js +1039 -36
- package/lib/eth/builtin/internal/erc20-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc20bytes-processor.d.ts +46 -13
- package/lib/eth/builtin/internal/erc20bytes-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc20bytes-processor.js +512 -18
- package/lib/eth/builtin/internal/erc20bytes-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc721-processor.d.ts +67 -20
- package/lib/eth/builtin/internal/erc721-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/erc721-processor.js +826 -28
- package/lib/eth/builtin/internal/erc721-processor.js.map +1 -1
- package/lib/eth/builtin/internal/weth9-processor.d.ts +64 -19
- package/lib/eth/builtin/internal/weth9-processor.d.ts.map +1 -1
- package/lib/eth/builtin/internal/weth9-processor.js +607 -22
- package/lib/eth/builtin/internal/weth9-processor.js.map +1 -1
- package/lib/eth/codegen/event-handler.js +1 -1
- package/lib/eth/codegen/file.d.ts.map +1 -1
- package/lib/eth/codegen/file.js +21 -3
- package/lib/eth/codegen/file.js.map +1 -1
- package/lib/eth/codegen/function-calls.d.ts +4 -0
- package/lib/eth/codegen/function-calls.d.ts.map +1 -1
- package/lib/eth/codegen/function-calls.js +83 -5
- package/lib/eth/codegen/function-calls.js.map +1 -1
- package/lib/eth/codegen/types.d.ts +1 -0
- package/lib/eth/codegen/types.d.ts.map +1 -1
- package/lib/eth/codegen/types.js +13 -0
- package/lib/eth/codegen/types.js.map +1 -1
- package/lib/eth/context.d.ts +4 -0
- package/lib/eth/context.d.ts.map +1 -1
- package/lib/eth/context.js +4 -0
- package/lib/eth/context.js.map +1 -1
- package/lib/eth/eth-plugin.d.ts +27 -9
- package/lib/eth/eth-plugin.d.ts.map +1 -1
- package/lib/eth/eth-plugin.js +20 -17
- package/lib/eth/eth-plugin.js.map +1 -1
- package/lib/eth/eth.d.ts.map +1 -1
- package/lib/eth/eth.js +1 -1
- package/lib/eth/eth.js.map +1 -1
- package/lib/eth/generic-processor.js +1 -1
- package/lib/eth/generic-processor.js.map +1 -1
- package/lib/eth/generic-processor.test.js.map +1 -1
- package/lib/eth/index.d.ts +2 -1
- package/lib/eth/index.d.ts.map +1 -1
- package/lib/eth/index.js +2 -1
- package/lib/eth/index.js.map +1 -1
- package/lib/solana/builtin/spl-token-processor.d.ts +1 -1
- package/lib/solana/builtin/spl-token-processor.d.ts.map +1 -1
- package/lib/solana/builtin/spl-token-processor.js +1 -1
- package/lib/solana/builtin/spl-token-processor.js.map +1 -1
- package/lib/solana/solana-context.d.ts +1 -1
- package/lib/solana/solana-context.js +2 -2
- package/lib/store/cache.d.ts +14 -0
- package/lib/store/cache.d.ts.map +1 -0
- package/lib/store/cache.js +35 -0
- package/lib/store/cache.js.map +1 -0
- package/lib/store/store.d.ts +2 -3
- package/lib/store/store.d.ts.map +1 -1
- package/lib/store/store.js +34 -9
- package/lib/store/store.js.map +1 -1
- package/lib/sui/context.d.ts +1 -1
- package/lib/sui/context.d.ts.map +1 -1
- package/lib/sui/sui-processor.d.ts +1 -1
- package/lib/sui/sui-processor.d.ts.map +1 -1
- package/lib/sui/sui-processor.js +1 -1
- package/lib/sui/sui-processor.js.map +1 -1
- package/lib/testing/aptos-facet.d.ts +1 -1
- package/lib/testing/aptos-facet.js +2 -2
- package/lib/testing/sui-facet.js +1 -1
- package/lib/utils/dex-price.d.ts +1 -0
- package/lib/utils/dex-price.d.ts.map +1 -1
- package/lib/utils/dex-price.js +13 -2
- package/lib/utils/dex-price.js.map +1 -1
- package/package.json +8 -7
- package/src/aptos/aptos-processor.ts +1 -1
- package/src/aptos/context.ts +2 -2
- package/src/aptos/ext/aptos-dex.ts +1 -1
- package/src/aptos/ext/coin-event.ts +1 -1
- package/src/aptos/ext/coin.ts +2 -2
- package/src/eth/account-processor.ts +28 -12
- package/src/eth/base-processor-template.ts +16 -8
- package/src/eth/base-processor.ts +25 -16
- package/src/eth/builtin/internal/eacaggregatorproxy-processor.ts +1643 -123
- package/src/eth/builtin/internal/erc1155-processor.ts +724 -42
- package/src/eth/builtin/internal/erc20-processor.ts +1368 -90
- package/src/eth/builtin/internal/erc20bytes-processor.ts +685 -49
- package/src/eth/builtin/internal/erc721-processor.ts +1116 -70
- package/src/eth/builtin/internal/weth9-processor.ts +798 -63
- package/src/eth/codegen/event-handler.ts +1 -1
- package/src/eth/codegen/file.ts +26 -3
- package/src/eth/codegen/function-calls.ts +101 -8
- package/src/eth/codegen/types.ts +22 -1
- package/src/eth/context.ts +7 -0
- package/src/eth/eth-plugin.ts +34 -26
- package/src/eth/eth.ts +1 -2
- package/src/eth/generic-processor.ts +1 -1
- package/src/eth/index.ts +5 -1
- package/src/solana/builtin/spl-token-processor.ts +1 -1
- package/src/solana/solana-context.ts +2 -2
- package/src/store/cache.ts +46 -0
- package/src/store/store.ts +40 -22
- package/src/sui/context.ts +1 -1
- package/src/sui/sui-processor.ts +1 -1
- package/src/testing/aptos-facet.ts +2 -2
- package/src/testing/sui-facet.ts +1 -1
- package/src/utils/dex-price.ts +15 -2
- package/lib/eth/provider.d.ts +0 -5
- package/lib/eth/provider.d.ts.map +0 -1
- package/lib/eth/provider.js +0 -134
- package/lib/eth/provider.js.map +0 -1
- package/lib/utils/chainlink-oracles-sepolia.csv +0 -19
- package/lib/utils/chainlink-oracles.csv +0 -217
- package/src/eth/provider.ts +0 -163
package/src/sui/context.ts
CHANGED
@@ -8,7 +8,7 @@ import {
|
|
8
8
|
SuiMoveObject,
|
9
9
|
SuiClient
|
10
10
|
} from '@mysten/sui.js/client'
|
11
|
-
import { MoveCoder } from '
|
11
|
+
import { MoveCoder } from './index.js'
|
12
12
|
import { defaultMoveCoder } from './move-coder.js'
|
13
13
|
import { MoveAccountContext, MoveContext } from '../move/index.js'
|
14
14
|
|
package/src/sui/sui-processor.ts
CHANGED
@@ -16,7 +16,7 @@ import {
|
|
16
16
|
TransactionFilter
|
17
17
|
} from '../move/index.js'
|
18
18
|
import { getMoveCalls } from './utils.js'
|
19
|
-
import { defaultMoveCoder, MoveCoder } from '
|
19
|
+
import { defaultMoveCoder, MoveCoder } from './index.js'
|
20
20
|
import { Labels } from '../core/index.js'
|
21
21
|
import { Required } from 'utility-types'
|
22
22
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { UserTransactionResponse, EntryFunctionPayloadResponse } from '@aptos-labs/ts-sdk'
|
2
2
|
import { DataBinding, HandlerType } from '@sentio/protos'
|
3
3
|
import { TestProcessorServer } from './test-processor-server.js'
|
4
|
-
import { AptosNetwork } from '
|
5
|
-
import { parseMoveType, accountTypeString } from '
|
4
|
+
import { AptosNetwork } from '../aptos/index.js'
|
5
|
+
import { parseMoveType, accountTypeString } from '../move/index.js'
|
6
6
|
|
7
7
|
export class AptosFacet {
|
8
8
|
server: TestProcessorServer
|
package/src/testing/sui-facet.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { MoveCallSuiTransaction, SuiTransactionBlockResponse } from '@mysten/sui.js/client'
|
2
2
|
import { DataBinding, HandlerType } from '@sentio/protos'
|
3
3
|
import { TestProcessorServer } from './test-processor-server.js'
|
4
|
-
import { accountTypeString, parseMoveType, SPLITTER } from '
|
4
|
+
import { accountTypeString, parseMoveType, SPLITTER } from '../move/index.js'
|
5
5
|
import { SuiNetwork } from '../sui/index.js'
|
6
6
|
import { getMoveCalls } from '../sui/utils.js'
|
7
7
|
|
package/src/utils/dex-price.ts
CHANGED
@@ -2,9 +2,10 @@ import { getEACAggregatorProxyContract } from '../eth/builtin/eacaggregatorproxy
|
|
2
2
|
import fs from 'fs'
|
3
3
|
import { parse } from 'csv-parse/sync'
|
4
4
|
import { BlockTag } from 'ethers/providers'
|
5
|
-
import url from 'url'
|
6
5
|
import { scaleDown } from '../core/big-decimal.js'
|
7
6
|
import { EthChainId } from '@sentio/chain'
|
7
|
+
import { createRequire } from 'module'
|
8
|
+
import path from 'path'
|
8
9
|
|
9
10
|
type OralceRecord = {
|
10
11
|
Pair: string
|
@@ -24,6 +25,17 @@ export interface DexPriceResult {
|
|
24
25
|
error?: string
|
25
26
|
}
|
26
27
|
|
28
|
+
export function getPackageRoot(pkgId: string): string {
|
29
|
+
const require = createRequire(import.meta.url)
|
30
|
+
const m = require.resolve(pkgId)
|
31
|
+
|
32
|
+
let dir = path.dirname(m)
|
33
|
+
while (!fs.existsSync(path.join(dir, 'package.json'))) {
|
34
|
+
dir = path.dirname(dir)
|
35
|
+
}
|
36
|
+
return dir
|
37
|
+
}
|
38
|
+
|
27
39
|
// Load price feed from https://docs.chain.link/docs/data-feeds/price-feeds/addresses/?network=ethereum
|
28
40
|
// and then use EACAggregatorProxy contract to get price
|
29
41
|
class DexPrice {
|
@@ -36,7 +48,8 @@ class DexPrice {
|
|
36
48
|
|
37
49
|
constructor(csvFileName: string, chainId: EthChainId) {
|
38
50
|
this.chainId = chainId
|
39
|
-
const
|
51
|
+
const packageRoot = getPackageRoot('@sentio/sdk')
|
52
|
+
const csvFilePath = path.join(packageRoot, 'src', 'utils', csvFileName)
|
40
53
|
const fileContent = fs.readFileSync(csvFilePath, { encoding: 'utf-8' })
|
41
54
|
const headers = ['Pair', 'Asset', 'Type', 'Address']
|
42
55
|
|
package/lib/eth/provider.d.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAW,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAI3D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAI1C,eAAO,MAAM,aAAa,iBAA2C,CAAA;AAqBrE,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,QAAQ,CAgC1D"}
|
package/lib/eth/provider.js
DELETED
@@ -1,134 +0,0 @@
|
|
1
|
-
import { JsonRpcProvider, Network } from 'ethers';
|
2
|
-
import PQueue from 'p-queue';
|
3
|
-
import { Endpoints } from '@sentio/runtime';
|
4
|
-
import { EthChainId } from '@sentio/chain';
|
5
|
-
import { LRUCache } from 'lru-cache';
|
6
|
-
import { metrics } from '@opentelemetry/api';
|
7
|
-
export const DummyProvider = new JsonRpcProvider('', Network.from(1));
|
8
|
-
const meter = metrics.getMeter('processor_provider');
|
9
|
-
const hit_count = meter.createCounter('provider_hit_count');
|
10
|
-
const miss_count = meter.createCounter('provider_miss_count');
|
11
|
-
const queue_size = meter.createGauge('provider_queue_size');
|
12
|
-
const total_duration = meter.createCounter('provider_total_duration');
|
13
|
-
const total_queued = meter.createCounter('provider_total_queued');
|
14
|
-
const providers = new Map();
|
15
|
-
// export function getEthChainId(networkish?: EthContext | EthChainId): EthChainId {
|
16
|
-
// if (!networkish) {
|
17
|
-
// networkish = EthChainId.ETHEREUM
|
18
|
-
// }
|
19
|
-
// if (networkish instanceof BaseContext) {
|
20
|
-
// networkish = networkish.getChainId()
|
21
|
-
// }
|
22
|
-
// return networkish
|
23
|
-
// }
|
24
|
-
export function getProvider(chainId) {
|
25
|
-
// const network = getNetworkFromCtxOrNetworkish(networkish)
|
26
|
-
if (!chainId) {
|
27
|
-
chainId = EthChainId.ETHEREUM;
|
28
|
-
}
|
29
|
-
const network = Network.from(parseInt(chainId));
|
30
|
-
// TODO check if other key needed
|
31
|
-
const address = Endpoints.INSTANCE.chainServer.get(chainId);
|
32
|
-
const key = network.chainId.toString() + '-' + address;
|
33
|
-
let provider = providers.get(key);
|
34
|
-
if (provider) {
|
35
|
-
return provider;
|
36
|
-
}
|
37
|
-
if (address === undefined) {
|
38
|
-
throw Error('Provider not found for chain ' +
|
39
|
-
network.chainId +
|
40
|
-
', configured chains: ' +
|
41
|
-
[...Endpoints.INSTANCE.chainServer.keys()].join(' '));
|
42
|
-
}
|
43
|
-
provider = new QueuedStaticJsonRpcProvider(address, network, Endpoints.INSTANCE.concurrency, Endpoints.INSTANCE.batchCount);
|
44
|
-
providers.set(key, provider);
|
45
|
-
return provider;
|
46
|
-
}
|
47
|
-
function getTag(prefix, value) {
|
48
|
-
return (prefix +
|
49
|
-
':' +
|
50
|
-
JSON.stringify(value, (k, v) => {
|
51
|
-
if (v == null) {
|
52
|
-
return 'null';
|
53
|
-
}
|
54
|
-
if (typeof v === 'bigint') {
|
55
|
-
return `bigint:${v.toString()}`;
|
56
|
-
}
|
57
|
-
if (typeof v === 'string') {
|
58
|
-
return v.toLowerCase();
|
59
|
-
}
|
60
|
-
// Sort object keys
|
61
|
-
if (typeof v === 'object' && !Array.isArray(v)) {
|
62
|
-
const keys = Object.keys(v);
|
63
|
-
keys.sort();
|
64
|
-
return keys.reduce((accum, key) => {
|
65
|
-
accum[key] = v[key];
|
66
|
-
return accum;
|
67
|
-
}, {});
|
68
|
-
}
|
69
|
-
return v;
|
70
|
-
}));
|
71
|
-
}
|
72
|
-
class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
|
73
|
-
executor;
|
74
|
-
#performCache = new LRUCache({
|
75
|
-
max: 300000 // 300k items
|
76
|
-
// maxSize: 300 * 1024 * 1024, // 300mb for cache
|
77
|
-
// ttl: 1000 * 60 * 60, // 1 hour no ttl for better performance
|
78
|
-
// sizeCalculation: (value: any) => {
|
79
|
-
// assume each item is 1kb for simplicity
|
80
|
-
// return 1024
|
81
|
-
// }
|
82
|
-
});
|
83
|
-
constructor(url, network, concurrency, batchCount = 1) {
|
84
|
-
// TODO re-enable match when possible
|
85
|
-
super(url, network, { staticNetwork: network, batchMaxCount: batchCount });
|
86
|
-
this.executor = new PQueue({ concurrency: concurrency });
|
87
|
-
}
|
88
|
-
async send(method, params) {
|
89
|
-
if (method !== 'eth_call') {
|
90
|
-
return await this.executor.add(() => super.send(method, params));
|
91
|
-
}
|
92
|
-
const tag = getTag(method, params);
|
93
|
-
const block = params[params.length - 1];
|
94
|
-
let perform = this.#performCache.get(tag);
|
95
|
-
if (!perform) {
|
96
|
-
miss_count.add(1);
|
97
|
-
const queued = Date.now();
|
98
|
-
perform = this.executor.add(() => {
|
99
|
-
const started = Date.now();
|
100
|
-
total_queued.add(started - queued);
|
101
|
-
return super.send(method, params).finally(() => {
|
102
|
-
total_duration.add(Date.now() - started);
|
103
|
-
});
|
104
|
-
});
|
105
|
-
perform.catch((e) => {
|
106
|
-
// if (e.code !== 'CALL_EXCEPTION' && e.code !== 'BAD_DATA') {
|
107
|
-
setTimeout(() => {
|
108
|
-
if (this.#performCache.get(tag) === perform) {
|
109
|
-
this.#performCache.delete(tag);
|
110
|
-
}
|
111
|
-
}, 1000);
|
112
|
-
});
|
113
|
-
queue_size.record(this.executor.size);
|
114
|
-
this.#performCache.set(tag, perform);
|
115
|
-
// For non latest block call, we cache permanently, otherwise we cache for one minute
|
116
|
-
if (block === 'latest') {
|
117
|
-
setTimeout(() => {
|
118
|
-
if (this.#performCache.get(tag) === perform) {
|
119
|
-
this.#performCache.delete(tag);
|
120
|
-
}
|
121
|
-
}, 60 * 1000);
|
122
|
-
}
|
123
|
-
}
|
124
|
-
else {
|
125
|
-
hit_count.add(1);
|
126
|
-
}
|
127
|
-
const result = await perform;
|
128
|
-
if (!result) {
|
129
|
-
throw Error('Unexpected null response');
|
130
|
-
}
|
131
|
-
return result;
|
132
|
-
}
|
133
|
-
}
|
134
|
-
//# sourceMappingURL=provider.js.map
|
package/lib/eth/provider.js.map
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/eth/provider.ts"],"names":[],"mappings":"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"}
|
@@ -1,19 +0,0 @@
|
|
1
|
-
AUD / USD,,,0xB0C712f98daE15264c8E26132BCC91C40aD4d5F9
|
2
|
-
BTC / ETH,,,0x5fb1616F78dA7aFC9FF79e0371741a747D2a7F22
|
3
|
-
BTC / USD,,,0x1b44F3514812d835EB1BDB0acB33d3fA3351Ee43
|
4
|
-
CSPX / USD,,,0x4b531A318B0e44B549F3b2f824721b3D0d51930A
|
5
|
-
CZK / USD,,,0xC32f0A9D70A34B9E7377C10FDAd88512596f61EA
|
6
|
-
DAI / USD,,,0x14866185B1962B63C3Ea9E03Bc1da838bab34C19
|
7
|
-
ETH / USD,,,0x694AA1769357215DE4FAC081bf1f309aDC325306
|
8
|
-
EUR / USD,,,0x1a81afB8146aeFfCFc5E50e8479e826E7D55b910
|
9
|
-
FORTH / USD,,,0x070bF128E88A4520b3EfA65AB1e4Eb6F0F9E6632
|
10
|
-
GBP / USD,,,0x91FAB41F5f3bE955963a986366edAcff1aaeaa83
|
11
|
-
GHO / USD,,,0x635A86F9fdD16Ff09A0701C305D3a845F1758b8E
|
12
|
-
IB01 / USD,,,0xB677bfBc9B09a3469695f40477d05bc9BcB15F50
|
13
|
-
IBTA / USD,,,0x5c13b249846540F81c093Bc342b5d963a7518145
|
14
|
-
JPY / USD,,,0x8A6af2B75F23831ADc973ce6288e5329F63D86c6
|
15
|
-
LINK / ETH,,,0x42585eD362B3f1BCa95c640FdFf35Ef899212734
|
16
|
-
LINK / USD,,,0xc59E3633BAAC79493d908e63626716e204A45EdF
|
17
|
-
SNX / USD,,,0xc0F82A46033b8BdBA4Bb0B0e28Bc2006F64355bC
|
18
|
-
USDC / USD,,,0xA2F78ab2355fe2f984D808B5CeE7FD0A93D5270E
|
19
|
-
XAU / USD,,,0xC5981F461d74c46eB4b0CF3f4Ec79f025573B0Ea
|
@@ -1,217 +0,0 @@
|
|
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
|
package/src/eth/provider.ts
DELETED
@@ -1,163 +0,0 @@
|
|
1
|
-
import { JsonRpcProvider, Network, Provider } from 'ethers'
|
2
|
-
|
3
|
-
import PQueue from 'p-queue'
|
4
|
-
import { Endpoints } from '@sentio/runtime'
|
5
|
-
import { EthChainId } from '@sentio/chain'
|
6
|
-
import { LRUCache } from 'lru-cache'
|
7
|
-
import { metrics } from '@opentelemetry/api'
|
8
|
-
|
9
|
-
export const DummyProvider = new JsonRpcProvider('', Network.from(1))
|
10
|
-
|
11
|
-
const meter = metrics.getMeter('processor_provider')
|
12
|
-
const hit_count = meter.createCounter('provider_hit_count')
|
13
|
-
const miss_count = meter.createCounter('provider_miss_count')
|
14
|
-
const queue_size = meter.createGauge('provider_queue_size')
|
15
|
-
const total_duration = meter.createCounter('provider_total_duration')
|
16
|
-
const total_queued = meter.createCounter('provider_total_queued')
|
17
|
-
|
18
|
-
const providers = new Map<string, JsonRpcProvider>()
|
19
|
-
|
20
|
-
// export function getEthChainId(networkish?: EthContext | EthChainId): EthChainId {
|
21
|
-
// if (!networkish) {
|
22
|
-
// networkish = EthChainId.ETHEREUM
|
23
|
-
// }
|
24
|
-
// if (networkish instanceof BaseContext) {
|
25
|
-
// networkish = networkish.getChainId()
|
26
|
-
// }
|
27
|
-
// return networkish
|
28
|
-
// }
|
29
|
-
|
30
|
-
export function getProvider(chainId?: EthChainId): Provider {
|
31
|
-
// const network = getNetworkFromCtxOrNetworkish(networkish)
|
32
|
-
if (!chainId) {
|
33
|
-
chainId = EthChainId.ETHEREUM
|
34
|
-
}
|
35
|
-
const network = Network.from(parseInt(chainId))
|
36
|
-
// TODO check if other key needed
|
37
|
-
|
38
|
-
const address = Endpoints.INSTANCE.chainServer.get(chainId)
|
39
|
-
const key = network.chainId.toString() + '-' + address
|
40
|
-
let provider = providers.get(key)
|
41
|
-
|
42
|
-
if (provider) {
|
43
|
-
return provider
|
44
|
-
}
|
45
|
-
|
46
|
-
if (address === undefined) {
|
47
|
-
throw Error(
|
48
|
-
'Provider not found for chain ' +
|
49
|
-
network.chainId +
|
50
|
-
', configured chains: ' +
|
51
|
-
[...Endpoints.INSTANCE.chainServer.keys()].join(' ')
|
52
|
-
)
|
53
|
-
}
|
54
|
-
provider = new QueuedStaticJsonRpcProvider(
|
55
|
-
address,
|
56
|
-
network,
|
57
|
-
Endpoints.INSTANCE.concurrency,
|
58
|
-
Endpoints.INSTANCE.batchCount
|
59
|
-
)
|
60
|
-
providers.set(key, provider)
|
61
|
-
return provider
|
62
|
-
}
|
63
|
-
|
64
|
-
function getTag(prefix: string, value: any): string {
|
65
|
-
return (
|
66
|
-
prefix +
|
67
|
-
':' +
|
68
|
-
JSON.stringify(value, (k, v) => {
|
69
|
-
if (v == null) {
|
70
|
-
return 'null'
|
71
|
-
}
|
72
|
-
if (typeof v === 'bigint') {
|
73
|
-
return `bigint:${v.toString()}`
|
74
|
-
}
|
75
|
-
if (typeof v === 'string') {
|
76
|
-
return v.toLowerCase()
|
77
|
-
}
|
78
|
-
|
79
|
-
// Sort object keys
|
80
|
-
if (typeof v === 'object' && !Array.isArray(v)) {
|
81
|
-
const keys = Object.keys(v)
|
82
|
-
keys.sort()
|
83
|
-
return keys.reduce(
|
84
|
-
(accum, key) => {
|
85
|
-
accum[key] = v[key]
|
86
|
-
return accum
|
87
|
-
},
|
88
|
-
<any>{}
|
89
|
-
)
|
90
|
-
}
|
91
|
-
|
92
|
-
return v
|
93
|
-
})
|
94
|
-
)
|
95
|
-
}
|
96
|
-
|
97
|
-
class QueuedStaticJsonRpcProvider extends JsonRpcProvider {
|
98
|
-
executor: PQueue
|
99
|
-
#performCache = new LRUCache<string, Promise<any>>({
|
100
|
-
max: 300000 // 300k items
|
101
|
-
// maxSize: 300 * 1024 * 1024, // 300mb for cache
|
102
|
-
// ttl: 1000 * 60 * 60, // 1 hour no ttl for better performance
|
103
|
-
// sizeCalculation: (value: any) => {
|
104
|
-
// assume each item is 1kb for simplicity
|
105
|
-
// return 1024
|
106
|
-
// }
|
107
|
-
})
|
108
|
-
|
109
|
-
constructor(url: string, network: Network, concurrency: number, batchCount = 1) {
|
110
|
-
// TODO re-enable match when possible
|
111
|
-
super(url, network, { staticNetwork: network, batchMaxCount: batchCount })
|
112
|
-
this.executor = new PQueue({ concurrency: concurrency })
|
113
|
-
}
|
114
|
-
|
115
|
-
async send(method: string, params: Array<any>): Promise<any> {
|
116
|
-
if (method !== 'eth_call') {
|
117
|
-
return await this.executor.add(() => super.send(method, params))
|
118
|
-
}
|
119
|
-
const tag = getTag(method, params)
|
120
|
-
const block = params[params.length - 1]
|
121
|
-
let perform = this.#performCache.get(tag)
|
122
|
-
if (!perform) {
|
123
|
-
miss_count.add(1)
|
124
|
-
const queued: number = Date.now()
|
125
|
-
perform = this.executor.add(() => {
|
126
|
-
const started = Date.now()
|
127
|
-
total_queued.add(started - queued)
|
128
|
-
|
129
|
-
return super.send(method, params).finally(() => {
|
130
|
-
total_duration.add(Date.now() - started)
|
131
|
-
})
|
132
|
-
})
|
133
|
-
perform.catch((e) => {
|
134
|
-
// if (e.code !== 'CALL_EXCEPTION' && e.code !== 'BAD_DATA') {
|
135
|
-
setTimeout(() => {
|
136
|
-
if (this.#performCache.get(tag) === perform) {
|
137
|
-
this.#performCache.delete(tag)
|
138
|
-
}
|
139
|
-
}, 1000)
|
140
|
-
})
|
141
|
-
|
142
|
-
queue_size.record(this.executor.size)
|
143
|
-
|
144
|
-
this.#performCache.set(tag, perform)
|
145
|
-
// For non latest block call, we cache permanently, otherwise we cache for one minute
|
146
|
-
if (block === 'latest') {
|
147
|
-
setTimeout(() => {
|
148
|
-
if (this.#performCache.get(tag) === perform) {
|
149
|
-
this.#performCache.delete(tag)
|
150
|
-
}
|
151
|
-
}, 60 * 1000)
|
152
|
-
}
|
153
|
-
} else {
|
154
|
-
hit_count.add(1)
|
155
|
-
}
|
156
|
-
|
157
|
-
const result = await perform
|
158
|
-
if (!result) {
|
159
|
-
throw Error('Unexpected null response')
|
160
|
-
}
|
161
|
-
return result
|
162
|
-
}
|
163
|
-
}
|