@chainlink/ccip-sdk 0.95.0 → 0.97.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/README.md +2 -2
- package/dist/all-chains.d.ts +23 -0
- package/dist/all-chains.d.ts.map +1 -0
- package/dist/all-chains.js +24 -0
- package/dist/all-chains.js.map +1 -0
- package/dist/api/index.d.ts +31 -19
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +46 -25
- package/dist/api/index.js.map +1 -1
- package/dist/api/types.d.ts +24 -30
- package/dist/api/types.d.ts.map +1 -1
- package/dist/aptos/exec.d.ts +2 -2
- package/dist/aptos/exec.d.ts.map +1 -1
- package/dist/aptos/exec.js.map +1 -1
- package/dist/aptos/hasher.d.ts.map +1 -1
- package/dist/aptos/hasher.js +1 -1
- package/dist/aptos/hasher.js.map +1 -1
- package/dist/aptos/index.d.ts +43 -15
- package/dist/aptos/index.d.ts.map +1 -1
- package/dist/aptos/index.js +112 -105
- package/dist/aptos/index.js.map +1 -1
- package/dist/aptos/types.d.ts +2 -19
- package/dist/aptos/types.d.ts.map +1 -1
- package/dist/aptos/types.js +0 -11
- package/dist/aptos/types.js.map +1 -1
- package/dist/chain.d.ts +734 -174
- package/dist/chain.d.ts.map +1 -1
- package/dist/chain.js +216 -31
- package/dist/chain.js.map +1 -1
- package/dist/commits.d.ts +4 -6
- package/dist/commits.d.ts.map +1 -1
- package/dist/commits.js +4 -4
- package/dist/commits.js.map +1 -1
- package/dist/errors/CCIPError.d.ts +33 -4
- package/dist/errors/CCIPError.d.ts.map +1 -1
- package/dist/errors/CCIPError.js +33 -4
- package/dist/errors/CCIPError.js.map +1 -1
- package/dist/errors/codes.d.ts +5 -0
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/errors/codes.js +5 -1
- package/dist/errors/codes.js.map +1 -1
- package/dist/errors/index.d.ts +2 -2
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +2 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/recovery.d.ts.map +1 -1
- package/dist/errors/recovery.js +6 -1
- package/dist/errors/recovery.js.map +1 -1
- package/dist/errors/specialized.d.ts +1702 -121
- package/dist/errors/specialized.d.ts.map +1 -1
- package/dist/errors/specialized.js +1729 -125
- package/dist/errors/specialized.js.map +1 -1
- package/dist/errors/utils.d.ts.map +1 -1
- package/dist/errors/utils.js +0 -1
- package/dist/errors/utils.js.map +1 -1
- package/dist/evm/abi/OffRamp_2_0.d.ts +764 -0
- package/dist/evm/abi/OffRamp_2_0.d.ts.map +1 -0
- package/dist/evm/abi/OffRamp_2_0.js +744 -0
- package/dist/evm/abi/OffRamp_2_0.js.map +1 -0
- package/dist/evm/abi/OnRamp_2_0.d.ts +925 -0
- package/dist/evm/abi/OnRamp_2_0.d.ts.map +1 -0
- package/dist/evm/abi/OnRamp_2_0.js +992 -0
- package/dist/evm/abi/OnRamp_2_0.js.map +1 -0
- package/dist/evm/const.d.ts +12 -2
- package/dist/evm/const.d.ts.map +1 -1
- package/dist/evm/const.js +8 -2
- package/dist/evm/const.js.map +1 -1
- package/dist/evm/errors.d.ts.map +1 -1
- package/dist/evm/errors.js +7 -2
- package/dist/evm/errors.js.map +1 -1
- package/dist/evm/extra-args.d.ts +25 -0
- package/dist/evm/extra-args.d.ts.map +1 -0
- package/dist/evm/extra-args.js +309 -0
- package/dist/evm/extra-args.js.map +1 -0
- package/dist/evm/gas.d.ts.map +1 -1
- package/dist/evm/gas.js +7 -12
- package/dist/evm/gas.js.map +1 -1
- package/dist/evm/hasher.d.ts.map +1 -1
- package/dist/evm/hasher.js +23 -13
- package/dist/evm/hasher.js.map +1 -1
- package/dist/evm/index.d.ts +140 -35
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +306 -226
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/messages.d.ts +59 -5
- package/dist/evm/messages.d.ts.map +1 -1
- package/dist/evm/messages.js +210 -0
- package/dist/evm/messages.js.map +1 -1
- package/dist/evm/offchain.js.map +1 -1
- package/dist/evm/types.d.ts +7 -2
- package/dist/evm/types.d.ts.map +1 -1
- package/dist/evm/types.js +22 -1
- package/dist/evm/types.js.map +1 -1
- package/dist/execution.d.ts +62 -22
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +102 -51
- package/dist/execution.js.map +1 -1
- package/dist/extra-args.d.ts +113 -4
- package/dist/extra-args.d.ts.map +1 -1
- package/dist/extra-args.js +38 -3
- package/dist/extra-args.js.map +1 -1
- package/dist/gas.d.ts +31 -5
- package/dist/gas.d.ts.map +1 -1
- package/dist/gas.js +43 -9
- package/dist/gas.js.map +1 -1
- package/dist/index.d.ts +11 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/requests.d.ts +101 -22
- package/dist/requests.d.ts.map +1 -1
- package/dist/requests.js +115 -24
- package/dist/requests.js.map +1 -1
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +24 -0
- package/dist/selectors.js.map +1 -1
- package/dist/shared/bcs-codecs.d.ts +61 -0
- package/dist/shared/bcs-codecs.d.ts.map +1 -0
- package/dist/shared/bcs-codecs.js +102 -0
- package/dist/shared/bcs-codecs.js.map +1 -0
- package/dist/shared/constants.d.ts +3 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +3 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/solana/exec.d.ts +2 -2
- package/dist/solana/exec.d.ts.map +1 -1
- package/dist/solana/exec.js.map +1 -1
- package/dist/solana/index.d.ts +148 -30
- package/dist/solana/index.d.ts.map +1 -1
- package/dist/solana/index.js +137 -44
- package/dist/solana/index.js.map +1 -1
- package/dist/sui/hasher.d.ts.map +1 -1
- package/dist/sui/hasher.js +1 -1
- package/dist/sui/hasher.js.map +1 -1
- package/dist/sui/index.d.ts +49 -19
- package/dist/sui/index.d.ts.map +1 -1
- package/dist/sui/index.js +76 -43
- package/dist/sui/index.js.map +1 -1
- package/dist/sui/manuallyExec/encoder.d.ts +2 -2
- package/dist/sui/manuallyExec/encoder.d.ts.map +1 -1
- package/dist/sui/manuallyExec/encoder.js.map +1 -1
- package/dist/sui/manuallyExec/index.d.ts +2 -2
- package/dist/sui/manuallyExec/index.d.ts.map +1 -1
- package/dist/ton/exec.d.ts +2 -2
- package/dist/ton/exec.d.ts.map +1 -1
- package/dist/ton/exec.js.map +1 -1
- package/dist/ton/index.d.ts +66 -27
- package/dist/ton/index.d.ts.map +1 -1
- package/dist/ton/index.js +172 -47
- package/dist/ton/index.js.map +1 -1
- package/dist/ton/send.d.ts +52 -0
- package/dist/ton/send.d.ts.map +1 -0
- package/dist/ton/send.js +166 -0
- package/dist/ton/send.js.map +1 -0
- package/dist/ton/types.d.ts +2 -2
- package/dist/ton/types.d.ts.map +1 -1
- package/dist/ton/types.js.map +1 -1
- package/dist/types.d.ts +148 -12
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +79 -4
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +92 -7
- package/dist/utils.js.map +1 -1
- package/package.json +16 -11
- package/src/all-chains.ts +26 -0
- package/src/api/index.ts +58 -34
- package/src/api/types.ts +24 -31
- package/src/aptos/exec.ts +2 -2
- package/src/aptos/hasher.ts +1 -1
- package/src/aptos/index.ts +127 -129
- package/src/aptos/types.ts +2 -15
- package/src/chain.ts +837 -191
- package/src/commits.ts +9 -9
- package/src/errors/CCIPError.ts +33 -4
- package/src/errors/codes.ts +5 -1
- package/src/errors/index.ts +2 -1
- package/src/errors/recovery.ts +9 -1
- package/src/errors/specialized.ts +1745 -132
- package/src/errors/utils.ts +0 -1
- package/src/evm/abi/OffRamp_2_0.ts +743 -0
- package/src/evm/abi/OnRamp_2_0.ts +991 -0
- package/src/evm/const.ts +10 -3
- package/src/evm/errors.ts +6 -2
- package/src/evm/extra-args.ts +360 -0
- package/src/evm/gas.ts +14 -13
- package/src/evm/hasher.ts +30 -18
- package/src/evm/index.ts +376 -281
- package/src/evm/messages.ts +323 -11
- package/src/evm/offchain.ts +2 -2
- package/src/evm/types.ts +20 -2
- package/src/execution.ts +126 -71
- package/src/extra-args.ts +118 -4
- package/src/gas.ts +44 -11
- package/src/index.ts +14 -11
- package/src/requests.ts +128 -24
- package/src/selectors.ts +24 -0
- package/src/shared/bcs-codecs.ts +132 -0
- package/src/shared/constants.ts +2 -0
- package/src/solana/exec.ts +4 -4
- package/src/solana/index.ts +170 -82
- package/src/sui/hasher.ts +1 -1
- package/src/sui/index.ts +88 -56
- package/src/sui/manuallyExec/encoder.ts +2 -2
- package/src/sui/manuallyExec/index.ts +2 -2
- package/src/ton/exec.ts +2 -2
- package/src/ton/index.ts +220 -58
- package/src/ton/send.ts +222 -0
- package/src/ton/types.ts +2 -2
- package/src/types.ts +173 -30
- package/src/utils.ts +91 -7
- package/dist/aptos/utils.d.ts +0 -12
- package/dist/aptos/utils.d.ts.map +0 -1
- package/dist/aptos/utils.js +0 -15
- package/dist/aptos/utils.js.map +0 -1
- package/src/aptos/utils.ts +0 -24
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BCS (Binary Canonical Serialization) codecs for Move-based chains (Aptos, Sui).
|
|
3
|
+
* These chains share similar BCS encoding and 32-byte address formats.
|
|
4
|
+
*/
|
|
5
|
+
import { bcs } from '@mysten/bcs'
|
|
6
|
+
import {
|
|
7
|
+
type BigNumberish,
|
|
8
|
+
type BytesLike,
|
|
9
|
+
concat,
|
|
10
|
+
dataLength,
|
|
11
|
+
dataSlice,
|
|
12
|
+
getBytes,
|
|
13
|
+
hexlify,
|
|
14
|
+
toBeHex,
|
|
15
|
+
zeroPadBytes,
|
|
16
|
+
zeroPadValue,
|
|
17
|
+
} from 'ethers'
|
|
18
|
+
|
|
19
|
+
import { CCIPDataFormatUnsupportedError } from '../errors/index.ts'
|
|
20
|
+
import {
|
|
21
|
+
type EVMExtraArgsV2,
|
|
22
|
+
type SVMExtraArgsV1,
|
|
23
|
+
EVMExtraArgsV2Tag,
|
|
24
|
+
SVMExtraArgsV1Tag,
|
|
25
|
+
} from '../extra-args.ts'
|
|
26
|
+
import { ChainFamily } from '../types.ts'
|
|
27
|
+
import { decodeAddress, getDataBytes } from '../utils.ts'
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* BCS codec for decoding EVM extra args on Move chains (Aptos/Sui).
|
|
31
|
+
* Used when receiving cross-chain messages from EVM source chains.
|
|
32
|
+
*/
|
|
33
|
+
export const BcsEVMExtraArgsV2Codec = bcs.struct('EVMExtraArgsV2', {
|
|
34
|
+
gasLimit: bcs.u256(),
|
|
35
|
+
allowOutOfOrderExecution: bcs.bool(),
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* BCS codec for decoding SVM (Solana) extra args on Move chains (Aptos/Sui).
|
|
40
|
+
* Used when receiving cross-chain messages from Solana source chains.
|
|
41
|
+
*/
|
|
42
|
+
export const BcsSVMExtraArgsV1Codec = bcs.struct('SVMExtraArgsV1', {
|
|
43
|
+
computeUnits: bcs.u32(),
|
|
44
|
+
accountIsWritableBitmap: bcs.u64(),
|
|
45
|
+
allowOutOfOrderExecution: bcs.bool(),
|
|
46
|
+
tokenReceiver: bcs.vector(bcs.u8()),
|
|
47
|
+
accounts: bcs.vector(bcs.vector(bcs.u8())),
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Decodes extra arguments from Move-based chain CCIP messages.
|
|
52
|
+
* Works for both Aptos and Sui since they share the same BCS encoding.
|
|
53
|
+
* @param extraArgs - Encoded extra arguments bytes.
|
|
54
|
+
* @returns Decoded extra arguments or undefined if unknown format.
|
|
55
|
+
*/
|
|
56
|
+
export function decodeMoveExtraArgs(
|
|
57
|
+
extraArgs: BytesLike,
|
|
58
|
+
):
|
|
59
|
+
| (EVMExtraArgsV2 & { _tag: 'EVMExtraArgsV2' })
|
|
60
|
+
| (SVMExtraArgsV1 & { _tag: 'SVMExtraArgsV1' })
|
|
61
|
+
| undefined {
|
|
62
|
+
const data = getDataBytes(extraArgs),
|
|
63
|
+
tag = dataSlice(data, 0, 4)
|
|
64
|
+
switch (tag) {
|
|
65
|
+
case EVMExtraArgsV2Tag: {
|
|
66
|
+
const parsed = BcsEVMExtraArgsV2Codec.parse(getBytes(dataSlice(data, 4)))
|
|
67
|
+
// Move serialization of EVMExtraArgsV2: 37 bytes total: 4 tag + 32 LE gasLimit + 1 allowOOOE
|
|
68
|
+
return {
|
|
69
|
+
_tag: 'EVMExtraArgsV2',
|
|
70
|
+
...parsed,
|
|
71
|
+
gasLimit: BigInt(parsed.gasLimit),
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
case SVMExtraArgsV1Tag: {
|
|
75
|
+
const parsed = BcsSVMExtraArgsV1Codec.parse(getBytes(dataSlice(data, 4)))
|
|
76
|
+
// Move serialization of SVMExtraArgsV1: 13 bytes total: 4 tag + 8 LE computeUnits
|
|
77
|
+
return {
|
|
78
|
+
_tag: 'SVMExtraArgsV1',
|
|
79
|
+
...parsed,
|
|
80
|
+
computeUnits: BigInt(parsed.computeUnits),
|
|
81
|
+
accountIsWritableBitmap: BigInt(parsed.accountIsWritableBitmap),
|
|
82
|
+
tokenReceiver: decodeAddress(new Uint8Array(parsed.tokenReceiver), ChainFamily.Solana),
|
|
83
|
+
accounts: parsed.accounts.map((account) =>
|
|
84
|
+
decodeAddress(new Uint8Array(account), ChainFamily.Solana),
|
|
85
|
+
),
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Converts bytes to a Move-chain address (32-byte zero-padded).
|
|
93
|
+
* Works for both Aptos and Sui since they share the same address format.
|
|
94
|
+
* @param bytes - Bytes to convert.
|
|
95
|
+
* @returns Address as 0x-prefixed hex string, 32 bytes padded.
|
|
96
|
+
* @throws {@link CCIPDataFormatUnsupportedError} if bytes length exceeds 32
|
|
97
|
+
*/
|
|
98
|
+
export function getMoveAddress(bytes: BytesLike | readonly number[]): string {
|
|
99
|
+
let suffix = ''
|
|
100
|
+
if (Array.isArray(bytes)) bytes = new Uint8Array(bytes)
|
|
101
|
+
if (typeof bytes === 'string' && bytes.startsWith('0x')) {
|
|
102
|
+
const idx = bytes.indexOf('::')
|
|
103
|
+
if (idx > 0) {
|
|
104
|
+
suffix = bytes.slice(idx)
|
|
105
|
+
bytes = bytes.slice(0, idx)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
bytes = getDataBytes(bytes)
|
|
109
|
+
if (bytes.length > 32)
|
|
110
|
+
throw new CCIPDataFormatUnsupportedError(`Move address exceeds 32 bytes: ${hexlify(bytes)}`)
|
|
111
|
+
return zeroPadValue(bytes, 32) + suffix
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Encodes a numeric value as a 32-byte hex string.
|
|
116
|
+
* Used for BCS encoding on Move chains (Aptos/Sui).
|
|
117
|
+
* @param value - Numeric value to encode.
|
|
118
|
+
* @returns 32-byte hex string representation of the value.
|
|
119
|
+
*/
|
|
120
|
+
export const encodeNumber = (value: BigNumberish): string => toBeHex(value, 32)
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Encodes dynamic bytes with length prefix for BCS serialization.
|
|
124
|
+
* Used for BCS encoding on Move chains (Aptos/Sui).
|
|
125
|
+
* @param value - Bytes to encode.
|
|
126
|
+
* @returns Encoded bytes with 32-byte aligned padding.
|
|
127
|
+
*/
|
|
128
|
+
export const encodeRawBytes = (value: BytesLike): string =>
|
|
129
|
+
concat([
|
|
130
|
+
encodeNumber(dataLength(value)),
|
|
131
|
+
zeroPadBytes(value, Math.ceil(dataLength(value) / 32) * 32),
|
|
132
|
+
])
|
package/src/solana/exec.ts
CHANGED
|
@@ -14,7 +14,7 @@ import BN from 'bn.js'
|
|
|
14
14
|
import { hexlify } from 'ethers'
|
|
15
15
|
|
|
16
16
|
import { CCIPSolanaLookupTableNotFoundError } from '../errors/index.ts'
|
|
17
|
-
import { type
|
|
17
|
+
import { type ExecutionInput, type WithLogger, ChainFamily } from '../types.ts'
|
|
18
18
|
import { IDL as CCIP_OFFRAMP_IDL } from './idl/1.6.0/CCIP_OFFRAMP.ts'
|
|
19
19
|
import { encodeSolanaOffchainTokenData } from './offchain.ts'
|
|
20
20
|
import type { CCIPMessage_V1_6_Solana, UnsignedSolanaTx } from './types.ts'
|
|
@@ -43,7 +43,7 @@ export async function generateUnsignedExecuteReport(
|
|
|
43
43
|
ctx: { connection: Connection } & WithLogger,
|
|
44
44
|
payer: PublicKey,
|
|
45
45
|
offramp: PublicKey,
|
|
46
|
-
execReport:
|
|
46
|
+
execReport: ExecutionInput<CCIPMessage_V1_6_Solana>,
|
|
47
47
|
opts?: { forceLookupTable?: boolean; forceBuffer?: boolean; clearLeftoverAccounts?: boolean },
|
|
48
48
|
): Promise<UnsignedSolanaTx> {
|
|
49
49
|
const { connection, logger = console } = ctx
|
|
@@ -274,7 +274,7 @@ async function getManuallyExecuteInputs({
|
|
|
274
274
|
}: {
|
|
275
275
|
payer: PublicKey
|
|
276
276
|
offramp: Program<typeof CCIP_OFFRAMP_IDL>
|
|
277
|
-
execReport:
|
|
277
|
+
execReport: ExecutionInput<CCIPMessage_V1_6_Solana>
|
|
278
278
|
bufferId?: Buffer
|
|
279
279
|
} & WithLogger) {
|
|
280
280
|
const executionReport = prepareExecutionReport(execReport)
|
|
@@ -346,7 +346,7 @@ function prepareExecutionReport({
|
|
|
346
346
|
message,
|
|
347
347
|
offchainTokenData,
|
|
348
348
|
proofs,
|
|
349
|
-
}:
|
|
349
|
+
}: ExecutionInput<CCIPMessage_V1_6_Solana>): IdlTypes<
|
|
350
350
|
typeof CCIP_OFFRAMP_IDL
|
|
351
351
|
>['ExecutionReportSingleChain'] {
|
|
352
352
|
return {
|