@chainlink/ccip-cli 0.93.0 → 0.94.0
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/dist/commands/send.d.ts +1 -1
- package/dist/commands/send.js +19 -40
- package/dist/commands/send.js.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +16 -13
- package/src/commands/send.ts +23 -44
- package/src/index.ts +1 -1
package/dist/commands/send.d.ts
CHANGED
|
@@ -29,7 +29,6 @@ export declare const builder: (yargs: Argv) => Argv<import("yargs").Omit<{
|
|
|
29
29
|
alias: string[];
|
|
30
30
|
type: "number";
|
|
31
31
|
describe: string;
|
|
32
|
-
default: number;
|
|
33
32
|
};
|
|
34
33
|
'estimate-gas-limit': {
|
|
35
34
|
type: "number";
|
|
@@ -63,6 +62,7 @@ export declare const builder: (yargs: Argv) => Argv<import("yargs").Omit<{
|
|
|
63
62
|
describe: string;
|
|
64
63
|
};
|
|
65
64
|
account: {
|
|
65
|
+
alias: string;
|
|
66
66
|
type: "array";
|
|
67
67
|
string: true;
|
|
68
68
|
describe: string;
|
package/dist/commands/send.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CCIPArgumentInvalidError, CCIPChainFamilyUnsupportedError, CCIPTokenNotFoundError, ChainFamily, estimateExecGasForRequest, getDataBytes, networkInfo, sourceToDestTokenAmounts, } from '@chainlink/ccip-sdk';
|
|
2
|
-
import {
|
|
2
|
+
import { formatUnits, toUtf8Bytes } from 'ethers';
|
|
3
3
|
import { showRequests } from "./show.js";
|
|
4
4
|
import { getCtx, logParsedError, parseTokenAmounts } from "./utils.js";
|
|
5
5
|
import { fetchChainsFromRpcs, loadChainWallet } from "../providers/index.js";
|
|
@@ -44,7 +44,6 @@ export const builder = (yargs) => yargs
|
|
|
44
44
|
alias: ['L', 'compute-units'],
|
|
45
45
|
type: 'number',
|
|
46
46
|
describe: 'Gas limit for receiver callback execution; defaults to default configured on ramps',
|
|
47
|
-
default: 0,
|
|
48
47
|
},
|
|
49
48
|
'estimate-gas-limit': {
|
|
50
49
|
type: 'number',
|
|
@@ -78,9 +77,10 @@ export const builder = (yargs) => yargs
|
|
|
78
77
|
describe: "Address of the Solana tokenReceiver (if different than program's receiver)",
|
|
79
78
|
},
|
|
80
79
|
account: {
|
|
80
|
+
alias: 'receiver-object-id',
|
|
81
81
|
type: 'array',
|
|
82
82
|
string: true,
|
|
83
|
-
describe: 'List of accounts needed by Solana receiver program; append `=rw` to specify account as writable; can be specified multiple times',
|
|
83
|
+
describe: 'List of accounts needed by Solana receiver program, or receiverObjectIds needed by Sui; On Solana, append `=rw` to specify account as writable; can be specified multiple times',
|
|
84
84
|
example: 'requiredPdaAddress=rw',
|
|
85
85
|
},
|
|
86
86
|
'only-get-fee': {
|
|
@@ -131,30 +131,14 @@ async function sendMessage(ctx, argv) {
|
|
|
131
131
|
data = toUtf8Bytes(argv.data);
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
-
else {
|
|
135
|
-
data = '0x';
|
|
136
|
-
}
|
|
137
134
|
const tokenAmounts = argv.transferTokens?.length
|
|
138
135
|
? await parseTokenAmounts(source, argv.transferTokens)
|
|
139
136
|
: [];
|
|
140
137
|
let receiver = argv.receiver;
|
|
141
|
-
let tokenReceiver;
|
|
142
138
|
let accounts, accountIsWritableBitmap = 0n;
|
|
143
139
|
if (destNetwork.family === ChainFamily.Solana) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
else if (!tokenAmounts.length) {
|
|
147
|
-
tokenReceiver = '11111111111111111111111111111111';
|
|
148
|
-
}
|
|
149
|
-
else if (!dataLength(data)) {
|
|
150
|
-
// sending tokens without data, i.e. not for a receiver contract
|
|
151
|
-
tokenReceiver = receiver;
|
|
152
|
-
receiver = '11111111111111111111111111111111';
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
throw new CCIPArgumentInvalidError('token-receiver', 'required when sending tokens with data to Solana');
|
|
156
|
-
}
|
|
157
|
-
if (argv.account) {
|
|
140
|
+
// parse accounts with or without `=rw` suffix
|
|
141
|
+
if (argv.account?.length) {
|
|
158
142
|
accounts = argv.account.map((account, i) => {
|
|
159
143
|
if (account.endsWith('=rw')) {
|
|
160
144
|
accountIsWritableBitmap |= 1n << BigInt(i);
|
|
@@ -163,11 +147,6 @@ async function sendMessage(ctx, argv) {
|
|
|
163
147
|
return account;
|
|
164
148
|
});
|
|
165
149
|
}
|
|
166
|
-
else
|
|
167
|
-
accounts = [];
|
|
168
|
-
}
|
|
169
|
-
else if (argv.tokenReceiver || argv.account?.length) {
|
|
170
|
-
throw new CCIPArgumentInvalidError('token-receiver/account', 'only valid for Solana destination');
|
|
171
150
|
}
|
|
172
151
|
let walletAddress, wallet;
|
|
173
152
|
if (!receiver) {
|
|
@@ -198,7 +177,7 @@ async function sendMessage(ctx, argv) {
|
|
|
198
177
|
message: {
|
|
199
178
|
sender: walletAddress,
|
|
200
179
|
receiver,
|
|
201
|
-
data,
|
|
180
|
+
data: data || '0x',
|
|
202
181
|
tokenAmounts: destTokenAmounts,
|
|
203
182
|
},
|
|
204
183
|
});
|
|
@@ -207,17 +186,19 @@ async function sendMessage(ctx, argv) {
|
|
|
207
186
|
if (argv.onlyEstimate)
|
|
208
187
|
return;
|
|
209
188
|
}
|
|
210
|
-
//
|
|
211
|
-
//
|
|
189
|
+
// builds a catch-all extraArgs object, which can be massaged by
|
|
190
|
+
// [[Chain.buildMessageForDest]] to create suitable extraArgs with defaults if needed
|
|
212
191
|
const extraArgs = {
|
|
213
|
-
...(argv.allowOutOfOrderExec != null
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
...(
|
|
217
|
-
? {
|
|
218
|
-
:
|
|
219
|
-
|
|
220
|
-
|
|
192
|
+
...(argv.allowOutOfOrderExec != null && {
|
|
193
|
+
allowOutOfOrderExecution: !!argv.allowOutOfOrderExec,
|
|
194
|
+
}),
|
|
195
|
+
...(argv.gasLimit == null
|
|
196
|
+
? {}
|
|
197
|
+
: destNetwork.family === ChainFamily.Solana
|
|
198
|
+
? { computeUnits: BigInt(argv.gasLimit) }
|
|
199
|
+
: { gasLimit: BigInt(argv.gasLimit) }),
|
|
200
|
+
...(!!argv.tokenReceiver && { tokenReceiver: argv.tokenReceiver }),
|
|
201
|
+
...(!!accounts && { accounts, accountIsWritableBitmap }), // accounts also used as Sui receiverObjectIds
|
|
221
202
|
};
|
|
222
203
|
let feeToken, feeTokenInfo;
|
|
223
204
|
if (argv.feeToken) {
|
|
@@ -269,9 +250,7 @@ async function sendMessage(ctx, argv) {
|
|
|
269
250
|
message: { ...message, fee },
|
|
270
251
|
wallet,
|
|
271
252
|
});
|
|
272
|
-
logger.info('🚀 Sending message to',
|
|
273
|
-
? tokenReceiver
|
|
274
|
-
: receiver, '@', destNetwork.name, ', tx =>', request.tx.hash, ', messageId =>', request.message.messageId);
|
|
253
|
+
logger.info('🚀 Sending message to', receiver, '@', destNetwork.name, ', tx =>', request.tx.hash, ', messageId =>', request.message.messageId);
|
|
275
254
|
await showRequests(ctx, {
|
|
276
255
|
...argv,
|
|
277
256
|
txHash: request.tx.hash,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,wBAAwB,EACxB,+BAA+B,EAC/B,sBAAsB,EACtB,WAAW,EACX,yBAAyB,EACzB,YAAY,EACZ,WAAW,EACX,wBAAwB,GACzB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAkB,
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { Format } from "./commands/index.js";
|
|
|
8
8
|
util.inspect.defaultOptions.depth = 6; // print down to tokenAmounts in requests
|
|
9
9
|
// generate:nofail
|
|
10
10
|
// `const VERSION = '${require('./package.json').version}-${require('child_process').execSync('git rev-parse --short HEAD').toString().trim()}'`
|
|
11
|
-
const VERSION = '0.
|
|
11
|
+
const VERSION = '0.94.0-aac4ae6';
|
|
12
12
|
// generate:end
|
|
13
13
|
const globalOpts = {
|
|
14
14
|
rpcs: {
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chainlink/ccip-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.94.0",
|
|
4
4
|
"description": "CCIP Command Line Interface, based on @chainlink/ccip-sdk",
|
|
5
5
|
"author": "Chainlink devs",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"repository":
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/smartcontractkit/ccip-tools-ts.git"
|
|
10
|
+
},
|
|
8
11
|
"type": "module",
|
|
9
12
|
"bin": "dist/index.js",
|
|
10
13
|
"scripts": {
|
|
@@ -29,34 +32,34 @@
|
|
|
29
32
|
],
|
|
30
33
|
"devDependencies": {
|
|
31
34
|
"@eslint/js": "^9.39.2",
|
|
32
|
-
"@types/node": "25.0.
|
|
35
|
+
"@types/node": "25.0.8",
|
|
33
36
|
"@types/yargs": "17.0.35",
|
|
34
37
|
"eslint": "^9.39.2",
|
|
35
38
|
"eslint-config-prettier": "10.1.8",
|
|
36
39
|
"eslint-import-resolver-typescript": "4.4.4",
|
|
37
40
|
"eslint-plugin-import": "^2.32.0",
|
|
38
|
-
"eslint-plugin-jsdoc": "^
|
|
39
|
-
"eslint-plugin-prettier": "^5.5.
|
|
41
|
+
"eslint-plugin-jsdoc": "^62.0.0",
|
|
42
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
40
43
|
"eslint-plugin-tsdoc": "^0.5.0",
|
|
41
44
|
"prettier": "^3.7.4",
|
|
42
45
|
"tsx": "4.21.0",
|
|
43
46
|
"typescript": "5.9.3",
|
|
44
|
-
"typescript-eslint": "8.
|
|
47
|
+
"typescript-eslint": "8.53.0"
|
|
45
48
|
},
|
|
46
49
|
"dependencies": {
|
|
47
|
-
"@aptos-labs/ts-sdk": "^5.2.
|
|
48
|
-
"@chainlink/ccip-sdk": "^0.
|
|
50
|
+
"@aptos-labs/ts-sdk": "^5.2.1",
|
|
51
|
+
"@chainlink/ccip-sdk": "^0.94.0",
|
|
49
52
|
"@coral-xyz/anchor": "^0.29.0",
|
|
50
53
|
"@ethers-ext/signer-ledger": "^6.0.0-beta.1",
|
|
51
|
-
"@inquirer/prompts": "8.
|
|
52
|
-
"@ledgerhq/hw-app-aptos": "^6.34.
|
|
53
|
-
"@ledgerhq/hw-app-solana": "^7.6.
|
|
54
|
-
"@ledgerhq/hw-transport-node-hid": "^6.29.
|
|
54
|
+
"@inquirer/prompts": "8.2.0",
|
|
55
|
+
"@ledgerhq/hw-app-aptos": "^6.34.12",
|
|
56
|
+
"@ledgerhq/hw-app-solana": "^7.6.3",
|
|
57
|
+
"@ledgerhq/hw-transport-node-hid": "^6.29.17",
|
|
55
58
|
"@solana/web3.js": "^1.98.4",
|
|
56
59
|
"@ton-community/ton-ledger": "^7.3.0",
|
|
57
60
|
"bs58": "^6.0.0",
|
|
58
61
|
"ethers": "6.16.0",
|
|
59
|
-
"type-fest": "^5.
|
|
62
|
+
"type-fest": "^5.4.1",
|
|
60
63
|
"yargs": "18.0.0"
|
|
61
64
|
},
|
|
62
65
|
"overrides": {
|
package/src/commands/send.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
|
-
type AnyMessage,
|
|
3
2
|
type CCIPVersion,
|
|
4
3
|
type ChainStatic,
|
|
5
4
|
type EVMChain,
|
|
6
5
|
type ExtraArgs,
|
|
6
|
+
type MessageInput,
|
|
7
7
|
CCIPArgumentInvalidError,
|
|
8
8
|
CCIPChainFamilyUnsupportedError,
|
|
9
9
|
CCIPTokenNotFoundError,
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
networkInfo,
|
|
14
14
|
sourceToDestTokenAmounts,
|
|
15
15
|
} from '@chainlink/ccip-sdk/src/index.ts'
|
|
16
|
-
import { type BytesLike,
|
|
16
|
+
import { type BytesLike, formatUnits, toUtf8Bytes } from 'ethers'
|
|
17
17
|
import type { Argv } from 'yargs'
|
|
18
18
|
|
|
19
19
|
import type { GlobalOpts } from '../index.ts'
|
|
@@ -67,7 +67,6 @@ export const builder = (yargs: Argv) =>
|
|
|
67
67
|
type: 'number',
|
|
68
68
|
describe:
|
|
69
69
|
'Gas limit for receiver callback execution; defaults to default configured on ramps',
|
|
70
|
-
default: 0,
|
|
71
70
|
},
|
|
72
71
|
'estimate-gas-limit': {
|
|
73
72
|
type: 'number',
|
|
@@ -105,10 +104,11 @@ export const builder = (yargs: Argv) =>
|
|
|
105
104
|
describe: "Address of the Solana tokenReceiver (if different than program's receiver)",
|
|
106
105
|
},
|
|
107
106
|
account: {
|
|
107
|
+
alias: 'receiver-object-id',
|
|
108
108
|
type: 'array',
|
|
109
109
|
string: true,
|
|
110
110
|
describe:
|
|
111
|
-
'List of accounts needed by Solana receiver program; append `=rw` to specify account as writable; can be specified multiple times',
|
|
111
|
+
'List of accounts needed by Solana receiver program, or receiverObjectIds needed by Sui; On Solana, append `=rw` to specify account as writable; can be specified multiple times',
|
|
112
112
|
example: 'requiredPdaAddress=rw',
|
|
113
113
|
},
|
|
114
114
|
'only-get-fee': {
|
|
@@ -159,15 +159,13 @@ async function sendMessage(
|
|
|
159
159
|
const getChain = fetchChainsFromRpcs(ctx, argv)
|
|
160
160
|
const source = await getChain(sourceNetwork.name)
|
|
161
161
|
|
|
162
|
-
let data: BytesLike
|
|
162
|
+
let data: BytesLike | undefined
|
|
163
163
|
if (argv.data) {
|
|
164
164
|
try {
|
|
165
165
|
data = getDataBytes(argv.data)
|
|
166
166
|
} catch (_) {
|
|
167
167
|
data = toUtf8Bytes(argv.data)
|
|
168
168
|
}
|
|
169
|
-
} else {
|
|
170
|
-
data = '0x'
|
|
171
169
|
}
|
|
172
170
|
|
|
173
171
|
const tokenAmounts: { token: string; amount: bigint }[] = argv.transferTokens?.length
|
|
@@ -175,25 +173,11 @@ async function sendMessage(
|
|
|
175
173
|
: []
|
|
176
174
|
|
|
177
175
|
let receiver = argv.receiver
|
|
178
|
-
let tokenReceiver
|
|
179
176
|
let accounts,
|
|
180
177
|
accountIsWritableBitmap = 0n
|
|
181
178
|
if (destNetwork.family === ChainFamily.Solana) {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
tokenReceiver = '11111111111111111111111111111111'
|
|
185
|
-
} else if (!dataLength(data)) {
|
|
186
|
-
// sending tokens without data, i.e. not for a receiver contract
|
|
187
|
-
tokenReceiver = receiver
|
|
188
|
-
receiver = '11111111111111111111111111111111'
|
|
189
|
-
} else {
|
|
190
|
-
throw new CCIPArgumentInvalidError(
|
|
191
|
-
'token-receiver',
|
|
192
|
-
'required when sending tokens with data to Solana',
|
|
193
|
-
)
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
if (argv.account) {
|
|
179
|
+
// parse accounts with or without `=rw` suffix
|
|
180
|
+
if (argv.account?.length) {
|
|
197
181
|
accounts = argv.account.map((account, i) => {
|
|
198
182
|
if (account.endsWith('=rw')) {
|
|
199
183
|
accountIsWritableBitmap |= 1n << BigInt(i)
|
|
@@ -201,12 +185,7 @@ async function sendMessage(
|
|
|
201
185
|
}
|
|
202
186
|
return account
|
|
203
187
|
})
|
|
204
|
-
}
|
|
205
|
-
} else if (argv.tokenReceiver || argv.account?.length) {
|
|
206
|
-
throw new CCIPArgumentInvalidError(
|
|
207
|
-
'token-receiver/account',
|
|
208
|
-
'only valid for Solana destination',
|
|
209
|
-
)
|
|
188
|
+
}
|
|
210
189
|
}
|
|
211
190
|
|
|
212
191
|
let walletAddress, wallet
|
|
@@ -244,7 +223,7 @@ async function sendMessage(
|
|
|
244
223
|
message: {
|
|
245
224
|
sender: walletAddress,
|
|
246
225
|
receiver,
|
|
247
|
-
data,
|
|
226
|
+
data: data || '0x',
|
|
248
227
|
tokenAmounts: destTokenAmounts,
|
|
249
228
|
},
|
|
250
229
|
})
|
|
@@ -253,17 +232,19 @@ async function sendMessage(
|
|
|
253
232
|
if (argv.onlyEstimate) return
|
|
254
233
|
}
|
|
255
234
|
|
|
256
|
-
//
|
|
257
|
-
//
|
|
235
|
+
// builds a catch-all extraArgs object, which can be massaged by
|
|
236
|
+
// [[Chain.buildMessageForDest]] to create suitable extraArgs with defaults if needed
|
|
258
237
|
const extraArgs = {
|
|
259
|
-
...(argv.allowOutOfOrderExec != null
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
...(
|
|
263
|
-
? {
|
|
264
|
-
:
|
|
265
|
-
|
|
266
|
-
|
|
238
|
+
...(argv.allowOutOfOrderExec != null && {
|
|
239
|
+
allowOutOfOrderExecution: !!argv.allowOutOfOrderExec,
|
|
240
|
+
}),
|
|
241
|
+
...(argv.gasLimit == null
|
|
242
|
+
? {}
|
|
243
|
+
: destNetwork.family === ChainFamily.Solana
|
|
244
|
+
? { computeUnits: BigInt(argv.gasLimit) }
|
|
245
|
+
: { gasLimit: BigInt(argv.gasLimit) }),
|
|
246
|
+
...(!!argv.tokenReceiver && { tokenReceiver: argv.tokenReceiver }),
|
|
247
|
+
...(!!accounts && { accounts, accountIsWritableBitmap }), // accounts also used as Sui receiverObjectIds
|
|
267
248
|
}
|
|
268
249
|
|
|
269
250
|
let feeToken, feeTokenInfo
|
|
@@ -287,7 +268,7 @@ async function sendMessage(
|
|
|
287
268
|
feeTokenInfo = await source.getTokenInfo(nativeToken)
|
|
288
269
|
}
|
|
289
270
|
|
|
290
|
-
const message:
|
|
271
|
+
const message: MessageInput = {
|
|
291
272
|
receiver,
|
|
292
273
|
data,
|
|
293
274
|
extraArgs: extraArgs as ExtraArgs,
|
|
@@ -322,9 +303,7 @@ async function sendMessage(
|
|
|
322
303
|
})
|
|
323
304
|
logger.info(
|
|
324
305
|
'🚀 Sending message to',
|
|
325
|
-
|
|
326
|
-
? tokenReceiver
|
|
327
|
-
: receiver,
|
|
306
|
+
receiver,
|
|
328
307
|
'@',
|
|
329
308
|
destNetwork.name,
|
|
330
309
|
', tx =>',
|
package/src/index.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { Format } from './commands/index.ts'
|
|
|
11
11
|
util.inspect.defaultOptions.depth = 6 // print down to tokenAmounts in requests
|
|
12
12
|
// generate:nofail
|
|
13
13
|
// `const VERSION = '${require('./package.json').version}-${require('child_process').execSync('git rev-parse --short HEAD').toString().trim()}'`
|
|
14
|
-
const VERSION = '0.
|
|
14
|
+
const VERSION = '0.94.0-aac4ae6'
|
|
15
15
|
// generate:end
|
|
16
16
|
|
|
17
17
|
const globalOpts = {
|