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
+ }
2
27
3
28
export function evmOperatingChains ( ) {
4
29
const { operatingChains } = ecosystemChains . evm ;
@@ -10,37 +35,25 @@ export function evmOperatingChains() {
10
35
return ecosystemChains . evm . networks ;
11
36
} ;
12
37
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
+ }
13
43
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 || "" ;
30
48
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
+ }
39
52
40
- // let provider = new ethers.providers.StaticJsonRpcProvider(
41
- // providerRpc,
42
- // );
53
+ let provider = new ethers . providers . StaticJsonRpcProvider (
54
+ providerRpc ,
55
+ ) ;
43
56
44
- // return provider;
45
- // }
57
+ return provider ;
58
+ }
46
59
0 commit comments