@sentio/sdk 2.18.4-rc.1 → 2.18.4-rc.3

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 (97) hide show
  1. package/lib/aptos/api.d.ts +1 -1
  2. package/lib/aptos/context.d.ts +2 -2
  3. package/lib/aptos/ext/coin.js +1 -1
  4. package/lib/aptos/ext/coin.js.map +1 -1
  5. package/lib/aptos/network.d.ts +1 -1
  6. package/lib/aptos/network.js +1 -1
  7. package/lib/aptos/network.js.map +1 -1
  8. package/lib/core/base-context.d.ts +1 -1
  9. package/lib/core/base-context.js.map +1 -1
  10. package/lib/core/yaml-contract-config.d.ts +1 -1
  11. package/lib/core/yaml-contract-config.js.map +1 -1
  12. package/lib/eth/account-processor.d.ts +1 -1
  13. package/lib/eth/account-processor.js +1 -1
  14. package/lib/eth/account-processor.js.map +1 -1
  15. package/lib/eth/base-processor.d.ts +1 -1
  16. package/lib/eth/base-processor.js +1 -1
  17. package/lib/eth/base-processor.js.map +1 -1
  18. package/lib/eth/bind-options.d.ts +1 -1
  19. package/lib/eth/bind-options.js +1 -1
  20. package/lib/eth/bind-options.js.map +1 -1
  21. package/lib/eth/binds.d.ts +1 -1
  22. package/lib/eth/binds.js.map +1 -1
  23. package/lib/eth/codegen/ethers-sentio.js +1 -1
  24. package/lib/eth/codegen/ethers-sentio.js.map +1 -1
  25. package/lib/eth/context.d.ts +1 -1
  26. package/lib/eth/context.js.map +1 -1
  27. package/lib/eth/eth-plugin.js +1 -1
  28. package/lib/eth/eth-plugin.js.map +1 -1
  29. package/lib/eth/index.d.ts +1 -1
  30. package/lib/eth/index.js +1 -1
  31. package/lib/eth/index.js.map +1 -1
  32. package/lib/eth/provider.d.ts +1 -1
  33. package/lib/eth/provider.js +1 -1
  34. package/lib/eth/provider.js.map +1 -1
  35. package/lib/eth/provider.test.js.map +1 -1
  36. package/lib/index.d.ts +0 -1
  37. package/lib/index.js +0 -1
  38. package/lib/index.js.map +1 -1
  39. package/lib/solana/solana-context.d.ts +1 -1
  40. package/lib/solana/solana-context.js +1 -1
  41. package/lib/solana/solana-context.js.map +1 -1
  42. package/lib/solana/solana-options.d.ts +1 -1
  43. package/lib/solana/solana-options.js.map +1 -1
  44. package/lib/solana/solana-processor.d.ts +1 -1
  45. package/lib/solana/solana-processor.js +1 -1
  46. package/lib/solana/solana-processor.js.map +1 -1
  47. package/lib/sui/context.d.ts +2 -2
  48. package/lib/sui/ext/coin.js +1 -1
  49. package/lib/sui/ext/coin.js.map +1 -1
  50. package/lib/sui/network.d.ts +1 -1
  51. package/lib/sui/network.js +1 -1
  52. package/lib/sui/network.js.map +1 -1
  53. package/lib/sui/sui-plugin.js +1 -1
  54. package/lib/sui/sui-plugin.js.map +1 -1
  55. package/lib/testing/eth-facet.d.ts +1 -1
  56. package/lib/testing/eth-facet.js +1 -1
  57. package/lib/testing/eth-facet.js.map +1 -1
  58. package/lib/testing/test-processor-server.js +1 -1
  59. package/lib/testing/test-processor-server.js.map +1 -1
  60. package/lib/testing/test-provider.js +1 -1
  61. package/lib/testing/test-provider.js.map +1 -1
  62. package/lib/utils/dex-price.d.ts +1 -1
  63. package/lib/utils/dex-price.js +1 -1
  64. package/lib/utils/dex-price.js.map +1 -1
  65. package/lib/utils/erc20.test.js.map +1 -1
  66. package/lib/utils/price.d.ts +1 -1
  67. package/lib/utils/price.js.map +1 -1
  68. package/package.json +8 -10
  69. package/src/aptos/ext/coin.ts +1 -1
  70. package/src/aptos/network.ts +1 -1
  71. package/src/core/base-context.ts +1 -1
  72. package/src/core/yaml-contract-config.ts +1 -1
  73. package/src/eth/account-processor.ts +1 -1
  74. package/src/eth/base-processor.ts +1 -1
  75. package/src/eth/bind-options.ts +1 -1
  76. package/src/eth/binds.ts +1 -1
  77. package/src/eth/codegen/ethers-sentio.ts +1 -1
  78. package/src/eth/context.ts +1 -1
  79. package/src/eth/eth-plugin.ts +1 -1
  80. package/src/eth/index.ts +1 -1
  81. package/src/eth/provider.ts +1 -1
  82. package/src/index.ts +0 -2
  83. package/src/solana/solana-context.ts +1 -1
  84. package/src/solana/solana-options.ts +1 -1
  85. package/src/solana/solana-processor.ts +1 -1
  86. package/src/sui/ext/coin.ts +1 -1
  87. package/src/sui/network.ts +1 -1
  88. package/src/sui/sui-plugin.ts +1 -1
  89. package/src/testing/eth-facet.ts +1 -1
  90. package/src/testing/test-processor-server.ts +1 -1
  91. package/src/testing/test-provider.ts +1 -1
  92. package/src/utils/dex-price.ts +1 -1
  93. package/src/utils/price.ts +1 -1
  94. package/lib/core/chain.d.ts +0 -205
  95. package/lib/core/chain.js +0 -236
  96. package/lib/core/chain.js.map +0 -1
  97. package/src/core/chain.ts +0 -236
