@sentio/cli 2.7.6-rc.1 → 2.8.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/abi.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import { ChainId } from './chain.js';
1
2
  export declare const ETH_API_URL_MAP: Record<string, string>;
2
- export declare function getABI(chain: string, address: string, name: string | undefined): Promise<{
3
+ export declare function getABI(chain: ChainId, address: string, name: string | undefined): Promise<{
3
4
  name?: string;
4
5
  abi: object | string;
5
6
  }>;
package/lib/abi.js CHANGED
@@ -1,39 +1,38 @@
1
1
  import { AptosClient } from 'aptos-sdk';
2
2
  import { JsonRpcProvider, Connection } from '@mysten/sui.js';
3
- import { CHAIN_IDS } from './chain.js';
4
3
  import chalk from 'chalk';
5
4
  import process from 'process';
6
5
  import path from 'path';
7
6
  import fs from 'fs-extra';
8
7
  import fetch from 'node-fetch';
8
+ import { AptosChainId, EthChainId, SuiChainId } from './chain.js';
9
9
  export const ETH_API_URL_MAP = {};
10
- ETH_API_URL_MAP[CHAIN_IDS.ETHEREUM] = 'https://api.etherscan.io';
11
- ETH_API_URL_MAP[CHAIN_IDS.GOERLI] = 'https://api-goerli.etherscan.io';
12
- ETH_API_URL_MAP[CHAIN_IDS.BINANCE] = 'https://api.bscscan.com';
13
- ETH_API_URL_MAP[CHAIN_IDS.POLYGON] = 'https://api.polygonscan.com';
14
- ETH_API_URL_MAP[CHAIN_IDS.ARBITRUM] = 'https://api.arbiscan.io';
15
- ETH_API_URL_MAP[CHAIN_IDS.OPTIMISM] = 'https://api-optimistic.etherscan.io';
10
+ ETH_API_URL_MAP[EthChainId.ETHEREUM] = 'https://api.etherscan.io';
11
+ ETH_API_URL_MAP[EthChainId.GOERLI] = 'https://api-goerli.etherscan.io';
12
+ ETH_API_URL_MAP[EthChainId.BINANCE] = 'https://api.bscscan.com';
13
+ ETH_API_URL_MAP[EthChainId.POLYGON] = 'https://api.polygonscan.com';
14
+ ETH_API_URL_MAP[EthChainId.ARBITRUM] = 'https://api.arbiscan.io';
15
+ ETH_API_URL_MAP[EthChainId.OPTIMISM] = 'https://api-optimistic.etherscan.io';
16
16
  // ETH_API_URL_MAP[CHAIN_IDS.BASE_GOERLI] = 'https://api-goerli.basescan.org' // didn't see any verified contract
17
- ETH_API_URL_MAP[CHAIN_IDS.AVALANCHE] = 'https://api.snowtrace.io';
18
- ETH_API_URL_MAP[CHAIN_IDS.CRONOS] = 'https://api.cronoscan.com';
19
- ETH_API_URL_MAP[CHAIN_IDS.MOONBEAM] = 'https://api-moonbeam.moonscan.io';
20
- ETH_API_URL_MAP[CHAIN_IDS.FANTOM] = 'https://api.ftmscan.com';
17
+ ETH_API_URL_MAP[EthChainId.AVALANCHE] = 'https://api.snowtrace.io';
18
+ ETH_API_URL_MAP[EthChainId.CRONOS] = 'https://api.cronoscan.com';
19
+ ETH_API_URL_MAP[EthChainId.MOONBEAM] = 'https://api-moonbeam.moonscan.io';
20
+ ETH_API_URL_MAP[EthChainId.FANTOM] = 'https://api.ftmscan.com';
21
21
  export async function getABI(chain, address, name) {
22
22
  let ethApi;
23
23
  let aptosClient;
24
24
  let suiClient;
25
25
  switch (chain) {
26
- case CHAIN_IDS.APTOS_MAINNET:
26
+ case AptosChainId.APTOS_MAINNET:
27
27
  aptosClient = new AptosClient('https://mainnet.aptoslabs.com/');
28
28
  break;
29
- case CHAIN_IDS.APTOS_TESTNET:
29
+ case AptosChainId.APTOS_TESTNET:
30
30
  aptosClient = new AptosClient('https://testnet.aptoslabs.com/');
31
31
  break;
32
- case CHAIN_IDS.SUI_MAINNET:
33
- throw Error('SUI mainnet is not support yet, try sui/testnet');
34
- // suiClient = new JsonRpcProvider('https://fullnode.mainnet.sui.io/')
35
- // break
36
- case CHAIN_IDS.SUI_TESTNET:
32
+ case SuiChainId.SUI_MAINNET:
33
+ suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.mainnet.sui.io/' }));
34
+ break;
35
+ case SuiChainId.SUI_TESTNET:
37
36
  suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.testnet.sui.io/' }));
38
37
  break;
39
38
  default:
@@ -105,16 +104,16 @@ export async function getABI(chain, address, name) {
105
104
  export function getABIFilePath(chain, name) {
106
105
  let subpath;
107
106
  switch (chain) {
108
- case CHAIN_IDS.APTOS_MAINNET:
107
+ case AptosChainId.APTOS_MAINNET:
109
108
  subpath = 'aptos';
110
109
  break;
111
- case CHAIN_IDS.APTOS_TESTNET:
110
+ case AptosChainId.APTOS_TESTNET:
112
111
  subpath = 'aptos/testnet';
113
112
  break;
114
- case CHAIN_IDS.SUI_MAINNET:
113
+ case SuiChainId.SUI_MAINNET:
115
114
  subpath = 'sui';
116
115
  break;
117
- case CHAIN_IDS.SUI_TESTNET:
116
+ case SuiChainId.SUI_TESTNET:
118
117
  subpath = 'sui/testnet';
119
118
  break;
120
119
  default:
package/lib/abi.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"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","sourcesContent":["import { AptosClient } from 'aptos-sdk'\nimport { JsonRpcProvider, Connection } from '@mysten/sui.js'\nimport { CHAIN_IDS } from './chain.js'\nimport chalk from 'chalk'\nimport process from 'process'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport fetch from 'node-fetch'\n\nexport const ETH_API_URL_MAP: Record<string, string> = {}\n\nETH_API_URL_MAP[CHAIN_IDS.ETHEREUM] = 'https://api.etherscan.io'\nETH_API_URL_MAP[CHAIN_IDS.GOERLI] = 'https://api-goerli.etherscan.io'\nETH_API_URL_MAP[CHAIN_IDS.BINANCE] = 'https://api.bscscan.com'\nETH_API_URL_MAP[CHAIN_IDS.POLYGON] = 'https://api.polygonscan.com'\nETH_API_URL_MAP[CHAIN_IDS.ARBITRUM] = 'https://api.arbiscan.io'\nETH_API_URL_MAP[CHAIN_IDS.OPTIMISM] = 'https://api-optimistic.etherscan.io'\n// ETH_API_URL_MAP[CHAIN_IDS.BASE_GOERLI] = 'https://api-goerli.basescan.org' // didn't see any verified contract\n\nETH_API_URL_MAP[CHAIN_IDS.AVALANCHE] = 'https://api.snowtrace.io'\nETH_API_URL_MAP[CHAIN_IDS.CRONOS] = 'https://api.cronoscan.com'\nETH_API_URL_MAP[CHAIN_IDS.MOONBEAM] = 'https://api-moonbeam.moonscan.io'\nETH_API_URL_MAP[CHAIN_IDS.FANTOM] = 'https://api.ftmscan.com'\n\nexport async function getABI(\n chain: string,\n address: string,\n name: string | undefined\n): Promise<{ name?: string; abi: object | string }> {\n let ethApi\n let aptosClient: AptosClient | undefined\n let suiClient: JsonRpcProvider | undefined\n\n switch (chain) {\n case CHAIN_IDS.APTOS_MAINNET:\n aptosClient = new AptosClient('https://mainnet.aptoslabs.com/')\n break\n case CHAIN_IDS.APTOS_TESTNET:\n aptosClient = new AptosClient('https://testnet.aptoslabs.com/')\n break\n case CHAIN_IDS.SUI_MAINNET:\n throw Error('SUI mainnet is not support yet, try sui/testnet')\n // suiClient = new JsonRpcProvider('https://fullnode.mainnet.sui.io/')\n // break\n case CHAIN_IDS.SUI_TESTNET:\n suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.testnet.sui.io/' }))\n break\n default:\n ethApi = ETH_API_URL_MAP[chain]\n if (!ethApi) {\n console.error(chalk.red(`chain ${chain} not supported for direct add, please download the ABI manually`))\n process.exit(1)\n }\n }\n\n const baseErrMsg = chalk.red(\n `Failed to automatic download contract ${address} from ${chain}, please manually download abi and put it into abis/eth directory`\n )\n\n if (aptosClient) {\n try {\n return {\n abi: await aptosClient.getAccountModules(address),\n name,\n }\n } catch (e) {\n console.error(baseErrMsg, e)\n process.exit(1)\n }\n }\n if (suiClient) {\n try {\n return {\n abi: await suiClient.getNormalizedMoveModulesByPackage({ package: address }),\n name,\n }\n } catch (e) {\n console.error(baseErrMsg, e)\n process.exit(1)\n }\n }\n\n try {\n const apiKey = process.env['ETHERSCAN_API_KEY_' + chain]\n if (apiKey) {\n ethApi = `${ethApi}/api?apikey=${apiKey}&`\n } else {\n ethApi = `${ethApi}/api?`\n }\n\n let resp = (await (await fetch(`${ethApi}module=contract&action=getabi&address=${address}`)).json()) as any\n if (resp.status !== '1') {\n throw Error(resp.message)\n }\n const abi = resp.result\n\n if (!name) {\n await new Promise((resolve) => setTimeout(resolve, 5000))\n resp = (await (await fetch(`${ethApi}module=contract&action=getsourcecode&address=${address}`)).json()) as any\n if (resp.status !== '1') {\n throw Error(resp.message)\n }\n const contractName = resp.result[0].ContractName\n if (contractName) {\n name = contractName\n }\n }\n return {\n name,\n abi,\n }\n } catch (e) {\n console.error(baseErrMsg, e)\n process.exit(1)\n }\n}\n\nexport function getABIFilePath(chain: string, name: string): string {\n let subpath\n switch (chain) {\n case CHAIN_IDS.APTOS_MAINNET:\n subpath = 'aptos'\n break\n case CHAIN_IDS.APTOS_TESTNET:\n subpath = 'aptos/testnet'\n break\n case CHAIN_IDS.SUI_MAINNET:\n subpath = 'sui'\n break\n case CHAIN_IDS.SUI_TESTNET:\n subpath = 'sui/testnet'\n break\n default:\n subpath = 'eth'\n }\n\n return path.join('abis', subpath, name + '.json')\n}\n\nexport function writeABIFile(obj: string | object, output: string) {\n if (typeof obj === 'string') {\n obj = JSON.parse(obj)\n }\n const data = JSON.stringify(obj, null, 2)\n fs.mkdirSync(path.dirname(output), { recursive: true })\n fs.writeFileSync(output, data)\n console.log(chalk.green('ABI has been downloaded to', output))\n}\n"]}
1
+ {"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"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","sourcesContent":["import { AptosClient } from 'aptos-sdk'\nimport { JsonRpcProvider, Connection } from '@mysten/sui.js'\nimport chalk from 'chalk'\nimport process from 'process'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport fetch from 'node-fetch'\nimport { AptosChainId, ChainId, EthChainId, SuiChainId } from './chain.js'\n\nexport const ETH_API_URL_MAP: Record<string, string> = {}\n\nETH_API_URL_MAP[EthChainId.ETHEREUM] = 'https://api.etherscan.io'\nETH_API_URL_MAP[EthChainId.GOERLI] = 'https://api-goerli.etherscan.io'\nETH_API_URL_MAP[EthChainId.BINANCE] = 'https://api.bscscan.com'\nETH_API_URL_MAP[EthChainId.POLYGON] = 'https://api.polygonscan.com'\nETH_API_URL_MAP[EthChainId.ARBITRUM] = 'https://api.arbiscan.io'\nETH_API_URL_MAP[EthChainId.OPTIMISM] = 'https://api-optimistic.etherscan.io'\n// ETH_API_URL_MAP[CHAIN_IDS.BASE_GOERLI] = 'https://api-goerli.basescan.org' // didn't see any verified contract\n\nETH_API_URL_MAP[EthChainId.AVALANCHE] = 'https://api.snowtrace.io'\nETH_API_URL_MAP[EthChainId.CRONOS] = 'https://api.cronoscan.com'\nETH_API_URL_MAP[EthChainId.MOONBEAM] = 'https://api-moonbeam.moonscan.io'\nETH_API_URL_MAP[EthChainId.FANTOM] = 'https://api.ftmscan.com'\n\nexport async function getABI(\n chain: ChainId,\n address: string,\n name: string | undefined\n): Promise<{ name?: string; abi: object | string }> {\n let ethApi\n let aptosClient: AptosClient | undefined\n let suiClient: JsonRpcProvider | undefined\n\n switch (chain) {\n case AptosChainId.APTOS_MAINNET:\n aptosClient = new AptosClient('https://mainnet.aptoslabs.com/')\n break\n case AptosChainId.APTOS_TESTNET:\n aptosClient = new AptosClient('https://testnet.aptoslabs.com/')\n break\n case SuiChainId.SUI_MAINNET:\n suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.mainnet.sui.io/' }))\n break\n case SuiChainId.SUI_TESTNET:\n suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.testnet.sui.io/' }))\n break\n default:\n ethApi = ETH_API_URL_MAP[chain]\n if (!ethApi) {\n console.error(chalk.red(`chain ${chain} not supported for direct add, please download the ABI manually`))\n process.exit(1)\n }\n }\n\n const baseErrMsg = chalk.red(\n `Failed to automatic download contract ${address} from ${chain}, please manually download abi and put it into abis/eth directory`\n )\n\n if (aptosClient) {\n try {\n return {\n abi: await aptosClient.getAccountModules(address),\n name,\n }\n } catch (e) {\n console.error(baseErrMsg, e)\n process.exit(1)\n }\n }\n if (suiClient) {\n try {\n return {\n abi: await suiClient.getNormalizedMoveModulesByPackage({ package: address }),\n name,\n }\n } catch (e) {\n console.error(baseErrMsg, e)\n process.exit(1)\n }\n }\n\n try {\n const apiKey = process.env['ETHERSCAN_API_KEY_' + chain]\n if (apiKey) {\n ethApi = `${ethApi}/api?apikey=${apiKey}&`\n } else {\n ethApi = `${ethApi}/api?`\n }\n\n let resp = (await (await fetch(`${ethApi}module=contract&action=getabi&address=${address}`)).json()) as any\n if (resp.status !== '1') {\n throw Error(resp.message)\n }\n const abi = resp.result\n\n if (!name) {\n await new Promise((resolve) => setTimeout(resolve, 5000))\n resp = (await (await fetch(`${ethApi}module=contract&action=getsourcecode&address=${address}`)).json()) as any\n if (resp.status !== '1') {\n throw Error(resp.message)\n }\n const contractName = resp.result[0].ContractName\n if (contractName) {\n name = contractName\n }\n }\n return {\n name,\n abi,\n }\n } catch (e) {\n console.error(baseErrMsg, e)\n process.exit(1)\n }\n}\n\nexport function getABIFilePath(chain: string, name: string): string {\n let subpath\n switch (chain) {\n case AptosChainId.APTOS_MAINNET:\n subpath = 'aptos'\n break\n case AptosChainId.APTOS_TESTNET:\n subpath = 'aptos/testnet'\n break\n case SuiChainId.SUI_MAINNET:\n subpath = 'sui'\n break\n case SuiChainId.SUI_TESTNET:\n subpath = 'sui/testnet'\n break\n default:\n subpath = 'eth'\n }\n\n return path.join('abis', subpath, name + '.json')\n}\n\nexport function writeABIFile(obj: string | object, output: string) {\n if (typeof obj === 'string') {\n obj = JSON.parse(obj)\n }\n const data = JSON.stringify(obj, null, 2)\n fs.mkdirSync(path.dirname(output), { recursive: true })\n fs.writeFileSync(output, data)\n console.log(chalk.green('ABI has been downloaded to', output))\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"abi.test.js","sourceRoot":"","sources":["../src/abi.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACjC,OAAM;KACP;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAEvB,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACnG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACrG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACpG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACnG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACzB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACpG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACnG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,SAAS,CAAC,WAAW,EACrB,oEAAoE,EACpE,SAAS,CACV,CAAA;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { getABI } from './abi.js'\nimport { CHAIN_IDS } from './chain.js'\nimport { expect } from 'chai'\nimport { jest } from '@jest/globals'\n\ndescribe('Test ABI get', () => {\n if (process.env.CI) {\n test.todo(`don't run test in ci`)\n return\n }\n jest.setTimeout(100000)\n\n test('cronos', async () => {\n const abi = await getABI(CHAIN_IDS.CRONOS, '0xc21223249CA28397B4B6541dfFaEcC539BfF0c59', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('optimism', async () => {\n const abi = await getABI(CHAIN_IDS.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('bsc', async () => {\n const abi = await getABI(CHAIN_IDS.BINANCE, '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('goerli', async () => {\n const abi = await getABI(CHAIN_IDS.GOERLI, '0xd864C4a1B739B7e0bb9e2ae495583Eb5Da0d37F5', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('polygon', async () => {\n const abi = await getABI(CHAIN_IDS.POLYGON, '0x7FFB3d637014488b63fb9858E279385685AFc1e2', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('fantom', async () => {\n const abi = await getABI(CHAIN_IDS.FANTOM, '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('sui_test', async () => {\n const abi = await getABI(\n CHAIN_IDS.SUI_TESTNET,\n '0xebaa2ad3eacc230f309cd933958cc52684df0a41ae7ac214d186b80f830867d2',\n undefined\n )\n expect(abi.abi !== undefined).eq(true)\n })\n})\n"]}
1
+ {"version":3,"file":"abi.test.js","sourceRoot":"","sources":["../src/abi.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACjC,OAAM;KACP;IACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;IAEvB,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACpG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACtG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QACrB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACrG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACpG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACzB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACrG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,4CAA4C,EAAE,SAAS,CAAC,CAAA;QACpG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;QAC1B,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,UAAU,CAAC,WAAW,EACtB,oEAAoE,EACpE,SAAS,CACV,CAAA;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import { getABI } from './abi.js'\nimport { EthChainId, SuiChainId } from './chain.js'\nimport { expect } from 'chai'\nimport { jest } from '@jest/globals'\n\ndescribe('Test ABI get', () => {\n if (process.env.CI) {\n test.todo(`don't run test in ci`)\n return\n }\n jest.setTimeout(100000)\n\n test('cronos', async () => {\n const abi = await getABI(EthChainId.CRONOS, '0xc21223249CA28397B4B6541dfFaEcC539BfF0c59', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('optimism', async () => {\n const abi = await getABI(EthChainId.OPTIMISM, '0x7F5c764cBc14f9669B88837ca1490cCa17c31607', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('bsc', async () => {\n const abi = await getABI(EthChainId.BINANCE, '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('goerli', async () => {\n const abi = await getABI(EthChainId.GOERLI, '0xd864C4a1B739B7e0bb9e2ae495583Eb5Da0d37F5', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('polygon', async () => {\n const abi = await getABI(EthChainId.POLYGON, '0x7FFB3d637014488b63fb9858E279385685AFc1e2', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('fantom', async () => {\n const abi = await getABI(EthChainId.FANTOM, '0x04068DA6C83AFCFA0e13ba15A6696662335D5B75', undefined)\n expect(abi.abi !== undefined).eq(true)\n })\n\n test('sui_test', async () => {\n const abi = await getABI(\n SuiChainId.SUI_TESTNET,\n '0xebaa2ad3eacc230f309cd933958cc52684df0a41ae7ac214d186b80f830867d2',\n undefined\n )\n expect(abi.abi !== undefined).eq(true)\n })\n})\n"]}
package/lib/chain.d.ts CHANGED
@@ -1,96 +1,197 @@
1
- export declare const CHAIN_IDS: {
2
- KARDIA: string;
3
- ETHEREUM: string;
4
- EXPANSE: string;
5
- ROPSTEN: string;
6
- RINKEBY: string;
7
- GOERLI: string;
8
- KOTTI: string;
9
- UBIQ: string;
10
- OPTIMISM: string;
11
- SONGBIRD: string;
12
- ELASTOS: string;
13
- CRONOS: string;
14
- RSK: string;
15
- TELOS: string;
16
- XDC: string;
17
- CSC: string;
18
- ZYX: string;
19
- BINANCE: string;
20
- SYSCOIN: string;
21
- GOCHAIN: string;
22
- ETHCLASSIC: string;
23
- MORDOR: string;
24
- OKEXCHAIN: string;
25
- HOO: string;
26
- METER: string;
27
- TOMOCHAIN: string;
28
- BINANCE_TEST: string;
29
- XDAI: string;
30
- VELAS: string;
31
- THUNDERCORE: string;
32
- FUSE: string;
33
- HECO: string;
34
- POLYGON: string;
35
- XDAIARB: string;
36
- ASTOR: string;
37
- ENERGYWEB: string;
38
- FANTOM: string;
39
- HPB: string;
40
- BOBA: string;
41
- KUCOIN: string;
42
- ZKSYNC_ERA: string;
43
- SHIDEN: string;
44
- THETA: string;
45
- SX: string;
46
- CANDLE: string;
47
- ASTAR: string;
48
- CALLISTO: string;
49
- WANCHAIN: string;
50
- POLYGON_ZKEVM: string;
51
- METIS: string;
52
- OMCHAIN: string;
53
- MOONBEAM: string;
54
- MOONRIVER: string;
55
- MOONBASE: string;
56
- DEV: string;
57
- RONIN: string;
58
- KAVA: string;
59
- EZCHAIN: string;
60
- PHI: string;
61
- IOTEX: string;
62
- XLC: string;
63
- NAHMII: string;
64
- NMACTEST: string;
65
- KLAYTN: string;
66
- EVMOS: string;
67
- BASE_GOERLI: string;
68
- SMARTBCH: string;
69
- CRYSTALEUM: string;
70
- FUSION: string;
71
- ARBITRUM: string;
72
- CELO: string;
73
- OASIS: string;
74
- AVALANCHE: string;
75
- GODWOKEN: string;
76
- AKROMA: string;
77
- POLIS: string;
78
- ARBITRUM_GOERLI: string;
79
- SEPOLIA: string;
80
- AURORA: string;
81
- HARMONY: string;
82
- PALM: string;
83
- CURIO: string;
84
- SOLANA_MAINNET: string;
85
- SOLANA_DEVNET: string;
86
- SOLANA_TESTNET: string;
87
- SOLANA_PYTH: string;
88
- SUI_MAINNET: string;
89
- SUI_TESTNET: string;
90
- SUI_DEVNET: string;
91
- APTOS_MAINNET: string;
92
- APTOS_TESTNET: string;
93
- APTOS_DEVNET: string;
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
+ THETA = "361",
45
+ SX = "416",
46
+ CANDLE = "534",
47
+ ASTAR = "592",
48
+ CALLISTO = "820",
49
+ WANCHAIN = "888",
50
+ POLYGON_ZKEVM = "1101",
51
+ METIS = "1088",
52
+ OMCHAIN = "1246",
53
+ MOONBEAM = "1284",
54
+ MOONRIVER = "1285",
55
+ MOONBASE = "1287",
56
+ DEV = "2018",
57
+ RONIN = "2020",
58
+ KAVA = "2222",
59
+ EZCHAIN = "2612",
60
+ PHI = "4181",
61
+ IOTEX = "4689",
62
+ XLC = "5050",
63
+ NAHMII = "5551",
64
+ NMACTEST = "7777",
65
+ KLAYTN = "8217",
66
+ EVMOS = "9001",
67
+ BASE_GOERLI = "84531",
68
+ SMARTBCH = "10000",
69
+ CRYSTALEUM = "103090",
70
+ FUSION = "32659",
71
+ ARBITRUM = "42161",
72
+ CELO = "42220",
73
+ OASIS = "42262",
74
+ AVALANCHE = "43114",
75
+ GODWOKEN = "71402",
76
+ AKROMA = "200625",
77
+ POLIS = "333999",
78
+ ARBITRUM_GOERLI = "421613",
79
+ SEPOLIA = "11155111",
80
+ AURORA = "1313161554",
81
+ HARMONY = "1666600000",
82
+ PALM = "11297108109",
83
+ CURIO = "836542336838601"
84
+ }
85
+ export declare enum AptosChainId {
86
+ APTOS_MAINNET = "aptos_mainnet",
87
+ APTOS_TESTNET = "aptos_testnet",
88
+ APTOS_DEVNET = "aptos_devnet"
89
+ }
90
+ export declare enum SuiChainId {
91
+ SUI_MAINNET = "sui_mainnet",
92
+ SUI_TESTNET = "sui_testnet",
93
+ SUI_DEVNET = "sui_devnet"
94
+ }
95
+ export declare enum SolanaChainId {
96
+ SOLANA_MAINNET = "sol_mainnet",
97
+ SOLANA_DEVNET = "sol_devnet",
98
+ SOLANA_TESTNET = "sol_testnet",
99
+ SOLANA_PYTH = "sol_pyth"
100
+ }
101
+ export type ChainId = EthChainId | AptosChainId | SuiChainId | SolanaChainId;
102
+ export declare const ChainId: {
103
+ SOLANA_MAINNET: SolanaChainId.SOLANA_MAINNET;
104
+ SOLANA_DEVNET: SolanaChainId.SOLANA_DEVNET;
105
+ SOLANA_TESTNET: SolanaChainId.SOLANA_TESTNET;
106
+ SOLANA_PYTH: SolanaChainId.SOLANA_PYTH;
107
+ SUI_MAINNET: SuiChainId.SUI_MAINNET;
108
+ SUI_TESTNET: SuiChainId.SUI_TESTNET;
109
+ SUI_DEVNET: SuiChainId.SUI_DEVNET;
110
+ APTOS_MAINNET: AptosChainId.APTOS_MAINNET;
111
+ APTOS_TESTNET: AptosChainId.APTOS_TESTNET;
112
+ APTOS_DEVNET: AptosChainId.APTOS_DEVNET;
113
+ KARDIA: EthChainId.KARDIA;
114
+ ETHEREUM: EthChainId.ETHEREUM;
115
+ EXPANSE: EthChainId.EXPANSE;
116
+ ROPSTEN: EthChainId.ROPSTEN;
117
+ RINKEBY: EthChainId.RINKEBY;
118
+ GOERLI: EthChainId.GOERLI;
119
+ KOTTI: EthChainId.KOTTI;
120
+ UBIQ: EthChainId.UBIQ;
121
+ OPTIMISM: EthChainId.OPTIMISM;
122
+ SONGBIRD: EthChainId.SONGBIRD;
123
+ ELASTOS: EthChainId.ELASTOS;
124
+ CRONOS: EthChainId.CRONOS;
125
+ RSK: EthChainId.RSK;
126
+ TELOS: EthChainId.TELOS;
127
+ XDC: EthChainId.XDC;
128
+ CSC: EthChainId.CSC;
129
+ ZYX: EthChainId.ZYX;
130
+ BINANCE: EthChainId.BINANCE;
131
+ SYSCOIN: EthChainId.SYSCOIN;
132
+ GOCHAIN: EthChainId.GOCHAIN;
133
+ ETHCLASSIC: EthChainId.ETHCLASSIC;
134
+ MORDOR: EthChainId.MORDOR;
135
+ OKEXCHAIN: EthChainId.OKEXCHAIN;
136
+ HOO: EthChainId.HOO;
137
+ METER: EthChainId.METER;
138
+ TOMOCHAIN: EthChainId.TOMOCHAIN;
139
+ BINANCE_TEST: EthChainId.BINANCE_TEST;
140
+ XDAI: EthChainId.XDAI;
141
+ VELAS: EthChainId.VELAS;
142
+ THUNDERCORE: EthChainId.THUNDERCORE;
143
+ FUSE: EthChainId.FUSE;
144
+ HECO: EthChainId.HECO;
145
+ POLYGON: EthChainId.POLYGON;
146
+ XDAIARB: EthChainId.XDAIARB;
147
+ ASTOR: EthChainId.ASTOR;
148
+ ENERGYWEB: EthChainId.ENERGYWEB;
149
+ FANTOM: EthChainId.FANTOM;
150
+ HPB: EthChainId.HPB;
151
+ BOBA: EthChainId.BOBA;
152
+ KUCOIN: EthChainId.KUCOIN;
153
+ ZKSYNC_ERA: EthChainId.ZKSYNC_ERA;
154
+ SHIDEN: EthChainId.SHIDEN;
155
+ THETA: EthChainId.THETA;
156
+ SX: EthChainId.SX;
157
+ CANDLE: EthChainId.CANDLE;
158
+ ASTAR: EthChainId.ASTAR;
159
+ CALLISTO: EthChainId.CALLISTO;
160
+ WANCHAIN: EthChainId.WANCHAIN;
161
+ POLYGON_ZKEVM: EthChainId.POLYGON_ZKEVM;
162
+ METIS: EthChainId.METIS;
163
+ OMCHAIN: EthChainId.OMCHAIN;
164
+ MOONBEAM: EthChainId.MOONBEAM;
165
+ MOONRIVER: EthChainId.MOONRIVER;
166
+ MOONBASE: EthChainId.MOONBASE;
167
+ DEV: EthChainId.DEV;
168
+ RONIN: EthChainId.RONIN;
169
+ KAVA: EthChainId.KAVA;
170
+ EZCHAIN: EthChainId.EZCHAIN;
171
+ PHI: EthChainId.PHI;
172
+ IOTEX: EthChainId.IOTEX;
173
+ XLC: EthChainId.XLC;
174
+ NAHMII: EthChainId.NAHMII;
175
+ NMACTEST: EthChainId.NMACTEST;
176
+ KLAYTN: EthChainId.KLAYTN;
177
+ EVMOS: EthChainId.EVMOS;
178
+ BASE_GOERLI: EthChainId.BASE_GOERLI;
179
+ SMARTBCH: EthChainId.SMARTBCH;
180
+ CRYSTALEUM: EthChainId.CRYSTALEUM;
181
+ FUSION: EthChainId.FUSION;
182
+ ARBITRUM: EthChainId.ARBITRUM;
183
+ CELO: EthChainId.CELO;
184
+ OASIS: EthChainId.OASIS;
185
+ AVALANCHE: EthChainId.AVALANCHE;
186
+ GODWOKEN: EthChainId.GODWOKEN;
187
+ AKROMA: EthChainId.AKROMA;
188
+ POLIS: EthChainId.POLIS;
189
+ ARBITRUM_GOERLI: EthChainId.ARBITRUM_GOERLI;
190
+ SEPOLIA: EthChainId.SEPOLIA;
191
+ AURORA: EthChainId.AURORA;
192
+ HARMONY: EthChainId.HARMONY;
193
+ PALM: EthChainId.PALM;
194
+ CURIO: EthChainId.CURIO;
94
195
  };
95
196
  export declare const CHAIN_MAP: Record<string, string>;
96
197
  export declare function getChainName(chainId: string | number | null | undefined): string;
package/lib/chain.js CHANGED
@@ -1,105 +1,121 @@
1
1
  // copy from https://github.com/DefiLlama/chainlist/blob/main/constants/chainIds.js
2
2
  // and https://besu.hyperledger.org/en/stable/Concepts/NetworkID-And-ChainID/
3
- export const CHAIN_IDS = {
4
- KARDIA: '0',
5
- ETHEREUM: '1',
6
- EXPANSE: '2',
7
- ROPSTEN: '3',
8
- RINKEBY: '4',
9
- GOERLI: '5',
10
- KOTTI: '6',
11
- UBIQ: '8',
12
- OPTIMISM: '10',
13
- SONGBIRD: '19',
14
- ELASTOS: '20',
15
- CRONOS: '25',
16
- RSK: '30',
17
- TELOS: '40',
18
- XDC: '50',
19
- CSC: '52',
20
- ZYX: '55',
21
- BINANCE: '56',
22
- SYSCOIN: '57',
23
- GOCHAIN: '60',
24
- ETHCLASSIC: '61',
25
- MORDOR: '63',
26
- OKEXCHAIN: '66',
27
- HOO: '70',
28
- METER: '82',
29
- TOMOCHAIN: '88',
30
- BINANCE_TEST: '97',
31
- XDAI: '100',
32
- VELAS: '106',
33
- THUNDERCORE: '108',
34
- FUSE: '122',
35
- HECO: '128',
36
- POLYGON: '137',
37
- XDAIARB: '200',
38
- ASTOR: '212',
39
- ENERGYWEB: '246',
40
- FANTOM: '250',
41
- HPB: '269',
42
- BOBA: '288',
43
- KUCOIN: '321',
44
- ZKSYNC_ERA: '324',
45
- SHIDEN: '336',
46
- THETA: '361',
47
- SX: '416',
48
- CANDLE: '534',
49
- ASTAR: '592',
50
- CALLISTO: '820',
51
- WANCHAIN: '888',
52
- POLYGON_ZKEVM: '1101',
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
- SOLANA_MAINNET: 'sol_mainnet',
87
- SOLANA_DEVNET: 'sol_devnet',
88
- SOLANA_TESTNET: 'sol_testnet',
89
- SOLANA_PYTH: 'sol_pyth',
90
- SUI_MAINNET: 'sui_mainnet',
91
- SUI_TESTNET: 'sui_testnet',
92
- SUI_DEVNET: 'sui_devnet',
93
- APTOS_MAINNET: 'aptos_mainnet',
94
- APTOS_TESTNET: 'aptos_testnet',
95
- APTOS_DEVNET: 'aptos_devnet',
3
+ export var EthChainId;
4
+ (function (EthChainId) {
5
+ EthChainId["KARDIA"] = "0";
6
+ EthChainId["ETHEREUM"] = "1";
7
+ EthChainId["EXPANSE"] = "2";
8
+ EthChainId["ROPSTEN"] = "3";
9
+ EthChainId["RINKEBY"] = "4";
10
+ EthChainId["GOERLI"] = "5";
11
+ EthChainId["KOTTI"] = "6";
12
+ EthChainId["UBIQ"] = "8";
13
+ EthChainId["OPTIMISM"] = "10";
14
+ EthChainId["SONGBIRD"] = "19";
15
+ EthChainId["ELASTOS"] = "20";
16
+ EthChainId["CRONOS"] = "25";
17
+ EthChainId["RSK"] = "30";
18
+ EthChainId["TELOS"] = "40";
19
+ EthChainId["XDC"] = "50";
20
+ EthChainId["CSC"] = "52";
21
+ EthChainId["ZYX"] = "55";
22
+ EthChainId["BINANCE"] = "56";
23
+ EthChainId["SYSCOIN"] = "57";
24
+ EthChainId["GOCHAIN"] = "60";
25
+ EthChainId["ETHCLASSIC"] = "61";
26
+ EthChainId["MORDOR"] = "63";
27
+ EthChainId["OKEXCHAIN"] = "66";
28
+ EthChainId["HOO"] = "70";
29
+ EthChainId["METER"] = "82";
30
+ EthChainId["TOMOCHAIN"] = "88";
31
+ EthChainId["BINANCE_TEST"] = "97";
32
+ EthChainId["XDAI"] = "100";
33
+ EthChainId["VELAS"] = "106";
34
+ EthChainId["THUNDERCORE"] = "108";
35
+ EthChainId["FUSE"] = "122";
36
+ EthChainId["HECO"] = "128";
37
+ EthChainId["POLYGON"] = "137";
38
+ EthChainId["XDAIARB"] = "200";
39
+ EthChainId["ASTOR"] = "212";
40
+ EthChainId["ENERGYWEB"] = "246";
41
+ EthChainId["FANTOM"] = "250";
42
+ EthChainId["HPB"] = "269";
43
+ EthChainId["BOBA"] = "288";
44
+ EthChainId["KUCOIN"] = "321";
45
+ EthChainId["ZKSYNC_ERA"] = "324";
46
+ EthChainId["SHIDEN"] = "336";
47
+ EthChainId["THETA"] = "361";
48
+ EthChainId["SX"] = "416";
49
+ EthChainId["CANDLE"] = "534";
50
+ EthChainId["ASTAR"] = "592";
51
+ EthChainId["CALLISTO"] = "820";
52
+ EthChainId["WANCHAIN"] = "888";
53
+ EthChainId["POLYGON_ZKEVM"] = "1101";
54
+ EthChainId["METIS"] = "1088";
55
+ EthChainId["OMCHAIN"] = "1246";
56
+ EthChainId["MOONBEAM"] = "1284";
57
+ EthChainId["MOONRIVER"] = "1285";
58
+ EthChainId["MOONBASE"] = "1287";
59
+ EthChainId["DEV"] = "2018";
60
+ EthChainId["RONIN"] = "2020";
61
+ EthChainId["KAVA"] = "2222";
62
+ EthChainId["EZCHAIN"] = "2612";
63
+ EthChainId["PHI"] = "4181";
64
+ EthChainId["IOTEX"] = "4689";
65
+ EthChainId["XLC"] = "5050";
66
+ EthChainId["NAHMII"] = "5551";
67
+ EthChainId["NMACTEST"] = "7777";
68
+ EthChainId["KLAYTN"] = "8217";
69
+ EthChainId["EVMOS"] = "9001";
70
+ EthChainId["BASE_GOERLI"] = "84531";
71
+ EthChainId["SMARTBCH"] = "10000";
72
+ EthChainId["CRYSTALEUM"] = "103090";
73
+ EthChainId["FUSION"] = "32659";
74
+ EthChainId["ARBITRUM"] = "42161";
75
+ EthChainId["CELO"] = "42220";
76
+ EthChainId["OASIS"] = "42262";
77
+ EthChainId["AVALANCHE"] = "43114";
78
+ EthChainId["GODWOKEN"] = "71402";
79
+ EthChainId["AKROMA"] = "200625";
80
+ EthChainId["POLIS"] = "333999";
81
+ EthChainId["ARBITRUM_GOERLI"] = "421613";
82
+ EthChainId["SEPOLIA"] = "11155111";
83
+ EthChainId["AURORA"] = "1313161554";
84
+ EthChainId["HARMONY"] = "1666600000";
85
+ EthChainId["PALM"] = "11297108109";
86
+ EthChainId["CURIO"] = "836542336838601";
87
+ })(EthChainId || (EthChainId = {}));
88
+ export var AptosChainId;
89
+ (function (AptosChainId) {
90
+ AptosChainId["APTOS_MAINNET"] = "aptos_mainnet";
91
+ AptosChainId["APTOS_TESTNET"] = "aptos_testnet";
92
+ AptosChainId["APTOS_DEVNET"] = "aptos_devnet";
93
+ })(AptosChainId || (AptosChainId = {}));
94
+ export var SuiChainId;
95
+ (function (SuiChainId) {
96
+ SuiChainId["SUI_MAINNET"] = "sui_mainnet";
97
+ SuiChainId["SUI_TESTNET"] = "sui_testnet";
98
+ SuiChainId["SUI_DEVNET"] = "sui_devnet";
99
+ })(SuiChainId || (SuiChainId = {}));
100
+ export var SolanaChainId;
101
+ (function (SolanaChainId) {
102
+ SolanaChainId["SOLANA_MAINNET"] = "sol_mainnet";
103
+ SolanaChainId["SOLANA_DEVNET"] = "sol_devnet";
104
+ SolanaChainId["SOLANA_TESTNET"] = "sol_testnet";
105
+ SolanaChainId["SOLANA_PYTH"] = "sol_pyth";
106
+ })(SolanaChainId || (SolanaChainId = {}));
107
+ export const ChainId = {
108
+ ...EthChainId,
109
+ ...AptosChainId,
110
+ ...SuiChainId,
111
+ ...SolanaChainId,
96
112
  };
97
113
  export const CHAIN_MAP = {};
98
- for (const [key, value] of Object.entries(CHAIN_IDS)) {
99
- if (value === CHAIN_IDS.POLYGON_ZKEVM) {
114
+ for (const [key, value] of Object.entries(ChainId)) {
115
+ if (value === ChainId.POLYGON_ZKEVM) {
100
116
  CHAIN_MAP[value] = 'Polygon zkEVM';
101
117
  }
102
- else if (value === CHAIN_IDS.ZKSYNC_ERA) {
118
+ else if (value === ChainId.ZKSYNC_ERA) {
103
119
  CHAIN_MAP[value] = 'zkSync Era';
104
120
  }
105
121
  else {
package/lib/chain.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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","sourcesContent":["// copy from https://github.com/DefiLlama/chainlist/blob/main/constants/chainIds.js\n// and https://besu.hyperledger.org/en/stable/Concepts/NetworkID-And-ChainID/\n\nexport const CHAIN_IDS = {\n KARDIA: '0',\n ETHEREUM: '1',\n EXPANSE: '2',\n ROPSTEN: '3',\n RINKEBY: '4',\n GOERLI: '5',\n KOTTI: '6',\n UBIQ: '8',\n OPTIMISM: '10',\n SONGBIRD: '19',\n ELASTOS: '20',\n CRONOS: '25',\n RSK: '30',\n TELOS: '40',\n XDC: '50',\n CSC: '52',\n ZYX: '55',\n BINANCE: '56',\n SYSCOIN: '57',\n GOCHAIN: '60',\n ETHCLASSIC: '61',\n MORDOR: '63',\n OKEXCHAIN: '66',\n HOO: '70',\n METER: '82',\n TOMOCHAIN: '88',\n BINANCE_TEST: '97',\n XDAI: '100',\n VELAS: '106',\n THUNDERCORE: '108',\n FUSE: '122',\n HECO: '128',\n POLYGON: '137',\n XDAIARB: '200',\n ASTOR: '212',\n ENERGYWEB: '246',\n FANTOM: '250',\n HPB: '269',\n BOBA: '288',\n KUCOIN: '321',\n ZKSYNC_ERA: '324',\n SHIDEN: '336',\n THETA: '361',\n SX: '416',\n CANDLE: '534',\n ASTAR: '592',\n CALLISTO: '820',\n WANCHAIN: '888',\n POLYGON_ZKEVM: '1101',\n METIS: '1088',\n OMCHAIN: '1246',\n MOONBEAM: '1284',\n MOONRIVER: '1285',\n MOONBASE: '1287',\n DEV: '2018',\n RONIN: '2020',\n KAVA: '2222',\n EZCHAIN: '2612',\n PHI: '4181',\n IOTEX: '4689',\n XLC: '5050',\n NAHMII: '5551',\n NMACTEST: '7777',\n KLAYTN: '8217',\n EVMOS: '9001',\n BASE_GOERLI: '84531',\n SMARTBCH: '10000',\n CRYSTALEUM: '103090',\n FUSION: '32659',\n ARBITRUM: '42161',\n CELO: '42220',\n OASIS: '42262',\n AVALANCHE: '43114',\n GODWOKEN: '71402',\n AKROMA: '200625',\n POLIS: '333999',\n ARBITRUM_GOERLI: '421613',\n SEPOLIA: '11155111',\n AURORA: '1313161554',\n HARMONY: '1666600000',\n PALM: '11297108109',\n CURIO: '836542336838601',\n SOLANA_MAINNET: 'sol_mainnet',\n SOLANA_DEVNET: 'sol_devnet',\n SOLANA_TESTNET: 'sol_testnet',\n SOLANA_PYTH: 'sol_pyth',\n SUI_MAINNET: 'sui_mainnet',\n SUI_TESTNET: 'sui_testnet',\n SUI_DEVNET: 'sui_devnet',\n APTOS_MAINNET: 'aptos_mainnet',\n APTOS_TESTNET: 'aptos_testnet',\n APTOS_DEVNET: 'aptos_devnet',\n}\n\nexport const CHAIN_MAP: Record<string, string> = {}\n\nfor (const [key, value] of Object.entries(CHAIN_IDS)) {\n if (value === CHAIN_IDS.POLYGON_ZKEVM) {\n CHAIN_MAP[value] = 'Polygon zkEVM'\n } else if (value === CHAIN_IDS.ZKSYNC_ERA) {\n CHAIN_MAP[value] = 'zkSync Era'\n } else {\n const parts = key.split('_')\n CHAIN_MAP[value] = parts\n .map((part, index) => {\n return part[0] + part.slice(1).toLowerCase()\n })\n .join(' ')\n }\n}\n\nexport function getChainName(chainId: string | number | null | undefined): string {\n if (typeof chainId === 'number') {\n chainId = chainId.toString()\n }\n if (chainId) {\n const name = CHAIN_MAP[chainId]\n if (name) {\n return name\n }\n }\n return chainId || ''\n}\n\nexport function getChainType(chainId?: string | number): string {\n const id = String(chainId).toLowerCase()\n if (id.startsWith('sol')) {\n return 'solana'\n }\n if (id.startsWith('sui')) {\n return 'sui'\n }\n if (id.startsWith('apt')) {\n return 'aptos'\n }\n return 'EVM'\n}\n\nexport function getChainScanUrl(\n chainId?: string | number,\n hash?: string,\n subtype?: 'block' | 'address' | 'transaction'\n): string | undefined {\n const chainName = getChainName(chainId)\n if (chainName === 'Ethereum') {\n if (subtype === 'block') {\n return `https://etherscan.io/block/${hash}`\n } else if (subtype === 'address') {\n return `https://etherscan.io/address/${hash}`\n } else {\n return `https://etherscan.io/tx/${hash}`\n }\n }\n if (chainName === 'Polygon') {\n if (subtype === 'block') {\n return `https://polygonscan.com/block/${hash}`\n } else if (subtype === 'address') {\n return `https://polygonscan.com/address/${hash}`\n } else {\n return `https://polygonscan.com/tx/${hash}`\n }\n }\n if (chainName.startsWith('Aptos ')) {\n if (subtype === 'block') {\n return `https://explorer.aptos.io/block/${hash}`\n } else if (subtype === 'address') {\n return `https://explorer.aptos.io/account/${hash}`\n } else {\n return `https://explorer.aptos.io/txn/${hash}`\n }\n }\n if (chainName.startsWith('Solana ')) {\n if (subtype === 'block') {\n return `https://explorer.solana.com/block/${hash}`\n } else if (subtype === 'address') {\n return `https://explorer.solana.com/address/${hash}`\n } else {\n return `https://explorer.solana.io/tx/${hash}`\n }\n }\n if (chainName.startsWith('Sui ')) {\n if (subtype === 'block') {\n return `https://explorer.sui.io/block/${hash}`\n } else if (subtype === 'address') {\n return `https://explorer.sui.io/address/${hash}`\n } else {\n return `https://explorer.sui.io/transaction/${hash}`\n }\n }\n return undefined\n}\n\nexport function chainInitialLabel(chainType: string) {\n switch (chainType) {\n case 'aptos':\n return 'Initial start version'\n case 'sui':\n return 'Initial start checkpoint'\n default:\n return 'Initial start block number'\n }\n}\n\nexport function chainBlockLabel(chainType: string) {\n switch (chainType) {\n case 'aptos':\n return 'Version'\n case 'sui':\n return 'Checkpoint'\n default:\n return 'Block number'\n }\n}\n"]}
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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","sourcesContent":["// copy from https://github.com/DefiLlama/chainlist/blob/main/constants/chainIds.js\n// and https://besu.hyperledger.org/en/stable/Concepts/NetworkID-And-ChainID/\n\nexport enum EthChainId {\n KARDIA = '0',\n ETHEREUM = '1',\n EXPANSE = '2',\n ROPSTEN = '3',\n RINKEBY = '4',\n GOERLI = '5',\n KOTTI = '6',\n UBIQ = '8',\n OPTIMISM = '10',\n SONGBIRD = '19',\n ELASTOS = '20',\n CRONOS = '25',\n RSK = '30',\n TELOS = '40',\n XDC = '50',\n CSC = '52',\n ZYX = '55',\n BINANCE = '56',\n SYSCOIN = '57',\n GOCHAIN = '60',\n ETHCLASSIC = '61',\n MORDOR = '63',\n OKEXCHAIN = '66',\n HOO = '70',\n METER = '82',\n TOMOCHAIN = '88',\n BINANCE_TEST = '97',\n XDAI = '100',\n VELAS = '106',\n THUNDERCORE = '108',\n FUSE = '122',\n HECO = '128',\n POLYGON = '137',\n XDAIARB = '200',\n ASTOR = '212',\n ENERGYWEB = '246',\n FANTOM = '250',\n HPB = '269',\n BOBA = '288',\n KUCOIN = '321',\n ZKSYNC_ERA = '324',\n SHIDEN = '336',\n THETA = '361',\n SX = '416',\n CANDLE = '534',\n ASTAR = '592',\n CALLISTO = '820',\n WANCHAIN = '888',\n POLYGON_ZKEVM = '1101',\n METIS = '1088',\n OMCHAIN = '1246',\n MOONBEAM = '1284',\n MOONRIVER = '1285',\n MOONBASE = '1287',\n DEV = '2018',\n RONIN = '2020',\n KAVA = '2222',\n EZCHAIN = '2612',\n PHI = '4181',\n IOTEX = '4689',\n XLC = '5050',\n NAHMII = '5551',\n NMACTEST = '7777',\n KLAYTN = '8217',\n EVMOS = '9001',\n BASE_GOERLI = '84531',\n SMARTBCH = '10000',\n CRYSTALEUM = '103090',\n FUSION = '32659',\n ARBITRUM = '42161',\n CELO = '42220',\n OASIS = '42262',\n AVALANCHE = '43114',\n GODWOKEN = '71402',\n AKROMA = '200625',\n POLIS = '333999',\n ARBITRUM_GOERLI = '421613',\n SEPOLIA = '11155111',\n AURORA = '1313161554',\n HARMONY = '1666600000',\n PALM = '11297108109',\n CURIO = '836542336838601',\n}\n\nexport enum AptosChainId {\n APTOS_MAINNET = 'aptos_mainnet',\n APTOS_TESTNET = 'aptos_testnet',\n APTOS_DEVNET = 'aptos_devnet',\n}\n\nexport enum SuiChainId {\n SUI_MAINNET = 'sui_mainnet',\n SUI_TESTNET = 'sui_testnet',\n SUI_DEVNET = 'sui_devnet',\n}\n\nexport enum SolanaChainId {\n SOLANA_MAINNET = 'sol_mainnet',\n SOLANA_DEVNET = 'sol_devnet',\n SOLANA_TESTNET = 'sol_testnet',\n SOLANA_PYTH = 'sol_pyth',\n}\n\nexport type ChainId = EthChainId | AptosChainId | SuiChainId | SolanaChainId\nexport const ChainId = {\n ...EthChainId,\n ...AptosChainId,\n ...SuiChainId,\n ...SolanaChainId,\n}\n\nexport const CHAIN_MAP: Record<string, string> = {}\n\nfor (const [key, value] of Object.entries(ChainId)) {\n if (value === ChainId.POLYGON_ZKEVM) {\n CHAIN_MAP[value] = 'Polygon zkEVM'\n } else if (value === ChainId.ZKSYNC_ERA) {\n CHAIN_MAP[value] = 'zkSync Era'\n } else {\n const parts = key.split('_')\n CHAIN_MAP[value] = parts\n .map((part, index) => {\n return part[0] + part.slice(1).toLowerCase()\n })\n .join(' ')\n }\n}\n\nexport function getChainName(chainId: string | number | null | undefined): string {\n if (typeof chainId === 'number') {\n chainId = chainId.toString()\n }\n if (chainId) {\n const name = CHAIN_MAP[chainId]\n if (name) {\n return name\n }\n }\n return chainId || ''\n}\n\nexport function getChainType(chainId?: string | number): string {\n const id = String(chainId).toLowerCase()\n if (id.startsWith('sol')) {\n return 'solana'\n }\n if (id.startsWith('sui')) {\n return 'sui'\n }\n if (id.startsWith('apt')) {\n return 'aptos'\n }\n return 'EVM'\n}\n\nexport function getChainScanUrl(\n chainId?: string | number,\n hash?: string,\n subtype?: 'block' | 'address' | 'transaction'\n): string | undefined {\n const chainName = getChainName(chainId)\n if (chainName === 'Ethereum') {\n if (subtype === 'block') {\n return `https://etherscan.io/block/${hash}`\n } else if (subtype === 'address') {\n return `https://etherscan.io/address/${hash}`\n } else {\n return `https://etherscan.io/tx/${hash}`\n }\n }\n if (chainName === 'Polygon') {\n if (subtype === 'block') {\n return `https://polygonscan.com/block/${hash}`\n } else if (subtype === 'address') {\n return `https://polygonscan.com/address/${hash}`\n } else {\n return `https://polygonscan.com/tx/${hash}`\n }\n }\n if (chainName.startsWith('Aptos ')) {\n if (subtype === 'block') {\n return `https://explorer.aptos.io/block/${hash}`\n } else if (subtype === 'address') {\n return `https://explorer.aptos.io/account/${hash}`\n } else {\n return `https://explorer.aptos.io/txn/${hash}`\n }\n }\n if (chainName.startsWith('Solana ')) {\n if (subtype === 'block') {\n return `https://explorer.solana.com/block/${hash}`\n } else if (subtype === 'address') {\n return `https://explorer.solana.com/address/${hash}`\n } else {\n return `https://explorer.solana.io/tx/${hash}`\n }\n }\n if (chainName.startsWith('Sui ')) {\n if (subtype === 'block') {\n return `https://explorer.sui.io/block/${hash}`\n } else if (subtype === 'address') {\n return `https://explorer.sui.io/address/${hash}`\n } else {\n return `https://explorer.sui.io/transaction/${hash}`\n }\n }\n return undefined\n}\n\nexport function chainInitialLabel(chainType: string) {\n switch (chainType) {\n case 'aptos':\n return 'Initial start version'\n case 'sui':\n return 'Initial start checkpoint'\n default:\n return 'Initial start block number'\n }\n}\n\nexport function chainBlockLabel(chainType: string) {\n switch (chainType) {\n case 'aptos':\n return 'Version'\n case 'sui':\n return 'Checkpoint'\n default:\n return 'Block number'\n }\n}\n"]}
@@ -6,9 +6,14 @@ import { codegen } from './build.js';
6
6
  import * as process from 'process';
7
7
  import yaml from 'yaml';
8
8
  import { getABIFilePath, getABI, writeABIFile, ETH_API_URL_MAP } from '../abi.js';
9
- import { CHAIN_IDS, getChainName } from '../chain.js';
9
+ import { AptosChainId, getChainName, SuiChainId } from '../chain.js';
10
10
  export async function runAdd(argv) {
11
- const supportedChain = [CHAIN_IDS.APTOS_MAINNET, CHAIN_IDS.APTOS_TESTNET, CHAIN_IDS.SUI_TESTNET];
11
+ const supportedChain = [
12
+ AptosChainId.APTOS_MAINNET,
13
+ AptosChainId.APTOS_TESTNET,
14
+ SuiChainId.SUI_TESTNET,
15
+ SuiChainId.SUI_MAINNET,
16
+ ];
12
17
  supportedChain.push(...Object.keys(ETH_API_URL_MAP));
13
18
  const supprtedChainMessage = [
14
19
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"run-add.js","sourceRoot":"","sources":["../../src/commands/run-add.ts"],"names":[],"mappings":"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","sourcesContent":["import commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\nimport fs from 'fs-extra'\nimport chalk from 'chalk'\n\nimport { codegen } from './build.js'\n\nimport * as process from 'process'\nimport yaml from 'yaml'\nimport { getABIFilePath, getABI, writeABIFile, ETH_API_URL_MAP } from '../abi.js'\nimport { CHAIN_IDS, getChainName } from '../chain.js'\n\nexport async function runAdd(argv: string[]) {\n const supportedChain: string[] = [CHAIN_IDS.APTOS_MAINNET, CHAIN_IDS.APTOS_TESTNET, CHAIN_IDS.SUI_TESTNET]\n supportedChain.push(...Object.keys(ETH_API_URL_MAP))\n const supprtedChainMessage = [\n '',\n ...supportedChain.map(\n (chainId, idx) => ` ${getChainName(chainId)}:\\t${chainId}${idx === supportedChain.length - 1 ? '' : '\\n'}`\n ),\n ]\n\n const optionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n {\n name: 'chain',\n alias: 'c',\n type: String,\n defaultValue: '1',\n description: 'Chain id, current support (chain name: id)s are:\\n' + supprtedChainMessage,\n },\n {\n name: 'address',\n defaultOption: true,\n description: 'Address of the contract',\n type: String,\n },\n {\n name: 'name',\n alias: 'n',\n description: 'File name for the downloaded contract, if empty, use address as file name',\n type: String,\n },\n ]\n\n const options = commandLineArgs(optionDefinitions, { argv, partial: true })\n const usage = commandLineUsage([\n {\n header: \"Add contract's ABI to the project\",\n content: 'sentio add [--chain <chain> --name <name>] <address>',\n },\n {\n header: 'Options',\n optionList: optionDefinitions,\n },\n ])\n\n if (options.help || !options.address) {\n console.log(usage)\n } else {\n const chain: string = options['chain'].toLowerCase()\n const address: string = options.address\n if (!address.startsWith('0x')) {\n console.error(chalk.red('Address must start with 0x'))\n console.log(usage)\n process.exit(1)\n }\n\n const abiRes = await getABI(chain, address, options.name)\n const filename = abiRes.name || address\n\n writeABIFile(abiRes.abi, getABIFilePath(chain, filename))\n\n // Write contract info to sentio.yaml\n const yamlDocument: yaml.Document = yaml.parseDocument(fs.readFileSync('sentio.yaml', 'utf8'))\n let contracts = yamlDocument.get('contracts') as yaml.YAMLSeq\n if (!contracts) {\n contracts = new yaml.YAMLSeq()\n yamlDocument.set('contracts', contracts)\n }\n\n let hasContract = false\n for (const item of contracts.items as yaml.YAMLMap[]) {\n if (item.get('chain') === chain && item.get('address') === address) {\n hasContract = true\n }\n }\n\n if (!hasContract) {\n const newContract = new yaml.YAMLMap()\n newContract.set('chain', chain)\n newContract.set('address', address)\n if (address !== filename) {\n newContract.set('name', filename)\n }\n contracts.add(newContract)\n fs.writeFileSync('sentio.yaml', yamlDocument.toString(), 'utf8')\n }\n\n // Run gen\n await codegen(false)\n }\n}\n"]}
1
+ {"version":3,"file":"run-add.js","sourceRoot":"","sources":["../../src/commands/run-add.ts"],"names":[],"mappings":"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","sourcesContent":["import commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\nimport fs from 'fs-extra'\nimport chalk from 'chalk'\n\nimport { codegen } from './build.js'\n\nimport * as process from 'process'\nimport yaml from 'yaml'\nimport { getABIFilePath, getABI, writeABIFile, ETH_API_URL_MAP } from '../abi.js'\nimport { AptosChainId, ChainId, getChainName, SuiChainId } from '../chain.js'\n\nexport async function runAdd(argv: string[]) {\n const supportedChain: string[] = [\n AptosChainId.APTOS_MAINNET,\n AptosChainId.APTOS_TESTNET,\n SuiChainId.SUI_TESTNET,\n SuiChainId.SUI_MAINNET,\n ]\n supportedChain.push(...Object.keys(ETH_API_URL_MAP))\n const supprtedChainMessage = [\n '',\n ...supportedChain.map(\n (chainId, idx) => ` ${getChainName(chainId)}:\\t${chainId}${idx === supportedChain.length - 1 ? '' : '\\n'}`\n ),\n ]\n\n const optionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n {\n name: 'chain',\n alias: 'c',\n type: String,\n defaultValue: '1',\n description: 'Chain id, current support (chain name: id)s are:\\n' + supprtedChainMessage,\n },\n {\n name: 'address',\n defaultOption: true,\n description: 'Address of the contract',\n type: String,\n },\n {\n name: 'name',\n alias: 'n',\n description: 'File name for the downloaded contract, if empty, use address as file name',\n type: String,\n },\n ]\n\n const options = commandLineArgs(optionDefinitions, { argv, partial: true })\n const usage = commandLineUsage([\n {\n header: \"Add contract's ABI to the project\",\n content: 'sentio add [--chain <chain> --name <name>] <address>',\n },\n {\n header: 'Options',\n optionList: optionDefinitions,\n },\n ])\n\n if (options.help || !options.address) {\n console.log(usage)\n } else {\n const chain = options['chain'].toLowerCase() as ChainId\n const address: string = options.address\n if (!address.startsWith('0x')) {\n console.error(chalk.red('Address must start with 0x'))\n console.log(usage)\n process.exit(1)\n }\n\n const abiRes = await getABI(chain, address, options.name)\n const filename = abiRes.name || address\n\n writeABIFile(abiRes.abi, getABIFilePath(chain, filename))\n\n // Write contract info to sentio.yaml\n const yamlDocument: yaml.Document = yaml.parseDocument(fs.readFileSync('sentio.yaml', 'utf8'))\n let contracts = yamlDocument.get('contracts') as yaml.YAMLSeq\n if (!contracts) {\n contracts = new yaml.YAMLSeq()\n yamlDocument.set('contracts', contracts)\n }\n\n let hasContract = false\n for (const item of contracts.items as yaml.YAMLMap[]) {\n if (item.get('chain') === chain && item.get('address') === address) {\n hasContract = true\n }\n }\n\n if (!hasContract) {\n const newContract = new yaml.YAMLMap()\n newContract.set('chain', chain)\n newContract.set('address', address)\n if (address !== filename) {\n newContract.set('name', filename)\n }\n contracts.add(newContract)\n fs.writeFileSync('sentio.yaml', yamlDocument.toString(), 'utf8')\n }\n\n // Run gen\n await codegen(false)\n }\n}\n"]}
package/lib/config.d.ts CHANGED
@@ -1,6 +1,7 @@
1
+ import { ChainId } from './chain.js';
1
2
  export interface YamlContractConfig {
2
3
  address: string;
3
- chain: string;
4
+ chain: ChainId;
4
5
  name: string;
5
6
  }
6
7
  export interface YamlProjectConfig {
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAA+B;IAC1C,KAAK,EAAE,wBAAwB;IAC/B,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,wBAAwB;CAC/B,CAAA;AAgBD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE;QACrC,IAAI,GAAG,MAAM,CAAA;KACd;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IAMxC,IAAI,MAAM,GAAG,EAAE,EACb,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,EAAE,EACb,WAAW,GAAG,EAAE,CAAA;IAClB,QAAQ,IAAI,EAAE;QACZ,KAAK,OAAO,CAAC,OAAO,CAAC;YACnB,MAAM,GAAG,iCAAiC,CAAA;YAC1C,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,0BAA0B,CAAA;YACrC,WAAW,GAAG,qCAAqC,CAAA;YACnD,MAAK;QACP,KAAK,OAAO,CAAC,MAAM,CAAC;YAClB,MAAM,GAAG,yBAAyB,CAAA;YAClC,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,+BAA+B,CAAA;YAC1C,WAAW,GAAG,qCAAqC,CAAA;YACnD,MAAK;QACP,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,OAAO,CAAC,SAAS,CAAC;YACrB,MAAM,GAAG,8BAA8B,CAAA;YACvC,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,gCAAgC,CAAA;YAC3C,WAAW,GAAG,sCAAsC,CAAA;YACpD,MAAK;QACP;YACE,MAAK;KACR;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB,EAAE,KAAyB,EAAE,IAAwB;IAChH,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAA;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtB,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7C,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;SACpC;QACD,IAAI,IAAI,EAAE;YACR,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACtB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;aAC1B;iBAAM;gBACL,IAAI,GAAG,IAAI,CAAA;aACZ;SACF;QACD,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;KACxD;AACH,CAAC;AAED,4BAA4B;AAC5B,kBAAkB;AAClB,qBAAqB;AACrB,IAAI;AACJ,EAAE;AACF,wCAAwC;AACxC,2BAA2B;AAC3B,iCAAiC","sourcesContent":["const HostMap: { [host: string]: string } = {\n local: 'http://localhost:10000',\n test: 'https://test.sentio.xyz',\n staging: 'https://staging.sentio.xyz',\n prod: 'https://app.sentio.xyz',\n}\n\nexport interface YamlContractConfig {\n address: string\n chain: string\n name: string\n}\n\nexport interface YamlProjectConfig {\n project: string\n host: string\n build: boolean\n contracts?: YamlContractConfig[]\n debug: boolean\n}\n\nexport function getFinalizedHost(host: string): string {\n if (host === undefined || host === '') {\n host = 'prod'\n }\n return HostMap[host] ?? host\n}\n\nexport function getAuthConfig(host: string): {\n domain: string\n clientId: string\n audience: string\n redirectUri: string\n} {\n let domain = '',\n clientId = '',\n audience = '',\n redirectUri = ''\n switch (host) {\n case HostMap['local']:\n domain = 'https://sentio-dev.us.auth0.com'\n clientId = 'JREam3EysMTM49eFbAjNK02OCykpmda3'\n audience = 'http://localhost:8080/v1'\n redirectUri = 'http://localhost:10000/redirect/sdk'\n break\n case HostMap['prod']:\n domain = 'https://auth.sentio.xyz'\n clientId = '66oqMrep54LVI9ckH97cw8C4GBA1cpKW'\n audience = 'https://app.sentio.xyz/api/v1'\n redirectUri = 'https://app.sentio.xyz/redirect/sdk'\n break\n case HostMap['test']:\n case HostMap['staging']:\n domain = 'https://auth.test.sentio.xyz'\n clientId = '6SH2S1qJ2yYqyYGCQOcEnGsYgoyONTxM'\n audience = 'https://test.sentio.xyz/api/v1'\n redirectUri = 'https://test.sentio.xyz/redirect/sdk'\n break\n default:\n break\n }\n return { domain, clientId, audience, redirectUri }\n}\n\nexport function finalizeHost(config: YamlProjectConfig) {\n config.host = getFinalizedHost(config.host)\n}\n\nexport function FinalizeProjectName(config: YamlProjectConfig, owner: string | undefined, slug: string | undefined) {\n if (owner || slug) {\n let name = config.project\n if (name.includes('/')) {\n owner = owner || config.project.split('/')[0]\n name = config.project.split('/')[1]\n }\n if (slug) {\n if (slug.includes('/')) {\n owner = slug.split('/')[0]\n name = slug.split('/')[1]\n } else {\n name = slug\n }\n }\n config.project = owner ? [owner, name].join('/') : name\n }\n}\n\n// export interface Target {\n// chain: string\n// abisDir?: string\n// }\n//\n// // Supported target chain, lower case\n// export const EVM = 'evm'\n// export const SOLANA = 'solana'\n"]}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,GAA+B;IAC1C,KAAK,EAAE,wBAAwB;IAC/B,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,4BAA4B;IACrC,IAAI,EAAE,wBAAwB;CAC/B,CAAA;AAgBD,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE;QACrC,IAAI,GAAG,MAAM,CAAA;KACd;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IAMxC,IAAI,MAAM,GAAG,EAAE,EACb,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,EAAE,EACb,WAAW,GAAG,EAAE,CAAA;IAClB,QAAQ,IAAI,EAAE;QACZ,KAAK,OAAO,CAAC,OAAO,CAAC;YACnB,MAAM,GAAG,iCAAiC,CAAA;YAC1C,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,0BAA0B,CAAA;YACrC,WAAW,GAAG,qCAAqC,CAAA;YACnD,MAAK;QACP,KAAK,OAAO,CAAC,MAAM,CAAC;YAClB,MAAM,GAAG,yBAAyB,CAAA;YAClC,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,+BAA+B,CAAA;YAC1C,WAAW,GAAG,qCAAqC,CAAA;YACnD,MAAK;QACP,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,OAAO,CAAC,SAAS,CAAC;YACrB,MAAM,GAAG,8BAA8B,CAAA;YACvC,QAAQ,GAAG,kCAAkC,CAAA;YAC7C,QAAQ,GAAG,gCAAgC,CAAA;YAC3C,WAAW,GAAG,sCAAsC,CAAA;YACpD,MAAK;QACP;YACE,MAAK;KACR;IACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAyB;IACpD,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB,EAAE,KAAyB,EAAE,IAAwB;IAChH,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAA;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACtB,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7C,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;SACpC;QACD,IAAI,IAAI,EAAE;YACR,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBACtB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC1B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;aAC1B;iBAAM;gBACL,IAAI,GAAG,IAAI,CAAA;aACZ;SACF;QACD,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;KACxD;AACH,CAAC;AAED,4BAA4B;AAC5B,kBAAkB;AAClB,qBAAqB;AACrB,IAAI;AACJ,EAAE;AACF,wCAAwC;AACxC,2BAA2B;AAC3B,iCAAiC","sourcesContent":["import { ChainId } from './chain.js'\n\nconst HostMap: { [host: string]: string } = {\n local: 'http://localhost:10000',\n test: 'https://test.sentio.xyz',\n staging: 'https://staging.sentio.xyz',\n prod: 'https://app.sentio.xyz',\n}\n\nexport interface YamlContractConfig {\n address: string\n chain: ChainId\n name: string\n}\n\nexport interface YamlProjectConfig {\n project: string\n host: string\n build: boolean\n contracts?: YamlContractConfig[]\n debug: boolean\n}\n\nexport function getFinalizedHost(host: string): string {\n if (host === undefined || host === '') {\n host = 'prod'\n }\n return HostMap[host] ?? host\n}\n\nexport function getAuthConfig(host: string): {\n domain: string\n clientId: string\n audience: string\n redirectUri: string\n} {\n let domain = '',\n clientId = '',\n audience = '',\n redirectUri = ''\n switch (host) {\n case HostMap['local']:\n domain = 'https://sentio-dev.us.auth0.com'\n clientId = 'JREam3EysMTM49eFbAjNK02OCykpmda3'\n audience = 'http://localhost:8080/v1'\n redirectUri = 'http://localhost:10000/redirect/sdk'\n break\n case HostMap['prod']:\n domain = 'https://auth.sentio.xyz'\n clientId = '66oqMrep54LVI9ckH97cw8C4GBA1cpKW'\n audience = 'https://app.sentio.xyz/api/v1'\n redirectUri = 'https://app.sentio.xyz/redirect/sdk'\n break\n case HostMap['test']:\n case HostMap['staging']:\n domain = 'https://auth.test.sentio.xyz'\n clientId = '6SH2S1qJ2yYqyYGCQOcEnGsYgoyONTxM'\n audience = 'https://test.sentio.xyz/api/v1'\n redirectUri = 'https://test.sentio.xyz/redirect/sdk'\n break\n default:\n break\n }\n return { domain, clientId, audience, redirectUri }\n}\n\nexport function finalizeHost(config: YamlProjectConfig) {\n config.host = getFinalizedHost(config.host)\n}\n\nexport function FinalizeProjectName(config: YamlProjectConfig, owner: string | undefined, slug: string | undefined) {\n if (owner || slug) {\n let name = config.project\n if (name.includes('/')) {\n owner = owner || config.project.split('/')[0]\n name = config.project.split('/')[1]\n }\n if (slug) {\n if (slug.includes('/')) {\n owner = slug.split('/')[0]\n name = slug.split('/')[1]\n } else {\n name = slug\n }\n }\n config.project = owner ? [owner, name].join('/') : name\n }\n}\n\n// export interface Target {\n// chain: string\n// abisDir?: string\n// }\n//\n// // Supported target chain, lower case\n// export const EVM = 'evm'\n// export const SOLANA = 'solana'\n"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@sentio/cli",
3
3
  "license": "Apache-2.0",
4
4
  "type": "module",
5
- "version": "2.7.6-rc.1",
5
+ "version": "2.8.0-rc.1",
6
6
  "dependencies": {
7
7
  "@jest/types": "^29.5.0",
8
8
  "@types/jest": "^29.5.0",
package/src/abi.ts CHANGED
@@ -1,29 +1,29 @@
1
1
  import { AptosClient } from 'aptos-sdk'
2
2
  import { JsonRpcProvider, Connection } from '@mysten/sui.js'
3
- import { CHAIN_IDS } from './chain.js'
4
3
  import chalk from 'chalk'
5
4
  import process from 'process'
6
5
  import path from 'path'
7
6
  import fs from 'fs-extra'
8
7
  import fetch from 'node-fetch'
8
+ import { AptosChainId, ChainId, EthChainId, SuiChainId } from './chain.js'
9
9
 
10
10
  export const ETH_API_URL_MAP: Record<string, string> = {}
11
11
 
12
- ETH_API_URL_MAP[CHAIN_IDS.ETHEREUM] = 'https://api.etherscan.io'
13
- ETH_API_URL_MAP[CHAIN_IDS.GOERLI] = 'https://api-goerli.etherscan.io'
14
- ETH_API_URL_MAP[CHAIN_IDS.BINANCE] = 'https://api.bscscan.com'
15
- ETH_API_URL_MAP[CHAIN_IDS.POLYGON] = 'https://api.polygonscan.com'
16
- ETH_API_URL_MAP[CHAIN_IDS.ARBITRUM] = 'https://api.arbiscan.io'
17
- ETH_API_URL_MAP[CHAIN_IDS.OPTIMISM] = 'https://api-optimistic.etherscan.io'
12
+ ETH_API_URL_MAP[EthChainId.ETHEREUM] = 'https://api.etherscan.io'
13
+ ETH_API_URL_MAP[EthChainId.GOERLI] = 'https://api-goerli.etherscan.io'
14
+ ETH_API_URL_MAP[EthChainId.BINANCE] = 'https://api.bscscan.com'
15
+ ETH_API_URL_MAP[EthChainId.POLYGON] = 'https://api.polygonscan.com'
16
+ ETH_API_URL_MAP[EthChainId.ARBITRUM] = 'https://api.arbiscan.io'
17
+ ETH_API_URL_MAP[EthChainId.OPTIMISM] = 'https://api-optimistic.etherscan.io'
18
18
  // ETH_API_URL_MAP[CHAIN_IDS.BASE_GOERLI] = 'https://api-goerli.basescan.org' // didn't see any verified contract
19
19
 
20
- ETH_API_URL_MAP[CHAIN_IDS.AVALANCHE] = 'https://api.snowtrace.io'
21
- ETH_API_URL_MAP[CHAIN_IDS.CRONOS] = 'https://api.cronoscan.com'
22
- ETH_API_URL_MAP[CHAIN_IDS.MOONBEAM] = 'https://api-moonbeam.moonscan.io'
23
- ETH_API_URL_MAP[CHAIN_IDS.FANTOM] = 'https://api.ftmscan.com'
20
+ ETH_API_URL_MAP[EthChainId.AVALANCHE] = 'https://api.snowtrace.io'
21
+ ETH_API_URL_MAP[EthChainId.CRONOS] = 'https://api.cronoscan.com'
22
+ ETH_API_URL_MAP[EthChainId.MOONBEAM] = 'https://api-moonbeam.moonscan.io'
23
+ ETH_API_URL_MAP[EthChainId.FANTOM] = 'https://api.ftmscan.com'
24
24
 
25
25
  export async function getABI(
26
- chain: string,
26
+ chain: ChainId,
27
27
  address: string,
28
28
  name: string | undefined
29
29
  ): Promise<{ name?: string; abi: object | string }> {
@@ -32,17 +32,16 @@ export async function getABI(
32
32
  let suiClient: JsonRpcProvider | undefined
33
33
 
34
34
  switch (chain) {
35
- case CHAIN_IDS.APTOS_MAINNET:
35
+ case AptosChainId.APTOS_MAINNET:
36
36
  aptosClient = new AptosClient('https://mainnet.aptoslabs.com/')
37
37
  break
38
- case CHAIN_IDS.APTOS_TESTNET:
38
+ case AptosChainId.APTOS_TESTNET:
39
39
  aptosClient = new AptosClient('https://testnet.aptoslabs.com/')
40
40
  break
41
- case CHAIN_IDS.SUI_MAINNET:
42
- throw Error('SUI mainnet is not support yet, try sui/testnet')
43
- // suiClient = new JsonRpcProvider('https://fullnode.mainnet.sui.io/')
44
- // break
45
- case CHAIN_IDS.SUI_TESTNET:
41
+ case SuiChainId.SUI_MAINNET:
42
+ suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.mainnet.sui.io/' }))
43
+ break
44
+ case SuiChainId.SUI_TESTNET:
46
45
  suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.testnet.sui.io/' }))
47
46
  break
48
47
  default:
@@ -118,16 +117,16 @@ export async function getABI(
118
117
  export function getABIFilePath(chain: string, name: string): string {
119
118
  let subpath
120
119
  switch (chain) {
121
- case CHAIN_IDS.APTOS_MAINNET:
120
+ case AptosChainId.APTOS_MAINNET:
122
121
  subpath = 'aptos'
123
122
  break
124
- case CHAIN_IDS.APTOS_TESTNET:
123
+ case AptosChainId.APTOS_TESTNET:
125
124
  subpath = 'aptos/testnet'
126
125
  break
127
- case CHAIN_IDS.SUI_MAINNET:
126
+ case SuiChainId.SUI_MAINNET:
128
127
  subpath = 'sui'
129
128
  break
130
- case CHAIN_IDS.SUI_TESTNET:
129
+ case SuiChainId.SUI_TESTNET:
131
130
  subpath = 'sui/testnet'
132
131
  break
133
132
  default:
package/src/chain.ts CHANGED
@@ -1,107 +1,124 @@
1
1
  // copy from https://github.com/DefiLlama/chainlist/blob/main/constants/chainIds.js
2
2
  // and https://besu.hyperledger.org/en/stable/Concepts/NetworkID-And-ChainID/
3
3
 
4
- export const CHAIN_IDS = {
5
- KARDIA: '0',
6
- ETHEREUM: '1',
7
- EXPANSE: '2',
8
- ROPSTEN: '3',
9
- RINKEBY: '4',
10
- GOERLI: '5',
11
- KOTTI: '6',
12
- UBIQ: '8',
13
- OPTIMISM: '10',
14
- SONGBIRD: '19',
15
- ELASTOS: '20',
16
- CRONOS: '25',
17
- RSK: '30',
18
- TELOS: '40',
19
- XDC: '50',
20
- CSC: '52',
21
- ZYX: '55',
22
- BINANCE: '56',
23
- SYSCOIN: '57',
24
- GOCHAIN: '60',
25
- ETHCLASSIC: '61',
26
- MORDOR: '63',
27
- OKEXCHAIN: '66',
28
- HOO: '70',
29
- METER: '82',
30
- TOMOCHAIN: '88',
31
- BINANCE_TEST: '97',
32
- XDAI: '100',
33
- VELAS: '106',
34
- THUNDERCORE: '108',
35
- FUSE: '122',
36
- HECO: '128',
37
- POLYGON: '137',
38
- XDAIARB: '200',
39
- ASTOR: '212',
40
- ENERGYWEB: '246',
41
- FANTOM: '250',
42
- HPB: '269',
43
- BOBA: '288',
44
- KUCOIN: '321',
45
- ZKSYNC_ERA: '324',
46
- SHIDEN: '336',
47
- THETA: '361',
48
- SX: '416',
49
- CANDLE: '534',
50
- ASTAR: '592',
51
- CALLISTO: '820',
52
- WANCHAIN: '888',
53
- POLYGON_ZKEVM: '1101',
54
- METIS: '1088',
55
- OMCHAIN: '1246',
56
- MOONBEAM: '1284',
57
- MOONRIVER: '1285',
58
- MOONBASE: '1287',
59
- DEV: '2018',
60
- RONIN: '2020',
61
- KAVA: '2222',
62
- EZCHAIN: '2612',
63
- PHI: '4181',
64
- IOTEX: '4689',
65
- XLC: '5050',
66
- NAHMII: '5551',
67
- NMACTEST: '7777',
68
- KLAYTN: '8217',
69
- EVMOS: '9001',
70
- BASE_GOERLI: '84531',
71
- SMARTBCH: '10000',
72
- CRYSTALEUM: '103090',
73
- FUSION: '32659',
74
- ARBITRUM: '42161',
75
- CELO: '42220',
76
- OASIS: '42262',
77
- AVALANCHE: '43114',
78
- GODWOKEN: '71402',
79
- AKROMA: '200625',
80
- POLIS: '333999',
81
- ARBITRUM_GOERLI: '421613',
82
- SEPOLIA: '11155111',
83
- AURORA: '1313161554',
84
- HARMONY: '1666600000',
85
- PALM: '11297108109',
86
- CURIO: '836542336838601',
87
- SOLANA_MAINNET: 'sol_mainnet',
88
- SOLANA_DEVNET: 'sol_devnet',
89
- SOLANA_TESTNET: 'sol_testnet',
90
- SOLANA_PYTH: 'sol_pyth',
91
- SUI_MAINNET: 'sui_mainnet',
92
- SUI_TESTNET: 'sui_testnet',
93
- SUI_DEVNET: 'sui_devnet',
94
- APTOS_MAINNET: 'aptos_mainnet',
95
- APTOS_TESTNET: 'aptos_testnet',
96
- APTOS_DEVNET: 'aptos_devnet',
4
+ export enum EthChainId {
5
+ KARDIA = '0',
6
+ ETHEREUM = '1',
7
+ EXPANSE = '2',
8
+ ROPSTEN = '3',
9
+ RINKEBY = '4',
10
+ GOERLI = '5',
11
+ KOTTI = '6',
12
+ UBIQ = '8',
13
+ OPTIMISM = '10',
14
+ SONGBIRD = '19',
15
+ ELASTOS = '20',
16
+ CRONOS = '25',
17
+ RSK = '30',
18
+ TELOS = '40',
19
+ XDC = '50',
20
+ CSC = '52',
21
+ ZYX = '55',
22
+ BINANCE = '56',
23
+ SYSCOIN = '57',
24
+ GOCHAIN = '60',
25
+ ETHCLASSIC = '61',
26
+ MORDOR = '63',
27
+ OKEXCHAIN = '66',
28
+ HOO = '70',
29
+ METER = '82',
30
+ TOMOCHAIN = '88',
31
+ BINANCE_TEST = '97',
32
+ XDAI = '100',
33
+ VELAS = '106',
34
+ THUNDERCORE = '108',
35
+ FUSE = '122',
36
+ HECO = '128',
37
+ POLYGON = '137',
38
+ XDAIARB = '200',
39
+ ASTOR = '212',
40
+ ENERGYWEB = '246',
41
+ FANTOM = '250',
42
+ HPB = '269',
43
+ BOBA = '288',
44
+ KUCOIN = '321',
45
+ ZKSYNC_ERA = '324',
46
+ SHIDEN = '336',
47
+ THETA = '361',
48
+ SX = '416',
49
+ CANDLE = '534',
50
+ ASTAR = '592',
51
+ CALLISTO = '820',
52
+ WANCHAIN = '888',
53
+ POLYGON_ZKEVM = '1101',
54
+ METIS = '1088',
55
+ OMCHAIN = '1246',
56
+ MOONBEAM = '1284',
57
+ MOONRIVER = '1285',
58
+ MOONBASE = '1287',
59
+ DEV = '2018',
60
+ RONIN = '2020',
61
+ KAVA = '2222',
62
+ EZCHAIN = '2612',
63
+ PHI = '4181',
64
+ IOTEX = '4689',
65
+ XLC = '5050',
66
+ NAHMII = '5551',
67
+ NMACTEST = '7777',
68
+ KLAYTN = '8217',
69
+ EVMOS = '9001',
70
+ BASE_GOERLI = '84531',
71
+ SMARTBCH = '10000',
72
+ CRYSTALEUM = '103090',
73
+ FUSION = '32659',
74
+ ARBITRUM = '42161',
75
+ CELO = '42220',
76
+ OASIS = '42262',
77
+ AVALANCHE = '43114',
78
+ GODWOKEN = '71402',
79
+ AKROMA = '200625',
80
+ POLIS = '333999',
81
+ ARBITRUM_GOERLI = '421613',
82
+ SEPOLIA = '11155111',
83
+ AURORA = '1313161554',
84
+ HARMONY = '1666600000',
85
+ PALM = '11297108109',
86
+ CURIO = '836542336838601',
87
+ }
88
+
89
+ export enum AptosChainId {
90
+ APTOS_MAINNET = 'aptos_mainnet',
91
+ APTOS_TESTNET = 'aptos_testnet',
92
+ APTOS_DEVNET = 'aptos_devnet',
93
+ }
94
+
95
+ export enum SuiChainId {
96
+ SUI_MAINNET = 'sui_mainnet',
97
+ SUI_TESTNET = 'sui_testnet',
98
+ SUI_DEVNET = 'sui_devnet',
99
+ }
100
+
101
+ export enum SolanaChainId {
102
+ SOLANA_MAINNET = 'sol_mainnet',
103
+ SOLANA_DEVNET = 'sol_devnet',
104
+ SOLANA_TESTNET = 'sol_testnet',
105
+ SOLANA_PYTH = 'sol_pyth',
106
+ }
107
+
108
+ export type ChainId = EthChainId | AptosChainId | SuiChainId | SolanaChainId
109
+ export const ChainId = {
110
+ ...EthChainId,
111
+ ...AptosChainId,
112
+ ...SuiChainId,
113
+ ...SolanaChainId,
97
114
  }
98
115
 
99
116
  export const CHAIN_MAP: Record<string, string> = {}
100
117
 
101
- for (const [key, value] of Object.entries(CHAIN_IDS)) {
102
- if (value === CHAIN_IDS.POLYGON_ZKEVM) {
118
+ for (const [key, value] of Object.entries(ChainId)) {
119
+ if (value === ChainId.POLYGON_ZKEVM) {
103
120
  CHAIN_MAP[value] = 'Polygon zkEVM'
104
- } else if (value === CHAIN_IDS.ZKSYNC_ERA) {
121
+ } else if (value === ChainId.ZKSYNC_ERA) {
105
122
  CHAIN_MAP[value] = 'zkSync Era'
106
123
  } else {
107
124
  const parts = key.split('_')
@@ -8,10 +8,15 @@ import { codegen } from './build.js'
8
8
  import * as process from 'process'
9
9
  import yaml from 'yaml'
10
10
  import { getABIFilePath, getABI, writeABIFile, ETH_API_URL_MAP } from '../abi.js'
11
- import { CHAIN_IDS, getChainName } from '../chain.js'
11
+ import { AptosChainId, ChainId, getChainName, SuiChainId } from '../chain.js'
12
12
 
13
13
  export async function runAdd(argv: string[]) {
14
- const supportedChain: string[] = [CHAIN_IDS.APTOS_MAINNET, CHAIN_IDS.APTOS_TESTNET, CHAIN_IDS.SUI_TESTNET]
14
+ const supportedChain: string[] = [
15
+ AptosChainId.APTOS_MAINNET,
16
+ AptosChainId.APTOS_TESTNET,
17
+ SuiChainId.SUI_TESTNET,
18
+ SuiChainId.SUI_MAINNET,
19
+ ]
15
20
  supportedChain.push(...Object.keys(ETH_API_URL_MAP))
16
21
  const supprtedChainMessage = [
17
22
  '',
@@ -63,7 +68,7 @@ export async function runAdd(argv: string[]) {
63
68
  if (options.help || !options.address) {
64
69
  console.log(usage)
65
70
  } else {
66
- const chain: string = options['chain'].toLowerCase()
71
+ const chain = options['chain'].toLowerCase() as ChainId
67
72
  const address: string = options.address
68
73
  if (!address.startsWith('0x')) {
69
74
  console.error(chalk.red('Address must start with 0x'))
package/src/config.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { ChainId } from './chain.js'
2
+
1
3
  const HostMap: { [host: string]: string } = {
2
4
  local: 'http://localhost:10000',
3
5
  test: 'https://test.sentio.xyz',
@@ -7,7 +9,7 @@ const HostMap: { [host: string]: string } = {
7
9
 
8
10
  export interface YamlContractConfig {
9
11
  address: string
10
- chain: string
12
+ chain: ChainId
11
13
  name: string
12
14
  }
13
15