@chainlink/ccip-cli 0.91.1 → 0.92.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 +60 -55
- package/dist/commands/manual-exec.d.ts +7 -1
- package/dist/commands/manual-exec.d.ts.map +1 -1
- package/dist/commands/manual-exec.js +16 -7
- package/dist/commands/manual-exec.js.map +1 -1
- package/dist/commands/parse.d.ts.map +1 -1
- package/dist/commands/parse.js +6 -5
- package/dist/commands/parse.js.map +1 -1
- package/dist/commands/send.d.ts +6 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +27 -22
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/show.d.ts +10 -1
- package/dist/commands/show.d.ts.map +1 -1
- package/dist/commands/show.js +85 -27
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/supported-tokens.d.ts.map +1 -1
- package/dist/commands/supported-tokens.js +6 -6
- package/dist/commands/supported-tokens.js.map +1 -1
- package/dist/commands/types.d.ts +4 -3
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/utils.d.ts +27 -7
- package/dist/commands/utils.d.ts.map +1 -1
- package/dist/commands/utils.js +97 -35
- package/dist/commands/utils.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/providers/aptos.d.ts.map +1 -1
- package/dist/providers/aptos.js +3 -5
- package/dist/providers/aptos.js.map +1 -1
- package/dist/providers/evm.d.ts.map +1 -1
- package/dist/providers/evm.js +2 -4
- package/dist/providers/evm.js.map +1 -1
- package/dist/providers/index.d.ts +9 -5
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +104 -71
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/solana.d.ts.map +1 -1
- package/dist/providers/solana.js +5 -4
- package/dist/providers/solana.js.map +1 -1
- package/dist/providers/sui.d.ts +10 -0
- package/dist/providers/sui.d.ts.map +1 -0
- package/dist/providers/sui.js +14 -0
- package/dist/providers/sui.js.map +1 -0
- package/dist/providers/ton.d.ts +13 -0
- package/dist/providers/ton.d.ts.map +1 -0
- package/dist/providers/ton.js +55 -0
- package/dist/providers/ton.js.map +1 -0
- package/package.json +13 -13
- package/src/commands/manual-exec.ts +18 -6
- package/src/commands/parse.ts +9 -5
- package/src/commands/send.ts +36 -28
- package/src/commands/show.ts +94 -31
- package/src/commands/supported-tokens.ts +6 -9
- package/src/commands/types.ts +4 -3
- package/src/commands/utils.ts +118 -43
- package/src/index.ts +4 -4
- package/src/providers/aptos.ts +3 -5
- package/src/providers/evm.ts +2 -4
- package/src/providers/index.ts +120 -94
- package/src/providers/solana.ts +5 -6
- package/src/providers/sui.ts +14 -0
- package/src/providers/ton.ts +62 -0
package/dist/providers/index.js
CHANGED
|
@@ -1,29 +1,22 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
1
2
|
import { readFile } from 'node:fs/promises';
|
|
2
|
-
import { ChainFamily, networkInfo, supportedChains, } from '@chainlink/ccip-sdk';
|
|
3
|
+
import { CCIPChainFamilyUnsupportedError, CCIPNetworkFamilyUnsupportedError, CCIPRpcNotFoundError, CCIPTransactionNotFoundError, ChainFamily, networkInfo, supportedChains, } from '@chainlink/ccip-sdk';
|
|
3
4
|
import { loadAptosWallet } from "./aptos.js";
|
|
4
5
|
import { loadEvmWallet } from "./evm.js";
|
|
5
6
|
import { loadSolanaWallet } from "./solana.js";
|
|
7
|
+
import { loadSuiWallet } from "./sui.js";
|
|
8
|
+
import { loadTonWallet } from "./ton.js";
|
|
6
9
|
const RPCS_RE = /\b(?:http|ws)s?:\/\/[\w/\\@&?%~#.,;:=+-]+/;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
}
|
|
20
|
-
async function collectEndpoints({ rpcs, 'rpcs-file': rpcsFile, }) {
|
|
21
|
-
const endpoints = new Set(rpcs || []);
|
|
10
|
+
async function collectEndpoints({ rpcs, rpcsFile }) {
|
|
11
|
+
const endpoints = new Set(rpcs
|
|
12
|
+
?.map((s) => s.split(','))
|
|
13
|
+
.flat()
|
|
14
|
+
.map((s) => s.trim()) || []);
|
|
22
15
|
for (const [env, val] of Object.entries(process.env)) {
|
|
23
16
|
if (env.startsWith('RPC_') && val && RPCS_RE.test(val))
|
|
24
17
|
endpoints.add(val);
|
|
25
18
|
}
|
|
26
|
-
if (rpcsFile) {
|
|
19
|
+
if (rpcsFile && existsSync(rpcsFile)) {
|
|
27
20
|
try {
|
|
28
21
|
const fileContent = await readFile(rpcsFile, 'utf8');
|
|
29
22
|
for (const line of fileContent.toString().split(/(?:\r\n|\r|\n)/g)) {
|
|
@@ -33,108 +26,148 @@ async function collectEndpoints({ rpcs, 'rpcs-file': rpcsFile, }) {
|
|
|
33
26
|
}
|
|
34
27
|
}
|
|
35
28
|
catch (error) {
|
|
36
|
-
|
|
29
|
+
this.logger.debug('Error reading RPCs file', error);
|
|
37
30
|
}
|
|
38
31
|
}
|
|
39
32
|
return endpoints;
|
|
40
33
|
}
|
|
41
34
|
/**
|
|
42
|
-
* Receives a list of rpcs and/or rpcs file, and loads them
|
|
43
|
-
*
|
|
35
|
+
* Receives a list of rpcs and/or rpcs file, and loads them concurrently for each chain family
|
|
36
|
+
* If txHash is provided, fetches matching families first and returns [chainGetter, txPromise];
|
|
37
|
+
* Otherwise, spawns racing URLs for each family asked by `getChain` getter
|
|
44
38
|
* @param ctx - Context object containing destroy$ promise and logger properties
|
|
45
39
|
* @param argv - Options containing rpcs (list) and/or rpcs file
|
|
46
40
|
* @param txHash - Optional txHash to fetch concurrently; causes the function to return a [ChainGetter, Promise<ChainTransaction>]
|
|
47
|
-
* @returns a ChainGetter (
|
|
41
|
+
* @returns a ChainGetter (if txHash was provided), or a tuple of [ChainGetter, Promise<ChainTransaction>]
|
|
48
42
|
*/
|
|
49
43
|
export function fetchChainsFromRpcs(ctx, argv, txHash) {
|
|
50
|
-
const { destroy$ } = ctx;
|
|
51
44
|
const chains = {};
|
|
52
45
|
const chainsCbs = {};
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
46
|
+
const finished = {};
|
|
47
|
+
const initFamily$ = {};
|
|
48
|
+
let endpoints$;
|
|
49
|
+
let txResolve, txReject;
|
|
50
|
+
const txResult = new Promise((resolve, reject) => {
|
|
51
|
+
txResolve = resolve;
|
|
52
|
+
txReject = reject;
|
|
53
|
+
});
|
|
54
|
+
const loadChainFamily = (F, txHash) => (initFamily$[F] ??= (endpoints$ ??= collectEndpoints.call(ctx, argv)).then((endpoints) => {
|
|
55
|
+
const C = supportedChains[F];
|
|
56
|
+
if (!C)
|
|
57
|
+
throw new CCIPNetworkFamilyUnsupportedError(F);
|
|
58
|
+
ctx.logger.debug('Racing', endpoints.size, 'RPC endpoints for', F);
|
|
59
|
+
const chains$ = [];
|
|
60
|
+
const txs$ = [];
|
|
57
61
|
let txFound = false;
|
|
58
|
-
for (const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
for (const url of endpoints) {
|
|
63
|
+
const chain$ = C.fromUrl(url, ctx);
|
|
64
|
+
chains$.push(chain$);
|
|
65
|
+
void chain$.then((chain) => {
|
|
66
|
+
endpoints.delete(url); // when resolved, remove from set so it isn't tried for future families
|
|
67
|
+
// on chain detected for url
|
|
68
|
+
if (chain.network.name in chains && !(chain.network.name in chainsCbs))
|
|
69
|
+
return chain.destroy?.(); // but lost race, cleanup right away
|
|
70
|
+
// keep and schedule cleanup on shutdown
|
|
71
|
+
if (chain.destroy)
|
|
72
|
+
void ctx.destroy$.finally(chain.destroy.bind(chain));
|
|
73
|
+
if (!(chain.network.name in chains)) {
|
|
74
|
+
// chain won for this network, but was not "asked" by getChain (yet?): save
|
|
75
|
+
chains[chain.network.name] = Promise.resolve(chain);
|
|
76
|
+
}
|
|
77
|
+
else if (chain.network.name in chainsCbs) {
|
|
78
|
+
// chain detected, and there's a "pending request" by getChain: resolve
|
|
79
|
+
const [resolve] = chainsCbs[chain.network.name];
|
|
80
|
+
resolve(chain);
|
|
81
|
+
}
|
|
82
|
+
return chain;
|
|
83
|
+
}, () => { });
|
|
84
|
+
if (txHash) {
|
|
85
|
+
txs$.push(chain$.then(async (chain) => {
|
|
86
|
+
const tx = await chain.getTransaction(txHash);
|
|
87
|
+
if (!txFound) {
|
|
66
88
|
txFound = true;
|
|
67
|
-
// in case tx is found, prefer it over any previously found chain
|
|
89
|
+
// in case tx is first found, prefer it over any previously found chain for this network
|
|
68
90
|
chains[chain.network.name] = chain$;
|
|
69
91
|
delete chainsCbs[chain.network.name];
|
|
70
|
-
}, () => { });
|
|
71
|
-
txs.push(tx$);
|
|
72
|
-
}
|
|
73
|
-
pendingPromises.push(chain$.then((chain) => {
|
|
74
|
-
if (chain.network.name in chains && !(chain.network.name in chainsCbs))
|
|
75
|
-
return chain.destroy?.(); // lost race
|
|
76
|
-
destroy$.addEventListener('abort', () => {
|
|
77
|
-
void chain.destroy?.(); // cleanup
|
|
78
|
-
});
|
|
79
|
-
if (!(chain.network.name in chains)) {
|
|
80
|
-
chains[chain.network.name] = Promise.resolve(chain);
|
|
81
|
-
}
|
|
82
|
-
else if (chain.network.name in chainsCbs) {
|
|
83
|
-
const [resolve] = chainsCbs[chain.network.name];
|
|
84
|
-
resolve(chain);
|
|
85
92
|
}
|
|
93
|
+
txResolve([chain, tx]);
|
|
86
94
|
}));
|
|
87
95
|
}
|
|
88
96
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
void Promise.race([Promise.allSettled(chains$), ctx.destroy$]).finally(() => {
|
|
98
|
+
if (finished[F])
|
|
99
|
+
return;
|
|
100
|
+
finished[F] = true;
|
|
101
|
+
Object.entries(chainsCbs)
|
|
102
|
+
.filter(([name]) => networkInfo(name).family === F)
|
|
103
|
+
.forEach(([name, [_, reject]]) => reject(new CCIPRpcNotFoundError(name)));
|
|
93
104
|
});
|
|
94
|
-
return Promise.any(txs);
|
|
95
|
-
});
|
|
105
|
+
return Promise.any(txHash ? txs$ : chains$);
|
|
106
|
+
}));
|
|
96
107
|
const chainGetter = async (idOrSelectorOrName) => {
|
|
97
108
|
const network = networkInfo(idOrSelectorOrName);
|
|
98
109
|
if (network.name in chains)
|
|
99
110
|
return chains[network.name];
|
|
100
|
-
if (finished)
|
|
101
|
-
throw new
|
|
111
|
+
if (finished[network.family])
|
|
112
|
+
throw new CCIPRpcNotFoundError(network.name);
|
|
102
113
|
chains[network.name] = new Promise((resolve, reject) => {
|
|
103
114
|
chainsCbs[network.name] = [resolve, reject];
|
|
104
115
|
});
|
|
105
116
|
void chains[network.name].finally(() => {
|
|
106
|
-
delete chainsCbs[network.name];
|
|
117
|
+
delete chainsCbs[network.name]; // when chain is settled, delete the callbacks
|
|
107
118
|
});
|
|
119
|
+
void loadChainFamily(network.family);
|
|
108
120
|
return chains[network.name];
|
|
109
121
|
};
|
|
110
|
-
if (txHash)
|
|
111
|
-
return [chainGetter, init$];
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
void init$.catch(() => { });
|
|
122
|
+
if (!txHash)
|
|
115
123
|
return chainGetter;
|
|
116
|
-
|
|
124
|
+
void Promise.allSettled(Object.values(supportedChains)
|
|
125
|
+
.filter((C) => C.isTxHash(txHash))
|
|
126
|
+
.map((C) => loadChainFamily(C.family, txHash))).finally(() => txReject(new CCIPTransactionNotFoundError(txHash))); // noop if txResolved
|
|
127
|
+
return [chainGetter, txResult];
|
|
117
128
|
}
|
|
118
129
|
/**
|
|
119
130
|
* Load chain-specific wallet for given chain
|
|
120
131
|
* @param chain - Chain instance to load wallet for
|
|
121
|
-
* @param
|
|
132
|
+
* @param argv - Wallet options (as passed from yargs argv)
|
|
122
133
|
* @returns Promise to chain-specific wallet instance
|
|
123
134
|
*/
|
|
124
|
-
export async function loadChainWallet(chain,
|
|
135
|
+
export async function loadChainWallet(chain, argv) {
|
|
136
|
+
// Centralized wallet resolution: check env vars first, then rpcsFile
|
|
137
|
+
if (!argv.wallet) {
|
|
138
|
+
argv.wallet = process.env['PRIVATE_KEY'] || process.env['USER_KEY'] || process.env['OWNER_KEY'];
|
|
139
|
+
}
|
|
140
|
+
if (!argv.wallet && argv.rpcsFile && existsSync(argv.rpcsFile)) {
|
|
141
|
+
try {
|
|
142
|
+
const file = readFileSync(argv.rpcsFile, 'utf8');
|
|
143
|
+
const match = file.match(/^\s*(PRIVATE_KEY|USER_KEY|OWNER_KEY)=(\S+)/m);
|
|
144
|
+
if (match)
|
|
145
|
+
argv.wallet = match[2];
|
|
146
|
+
}
|
|
147
|
+
catch (_) {
|
|
148
|
+
// pass
|
|
149
|
+
}
|
|
150
|
+
}
|
|
125
151
|
let wallet;
|
|
126
152
|
switch (chain.network.family) {
|
|
127
153
|
case ChainFamily.EVM:
|
|
128
|
-
wallet = await loadEvmWallet(chain.provider,
|
|
154
|
+
wallet = await loadEvmWallet(chain.provider, argv);
|
|
129
155
|
return [await wallet.getAddress(), wallet];
|
|
130
156
|
case ChainFamily.Solana:
|
|
131
|
-
wallet = await loadSolanaWallet(
|
|
157
|
+
wallet = await loadSolanaWallet(argv);
|
|
132
158
|
return [wallet.publicKey.toBase58(), wallet];
|
|
133
159
|
case ChainFamily.Aptos:
|
|
134
|
-
wallet = await loadAptosWallet(
|
|
160
|
+
wallet = await loadAptosWallet(argv);
|
|
135
161
|
return [wallet.accountAddress.toString(), wallet];
|
|
162
|
+
case ChainFamily.Sui:
|
|
163
|
+
wallet = loadSuiWallet(argv);
|
|
164
|
+
return [wallet.toSuiAddress(), wallet];
|
|
165
|
+
case ChainFamily.TON:
|
|
166
|
+
wallet = await loadTonWallet(argv);
|
|
167
|
+
return [wallet.contract.address.toString(), wallet];
|
|
136
168
|
default:
|
|
137
|
-
|
|
169
|
+
// TypeScript exhaustiveness check - this should never be reached
|
|
170
|
+
throw new CCIPChainFamilyUnsupportedError(chain.network.family);
|
|
138
171
|
}
|
|
139
172
|
}
|
|
140
173
|
//# 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,EAKL,WAAW,EACX,WAAW,EACX,eAAe,GAChB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CAiBnD"}
|
package/dist/providers/solana.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import
|
|
2
|
+
import { CCIPArgumentInvalidError, CCIPNotImplementedError } from '@chainlink/ccip-sdk';
|
|
3
3
|
import { Wallet as AnchorWallet } from '@coral-xyz/anchor';
|
|
4
4
|
import SolanaLedger from '@ledgerhq/hw-app-solana';
|
|
5
5
|
import HIDTransport from '@ledgerhq/hw-transport-node-hid';
|
|
@@ -73,7 +73,7 @@ export class LedgerSolanaWallet {
|
|
|
73
73
|
}
|
|
74
74
|
/** Payer property - not available on Ledger. */
|
|
75
75
|
get payer() {
|
|
76
|
-
throw new
|
|
76
|
+
throw new CCIPNotImplementedError('payer for Ledger');
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
@@ -82,11 +82,12 @@ export class LedgerSolanaWallet {
|
|
|
82
82
|
* @returns Promise to Anchor Wallet instance
|
|
83
83
|
*/
|
|
84
84
|
export async function loadSolanaWallet({ wallet: walletOpt, } = {}) {
|
|
85
|
+
// Default to Solana's standard keypair location if no wallet provided
|
|
85
86
|
if (!walletOpt)
|
|
86
|
-
walletOpt =
|
|
87
|
+
walletOpt = '~/.config/solana/id.json';
|
|
87
88
|
let wallet;
|
|
88
89
|
if (typeof walletOpt !== 'string')
|
|
89
|
-
throw new
|
|
90
|
+
throw new CCIPArgumentInvalidError('wallet', String(walletOpt));
|
|
90
91
|
wallet = walletOpt;
|
|
91
92
|
if (walletOpt === 'ledger' || walletOpt.startsWith('ledger:')) {
|
|
92
93
|
let derivationPath = walletOpt.split(':')[1];
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"solana.js","sourceRoot":"","sources":["../../src/providers/solana.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
|
|
2
|
+
/**
|
|
3
|
+
* Loads a Sui wallet from the provided options.
|
|
4
|
+
* @param wallet - wallet options (as passed from yargs argv)
|
|
5
|
+
* @returns Sui Keypair instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadSuiWallet({ wallet: walletOpt }: {
|
|
8
|
+
wallet?: unknown;
|
|
9
|
+
}): Ed25519Keypair;
|
|
10
|
+
//# sourceMappingURL=sui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sui.d.ts","sourceRoot":"","sources":["../../src/providers/sui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,kBAKxE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CCIPArgumentInvalidError, bytesToBuffer } from '@chainlink/ccip-sdk';
|
|
2
|
+
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
|
|
3
|
+
/**
|
|
4
|
+
* Loads a Sui wallet from the provided options.
|
|
5
|
+
* @param wallet - wallet options (as passed from yargs argv)
|
|
6
|
+
* @returns Sui Keypair instance
|
|
7
|
+
*/
|
|
8
|
+
export function loadSuiWallet({ wallet: walletOpt }) {
|
|
9
|
+
if (typeof walletOpt !== 'string')
|
|
10
|
+
throw new CCIPArgumentInvalidError('wallet', String(walletOpt));
|
|
11
|
+
const keyBytes = bytesToBuffer(walletOpt);
|
|
12
|
+
return Ed25519Keypair.fromSecretKey(keyBytes);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=sui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sui.js","sourceRoot":"","sources":["../../src/providers/sui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAwB;IACvE,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,MAAM,IAAI,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;IAElG,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,CAAA;IACzC,OAAO,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC/C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { WalletContractV4 } from '@ton/ton';
|
|
2
|
+
/**
|
|
3
|
+
* Loads a TON wallet from the provided options.
|
|
4
|
+
* @param wallet - wallet options (as passed from yargs argv)
|
|
5
|
+
* @returns Promise to TONWallet instance
|
|
6
|
+
*/
|
|
7
|
+
export declare function loadTonWallet({ wallet: walletOpt }?: {
|
|
8
|
+
wallet?: unknown;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
contract: WalletContractV4;
|
|
11
|
+
keyPair: import("@ton/crypto").KeyPair;
|
|
12
|
+
}>;
|
|
13
|
+
//# sourceMappingURL=ton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../src/providers/ton.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO;;;GAkDnF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { CCIPArgumentInvalidError, CCIPWalletInvalidError } from '@chainlink/ccip-sdk';
|
|
3
|
+
import { keyPairFromSecretKey, mnemonicToPrivateKey } from '@ton/crypto';
|
|
4
|
+
import { WalletContractV4 } from '@ton/ton';
|
|
5
|
+
/**
|
|
6
|
+
* Loads a TON wallet from the provided options.
|
|
7
|
+
* @param wallet - wallet options (as passed from yargs argv)
|
|
8
|
+
* @returns Promise to TONWallet instance
|
|
9
|
+
*/
|
|
10
|
+
export async function loadTonWallet({ wallet: walletOpt } = {}) {
|
|
11
|
+
if (typeof walletOpt !== 'string')
|
|
12
|
+
throw new CCIPWalletInvalidError(walletOpt);
|
|
13
|
+
// Handle mnemonic phrase
|
|
14
|
+
if (walletOpt.includes(' ')) {
|
|
15
|
+
const mnemonic = walletOpt.trim().split(' ');
|
|
16
|
+
const keyPair = await mnemonicToPrivateKey(mnemonic);
|
|
17
|
+
const contract = WalletContractV4.create({
|
|
18
|
+
workchain: 0,
|
|
19
|
+
publicKey: keyPair.publicKey,
|
|
20
|
+
});
|
|
21
|
+
return { contract, keyPair };
|
|
22
|
+
}
|
|
23
|
+
// Handle hex private key
|
|
24
|
+
if (walletOpt.startsWith('0x')) {
|
|
25
|
+
const secretKey = Buffer.from(walletOpt.slice(2), 'hex');
|
|
26
|
+
if (secretKey.length === 32) {
|
|
27
|
+
throw new CCIPArgumentInvalidError('wallet', '32-byte seeds not supported. Use 64-byte secret key or mnemonic.');
|
|
28
|
+
}
|
|
29
|
+
if (secretKey.length !== 64) {
|
|
30
|
+
throw new CCIPArgumentInvalidError('wallet', 'must be 64 bytes (or use mnemonic)');
|
|
31
|
+
}
|
|
32
|
+
const keyPair = keyPairFromSecretKey(secretKey);
|
|
33
|
+
const contract = WalletContractV4.create({
|
|
34
|
+
workchain: 0,
|
|
35
|
+
publicKey: keyPair.publicKey,
|
|
36
|
+
});
|
|
37
|
+
return { contract, keyPair };
|
|
38
|
+
}
|
|
39
|
+
// Handle file path
|
|
40
|
+
if (existsSync(walletOpt)) {
|
|
41
|
+
const content = readFileSync(walletOpt, 'utf8').trim();
|
|
42
|
+
const secretKey = Buffer.from(content.startsWith('0x') ? content.slice(2) : content, 'hex');
|
|
43
|
+
if (secretKey.length !== 64) {
|
|
44
|
+
throw new CCIPArgumentInvalidError('wallet', 'Invalid private key in file: must be 64 bytes');
|
|
45
|
+
}
|
|
46
|
+
const keyPair = keyPairFromSecretKey(secretKey);
|
|
47
|
+
const contract = WalletContractV4.create({
|
|
48
|
+
workchain: 0,
|
|
49
|
+
publicKey: keyPair.publicKey,
|
|
50
|
+
});
|
|
51
|
+
return { contract, keyPair };
|
|
52
|
+
}
|
|
53
|
+
throw new CCIPArgumentInvalidError('wallet', 'Wallet not specified');
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=ton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ton.js","sourceRoot":"","sources":["../../src/providers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAElD,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AACnG,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,KAA2B,EAAE;IAClF,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,MAAM,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAA;IAE9E,yBAAyB;IACzB,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACvC,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAA;QACF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IAC9B,CAAC;IAED,yBAAyB;IACzB,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QACxD,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,wBAAwB,CAChC,QAAQ,EACR,kEAAkE,CACnE,CAAA;QACH,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,wBAAwB,CAAC,QAAQ,EAAE,oCAAoC,CAAC,CAAA;QACpF,CAAC;QACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACvC,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAA;QACF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IAC9B,CAAC;IAED,mBAAmB;IACnB,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;QACtD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC3F,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,wBAAwB,CAAC,QAAQ,EAAE,+CAA+C,CAAC,CAAA;QAC/F,CAAC;QACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACvC,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAA;QACF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,IAAI,wBAAwB,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAA;AACtE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainlink/ccip-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.92.1",
|
|
4
4
|
"description": "CCIP Command Line Interface, based on @chainlink/ccip-sdk",
|
|
5
5
|
"author": "Chainlink devs",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,34 +28,34 @@
|
|
|
28
28
|
"!**/__mocks__"
|
|
29
29
|
],
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@eslint/js": "^9.39.
|
|
32
|
-
"@types/node": "
|
|
31
|
+
"@eslint/js": "^9.39.2",
|
|
32
|
+
"@types/node": "25.0.3",
|
|
33
33
|
"@types/yargs": "17.0.35",
|
|
34
|
-
"eslint": "^9.39.
|
|
34
|
+
"eslint": "^9.39.2",
|
|
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.
|
|
38
|
+
"eslint-plugin-jsdoc": "^61.5.0",
|
|
39
39
|
"eslint-plugin-prettier": "^5.5.4",
|
|
40
40
|
"eslint-plugin-tsdoc": "^0.5.0",
|
|
41
41
|
"prettier": "^3.7.4",
|
|
42
42
|
"tsx": "4.21.0",
|
|
43
43
|
"typescript": "5.9.3",
|
|
44
|
-
"typescript-eslint": "8.
|
|
44
|
+
"typescript-eslint": "8.50.0"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@aptos-labs/ts-sdk": "^5.
|
|
48
|
-
"@chainlink/ccip-sdk": "^0.
|
|
47
|
+
"@aptos-labs/ts-sdk": "^5.2.0",
|
|
48
|
+
"@chainlink/ccip-sdk": "^0.92.1",
|
|
49
49
|
"@coral-xyz/anchor": "^0.29.0",
|
|
50
50
|
"@ethers-ext/signer-ledger": "^6.0.0-beta.1",
|
|
51
|
-
"@inquirer/prompts": "8.0
|
|
52
|
-
"@ledgerhq/hw-app-aptos": "^6.34.
|
|
53
|
-
"@ledgerhq/hw-app-solana": "^7.6.
|
|
54
|
-
"@ledgerhq/hw-transport-node-hid": "^6.29.
|
|
51
|
+
"@inquirer/prompts": "8.1.0",
|
|
52
|
+
"@ledgerhq/hw-app-aptos": "^6.34.10",
|
|
53
|
+
"@ledgerhq/hw-app-solana": "^7.6.1",
|
|
54
|
+
"@ledgerhq/hw-transport-node-hid": "^6.29.15",
|
|
55
55
|
"@solana/web3.js": "^1.98.4",
|
|
56
56
|
"bs58": "^6.0.0",
|
|
57
57
|
"ethers": "6.16.0",
|
|
58
|
-
"type-fest": "^5.3.
|
|
58
|
+
"type-fest": "^5.3.1",
|
|
59
59
|
"yargs": "18.0.0"
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -4,11 +4,14 @@ import {
|
|
|
4
4
|
type ChainStatic,
|
|
5
5
|
type EVMChain,
|
|
6
6
|
type ExecutionReport,
|
|
7
|
+
CCIPChainFamilyUnsupportedError,
|
|
8
|
+
CCIPReceiptNotFoundError,
|
|
7
9
|
ChainFamily,
|
|
8
10
|
bigIntReplacer,
|
|
9
11
|
calculateManualExecProof,
|
|
10
12
|
discoverOffRamp,
|
|
11
13
|
estimateExecGasForRequest,
|
|
14
|
+
isSupportedTxHash,
|
|
12
15
|
} from '@chainlink/ccip-sdk/src/index.ts'
|
|
13
16
|
import type { Argv } from 'yargs'
|
|
14
17
|
|
|
@@ -44,6 +47,7 @@ export const builder = (yargs: Argv) =>
|
|
|
44
47
|
demandOption: true,
|
|
45
48
|
describe: 'transaction hash of the request (source) message',
|
|
46
49
|
})
|
|
50
|
+
.check(({ txHash }) => isSupportedTxHash(txHash))
|
|
47
51
|
.options({
|
|
48
52
|
'log-index': {
|
|
49
53
|
type: 'number',
|
|
@@ -84,6 +88,12 @@ export const builder = (yargs: Argv) =>
|
|
|
84
88
|
describe:
|
|
85
89
|
'Clears buffers (if a previous attempt was aborted) or any ALT owned by this sender.',
|
|
86
90
|
},
|
|
91
|
+
'receiver-object-ids': {
|
|
92
|
+
type: 'array',
|
|
93
|
+
describe: 'Receiver object IDs for Sui execution (if executing on Sui destination)',
|
|
94
|
+
string: true,
|
|
95
|
+
example: '--receiver-object-ids 0xabc... 0xdef...',
|
|
96
|
+
},
|
|
87
97
|
'sender-queue': {
|
|
88
98
|
type: 'boolean',
|
|
89
99
|
describe: 'Execute all messages in sender queue, starting with the provided tx',
|
|
@@ -102,7 +112,7 @@ export const builder = (yargs: Argv) =>
|
|
|
102
112
|
* @param argv - Command line arguments.
|
|
103
113
|
*/
|
|
104
114
|
export async function handler(argv: Awaited<ReturnType<typeof builder>['argv']> & GlobalOpts) {
|
|
105
|
-
const [
|
|
115
|
+
const [ctx, destroy] = getCtx(argv)
|
|
106
116
|
// argv.senderQueue
|
|
107
117
|
// ? manualExecSenderQueue(providers, argv.tx_hash, argv)
|
|
108
118
|
// : manualExec(argv, destroy$)
|
|
@@ -111,7 +121,7 @@ export async function handler(argv: Awaited<ReturnType<typeof builder>['argv']>
|
|
|
111
121
|
process.exitCode = 1
|
|
112
122
|
if (!logParsedError.call(ctx, err)) ctx.logger.error(err)
|
|
113
123
|
})
|
|
114
|
-
.finally(
|
|
124
|
+
.finally(destroy)
|
|
115
125
|
}
|
|
116
126
|
|
|
117
127
|
async function manualExec(
|
|
@@ -159,7 +169,7 @@ async function manualExec(
|
|
|
159
169
|
const execReportProof = calculateManualExecProof(
|
|
160
170
|
messagesInBatch,
|
|
161
171
|
request.lane,
|
|
162
|
-
request.message.
|
|
172
|
+
request.message.messageId,
|
|
163
173
|
commit.report.merkleRoot,
|
|
164
174
|
dest,
|
|
165
175
|
)
|
|
@@ -168,7 +178,7 @@ async function manualExec(
|
|
|
168
178
|
const execReport: ExecutionReport = {
|
|
169
179
|
...execReportProof,
|
|
170
180
|
message: request.message,
|
|
171
|
-
offchainTokenData
|
|
181
|
+
offchainTokenData,
|
|
172
182
|
}
|
|
173
183
|
|
|
174
184
|
if (
|
|
@@ -177,7 +187,9 @@ async function manualExec(
|
|
|
177
187
|
'extraArgs' in request.message
|
|
178
188
|
) {
|
|
179
189
|
if (dest.network.family !== ChainFamily.EVM)
|
|
180
|
-
throw new
|
|
190
|
+
throw new CCIPChainFamilyUnsupportedError(dest.network.family, {
|
|
191
|
+
context: { feature: 'gas estimation' },
|
|
192
|
+
})
|
|
181
193
|
|
|
182
194
|
let estimated = await estimateExecGasForRequest(
|
|
183
195
|
source,
|
|
@@ -232,7 +244,7 @@ async function manualExec(
|
|
|
232
244
|
}
|
|
233
245
|
found = true
|
|
234
246
|
}
|
|
235
|
-
if (!found) throw new
|
|
247
|
+
if (!found) throw new CCIPReceiptNotFoundError(manualExecTx.hash)
|
|
236
248
|
}
|
|
237
249
|
|
|
238
250
|
/*
|