@sentio/sdk 2.14.4 → 2.15.0-rc.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/api.d.ts +1 -2
- package/lib/aptos/api.js +2 -2
- package/lib/aptos/api.js.map +1 -1
- package/lib/aptos/aptos-chain-adapter.d.ts +1 -1
- package/lib/aptos/aptos-chain-adapter.js +17 -13
- package/lib/aptos/aptos-chain-adapter.js.map +1 -1
- package/lib/aptos/aptos-processor.js +3 -3
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/aptos/context.d.ts +2 -2
- package/lib/aptos/context.js +3 -4
- package/lib/aptos/context.js.map +1 -1
- package/lib/aptos/ext/coin.js +2 -2
- package/lib/aptos/ext/coin.js.map +1 -1
- package/lib/aptos/network.d.ts +7 -7
- package/lib/aptos/network.js +6 -19
- package/lib/aptos/network.js.map +1 -1
- package/lib/core/base-context.d.ts +2 -1
- package/lib/core/base-context.js.map +1 -1
- package/lib/core/chain.d.ts +194 -93
- package/lib/core/chain.js +112 -96
- package/lib/core/chain.js.map +1 -1
- package/lib/core/yaml-contract-config.d.ts +2 -1
- package/lib/core/yaml-contract-config.js.map +1 -1
- package/lib/eth/account-processor.d.ts +3 -2
- package/lib/eth/account-processor.js +3 -3
- package/lib/eth/account-processor.js.map +1 -1
- package/lib/eth/base-processor-template.d.ts +2 -3
- package/lib/eth/base-processor-template.js +1 -2
- package/lib/eth/base-processor-template.js.map +1 -1
- package/lib/eth/base-processor.d.ts +5 -5
- package/lib/eth/base-processor.js +5 -5
- package/lib/eth/base-processor.js.map +1 -1
- package/lib/eth/bind-options.d.ts +3 -3
- package/lib/eth/bind-options.js +3 -4
- package/lib/eth/bind-options.js.map +1 -1
- package/lib/eth/binds.d.ts +3 -3
- package/lib/eth/binds.js +1 -3
- package/lib/eth/binds.js.map +1 -1
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.d.ts +2 -4
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js +2 -2
- package/lib/eth/builtin/internal/eacaggregatorproxy-processor.js.map +1 -1
- package/lib/eth/builtin/internal/eacaggregatorproxy-test-utils.js +5 -4
- package/lib/eth/builtin/internal/eacaggregatorproxy-test-utils.js.map +1 -1
- package/lib/eth/builtin/internal/erc1155-processor.d.ts +2 -4
- package/lib/eth/builtin/internal/erc1155-processor.js +2 -2
- package/lib/eth/builtin/internal/erc1155-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc1155-test-utils.js +5 -4
- package/lib/eth/builtin/internal/erc1155-test-utils.js.map +1 -1
- package/lib/eth/builtin/internal/erc20-processor.d.ts +2 -4
- package/lib/eth/builtin/internal/erc20-processor.js +2 -2
- package/lib/eth/builtin/internal/erc20-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc20-test-utils.js +4 -3
- package/lib/eth/builtin/internal/erc20-test-utils.js.map +1 -1
- package/lib/eth/builtin/internal/erc20bytes-processor.d.ts +2 -4
- package/lib/eth/builtin/internal/erc20bytes-processor.js +2 -2
- package/lib/eth/builtin/internal/erc20bytes-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc20bytes-test-utils.js +3 -2
- package/lib/eth/builtin/internal/erc20bytes-test-utils.js.map +1 -1
- package/lib/eth/builtin/internal/erc721-processor.d.ts +2 -4
- package/lib/eth/builtin/internal/erc721-processor.js +2 -2
- package/lib/eth/builtin/internal/erc721-processor.js.map +1 -1
- package/lib/eth/builtin/internal/erc721-test-utils.js +4 -3
- package/lib/eth/builtin/internal/erc721-test-utils.js.map +1 -1
- package/lib/eth/builtin/internal/weth9-processor.d.ts +2 -4
- package/lib/eth/builtin/internal/weth9-processor.js +2 -2
- package/lib/eth/builtin/internal/weth9-processor.js.map +1 -1
- package/lib/eth/builtin/internal/weth9-test-utils.js +5 -4
- package/lib/eth/builtin/internal/weth9-test-utils.js.map +1 -1
- package/lib/eth/codegen/ethers-sentio.js +11 -4
- package/lib/eth/codegen/ethers-sentio.js.map +1 -1
- package/lib/eth/codegen/file.js +9 -6
- package/lib/eth/codegen/file.js.map +1 -1
- package/lib/eth/context.d.ts +6 -5
- package/lib/eth/context.js +2 -2
- package/lib/eth/context.js.map +1 -1
- package/lib/eth/eth-plugin.js +7 -9
- package/lib/eth/eth-plugin.js.map +1 -1
- package/lib/eth/index.d.ts +3 -1
- package/lib/eth/index.js +3 -1
- package/lib/eth/index.js.map +1 -1
- package/lib/eth/provider.d.ts +5 -5
- package/lib/eth/provider.js +12 -14
- package/lib/eth/provider.js.map +1 -1
- package/lib/eth/provider.test.js.map +1 -1
- package/lib/move/abstract-codegen.d.ts +1 -1
- package/lib/move/abstract-codegen.js +10 -3
- package/lib/move/abstract-codegen.js.map +1 -1
- package/lib/move/chain-adapter.d.ts +1 -1
- package/lib/move/chain-adapter.js.map +1 -1
- package/lib/solana/solana-context.d.ts +4 -3
- package/lib/solana/solana-context.js +3 -2
- package/lib/solana/solana-context.js.map +1 -1
- package/lib/solana/solana-options.d.ts +2 -1
- package/lib/solana/solana-options.js.map +1 -1
- package/lib/solana/solana-processor.d.ts +2 -1
- package/lib/solana/solana-processor.js +2 -2
- package/lib/solana/solana-processor.js.map +1 -1
- package/lib/sui/context.d.ts +2 -2
- package/lib/sui/context.js +4 -5
- package/lib/sui/context.js.map +1 -1
- package/lib/sui/network.d.ts +7 -7
- package/lib/sui/network.js +6 -19
- package/lib/sui/network.js.map +1 -1
- package/lib/sui/sui-chain-adapter.d.ts +1 -1
- package/lib/sui/sui-chain-adapter.js +8 -6
- package/lib/sui/sui-chain-adapter.js.map +1 -1
- package/lib/sui/sui-plugin.js +1 -2
- package/lib/sui/sui-plugin.js.map +1 -1
- package/lib/sui/sui-processor.js +3 -3
- package/lib/sui/sui-processor.js.map +1 -1
- package/lib/testing/aptos-facet.js +2 -3
- package/lib/testing/aptos-facet.js.map +1 -1
- package/lib/testing/eth-facet.d.ts +14 -13
- package/lib/testing/eth-facet.js +17 -17
- package/lib/testing/eth-facet.js.map +1 -1
- package/lib/testing/sui-facet.js +2 -3
- package/lib/testing/sui-facet.js.map +1 -1
- package/lib/utils/dex-price.d.ts +3 -2
- package/lib/utils/dex-price.js +3 -2
- package/lib/utils/dex-price.js.map +1 -1
- package/lib/utils/erc20.test.js.map +1 -1
- package/lib/utils/price.d.ts +2 -1
- package/lib/utils/price.js.map +1 -1
- package/lib/utils/token.d.ts +3 -4
- package/lib/utils/token.js +2 -2
- package/lib/utils/token.js.map +1 -1
- package/package.json +3 -3
- package/src/aptos/api.ts +2 -2
- package/src/aptos/aptos-chain-adapter.ts +17 -15
- package/src/aptos/aptos-processor.ts +3 -3
- package/src/aptos/context.ts +6 -6
- package/src/aptos/ext/coin.ts +2 -2
- package/src/aptos/network.ts +6 -19
- package/src/core/base-context.ts +2 -1
- package/src/core/chain.ts +113 -96
- package/src/core/yaml-contract-config.ts +3 -1
- package/src/eth/account-processor.ts +7 -7
- package/src/eth/base-processor-template.ts +3 -5
- package/src/eth/base-processor.ts +9 -10
- package/src/eth/bind-options.ts +4 -6
- package/src/eth/binds.ts +5 -7
- package/src/eth/builtin/internal/eacaggregatorproxy-processor.ts +5 -5
- package/src/eth/builtin/internal/eacaggregatorproxy-test-utils.ts +17 -4
- package/src/eth/builtin/internal/erc1155-processor.ts +5 -5
- package/src/eth/builtin/internal/erc1155-test-utils.ts +5 -4
- package/src/eth/builtin/internal/erc20-processor.ts +5 -5
- package/src/eth/builtin/internal/erc20-test-utils.ts +4 -3
- package/src/eth/builtin/internal/erc20bytes-processor.ts +5 -5
- package/src/eth/builtin/internal/erc20bytes-test-utils.ts +3 -2
- package/src/eth/builtin/internal/erc721-processor.ts +5 -5
- package/src/eth/builtin/internal/erc721-test-utils.ts +4 -3
- package/src/eth/builtin/internal/weth9-processor.ts +5 -5
- package/src/eth/builtin/internal/weth9-test-utils.ts +5 -4
- package/src/eth/codegen/ethers-sentio.ts +12 -5
- package/src/eth/codegen/file.ts +9 -6
- package/src/eth/context.ts +8 -7
- package/src/eth/eth-plugin.ts +7 -10
- package/src/eth/index.ts +4 -1
- package/src/eth/provider.ts +13 -15
- package/src/move/abstract-codegen.ts +12 -3
- package/src/move/chain-adapter.ts +4 -2
- package/src/solana/solana-context.ts +12 -5
- package/src/solana/solana-options.ts +2 -1
- package/src/solana/solana-processor.ts +3 -3
- package/src/sui/context.ts +7 -7
- package/src/sui/network.ts +6 -19
- package/src/sui/sui-chain-adapter.ts +9 -6
- package/src/sui/sui-plugin.ts +1 -2
- package/src/sui/sui-processor.ts +3 -3
- package/src/testing/aptos-facet.ts +2 -3
- package/src/testing/eth-facet.ts +33 -18
- package/src/testing/sui-facet.ts +2 -3
- package/src/utils/dex-price.ts +5 -4
- package/src/utils/price.ts +2 -1
- package/src/utils/token.ts +5 -6
package/lib/testing/eth-facet.js
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
import { HandlerType } from '@sentio/protos';
|
2
|
-
import {
|
2
|
+
import { EthChainId } from '../core/chain.js';
|
3
3
|
export class EthFacet {
|
4
4
|
server;
|
5
5
|
constructor(server) {
|
6
6
|
this.server = server;
|
7
7
|
}
|
8
|
-
testTrace(trace, network =
|
8
|
+
testTrace(trace, network = EthChainId.ETHEREUM) {
|
9
9
|
return this.testTraces([trace], network);
|
10
10
|
}
|
11
|
-
testTraces(traces, network =
|
11
|
+
testTraces(traces, network = EthChainId.ETHEREUM) {
|
12
12
|
const bindings = [];
|
13
13
|
for (const trace of traces) {
|
14
14
|
const binding = this.buildTraceBinding(trace, network);
|
@@ -21,13 +21,13 @@ export class EthFacet {
|
|
21
21
|
bindings: bindings,
|
22
22
|
});
|
23
23
|
}
|
24
|
-
buildTraceBinding(trace, network =
|
24
|
+
buildTraceBinding(trace, network = EthChainId.ETHEREUM) {
|
25
25
|
if (trace.type !== 'call' || !trace.action.input) {
|
26
26
|
throw Error('Invalid test trace: ' + JSON.stringify(trace));
|
27
27
|
}
|
28
28
|
const signature = trace.action.input.slice(0, 10);
|
29
29
|
for (const contract of this.server.contractConfigs) {
|
30
|
-
if (contract.contract?.chainId !==
|
30
|
+
if (contract.contract?.chainId !== network) {
|
31
31
|
continue;
|
32
32
|
}
|
33
33
|
if (trace.action.to?.toLowerCase() !== contract.contract?.address.toLowerCase()) {
|
@@ -50,10 +50,10 @@ export class EthFacet {
|
|
50
50
|
}
|
51
51
|
return undefined;
|
52
52
|
}
|
53
|
-
testLog(log, network =
|
53
|
+
testLog(log, network = EthChainId.ETHEREUM) {
|
54
54
|
return this.testLogs([log], network);
|
55
55
|
}
|
56
|
-
testLogs(logs, network =
|
56
|
+
testLogs(logs, network = EthChainId.ETHEREUM) {
|
57
57
|
const bindings = [];
|
58
58
|
for (const log of logs) {
|
59
59
|
const binding = this.buildLogBinding(log, network);
|
@@ -66,9 +66,9 @@ export class EthFacet {
|
|
66
66
|
bindings: bindings,
|
67
67
|
});
|
68
68
|
}
|
69
|
-
buildLogBinding(log, network =
|
69
|
+
buildLogBinding(log, network = EthChainId.ETHEREUM) {
|
70
70
|
for (const contract of this.server.contractConfigs) {
|
71
|
-
if (contract.contract?.chainId !==
|
71
|
+
if (contract.contract?.chainId !== network) {
|
72
72
|
continue;
|
73
73
|
}
|
74
74
|
if (log.address.toLowerCase() !== contract.contract?.address.toLowerCase()) {
|
@@ -108,10 +108,10 @@ export class EthFacet {
|
|
108
108
|
}
|
109
109
|
return undefined;
|
110
110
|
}
|
111
|
-
testAccountLog(address, log, network =
|
111
|
+
testAccountLog(address, log, network = EthChainId.ETHEREUM) {
|
112
112
|
return this.testAccountLogs(address, [log], network);
|
113
113
|
}
|
114
|
-
testAccountLogs(address, logs, network =
|
114
|
+
testAccountLogs(address, logs, network = EthChainId.ETHEREUM) {
|
115
115
|
const bindings = [];
|
116
116
|
for (const log of logs) {
|
117
117
|
const binding = this.buildAccountLogBinding(address, log, network);
|
@@ -124,9 +124,9 @@ export class EthFacet {
|
|
124
124
|
bindings: bindings,
|
125
125
|
});
|
126
126
|
}
|
127
|
-
buildAccountLogBinding(address, log, network =
|
127
|
+
buildAccountLogBinding(address, log, network = EthChainId.ETHEREUM) {
|
128
128
|
for (const account of this.server.accountConfigs) {
|
129
|
-
if (account.chainId !==
|
129
|
+
if (account.chainId !== network) {
|
130
130
|
continue;
|
131
131
|
}
|
132
132
|
if (address.toLowerCase() !== account.address.toLowerCase()) {
|
@@ -166,10 +166,10 @@ export class EthFacet {
|
|
166
166
|
}
|
167
167
|
return undefined;
|
168
168
|
}
|
169
|
-
testBlock(block, network =
|
169
|
+
testBlock(block, network = EthChainId.ETHEREUM) {
|
170
170
|
return this.testBlocks([block], network);
|
171
171
|
}
|
172
|
-
testBlocks(blocks, network =
|
172
|
+
testBlocks(blocks, network = EthChainId.ETHEREUM) {
|
173
173
|
const bindings = [];
|
174
174
|
for (const block of blocks) {
|
175
175
|
const binding = this.buildBlockBinding(block, network);
|
@@ -182,7 +182,7 @@ export class EthFacet {
|
|
182
182
|
bindings: bindings,
|
183
183
|
});
|
184
184
|
}
|
185
|
-
buildBlockBinding(block, network =
|
185
|
+
buildBlockBinding(block, network = EthChainId.ETHEREUM) {
|
186
186
|
const binding = {
|
187
187
|
data: {
|
188
188
|
ethBlock: { block },
|
@@ -191,7 +191,7 @@ export class EthFacet {
|
|
191
191
|
handlerIds: [],
|
192
192
|
};
|
193
193
|
for (const contract of this.server.contractConfigs) {
|
194
|
-
if (contract.contract?.chainId !==
|
194
|
+
if (contract.contract?.chainId !== network) {
|
195
195
|
continue;
|
196
196
|
}
|
197
197
|
const longBlockNumber = block.number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eth-facet.js","sourceRoot":"","sources":["../../src/testing/eth-facet.ts"],"names":[],"mappings":"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","sourcesContent":["import { TestProcessorServer } from './test-processor-server.js'\nimport { DataBinding, HandlerType, ProcessBindingResponse } from '@sentio/protos'\nimport { Trace } from '../eth/eth.js'\nimport { BlockParams, LogParams, Networkish } from 'ethers/providers'\nimport { Block } from 'ethers'\nimport { getNetworkFromCtxOrNetworkish } from '../eth/provider.js'\n\nexport class EthFacet {\n server: TestProcessorServer\n\n constructor(server: TestProcessorServer) {\n this.server = server\n }\n\n testTrace(trace: Trace, network: Networkish = 1): Promise<ProcessBindingResponse> {\n return this.testTraces([trace], network)\n }\n\n testTraces(traces: Trace[], network: Networkish = 1): Promise<ProcessBindingResponse> {\n const bindings = []\n for (const trace of traces) {\n const binding = this.buildTraceBinding(trace, network)\n if (!binding) {\n throw Error('Invalid test trace: ' + JSON.stringify(trace))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildTraceBinding(trace: Trace, network: Networkish = 1): DataBinding | undefined {\n if (trace.type !== 'call' || !trace.action.input) {\n throw Error('Invalid test trace: ' + JSON.stringify(trace))\n }\n const signature = trace.action.input.slice(0, 10)\n\n for (const contract of this.server.contractConfigs) {\n if (contract.contract?.chainId !== getNetworkFromCtxOrNetworkish(network).chainId.toString()) {\n continue\n }\n if (trace.action.to?.toLowerCase() !== contract.contract?.address.toLowerCase()) {\n continue\n }\n for (const config of contract.traceConfigs) {\n if (config.signature == signature) {\n return {\n data: {\n ethTrace: {\n trace,\n timestamp: new Date(),\n },\n },\n handlerIds: [config.handlerId],\n handlerType: HandlerType.ETH_TRACE,\n }\n }\n }\n }\n return undefined\n }\n\n testLog(log: LogParams, network: Networkish = 1): Promise<ProcessBindingResponse> {\n return this.testLogs([log], network)\n }\n\n testLogs(logs: LogParams[], network: Networkish = 1): Promise<ProcessBindingResponse> {\n const bindings = []\n for (const log of logs) {\n const binding = this.buildLogBinding(log, network)\n if (!binding) {\n throw Error('Invalid test log: ' + JSON.stringify(log))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildLogBinding(log: LogParams, network: Networkish = 1): DataBinding | undefined {\n for (const contract of this.server.contractConfigs) {\n if (contract.contract?.chainId !== getNetworkFromCtxOrNetworkish(network).chainId.toString()) {\n continue\n }\n if (log.address.toLowerCase() !== contract.contract?.address.toLowerCase()) {\n continue\n }\n for (const config of contract.logConfigs) {\n for (const filter of config.filters) {\n // if (filter.topics.length != log.topics.length) {\n // continue\n // }\n\n let match = true\n for (const topicIdx in filter.topics) {\n const logTopic = log.topics[topicIdx]\n const possibleTopic = filter.topics[topicIdx].hashes\n if (possibleTopic.length === 0) {\n // match all\n continue\n }\n if (possibleTopic.find((e) => e.toLowerCase() === logTopic.toLowerCase())) {\n // find one\n continue\n }\n match = false\n break\n }\n if (match) {\n return {\n data: {\n ethLog: { log, timestamp: new Date() },\n },\n handlerIds: [config.handlerId],\n handlerType: HandlerType.ETH_LOG,\n }\n }\n }\n }\n }\n return undefined\n }\n testAccountLog(address: string, log: LogParams, network: Networkish = 1): Promise<ProcessBindingResponse> {\n return this.testAccountLogs(address, [log], network)\n }\n\n testAccountLogs(address: string, logs: LogParams[], network: Networkish = 1): Promise<ProcessBindingResponse> {\n const bindings = []\n for (const log of logs) {\n const binding = this.buildAccountLogBinding(address, log, network)\n if (!binding) {\n throw Error('Invalid test log: ' + JSON.stringify(log))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildAccountLogBinding(address: string, log: LogParams, network: Networkish = 1): DataBinding | undefined {\n for (const account of this.server.accountConfigs) {\n if (account.chainId !== getNetworkFromCtxOrNetworkish(network).chainId.toString()) {\n continue\n }\n if (address.toLowerCase() !== account.address.toLowerCase()) {\n continue\n }\n for (const config of account.logConfigs) {\n for (const filter of config.filters) {\n // if (filter.topics.length != log.topics.length) {\n // continue\n // }\n\n let match = true\n for (const topicIdx in filter.topics) {\n const logTopic = log.topics[topicIdx]\n const possibleTopic = filter.topics[topicIdx].hashes\n if (possibleTopic.length === 0) {\n // match all\n continue\n }\n if (possibleTopic.find((e) => e.toLowerCase() === logTopic.toLowerCase())) {\n // find one\n continue\n }\n match = false\n break\n }\n if (match) {\n return {\n data: {\n ethLog: { log, timestamp: new Date() },\n },\n handlerIds: [config.handlerId],\n handlerType: HandlerType.ETH_LOG,\n }\n }\n }\n }\n }\n return undefined\n }\n\n testBlock(\n block: Partial<BlockParams> & { number: number },\n network: Networkish = 1\n ): Promise<ProcessBindingResponse> {\n return this.testBlocks([block], network)\n }\n\n testBlocks(blocks: Partial<BlockParams> & { number: number }[], network: Networkish = 1) {\n const bindings = []\n for (const block of blocks) {\n const binding = this.buildBlockBinding(block, network)\n if (!binding) {\n throw Error('Invalid test block: ' + JSON.stringify(block))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildBlockBinding(block: Partial<Block> & { number: number }, network: Networkish = 1): DataBinding {\n const binding: DataBinding = {\n data: {\n ethBlock: { block },\n },\n handlerType: HandlerType.ETH_BLOCK,\n handlerIds: [],\n }\n for (const contract of this.server.contractConfigs) {\n if (contract.contract?.chainId !== getNetworkFromCtxOrNetworkish(network).chainId.toString()) {\n continue\n }\n const longBlockNumber = block.number\n if (longBlockNumber < contract.startBlock) {\n continue\n }\n if (contract.endBlock !== 0n && longBlockNumber >= contract.endBlock) {\n continue\n }\n\n for (const config of contract.intervalConfigs) {\n binding.handlerIds.push(config.handlerId)\n }\n }\n return binding\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"eth-facet.js","sourceRoot":"","sources":["../../src/testing/eth-facet.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAA0B,MAAM,gBAAgB,CAAA;AAIjF,OAAO,EAAW,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAqB;IAE3B,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,SAAS,CAAC,KAAY,EAAE,UAAsB,UAAU,CAAC,QAAQ;QAC/D,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,UAAU,CAAC,MAAe,EAAE,UAAsB,UAAU,CAAC,QAAQ;QACnE,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YACtD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;aAC5D;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACvB;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;IAED,iBAAiB,CAAC,KAAY,EAAE,UAAmB,UAAU,CAAC,QAAQ;QACpE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;YAChD,MAAM,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;SAC5D;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAEjD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAClD,IAAI,QAAQ,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE;gBAC1C,SAAQ;aACT;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC/E,SAAQ;aACT;YACD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,YAAY,EAAE;gBAC1C,IAAI,MAAM,CAAC,SAAS,IAAI,SAAS,EAAE;oBACjC,OAAO;wBACL,IAAI,EAAE;4BACJ,QAAQ,EAAE;gCACR,KAAK;gCACL,SAAS,EAAE,IAAI,IAAI,EAAE;6BACtB;yBACF;wBACD,UAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;wBAC9B,WAAW,EAAE,WAAW,CAAC,SAAS;qBACnC,CAAA;iBACF;aACF;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,CAAC,GAAc,EAAE,UAAsB,UAAU,CAAC,QAAQ;QAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,QAAQ,CAAC,IAAiB,EAAE,UAAsB,UAAU,CAAC,QAAQ;QACnE,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAClD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;aACxD;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACvB;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;IAED,eAAe,CAAC,GAAc,EAAE,UAAsB,UAAU,CAAC,QAAQ;QACvE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAClD,IAAI,QAAQ,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE;gBAC1C,SAAQ;aACT;YACD,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC1E,SAAQ;aACT;YACD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;gBACxC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;oBACnC,mDAAmD;oBACnD,aAAa;oBACb,IAAI;oBAEJ,IAAI,KAAK,GAAG,IAAI,CAAA;oBAChB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;wBACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;wBACrC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;wBACpD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;4BAC9B,YAAY;4BACZ,SAAQ;yBACT;wBACD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;4BACzE,WAAW;4BACX,SAAQ;yBACT;wBACD,KAAK,GAAG,KAAK,CAAA;wBACb,MAAK;qBACN;oBACD,IAAI,KAAK,EAAE;wBACT,OAAO;4BACL,IAAI,EAAE;gCACJ,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE;6BACvC;4BACD,UAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;4BAC9B,WAAW,EAAE,WAAW,CAAC,OAAO;yBACjC,CAAA;qBACF;iBACF;aACF;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,cAAc,CACZ,OAAe,EACf,GAAc,EACd,UAAsB,UAAU,CAAC,QAAQ;QAEzC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAA;IACtD,CAAC;IAED,eAAe,CACb,OAAe,EACf,IAAiB,EACjB,UAAsB,UAAU,CAAC,QAAQ;QAEzC,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;YAClE,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;aACxD;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACvB;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;IAED,sBAAsB,CACpB,OAAe,EACf,GAAc,EACd,UAAsB,UAAU,CAAC,QAAQ;QAEzC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAChD,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE;gBAC/B,SAAQ;aACT;YACD,IAAI,OAAO,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;gBAC3D,SAAQ;aACT;YACD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE;gBACvC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;oBACnC,mDAAmD;oBACnD,aAAa;oBACb,IAAI;oBAEJ,IAAI,KAAK,GAAG,IAAI,CAAA;oBAChB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;wBACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;wBACrC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;wBACpD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;4BAC9B,YAAY;4BACZ,SAAQ;yBACT;wBACD,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE;4BACzE,WAAW;4BACX,SAAQ;yBACT;wBACD,KAAK,GAAG,KAAK,CAAA;wBACb,MAAK;qBACN;oBACD,IAAI,KAAK,EAAE;wBACT,OAAO;4BACL,IAAI,EAAE;gCACJ,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE;6BACvC;4BACD,UAAU,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;4BAC9B,WAAW,EAAE,WAAW,CAAC,OAAO;yBACjC,CAAA;qBACF;iBACF;aACF;SACF;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS,CACP,KAAgD,EAChD,UAAsB,UAAU,CAAC,QAAQ;QAEzC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,UAAU,CAAC,MAAmD,EAAE,UAAsB,UAAU,CAAC,QAAQ;QACvG,MAAM,QAAQ,GAAG,EAAE,CAAA;QACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YACtD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;aAC5D;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SACvB;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAA;IACJ,CAAC;IAED,iBAAiB,CACf,KAA0C,EAC1C,UAAsB,UAAU,CAAC,QAAQ;QAEzC,MAAM,OAAO,GAAgB;YAC3B,IAAI,EAAE;gBACJ,QAAQ,EAAE,EAAE,KAAK,EAAE;aACpB;YACD,WAAW,EAAE,WAAW,CAAC,SAAS;YAClC,UAAU,EAAE,EAAE;SACf,CAAA;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;YAClD,IAAI,QAAQ,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE;gBAC1C,SAAQ;aACT;YACD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAA;YACpC,IAAI,eAAe,GAAG,QAAQ,CAAC,UAAU,EAAE;gBACzC,SAAQ;aACT;YACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,EAAE,IAAI,eAAe,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBACpE,SAAQ;aACT;YAED,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,eAAe,EAAE;gBAC7C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;aAC1C;SACF;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF","sourcesContent":["import { TestProcessorServer } from './test-processor-server.js'\nimport { DataBinding, HandlerType, ProcessBindingResponse } from '@sentio/protos'\nimport { Trace } from '../eth/eth.js'\nimport { BlockParams, LogParams } from 'ethers/providers'\nimport { Block } from 'ethers'\nimport { ChainId, EthChainId } from '../core/chain.js'\n\nexport class EthFacet {\n server: TestProcessorServer\n\n constructor(server: TestProcessorServer) {\n this.server = server\n }\n\n testTrace(trace: Trace, network: EthChainId = EthChainId.ETHEREUM): Promise<ProcessBindingResponse> {\n return this.testTraces([trace], network)\n }\n\n testTraces(traces: Trace[], network: EthChainId = EthChainId.ETHEREUM): Promise<ProcessBindingResponse> {\n const bindings = []\n for (const trace of traces) {\n const binding = this.buildTraceBinding(trace, network)\n if (!binding) {\n throw Error('Invalid test trace: ' + JSON.stringify(trace))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildTraceBinding(trace: Trace, network: ChainId = EthChainId.ETHEREUM): DataBinding | undefined {\n if (trace.type !== 'call' || !trace.action.input) {\n throw Error('Invalid test trace: ' + JSON.stringify(trace))\n }\n const signature = trace.action.input.slice(0, 10)\n\n for (const contract of this.server.contractConfigs) {\n if (contract.contract?.chainId !== network) {\n continue\n }\n if (trace.action.to?.toLowerCase() !== contract.contract?.address.toLowerCase()) {\n continue\n }\n for (const config of contract.traceConfigs) {\n if (config.signature == signature) {\n return {\n data: {\n ethTrace: {\n trace,\n timestamp: new Date(),\n },\n },\n handlerIds: [config.handlerId],\n handlerType: HandlerType.ETH_TRACE,\n }\n }\n }\n }\n return undefined\n }\n\n testLog(log: LogParams, network: EthChainId = EthChainId.ETHEREUM): Promise<ProcessBindingResponse> {\n return this.testLogs([log], network)\n }\n\n testLogs(logs: LogParams[], network: EthChainId = EthChainId.ETHEREUM): Promise<ProcessBindingResponse> {\n const bindings = []\n for (const log of logs) {\n const binding = this.buildLogBinding(log, network)\n if (!binding) {\n throw Error('Invalid test log: ' + JSON.stringify(log))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildLogBinding(log: LogParams, network: EthChainId = EthChainId.ETHEREUM): DataBinding | undefined {\n for (const contract of this.server.contractConfigs) {\n if (contract.contract?.chainId !== network) {\n continue\n }\n if (log.address.toLowerCase() !== contract.contract?.address.toLowerCase()) {\n continue\n }\n for (const config of contract.logConfigs) {\n for (const filter of config.filters) {\n // if (filter.topics.length != log.topics.length) {\n // continue\n // }\n\n let match = true\n for (const topicIdx in filter.topics) {\n const logTopic = log.topics[topicIdx]\n const possibleTopic = filter.topics[topicIdx].hashes\n if (possibleTopic.length === 0) {\n // match all\n continue\n }\n if (possibleTopic.find((e) => e.toLowerCase() === logTopic.toLowerCase())) {\n // find one\n continue\n }\n match = false\n break\n }\n if (match) {\n return {\n data: {\n ethLog: { log, timestamp: new Date() },\n },\n handlerIds: [config.handlerId],\n handlerType: HandlerType.ETH_LOG,\n }\n }\n }\n }\n }\n return undefined\n }\n testAccountLog(\n address: string,\n log: LogParams,\n network: EthChainId = EthChainId.ETHEREUM\n ): Promise<ProcessBindingResponse> {\n return this.testAccountLogs(address, [log], network)\n }\n\n testAccountLogs(\n address: string,\n logs: LogParams[],\n network: EthChainId = EthChainId.ETHEREUM\n ): Promise<ProcessBindingResponse> {\n const bindings = []\n for (const log of logs) {\n const binding = this.buildAccountLogBinding(address, log, network)\n if (!binding) {\n throw Error('Invalid test log: ' + JSON.stringify(log))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildAccountLogBinding(\n address: string,\n log: LogParams,\n network: EthChainId = EthChainId.ETHEREUM\n ): DataBinding | undefined {\n for (const account of this.server.accountConfigs) {\n if (account.chainId !== network) {\n continue\n }\n if (address.toLowerCase() !== account.address.toLowerCase()) {\n continue\n }\n for (const config of account.logConfigs) {\n for (const filter of config.filters) {\n // if (filter.topics.length != log.topics.length) {\n // continue\n // }\n\n let match = true\n for (const topicIdx in filter.topics) {\n const logTopic = log.topics[topicIdx]\n const possibleTopic = filter.topics[topicIdx].hashes\n if (possibleTopic.length === 0) {\n // match all\n continue\n }\n if (possibleTopic.find((e) => e.toLowerCase() === logTopic.toLowerCase())) {\n // find one\n continue\n }\n match = false\n break\n }\n if (match) {\n return {\n data: {\n ethLog: { log, timestamp: new Date() },\n },\n handlerIds: [config.handlerId],\n handlerType: HandlerType.ETH_LOG,\n }\n }\n }\n }\n }\n return undefined\n }\n\n testBlock(\n block: Partial<BlockParams> & { number: number },\n network: EthChainId = EthChainId.ETHEREUM\n ): Promise<ProcessBindingResponse> {\n return this.testBlocks([block], network)\n }\n\n testBlocks(blocks: Partial<BlockParams> & { number: number }[], network: EthChainId = EthChainId.ETHEREUM) {\n const bindings = []\n for (const block of blocks) {\n const binding = this.buildBlockBinding(block, network)\n if (!binding) {\n throw Error('Invalid test block: ' + JSON.stringify(block))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n buildBlockBinding(\n block: Partial<Block> & { number: number },\n network: EthChainId = EthChainId.ETHEREUM\n ): DataBinding {\n const binding: DataBinding = {\n data: {\n ethBlock: { block },\n },\n handlerType: HandlerType.ETH_BLOCK,\n handlerIds: [],\n }\n for (const contract of this.server.contractConfigs) {\n if (contract.contract?.chainId !== network) {\n continue\n }\n const longBlockNumber = block.number\n if (longBlockNumber < contract.startBlock) {\n continue\n }\n if (contract.endBlock !== 0n && longBlockNumber >= contract.endBlock) {\n continue\n }\n\n for (const config of contract.intervalConfigs) {\n binding.handlerIds.push(config.handlerId)\n }\n }\n return binding\n }\n}\n"]}
|
package/lib/testing/sui-facet.js
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import { HandlerType } from '@sentio/protos';
|
2
|
-
import { getChainId } from '../sui/network.js';
|
3
2
|
import { parseMoveType } from '../move/types.js';
|
4
3
|
import { SuiNetwork } from '../sui/index.js';
|
5
4
|
import { getMoveCalls } from '../sui/utils.js';
|
@@ -33,7 +32,7 @@ export class SuiFacet {
|
|
33
32
|
for (const call of calls) {
|
34
33
|
const functionType = [call.package, call.module, call.function].join(SPLITTER);
|
35
34
|
for (const config of this.server.contractConfigs) {
|
36
|
-
if (config.contract?.chainId !==
|
35
|
+
if (config.contract?.chainId !== network) {
|
37
36
|
continue;
|
38
37
|
}
|
39
38
|
for (const callConfig of config.moveCallConfigs) {
|
@@ -67,7 +66,7 @@ export class SuiFacet {
|
|
67
66
|
buildEventBinding(transaction, network = SuiNetwork.MAIN_NET) {
|
68
67
|
// const allEvents = new Set(transaction.events.map(e => e.type))
|
69
68
|
for (const config of this.server.contractConfigs) {
|
70
|
-
if (config.contract?.chainId !==
|
69
|
+
if (config.contract?.chainId !== network) {
|
71
70
|
continue;
|
72
71
|
}
|
73
72
|
for (const eventConfig of config.moveEventConfigs) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sui-facet.js","sourceRoot":"","sources":["../../src/testing/sui-facet.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,gBAAgB,CAAA;
|
1
|
+
{"version":3,"file":"sui-facet.js","sourceRoot":"","sources":["../../src/testing/sui-facet.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiTransactionBlockResponse, MoveCallSuiTransaction } from '@mysten/sui.js'\nimport { DataBinding, HandlerType } from '@sentio/protos'\nimport { TestProcessorServer } from './test-processor-server.js'\nimport { parseMoveType } from '../move/types.js'\nimport { SuiNetwork } from '../sui/index.js'\nimport { getMoveCalls } from '../sui/utils.js'\nimport { SPLITTER } from '../move/index.js'\n\nexport class SuiFacet {\n server: TestProcessorServer\n constructor(server: TestProcessorServer) {\n this.server = server\n }\n\n testEntryFunctionCall(transaction: SuiTransactionBlockResponse, network: SuiNetwork = SuiNetwork.MAIN_NET) {\n return this.testEntryFunctionCalls([transaction], network)\n }\n\n testEntryFunctionCalls(transactions: SuiTransactionBlockResponse[], network: SuiNetwork = SuiNetwork.MAIN_NET) {\n const bindings = []\n for (const trans of transactions) {\n const binding = this.buildEntryFunctionCallBinding(trans, network)\n if (!binding) {\n throw Error('Invalid test transaction: ' + JSON.stringify(trans))\n }\n bindings.push(binding)\n }\n return this.server.processBindings({\n bindings: bindings,\n })\n }\n\n private buildEntryFunctionCallBinding(\n transaction: SuiTransactionBlockResponse,\n network: SuiNetwork = SuiNetwork.MAIN_NET\n ): DataBinding | undefined {\n const calls: MoveCallSuiTransaction[] = getMoveCalls(transaction)\n // if (calls.length !== 1) {\n // throw Error('Transaction has more than one calls')\n // }\n for (const call of calls) {\n const functionType = [call.package, call.module, call.function].join(SPLITTER)\n\n for (const config of this.server.contractConfigs) {\n if (config.contract?.chainId !== network) {\n continue\n }\n for (const callConfig of config.moveCallConfigs) {\n for (const callFilter of callConfig.filters) {\n if (config.contract.address + '::' + callFilter.function === functionType) {\n return {\n data: {\n suiCall: {\n transaction,\n timestamp: new Date(),\n slot: 10000n,\n },\n },\n handlerIds: [callConfig.handlerId],\n handlerType: HandlerType.SUI_CALL,\n }\n }\n }\n }\n }\n }\n return undefined\n }\n\n testEvent(transaction: SuiTransactionBlockResponse, network: SuiNetwork = SuiNetwork.MAIN_NET) {\n const binding = this.buildEventBinding(transaction, network)\n if (!binding) {\n throw Error('Invalid test event: ' + JSON.stringify(transaction))\n }\n return this.server.processBinding(binding)\n }\n\n private buildEventBinding(\n transaction: SuiTransactionBlockResponse,\n network: SuiNetwork = SuiNetwork.MAIN_NET\n ): DataBinding | undefined {\n // const allEvents = new Set(transaction.events.map(e => e.type))\n\n for (const config of this.server.contractConfigs) {\n if (config.contract?.chainId !== network) {\n continue\n }\n for (const eventConfig of config.moveEventConfigs) {\n for (const eventFilter of eventConfig.filters) {\n for (const event of transaction.events || []) {\n if (config.contract.address + '::' + eventFilter.type === parseMoveType(event.type).qname) {\n return {\n data: {\n suiEvent: {\n transaction,\n timestamp: new Date(transaction.timestampMs || 0),\n slot: 10000n,\n },\n },\n handlerIds: [eventConfig.handlerId],\n handlerType: HandlerType.SUI_EVENT,\n }\n }\n }\n }\n }\n }\n return undefined\n }\n}\n"]}
|
package/lib/utils/dex-price.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import { BlockTag } from 'ethers/providers';
|
2
|
+
import { EthChainId } from '../core/chain.js';
|
2
3
|
export declare enum PriceUnit {
|
3
4
|
USD = 0,
|
4
5
|
ETH = 1,
|
@@ -13,8 +14,8 @@ declare class DexPrice {
|
|
13
14
|
ETH_ORACLE_MAP: Map<string, string>;
|
14
15
|
BTC_ORACLE_MAP: Map<string, string>;
|
15
16
|
ASSETS_INFOS: Map<string, number>;
|
16
|
-
readonly chainId:
|
17
|
-
constructor(csvFileName: string, chainId:
|
17
|
+
readonly chainId: EthChainId;
|
18
|
+
constructor(csvFileName: string, chainId: EthChainId);
|
18
19
|
getPrice(asset: string, blockTag?: BlockTag, unit?: PriceUnit): Promise<DexPriceResult>;
|
19
20
|
}
|
20
21
|
export declare const EthereumDexPrice: DexPrice;
|
package/lib/utils/dex-price.js
CHANGED
@@ -3,6 +3,7 @@ import fs from 'fs';
|
|
3
3
|
import { parse } from 'csv-parse/sync';
|
4
4
|
import url from 'url';
|
5
5
|
import { scaleDown } from '../core/big-decimal.js';
|
6
|
+
import { EthChainId } from '../core/chain.js';
|
6
7
|
export var PriceUnit;
|
7
8
|
(function (PriceUnit) {
|
8
9
|
PriceUnit[PriceUnit["USD"] = 0] = "USD";
|
@@ -103,6 +104,6 @@ class DexPrice {
|
|
103
104
|
}
|
104
105
|
}
|
105
106
|
}
|
106
|
-
export const EthereumDexPrice = new DexPrice('chainlink-oracles.csv',
|
107
|
-
export const GoerliDexPrice = new DexPrice('chainlink-oracles-goerli.csv',
|
107
|
+
export const EthereumDexPrice = new DexPrice('chainlink-oracles.csv', EthChainId.ETHEREUM);
|
108
|
+
export const GoerliDexPrice = new DexPrice('chainlink-oracles-goerli.csv', EthChainId.GOERLI);
|
108
109
|
//# sourceMappingURL=dex-price.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"dex-price.js","sourceRoot":"","sources":["../../src/utils/dex-price.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,sCAAsC,CAAA;AACpF,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;
|
1
|
+
{"version":3,"file":"dex-price.js","sourceRoot":"","sources":["../../src/utils/dex-price.ts"],"names":[],"mappings":"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","sourcesContent":["import { getEACAggregatorProxyContract } from '../eth/builtin/eacaggregatorproxy.js'\nimport fs from 'fs'\nimport { parse } from 'csv-parse/sync'\nimport { BlockTag } from 'ethers/providers'\nimport url from 'url'\nimport { scaleDown } from '../core/big-decimal.js'\nimport { EthChainId } from '../core/chain.js'\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 USD_ORACLE_MAP = new Map<string, string>()\n ETH_ORACLE_MAP = new Map<string, string>()\n BTC_ORACLE_MAP = new Map<string, string>()\n ASSETS_INFOS = new Map<string, number>()\n\n readonly chainId: EthChainId\n\n constructor(csvFileName: string, chainId: EthChainId) {\n this.chainId = chainId\n const csvFilePath = url.fileURLToPath(new URL('./' + csvFileName, import.meta.url))\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(this.chainId, addr)\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 = Number(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', EthChainId.ETHEREUM)\nexport const GoerliDexPrice = new DexPrice('chainlink-oracles-goerli.csv', EthChainId.GOERLI)\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"erc20.test.js","sourceRoot":"","sources":["../../src/utils/erc20.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;
|
1
|
+
{"version":3,"file":"erc20.test.js","sourceRoot":"","sources":["../../src/utils/erc20.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,oBAAoB;IAEpB,MAAM,aAAa,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAA;IAEnD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAE/C,MAAM,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAChC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,4CAA4C,CAAC,CAAA;QAEvG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,4CAA4C,CAAC,CAAA;QAEvG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { State } from '@sentio/runtime'\nimport { getERC20TokenInfo } from './token.js'\nimport { loadTestProvidersFromEnv } from '../testing/test-provider.js'\nimport { EthChainId } from '../core/chain.js'\n\ndescribe('erc20 tests', () => {\n State.reset()\n // Endpoints.reset()\n\n const haveProviders = loadTestProvidersFromEnv('1')\n\n const testIf = haveProviders ? test : test.skip\n\n testIf('test bytes32', async () => {\n const info = await getERC20TokenInfo(EthChainId.ETHEREUM, '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2')\n\n expect(info.decimal).toEqual(18)\n expect(info.symbol).toEqual('MKR')\n expect(info.name).toEqual('Maker')\n })\n\n testIf('test normal', async () => {\n const info = await getERC20TokenInfo(EthChainId.ETHEREUM, '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48')\n\n expect(info.decimal).toEqual(6)\n expect(info.symbol).toEqual('USDC')\n expect(info.name).toEqual('USD Coin')\n })\n})\n"]}
|
package/lib/utils/price.d.ts
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
import { CoinID, PriceServiceClient } from '@sentio/protos/price';
|
2
2
|
import { RetryOptions } from 'nice-grpc-client-middleware-retry';
|
3
|
+
import { ChainId } from '../core/chain.js';
|
3
4
|
export declare function getPriceClient(address?: string): import("nice-grpc").RawClient<import("nice-grpc/lib/service-definitions/ts-proto.js").FromTsProtoServiceDefinition<{
|
4
5
|
readonly name: "PriceService";
|
5
6
|
readonly fullName: "price_service.PriceService";
|
@@ -183,7 +184,7 @@ export declare function getPriceByTypeOrSymbolInternal(priceClient: PriceService
|
|
183
184
|
* @param date
|
184
185
|
* @param options other behavior options
|
185
186
|
*/
|
186
|
-
export declare function getPriceByType(chainId:
|
187
|
+
export declare function getPriceByType(chainId: ChainId, coinType: string, date: Date, options?: PriceOptions): Promise<number | undefined>;
|
187
188
|
/**
|
188
189
|
* @param symbol token symbol like BTC, etc
|
189
190
|
* @param date
|
package/lib/utils/price.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/utils/price.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AACzF,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,eAAe,EAAgB,MAAM,mCAAmC,CAAA;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
1
|
+
{"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/utils/price.ts"],"names":[],"mappings":"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","sourcesContent":["import { CoinID, PriceServiceClient, PriceServiceDefinition } from '@sentio/protos/price'\nimport { createChannel, createClientFactory, Status } from 'nice-grpc'\nimport { prometheusClientMiddleware } from 'nice-grpc-prometheus'\nimport { retryMiddleware, RetryOptions } from 'nice-grpc-client-middleware-retry'\nimport { Endpoints } from '@sentio/runtime'\nimport { ChainId } from '../core/chain.js'\n\nexport function getPriceClient(address?: string) {\n if (!address) {\n address = Endpoints.INSTANCE.priceFeedAPI\n }\n const channel = createChannel(address)\n\n return createClientFactory()\n .use(prometheusClientMiddleware())\n .use(retryMiddleware)\n .create(PriceServiceDefinition, channel)\n}\n\nconst priceMap = new Map<string, Promise<number | undefined>>()\nlet priceClient: PriceServiceClient<RetryOptions>\n\ninterface PriceOptions {\n toleranceInDays?: number\n}\nasync function getPriceByTypeOrSymbol(date: Date, coinId: CoinID, options?: PriceOptions): Promise<number | undefined> {\n if (!priceClient) {\n priceClient = getPriceClient()\n }\n return getPriceByTypeOrSymbolInternal(priceClient, date, coinId, options)\n}\n\nexport async function getPriceByTypeOrSymbolInternal(\n priceClient: PriceServiceClient<RetryOptions>,\n date: Date,\n coinId: CoinID,\n options?: PriceOptions\n): Promise<number | undefined> {\n const dateStr = dateString(date)\n const todayDateString = dateString(new Date())\n\n let key: string\n if (coinId.symbol) {\n key = `${coinId.symbol}-${dateStr}`\n } else {\n key = `${coinId.address?.address}-${coinId.address?.chain}-${dateStr}`\n }\n let price = priceMap.get(key)\n if (price) {\n return price\n }\n\n const response = priceClient.getPrice(\n {\n timestamp: date,\n coinId,\n },\n {\n retry: true,\n retryMaxAttempts: 5,\n }\n )\n price = response\n .then((res) => {\n if (res.timestamp) {\n const responseDateString = dateString(res.timestamp)\n if (responseDateString === todayDateString) {\n priceMap.delete(key)\n } else {\n // https://www.javatpoint.com/javascript-date-difference\n const diff = Math.abs(res.timestamp.getTime() - date.getTime())\n const daysDiff = diff / (1000 * 60 * 60 * 24)\n const tolerance = options?.toleranceInDays || 2\n if (daysDiff > tolerance) {\n priceMap.delete(key)\n return undefined\n }\n }\n } else {\n priceMap.delete(key)\n }\n return res.price\n })\n .catch((e) => {\n if (e.code === Status.NOT_FOUND) {\n return undefined\n }\n throw e\n })\n priceMap.set(key, price)\n return price\n}\n\n/**\n *\n * @param chainId chain id refers to CHAIN_MAP\n * @param coinType\n * @param date\n * @param options other behavior options\n */\nexport async function getPriceByType(\n chainId: ChainId,\n coinType: string,\n date: Date,\n options?: PriceOptions\n): Promise<number | undefined> {\n return getPriceByTypeOrSymbol(\n date,\n {\n address: {\n chain: chainId,\n address: coinType,\n },\n },\n options\n )\n}\n\n/**\n * @param symbol token symbol like BTC, etc\n * @param date\n * @param options other behavior options\n */\nexport async function getPriceBySymbol(\n symbol: string,\n date: Date,\n options?: PriceOptions\n): Promise<number | undefined> {\n return getPriceByTypeOrSymbol(date, { symbol }, options)\n}\n\nfunction dateString(date: Date) {\n return [date.getUTCDate(), date.getUTCMonth() + 1, date.getUTCFullYear()].join('-')\n}\n"]}
|
package/lib/utils/token.d.ts
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { BigDecimal } from '../core/big-decimal.js';
|
2
|
-
import {
|
3
|
-
import { BaseContext } from '../core/index.js';
|
2
|
+
import { EthChainId, EthContext } from '../eth/index.js';
|
4
3
|
export interface TokenInfo {
|
5
4
|
symbol: string;
|
6
5
|
name: string;
|
@@ -11,5 +10,5 @@ export declare const NATIVE_ETH: {
|
|
11
10
|
decimal: number;
|
12
11
|
name: string;
|
13
12
|
};
|
14
|
-
export declare function getERC20TokenInfo(contextOrNetworkish:
|
15
|
-
export declare function getER20NormalizedAmount(contextOrNetworkish:
|
13
|
+
export declare function getERC20TokenInfo(contextOrNetworkish: EthContext | EthChainId, tokenAddress: string): Promise<TokenInfo>;
|
14
|
+
export declare function getER20NormalizedAmount(contextOrNetworkish: EthContext | EthChainId, tokenAddress: string, amount: bigint): Promise<BigDecimal>;
|
package/lib/utils/token.js
CHANGED
@@ -2,7 +2,7 @@ import { getERC20Contract } from '../eth/builtin/erc20.js';
|
|
2
2
|
import { getERC20BytesContract } from '../eth/builtin/erc20bytes.js';
|
3
3
|
import { scaleDown } from '../core/big-decimal.js';
|
4
4
|
import { decodeBytes32String } from 'ethers';
|
5
|
-
import {
|
5
|
+
import { getEthChainId } from '../eth/index.js';
|
6
6
|
export const NATIVE_ETH = {
|
7
7
|
symbol: 'ETH',
|
8
8
|
decimal: 18,
|
@@ -17,7 +17,7 @@ async function getTokenInfoPromise(symbol, name, decimal) {
|
|
17
17
|
};
|
18
18
|
}
|
19
19
|
export async function getERC20TokenInfo(contextOrNetworkish, tokenAddress) {
|
20
|
-
const chainId =
|
20
|
+
const chainId = getEthChainId(contextOrNetworkish);
|
21
21
|
const key = chainId + tokenAddress;
|
22
22
|
const res = TOKEN_INFOS.get(key);
|
23
23
|
if (res) {
|
package/lib/utils/token.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAc,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,mBAAmB,
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAc,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,EAA0B,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAQvE,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,YAAY;CACnB,CAAA;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAA;AAEzD,KAAK,UAAU,mBAAmB,CAChC,MAAuC,EACvC,IAAqC,EACrC,OAA+B;IAE/B,OAAO;QACL,MAAM,EAAE,MAAM,MAAM;QACpB,IAAI,EAAE,MAAM,IAAI;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,OAAO,CAAC;KAC/B,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,mBAA4C,EAC5C,YAAoB;IAEpB,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAA;IAClD,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,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IAElE,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI;QACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;KAC7B;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,GAAG,mBAAmB,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;KACvD;IAED,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI;QACF,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;KACjC;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,GAAG,mBAAmB,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;KAC3D;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAA;IACzC,MAAM,IAAI,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAEvD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC1B,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,mBAA4C,EAC5C,YAAoB,EACpB,MAAc;IAEd,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;IAC5E,OAAO,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { getERC20Contract } from '../eth/builtin/erc20.js'\nimport { getERC20BytesContract } from '../eth/builtin/erc20bytes.js'\nimport { BigDecimal, scaleDown } from '../core/big-decimal.js'\nimport { PromiseOrValue } from '../eth/builtin/internal/common.js'\nimport { decodeBytes32String } from 'ethers'\nimport { EthChainId, EthContext, getEthChainId } from '../eth/index.js'\n\nexport interface 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, Promise<TokenInfo>>()\n\nasync function getTokenInfoPromise(\n symbol: PromiseOrValue<string> | string,\n name: PromiseOrValue<string> | string,\n decimal: PromiseOrValue<bigint>\n): Promise<TokenInfo> {\n return {\n symbol: await symbol,\n name: await name,\n decimal: Number(await decimal),\n }\n}\n\nexport async function getERC20TokenInfo(\n contextOrNetworkish: EthContext | EthChainId,\n tokenAddress: string\n): Promise<TokenInfo> {\n const chainId = getEthChainId(contextOrNetworkish)\n const key = chainId + tokenAddress\n const res = TOKEN_INFOS.get(key)\n if (res) {\n return res\n }\n const contract = getERC20Contract(chainId, tokenAddress)\n const bytesContract = getERC20BytesContract(chainId, tokenAddress)\n\n let name = ''\n try {\n name = await contract.name()\n } catch (e) {\n name = decodeBytes32String(await bytesContract.name())\n }\n\n let symbol = ''\n try {\n symbol = await contract.symbol()\n } catch (e) {\n symbol = decodeBytes32String(await bytesContract.symbol())\n }\n\n const decimal = await contract.decimals()\n const info = getTokenInfoPromise(symbol, name, decimal)\n\n TOKEN_INFOS.set(key, info)\n return info\n}\n\nexport async function getER20NormalizedAmount(\n contextOrNetworkish: EthContext | EthChainId,\n tokenAddress: string,\n amount: bigint\n): Promise<BigDecimal> {\n const tokenInfo = await getERC20TokenInfo(contextOrNetworkish, tokenAddress)\n return scaleDown(amount, tokenInfo.decimal)\n}\n"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sentio/sdk",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.15.0-rc.1",
|
4
4
|
"license": "Apache-2.0",
|
5
5
|
"type": "module",
|
6
6
|
"exports": {
|
@@ -68,8 +68,8 @@
|
|
68
68
|
"typechain": "^8.0.0",
|
69
69
|
"typedoc": "^0.24.1",
|
70
70
|
"yaml": "^2.2.1",
|
71
|
-
"@sentio/protos": "^2.
|
72
|
-
"@sentio/runtime": "^2.
|
71
|
+
"@sentio/protos": "^2.15.0-rc.1",
|
72
|
+
"@sentio/runtime": "^2.15.0-rc.1"
|
73
73
|
},
|
74
74
|
"peerDependencies": {
|
75
75
|
"tsup": "npm:@sentio/tsup@^6.7.0"
|
package/src/aptos/api.ts
CHANGED
@@ -4,7 +4,7 @@ import { Endpoints } from '@sentio/runtime'
|
|
4
4
|
import { retryMiddleware } from 'nice-grpc-client-middleware-retry'
|
5
5
|
import { prometheusClientMiddleware } from 'nice-grpc-prometheus'
|
6
6
|
import { AptosClient } from 'aptos-sdk'
|
7
|
-
import { AptosNetwork
|
7
|
+
import { AptosNetwork } from './network.js'
|
8
8
|
|
9
9
|
export function getChainQueryClient(address?: string): AptosQueryClient {
|
10
10
|
if (!address) {
|
@@ -19,7 +19,7 @@ export function getChainQueryClient(address?: string): AptosQueryClient {
|
|
19
19
|
}
|
20
20
|
|
21
21
|
export function getAptosClient(network = AptosNetwork.MAIN_NET): AptosClient | undefined {
|
22
|
-
const chainServer = Endpoints.INSTANCE.chainServer.get(
|
22
|
+
const chainServer = Endpoints.INSTANCE.chainServer.get(network)
|
23
23
|
if (chainServer) {
|
24
24
|
return new AptosClient(chainServer)
|
25
25
|
}
|
@@ -32,28 +32,30 @@ export class AptosChainAdapter extends ChainAdapter<AptosNetwork, MoveModuleByte
|
|
32
32
|
return params
|
33
33
|
}
|
34
34
|
|
35
|
-
|
36
|
-
const qname = moduleQname(module)
|
37
|
-
const structMap = new Map<string, InternalMoveStruct>()
|
35
|
+
getAllEventStructs(modules: InternalMoveModule[]) {
|
38
36
|
const eventMap = new Map<string, InternalMoveStruct>()
|
39
|
-
|
40
|
-
for (const
|
41
|
-
|
37
|
+
const structMap = new Map<string, InternalMoveStruct>()
|
38
|
+
for (const module of modules) {
|
39
|
+
const qname = moduleQname(module)
|
40
|
+
for (const struct of module.structs) {
|
41
|
+
structMap.set(qname + SPLITTER + struct.name, struct)
|
42
|
+
}
|
42
43
|
}
|
43
44
|
|
44
|
-
for (const
|
45
|
-
for (const
|
46
|
-
const
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
45
|
+
for (const module of modules) {
|
46
|
+
for (const struct of module.structs) {
|
47
|
+
for (const field of struct.fields) {
|
48
|
+
const t = field.type
|
49
|
+
if (t.qname === '0x1::event::EventHandle') {
|
50
|
+
const event = t.typeArgs[0].qname
|
51
|
+
const eventStruct = structMap.get(event)
|
52
|
+
if (eventStruct) {
|
53
|
+
eventMap.set(event, eventStruct)
|
54
|
+
}
|
52
55
|
}
|
53
56
|
}
|
54
57
|
}
|
55
58
|
}
|
56
|
-
|
57
59
|
return eventMap
|
58
60
|
}
|
59
61
|
|
@@ -6,7 +6,7 @@ import {
|
|
6
6
|
} from './move-types.js'
|
7
7
|
|
8
8
|
import { defaultMoveCoder, MoveCoder } from './move-coder.js'
|
9
|
-
import { AptosBindOptions, AptosNetwork
|
9
|
+
import { AptosBindOptions, AptosNetwork } from './network.js'
|
10
10
|
import { AptosContext, AptosResourcesContext } from './context.js'
|
11
11
|
import { ListStateStorage, mergeProcessResults } from '@sentio/runtime'
|
12
12
|
import {
|
@@ -205,7 +205,7 @@ export class AptosBaseProcessor {
|
|
205
205
|
}
|
206
206
|
|
207
207
|
getChainId(): string {
|
208
|
-
return
|
208
|
+
return this.config.network
|
209
209
|
}
|
210
210
|
|
211
211
|
// loadTypes(registry: MoveCoder) {
|
@@ -240,7 +240,7 @@ export class AptosResourcesProcessor {
|
|
240
240
|
}
|
241
241
|
|
242
242
|
getChainId(): string {
|
243
|
-
return
|
243
|
+
return this.config.network
|
244
244
|
}
|
245
245
|
|
246
246
|
private onInterval(
|
package/src/aptos/context.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { RecordMetaData } from '@sentio/protos'
|
2
2
|
import { type Labels, BaseContext, normalizeLabels } from '@sentio/sdk'
|
3
3
|
import { Transaction_UserTransaction } from './move-types.js'
|
4
|
-
import { AptosNetwork
|
4
|
+
import { AptosNetwork } from './network.js'
|
5
5
|
import { defaultMoveCoder, MoveCoder } from './move-coder.js'
|
6
6
|
import { Endpoints } from '@sentio/runtime'
|
7
7
|
import { ServerError, Status } from 'nice-grpc'
|
@@ -37,8 +37,8 @@ export class AptosContext extends BaseContext {
|
|
37
37
|
}
|
38
38
|
}
|
39
39
|
|
40
|
-
getChainId()
|
41
|
-
return
|
40
|
+
getChainId() {
|
41
|
+
return this.network
|
42
42
|
}
|
43
43
|
|
44
44
|
getMetaDataInternal(name: string, labels: Labels): RecordMetaData {
|
@@ -72,8 +72,8 @@ export class AptosResourcesContext extends BaseContext {
|
|
72
72
|
this.coder = defaultMoveCoder(network)
|
73
73
|
}
|
74
74
|
|
75
|
-
getChainId()
|
76
|
-
return
|
75
|
+
getChainId() {
|
76
|
+
return this.network
|
77
77
|
}
|
78
78
|
|
79
79
|
getMetaDataInternal(name: string, labels: Labels): RecordMetaData {
|
@@ -91,7 +91,7 @@ export class AptosResourcesContext extends BaseContext {
|
|
91
91
|
}
|
92
92
|
|
93
93
|
getClient(): AptosClient {
|
94
|
-
const chainServer = Endpoints.INSTANCE.chainServer.get(
|
94
|
+
const chainServer = Endpoints.INSTANCE.chainServer.get(this.network)
|
95
95
|
if (!chainServer) {
|
96
96
|
throw new ServerError(Status.INTERNAL, 'RPC endpoint not provided')
|
97
97
|
}
|
package/src/aptos/ext/coin.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
import { getPriceByType } from '@sentio/sdk/utils'
|
2
|
-
import { CHAIN_IDS } from '@sentio/sdk'
|
3
2
|
import fetch from 'node-fetch'
|
4
3
|
import { validateAndNormalizeAddress } from '../utils.js'
|
5
4
|
import { SPLITTER } from '../../move/index.js'
|
5
|
+
import { AptosChainId } from '../../core/chain.js'
|
6
6
|
|
7
7
|
const WHITELISTED_COINS = new Map<string, SimpleCoinInfo>()
|
8
8
|
|
@@ -74,7 +74,7 @@ export async function getPrice(coinType: string, timestamp: number): Promise<num
|
|
74
74
|
}
|
75
75
|
const date = new Date(timestamp / 1000)
|
76
76
|
try {
|
77
|
-
return (await getPriceByType(
|
77
|
+
return (await getPriceByType(AptosChainId.APTOS_MAINNET, coinType, date)) || 0
|
78
78
|
} catch (error) {
|
79
79
|
console.log(JSON.stringify(error))
|
80
80
|
throw error
|