@sentio/cli 2.4.0 → 2.5.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 +6 -0
- package/lib/abi.js +138 -0
- package/lib/abi.js.map +1 -0
- package/lib/chain.d.ts +98 -0
- package/lib/chain.js +198 -0
- package/lib/chain.js.map +1 -0
- package/lib/cli.js +3 -3
- package/lib/cli.js.map +1 -1
- package/lib/commands/build.d.ts +1 -1
- package/lib/commands/build.js +29 -6
- package/lib/commands/build.js.map +1 -1
- package/lib/commands/run-add.js +26 -81
- package/lib/commands/run-add.js.map +1 -1
- package/lib/config.d.ts +6 -0
- package/lib/config.js.map +1 -1
- package/package.json +3 -4
- package/src/abi.ts +150 -0
- package/src/chain.ts +195 -0
- package/src/cli.ts +3 -3
- package/src/commands/build.ts +33 -6
- package/src/commands/run-add.ts +28 -83
- package/src/config.ts +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport { exec } from 'child_process'\nimport * as process from 'process'\nimport { getPackageRoot } from '../utils.js'\nimport commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\n\nexport const buildOptionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n {\n name: 'skip-gen',\n type: Boolean,\n description: 'Skip code generation.',\n },\n {\n name: 'skip-deps',\n type: Boolean,\n description: 'Skip dependency enforce.',\n },\n]\n\nexport async function buildProcessorWithArgs(argv: string[]) {\n const options = commandLineArgs(buildOptionDefinitions, { argv })\n const usage = commandLineUsage([\n {\n header: 'Create a template project',\n content: 'sentio create <name>',\n },\n {\n header: 'Options',\n optionList: buildOptionDefinitions,\n },\n ])\n\n if (options.help) {\n console.log(usage)\n process.exit(0)\n }\n await buildProcessor(false, options)\n}\n\nexport async function buildProcessor(onlyGen: boolean, options: commandLineArgs.CommandLineOptions) {\n if (!options['skip-deps'] && !onlyGen) {\n await installDeps()\n }\n\n if (!options['skip-gen']) {\n await codegen()\n }\n\n if (!onlyGen) {\n let tsupConfig: string\n try {\n tsupConfig = path.resolve(getPackageRoot('@sentio/sdk'), 'lib/tsup.config.ts')\n } catch (e) {\n console.error(chalk.red(\"Wrong CLI version for sdk, can't find tsup.config.ts\"))\n process.exit(1)\n }\n\n const tsup = path.resolve(getPackageRoot('tsup'), 'dist', 'cli-default.js')\n // await execStep('yarn tsc -p .', 'Compile')\n await execStep(`node ${tsup} --config=${tsupConfig}`, 'Packaging')\n\n const dir = fs.readdirSync(path.join(process.cwd(), 'dist'))\n const generated = dir.filter((d) => d.endsWith('.js')).length\n if (generated < 0) {\n console.error(chalk.red('No filed generated, please check if your processor.ts file'))\n process.exit(1)\n }\n if (generated > 1) {\n console.error(\n chalk.red('Packing failed: '),\n `Multiple entry point is not allowed. If your processor.ts have multiple file imported, please change:\nimport('mine.js')\nto\nimport 'mine.js'\n`\n )\n }\n }\n}\n\nexport async function codegen() {\n const outputBase = path.resolve('src', 'types')\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/eth/codegen')\n let input = path.resolve('abis', 'eth')\n let output = path.resolve(outputBase, 'eth')\n if (!fs.existsSync(input)) {\n input = path.resolve('abis', 'evm')\n output = path.resolve(outputBase, 'eth')\n }\n fs.emptyDirSync(output)\n // @ts-ignore dynamic import\n await codegen.codegen(input, output)\n } catch (e) {\n console.error('code gen error', e)\n }\n\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/solana/codegen')\n\n const output = path.resolve(outputBase, 'solana')\n fs.emptyDirSync(output)\n\n // @ts-ignore dynamic import\n await codegen.codegen(path.resolve('abis', 'solana'), output)\n } catch (e) {\n console.error('code gen error', e)\n }\n\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/aptos/codegen')\n\n const output = path.resolve(outputBase, 'aptos')\n fs.emptyDirSync(output)\n\n // @ts-ignore dynamic import\n await codegen.codegen(path.resolve('abis', 'aptos'), output)\n } catch (e) {\n console.error('code gen error', e)\n }\n\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/sui/codegen')\n\n const output = path.resolve(outputBase, 'sui')\n fs.emptyDirSync(output)\n\n // @ts-ignore dynamic import\n await codegen.codegen(path.resolve('abis', 'sui'), output)\n } catch (e) {\n console.error('code gen error', e)\n }\n}\n\nasync function installDeps() {\n await execStep('yarn install --ignore-scripts', 'Yarn Install')\n}\n\nasync function execStep(cmd: string, stepName: string) {\n const child = exec(cmd)\n console.log(chalk.blue(stepName + ' begin'))\n\n if (!child.stdout || !child.stderr) {\n console.error(chalk.red(stepName + ' failed'))\n process.exit(1)\n }\n\n child.stdout.pipe(process.stdout)\n child.stderr.pipe(process.stderr)\n\n await new Promise((resolve) => {\n child.on('close', resolve)\n })\n\n if (child.exitCode) {\n console.error(chalk.red(stepName + ' failed'))\n process.exit(child.exitCode)\n }\n console.log(chalk.blue(stepName + ' success'))\n console.log()\n}\n"]}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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","sourcesContent":["import chalk from 'chalk'\nimport path from 'path'\nimport fs from 'fs-extra'\nimport { exec } from 'child_process'\nimport * as process from 'process'\nimport { getPackageRoot } from '../utils.js'\nimport commandLineArgs from 'command-line-args'\nimport commandLineUsage from 'command-line-usage'\nimport yaml from 'yaml'\nimport { SentioProjectConfig } from '../config.js'\nimport { getABIFilePath, getABI, writeABIFile } from '../abi.js'\n\nexport const buildOptionDefinitions = [\n {\n name: 'help',\n alias: 'h',\n type: Boolean,\n description: 'Display this usage guide.',\n },\n {\n name: 'skip-gen',\n type: Boolean,\n description: 'Skip code generation.',\n },\n {\n name: 'skip-deps',\n type: Boolean,\n description: 'Skip dependency enforce.',\n },\n {\n name: 'example',\n type: Boolean,\n description: 'Generate example usage of the processor.',\n },\n]\n\nexport async function buildProcessorWithArgs(argv: string[]) {\n const options = commandLineArgs(buildOptionDefinitions, { argv })\n const usage = commandLineUsage([\n {\n header: 'Create a template project',\n content: 'sentio create <name>',\n },\n {\n header: 'Options',\n optionList: buildOptionDefinitions,\n },\n ])\n\n if (options.help) {\n console.log(usage)\n process.exit(0)\n }\n await buildProcessor(false, options)\n}\n\nexport async function buildProcessor(onlyGen: boolean, options: commandLineArgs.CommandLineOptions) {\n if (!options['skip-deps'] && !onlyGen) {\n await installDeps()\n }\n\n if (!options['skip-gen']) {\n await codegen(options.example || false)\n }\n\n if (!onlyGen) {\n let tsupConfig: string\n try {\n tsupConfig = path.resolve(getPackageRoot('@sentio/sdk'), 'lib/tsup.config.ts')\n } catch (e) {\n console.error(chalk.red(\"Wrong CLI version for sdk, can't find tsup.config.ts\"))\n process.exit(1)\n }\n\n const tsup = path.resolve(getPackageRoot('tsup'), 'dist', 'cli-default.js')\n // await execStep('yarn tsc -p .', 'Compile')\n await execStep(`node ${tsup} --config=${tsupConfig}`, 'Packaging')\n\n const dir = fs.readdirSync(path.join(process.cwd(), 'dist'))\n const generated = dir.filter((d) => d.endsWith('.js')).length\n if (generated < 0) {\n console.error(chalk.red('No filed generated, please check if your processor.ts file'))\n process.exit(1)\n }\n if (generated > 1) {\n console.error(\n chalk.red('Packing failed: '),\n `Multiple entry point is not allowed. If your processor.ts have multiple file imported, please change:\nimport('mine.js')\nto\nimport 'mine.js'\n`\n )\n }\n }\n}\n\nexport async function codegen(genExample = false) {\n await prepareABI()\n const outputBase = path.resolve('src', 'types')\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/eth/codegen')\n let input = path.resolve('abis', 'eth')\n let output = path.resolve(outputBase, 'eth')\n if (!fs.existsSync(input)) {\n input = path.resolve('abis', 'evm')\n output = path.resolve(outputBase, 'eth')\n }\n fs.emptyDirSync(output)\n // @ts-ignore dynamic import\n await codegen.codegen(input, output, genExample)\n } catch (e) {\n console.error('code gen error', e)\n }\n\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/solana/codegen')\n\n const output = path.resolve(outputBase, 'solana')\n fs.emptyDirSync(output)\n\n // @ts-ignore dynamic import\n await codegen.codegen(path.resolve('abis', 'solana'), output, genExample)\n } catch (e) {\n console.error('code gen error', e)\n }\n\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/aptos/codegen')\n\n const output = path.resolve(outputBase, 'aptos')\n fs.emptyDirSync(output)\n\n // @ts-ignore dynamic import\n await codegen.codegen(path.resolve('abis', 'aptos'), output, genExample)\n } catch (e) {\n console.error('code gen error', e)\n }\n\n try {\n // @ts-ignore dynamic import\n const codegen = await import('@sentio/sdk/sui/codegen')\n\n const output = path.resolve(outputBase, 'sui')\n fs.emptyDirSync(output)\n\n // @ts-ignore dynamic import\n await codegen.codegen(path.resolve('abis', 'sui'), output, genExample)\n } catch (e) {\n console.error('code gen error', e)\n }\n}\n\nasync function installDeps() {\n await execStep('yarn install --ignore-scripts', 'Yarn Install')\n}\n\nasync function execStep(cmd: string, stepName: string) {\n const child = exec(cmd)\n console.log(chalk.blue(stepName + ' begin'))\n\n if (!child.stdout || !child.stderr) {\n console.error(chalk.red(stepName + ' failed'))\n process.exit(1)\n }\n\n child.stdout.pipe(process.stdout)\n child.stderr.pipe(process.stderr)\n\n await new Promise((resolve) => {\n child.on('close', resolve)\n })\n\n if (child.exitCode) {\n console.error(chalk.red(stepName + ' failed'))\n process.exit(child.exitCode)\n }\n console.log(chalk.blue(stepName + ' success'))\n console.log()\n}\n\nasync function prepareABI() {\n const processorConfig = yaml.parse(fs.readFileSync('sentio.yaml', 'utf8')) as SentioProjectConfig\n\n if (!processorConfig.contracts) {\n return\n }\n\n for (const contract of processorConfig.contracts) {\n const outputPath = getABIFilePath(contract.chain, contract.name || contract.address)\n if (fs.existsSync(outputPath)) {\n continue\n }\n console.log('Download Missing ABI specified in sentio.yaml')\n const res = await getABI(contract.chain, contract.address, contract.name)\n writeABIFile(res.abi, outputPath)\n }\n}\n"]}
|
package/lib/commands/run-add.js
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import commandLineArgs from 'command-line-args';
|
|
2
2
|
import commandLineUsage from 'command-line-usage';
|
|
3
|
-
import path from 'path';
|
|
4
3
|
import fs from 'fs-extra';
|
|
5
4
|
import chalk from 'chalk';
|
|
6
5
|
import { codegen } from './build.js';
|
|
7
|
-
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import { JsonRpcProvider } from '@mysten/sui.js';
|
|
6
|
+
import * as process from 'process';
|
|
7
|
+
import yaml from 'yaml';
|
|
8
|
+
import { getABIFilePath, getABI, writeABIFile } from '../abi.js';
|
|
11
9
|
export async function runAdd(argv) {
|
|
12
10
|
const optionDefinitions = [
|
|
13
11
|
{
|
|
@@ -20,8 +18,8 @@ export async function runAdd(argv) {
|
|
|
20
18
|
name: 'chain',
|
|
21
19
|
alias: 'c',
|
|
22
20
|
type: String,
|
|
23
|
-
defaultValue: '
|
|
24
|
-
description: 'Chain
|
|
21
|
+
defaultValue: '1',
|
|
22
|
+
description: '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',
|
|
25
23
|
},
|
|
26
24
|
{
|
|
27
25
|
name: 'address',
|
|
@@ -58,87 +56,34 @@ export async function runAdd(argv) {
|
|
|
58
56
|
console.log(usage);
|
|
59
57
|
process.exit(1);
|
|
60
58
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
break;
|
|
71
|
-
case 'sui':
|
|
72
|
-
throw Error('SUI mainnet is not support yet, try sui/testnet');
|
|
73
|
-
// suiClient = new JsonRpcProvider('https://fullnode.mainnet.sui.io/')
|
|
74
|
-
// break
|
|
75
|
-
case 'sui/testnet':
|
|
76
|
-
suiClient = new JsonRpcProvider('https://fullnode.testnet.sui.io/');
|
|
77
|
-
break;
|
|
78
|
-
case 'mainnet':
|
|
79
|
-
case 'homestead':
|
|
80
|
-
ethApi = init();
|
|
81
|
-
break;
|
|
82
|
-
default:
|
|
83
|
-
ethApi = init(undefined, chain);
|
|
59
|
+
const abiRes = await getABI(chain, address, options.name);
|
|
60
|
+
const filename = abiRes.name || address;
|
|
61
|
+
writeABIFile(abiRes.abi, getABIFilePath(chain, filename));
|
|
62
|
+
// Write contract info to sentio.yaml
|
|
63
|
+
const yamlDocument = yaml.parseDocument(fs.readFileSync('sentio.yaml', 'utf8'));
|
|
64
|
+
let contracts = yamlDocument.get('contracts');
|
|
65
|
+
if (!contracts) {
|
|
66
|
+
contracts = new yaml.YAMLSeq();
|
|
67
|
+
yamlDocument.set('contracts', contracts);
|
|
84
68
|
}
|
|
85
|
-
|
|
86
|
-
const
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
const module = await aptosClient.getAccountModules(address);
|
|
90
|
-
writeToDirectory(module, chain, filename);
|
|
91
|
-
}
|
|
92
|
-
catch (e) {
|
|
93
|
-
console.error(baseErrMsg, e);
|
|
94
|
-
process.exit(1);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
if (suiClient) {
|
|
98
|
-
try {
|
|
99
|
-
const module = await suiClient.getNormalizedMoveModulesByPackage(address);
|
|
100
|
-
writeToDirectory(module, chain, filename);
|
|
101
|
-
}
|
|
102
|
-
catch (e) {
|
|
103
|
-
console.error(baseErrMsg, e);
|
|
104
|
-
process.exit(1);
|
|
69
|
+
let hasContract = false;
|
|
70
|
+
for (const item of contracts.items) {
|
|
71
|
+
if (item.get('chain') === chain && item.get('address') === address) {
|
|
72
|
+
hasContract = true;
|
|
105
73
|
}
|
|
106
74
|
}
|
|
107
|
-
if (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
writeToDirectory(resp.result, chain, filename);
|
|
114
|
-
}
|
|
115
|
-
catch (e) {
|
|
116
|
-
console.error(baseErrMsg, e);
|
|
117
|
-
process.exit(1);
|
|
75
|
+
if (!hasContract) {
|
|
76
|
+
const newContract = new yaml.YAMLMap();
|
|
77
|
+
newContract.set('chain', chain);
|
|
78
|
+
newContract.set('address', address);
|
|
79
|
+
if (address !== filename) {
|
|
80
|
+
newContract.set('name', filename);
|
|
118
81
|
}
|
|
82
|
+
contracts.add(newContract);
|
|
83
|
+
fs.writeFileSync('sentio.yaml', yamlDocument.toString(), 'utf8');
|
|
119
84
|
}
|
|
120
85
|
// Run gen
|
|
121
86
|
await codegen();
|
|
122
87
|
}
|
|
123
88
|
}
|
|
124
|
-
function writeToDirectory(obj, chain, name) {
|
|
125
|
-
if (typeof obj === 'string') {
|
|
126
|
-
obj = JSON.parse(obj);
|
|
127
|
-
}
|
|
128
|
-
const data = JSON.stringify(obj, null, 2);
|
|
129
|
-
let subpath = chain;
|
|
130
|
-
switch (chain) {
|
|
131
|
-
case 'aptos':
|
|
132
|
-
case 'aptos/testnet':
|
|
133
|
-
case 'sui':
|
|
134
|
-
case 'sui/testnet':
|
|
135
|
-
break;
|
|
136
|
-
default:
|
|
137
|
-
subpath = 'eth';
|
|
138
|
-
}
|
|
139
|
-
const output = path.join('abis', subpath, name + '.json');
|
|
140
|
-
fs.mkdirSync(path.dirname(output), { recursive: true });
|
|
141
|
-
fs.writeFileSync(output, data);
|
|
142
|
-
console.log(chalk.green('ABI has been downloaded to', output));
|
|
143
|
-
}
|
|
144
89
|
//# sourceMappingURL=run-add.js.map
|
|
@@ -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,
|
|
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 } from '../abi.js'\n\nexport async function runAdd(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: 'chain',\n alias: 'c',\n type: String,\n defaultValue: '1',\n description:\n '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',\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()\n }\n}\n"]}
|
package/lib/config.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
export interface ContractConfig {
|
|
2
|
+
address: string;
|
|
3
|
+
chain: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
1
6
|
export interface SentioProjectConfig {
|
|
2
7
|
project: string;
|
|
3
8
|
host: string;
|
|
4
9
|
build: boolean;
|
|
10
|
+
contracts: ContractConfig[];
|
|
5
11
|
debug: boolean;
|
|
6
12
|
}
|
|
7
13
|
export declare function getFinalizedHost(host: string): string;
|
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;
|
|
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,MAA2B;IACtD,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA2B,EAAE,KAAyB,EAAE,IAAwB;IAClH,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 ContractConfig {\n address: string\n chain: string\n name: string\n}\n\nexport interface SentioProjectConfig {\n project: string\n host: string\n build: boolean\n contracts: ContractConfig[]\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: SentioProjectConfig) {\n config.host = getFinalizedHost(config.host)\n}\n\nexport function FinalizeProjectName(config: SentioProjectConfig, 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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "2.
|
|
6
|
+
"version": "2.5.0-rc.1",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"compile": "tsc",
|
|
9
9
|
"build": "yarn compile",
|
|
@@ -25,20 +25,19 @@
|
|
|
25
25
|
"form-data": "^4.0.0",
|
|
26
26
|
"fs-extra": "^11.0.0",
|
|
27
27
|
"jest": "^29.5.0",
|
|
28
|
-
"js-yaml": "^4.1.0",
|
|
29
28
|
"latest-version": "^7.0.0",
|
|
30
29
|
"node-fetch": "^3.3.0",
|
|
31
30
|
"open": "^9.0.0",
|
|
32
31
|
"ts-jest": "^29.0.5",
|
|
33
32
|
"ts-node": "^10.9.1",
|
|
34
|
-
"tsup": "npm:@sentio/tsup@^6.6.3"
|
|
33
|
+
"tsup": "npm:@sentio/tsup@^6.6.3",
|
|
34
|
+
"yaml": "^2.2.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/command-line-args": "^5.2.0",
|
|
38
38
|
"@types/command-line-usage": "^5.0.2",
|
|
39
39
|
"@types/express": "^4.17.14",
|
|
40
40
|
"@types/fs-extra": "^11.0.1",
|
|
41
|
-
"@types/js-yaml": "^4.0.5",
|
|
42
41
|
"@types/node-fetch": "^3.0.3"
|
|
43
42
|
},
|
|
44
43
|
"bin": {
|
package/src/abi.ts
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { AptosClient } from 'aptos-sdk'
|
|
2
|
+
import { JsonRpcProvider } from '@mysten/sui.js'
|
|
3
|
+
import { CHAIN_IDS } from './chain.js'
|
|
4
|
+
import chalk from 'chalk'
|
|
5
|
+
import process from 'process'
|
|
6
|
+
import path from 'path'
|
|
7
|
+
import fs from 'fs-extra'
|
|
8
|
+
// @ts-ignore no types
|
|
9
|
+
import { init } from 'etherscan-api'
|
|
10
|
+
|
|
11
|
+
export async function getABI(
|
|
12
|
+
chain: string,
|
|
13
|
+
address: string,
|
|
14
|
+
name: string | undefined
|
|
15
|
+
): Promise<{ name?: string; abi: object | string }> {
|
|
16
|
+
let ethApi
|
|
17
|
+
let aptosClient: AptosClient | undefined
|
|
18
|
+
let suiClient: JsonRpcProvider | undefined
|
|
19
|
+
|
|
20
|
+
switch (chain) {
|
|
21
|
+
case CHAIN_IDS.APTOS_MAINNET:
|
|
22
|
+
aptosClient = new AptosClient('https://mainnet.aptoslabs.com/')
|
|
23
|
+
break
|
|
24
|
+
case CHAIN_IDS.APTOS_TESTNET:
|
|
25
|
+
aptosClient = new AptosClient('https://testnet.aptoslabs.com/')
|
|
26
|
+
break
|
|
27
|
+
case CHAIN_IDS.SUI_MAINNET:
|
|
28
|
+
throw Error('SUI mainnet is not support yet, try sui/testnet')
|
|
29
|
+
// suiClient = new JsonRpcProvider('https://fullnode.mainnet.sui.io/')
|
|
30
|
+
// break
|
|
31
|
+
case CHAIN_IDS.SUI_TESTNET:
|
|
32
|
+
suiClient = new JsonRpcProvider('https://fullnode.testnet.sui.io/')
|
|
33
|
+
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
|
+
default:
|
|
63
|
+
console.error(chalk.red(`chain ${chain} not supported for direct add, please download the ABI manually`))
|
|
64
|
+
process.exit(1)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const baseErrMsg = chalk.red(
|
|
68
|
+
`Failed to automatic download contract ${address} from ${chain}, please manually download abi and put it into abis/eth directory`
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
if (aptosClient) {
|
|
72
|
+
try {
|
|
73
|
+
return {
|
|
74
|
+
abi: await aptosClient.getAccountModules(address),
|
|
75
|
+
}
|
|
76
|
+
} catch (e) {
|
|
77
|
+
console.error(baseErrMsg, e)
|
|
78
|
+
process.exit(1)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (suiClient) {
|
|
82
|
+
try {
|
|
83
|
+
return {
|
|
84
|
+
abi: await suiClient.getNormalizedMoveModulesByPackage(address),
|
|
85
|
+
}
|
|
86
|
+
} catch (e) {
|
|
87
|
+
console.error(baseErrMsg, e)
|
|
88
|
+
process.exit(1)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
let resp = await ethApi.contract.getabi(address)
|
|
94
|
+
if (resp.status !== '1') {
|
|
95
|
+
throw Error(resp.message)
|
|
96
|
+
}
|
|
97
|
+
const abi = resp.result
|
|
98
|
+
|
|
99
|
+
if (!name) {
|
|
100
|
+
await new Promise((resolve) => setTimeout(resolve, 1000))
|
|
101
|
+
resp = await ethApi.contract.getsourcecode(address)
|
|
102
|
+
if (resp.status !== '1') {
|
|
103
|
+
throw Error(resp.message)
|
|
104
|
+
}
|
|
105
|
+
const contractName = resp.result[0].ContractName
|
|
106
|
+
if (contractName) {
|
|
107
|
+
name = contractName
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
name,
|
|
112
|
+
abi,
|
|
113
|
+
}
|
|
114
|
+
} catch (e) {
|
|
115
|
+
console.error(baseErrMsg, e)
|
|
116
|
+
process.exit(1)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export function getABIFilePath(chain: string, name: string): string {
|
|
121
|
+
let subpath
|
|
122
|
+
switch (chain) {
|
|
123
|
+
case CHAIN_IDS.APTOS_MAINNET:
|
|
124
|
+
subpath = 'aptos'
|
|
125
|
+
break
|
|
126
|
+
case CHAIN_IDS.APTOS_TESTNET:
|
|
127
|
+
subpath = 'aptos/test'
|
|
128
|
+
break
|
|
129
|
+
case CHAIN_IDS.SUI_MAINNET:
|
|
130
|
+
subpath = 'sui'
|
|
131
|
+
break
|
|
132
|
+
case CHAIN_IDS.SUI_TESTNET:
|
|
133
|
+
subpath = 'sui/test'
|
|
134
|
+
break
|
|
135
|
+
default:
|
|
136
|
+
subpath = 'eth'
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return path.join('abis', subpath, name + '.json')
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function writeABIFile(obj: string | object, output: string) {
|
|
143
|
+
if (typeof obj === 'string') {
|
|
144
|
+
obj = JSON.parse(obj)
|
|
145
|
+
}
|
|
146
|
+
const data = JSON.stringify(obj, null, 2)
|
|
147
|
+
fs.mkdirSync(path.dirname(output), { recursive: true })
|
|
148
|
+
fs.writeFileSync(output, data)
|
|
149
|
+
console.log(chalk.green('ABI has been downloaded to', output))
|
|
150
|
+
}
|
package/src/chain.ts
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// copy from https://github.com/DefiLlama/chainlist/blob/main/constants/chainIds.js
|
|
2
|
+
// and https://besu.hyperledger.org/en/stable/Concepts/NetworkID-And-ChainID/
|
|
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',
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export const CHAIN_MAP: Record<string, string> = {}
|
|
100
|
+
|
|
101
|
+
for (const [key, value] of Object.entries(CHAIN_IDS)) {
|
|
102
|
+
if (value === CHAIN_IDS.POLYGON_ZKEVM) {
|
|
103
|
+
CHAIN_MAP[value] = 'Polygon zkEVM'
|
|
104
|
+
} else if (value === CHAIN_IDS.ZKSYNC_ERA) {
|
|
105
|
+
CHAIN_MAP[value] = 'zkSync Era'
|
|
106
|
+
} else {
|
|
107
|
+
const parts = key.split('_')
|
|
108
|
+
CHAIN_MAP[value] = parts
|
|
109
|
+
.map((part, index) => {
|
|
110
|
+
return part[0] + part.slice(1).toLowerCase()
|
|
111
|
+
})
|
|
112
|
+
.join(' ')
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function getChainName(chainId: string | number | null | undefined): string {
|
|
117
|
+
if (typeof chainId === 'number') {
|
|
118
|
+
chainId = chainId.toString()
|
|
119
|
+
}
|
|
120
|
+
if (chainId) {
|
|
121
|
+
const name = CHAIN_MAP[chainId]
|
|
122
|
+
if (name) {
|
|
123
|
+
return name
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return chainId || ''
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function getChainType(chainId?: string | number): string {
|
|
130
|
+
const id = String(chainId).toLowerCase()
|
|
131
|
+
if (id.startsWith('sol')) {
|
|
132
|
+
return 'solana'
|
|
133
|
+
}
|
|
134
|
+
if (id.startsWith('sui')) {
|
|
135
|
+
return 'sui'
|
|
136
|
+
}
|
|
137
|
+
if (id.startsWith('apt')) {
|
|
138
|
+
return 'aptos'
|
|
139
|
+
}
|
|
140
|
+
return 'EVM'
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export function getChainScanUrl(
|
|
144
|
+
chainId?: string | number,
|
|
145
|
+
hash?: string,
|
|
146
|
+
subtype?: 'block' | 'address' | 'transaction'
|
|
147
|
+
): string | undefined {
|
|
148
|
+
const chainName = getChainName(chainId)
|
|
149
|
+
if (chainName === 'Ethereum') {
|
|
150
|
+
if (subtype === 'block') {
|
|
151
|
+
return `https://etherscan.io/block/${hash}`
|
|
152
|
+
} else if (subtype === 'address') {
|
|
153
|
+
return `https://etherscan.io/address/${hash}`
|
|
154
|
+
} else {
|
|
155
|
+
return `https://etherscan.io/tx/${hash}`
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (chainName === 'Polygon') {
|
|
159
|
+
if (subtype === 'block') {
|
|
160
|
+
return `https://polygonscan.com/block/${hash}`
|
|
161
|
+
} else if (subtype === 'address') {
|
|
162
|
+
return `https://polygonscan.com/address/${hash}`
|
|
163
|
+
} else {
|
|
164
|
+
return `https://polygonscan.com/tx/${hash}`
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (chainName.startsWith('Aptos ')) {
|
|
168
|
+
if (subtype === 'block') {
|
|
169
|
+
return `https://explorer.aptos.io/block/${hash}`
|
|
170
|
+
} else if (subtype === 'address') {
|
|
171
|
+
return `https://explorer.aptos.io/account/${hash}`
|
|
172
|
+
} else {
|
|
173
|
+
return `https://explorer.aptos.io/txn/${hash}`
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (chainName.startsWith('Solana ')) {
|
|
177
|
+
if (subtype === 'block') {
|
|
178
|
+
return `https://explorer.solana.com/block/${hash}`
|
|
179
|
+
} else if (subtype === 'address') {
|
|
180
|
+
return `https://explorer.solana.com/address/${hash}`
|
|
181
|
+
} else {
|
|
182
|
+
return `https://explorer.solana.io/tx/${hash}`
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (chainName.startsWith('Sui ')) {
|
|
186
|
+
if (subtype === 'block') {
|
|
187
|
+
return `https://explorer.sui.io/block/${hash}`
|
|
188
|
+
} else if (subtype === 'address') {
|
|
189
|
+
return `https://explorer.sui.io/address/${hash}`
|
|
190
|
+
} else {
|
|
191
|
+
return `https://explorer.sui.io/transaction/${hash}`
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return undefined
|
|
195
|
+
}
|