@chainlink/ccip-cli 0.90.2 → 0.91.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/README.md +40 -21
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/manual-exec.d.ts +9 -0
- package/dist/commands/manual-exec.d.ts.map +1 -1
- package/dist/commands/manual-exec.js +40 -35
- package/dist/commands/manual-exec.js.map +1 -1
- package/dist/commands/parse.d.ts +9 -0
- package/dist/commands/parse.d.ts.map +1 -1
- package/dist/commands/parse.js +18 -7
- package/dist/commands/parse.js.map +1 -1
- package/dist/commands/send.d.ts +9 -0
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +39 -26
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/show.d.ts +9 -0
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +46 -39
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/supported-tokens.d.ts +9 -2
- package/dist/commands/supported-tokens.d.ts.map +1 -1
- package/dist/commands/supported-tokens.js +35 -30
- package/dist/commands/supported-tokens.js.map +1 -1
- package/dist/commands/types.d.ts +13 -0
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js +1 -0
- package/dist/commands/types.js.map +1 -1
- package/dist/commands/utils.d.ts +75 -10
- package/dist/commands/utils.d.ts.map +1 -1
- package/dist/commands/utils.js +95 -19
- package/dist/commands/utils.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -7
- package/dist/index.js.map +1 -1
- package/dist/providers/aptos.d.ts +35 -0
- package/dist/providers/aptos.d.ts.map +1 -1
- package/dist/providers/aptos.js +34 -9
- package/dist/providers/aptos.js.map +1 -1
- package/dist/providers/evm.d.ts +10 -1
- package/dist/providers/evm.d.ts.map +1 -1
- package/dist/providers/evm.js +11 -5
- package/dist/providers/evm.js.map +1 -1
- package/dist/providers/index.d.ts +15 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +47 -11
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/solana.d.ts +30 -0
- package/dist/providers/solana.d.ts.map +1 -1
- package/dist/providers/solana.js +30 -5
- package/dist/providers/solana.js.map +1 -1
- package/package.json +11 -8
- package/src/commands/index.ts +2 -1
- package/src/commands/manual-exec.ts +40 -33
- package/src/commands/parse.ts +19 -8
- package/src/commands/send.ts +47 -30
- package/src/commands/show.ts +47 -48
- package/src/commands/supported-tokens.ts +35 -30
- package/src/commands/types.ts +15 -0
- package/src/commands/utils.ts +112 -26
- package/src/index.ts +29 -7
- package/src/providers/aptos.ts +33 -8
- package/src/providers/evm.ts +22 -5
- package/src/providers/index.ts +67 -15
- package/src/providers/solana.ts +31 -6
- package/tsconfig.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/providers/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../src/providers/evm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
import { type ChainGetter, type ChainTransaction } from '@chainlink/ccip-sdk/src/index.ts';
|
|
2
|
-
import '
|
|
3
|
-
|
|
4
|
-
import './solana.ts';
|
|
5
|
-
export declare function fetchChainsFromRpcs(argv: {
|
|
1
|
+
import { type Chain, type ChainGetter, type ChainTransaction } from '@chainlink/ccip-sdk/src/index.ts';
|
|
2
|
+
import type { Ctx } from '../commands/index.ts';
|
|
3
|
+
export declare function fetchChainsFromRpcs(ctx: Ctx, argv: {
|
|
6
4
|
rpcs?: string[];
|
|
7
5
|
'rpcs-file'?: string;
|
|
8
|
-
}
|
|
9
|
-
export declare function fetchChainsFromRpcs(argv: {
|
|
6
|
+
}): ChainGetter;
|
|
7
|
+
export declare function fetchChainsFromRpcs(ctx: Ctx, argv: {
|
|
10
8
|
rpcs?: string[];
|
|
11
9
|
'rpcs-file'?: string;
|
|
12
|
-
}, txHash: string
|
|
10
|
+
}, txHash: string): [ChainGetter, Promise<[Chain, ChainTransaction]>];
|
|
11
|
+
/**
|
|
12
|
+
* Load chain-specific wallet for given chain
|
|
13
|
+
* @param chain - Chain instance to load wallet for
|
|
14
|
+
* @param opts - Wallet options (as passed from yargs argv)
|
|
15
|
+
* @returns Promise to chain-specific wallet instance
|
|
16
|
+
*/
|
|
17
|
+
export declare function loadChainWallet(chain: Chain, opts: {
|
|
18
|
+
wallet?: unknown;
|
|
19
|
+
}): Promise<readonly [string, import("ethers").Signer] | readonly [string, import("@coral-xyz/anchor").Wallet] | readonly [`0x${string}`, import("./aptos.ts").AptosLedgerSigner | import("@aptos-labs/ts-sdk").Ed25519Account]>;
|
|
13
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,gBAAgB,EAKtB,MAAM,kCAAkC,CAAA;AAKzC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAqD/C,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,WAAW,CAAA;AACd,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,GAAG,EACR,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/C,MAAM,EAAE,MAAM,GACb,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;AA+FpD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,gOAe7E"}
|
package/dist/providers/index.js
CHANGED
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { networkInfo, supportedChains, } from '@chainlink/ccip-sdk';
|
|
3
|
-
import "./aptos.js";
|
|
4
|
-
import "./evm.js";
|
|
5
|
-
import "./solana.js";
|
|
2
|
+
import { ChainFamily, networkInfo, supportedChains, } from '@chainlink/ccip-sdk';
|
|
3
|
+
import { loadAptosWallet } from "./aptos.js";
|
|
4
|
+
import { loadEvmWallet } from "./evm.js";
|
|
5
|
+
import { loadSolanaWallet } from "./solana.js";
|
|
6
6
|
const RPCS_RE = /\b(?:http|ws)s?:\/\/[\w/\\@&?%~#.,;:=+-]+/;
|
|
7
|
+
const signalToPromiseMap = new WeakMap();
|
|
8
|
+
function signalToPromise(signal) {
|
|
9
|
+
let promise = signalToPromiseMap.get(signal);
|
|
10
|
+
if (!promise) {
|
|
11
|
+
signalToPromiseMap.set(signal, (promise = new Promise((_, reject) => {
|
|
12
|
+
signal.throwIfAborted();
|
|
13
|
+
signal.addEventListener('abort', () => reject(signal.reason instanceof Error
|
|
14
|
+
? signal.reason
|
|
15
|
+
: new Error(`Aborted: ${signal.reason}`)), { once: true });
|
|
16
|
+
})));
|
|
17
|
+
}
|
|
18
|
+
return promise;
|
|
19
|
+
}
|
|
7
20
|
async function collectEndpoints({ rpcs, 'rpcs-file': rpcsFile, }) {
|
|
8
21
|
const endpoints = new Set(rpcs || []);
|
|
9
22
|
for (const [env, val] of Object.entries(process.env)) {
|
|
@@ -28,12 +41,13 @@ async function collectEndpoints({ rpcs, 'rpcs-file': rpcsFile, }) {
|
|
|
28
41
|
/**
|
|
29
42
|
* Receives a list of rpcs and/or rpcs file, and loads them all concurrently
|
|
30
43
|
* Returns a ChainGetter function and optinoally a ChainTransaction promise
|
|
44
|
+
* @param ctx - Context object containing destroy$ promise and logger properties
|
|
31
45
|
* @param argv - Options containing rpcs (list) and/or rpcs file
|
|
32
46
|
* @param txHash - Optional txHash to fetch concurrently; causes the function to return a [ChainGetter, Promise<ChainTransaction>]
|
|
33
|
-
* @param destroy - A promise to signal when to stop fetching chains
|
|
34
47
|
* @returns a ChainGetter (alone if no txHash was provided), or a tuple of [ChainGetter, Promise<ChainTransaction>]
|
|
35
48
|
*/
|
|
36
|
-
export function fetchChainsFromRpcs(argv, txHash
|
|
49
|
+
export function fetchChainsFromRpcs(ctx, argv, txHash) {
|
|
50
|
+
const { destroy$ } = ctx;
|
|
37
51
|
const chains = {};
|
|
38
52
|
const chainsCbs = {};
|
|
39
53
|
let finished = false;
|
|
@@ -43,10 +57,10 @@ export function fetchChainsFromRpcs(argv, txHash, destroy) {
|
|
|
43
57
|
let txFound = false;
|
|
44
58
|
for (const C of Object.values(supportedChains)) {
|
|
45
59
|
for (const url of endpoints) {
|
|
46
|
-
const chain$ = C.fromUrl(url);
|
|
60
|
+
const chain$ = C.fromUrl(url, ctx);
|
|
47
61
|
if (txHash) {
|
|
48
|
-
const tx$ = chain$.then((chain) => chain.getTransaction(txHash));
|
|
49
|
-
void tx$.then((
|
|
62
|
+
const tx$ = chain$.then((chain) => chain.getTransaction(txHash).then((tx) => [chain, tx]));
|
|
63
|
+
void tx$.then(([chain]) => {
|
|
50
64
|
if (txFound)
|
|
51
65
|
return;
|
|
52
66
|
txFound = true;
|
|
@@ -59,7 +73,7 @@ export function fetchChainsFromRpcs(argv, txHash, destroy) {
|
|
|
59
73
|
pendingPromises.push(chain$.then((chain) => {
|
|
60
74
|
if (chain.network.name in chains && !(chain.network.name in chainsCbs))
|
|
61
75
|
return chain.destroy?.(); // lost race
|
|
62
|
-
|
|
76
|
+
destroy$.addEventListener('abort', () => {
|
|
63
77
|
void chain.destroy?.(); // cleanup
|
|
64
78
|
});
|
|
65
79
|
if (!(chain.network.name in chains)) {
|
|
@@ -73,7 +87,7 @@ export function fetchChainsFromRpcs(argv, txHash, destroy) {
|
|
|
73
87
|
}
|
|
74
88
|
}
|
|
75
89
|
const res = Promise.allSettled(pendingPromises);
|
|
76
|
-
void (destroy ? Promise.race([res, destroy]) : res).finally(() => {
|
|
90
|
+
void (destroy$ ? Promise.race([res, signalToPromise(destroy$)]) : res).finally(() => {
|
|
77
91
|
finished = true;
|
|
78
92
|
Object.entries(chainsCbs).forEach(([name, [_, reject]]) => reject(new Error(`No provider/chain found for network=${name}`)));
|
|
79
93
|
});
|
|
@@ -101,4 +115,26 @@ export function fetchChainsFromRpcs(argv, txHash, destroy) {
|
|
|
101
115
|
return chainGetter;
|
|
102
116
|
}
|
|
103
117
|
}
|
|
118
|
+
/**
|
|
119
|
+
* Load chain-specific wallet for given chain
|
|
120
|
+
* @param chain - Chain instance to load wallet for
|
|
121
|
+
* @param opts - Wallet options (as passed from yargs argv)
|
|
122
|
+
* @returns Promise to chain-specific wallet instance
|
|
123
|
+
*/
|
|
124
|
+
export async function loadChainWallet(chain, opts) {
|
|
125
|
+
let wallet;
|
|
126
|
+
switch (chain.network.family) {
|
|
127
|
+
case ChainFamily.EVM:
|
|
128
|
+
wallet = await loadEvmWallet(chain.provider, opts);
|
|
129
|
+
return [await wallet.getAddress(), wallet];
|
|
130
|
+
case ChainFamily.Solana:
|
|
131
|
+
wallet = await loadSolanaWallet(opts);
|
|
132
|
+
return [wallet.publicKey.toBase58(), wallet];
|
|
133
|
+
case ChainFamily.Aptos:
|
|
134
|
+
wallet = await loadAptosWallet(opts);
|
|
135
|
+
return [wallet.accountAddress.toString(), wallet];
|
|
136
|
+
default:
|
|
137
|
+
throw new Error(`Unsupported chain family: ${chain.network.family}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
104
140
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,43 @@
|
|
|
1
|
+
import { Wallet as AnchorWallet } from '@coral-xyz/anchor';
|
|
1
2
|
import SolanaLedger from '@ledgerhq/hw-app-solana';
|
|
2
3
|
import { type VersionedTransaction, Keypair, PublicKey, Transaction } from '@solana/web3.js';
|
|
4
|
+
/** Ledger hardware wallet signer for Solana. */
|
|
3
5
|
export declare class LedgerSolanaWallet {
|
|
4
6
|
publicKey: PublicKey;
|
|
5
7
|
wallet: SolanaLedger.default;
|
|
6
8
|
path: string;
|
|
9
|
+
/**
|
|
10
|
+
* Private constructor - use static `create` method instead.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
7
13
|
private constructor();
|
|
14
|
+
/**
|
|
15
|
+
* Creates a new LedgerSolanaWallet instance.
|
|
16
|
+
* @param path - BIP44 derivation path.
|
|
17
|
+
* @returns A new LedgerSolanaWallet instance.
|
|
18
|
+
*/
|
|
8
19
|
static create(path: string): Promise<LedgerSolanaWallet>;
|
|
20
|
+
/**
|
|
21
|
+
* Signs a transaction with the Ledger device.
|
|
22
|
+
* @param tx - Transaction to sign.
|
|
23
|
+
* @returns Signed transaction.
|
|
24
|
+
*/
|
|
9
25
|
signTransaction<T extends Transaction | VersionedTransaction>(tx: T): Promise<T>;
|
|
26
|
+
/**
|
|
27
|
+
* Signs multiple transactions with the Ledger device.
|
|
28
|
+
* @param txs - Transactions to sign.
|
|
29
|
+
* @returns Signed transactions.
|
|
30
|
+
*/
|
|
10
31
|
signAllTransactions<T extends Transaction | VersionedTransaction>(txs: T[]): Promise<T[]>;
|
|
32
|
+
/** Payer property - not available on Ledger. */
|
|
11
33
|
get payer(): Keypair;
|
|
12
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Loads a Solana wallet from a file or Ledger device.
|
|
37
|
+
* @param wallet - wallet options (as passed to yargs argv)
|
|
38
|
+
* @returns Promise to Anchor Wallet instance
|
|
39
|
+
*/
|
|
40
|
+
export declare function loadSolanaWallet({ wallet: walletOpt, }?: {
|
|
41
|
+
wallet?: unknown;
|
|
42
|
+
}): Promise<AnchorWallet>;
|
|
13
43
|
//# sourceMappingURL=solana.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/providers/solana.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../src/providers/solana.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,YAAY,MAAM,yBAAyB,CAAA;AAElD,OAAO,EAGL,KAAK,oBAAoB,EACzB,OAAO,EACP,SAAS,EACT,WAAW,EACZ,MAAM,iBAAiB,CAAA;AAIxB,gDAAgD;AAChD,qBAAa,kBAAkB;IAC7B,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,YAAY,CAAC,OAAO,CAAA;IAC5B,IAAI,EAAE,MAAM,CAAA;IAEZ;;;OAGG;IACH,OAAO;IAMP;;;;OAIG;WACU,MAAM,CAAC,IAAI,EAAE,MAAM;IAchC;;;;OAIG;IACG,eAAe,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,EAAE,EAAE,CAAC;IAezE;;;;OAIG;IACG,mBAAmB,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,GAAG,EAAE,CAAC,EAAE;IAShF,gDAAgD;IAChD,IAAI,KAAK,IAAI,OAAO,CAEnB;CACF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,EACrC,MAAM,EAAE,SAAS,GAClB,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAkBnD"}
|
package/dist/providers/solana.js
CHANGED
|
@@ -1,21 +1,30 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
2
|
import util from 'node:util';
|
|
3
|
-
import {
|
|
4
|
-
import { Wallet as SolanaWallet } from '@coral-xyz/anchor';
|
|
3
|
+
import { Wallet as AnchorWallet } from '@coral-xyz/anchor';
|
|
5
4
|
import SolanaLedger from '@ledgerhq/hw-app-solana';
|
|
6
5
|
import HIDTransport from '@ledgerhq/hw-transport-node-hid';
|
|
7
6
|
import { Keypair, PublicKey, Transaction, } from '@solana/web3.js';
|
|
8
7
|
import bs58 from 'bs58';
|
|
9
8
|
import { getBytes, hexlify } from 'ethers';
|
|
9
|
+
/** Ledger hardware wallet signer for Solana. */
|
|
10
10
|
export class LedgerSolanaWallet {
|
|
11
11
|
publicKey;
|
|
12
12
|
wallet;
|
|
13
13
|
path;
|
|
14
|
+
/**
|
|
15
|
+
* Private constructor - use static `create` method instead.
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
14
18
|
constructor(solanaLW, pubKey, path) {
|
|
15
19
|
this.wallet = solanaLW;
|
|
16
20
|
this.publicKey = pubKey;
|
|
17
21
|
this.path = path;
|
|
18
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates a new LedgerSolanaWallet instance.
|
|
25
|
+
* @param path - BIP44 derivation path.
|
|
26
|
+
* @returns A new LedgerSolanaWallet instance.
|
|
27
|
+
*/
|
|
19
28
|
static async create(path) {
|
|
20
29
|
try {
|
|
21
30
|
const transport = await HIDTransport.default.create();
|
|
@@ -30,6 +39,11 @@ export class LedgerSolanaWallet {
|
|
|
30
39
|
throw e;
|
|
31
40
|
}
|
|
32
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Signs a transaction with the Ledger device.
|
|
44
|
+
* @param tx - Transaction to sign.
|
|
45
|
+
* @returns Signed transaction.
|
|
46
|
+
*/
|
|
33
47
|
async signTransaction(tx) {
|
|
34
48
|
console.debug('Ledger: Request to sign message from', this.publicKey.toBase58());
|
|
35
49
|
// serializeMessage on v0, serialize on v1
|
|
@@ -44,6 +58,11 @@ export class LedgerSolanaWallet {
|
|
|
44
58
|
tx.addSignature(this.publicKey, signature);
|
|
45
59
|
return tx;
|
|
46
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Signs multiple transactions with the Ledger device.
|
|
63
|
+
* @param txs - Transactions to sign.
|
|
64
|
+
* @returns Signed transactions.
|
|
65
|
+
*/
|
|
47
66
|
async signAllTransactions(txs) {
|
|
48
67
|
console.info('Signing multiple transactions with Ledger');
|
|
49
68
|
const signedTxs = [];
|
|
@@ -52,11 +71,17 @@ export class LedgerSolanaWallet {
|
|
|
52
71
|
}
|
|
53
72
|
return signedTxs;
|
|
54
73
|
}
|
|
74
|
+
/** Payer property - not available on Ledger. */
|
|
55
75
|
get payer() {
|
|
56
76
|
throw new Error('Payer method not available on Ledger');
|
|
57
77
|
}
|
|
58
78
|
}
|
|
59
|
-
|
|
79
|
+
/**
|
|
80
|
+
* Loads a Solana wallet from a file or Ledger device.
|
|
81
|
+
* @param wallet - wallet options (as passed to yargs argv)
|
|
82
|
+
* @returns Promise to Anchor Wallet instance
|
|
83
|
+
*/
|
|
84
|
+
export async function loadSolanaWallet({ wallet: walletOpt, } = {}) {
|
|
60
85
|
if (!walletOpt)
|
|
61
86
|
walletOpt = process.env['USER_KEY'] || process.env['OWNER_KEY'] || '~/.config/solana/id.json';
|
|
62
87
|
let wallet;
|
|
@@ -74,6 +99,6 @@ SolanaChain.getWallet = async function loadSolanaWallet({ wallet: walletOpt, } =
|
|
|
74
99
|
else if (existsSync(walletOpt)) {
|
|
75
100
|
wallet = hexlify(new Uint8Array(JSON.parse(readFileSync(walletOpt, 'utf8'))));
|
|
76
101
|
}
|
|
77
|
-
return new
|
|
78
|
-
}
|
|
102
|
+
return new AnchorWallet(Keypair.fromSecretKey(wallet.startsWith('0x') ? getBytes(wallet) : bs58.decode(wallet)));
|
|
103
|
+
}
|
|
79
104
|
//# sourceMappingURL=solana.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/providers/solana.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/providers/solana.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainlink/ccip-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.91.1",
|
|
4
4
|
"description": "CCIP Command Line Interface, based on @chainlink/ccip-sdk",
|
|
5
5
|
"author": "Chainlink devs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -35,24 +35,27 @@
|
|
|
35
35
|
"eslint-config-prettier": "10.1.8",
|
|
36
36
|
"eslint-import-resolver-typescript": "4.4.4",
|
|
37
37
|
"eslint-plugin-import": "^2.32.0",
|
|
38
|
+
"eslint-plugin-jsdoc": "^61.4.2",
|
|
38
39
|
"eslint-plugin-prettier": "^5.5.4",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
40
|
+
"eslint-plugin-tsdoc": "^0.5.0",
|
|
41
|
+
"prettier": "^3.7.4",
|
|
42
|
+
"tsx": "4.21.0",
|
|
41
43
|
"typescript": "5.9.3",
|
|
42
|
-
"typescript-eslint": "8.
|
|
44
|
+
"typescript-eslint": "8.48.1"
|
|
43
45
|
},
|
|
44
46
|
"dependencies": {
|
|
45
|
-
"@aptos-labs/ts-sdk": "^5.1.
|
|
46
|
-
"@chainlink/ccip-sdk": "^0.
|
|
47
|
+
"@aptos-labs/ts-sdk": "^5.1.6",
|
|
48
|
+
"@chainlink/ccip-sdk": "^0.91.0",
|
|
47
49
|
"@coral-xyz/anchor": "^0.29.0",
|
|
48
50
|
"@ethers-ext/signer-ledger": "^6.0.0-beta.1",
|
|
49
|
-
"@inquirer/prompts": "8.0.
|
|
51
|
+
"@inquirer/prompts": "8.0.2",
|
|
50
52
|
"@ledgerhq/hw-app-aptos": "^6.34.9",
|
|
51
53
|
"@ledgerhq/hw-app-solana": "^7.6.0",
|
|
52
54
|
"@ledgerhq/hw-transport-node-hid": "^6.29.14",
|
|
53
55
|
"@solana/web3.js": "^1.98.4",
|
|
54
56
|
"bs58": "^6.0.0",
|
|
55
|
-
"ethers": "6.
|
|
57
|
+
"ethers": "6.16.0",
|
|
58
|
+
"type-fest": "^5.3.0",
|
|
56
59
|
"yargs": "18.0.0"
|
|
57
60
|
}
|
|
58
61
|
}
|
package/src/commands/index.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { Format } from './types.ts'
|
|
1
|
+
export { type Ctx, Format } from './types.ts'
|
|
2
|
+
export { getCtx } from './utils.ts'
|
|
@@ -9,14 +9,13 @@ import {
|
|
|
9
9
|
calculateManualExecProof,
|
|
10
10
|
discoverOffRamp,
|
|
11
11
|
estimateExecGasForRequest,
|
|
12
|
-
fetchAllMessagesInBatch,
|
|
13
|
-
fetchCCIPRequestsInTx,
|
|
14
12
|
} from '@chainlink/ccip-sdk/src/index.ts'
|
|
15
13
|
import type { Argv } from 'yargs'
|
|
16
14
|
|
|
17
15
|
import type { GlobalOpts } from '../index.ts'
|
|
18
|
-
import { Format } from './types.ts'
|
|
16
|
+
import { type Ctx, Format } from './types.ts'
|
|
19
17
|
import {
|
|
18
|
+
getCtx,
|
|
20
19
|
logParsedError,
|
|
21
20
|
prettyCommit,
|
|
22
21
|
prettyReceipt,
|
|
@@ -24,7 +23,7 @@ import {
|
|
|
24
23
|
selectRequest,
|
|
25
24
|
withDateTimestamp,
|
|
26
25
|
} from './utils.ts'
|
|
27
|
-
import { fetchChainsFromRpcs } from '../providers/index.ts'
|
|
26
|
+
import { fetchChainsFromRpcs, loadChainWallet } from '../providers/index.ts'
|
|
28
27
|
|
|
29
28
|
// const MAX_QUEUE = 1000
|
|
30
29
|
// const MAX_EXECS_IN_BATCH = 1
|
|
@@ -33,6 +32,11 @@ import { fetchChainsFromRpcs } from '../providers/index.ts'
|
|
|
33
32
|
export const command = 'manualExec <tx-hash>'
|
|
34
33
|
export const describe = 'Execute manually pending or failed messages'
|
|
35
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Yargs builder for the manual-exec command.
|
|
37
|
+
* @param yargs - Yargs instance.
|
|
38
|
+
* @returns Configured yargs instance with command options.
|
|
39
|
+
*/
|
|
36
40
|
export const builder = (yargs: Argv) =>
|
|
37
41
|
yargs
|
|
38
42
|
.positional('tx-hash', {
|
|
@@ -93,70 +97,71 @@ export const builder = (yargs: Argv) =>
|
|
|
93
97
|
},
|
|
94
98
|
})
|
|
95
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Handler for the manual-exec command.
|
|
102
|
+
* @param argv - Command line arguments.
|
|
103
|
+
*/
|
|
96
104
|
export async function handler(argv: Awaited<ReturnType<typeof builder>['argv']> & GlobalOpts) {
|
|
97
|
-
|
|
98
|
-
let destroy
|
|
99
|
-
const destroy$ = new Promise((resolve) => {
|
|
100
|
-
destroy = resolve
|
|
101
|
-
})
|
|
105
|
+
const [controller, ctx] = getCtx(argv)
|
|
102
106
|
// argv.senderQueue
|
|
103
107
|
// ? manualExecSenderQueue(providers, argv.tx_hash, argv)
|
|
104
108
|
// : manualExec(argv, destroy$)
|
|
105
|
-
return manualExec(
|
|
109
|
+
return manualExec(ctx, argv)
|
|
106
110
|
.catch((err) => {
|
|
107
111
|
process.exitCode = 1
|
|
108
|
-
if (!logParsedError(err))
|
|
112
|
+
if (!logParsedError.call(ctx, err)) ctx.logger.error(err)
|
|
109
113
|
})
|
|
110
|
-
.finally(
|
|
114
|
+
.finally(() => controller.abort('Exited'))
|
|
111
115
|
}
|
|
112
116
|
|
|
113
117
|
async function manualExec(
|
|
118
|
+
ctx: Ctx,
|
|
114
119
|
argv: Awaited<ReturnType<typeof builder>['argv']> & GlobalOpts,
|
|
115
|
-
destroy: Promise<unknown>,
|
|
116
120
|
) {
|
|
121
|
+
const { logger } = ctx
|
|
117
122
|
// messageId not yet implemented for Solana
|
|
118
|
-
const [getChain, tx$] = fetchChainsFromRpcs(argv, argv.txHash
|
|
119
|
-
const tx = await tx$
|
|
120
|
-
const
|
|
121
|
-
const request = await selectRequest(await fetchCCIPRequestsInTx(tx), 'to know more', argv)
|
|
123
|
+
const [getChain, tx$] = fetchChainsFromRpcs(ctx, argv, argv.txHash)
|
|
124
|
+
const [source, tx] = await tx$
|
|
125
|
+
const request = await selectRequest(await source.fetchRequestsInTx(tx), 'to know more', argv)
|
|
122
126
|
|
|
123
127
|
switch (argv.format) {
|
|
124
128
|
case Format.log: {
|
|
125
129
|
const logPrefix = 'log' in request ? `message ${request.log.index} = ` : 'message = '
|
|
126
|
-
|
|
130
|
+
logger.log(logPrefix, withDateTimestamp(request))
|
|
127
131
|
break
|
|
128
132
|
}
|
|
129
133
|
case Format.pretty:
|
|
130
|
-
await prettyRequest(source, request)
|
|
134
|
+
await prettyRequest.call(ctx, source, request)
|
|
131
135
|
break
|
|
132
136
|
case Format.json:
|
|
133
|
-
|
|
137
|
+
logger.info(JSON.stringify(request, bigIntReplacer, 2))
|
|
134
138
|
break
|
|
135
139
|
}
|
|
136
140
|
|
|
137
141
|
const dest = await getChain(request.lane.destChainSelector)
|
|
138
|
-
const offRamp = await discoverOffRamp(source, dest, request.lane.onRamp)
|
|
142
|
+
const offRamp = await discoverOffRamp(source, dest, request.lane.onRamp, source)
|
|
139
143
|
const commitStore = await dest.getCommitStoreForOffRamp(offRamp)
|
|
140
144
|
const commit = await dest.fetchCommitReport(commitStore, request, argv)
|
|
141
145
|
|
|
142
146
|
switch (argv.format) {
|
|
143
147
|
case Format.log:
|
|
144
|
-
|
|
148
|
+
logger.log('commit =', commit)
|
|
145
149
|
break
|
|
146
150
|
case Format.pretty:
|
|
147
|
-
await prettyCommit(dest, commit, request)
|
|
151
|
+
await prettyCommit.call(ctx, dest, commit, request)
|
|
148
152
|
break
|
|
149
153
|
case Format.json:
|
|
150
|
-
|
|
154
|
+
logger.info(JSON.stringify(commit, bigIntReplacer, 2))
|
|
151
155
|
break
|
|
152
156
|
}
|
|
153
157
|
|
|
154
|
-
const messagesInBatch = await fetchAllMessagesInBatch(
|
|
158
|
+
const messagesInBatch = await source.fetchAllMessagesInBatch(request, commit.report, argv)
|
|
155
159
|
const execReportProof = calculateManualExecProof(
|
|
156
160
|
messagesInBatch,
|
|
157
161
|
request.lane,
|
|
158
162
|
request.message.header.messageId,
|
|
159
163
|
commit.report.merkleRoot,
|
|
164
|
+
dest,
|
|
160
165
|
)
|
|
161
166
|
|
|
162
167
|
const offchainTokenData = await source.fetchOffchainTokenData(request)
|
|
@@ -179,10 +184,10 @@ async function manualExec(
|
|
|
179
184
|
dest as unknown as EVMChain,
|
|
180
185
|
request as CCIPRequest<typeof CCIPVersion.V1_5 | typeof CCIPVersion.V1_6>,
|
|
181
186
|
)
|
|
182
|
-
|
|
187
|
+
logger.info('Estimated gasLimit override:', estimated)
|
|
183
188
|
estimated += Math.ceil((estimated * argv.estimateGasLimit) / 100)
|
|
184
189
|
if (request.message.gasLimit >= estimated) {
|
|
185
|
-
|
|
190
|
+
logger.warn(
|
|
186
191
|
'Estimated +',
|
|
187
192
|
argv.estimateGasLimit,
|
|
188
193
|
'% margin =',
|
|
@@ -196,9 +201,10 @@ async function manualExec(
|
|
|
196
201
|
}
|
|
197
202
|
}
|
|
198
203
|
|
|
199
|
-
const
|
|
204
|
+
const [, wallet] = await loadChainWallet(dest, argv)
|
|
205
|
+
const manualExecTx = await dest.executeReport(offRamp, execReport, { ...argv, wallet })
|
|
200
206
|
|
|
201
|
-
|
|
207
|
+
logger.info('🚀 manualExec tx =', manualExecTx.hash, 'to offRamp =', offRamp)
|
|
202
208
|
|
|
203
209
|
let found = false
|
|
204
210
|
for (const log of manualExecTx.logs) {
|
|
@@ -208,11 +214,12 @@ async function manualExec(
|
|
|
208
214
|
const receipt = { receipt: execReceipt, log, timestamp }
|
|
209
215
|
switch (argv.format) {
|
|
210
216
|
case Format.log:
|
|
211
|
-
|
|
217
|
+
logger.log('receipt =', withDateTimestamp(receipt))
|
|
212
218
|
break
|
|
213
219
|
case Format.pretty:
|
|
214
|
-
if (!found)
|
|
215
|
-
prettyReceipt(
|
|
220
|
+
if (!found) logger.info('Receipts (dest):')
|
|
221
|
+
prettyReceipt.call(
|
|
222
|
+
ctx,
|
|
216
223
|
receipt,
|
|
217
224
|
request,
|
|
218
225
|
receipt.log.tx?.from ??
|
|
@@ -220,7 +227,7 @@ async function manualExec(
|
|
|
220
227
|
)
|
|
221
228
|
break
|
|
222
229
|
case Format.json:
|
|
223
|
-
|
|
230
|
+
logger.info(JSON.stringify(execReceipt, bigIntReplacer, 2))
|
|
224
231
|
break
|
|
225
232
|
}
|
|
226
233
|
found = true
|
package/src/commands/parse.ts
CHANGED
|
@@ -2,13 +2,18 @@ import { bigIntReplacer, supportedChains } from '@chainlink/ccip-sdk/src/index.t
|
|
|
2
2
|
import type { Argv } from 'yargs'
|
|
3
3
|
|
|
4
4
|
import type { GlobalOpts } from '../index.ts'
|
|
5
|
-
import { Format } from './types.ts'
|
|
6
|
-
import { prettyTable } from './utils.ts'
|
|
5
|
+
import { type Ctx, Format } from './types.ts'
|
|
6
|
+
import { getCtx, prettyTable } from './utils.ts'
|
|
7
7
|
|
|
8
8
|
export const command = ['parse <data>', 'parseBytes <data>', 'parseData <data>']
|
|
9
9
|
export const describe =
|
|
10
10
|
'Try to parse and print errors, revert reasons or function call or event data'
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Yargs builder for the parse command.
|
|
14
|
+
* @param yargs - Yargs instance.
|
|
15
|
+
* @returns Configured yargs instance with command options.
|
|
16
|
+
*/
|
|
12
17
|
export const builder = (yargs: Argv) =>
|
|
13
18
|
yargs.positional('data', {
|
|
14
19
|
type: 'string',
|
|
@@ -16,16 +21,22 @@ export const builder = (yargs: Argv) =>
|
|
|
16
21
|
describe: 'router contract address on source',
|
|
17
22
|
})
|
|
18
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Handler for the parse command.
|
|
26
|
+
* @param argv - Command line arguments.
|
|
27
|
+
*/
|
|
19
28
|
export function handler(argv: Awaited<ReturnType<typeof builder>['argv']> & GlobalOpts) {
|
|
29
|
+
const [, ctx] = getCtx(argv)
|
|
20
30
|
try {
|
|
21
|
-
parseBytes(argv)
|
|
31
|
+
parseBytes(ctx, argv)
|
|
22
32
|
} catch (err) {
|
|
23
33
|
process.exitCode = 1
|
|
24
|
-
|
|
34
|
+
ctx.logger.error(err)
|
|
25
35
|
}
|
|
26
36
|
}
|
|
27
37
|
|
|
28
|
-
function parseBytes(argv: Parameters<typeof handler>[0]) {
|
|
38
|
+
function parseBytes(ctx: Ctx, argv: Parameters<typeof handler>[0]) {
|
|
39
|
+
const { logger } = ctx
|
|
29
40
|
let parsed
|
|
30
41
|
for (const chain of Object.values(supportedChains)) {
|
|
31
42
|
try {
|
|
@@ -39,14 +50,14 @@ function parseBytes(argv: Parameters<typeof handler>[0]) {
|
|
|
39
50
|
|
|
40
51
|
switch (argv.format) {
|
|
41
52
|
case Format.log: {
|
|
42
|
-
|
|
53
|
+
logger.log(`parsed =`, parsed)
|
|
43
54
|
break
|
|
44
55
|
}
|
|
45
56
|
case Format.pretty:
|
|
46
|
-
prettyTable(parsed)
|
|
57
|
+
prettyTable.call(ctx, parsed)
|
|
47
58
|
break
|
|
48
59
|
case Format.json:
|
|
49
|
-
|
|
60
|
+
logger.info(JSON.stringify(parsed, bigIntReplacer, 2))
|
|
50
61
|
break
|
|
51
62
|
}
|
|
52
63
|
}
|