@sentio/cli 2.6.0-rc.3 → 2.6.1-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 +1 -0
- package/lib/abi.js +17 -34
- package/lib/abi.js.map +1 -1
- package/lib/commands/run-add.js +9 -2
- package/lib/commands/run-add.js.map +1 -1
- package/lib/commands/run-create.js +14 -0
- package/lib/commands/run-create.js.map +1 -1
- package/package.json +1 -2
- package/src/abi.ts +21 -35
- package/src/commands/run-add.ts +12 -3
- package/src/commands/run-create.ts +15 -0
package/lib/abi.d.ts
CHANGED
package/lib/abi.js
CHANGED
|
@@ -5,8 +5,15 @@ import chalk from 'chalk';
|
|
|
5
5
|
import process from 'process';
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import fs from 'fs-extra';
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
import fetch from 'node-fetch';
|
|
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.RINKEBY] = 'https://api-rinkeby.etherscan.io';
|
|
12
|
+
ETH_API_URL_MAP[CHAIN_IDS.ROPSTEN] = 'https://api-ropsten.etherscan.io';
|
|
13
|
+
ETH_API_URL_MAP[CHAIN_IDS.GOERLI] = 'https://api-goerli.etherscan.io';
|
|
14
|
+
ETH_API_URL_MAP[CHAIN_IDS.SEPOLIA] = 'https://api-sepolia.etherscan.io';
|
|
15
|
+
ETH_API_URL_MAP[CHAIN_IDS.ARBITRUM] = 'https://api.arbiscan.io';
|
|
16
|
+
ETH_API_URL_MAP[CHAIN_IDS.AVALANCHE] = 'https://api.snowtrace.io';
|
|
10
17
|
export async function getABI(chain, address, name) {
|
|
11
18
|
let ethApi;
|
|
12
19
|
let aptosClient;
|
|
@@ -25,36 +32,12 @@ export async function getABI(chain, address, name) {
|
|
|
25
32
|
case CHAIN_IDS.SUI_TESTNET:
|
|
26
33
|
suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.testnet.sui.io/' }));
|
|
27
34
|
break;
|
|
28
|
-
case CHAIN_IDS.ETHEREUM:
|
|
29
|
-
ethApi = init();
|
|
30
|
-
break;
|
|
31
|
-
// case CHAIN_IDS.ROPSTEN:
|
|
32
|
-
// ethApi = init(undefined, "ropsten")
|
|
33
|
-
// break
|
|
34
|
-
// case CHAIN_IDS.RINKEBY:
|
|
35
|
-
// ethApi = init(undefined, "rinkeby")
|
|
36
|
-
// break
|
|
37
|
-
case CHAIN_IDS.GOERLI:
|
|
38
|
-
ethApi = init(undefined, 'goerli');
|
|
39
|
-
break;
|
|
40
|
-
// case CHAIN_IDS.SEPOLIA:
|
|
41
|
-
// ethApi = init(undefined, "sepolia")
|
|
42
|
-
// break
|
|
43
|
-
case CHAIN_IDS.ARBITRUM:
|
|
44
|
-
ethApi = init(undefined, 'arbitrum');
|
|
45
|
-
break;
|
|
46
|
-
case CHAIN_IDS.ARBITRUM_GOERLI:
|
|
47
|
-
ethApi = init(undefined, 'arbitrum_rinkeby');
|
|
48
|
-
break;
|
|
49
|
-
case CHAIN_IDS.AVALANCHE:
|
|
50
|
-
ethApi = init(undefined, 'avalanche');
|
|
51
|
-
break;
|
|
52
|
-
// case CHAIN_IDS.KOVAN:
|
|
53
|
-
// ethApi = init(undefined, "kovan")
|
|
54
|
-
// break
|
|
55
35
|
default:
|
|
56
|
-
|
|
57
|
-
|
|
36
|
+
ethApi = ETH_API_URL_MAP[chain];
|
|
37
|
+
if (!ethApi) {
|
|
38
|
+
console.error(chalk.red(`chain ${chain} not supported for direct add, please download the ABI manually`));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
58
41
|
}
|
|
59
42
|
const baseErrMsg = chalk.red(`Failed to automatic download contract ${address} from ${chain}, please manually download abi and put it into abis/eth directory`);
|
|
60
43
|
if (aptosClient) {
|
|
@@ -80,14 +63,14 @@ export async function getABI(chain, address, name) {
|
|
|
80
63
|
}
|
|
81
64
|
}
|
|
82
65
|
try {
|
|
83
|
-
let resp = await ethApi
|
|
66
|
+
let resp = (await (await fetch(`${ethApi}/api?module=contract&action=getabi&address=${address}`)).json());
|
|
84
67
|
if (resp.status !== '1') {
|
|
85
68
|
throw Error(resp.message);
|
|
86
69
|
}
|
|
87
70
|
const abi = resp.result;
|
|
88
71
|
if (!name) {
|
|
89
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
90
|
-
resp = await ethApi
|
|
72
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
73
|
+
resp = (await (await fetch(`${ethApi}/api?module=contract&action=getsourcecode&address=${address}`)).json());
|
|
91
74
|
if (resp.status !== '1') {
|
|
92
75
|
throw Error(resp.message);
|
|
93
76
|
}
|
package/lib/abi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abi.js","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,
|
|
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.RINKEBY] = 'https://api-rinkeby.etherscan.io'\nETH_API_URL_MAP[CHAIN_IDS.ROPSTEN] = 'https://api-ropsten.etherscan.io'\nETH_API_URL_MAP[CHAIN_IDS.GOERLI] = 'https://api-goerli.etherscan.io'\nETH_API_URL_MAP[CHAIN_IDS.SEPOLIA] = 'https://api-sepolia.etherscan.io'\nETH_API_URL_MAP[CHAIN_IDS.ARBITRUM] = 'https://api.arbiscan.io'\nETH_API_URL_MAP[CHAIN_IDS.AVALANCHE] = 'https://api.snowtrace.io'\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 }\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 }\n } catch (e) {\n console.error(baseErrMsg, e)\n process.exit(1)\n }\n }\n\n try {\n let resp = (await (await fetch(`${ethApi}/api?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 (\n await fetch(`${ethApi}/api?module=contract&action=getsourcecode&address=${address}`)\n ).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"]}
|
package/lib/commands/run-add.js
CHANGED
|
@@ -5,8 +5,15 @@ import chalk from 'chalk';
|
|
|
5
5
|
import { codegen } from './build.js';
|
|
6
6
|
import * as process from 'process';
|
|
7
7
|
import yaml from 'yaml';
|
|
8
|
-
import { getABIFilePath, getABI, writeABIFile } from '../abi.js';
|
|
8
|
+
import { getABIFilePath, getABI, writeABIFile, ETH_API_URL_MAP } from '../abi.js';
|
|
9
|
+
import { CHAIN_IDS, getChainName } from '../chain.js';
|
|
9
10
|
export async function runAdd(argv) {
|
|
11
|
+
const supportedChain = [CHAIN_IDS.APTOS_MAINNET, CHAIN_IDS.APTOS_TESTNET, CHAIN_IDS.SUI_TESTNET];
|
|
12
|
+
supportedChain.push(...Object.keys(ETH_API_URL_MAP));
|
|
13
|
+
const supprtedChainMessage = [
|
|
14
|
+
'',
|
|
15
|
+
...supportedChain.map((chainId, idx) => ` ${getChainName(chainId)}:\t${chainId}${idx === supportedChain.length - 1 ? '' : '\n'}`),
|
|
16
|
+
];
|
|
10
17
|
const optionDefinitions = [
|
|
11
18
|
{
|
|
12
19
|
name: 'help',
|
|
@@ -19,7 +26,7 @@ export async function runAdd(argv) {
|
|
|
19
26
|
alias: 'c',
|
|
20
27
|
type: String,
|
|
21
28
|
defaultValue: '1',
|
|
22
|
-
description: 'Chain id
|
|
29
|
+
description: 'Chain id, current support (chain name: id)s are:\n' + supprtedChainMessage,
|
|
23
30
|
},
|
|
24
31
|
{
|
|
25
32
|
name: 'address',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-add.js","sourceRoot":"","sources":["../../src/commands/run-add.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
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"]}
|
|
@@ -5,6 +5,8 @@ import fs from 'fs-extra';
|
|
|
5
5
|
import chalk from 'chalk';
|
|
6
6
|
import latestVersion from 'latest-version';
|
|
7
7
|
import url from 'url';
|
|
8
|
+
import { exec } from 'child_process';
|
|
9
|
+
import process from 'process';
|
|
8
10
|
export async function runCreate(argv) {
|
|
9
11
|
const optionDefinitions = [
|
|
10
12
|
{
|
|
@@ -120,6 +122,18 @@ export async function runCreate(argv) {
|
|
|
120
122
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
121
123
|
}
|
|
122
124
|
console.log(chalk.green("successfully create project '" + projectFullName + "'"));
|
|
125
|
+
if (!options.subproject) {
|
|
126
|
+
console.log(chalk.green('running yarn install for initialization'));
|
|
127
|
+
const child = exec('yarn install', { cwd: dstFolder });
|
|
128
|
+
if (!child.stdout || !child.stderr) {
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
child.stdout.pipe(process.stdout);
|
|
132
|
+
child.stderr.pipe(process.stderr);
|
|
133
|
+
await new Promise((resolve) => {
|
|
134
|
+
child.on('close', resolve);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
123
137
|
}
|
|
124
138
|
}
|
|
125
139
|
//# sourceMappingURL=run-create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-create.js","sourceRoot":"","sources":["../../src/commands/run-create.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,aAAa,MAAM,gBAAgB,CAAA;AAC1C,OAAO,GAAG,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"run-create.js","sourceRoot":"","sources":["../../src/commands/run-create.ts"],"names":[],"mappings":"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","sourcesContent":["import commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport chalk from 'chalk'\nimport latestVersion from 'latest-version'\nimport url from 'url'\nimport { exec } from 'child_process'\nimport process from 'process'\n\nexport async function runCreate(argv: string[]) {\n const optionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n {\n name: 'name',\n alias: 'n',\n defaultOption: true,\n type: String,\n description: 'Project name',\n },\n {\n name: 'subproject',\n alias: 'p',\n type: Boolean,\n description:\n 'If this is a subproject in mono-repo setup, in this case sdk version is controlled in parent package.json.',\n },\n {\n name: 'directory',\n alias: 'd',\n description: '(Optional) The root direct new project will be created, default current working dir',\n type: String,\n },\n {\n name: 'chain-type',\n alias: 'c',\n description:\n 'The type of project you want to create, can be eth, aptos, solana, raw (if you want to start from scratch and support multiple types of chains)',\n type: String,\n defaultValue: 'eth',\n },\n ]\n\n const options = commandLineArgs(optionDefinitions, { argv })\n const usage = commandLineUsage([\n {\n header: 'Create a template project',\n content: 'sentio create <name>',\n },\n {\n header: 'Options',\n optionList: optionDefinitions,\n },\n ])\n\n if (options.help || !options.name) {\n console.log(usage)\n } else {\n const chainType: string = options['chain-type'].toLowerCase()\n switch (chainType) {\n case 'eth':\n break\n case 'aptos':\n break\n case 'raw':\n break\n case 'solana':\n break\n default:\n console.error(chalk.red('non supported chain-type for template creation, use --help for more information.'))\n console.log(usage)\n process.exit(1)\n }\n\n const templateFolder = url.fileURLToPath(new URL('../../templates/' + chainType, import.meta.url))\n const projectFullName = options.name || 'default'\n let projectSlug = projectFullName\n const projectParts = projectSlug.split('/')\n if (projectParts.length > 1) {\n projectSlug = projectParts[1]\n }\n\n const rootDir = options.directory || process.cwd()\n const dstFolder = path.resolve(rootDir, projectSlug)\n if (fs.existsSync(dstFolder)) {\n console.error(chalk.red(\"can't create project '\" + projectSlug + \"', directory already existed\"))\n process.exit(1)\n }\n\n fs.copySync(templateFolder, dstFolder, {\n filter: (src, _) => {\n // TODO read from .gitignore to be more reliable\n if (\n src.endsWith('types') ||\n src.endsWith('dist') ||\n src.endsWith('node_modules') ||\n src.endsWith('.lock') ||\n src.endsWith('dist')\n ) {\n return false\n }\n return true\n },\n overwrite: false,\n })\n const gitignoreFile = path.join(dstFolder, 'gitignore')\n if (fs.existsSync(gitignoreFile)) {\n fs.renameSync(gitignoreFile, path.join(dstFolder, '.gitignore'))\n }\n if (options.name) {\n const sentioYamlPath = path.resolve(dstFolder, 'sentio.yaml')\n fs.writeFileSync(sentioYamlPath, 'project: ' + projectFullName + '\\n', { flag: 'w+' })\n\n const packageJsonPath = path.resolve(dstFolder, 'package.json')\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))\n\n const sdkVersion = '^' + (await latestVersion('@sentio/sdk'))\n packageJson.dependencies['@sentio/sdk'] = sdkVersion\n\n const cliVersion = '^' + (await latestVersion('@sentio/cli'))\n packageJson.devDependencies['@sentio/cli'] = cliVersion\n packageJson.name = projectSlug\n\n if (options.subproject) {\n delete packageJson.dependencies['@sentio/sdk']\n delete packageJson.devDependencies['@sentio/cli']\n }\n\n // Don't add directly to avoid deps issue\n packageJson.scripts.postinstall = 'sentio gen'\n\n fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))\n }\n console.log(chalk.green(\"successfully create project '\" + projectFullName + \"'\"))\n if (!options.subproject) {\n console.log(chalk.green('running yarn install for initialization'))\n\n const child = exec('yarn install', { cwd: dstFolder })\n if (!child.stdout || !child.stderr) {\n process.exit(1)\n }\n child.stdout.pipe(process.stdout)\n child.stderr.pipe(process.stderr)\n await new Promise((resolve) => {\n child.on('close', resolve)\n })\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "2.6.
|
|
6
|
+
"version": "2.6.1-rc.1",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"compile": "tsc",
|
|
9
9
|
"build": "yarn compile",
|
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
"chalk": "^5.2.0",
|
|
21
21
|
"command-line-args": "^5.2.1",
|
|
22
22
|
"command-line-usage": "^7.0.1",
|
|
23
|
-
"etherscan-api": "^10.3.0",
|
|
24
23
|
"express": "^4.18.2",
|
|
25
24
|
"form-data": "^4.0.0",
|
|
26
25
|
"fs-extra": "^11.0.0",
|
package/src/abi.ts
CHANGED
|
@@ -5,8 +5,17 @@ import chalk from 'chalk'
|
|
|
5
5
|
import process from 'process'
|
|
6
6
|
import path from 'path'
|
|
7
7
|
import fs from 'fs-extra'
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
import fetch from 'node-fetch'
|
|
9
|
+
|
|
10
|
+
export const ETH_API_URL_MAP: Record<string, string> = {}
|
|
11
|
+
|
|
12
|
+
ETH_API_URL_MAP[CHAIN_IDS.ETHEREUM] = 'https://api.etherscan.io'
|
|
13
|
+
ETH_API_URL_MAP[CHAIN_IDS.RINKEBY] = 'https://api-rinkeby.etherscan.io'
|
|
14
|
+
ETH_API_URL_MAP[CHAIN_IDS.ROPSTEN] = 'https://api-ropsten.etherscan.io'
|
|
15
|
+
ETH_API_URL_MAP[CHAIN_IDS.GOERLI] = 'https://api-goerli.etherscan.io'
|
|
16
|
+
ETH_API_URL_MAP[CHAIN_IDS.SEPOLIA] = 'https://api-sepolia.etherscan.io'
|
|
17
|
+
ETH_API_URL_MAP[CHAIN_IDS.ARBITRUM] = 'https://api.arbiscan.io'
|
|
18
|
+
ETH_API_URL_MAP[CHAIN_IDS.AVALANCHE] = 'https://api.snowtrace.io'
|
|
10
19
|
|
|
11
20
|
export async function getABI(
|
|
12
21
|
chain: string,
|
|
@@ -31,37 +40,12 @@ export async function getABI(
|
|
|
31
40
|
case CHAIN_IDS.SUI_TESTNET:
|
|
32
41
|
suiClient = new JsonRpcProvider(new Connection({ fullnode: 'https://fullnode.testnet.sui.io/' }))
|
|
33
42
|
break
|
|
34
|
-
case CHAIN_IDS.ETHEREUM:
|
|
35
|
-
ethApi = init()
|
|
36
|
-
break
|
|
37
|
-
// case CHAIN_IDS.ROPSTEN:
|
|
38
|
-
// ethApi = init(undefined, "ropsten")
|
|
39
|
-
// break
|
|
40
|
-
// case CHAIN_IDS.RINKEBY:
|
|
41
|
-
// ethApi = init(undefined, "rinkeby")
|
|
42
|
-
// break
|
|
43
|
-
case CHAIN_IDS.GOERLI:
|
|
44
|
-
ethApi = init(undefined, 'goerli')
|
|
45
|
-
break
|
|
46
|
-
// case CHAIN_IDS.SEPOLIA:
|
|
47
|
-
// ethApi = init(undefined, "sepolia")
|
|
48
|
-
// break
|
|
49
|
-
|
|
50
|
-
case CHAIN_IDS.ARBITRUM:
|
|
51
|
-
ethApi = init(undefined, 'arbitrum')
|
|
52
|
-
break
|
|
53
|
-
case CHAIN_IDS.ARBITRUM_GOERLI:
|
|
54
|
-
ethApi = init(undefined, 'arbitrum_rinkeby')
|
|
55
|
-
break
|
|
56
|
-
case CHAIN_IDS.AVALANCHE:
|
|
57
|
-
ethApi = init(undefined, 'avalanche')
|
|
58
|
-
break
|
|
59
|
-
// case CHAIN_IDS.KOVAN:
|
|
60
|
-
// ethApi = init(undefined, "kovan")
|
|
61
|
-
// break
|
|
62
43
|
default:
|
|
63
|
-
|
|
64
|
-
|
|
44
|
+
ethApi = ETH_API_URL_MAP[chain]
|
|
45
|
+
if (!ethApi) {
|
|
46
|
+
console.error(chalk.red(`chain ${chain} not supported for direct add, please download the ABI manually`))
|
|
47
|
+
process.exit(1)
|
|
48
|
+
}
|
|
65
49
|
}
|
|
66
50
|
|
|
67
51
|
const baseErrMsg = chalk.red(
|
|
@@ -90,15 +74,17 @@ export async function getABI(
|
|
|
90
74
|
}
|
|
91
75
|
|
|
92
76
|
try {
|
|
93
|
-
let resp = await ethApi
|
|
77
|
+
let resp = (await (await fetch(`${ethApi}/api?module=contract&action=getabi&address=${address}`)).json()) as any
|
|
94
78
|
if (resp.status !== '1') {
|
|
95
79
|
throw Error(resp.message)
|
|
96
80
|
}
|
|
97
81
|
const abi = resp.result
|
|
98
82
|
|
|
99
83
|
if (!name) {
|
|
100
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
101
|
-
resp = await
|
|
84
|
+
await new Promise((resolve) => setTimeout(resolve, 5000))
|
|
85
|
+
resp = (await (
|
|
86
|
+
await fetch(`${ethApi}/api?module=contract&action=getsourcecode&address=${address}`)
|
|
87
|
+
).json()) as any
|
|
102
88
|
if (resp.status !== '1') {
|
|
103
89
|
throw Error(resp.message)
|
|
104
90
|
}
|
package/src/commands/run-add.ts
CHANGED
|
@@ -7,9 +7,19 @@ import { codegen } from './build.js'
|
|
|
7
7
|
|
|
8
8
|
import * as process from 'process'
|
|
9
9
|
import yaml from 'yaml'
|
|
10
|
-
import { getABIFilePath, getABI, writeABIFile } from '../abi.js'
|
|
10
|
+
import { getABIFilePath, getABI, writeABIFile, ETH_API_URL_MAP } from '../abi.js'
|
|
11
|
+
import { CHAIN_IDS, getChainName } from '../chain.js'
|
|
11
12
|
|
|
12
13
|
export async function runAdd(argv: string[]) {
|
|
14
|
+
const supportedChain: string[] = [CHAIN_IDS.APTOS_MAINNET, CHAIN_IDS.APTOS_TESTNET, CHAIN_IDS.SUI_TESTNET]
|
|
15
|
+
supportedChain.push(...Object.keys(ETH_API_URL_MAP))
|
|
16
|
+
const supprtedChainMessage = [
|
|
17
|
+
'',
|
|
18
|
+
...supportedChain.map(
|
|
19
|
+
(chainId, idx) => ` ${getChainName(chainId)}:\t${chainId}${idx === supportedChain.length - 1 ? '' : '\n'}`
|
|
20
|
+
),
|
|
21
|
+
]
|
|
22
|
+
|
|
13
23
|
const optionDefinitions = [
|
|
14
24
|
{
|
|
15
25
|
name: 'help',
|
|
@@ -22,8 +32,7 @@ export async function runAdd(argv: string[]) {
|
|
|
22
32
|
alias: 'c',
|
|
23
33
|
type: String,
|
|
24
34
|
defaultValue: '1',
|
|
25
|
-
description:
|
|
26
|
-
'Chain id define from here: https://raw.githubusercontent.com/sentioxyz/sentio-sdk/main/packages/sdk/src/core/chain.ts notice some chain may not support this command',
|
|
35
|
+
description: 'Chain id, current support (chain name: id)s are:\n' + supprtedChainMessage,
|
|
27
36
|
},
|
|
28
37
|
{
|
|
29
38
|
name: 'address',
|
|
@@ -5,6 +5,8 @@ import fs from 'fs-extra'
|
|
|
5
5
|
import chalk from 'chalk'
|
|
6
6
|
import latestVersion from 'latest-version'
|
|
7
7
|
import url from 'url'
|
|
8
|
+
import { exec } from 'child_process'
|
|
9
|
+
import process from 'process'
|
|
8
10
|
|
|
9
11
|
export async function runCreate(argv: string[]) {
|
|
10
12
|
const optionDefinitions = [
|
|
@@ -135,5 +137,18 @@ export async function runCreate(argv: string[]) {
|
|
|
135
137
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2))
|
|
136
138
|
}
|
|
137
139
|
console.log(chalk.green("successfully create project '" + projectFullName + "'"))
|
|
140
|
+
if (!options.subproject) {
|
|
141
|
+
console.log(chalk.green('running yarn install for initialization'))
|
|
142
|
+
|
|
143
|
+
const child = exec('yarn install', { cwd: dstFolder })
|
|
144
|
+
if (!child.stdout || !child.stderr) {
|
|
145
|
+
process.exit(1)
|
|
146
|
+
}
|
|
147
|
+
child.stdout.pipe(process.stdout)
|
|
148
|
+
child.stderr.pipe(process.stderr)
|
|
149
|
+
await new Promise((resolve) => {
|
|
150
|
+
child.on('close', resolve)
|
|
151
|
+
})
|
|
152
|
+
}
|
|
138
153
|
}
|
|
139
154
|
}
|