@sentio/sdk 1.28.0 → 1.29.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.
Files changed (102) hide show
  1. package/lib/aptos/api.d.ts +2 -0
  2. package/lib/aptos/api.js +14 -0
  3. package/lib/aptos/api.js.map +1 -0
  4. package/lib/aptos/aptos-processor.d.ts +5 -4
  5. package/lib/aptos/aptos-processor.js +8 -9
  6. package/lib/aptos/aptos-processor.js.map +1 -1
  7. package/lib/aptos/context.d.ts +3 -2
  8. package/lib/aptos/context.js +3 -3
  9. package/lib/aptos/context.js.map +1 -1
  10. package/lib/aptos/index.d.ts +3 -2
  11. package/lib/aptos/index.js +18 -3
  12. package/lib/aptos/index.js.map +1 -1
  13. package/lib/aptos/models.d.ts +23 -0
  14. package/lib/aptos/models.js +3 -0
  15. package/lib/aptos/models.js.map +1 -0
  16. package/lib/aptos/type-registry.d.ts +21 -0
  17. package/lib/aptos/type-registry.js +156 -0
  18. package/lib/aptos/type-registry.js.map +1 -0
  19. package/lib/aptos/types.d.ts +1 -33
  20. package/lib/aptos/types.js +49 -142
  21. package/lib/aptos/types.js.map +1 -1
  22. package/lib/aptos/types.test.js.map +1 -1
  23. package/lib/aptos/utils.d.ts +0 -2
  24. package/lib/aptos/utils.js +1 -8
  25. package/lib/aptos/utils.js.map +1 -1
  26. package/lib/aptos-codegen/codegen.js +2 -1
  27. package/lib/aptos-codegen/codegen.js.map +1 -1
  28. package/lib/aptos-codegen/typegen.d.ts +0 -1
  29. package/lib/aptos-codegen/typegen.js +3 -61
  30. package/lib/aptos-codegen/typegen.js.map +1 -1
  31. package/lib/cli/upload.js +2 -1
  32. package/lib/cli/upload.js.map +1 -1
  33. package/lib/core/base-context.d.ts +12 -0
  34. package/lib/core/base-context.js +25 -0
  35. package/lib/core/base-context.js.map +1 -0
  36. package/lib/core/base-processor.d.ts +1 -2
  37. package/lib/core/base-processor.js.map +1 -1
  38. package/lib/core/context.d.ts +2 -11
  39. package/lib/core/context.js +5 -24
  40. package/lib/core/context.js.map +1 -1
  41. package/lib/core/event-tracker.d.ts +1 -1
  42. package/lib/core/event-tracker.js +2 -2
  43. package/lib/core/event-tracker.js.map +1 -1
  44. package/lib/core/exporter.d.ts +1 -1
  45. package/lib/core/exporter.js.map +1 -1
  46. package/lib/core/generic-processor.test.js.map +1 -1
  47. package/lib/core/logger.d.ts +1 -1
  48. package/lib/core/logger.js.map +1 -1
  49. package/lib/core/meter.d.ts +3 -1
  50. package/lib/core/meter.js +12 -0
  51. package/lib/core/meter.js.map +1 -1
  52. package/lib/endpoints.d.ts +6 -0
  53. package/lib/endpoints.js +11 -0
  54. package/lib/endpoints.js.map +1 -0
  55. package/lib/processor-runner.js +6 -0
  56. package/lib/processor-runner.js.map +1 -1
  57. package/lib/processor-state.d.ts +2 -6
  58. package/lib/processor-state.js +0 -2
  59. package/lib/processor-state.js.map +1 -1
  60. package/lib/provider.js +5 -5
  61. package/lib/provider.js.map +1 -1
  62. package/lib/testing/test-processor-server.d.ts +4 -1
  63. package/lib/testing/test-processor-server.js +15 -7
  64. package/lib/testing/test-processor-server.js.map +1 -1
  65. package/lib/utils/conversion.d.ts +2 -1
  66. package/lib/utils/conversion.js +3 -3
  67. package/lib/utils/conversion.js.map +1 -1
  68. package/lib/utils/dex-price.test.js.map +1 -1
  69. package/lib/utils/erc20.test.js.map +1 -1
  70. package/lib/utils/price.d.ts +9 -1
  71. package/lib/utils/price.js +49 -1
  72. package/lib/utils/price.js.map +1 -1
  73. package/lib/utils/token.d.ts +1 -1
  74. package/lib/utils/token.js +2 -2
  75. package/lib/utils/token.js.map +1 -1
  76. package/package.json +5 -2
  77. package/src/aptos/api.ts +11 -0
  78. package/src/aptos/aptos-processor.ts +7 -10
  79. package/src/aptos/context.ts +3 -3
  80. package/src/aptos/index.ts +3 -2
  81. package/src/aptos/models.ts +34 -0
  82. package/src/aptos/type-registry.ts +187 -0
  83. package/src/aptos/types.ts +53 -199
  84. package/src/aptos/utils.ts +0 -9
  85. package/src/aptos-codegen/codegen.ts +2 -1
  86. package/src/aptos-codegen/typegen.ts +1 -67
  87. package/src/cli/upload.ts +2 -1
  88. package/src/core/base-context.ts +28 -0
  89. package/src/core/base-processor.ts +1 -2
  90. package/src/core/context.ts +2 -26
  91. package/src/core/event-tracker.ts +2 -2
  92. package/src/core/exporter.ts +1 -1
  93. package/src/core/logger.ts +1 -1
  94. package/src/core/meter.ts +15 -1
  95. package/src/endpoints.ts +9 -0
  96. package/src/processor-runner.ts +6 -0
  97. package/src/processor-state.ts +2 -7
  98. package/src/provider.ts +5 -5
  99. package/src/testing/test-processor-server.ts +10 -6
  100. package/src/utils/conversion.ts +2 -1
  101. package/src/utils/price.ts +51 -1
  102. package/src/utils/token.ts +1 -1
@@ -1,17 +1,13 @@
1
- import { BaseProcessor, BoundContractView, ContractView, BaseProcessorTemplate, SolanaBaseProcessor, SuiBaseProcessor } from './core';
2
- import { AptosBaseProcessor } from './aptos';
1
+ import { BaseProcessor, BoundContractView, ContractView, BaseProcessorTemplate, SolanaBaseProcessor, SuiBaseProcessor, EventTracker } from './core';
3
2
  import { BaseContract } from 'ethers';
4
3
  import { TemplateInstance } from './gen';
5
- import { Provider } from '@ethersproject/providers';
6
- import { EventTracker } from './core';
7
4
  import { Metric } from './core/meter';
8
- import { AptosAccountProcessor } from './aptos/aptos-processor';
9
5
  import { Exporter } from './core/exporter';
