1- import { ecosystemChains } from "./index" ;
1+ import { LedgerSigner } from "@xlabs-xyz/ledger-signer" ;
2+ import { ethers } from "ethers" ;
3+ import { ChainInfo , ecosystemChains , getEnv , LoggerFn } from "./index" ;
4+
5+ export type EvmScriptCb = ( chain : ChainInfo , signer : ethers . Signer , logFn : LoggerFn ) => Promise < void > ;
6+
7+ export async function runOnEvms ( scriptName : string , cb : EvmScriptCb ) {
8+ const chains = evmOperatingChains ( ) ;
9+
10+ console . log ( `Running script on EVMs (${ chains . map ( c => c . chainId ) . join ( ", " ) } ):` , scriptName ) ;
11+
12+ const result = chains . map ( async chain => {
13+ const log = ( ...args : any [ ] ) => console . log ( `[${ chain . chainId } ]` , ...args ) ;
14+ const signer = await getSigner ( chain ) ;
15+ log ( `Starting script. Signer: ${ await signer . getAddress ( ) } ` ) ;
16+
17+ try {
18+ await cb ( chain , signer , log ) ;
19+ log ( "Success" ) ;
20+ } catch ( error ) {
21+ log ( "Error: " , error ) ;
22+ }
23+ } ) ;
24+
25+ await Promise . all ( result ) ;
26+ }
227
328export function evmOperatingChains ( ) {
429 const { operatingChains } = ecosystemChains . evm ;
@@ -10,37 +35,25 @@ export function evmOperatingChains() {
1035 return ecosystemChains . evm . networks ;
1136} ;
1237
38+ export async function getSigner ( chain : ChainInfo ) : Promise < ethers . Signer > {
39+ const derivationPath = getEnv ( "LEDGER_BIP32_PATH" ) ;
40+ const provider = getProvider ( chain ) ;
41+ return LedgerSigner . create ( provider , derivationPath ) ;
42+ }
1343
14- // export async function getSigner(chain: ChainInfo): Promise<ethers.Signer> {
15- // const provider = getProvider(chain);
16- // const privateKey = loadPrivateKey();
17-
18- // if (privateKey === "ledger") {
19- // if (process.env.LEDGER_BIP32_PATH === undefined) {
20- // throw new Error(`Missing BIP32 derivation path.
21- // With ledger devices the path needs to be specified in env var 'LEDGER_BIP32_PATH'.`);
22- // }
23- // const { LedgerSigner } = await import("@xlabs-xyz/ledger-signer");
24- // return LedgerSigner.create(provider, process.env.LEDGER_BIP32_PATH);
25- // }
26-
27- // const signer = new ethers.Wallet(privateKey, provider);
28- // return signer;
29- // }
44+ export function getProvider (
45+ chain : ChainInfo
46+ ) : ethers . providers . StaticJsonRpcProvider {
47+ const providerRpc = ecosystemChains . evm . networks . find ( ( x : any ) => x . chainId == chain . chainId ) ?. rpc || "" ;
3048
31- // export function getProvider(
32- // chain: ChainInfo
33- // ): ethers.providers.StaticJsonRpcProvider {
34- // const providerRpc = loadChains().find((x: any) => x.chainId == chain.chainId)?.rpc || "";
35-
36- // if (!providerRpc) {
37- // throw new Error("Failed to find a provider RPC for chain " + chain.chainId);
38- // }
49+ if ( ! providerRpc ) {
50+ throw new Error ( "Failed to find a provider RPC for chain " + chain . chainId ) ;
51+ }
3952
40- // let provider = new ethers.providers.StaticJsonRpcProvider(
41- // providerRpc,
42- // );
53+ let provider = new ethers . providers . StaticJsonRpcProvider (
54+ providerRpc ,
55+ ) ;
4356
44- // return provider;
45- // }
57+ return provider ;
58+ }
4659
0 commit comments