@@ -1 +1 @@
1
- {"version":3,"file":"test-provider.js","sourceRoot":"","sources":["../../src/testing/test-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,UAAU,wBAAwB,CAAC,gBAAmC;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;QACpC,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAA;KACtC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACtC,MAAM,MAAM,GAAG,gBAAgB,GAAG,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,EAAE;YACT,SAAQ;SACT;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;KAC5C;IAED,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACvB,OAAO,KAAK,CAAA;SACb;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import { Endpoints } from '@sentio/runtime'\nimport { CHAIN_MAP } from '../core/chain.js'\n\nexport function loadTestProvidersFromEnv(requiredChainIds: string[] | string): boolean {\n const found: string[] = []\n\n if (!Array.isArray(requiredChainIds)) {\n requiredChainIds = [requiredChainIds]\n }\n\n for (const k of Object.keys(CHAIN_MAP)) {\n const envKey = 'TEST_ENDPOINT_' + k\n const http = process.env[envKey]\n if (!http) {\n continue\n }\n found.push(k)\n Endpoints.INSTANCE.chainServer.set(k, http)\n }\n\n for (const id of requiredChainIds) {\n if (!found.includes(id)) {\n return false\n }\n }\n return true\n}\n"]}
1
+ {"version":3,"file":"test-provider.js","sourceRoot":"","sources":["../../src/testing/test-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,MAAM,UAAU,wBAAwB,CAAC,gBAAmC;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE;QACpC,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAA;KACtC;IAED,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QACtC,MAAM,MAAM,GAAG,gBAAgB,GAAG,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,IAAI,EAAE;YACT,SAAQ;SACT;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACb,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;KAC5C;IAED,KAAK,MAAM,EAAE,IAAI,gBAAgB,EAAE;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YACvB,OAAO,KAAK,CAAA;SACb;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["import { Endpoints } from '@sentio/runtime'\nimport { CHAIN_MAP } from '@sentio/chain'\n\nexport function loadTestProvidersFromEnv(requiredChainIds: string[] | string): boolean {\n const found: string[] = []\n\n if (!Array.isArray(requiredChainIds)) {\n requiredChainIds = [requiredChainIds]\n }\n\n for (const k of Object.keys(CHAIN_MAP)) {\n const envKey = 'TEST_ENDPOINT_' + k\n const http = process.env[envKey]\n if (!http) {\n continue\n }\n found.push(k)\n Endpoints.INSTANCE.chainServer.set(k, http)\n }\n\n for (const id of requiredChainIds) {\n if (!found.includes(id)) {\n return false\n }\n }\n return true\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { BlockTag } from 'ethers/providers';
2
- import { EthChainId } from '../core/chain.js';
2
+ import { EthChainId } from '@sentio/chain';
3
3
  export declare enum PriceUnit {
4
4
  USD = 0,
5
5
  ETH = 1,
@@ -3,7 +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
+ import { EthChainId } from '@sentio/chain';
7
7
  export var PriceUnit;
8
8
  (function (PriceUnit) {
9
9
  PriceUnit[PriceUnit["USD"] = 0] = "USD";
@@ -1 +1 @@
1
- {"version":3,"file":"dex-price.js","sourceRoot":"","sources":["../../src/utils/dex-price.ts"],"names":[],"mappings":"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","sourcesContent":["import { getEACAggregatorProxyContract } from '../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
+ {"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 '@sentio/chain'\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;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"]}
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,eAAe,CAAA;AAE1C,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 '@sentio/chain'\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"]}
@@ -1,6 +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
+ import { ChainId } from '@sentio/chain';
4
4
  export declare function getPriceClient(address?: string): import("nice-grpc").RawClient<import("nice-grpc/lib/service-definitions/ts-proto.js").FromTsProtoServiceDefinition<{
5
5
  readonly name: "PriceService";
6
6
  readonly fullName: "price_service.PriceService";
@@ -1 +1 @@
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 // TODO maybe use small set of error\n priceMap.delete(key)\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"]}
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 '@sentio/chain'\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 // TODO maybe use small set of error\n priceMap.delete(key)\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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "2.18.4-rc.1",
3
+ "version": "2.18.4-rc.3",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -40,22 +40,20 @@
40
40
  "!**/*.test.{js,ts}",
41
41
  "!{lib,src}/*/tests"
42
42
  ],
43
- "resolutions": {
44
- "superstruct": "^1.0.3"
45
- },
46
43
  "dependencies": {
47
- "@coral-xyz/borsh": "^0.27.0",
48
- "@mysten/sui.js": "npm:@sentio/sui.js@^0.34.0",
44
+ "@coral-xyz/borsh": "^0.28.0",
45
+ "@mysten/sui.js": "^0.36.0",
49
46
  "@project-serum/anchor": "^0.26.0",
50
47
  "@sentio/bigdecimal": "^9.1.1-patch.3",
48
+ "@sentio/chain": "^1.0.0",
51
49
  "@sentio/ethers-v6": "^1.0.28",
52
50
  "@solana/web3.js": "^1.74.0",
53
51
  "@types/prettier": "^2.7.2",
54
- "aptos-sdk": "npm:aptos@^1.8.5",
52
+ "aptos-sdk": "npm:aptos@^1.10.0",
55
53
  "bs58": "^5.0.0",
56
54
  "chalk": "^5.2.0",
57
55
  "csv-parse": "^5.3.0",
58
- "ethers": "npm:@sentio/ethers@^6.4.0",
56
+ "ethers": "npm:@sentio/ethers@^6.6.0",
59
57
  "js-sha3": "^0.8.0",
60
58
  "lodash-es": "^4.17.21",
61
59
  "mkdirp": "^1.0.4",
@@ -71,8 +69,8 @@
71
69
  "typedoc": "^0.24.1",
72
70
  "utility-types": "^3.10.0",
73
71
  "yaml": "^2.2.1",
74
- "@sentio/protos": "2.18.4-rc.1",
75
- "@sentio/runtime": "^2.18.4-rc.1"
72
+ "@sentio/protos": "2.18.4-rc.3",
73
+ "@sentio/runtime": "^2.18.4-rc.3"
76
74
  },
77
75
  "peerDependencies": {
78
76
  "tsup": "npm:@sentio/tsup@^6.7.0"
@@ -2,7 +2,7 @@ import { getPriceByType } from '@sentio/sdk/utils'
2
2
  import fetch from 'node-fetch'
3
3
  import { validateAndNormalizeAddress } from '../utils.js'
4
4
  import { SPLITTER } from '../../move/index.js'
5
- import { AptosChainId } from '../../core/chain.js'
5
+ import { AptosChainId } from '@sentio/chain'
6
6
  import { SimpleCoinInfo } from '../../move/ext/move-dex.js'
7
7
 
8
8
  const WHITELISTED_COINS = new Map<string, SimpleCoinInfo>()
@@ -1,4 +1,4 @@
1
- import { AptosChainId } from '../core/chain.js'
1
+ import { AptosChainId } from '@sentio/chain'
2
2
  import { AptosClient } from 'aptos-sdk'
3
3
  import { Labels } from '../core/index.js'
4
4
 
@@ -1,7 +1,7 @@
1
1
  import { ProcessResult, RecordMetaData, StateResult } from '@sentio/protos'
2
2
  import { EventLoggerBinding } from './event-logger.js'
3
3
  import { Meter, Labels } from './meter.js'
4
- import { ChainId } from './chain.js'
4
+ import { ChainId } from '@sentio/chain'
5
5
 
6
6
  export abstract class BaseContext {
7
7
  meter: Meter
@@ -1,4 +1,4 @@
1
- import { ChainId } from './chain.js'
1
+ import { ChainId } from '@sentio/chain'
2
2
 
3
3
  export interface YamlContractConfig {
4
4
  address: string
@@ -11,7 +11,7 @@ import { AddressOrTypeEventFilter, EventsHandler } from './base-processor.js'
11
11
  import { Block } from 'ethers'
12
12
  import { AccountProcessorState } from './account-processor-state.js'
13
13
  import { fixEmptyKey, formatEthData, TypedEvent } from './eth.js'
14
- import { EthChainId } from '../core/chain.js'
14
+ import { EthChainId } from '@sentio/chain'
15
15
  import { ServerError, Status } from 'nice-grpc'
16
16
 
17
17
  const ERC20_INTERFACE = ERC20__factory.createInterface()
@@ -17,7 +17,7 @@ import { ServerError, Status } from 'nice-grpc'
17
17
  import { fixEmptyKey, formatEthData, RichBlock, TypedCallTrace, TypedEvent } from './eth.js'
18
18
  import sha3 from 'js-sha3'
19
19
  import { ListStateStorage } from '@sentio/runtime'
20
- import { EthChainId } from '../core/chain.js'
20
+ import { EthChainId } from '@sentio/chain'
21
21
 
22
22
  export interface AddressOrTypeEventFilter extends DeferredTopicFilter {
23
23
  addressType?: AddressType
@@ -1,4 +1,4 @@
1
- import { EthChainId } from '../core/chain.js'
1
+ import { EthChainId } from '@sentio/chain'
2
2
 
3
3
  export class BindOptions {
4
4
  // Contract address
package/src/eth/binds.ts CHANGED
@@ -4,7 +4,7 @@ import { BaseProcessor } from './base-processor.js'
4
4
 
5
5
  import { BaseContract } from 'ethers'
6
6
  import { MapStateStorage } from '@sentio/runtime'
7
- import { EthChainId } from '../core/chain.js'
7
+ import { EthChainId } from '@sentio/chain'
8
8
 
9
9
  export class ProcessorState extends MapStateStorage<BaseProcessor<any, any>> {
10
10
  static INSTANCE = new ProcessorState()
@@ -11,7 +11,7 @@ import {
11
11
  import { dirname, join, relative } from 'path'
12
12
  import { codeGenIndex, codeGenSentioFile, codeGenTestUtilsFile } from './file.js'
13
13
  import { YamlContractConfig } from '../../core/yaml-contract-config.js'
14
- import { ChainId, EthChainId } from '../../core/chain.js'
14
+ import { ChainId, EthChainId } from '@sentio/chain'
15
15
 
16
16
  export interface SentioEthersConfig extends Config {
17
17
  contractsToGenExample: YamlContractConfig[]
@@ -5,7 +5,7 @@ import { RecordMetaData } from '@sentio/protos'
5
5
  import { Trace } from './eth.js'
6
6
  import { Labels, normalizeLabels } from '../core/index.js'
7
7
  import { BaseContext } from '../core/base-context.js'
8
- import { EthChainId } from '../core/chain.js'
8
+ import { EthChainId } from '@sentio/chain'
9
9
 
10
10
  export abstract class EthContext extends BaseContext {
11
11
  readonly chainId: EthChainId
@@ -21,7 +21,7 @@ import { AccountProcessorState } from './account-processor-state.js'
21
21
  import { ProcessorTemplateProcessorState } from './base-processor-template.js'
22
22
  import { GlobalProcessorState } from './base-processor.js'
23
23
  import { validateAndNormalizeAddress } from './eth.js'
24
- import { EthChainId } from '../core/chain.js'
24
+ import { EthChainId } from '@sentio/chain'
25
25
  import { EthContext } from './context.js'
26
26
  import { TemplateInstanceState } from '../core/template.js'
27
27
 
package/src/eth/index.ts CHANGED
@@ -13,4 +13,4 @@ export { EthPlugin } from './eth-plugin.js'
13
13
 
14
14
  export { EthFetchConfig } from '@sentio/protos'
15
15
 
16
- export { EthChainId } from '../core/chain.js'
16
+ export { EthChainId } from '@sentio/chain'
@@ -2,7 +2,7 @@ import { JsonRpcProvider, Network, Provider } from 'ethers'
2
2
 
3
3
  import PQueue from 'p-queue'
4
4
  import { Endpoints } from '@sentio/runtime'
5
- import { EthChainId } from '../core/chain.js'
5
+ import { EthChainId } from '@sentio/chain'
6
6
 
7
7
  export const DummyProvider = new JsonRpcProvider('', Network.from(1))
8
8
 
package/src/index.ts CHANGED
@@ -4,5 +4,3 @@
4
4
  export * from '@sentio/protos'
5
5
 
6
6
  export * from './core/index.js'
7
-
8
- export * from './core/chain.js'
@@ -1,5 +1,5 @@
1
1
  import { normalizeLabels, Labels, BaseContext, RecordMetaData } from '@sentio/sdk'
2
- import { SolanaChainId } from '../core/chain.js'
2
+ import { SolanaChainId } from '@sentio/chain'
3
3
 
4
4
  export class SolanaContext extends BaseContext {
5
5
  network: SolanaChainId
@@ -1,6 +1,6 @@
1
1
  import { InstructionCoder } from './solana-processor.js'
2
2
  import { Labels } from '../core/index.js'
3
- import { SolanaChainId } from '../core/chain.js'
3
+ import { SolanaChainId } from '@sentio/chain'
4
4
 
5
5
  export class SolanaBindOptions {
6
6
  address: string
@@ -4,7 +4,7 @@ import { Instruction } from '@project-serum/anchor'
4
4
  import { SolanaBindOptions } from './solana-options.js'
5
5
  import { ListStateStorage } from '@sentio/runtime'
6
6
  import { Labels } from '../core/index.js'
7
- import { SolanaChainId } from '../core/chain.js'
7
+ import { SolanaChainId } from '@sentio/chain'
8
8
 
9
9
  type IndexConfigure = {
10
10
  startSlot: bigint
@@ -2,7 +2,7 @@ import { SimpleCoinInfo } from '../../move/ext/index.js'
2
2
  import fetch from 'node-fetch'
3
3
  import { SPLITTER } from '../../move/index.js'
4
4
  import { getPriceByType } from '../../utils/index.js'
5
- import { SuiChainId } from '../../core/chain.js'
5
+ import { SuiChainId } from '@sentio/chain'
6
6
  import { validateAndNormalizeAddress } from '../utils.js'
7
7
  import { getClient, SuiNetwork } from '../network.js'
8
8
  import { CoinMetadata } from '@mysten/sui.js'
@@ -1,4 +1,4 @@
1
- import { SuiChainId } from '../core/chain.js'
1
+ import { SuiChainId } from '@sentio/chain'
2
2
  import { Connection, JsonRpcProvider } from '@mysten/sui.js'
3
3
  import { Endpoints } from '@sentio/runtime'
4
4
  import { ServerError, Status } from 'nice-grpc'
@@ -20,7 +20,7 @@ import { SuiProcessorState } from './sui-processor.js'
20
20
  import { SuiAccountProcessorState } from './sui-object-processor.js'
21
21
  import { validateAndNormalizeAddress } from './utils.js'
22
22
  import { initCoinList } from './ext/coin.js'
23
- import { SuiChainId } from '../core/chain.js'
23
+ import { SuiChainId } from '@sentio/chain'
24
24
  import {
25
25
  SuiAccountProcessorTemplateState,
26
26
  SuiObjectOrAddressProcessorTemplate,
@@ -3,7 +3,7 @@ import { DataBinding, HandlerType, ProcessBindingResponse } from '@sentio/protos
3
3
  import { Trace } from '../eth/eth.js'
4
4
  import { BlockParams, LogParams } from 'ethers/providers'
5
5
  import { Block } from 'ethers'
6
- import { ChainId, EthChainId } from '../core/chain.js'
6
+ import { ChainId, EthChainId } from '@sentio/chain'
7
7
 
8
8
  export class EthFacet {
9
9
  server: TestProcessorServer
@@ -12,7 +12,7 @@ import {
12
12
  } from '@sentio/protos'
13
13
  import { CallContext } from 'nice-grpc-common'
14
14
  import { Endpoints, ProcessorServiceImpl, State } from '@sentio/runtime'
15
- import { CHAIN_MAP } from '../core/chain.js'
15
+ import { CHAIN_MAP } from '@sentio/chain'
16
16
 
17
17
  import { AptosFacet } from './aptos-facet.js'
18
18
  import { SolanaFacet } from './solana-facet.js'
@@ -1,5 +1,5 @@
1
1
  import { Endpoints } from '@sentio/runtime'
2
- import { CHAIN_MAP } from '../core/chain.js'
2
+ import { CHAIN_MAP } from '@sentio/chain'
3
3
 
4
4
  export function loadTestProvidersFromEnv(requiredChainIds: string[] | string): boolean {
5
5
  const found: string[] = []
@@ -4,7 +4,7 @@ import { parse } from 'csv-parse/sync'
4
4
  import { BlockTag } from 'ethers/providers'
5
5
  import url from 'url'
6
6
  import { scaleDown } from '../core/big-decimal.js'
7
- import { EthChainId } from '../core/chain.js'
7
+ import { EthChainId } from '@sentio/chain'
8
8
 
9
9
  type OralceRecord = {
10
10
  Pair: string
@@ -3,7 +3,7 @@ import { createChannel, createClientFactory, Status } from 'nice-grpc'
3
3
  import { prometheusClientMiddleware } from 'nice-grpc-prometheus'
4
4
  import { retryMiddleware, RetryOptions } from 'nice-grpc-client-middleware-retry'
5
5
  import { Endpoints } from '@sentio/runtime'
6
- import { ChainId } from '../core/chain.js'
6
+ import { ChainId } from '@sentio/chain'
7
7
 
8
8
  export function getPriceClient(address?: string) {
9
9
  if (!address) {
@@ -1,205 +0,0 @@
1
- export declare enum EthChainId {
2
- KARDIA = "0",
3
- ETHEREUM = "1",
4
- EXPANSE = "2",
5
- ROPSTEN = "3",
6
- RINKEBY = "4",
7
- GOERLI = "5",
8
- KOTTI = "6",
9
- UBIQ = "8",
10
- OPTIMISM = "10",
11
- SONGBIRD = "19",
12
- ELASTOS = "20",
13
- CRONOS = "25",
14
- RSK = "30",
15
- TELOS = "40",
16
- XDC = "50",
17
- CSC = "52",
18
- ZYX = "55",
19
- BINANCE = "56",
20
- SYSCOIN = "57",
21
- GOCHAIN = "60",
22
- ETHCLASSIC = "61",
23
- MORDOR = "63",
24
- OKEXCHAIN = "66",
25
- HOO = "70",
26
- METER = "82",
27
- TOMOCHAIN = "88",
28
- BINANCE_TEST = "97",
29
- XDAI = "100",
30
- VELAS = "106",
31
- THUNDERCORE = "108",
32
- FUSE = "122",
33
- HECO = "128",
34
- POLYGON = "137",
35
- XDAIARB = "200",
36
- ASTOR = "212",
37
- ENERGYWEB = "246",
38
- FANTOM = "250",
39
- HPB = "269",
40
- BOBA = "288",
41
- KUCOIN = "321",
42
- ZKSYNC_ERA = "324",
43
- SHIDEN = "336",
44
- CRONOS_TESTNET = "338",
45
- THETA = "361",
46
- SX = "416",
47
- CANDLE = "534",
48
- ASTAR = "592",
49
- CALLISTO = "820",
50
- WANCHAIN = "888",
51
- POLYGON_ZKEVM = "1101",
52
- CONFLUX = "1030",
53
- METIS = "1088",
54
- OMCHAIN = "1246",
55
- MOONBEAM = "1284",
56
- MOONRIVER = "1285",
57
- MOONBASE = "1287",
58
- DEV = "2018",
59
- RONIN = "2020",
60
- KAVA = "2222",
61
- EZCHAIN = "2612",
62
- PHI = "4181",
63
- IOTEX = "4689",
64
- XLC = "5050",
65
- NAHMII = "5551",
66
- NMACTEST = "7777",
67
- KLAYTN = "8217",
68
- EVMOS = "9001",
69
- BASE_GOERLI = "84531",
70
- SMARTBCH = "10000",
71
- CRYSTALEUM = "103090",
72
- FUSION = "32659",
73
- ARBITRUM = "42161",
74
- CELO = "42220",
75
- OASIS = "42262",
76
- AVALANCHE = "43114",
77
- GODWOKEN = "71402",
78
- AKROMA = "200625",
79
- POLIS = "333999",
80
- ARBITRUM_GOERLI = "421613",
81
- SEPOLIA = "11155111",
82
- AURORA = "1313161554",
83
- HARMONY = "1666600000",
84
- PALM = "11297108109",
85
- CURIO = "836542336838601"
86
- }
87
- export declare enum AptosChainId {
88
- APTOS_MAINNET = "aptos_mainnet",
89
- APTOS_TESTNET = "aptos_testnet",
90
- APTOS_DEVNET = "aptos_devnet"
91
- }
92
- export declare enum SuiChainId {
93
- SUI_MAINNET = "sui_mainnet",
94
- SUI_TESTNET = "sui_testnet",
95
- SUI_DEVNET = "sui_devnet"
96
- }
97
- export declare enum SolanaChainId {
98
- SOLANA_MAINNET = "sol_mainnet",
99
- SOLANA_DEVNET = "sol_devnet",
100
- SOLANA_TESTNET = "sol_testnet",
101
- SOLANA_PYTH = "sol_pyth"
102
- }
103
- export type ChainId = EthChainId | AptosChainId | SuiChainId | SolanaChainId;
104
- export declare const ChainId: {
105
- SOLANA_MAINNET: SolanaChainId.SOLANA_MAINNET;
106
- SOLANA_DEVNET: SolanaChainId.SOLANA_DEVNET;
107
- SOLANA_TESTNET: SolanaChainId.SOLANA_TESTNET;
108
- SOLANA_PYTH: SolanaChainId.SOLANA_PYTH;
109
- SUI_MAINNET: SuiChainId.SUI_MAINNET;
110
- SUI_TESTNET: SuiChainId.SUI_TESTNET;
111
- SUI_DEVNET: SuiChainId.SUI_DEVNET;
112
- APTOS_MAINNET: AptosChainId.APTOS_MAINNET;
113
- APTOS_TESTNET: AptosChainId.APTOS_TESTNET;
114
- APTOS_DEVNET: AptosChainId.APTOS_DEVNET;
115
- KARDIA: EthChainId.KARDIA;
116
- ETHEREUM: EthChainId.ETHEREUM;
117
- EXPANSE: EthChainId.EXPANSE;
118
- ROPSTEN: EthChainId.ROPSTEN;
119
- RINKEBY: EthChainId.RINKEBY;
120
- GOERLI: EthChainId.GOERLI;
121
- KOTTI: EthChainId.KOTTI;
122
- UBIQ: EthChainId.UBIQ;
123
- OPTIMISM: EthChainId.OPTIMISM;
124
- SONGBIRD: EthChainId.SONGBIRD;
125
- ELASTOS: EthChainId.ELASTOS;
126
- CRONOS: EthChainId.CRONOS;
127
- RSK: EthChainId.RSK;
128
- TELOS: EthChainId.TELOS;
129
- XDC: EthChainId.XDC;
130
- CSC: EthChainId.CSC;
131
- ZYX: EthChainId.ZYX;
132
- BINANCE: EthChainId.BINANCE;
133
- SYSCOIN: EthChainId.SYSCOIN;
134
- GOCHAIN: EthChainId.GOCHAIN;
135
- ETHCLASSIC: EthChainId.ETHCLASSIC;
136
- MORDOR: EthChainId.MORDOR;
137
- OKEXCHAIN: EthChainId.OKEXCHAIN;
138
- HOO: EthChainId.HOO;
139
- METER: EthChainId.METER;
140
- TOMOCHAIN: EthChainId.TOMOCHAIN;
141
- BINANCE_TEST: EthChainId.BINANCE_TEST;
142
- XDAI: EthChainId.XDAI;
143
- VELAS: EthChainId.VELAS;
144
- THUNDERCORE: EthChainId.THUNDERCORE;
145
- FUSE: EthChainId.FUSE;
146
- HECO: EthChainId.HECO;
147
- POLYGON: EthChainId.POLYGON;
148
- XDAIARB: EthChainId.XDAIARB;
149
- ASTOR: EthChainId.ASTOR;
150
- ENERGYWEB: EthChainId.ENERGYWEB;
151
- FANTOM: EthChainId.FANTOM;
152
- HPB: EthChainId.HPB;
153
- BOBA: EthChainId.BOBA;
154
- KUCOIN: EthChainId.KUCOIN;
155
- ZKSYNC_ERA: EthChainId.ZKSYNC_ERA;
156
- SHIDEN: EthChainId.SHIDEN;
157
- CRONOS_TESTNET: EthChainId.CRONOS_TESTNET;
158
- THETA: EthChainId.THETA;
159
- SX: EthChainId.SX;
160
- CANDLE: EthChainId.CANDLE;
161
- ASTAR: EthChainId.ASTAR;
162
- CALLISTO: EthChainId.CALLISTO;
163
- WANCHAIN: EthChainId.WANCHAIN;
164
- POLYGON_ZKEVM: EthChainId.POLYGON_ZKEVM;
165
- CONFLUX: EthChainId.CONFLUX;
166
- METIS: EthChainId.METIS;
167
- OMCHAIN: EthChainId.OMCHAIN;
168
- MOONBEAM: EthChainId.MOONBEAM;
169
- MOONRIVER: EthChainId.MOONRIVER;
170
- MOONBASE: EthChainId.MOONBASE;
171
- DEV: EthChainId.DEV;
172
- RONIN: EthChainId.RONIN;
173
- KAVA: EthChainId.KAVA;
174
- EZCHAIN: EthChainId.EZCHAIN;
175
- PHI: EthChainId.PHI;
176
- IOTEX: EthChainId.IOTEX;
177
- XLC: EthChainId.XLC;
178
- NAHMII: EthChainId.NAHMII;
179
- NMACTEST: EthChainId.NMACTEST;
180
- KLAYTN: EthChainId.KLAYTN;
181
- EVMOS: EthChainId.EVMOS;
182
- BASE_GOERLI: EthChainId.BASE_GOERLI;
183
- SMARTBCH: EthChainId.SMARTBCH;
184
- CRYSTALEUM: EthChainId.CRYSTALEUM;
185
- FUSION: EthChainId.FUSION;
186
- ARBITRUM: EthChainId.ARBITRUM;
187
- CELO: EthChainId.CELO;
188
- OASIS: EthChainId.OASIS;
189
- AVALANCHE: EthChainId.AVALANCHE;
190
- GODWOKEN: EthChainId.GODWOKEN;
191
- AKROMA: EthChainId.AKROMA;
192
- POLIS: EthChainId.POLIS;
193
- ARBITRUM_GOERLI: EthChainId.ARBITRUM_GOERLI;
194
- SEPOLIA: EthChainId.SEPOLIA;
195
- AURORA: EthChainId.AURORA;
196
- HARMONY: EthChainId.HARMONY;
197
- PALM: EthChainId.PALM;
198
- CURIO: EthChainId.CURIO;
199
- };
200
- export declare const CHAIN_MAP: Record<string, string>;
201
- export declare function getChainName(chainId: string | number | null | undefined): string;
202
- export declare function getChainType(chainId?: string | number): string;
203
- export declare function getChainScanUrl(chainId?: string | number, hash?: string, subtype?: 'block' | 'address' | 'transaction'): string | undefined;
204
- export declare function chainInitialLabel(chainType: string): "Initial start version" | "Initial start checkpoint" | "Initial start block number";
205
- export declare function chainBlockLabel(chainType: string): "Version" | "Checkpoint" | "Block number";