6
+ import { AptosBaseProcessor, AptosAccountProcessor } from './aptos/aptos-processor';
10
7
  export declare class ProcessorState {
11
8
  contracts: Map<string, ContractView<BaseContract>>;
12
9
  processors: BaseProcessor<BaseContract, BoundContractView<BaseContract, any>>[];
13
10
  processorMap: Map<string, BaseProcessor<any, any>>;
14
- providers: Map<number, Provider>;
15
11
  templates: BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>[];
16
12
  templatesInstances: TemplateInstance[];
17
13
  solanaProcessors: SolanaBaseProcessor[];
@@ -8,8 +8,6 @@ class ProcessorState {
8
8
  processors = [];
9
9
  // from abiName_options to contracts
10
10
  processorMap = new Map();
11
- // evm providers
12
- providers = new Map();
13
11
  // evm processor templates
14
12
  templates = [];
15
13
  // evm processor template instances spec
@@ -1 +1 @@
1
- {"version":3,"file":"processor-state.js","sourceRoot":"","sources":["../src/processor-state.ts"],"names":[],"mappings":";;;AAmBA,MAAa,cAAc;IACzB,mDAAmD;IACnD,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAA;IACzD,qBAAqB;IACrB,UAAU,GAAwE,EAAE,CAAA;IACpF,oCAAoC;IACpC,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAA;IACzD,gBAAgB;IAChB,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAA;IACvC,0BAA0B;IAC1B,SAAS,GAAgF,EAAE,CAAA;IAC3F,wCAAwC;IACxC,kBAAkB,GAAuB,EAAE,CAAA;IAE3C,gBAAgB,GAA0B,EAAE,CAAA;IAE5C,aAAa,GAAuB,EAAE,CAAA;IAEtC,eAAe,GAAyB,EAAE,CAAA;IAC1C,sBAAsB,GAA4B,EAAE,CAAA;IAEpD,aAAa,GAAmB,EAAE,CAAA;IAElC,SAAS,GAAe,EAAE,CAAA;IAE1B,OAAO,GAAa,EAAE,CAAA;CACvB;AA1BD,wCA0BC","sourcesContent":["import {\n BaseProcessor,\n BoundContractView,\n ContractView,\n BaseProcessorTemplate,\n SolanaBaseProcessor,\n SuiBaseProcessor,\n} from './core'\n\nimport { AptosBaseProcessor } from './aptos'\n\nimport { BaseContract } from 'ethers'\nimport { TemplateInstance } from './gen'\nimport { Provider } from '@ethersproject/providers'\nimport { EventTracker } from './core'\nimport { Metric } from './core/meter'\nimport { AptosAccountProcessor } from './aptos/aptos-processor'\nimport { Exporter } from './core/exporter'\n\nexport class ProcessorState {\n // from abiName_address_chainId => contract wrapper\n contracts = new Map<string, ContractView<BaseContract>>()\n // all evm processors\n processors: BaseProcessor<BaseContract, BoundContractView<BaseContract, any>>[] = []\n // from abiName_options to contracts\n processorMap = new Map<string, BaseProcessor<any, any>>()\n // evm providers\n providers = new Map<number, Provider>()\n // evm processor templates\n templates: BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>[] = []\n // evm processor template instances spec\n templatesInstances: TemplateInstance[] = []\n\n solanaProcessors: SolanaBaseProcessor[] = []\n\n suiProcessors: SuiBaseProcessor[] = []\n\n aptosProcessors: AptosBaseProcessor[] = []\n aptosAccountProcessors: AptosAccountProcessor[] = []\n\n eventTrackers: EventTracker[] = []\n\n exporters: Exporter[] = []\n\n metrics: Metric[] = []\n}\n"]}
1
+ {"version":3,"file":"processor-state.js","sourceRoot":"","sources":["../src/processor-state.ts"],"names":[],"mappings":";;;AAgBA,MAAa,cAAc;IACzB,mDAAmD;IACnD,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAA;IACzD,qBAAqB;IACrB,UAAU,GAAwE,EAAE,CAAA;IACpF,oCAAoC;IACpC,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAA;IACzD,0BAA0B;IAC1B,SAAS,GAAgF,EAAE,CAAA;IAC3F,wCAAwC;IACxC,kBAAkB,GAAuB,EAAE,CAAA;IAE3C,gBAAgB,GAA0B,EAAE,CAAA;IAE5C,aAAa,GAAuB,EAAE,CAAA;IAEtC,eAAe,GAAyB,EAAE,CAAA;IAC1C,sBAAsB,GAA4B,EAAE,CAAA;IAEpD,aAAa,GAAmB,EAAE,CAAA;IAElC,SAAS,GAAe,EAAE,CAAA;IAE1B,OAAO,GAAa,EAAE,CAAA;CACvB;AAxBD,wCAwBC","sourcesContent":["import {\n BaseProcessor,\n BoundContractView,\n ContractView,\n BaseProcessorTemplate,\n SolanaBaseProcessor,\n SuiBaseProcessor,\n EventTracker,\n} from './core'\n\nimport { BaseContract } from 'ethers'\nimport { TemplateInstance } from './gen'\nimport { Metric } from './core/meter'\nimport { Exporter } from './core/exporter'\nimport { AptosBaseProcessor, AptosAccountProcessor } from './aptos/aptos-processor'\n\nexport class ProcessorState {\n // from abiName_address_chainId => contract wrapper\n contracts = new Map<string, ContractView<BaseContract>>()\n // all evm processors\n processors: BaseProcessor<BaseContract, BoundContractView<BaseContract, any>>[] = []\n // from abiName_options to contracts\n processorMap = new Map<string, BaseProcessor<any, any>>()\n // evm processor templates\n templates: BaseProcessorTemplate<BaseContract, BoundContractView<BaseContract, any>>[] = []\n // evm processor template instances spec\n templatesInstances: TemplateInstance[] = []\n\n solanaProcessors: SolanaBaseProcessor[] = []\n\n suiProcessors: SuiBaseProcessor[] = []\n\n aptosProcessors: AptosBaseProcessor[] = []\n aptosAccountProcessors: AptosAccountProcessor[] = []\n\n eventTrackers: EventTracker[] = []\n\n exporters: Exporter[] = []\n\n metrics: Metric[] = []\n}\n"]}
package/lib/provider.js CHANGED
@@ -12,21 +12,21 @@ function getProvider(networkish) {
12
12
  networkish = 1;
13
13
  }
14
14
  const network = (0, providers_1.getNetwork)(networkish);
15
- if (!global.PROCESSOR_STATE.providers) {
15
+ if (!global.ENDPOINTS.providers) {
16
16
  throw Error('Provider not set');
17
17
  }
18
- const value = global.PROCESSOR_STATE.providers.get(network.chainId);
18
+ const value = global.ENDPOINTS.providers.get(network.chainId);
19
19
  if (value === undefined) {
20
20
  throw Error('Provider not found for chain ' +
21
21
  network.chainId +
22
22
  ', configured chains: ' +
23
- [...global.PROCESSOR_STATE.providers.keys()].join(' '));
23
+ [...global.ENDPOINTS.providers.keys()].join(' '));
24
24
  }
25
25
  return value;
26
26
  }
27
27
  exports.getProvider = getProvider;
28
28
  function setProvider(config, concurrency = 4, useChainServer = false) {
29
- global.PROCESSOR_STATE.providers = new Map();
29
+ globalThis.ENDPOINTS.providers = new Map();
30
30
  for (const chainIdStr in config) {
31
31
  if (isNaN(Number.parseInt(chainIdStr))) {
32
32
  continue;
@@ -49,7 +49,7 @@ function setProvider(config, concurrency = 4, useChainServer = false) {
49
49
  rpcAddress = chainConfig.Https[idx];
50
50
  }
51
51
  const provider = new QueuedStaticJsonRpcProvider(rpcAddress, chainId, concurrency);
52
- global.PROCESSOR_STATE.providers.set(chainId, provider);
52
+ global.ENDPOINTS.providers.set(chainId, provider);
53
53
  }
54
54
  }
55
55
  exports.setProvider = setProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAsF;AAEtF,sDAA4B;AAIf,QAAA,aAAa,GAAG,IAAI,iCAAqB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEpE,SAAgB,WAAW,CAAC,UAAuB;IACjD,IAAI,CAAC,UAAU,EAAE;QACf,UAAU,GAAG,CAAC,CAAA;KACf;IACD,MAAM,OAAO,GAAG,IAAA,sBAAU,EAAC,UAAU,CAAC,CAAA;IAEtC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE;QACrC,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAA;KAChC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACnE,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,KAAK,CACT,+BAA+B;YAC7B,OAAO,CAAC,OAAO;YACf,uBAAuB;YACvB,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACzD,CAAA;KACF;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAnBD,kCAmBC;AAED,SAAgB,WAAW,CAAC,MAAmC,EAAE,WAAW,GAAG,CAAC,EAAE,cAAc,GAAG,KAAK;IACtG,MAAM,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE9D,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE;QAC/B,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE;YACtC,SAAQ;SACT;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAElC,8CAA8C;QAC9C,0CAA0C;QAC1C,6DAA6D;QAC7D,IAAI;QACJ,iBAAiB;QACjB,wDAAwD;QAExD,mDAAmD;QAEnD,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,cAAc,IAAI,WAAW,CAAC,WAAW,EAAE;YAC7C,UAAU,GAAG,WAAW,CAAC,WAAW,CAAA;SACrC;aAAM;YACL,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAChE,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SACpC;QAED,MAAM,QAAQ,GAAG,IAAI,2BAA2B,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;QAClF,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;KACxD;AACH,CAAC;AA/BD,kCA+BC;AAED,MAAM,2BAA4B,SAAQ,iCAAqB;IAC7D,QAAQ,CAAQ;IAEhB,YAAY,GAA4B,EAAE,OAAmB,EAAE,WAAmB;QAChF,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,MAAkB;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,CAAC;CACF","sourcesContent":["import { getNetwork, Provider, StaticJsonRpcProvider } from '@ethersproject/providers'\nimport { Networkish } from '@ethersproject/networks'\nimport PQueue from 'p-queue'\nimport { ConnectionInfo } from '@ethersproject/web'\nimport { ChainConfig } from './chain-config'\n\nexport const DummyProvider = new StaticJsonRpcProvider(undefined, 1)\n\nexport function getProvider(networkish?: Networkish): Provider {\n if (!networkish) {\n networkish = 1\n }\n const network = getNetwork(networkish)\n\n if (!global.PROCESSOR_STATE.providers) {\n throw Error('Provider not set')\n }\n const value = global.PROCESSOR_STATE.providers.get(network.chainId)\n if (value === undefined) {\n throw Error(\n 'Provider not found for chain ' +\n network.chainId +\n ', configured chains: ' +\n [...global.PROCESSOR_STATE.providers.keys()].join(' ')\n )\n }\n return value\n}\n\nexport function setProvider(config: Record<string, ChainConfig>, concurrency = 4, useChainServer = false) {\n global.PROCESSOR_STATE.providers = new Map<number, Provider>()\n\n for (const chainIdStr in config) {\n if (isNaN(Number.parseInt(chainIdStr))) {\n continue\n }\n\n const chainConfig = config[chainIdStr]\n const chainId = Number(chainIdStr)\n\n // let providers: StaticJsonRpcProvider[] = []\n // for (const http of chainConfig.Https) {\n // providers.push(new StaticJsonRpcProvider(http, chainId))\n // }\n // random shuffle\n // providers = providers.sort(() => Math.random() - 0.5)\n\n // const provider = new FallbackProvider(providers)\n\n let rpcAddress = ''\n if (useChainServer && chainConfig.ChainServer) {\n rpcAddress = chainConfig.ChainServer\n } else {\n const idx = Math.floor(Math.random() * chainConfig.Https.length)\n rpcAddress = chainConfig.Https[idx]\n }\n\n const provider = new QueuedStaticJsonRpcProvider(rpcAddress, chainId, concurrency)\n global.PROCESSOR_STATE.providers.set(chainId, provider)\n }\n}\n\nclass QueuedStaticJsonRpcProvider extends StaticJsonRpcProvider {\n executor: PQueue\n\n constructor(url: ConnectionInfo | string, network: Networkish, concurrency: number) {\n super(url, network)\n this.executor = new PQueue({ concurrency: concurrency })\n }\n\n send(method: string, params: Array<any>): Promise<any> {\n return this.executor.add(() => super.send(method, params))\n }\n}\n"]}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":";;;;;;AAAA,wDAAsF;AAEtF,sDAA4B;AAIf,QAAA,aAAa,GAAG,IAAI,iCAAqB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEpE,SAAgB,WAAW,CAAC,UAAuB;IACjD,IAAI,CAAC,UAAU,EAAE;QACf,UAAU,GAAG,CAAC,CAAA;KACf;IACD,MAAM,OAAO,GAAG,IAAA,sBAAU,EAAC,UAAU,CAAC,CAAA;IAEtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE;QAC/B,MAAM,KAAK,CAAC,kBAAkB,CAAC,CAAA;KAChC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,KAAK,CACT,+BAA+B;YAC7B,OAAO,CAAC,OAAO;YACf,uBAAuB;YACvB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACnD,CAAA;KACF;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAnBD,kCAmBC;AAED,SAAgB,WAAW,CAAC,MAAmC,EAAE,WAAW,GAAG,CAAC,EAAE,cAAc,GAAG,KAAK;IACtG,UAAU,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE5D,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE;QAC/B,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE;YACtC,SAAQ;SACT;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;QAElC,8CAA8C;QAC9C,0CAA0C;QAC1C,6DAA6D;QAC7D,IAAI;QACJ,iBAAiB;QACjB,wDAAwD;QAExD,mDAAmD;QAEnD,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,cAAc,IAAI,WAAW,CAAC,WAAW,EAAE;YAC7C,UAAU,GAAG,WAAW,CAAC,WAAW,CAAA;SACrC;aAAM;YACL,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAChE,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SACpC;QAED,MAAM,QAAQ,GAAG,IAAI,2BAA2B,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;QAClF,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;KAClD;AACH,CAAC;AA/BD,kCA+BC;AAED,MAAM,2BAA4B,SAAQ,iCAAqB;IAC7D,QAAQ,CAAQ;IAEhB,YAAY,GAA4B,EAAE,OAAmB,EAAE,WAAmB;QAChF,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAM,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,CAAC,MAAc,EAAE,MAAkB;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5D,CAAC;CACF","sourcesContent":["import { getNetwork, Provider, StaticJsonRpcProvider } from '@ethersproject/providers'\nimport { Networkish } from '@ethersproject/networks'\nimport PQueue from 'p-queue'\nimport { ConnectionInfo } from '@ethersproject/web'\nimport { ChainConfig } from './chain-config'\n\nexport const DummyProvider = new StaticJsonRpcProvider(undefined, 1)\n\nexport function getProvider(networkish?: Networkish): Provider {\n if (!networkish) {\n networkish = 1\n }\n const network = getNetwork(networkish)\n\n if (!global.ENDPOINTS.providers) {\n throw Error('Provider not set')\n }\n const value = global.ENDPOINTS.providers.get(network.chainId)\n if (value === undefined) {\n throw Error(\n 'Provider not found for chain ' +\n network.chainId +\n ', configured chains: ' +\n [...global.ENDPOINTS.providers.keys()].join(' ')\n )\n }\n return value\n}\n\nexport function setProvider(config: Record<string, ChainConfig>, concurrency = 4, useChainServer = false) {\n globalThis.ENDPOINTS.providers = new Map<number, Provider>()\n\n for (const chainIdStr in config) {\n if (isNaN(Number.parseInt(chainIdStr))) {\n continue\n }\n\n const chainConfig = config[chainIdStr]\n const chainId = Number(chainIdStr)\n\n // let providers: StaticJsonRpcProvider[] = []\n // for (const http of chainConfig.Https) {\n // providers.push(new StaticJsonRpcProvider(http, chainId))\n // }\n // random shuffle\n // providers = providers.sort(() => Math.random() - 0.5)\n\n // const provider = new FallbackProvider(providers)\n\n let rpcAddress = ''\n if (useChainServer && chainConfig.ChainServer) {\n rpcAddress = chainConfig.ChainServer\n } else {\n const idx = Math.floor(Math.random() * chainConfig.Https.length)\n rpcAddress = chainConfig.Https[idx]\n }\n\n const provider = new QueuedStaticJsonRpcProvider(rpcAddress, chainId, concurrency)\n global.ENDPOINTS.providers.set(chainId, provider)\n }\n}\n\nclass QueuedStaticJsonRpcProvider extends StaticJsonRpcProvider {\n executor: PQueue\n\n constructor(url: ConnectionInfo | string, network: Networkish, concurrency: number) {\n super(url, network)\n this.executor = new PQueue({ concurrency: concurrency })\n }\n\n send(method: string, params: Array<any>): Promise<any> {\n return this.executor.add(() => super.send(method, params))\n }\n}\n"]}
@@ -1,9 +1,12 @@
1
- import { BlockBinding, ContractConfig, DataBinding, ProcessBindingResponse, ProcessBindingsRequest, ProcessBlocksRequest, ProcessConfigRequest, ProcessConfigResponse, ProcessInstructionsRequest, ProcessorServiceImpl, ProcessorServiceImplementation, ProcessTransactionsRequest, StartRequest, Trace } from '@sentio/sdk';
1
+ import { BlockBinding, ContractConfig, DataBinding, ProcessBindingResponse, ProcessBindingsRequest, ProcessBlocksRequest, ProcessConfigRequest, ProcessConfigResponse, ProcessInstructionsRequest, ProcessorServiceImplementation, ProcessTransactionsRequest, StartRequest } from '../gen';
2
2
  import { CallContext } from 'nice-grpc-common';
3
3
  import { Empty } from '../gen/google/protobuf/empty';
4
4
  import { Block, Log } from '@ethersproject/abstract-provider';
5
5
  import { Networkish } from '@ethersproject/providers';
6
+ import { ProcessorServiceImpl } from '../service';
7
+ import { Trace } from '../core/trace';
6
8
  export declare const TEST_CONTEXT: CallContext;
9
+ export declare function cleanTest(): void;
7
10
  export declare class TestProcessorServer implements ProcessorServiceImplementation {
8
11
  service: ProcessorServiceImpl;
9
12
  contractConfig: ContractConfig[];
@@ -3,21 +3,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.TestProcessorServer = exports.TEST_CONTEXT = void 0;
7
- const sdk_1 = require("@sentio/sdk");
6
+ exports.TestProcessorServer = exports.cleanTest = exports.TEST_CONTEXT = void 0;
7
+ const gen_1 = require("../gen");
8
8
  const chain_1 = require("../utils/chain");
9
9
  const long_1 = __importDefault(require("long"));
10
10
  const providers_1 = require("@ethersproject/providers");
11
+ const endpoints_1 = require("../endpoints");
12
+ const processor_state_1 = require("../processor-state");
13
+ const service_1 = require("../service");
14
+ const provider_1 = require("../provider");
11
15
  exports.TEST_CONTEXT = {};
12
16
  function cleanTest() {
13
- global.PROCESSOR_STATE = new sdk_1.ProcessorState();
17
+ global.PROCESSOR_STATE = new processor_state_1.ProcessorState();
18
+ if (!global.ENDPOINTS) {
19
+ global.ENDPOINTS = new endpoints_1.Endpoints();
20
+ }
14
21
  }
22
+ exports.cleanTest = cleanTest;
15
23
  class TestProcessorServer {
16
24
  service;
17
25
  contractConfig;
18
26
  constructor(loader, httpEndpoints = {}) {
19
27
  cleanTest();
20
- this.service = new sdk_1.ProcessorServiceImpl(loader);
28
+ this.service = new service_1.ProcessorServiceImpl(loader);
21
29
  const dummyConfig = {};
22
30
  for (const k in chain_1.CHAIN_MAP) {
23
31
  const http = httpEndpoints[k] || '';
@@ -26,7 +34,7 @@ class TestProcessorServer {
26
34
  Https: [http],
27
35
  };
28
36
  }
29
- (0, sdk_1.setProvider)(dummyConfig);
37
+ (0, provider_1.setProvider)(dummyConfig);
30
38
  }
31
39
  async start(request = { templateInstances: [] }, context = exports.TEST_CONTEXT) {
32
40
  const res = await this.service.start(request, context);
@@ -89,7 +97,7 @@ class TestProcessorServer {
89
97
  raw: toBytes(trace),
90
98
  },
91
99
  handlerId: config.handlerId,
92
- handlerType: sdk_1.HandlerType.ETH_TRACE,
100
+ handlerType: gen_1.HandlerType.ETH_TRACE,
93
101
  };
94
102
  }
95
103
  }
@@ -146,7 +154,7 @@ class TestProcessorServer {
146
154
  raw: toBytes(log),
147
155
  },
148
156
  handlerId: config.handlerId,
149
- handlerType: sdk_1.HandlerType.ETH_LOG,
157
+ handlerType: gen_1.HandlerType.ETH_LOG,
150
158
  };
151
159
  }
152
160
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BlockBinding,\n ContractConfig,\n DataBinding,\n HandlerType,\n ProcessBindingResponse,\n ProcessBindingsRequest,\n ProcessBlocksRequest,\n ProcessConfigRequest,\n ProcessConfigResponse,\n ProcessInstructionsRequest,\n ProcessorServiceImpl,\n ProcessorServiceImplementation,\n ProcessorState,\n ProcessTransactionsRequest,\n setProvider,\n StartRequest,\n Trace,\n} from '@sentio/sdk'\nimport { CallContext } from 'nice-grpc-common'\nimport { Empty } from '../gen/google/protobuf/empty'\nimport { ChainConfig } from '../chain-config'\nimport { CHAIN_MAP } from '../utils/chain'\nimport { Block, Log } from '@ethersproject/abstract-provider'\nimport Long from 'long'\nimport { getNetwork, Networkish } from '@ethersproject/providers'\n\nexport const TEST_CONTEXT: CallContext = <CallContext>{}\n\nfunction cleanTest() {\n global.PROCESSOR_STATE = new ProcessorState()\n}\n\nexport class TestProcessorServer implements ProcessorServiceImplementation {\n service: ProcessorServiceImpl\n contractConfig: ContractConfig[]\n\n constructor(loader: () => void, httpEndpoints: Record<string, string> = {}) {\n cleanTest()\n\n this.service = new ProcessorServiceImpl(loader)\n const dummyConfig: Record<string, ChainConfig> = {}\n\n for (const k in CHAIN_MAP) {\n const http = httpEndpoints[k] || ''\n dummyConfig[k] = {\n ChainID: k,\n Https: [http],\n }\n }\n\n setProvider(dummyConfig)\n }\n\n async start(request: StartRequest = { templateInstances: [] }, context = TEST_CONTEXT): Promise<Empty> {\n const res = await this.service.start(request, context)\n this.contractConfig = (await this.getConfig({})).contractConfigs\n return res\n }\n\n stop(request: Empty, context = TEST_CONTEXT): Promise<Empty> {\n return this.service.stop(request, context)\n }\n\n getConfig(request: ProcessConfigRequest, context = TEST_CONTEXT): Promise<ProcessConfigResponse> {\n return this.service.getConfig(request, context)\n }\n\n processBlocks(request: ProcessBlocksRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processBlocks(request, context)\n }\n\n processInstructions(request: ProcessInstructionsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processInstructions(request, context)\n }\n\n processLogs(request: ProcessBindingsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processLogs(request, context)\n }\n\n processTraces(request: ProcessBindingsRequest, context: CallContext = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processTraces(request, context)\n }\n\n processTransactions(request: ProcessTransactionsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processTransactions(request, context)\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.processTraces({\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.contractConfig) {\n if (contract.contract?.chainId !== getNetwork(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 raw: toBytes(trace),\n },\n handlerId: config.handlerId,\n handlerType: HandlerType.ETH_TRACE,\n }\n }\n }\n }\n return undefined\n }\n\n testLog(log: Log, network: Networkish = 1): Promise<ProcessBindingResponse> {\n return this.testLogs([log], network)\n }\n\n testLogs(logs: Log[], 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.processLogs({\n bindings: bindings,\n })\n }\n\n buildLogBinding(log: Log, network: Networkish = 1): DataBinding | undefined {\n for (const contract of this.contractConfig) {\n if (contract.contract?.chainId !== getNetwork(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 raw: toBytes(log),\n },\n handlerId: config.handlerId,\n handlerType: HandlerType.ETH_LOG,\n }\n }\n }\n }\n }\n return undefined\n }\n\n testBlock(block: Partial<Block> & { number: number }, network: Networkish = 1): Promise<ProcessBindingResponse> {\n return this.testBlocks([block], network)\n }\n\n testBlocks(blocks: Partial<Block> & { 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.processBlocks({\n blockBindings: bindings,\n })\n }\n\n buildBlockBinding(block: Partial<Block> & { number: number }, network: Networkish = 1): BlockBinding {\n const binding: BlockBinding = {\n block: {\n raw: toBytes(block),\n },\n handlerIds: [],\n }\n for (const contract of this.contractConfig) {\n if (contract.contract?.chainId !== getNetwork(network).chainId.toString()) {\n continue\n }\n const longBlockNumber = Long.fromNumber(block.number)\n if (longBlockNumber < contract.startBlock) {\n continue\n }\n if (contract.endBlock !== Long.ZERO && 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 processBindings(\n request: ProcessBindingsRequest,\n context: CallContext = TEST_CONTEXT\n ): Promise<ProcessBindingResponse> {\n return this.service.processBindings(request, context)\n }\n}\n\nfunction toBytes(obj: any): Uint8Array {\n const logJsonStr = JSON.stringify(obj)\n const raw = new Uint8Array(logJsonStr.length)\n for (let i = 0; i < logJsonStr.length; i++) {\n raw[i] = logJsonStr.charCodeAt(i)\n }\n return raw\n}\n"]}
1
+ {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BlockBinding,\n ContractConfig,\n DataBinding,\n HandlerType,\n ProcessBindingResponse,\n ProcessBindingsRequest,\n ProcessBlocksRequest,\n ProcessConfigRequest,\n ProcessConfigResponse,\n ProcessInstructionsRequest,\n ProcessorServiceImplementation,\n ProcessTransactionsRequest,\n StartRequest,\n} from '../gen'\nimport { CallContext } from 'nice-grpc-common'\nimport { Empty } from '../gen/google/protobuf/empty'\nimport { ChainConfig } from '../chain-config'\nimport { CHAIN_MAP } from '../utils/chain'\nimport { Block, Log } from '@ethersproject/abstract-provider'\nimport Long from 'long'\nimport { getNetwork, Networkish } from '@ethersproject/providers'\nimport { Endpoints } from '../endpoints'\nimport { ProcessorState } from '../processor-state'\nimport { ProcessorServiceImpl } from '../service'\nimport { Trace } from '../core/trace'\nimport { setProvider } from '../provider'\n\nexport const TEST_CONTEXT: CallContext = <CallContext>{}\n\nexport function cleanTest() {\n global.PROCESSOR_STATE = new ProcessorState()\n if (!global.ENDPOINTS) {\n global.ENDPOINTS = new Endpoints()\n }\n}\n\nexport class TestProcessorServer implements ProcessorServiceImplementation {\n service: ProcessorServiceImpl\n contractConfig: ContractConfig[]\n\n constructor(loader: () => void, httpEndpoints: Record<string, string> = {}) {\n cleanTest()\n\n this.service = new ProcessorServiceImpl(loader)\n const dummyConfig: Record<string, ChainConfig> = {}\n\n for (const k in CHAIN_MAP) {\n const http = httpEndpoints[k] || ''\n dummyConfig[k] = {\n ChainID: k,\n Https: [http],\n }\n }\n\n setProvider(dummyConfig)\n }\n\n async start(request: StartRequest = { templateInstances: [] }, context = TEST_CONTEXT): Promise<Empty> {\n const res = await this.service.start(request, context)\n this.contractConfig = (await this.getConfig({})).contractConfigs\n return res\n }\n\n stop(request: Empty, context = TEST_CONTEXT): Promise<Empty> {\n return this.service.stop(request, context)\n }\n\n getConfig(request: ProcessConfigRequest, context = TEST_CONTEXT): Promise<ProcessConfigResponse> {\n return this.service.getConfig(request, context)\n }\n\n processBlocks(request: ProcessBlocksRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processBlocks(request, context)\n }\n\n processInstructions(request: ProcessInstructionsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processInstructions(request, context)\n }\n\n processLogs(request: ProcessBindingsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processLogs(request, context)\n }\n\n processTraces(request: ProcessBindingsRequest, context: CallContext = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processTraces(request, context)\n }\n\n processTransactions(request: ProcessTransactionsRequest, context = TEST_CONTEXT): Promise<ProcessBindingResponse> {\n return this.service.processTransactions(request, context)\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.processTraces({\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.contractConfig) {\n if (contract.contract?.chainId !== getNetwork(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 raw: toBytes(trace),\n },\n handlerId: config.handlerId,\n handlerType: HandlerType.ETH_TRACE,\n }\n }\n }\n }\n return undefined\n }\n\n testLog(log: Log, network: Networkish = 1): Promise<ProcessBindingResponse> {\n return this.testLogs([log], network)\n }\n\n testLogs(logs: Log[], 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.processLogs({\n bindings: bindings,\n })\n }\n\n buildLogBinding(log: Log, network: Networkish = 1): DataBinding | undefined {\n for (const contract of this.contractConfig) {\n if (contract.contract?.chainId !== getNetwork(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 raw: toBytes(log),\n },\n handlerId: config.handlerId,\n handlerType: HandlerType.ETH_LOG,\n }\n }\n }\n }\n }\n return undefined\n }\n\n testBlock(block: Partial<Block> & { number: number }, network: Networkish = 1): Promise<ProcessBindingResponse> {\n return this.testBlocks([block], network)\n }\n\n testBlocks(blocks: Partial<Block> & { 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.processBlocks({\n blockBindings: bindings,\n })\n }\n\n buildBlockBinding(block: Partial<Block> & { number: number }, network: Networkish = 1): BlockBinding {\n const binding: BlockBinding = {\n block: {\n raw: toBytes(block),\n },\n handlerIds: [],\n }\n for (const contract of this.contractConfig) {\n if (contract.contract?.chainId !== getNetwork(network).chainId.toString()) {\n continue\n }\n const longBlockNumber = Long.fromNumber(block.number)\n if (longBlockNumber < contract.startBlock) {\n continue\n }\n if (contract.endBlock !== Long.ZERO && 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 processBindings(\n request: ProcessBindingsRequest,\n context: CallContext = TEST_CONTEXT\n ): Promise<ProcessBindingResponse> {\n return this.service.processBindings(request, context)\n }\n}\n\nfunction toBytes(obj: any): Uint8Array {\n const logJsonStr = JSON.stringify(obj)\n const raw = new Uint8Array(logJsonStr.length)\n for (let i = 0; i < logJsonStr.length; i++) {\n raw[i] = logJsonStr.charCodeAt(i)\n }\n return raw\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { BigNumber } from 'ethers';
2
- import { BigDecimal, MetricValue } from '@sentio/sdk';
2
+ import { BigDecimal } from '../core/big-decimal';
3
3
  import { Numberish } from '../core';
4
+ import { MetricValue } from '../gen';
4
5
  export declare function toBigDecimal(n: BigNumber | bigint): BigDecimal;
5
6
  export declare function metricValueToNumberish(v: MetricValue): Numberish;
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.metricValueToNumberish = exports.toBigDecimal = void 0;
4
4
  const ethers_1 = require("ethers");
5
- const sdk_1 = require("@sentio/sdk");
5
+ const big_decimal_1 = require("../core/big-decimal");
6
6
  function toBigDecimal(n) {
7
- return new sdk_1.BigDecimal(n.toString());
7
+ return new big_decimal_1.BigDecimal(n.toString());
8
8
  }
9
9
  exports.toBigDecimal = toBigDecimal;
10
10
  function metricValueToNumberish(v) {
@@ -19,7 +19,7 @@ function metricValueToNumberish(v) {
19
19
  return bn;
20
20
  }
21
21
  if (v.bigDecimal) {
22
- return new sdk_1.BigDecimal(v.bigDecimal);
22
+ return new big_decimal_1.BigDecimal(v.bigDecimal);
23
23
  }
24
24
  throw Error("MetricValue doesn't contain any of possible value");
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../src/utils/conversion.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,qCAAqD;AAGrD,SAAgB,YAAY,CAAC,CAAqB;IAChD,OAAO,IAAI,gBAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;AACrC,CAAC;AAFD,oCAEC;AAED,SAAgB,sBAAsB,CAAC,CAAc;IACnD,IAAI,CAAC,CAAC,WAAW,EAAE;QACjB,OAAO,CAAC,CAAC,WAAW,CAAA;KACrB;IACD,IAAI,CAAC,CAAC,UAAU,EAAE;QAChB,MAAM,EAAE,GAAG,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;YACzB,OAAO,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;SACjC;QACD,OAAO,EAAE,CAAA;KACV;IAED,IAAI,CAAC,CAAC,UAAU,EAAE;QAChB,OAAO,IAAI,gBAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;KACpC;IAED,MAAM,KAAK,CAAC,mDAAmD,CAAC,CAAA;AAClE,CAAC;AAjBD,wDAiBC","sourcesContent":["import { BigNumber } from 'ethers'\nimport { BigDecimal, MetricValue } from '@sentio/sdk'\nimport { Numberish } from '../core'\n\nexport function toBigDecimal(n: BigNumber | bigint) {\n return new BigDecimal(n.toString())\n}\n\nexport function metricValueToNumberish(v: MetricValue): Numberish {\n if (v.doubleValue) {\n return v.doubleValue\n }\n if (v.bigInteger) {\n const bn = BigNumber.from(v.bigInteger.data)\n if (v.bigInteger.negative) {\n return BigNumber.from(0).sub(bn)\n }\n return bn\n }\n\n if (v.bigDecimal) {\n return new BigDecimal(v.bigDecimal)\n }\n\n throw Error(\"MetricValue doesn't contain any of possible value\")\n}\n"]}
1
+ {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../src/utils/conversion.ts"],"names":[],"mappings":";;;AAAA,mCAAkC;AAClC,qDAAgD;AAIhD,SAAgB,YAAY,CAAC,CAAqB;IAChD,OAAO,IAAI,wBAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;AACrC,CAAC;AAFD,oCAEC;AAED,SAAgB,sBAAsB,CAAC,CAAc;IACnD,IAAI,CAAC,CAAC,WAAW,EAAE;QACjB,OAAO,CAAC,CAAC,WAAW,CAAA;KACrB;IACD,IAAI,CAAC,CAAC,UAAU,EAAE;QAChB,MAAM,EAAE,GAAG,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;YACzB,OAAO,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;SACjC;QACD,OAAO,EAAE,CAAA;KACV;IAED,IAAI,CAAC,CAAC,UAAU,EAAE;QAChB,OAAO,IAAI,wBAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;KACpC;IAED,MAAM,KAAK,CAAC,mDAAmD,CAAC,CAAA;AAClE,CAAC;AAjBD,wDAiBC","sourcesContent":["import { BigNumber } from 'ethers'\nimport { BigDecimal } from '../core/big-decimal'\nimport { Numberish } from '../core'\nimport { MetricValue } from '../gen'\n\nexport function toBigDecimal(n: BigNumber | bigint) {\n return new BigDecimal(n.toString())\n}\n\nexport function metricValueToNumberish(v: MetricValue): Numberish {\n if (v.doubleValue) {\n return v.doubleValue\n }\n if (v.bigInteger) {\n const bn = BigNumber.from(v.bigInteger.data)\n if (v.bigInteger.negative) {\n return BigNumber.from(0).sub(bn)\n }\n return bn\n }\n\n if (v.bigDecimal) {\n return new BigDecimal(v.bigDecimal)\n }\n\n throw Error(\"MetricValue doesn't contain any of possible value\")\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"dex-price.test.js","sourceRoot":"","sources":["../../src/utils/dex-price.test.ts"],"names":[],"mappings":";;AAAA,2CAA8D;AAC9D,qCAA4C;AAC5C,4DAAmE;AAEnE,+BAA6B;AAE7B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,CAAC,eAAe,GAAG,IAAI,oBAAc,EAAE,CAAA;IAC7C,MAAM,aAAa,GAAG,IAAA,wCAAwB,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAE1D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAE/C,MAAM,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,4BAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC9D,IAAA,aAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;QAEjC,MAAM,QAAQ,GAAG,MAAM,4BAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAClE,IAAA,aAAM,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,0BAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACzD,IAAA,aAAM,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { EthereumDexPrice, GoerliDexPrice } from './dex-price'\nimport { ProcessorState } from '@sentio/sdk'\nimport { loadTestProvidersFromEnv } from '../testing/test-provider'\n\nimport { expect } from 'chai'\n\ndescribe('dex price tests', () => {\n global.PROCESSOR_STATE = new ProcessorState()\n const haveProviders = loadTestProvidersFromEnv(['1', '5'])\n\n const testIf = haveProviders ? test : test.skip\n\n testIf('get price at mainnet', async () => {\n const usdc = await EthereumDexPrice.getPrice('usdc', 15677823)\n expect(usdc.price).eq(0.99991649)\n\n const compound = await EthereumDexPrice.getPrice('COMP', 15677823)\n expect(compound.price).eq(60.27)\n })\n\n testIf('get price at goerli', async () => {\n const dai = await GoerliDexPrice.getPrice('DAI', 7712734)\n expect(dai.price).eq(0.99971281)\n })\n})\n"]}
1
+ {"version":3,"file":"dex-price.test.js","sourceRoot":"","sources":["../../src/utils/dex-price.test.ts"],"names":[],"mappings":";;AAAA,2CAA8D;AAC9D,wDAAmD;AACnD,4DAAmE;AAEnE,+BAA6B;AAC7B,4CAAwC;AAExC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,CAAC,eAAe,GAAG,IAAI,gCAAc,EAAE,CAAA;IAC7C,MAAM,CAAC,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAA;IAElC,MAAM,aAAa,GAAG,IAAA,wCAAwB,EAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAE1D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;IAE/C,MAAM,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,4BAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC9D,IAAA,aAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;QAEjC,MAAM,QAAQ,GAAG,MAAM,4BAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAClE,IAAA,aAAM,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACvC,MAAM,GAAG,GAAG,MAAM,0BAAc,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACzD,IAAA,aAAM,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { EthereumDexPrice, GoerliDexPrice } from './dex-price'\nimport { ProcessorState } from '../processor-state'\nimport { loadTestProvidersFromEnv } from '../testing/test-provider'\n\nimport { expect } from 'chai'\nimport { Endpoints } from '../endpoints'\n\ndescribe('dex price tests', () => {\n global.PROCESSOR_STATE = new ProcessorState()\n global.ENDPOINTS = new Endpoints()\n\n const haveProviders = loadTestProvidersFromEnv(['1', '5'])\n\n const testIf = haveProviders ? test : test.skip\n\n testIf('get price at mainnet', async () => {\n const usdc = await EthereumDexPrice.getPrice('usdc', 15677823)\n expect(usdc.price).eq(0.99991649)\n\n const compound = await EthereumDexPrice.getPrice('COMP', 15677823)\n expect(compound.price).eq(60.27)\n })\n\n testIf('get price at goerli', async () => {\n const dai = await GoerliDexPrice.getPrice('DAI', 7712734)\n expect(dai.price).eq(0.99971281)\n })\n})\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"erc20.test.js","sourceRoot":"","sources":["../../src/utils/erc20.test.ts"],"names":[],"mappings":";;AAAA,qCAA4C;AAC5C,mCAA2C;AAC3C,4DAAmE;AAEnE,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,CAAC,eAAe,GAAG,IAAI,oBAAc,EAAE,CAAA;IAC7C,MAAM,aAAa,GAAG,IAAA,wCAAwB,EAAC,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,IAAA,yBAAiB,EAAC,4CAA4C,CAAC,CAAA;QAElF,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,IAAA,yBAAiB,EAAC,4CAA4C,CAAC,CAAA;QAElF,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 { ProcessorState } from '@sentio/sdk'\nimport { getERC20TokenInfo } from './token'\nimport { loadTestProvidersFromEnv } from '../testing/test-provider'\n\ndescribe('erc20 tests', () => {\n global.PROCESSOR_STATE = new ProcessorState()\n const haveProviders = loadTestProvidersFromEnv('1')\n\n const testIf = haveProviders ? test : test.skip\n\n testIf('test bytes32', async () => {\n const info = await getERC20TokenInfo('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('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48')\n\n expect(info.decimal).toEqual(6)\n expect(info.symbol).toEqual('USDC')\n expect(info.name).toEqual('USD Coin')\n })\n})\n"]}
1
+ {"version":3,"file":"erc20.test.js","sourceRoot":"","sources":["../../src/utils/erc20.test.ts"],"names":[],"mappings":";;AAAA,wDAAmD;AACnD,mCAA2C;AAC3C,4DAAmE;AACnE,4CAAwC;AAExC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,CAAC,eAAe,GAAG,IAAI,gCAAc,EAAE,CAAA;IAC7C,MAAM,CAAC,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAA;IAElC,MAAM,aAAa,GAAG,IAAA,wCAAwB,EAAC,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,IAAA,yBAAiB,EAAC,4CAA4C,CAAC,CAAA;QAElF,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,IAAA,yBAAiB,EAAC,4CAA4C,CAAC,CAAA;QAElF,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 { ProcessorState } from '../processor-state'\nimport { getERC20TokenInfo } from './token'\nimport { loadTestProvidersFromEnv } from '../testing/test-provider'\nimport { Endpoints } from '../endpoints'\n\ndescribe('erc20 tests', () => {\n global.PROCESSOR_STATE = new ProcessorState()\n global.ENDPOINTS = new Endpoints()\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('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('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48')\n\n expect(info.decimal).toEqual(6)\n expect(info.symbol).toEqual('USDC')\n expect(info.name).toEqual('USD Coin')\n })\n})\n"]}
@@ -1,2 +1,10 @@
1
1
  import { PriceServiceClient } from '../gen/service/price/protos/price';
2
- export declare function getPriceClient(address: string): PriceServiceClient;
2
+ export declare function getPriceClient(address?: string): PriceServiceClient;
3
+ /**
4
+ *
5
+ * @param chainId chain id refers to CHAIN_MAP
6
+ * @param coinType
7
+ * @param date
8
+ */
9
+ export declare function getPriceByType(chainId: string, coinType: string, date: Date): Promise<number>;
10
+ export declare function delay(ms: number): Promise<unknown>;
@@ -1,11 +1,59 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPriceClient = void 0;
3
+ exports.delay = exports.getPriceByType = exports.getPriceClient = void 0;
4
4
  const price_1 = require("../gen/service/price/protos/price");
5
5
  const nice_grpc_1 = require("nice-grpc");
6
6
  function getPriceClient(address) {
7
+ if (!address) {
8
+ address = global.ENDPOINTS.priceFeedAPI;
9
+ }
7
10
  const channel = (0, nice_grpc_1.createChannel)(address);
8
11
  return (0, nice_grpc_1.createClient)(price_1.PriceServiceDefinition, channel);
9
12
  }
10
13
  exports.getPriceClient = getPriceClient;
14
+ const priceMap = new Map();
15
+ let priceClient;
16
+ /**
17
+ *
18
+ * @param chainId chain id refers to CHAIN_MAP
19
+ * @param coinType
20
+ * @param date
21
+ */
22
+ async function getPriceByType(chainId, coinType, date) {
23
+ if (!priceClient) {
24
+ priceClient = getPriceClient();
25
+ }
26
+ const dateStr = [date.getUTCDate(), date.getUTCMonth() + 1, date.getUTCFullYear()].join('-');
27
+ const key = `${coinType}-${dateStr}`;
28
+ const price = priceMap.get(key);
29
+ if (price) {
30
+ return price;
31
+ }
32
+ /*eslint no-constant-condition: ["error", { "checkLoops": false }]*/
33
+ while (true) {
34
+ try {
35
+ const response = await priceClient.getPrice({
36
+ timestamp: date,
37
+ coinId: {
38
+ address: {
39
+ chain: chainId,
40
+ address: coinType,
41
+ },
42
+ },
43
+ });
44
+ const price = response.price;
45
+ priceMap.set(key, price);
46
+ return price;
47
+ }
48
+ catch (e) {
49
+ console.log('error getting price', e, dateStr, coinType);
50
+ await delay(1000);
51
+ }
52
+ }
53
+ }
54
+ exports.getPriceByType = getPriceByType;
55
+ function delay(ms) {
56
+ return new Promise((resolve) => setTimeout(resolve, ms));
57
+ }
58
+ exports.delay = delay;
11
59
  //# sourceMappingURL=price.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/utils/price.ts"],"names":[],"mappings":";;;AAAA,6DAA8F;AAC9F,yCAAuD;AAEvD,SAAgB,cAAc,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAG,IAAA,yBAAa,EAAC,OAAO,CAAC,CAAA;IAEtC,OAAO,IAAA,wBAAY,EAAC,8BAAsB,EAAE,OAAO,CAAC,CAAA;AACtD,CAAC;AAJD,wCAIC","sourcesContent":["import { PriceServiceClient, PriceServiceDefinition } from '../gen/service/price/protos/price'\nimport { createChannel, createClient } from 'nice-grpc'\n\nexport function getPriceClient(address: string): PriceServiceClient {\n const channel = createChannel(address)\n\n return createClient(PriceServiceDefinition, channel)\n}\n"]}
1
+ {"version":3,"file":"price.js","sourceRoot":"","sources":["../../src/utils/price.ts"],"names":[],"mappings":";;;AAAA,6DAA8F;AAC9F,yCAAuD;AAEvD,SAAgB,cAAc,CAAC,OAAgB;IAC7C,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAA;KACxC;IACD,MAAM,OAAO,GAAG,IAAA,yBAAa,EAAC,OAAO,CAAC,CAAA;IAEtC,OAAO,IAAA,wBAAY,EAAC,8BAAsB,EAAE,OAAO,CAAC,CAAA;AACtD,CAAC;AAPD,wCAOC;AAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;AAC1C,IAAI,WAA+B,CAAA;AAEnC;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,QAAgB,EAAE,IAAU;IAChF,IAAI,CAAC,WAAW,EAAE;QAChB,WAAW,GAAG,cAAc,EAAE,CAAA;KAC/B;IAED,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5F,MAAM,GAAG,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE,CAAA;IACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,KAAK,EAAE;QACT,OAAO,KAAK,CAAA;KACb;IAED,oEAAoE;IACpE,OAAO,IAAI,EAAE;QACX,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC;gBAC1C,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE;oBACN,OAAO,EAAE;wBACP,KAAK,EAAE,OAAO;wBACd,OAAO,EAAE,QAAQ;qBAClB;iBACF;aACF,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;YAC5B,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YACxB,OAAO,KAAK,CAAA;SACb;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;YACxD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;SAClB;KACF;AACH,CAAC;AAhCD,wCAgCC;AAED,SAAgB,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAFD,sBAEC","sourcesContent":["import { PriceServiceClient, PriceServiceDefinition } from '../gen/service/price/protos/price'\nimport { createChannel, createClient } from 'nice-grpc'\n\nexport function getPriceClient(address?: string): PriceServiceClient {\n if (!address) {\n address = global.ENDPOINTS.priceFeedAPI\n }\n const channel = createChannel(address)\n\n return createClient(PriceServiceDefinition, channel)\n}\n\nconst priceMap = new Map<string, number>()\nlet priceClient: PriceServiceClient\n\n/**\n *\n * @param chainId chain id refers to CHAIN_MAP\n * @param coinType\n * @param date\n */\nexport async function getPriceByType(chainId: string, coinType: string, date: Date): Promise<number> {\n if (!priceClient) {\n priceClient = getPriceClient()\n }\n\n const dateStr = [date.getUTCDate(), date.getUTCMonth() + 1, date.getUTCFullYear()].join('-')\n const key = `${coinType}-${dateStr}`\n const price = priceMap.get(key)\n if (price) {\n return price\n }\n\n /*eslint no-constant-condition: [\"error\", { \"checkLoops\": false }]*/\n while (true) {\n try {\n const response = await priceClient.getPrice({\n timestamp: date,\n coinId: {\n address: {\n chain: chainId,\n address: coinType,\n },\n },\n })\n const price = response.price\n priceMap.set(key, price)\n return price\n } catch (e) {\n console.log('error getting price', e, dateStr, coinType)\n await delay(1000)\n }\n }\n}\n\nexport function delay(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { BigNumber } from '@ethersproject/bignumber';
2
- import { BigDecimal } from '@sentio/sdk';
2
+ import { BigDecimal } from '../core/big-decimal';
3
3
  export interface TokenInfo {
4
4
  symbol: string;
5
5
  name: string;
@@ -4,7 +4,7 @@ exports.scaleDown = exports.getER20NormalizedAmount = exports.getERC20TokenInfo
4
4
  const error_1 = require("../error");
5
5
  const erc20_1 = require("../builtin/erc20");
6
6
  const erc20bytes_processor_1 = require("../builtin/internal/erc20bytes_processor");
7
- const sdk_1 = require("@sentio/sdk");
7
+ const big_decimal_1 = require("../core/big-decimal");
8
8
  const conversion_1 = require("./conversion");
9
9
  const ethers_1 = require("ethers");
10
10
  exports.NATIVE_ETH = {
@@ -53,7 +53,7 @@ async function getER20NormalizedAmount(tokenAddress, amount, chainId) {
53
53
  }
54
54
  exports.getER20NormalizedAmount = getER20NormalizedAmount;
55
55
  function scaleDown(amount, decimal) {
56
- const divider = new sdk_1.BigDecimal(10).pow(decimal);
56
+ const divider = new big_decimal_1.BigDecimal(10).pow(decimal);
57
57
  return (0, conversion_1.toBigDecimal)(amount).dividedBy(divider);
58
58
  }
59
59
  exports.scaleDown = scaleDown;
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":";;;AAEA,oCAA8C;AAC9C,4CAAmD;AACnD,mFAAgF;AAChF,qCAAwC;AACxC,6CAA2C;AAC3C,mCAA8B;AAQjB,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,YAAY;CACnB,CAAA;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;AAEzC,KAAK,UAAU,iBAAiB,CAAC,YAAoB,EAAE,OAAO,GAAG,CAAC;IACvE,MAAM,GAAG,GAAG,OAAO,GAAG,YAAY,CAAA;IAClC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAA;KACX;IACD,MAAM,QAAQ,GAAG,IAAA,wBAAgB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,IAAA,4CAAqB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAElE,IAAI;QACF,kEAAkE;QAClE,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI;YACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;SAC7B;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;SAC5D;QAED,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI;YACF,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;SACjC;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;SAChE;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACzC,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QACjD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAA,2BAAmB,EAAC,CAAC,EAAE,SAAS,CAAC,CAAA;KACxC;AACH,CAAC;AAhCD,8CAgCC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,MAAiB,EACjB,OAAe;IAEf,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAChE,OAAO,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;AAC7C,CAAC;AAPD,0DAOC;AAED,SAAgB,SAAS,CAAC,MAAiB,EAAE,OAAe;IAC1D,MAAM,OAAO,GAAG,IAAI,gBAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/C,OAAO,IAAA,yBAAY,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChD,CAAC;AAHD,8BAGC","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber'\n\nimport { transformEtherError } from '../error'\nimport { getERC20Contract } from '../builtin/erc20'\nimport { getERC20BytesContract } from '../builtin/internal/erc20bytes_processor'\nimport { BigDecimal } from '@sentio/sdk'\nimport { toBigDecimal } from './conversion'\nimport { utils } from 'ethers'\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, TokenInfo>()\n\nexport async function getERC20TokenInfo(tokenAddress: string, chainId = 1): Promise<TokenInfo> {\n const key = chainId + tokenAddress\n const res = TOKEN_INFOS.get(key)\n if (res) {\n return res\n }\n const contract = getERC20Contract(tokenAddress, chainId)\n const bytesContract = getERC20BytesContract(tokenAddress, chainId)\n\n try {\n // TODO maybe not do try catch, just do raw call the parse results\n let name = ''\n try {\n name = await contract.name()\n } catch (e) {\n name = utils.parseBytes32String(await bytesContract.name())\n }\n\n let symbol = ''\n try {\n symbol = await contract.symbol()\n } catch (e) {\n symbol = utils.parseBytes32String(await bytesContract.symbol())\n }\n\n const decimal = await contract.decimals()\n const info: TokenInfo = { name, symbol, decimal }\n TOKEN_INFOS.set(key, info)\n return info\n } catch (e) {\n throw transformEtherError(e, undefined)\n }\n}\n\nexport async function getER20NormalizedAmount(\n tokenAddress: string,\n amount: BigNumber,\n chainId: number\n): Promise<BigDecimal> {\n const tokenInfo = await getERC20TokenInfo(tokenAddress, chainId)\n return scaleDown(amount, tokenInfo.decimal)\n}\n\nexport function scaleDown(amount: BigNumber, decimal: number) {\n const divider = new BigDecimal(10).pow(decimal)\n return toBigDecimal(amount).dividedBy(divider)\n}\n"]}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":";;;AAEA,oCAA8C;AAC9C,4CAAmD;AACnD,mFAAgF;AAChF,qDAAgD;AAChD,6CAA2C;AAC3C,mCAA8B;AAQjB,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,EAAE;IACX,IAAI,EAAE,YAAY;CACnB,CAAA;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAqB,CAAA;AAEzC,KAAK,UAAU,iBAAiB,CAAC,YAAoB,EAAE,OAAO,GAAG,CAAC;IACvE,MAAM,GAAG,GAAG,OAAO,GAAG,YAAY,CAAA;IAClC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,GAAG,EAAE;QACP,OAAO,GAAG,CAAA;KACX;IACD,MAAM,QAAQ,GAAG,IAAA,wBAAgB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,IAAA,4CAAqB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAElE,IAAI;QACF,kEAAkE;QAClE,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,IAAI;YACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;SAC7B;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;SAC5D;QAED,IAAI,MAAM,GAAG,EAAE,CAAA;QACf,IAAI;YACF,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;SACjC;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,GAAG,cAAK,CAAC,kBAAkB,CAAC,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,CAAA;SAChE;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACzC,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QACjD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAA,2BAAmB,EAAC,CAAC,EAAE,SAAS,CAAC,CAAA;KACxC;AACH,CAAC;AAhCD,8CAgCC;AAEM,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,MAAiB,EACjB,OAAe;IAEf,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAChE,OAAO,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;AAC7C,CAAC;AAPD,0DAOC;AAED,SAAgB,SAAS,CAAC,MAAiB,EAAE,OAAe;IAC1D,MAAM,OAAO,GAAG,IAAI,wBAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAC/C,OAAO,IAAA,yBAAY,EAAC,MAAM,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAChD,CAAC;AAHD,8BAGC","sourcesContent":["import { BigNumber } from '@ethersproject/bignumber'\n\nimport { transformEtherError } from '../error'\nimport { getERC20Contract } from '../builtin/erc20'\nimport { getERC20BytesContract } from '../builtin/internal/erc20bytes_processor'\nimport { BigDecimal } from '../core/big-decimal'\nimport { toBigDecimal } from './conversion'\nimport { utils } from 'ethers'\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, TokenInfo>()\n\nexport async function getERC20TokenInfo(tokenAddress: string, chainId = 1): Promise<TokenInfo> {\n const key = chainId + tokenAddress\n const res = TOKEN_INFOS.get(key)\n if (res) {\n return res\n }\n const contract = getERC20Contract(tokenAddress, chainId)\n const bytesContract = getERC20BytesContract(tokenAddress, chainId)\n\n try {\n // TODO maybe not do try catch, just do raw call the parse results\n let name = ''\n try {\n name = await contract.name()\n } catch (e) {\n name = utils.parseBytes32String(await bytesContract.name())\n }\n\n let symbol = ''\n try {\n symbol = await contract.symbol()\n } catch (e) {\n symbol = utils.parseBytes32String(await bytesContract.symbol())\n }\n\n const decimal = await contract.decimals()\n const info: TokenInfo = { name, symbol, decimal }\n TOKEN_INFOS.set(key, info)\n return info\n } catch (e) {\n throw transformEtherError(e, undefined)\n }\n}\n\nexport async function getER20NormalizedAmount(\n tokenAddress: string,\n amount: BigNumber,\n chainId: number\n): Promise<BigDecimal> {\n const tokenInfo = await getERC20TokenInfo(tokenAddress, chainId)\n return scaleDown(amount, tokenInfo.decimal)\n}\n\nexport function scaleDown(amount: BigNumber, decimal: number) {\n const divider = new BigDecimal(10).pow(decimal)\n return toBigDecimal(amount).dividedBy(divider)\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
3
  "license": "Apache-2.0",
4
- "version": "1.28.0",
4
+ "version": "1.29.1",
5
5
  "scripts": {
6
6
  "compile_target": "yarn tsc -b src/target-ethers-sentio/tsconfig.json",
7
7
  "compile": "tsc -p . && cp src/cli/webpack.config.js lib/cli && cp src/utils/*.csv lib/utils",
@@ -27,7 +27,7 @@
27
27
  "@types/bn.js": "^5.1.0",
28
28
  "@types/express": "^4.17.14",
29
29
  "@types/node-fetch": "^2.6.2",
30
- "aptos-sdk": "npm:aptos@^1.3.16",
30
+ "aptos-sdk": "npm:aptos@^1.3.17",
31
31
  "bignumber.js": "^9.1.0",
32
32
  "bn.js": "^5.2.1",
33
33
  "bs58": "^5.0.0",
@@ -61,6 +61,9 @@
61
61
  "chai": "^4.3.6",
62
62
  "clean-publish": "^4.0.1",
63
63
  "conventional-changelog-conventionalcommits": "^5.0.0",
64
+ "eslint": "^8.27.0",
65
+ "eslint-import-resolver-typescript": "^3.5.2",
66
+ "eslint-plugin-import": "^2.26.0",
64
67
  "jest": "^29.0.3",
65
68
  "semantic-release": "^19.0.5",
66
69
  "ts-jest": "^29.0.3",
@@ -0,0 +1,11 @@
1
+ import { AptosQueryClient, AptosQueryDefinition } from '../gen/chainquery/protos/chainquery'
2
+ import { createChannel, createClient } from 'nice-grpc'
3
+
4
+ export function getChainQueryClient(address?: string): AptosQueryClient {
5
+ if (!address) {
6
+ address = global.ENDPOINTS.chainQueryAPI
7
+ }
8
+ const channel = createChannel(address)
9
+
10
+ return createClient(AptosQueryDefinition, channel)
11
+ }
@@ -1,17 +1,14 @@
1
1
  import { ProcessResult } from '../gen'
2
+
3
+ import { TYPE_REGISTRY, TypeRegistry } from './type-registry'
4
+ import { AptosBindOptions, AptosNetwork, getChainId } from './network'
2
5
  import {
3
- AptosBindOptions,
4
- AptosContext,
5
- AptosNetwork,
6
+ MoveResource,
6
7
  Transaction_UserTransaction,
7
8
  TransactionPayload_EntryFunctionPayload,
8
- TypeRegistry,
9
- } from '.'
10
-
11
- import { EventInstance, TYPE_REGISTRY } from './types'
12
- import { getChainId } from './network'
13
- import { MoveResource } from 'aptos-sdk/src/generated'
14
- import { AptosResourceContext } from './context'
9
+ } from 'aptos-sdk/src/generated'
10
+ import { AptosContext, AptosResourceContext } from './context'
11
+ import { EventInstance } from './models'
15
12
 
16
13
  type IndexConfigure = {
17
14
  address: string
@@ -2,9 +2,9 @@ import Long from 'long'
2
2
  import { DataDescriptor, RecordMetaData } from '../gen'
3
3
  import { Labels } from '../core/metadata'
4
4
  import { normalizeLabels } from '../core/meter'
5
- import { BaseContext } from '../core/context'
6
- import { AptosNetwork, Transaction_UserTransaction } from './'
7
- import { getChainId } from './network'
5
+ import { BaseContext } from '../core/base-context'
6
+ import { Transaction_UserTransaction } from 'aptos-sdk/src/generated'
7
+ import { AptosNetwork, getChainId } from './network'
8
8
 
9
9
  export class AptosContext extends BaseContext {
10
10
  address: string
@@ -1,7 +1,8 @@
1
1
  export type { Transaction_UserTransaction, TransactionPayload_EntryFunctionPayload } from 'aptos-sdk/src/generated'
2
- export type { EventInstance, TypedEventInstance, TypedEntryFunctionPayload } from './types'
3
- export { TYPE_REGISTRY, TypeRegistry } from './types'
2
+ export type { EventInstance, TypedEventInstance, TypedEntryFunctionPayload, TypedMoveResource } from './models'
3
+ export { TYPE_REGISTRY, TypeRegistry } from './type-registry'
4
4
  export type { FunctionNameAndCallFilter, EventFilter, CallFilter, ArgumentsFilter } from './aptos-processor'
5
5
  export { AptosBaseProcessor, AptosAccountProcessor } from './aptos-processor'
6
6
  export { AptosContext, AptosResourceContext } from './context'
7
7
  export { AptosBindOptions, AptosNetwork, getRpcClient } from './network'
8
+ export * from './api'
@@ -0,0 +1,34 @@
1
+ import { Event, MoveResource, TransactionPayload_EntryFunctionPayload } from 'aptos-sdk/src/generated'
2
+
3
+ export type EventInstance = Event & {
4
+ version: string
5
+ }
6
+
7
+ export type TypedEventInstance<T> = EventInstance & {
8
+ // Typed data converted from ABI
9
+ // undefined if there is converting error, usually because the ABI/data
10
+ // mismatch
11
+ data_typed: T
12
+
13
+ type_arguments: string[]
14
+ }
15
+
16
+ // Don't use intermedidate type to make IDE happier
17
+ export type TypedEntryFunctionPayload<T extends Array<any>> = TransactionPayload_EntryFunctionPayload & {
18
+ arguments_typed: T
19
+ }
20
+
21
+ export type TypedMoveResource<T> = MoveResource & {
22
+ data_typed: T
23
+ type_arguments: string[]
24
+ }
25
+
26
+ export interface StructWithTag {
27
+ type: string
28
+ data: any
29
+ }
30
+
31
+ export interface StructWithType<T> extends StructWithTag {
32
+ data_typed: T
33
+ type_arguments: string[]
34
+ }