@chainlink/ccip-sdk 0.96.0 → 1.0.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 +12 -9
- package/dist/api/index.d.ts +21 -8
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +42 -13
- package/dist/api/index.js.map +1 -1
- package/dist/api/types.d.ts +0 -2
- 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 +17 -16
- package/dist/aptos/index.d.ts.map +1 -1
- package/dist/aptos/index.js +42 -73
- package/dist/aptos/index.js.map +1 -1
- package/dist/aptos/logs.d.ts +2 -2
- package/dist/aptos/logs.d.ts.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 +538 -158
- package/dist/chain.d.ts.map +1 -1
- package/dist/chain.js +132 -19
- 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 +3 -0
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/errors/codes.js +3 -1
- package/dist/errors/codes.js.map +1 -1
- package/dist/errors/index.d.ts +4 -4
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +4 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/recovery.d.ts.map +1 -1
- package/dist/errors/recovery.js +4 -1
- package/dist/errors/recovery.js.map +1 -1
- package/dist/errors/specialized.d.ts +1695 -120
- package/dist/errors/specialized.d.ts.map +1 -1
- package/dist/errors/specialized.js +1715 -123
- 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.map +1 -1
- package/dist/evm/extra-args.js +5 -24
- package/dist/evm/extra-args.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 +73 -16
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +241 -146
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/logs.d.ts +1 -1
- package/dist/evm/logs.js +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.d.ts +1 -14
- package/dist/evm/offchain.d.ts.map +1 -1
- package/dist/evm/offchain.js +1 -133
- 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 +98 -61
- package/dist/execution.js.map +1 -1
- package/dist/extra-args.d.ts +13 -3
- package/dist/extra-args.d.ts.map +1 -1
- package/dist/extra-args.js +13 -3
- package/dist/extra-args.js.map +1 -1
- package/dist/gas.d.ts +25 -2
- package/dist/gas.d.ts.map +1 -1
- package/dist/gas.js +30 -4
- package/dist/gas.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/offchain.d.ts +23 -6
- package/dist/offchain.d.ts.map +1 -1
- package/dist/offchain.js +92 -17
- package/dist/offchain.js.map +1 -1
- package/dist/requests.d.ts +85 -14
- package/dist/requests.d.ts.map +1 -1
- package/dist/requests.js +99 -17
- package/dist/requests.js.map +1 -1
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +12 -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/idl/1.6.0/BASE_TOKEN_POOL.d.ts +1 -1
- package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.js +1 -1
- package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.d.ts +1 -1
- package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.js +1 -1
- package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.d.ts +1 -1
- package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.js +1 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts +16 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts.map +1 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.js +16 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.js.map +1 -1
- package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.d.ts +1 -1
- package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.js +1 -1
- package/dist/solana/idl/1.6.0/CCIP_ROUTER.d.ts +1 -1
- package/dist/solana/idl/1.6.0/CCIP_ROUTER.js +1 -1
- package/dist/solana/index.d.ts +85 -24
- package/dist/solana/index.d.ts.map +1 -1
- package/dist/solana/index.js +69 -37
- package/dist/solana/index.js.map +1 -1
- package/dist/solana/offchain.d.ts +1 -13
- package/dist/solana/offchain.d.ts.map +1 -1
- package/dist/solana/offchain.js +1 -66
- package/dist/solana/offchain.js.map +1 -1
- package/dist/solana/utils.d.ts +4 -4
- package/dist/solana/utils.d.ts.map +1 -1
- package/dist/solana/utils.js +1 -1
- package/dist/solana/utils.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 +18 -18
- package/dist/sui/index.d.ts.map +1 -1
- package/dist/sui/index.js +38 -39
- 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 +3 -3
- package/dist/ton/exec.d.ts.map +1 -1
- package/dist/ton/exec.js +1 -1
- package/dist/ton/exec.js.map +1 -1
- package/dist/ton/index.d.ts +14 -22
- package/dist/ton/index.d.ts.map +1 -1
- package/dist/ton/index.js +26 -35
- package/dist/ton/index.js.map +1 -1
- package/dist/ton/types.d.ts +3 -5
- package/dist/ton/types.d.ts.map +1 -1
- package/dist/ton/types.js.map +1 -1
- package/dist/types.d.ts +55 -20
- 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 +65 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +74 -2
- package/dist/utils.js.map +1 -1
- package/package.json +14 -10
- package/src/api/index.ts +53 -17
- package/src/api/types.ts +0 -2
- package/src/aptos/exec.ts +2 -2
- package/src/aptos/hasher.ts +1 -1
- package/src/aptos/index.ts +55 -100
- package/src/aptos/logs.ts +2 -2
- package/src/aptos/types.ts +2 -15
- package/src/chain.ts +594 -171
- package/src/commits.ts +9 -9
- package/src/errors/CCIPError.ts +33 -4
- package/src/errors/codes.ts +3 -1
- package/src/errors/index.ts +4 -0
- package/src/errors/recovery.ts +7 -1
- package/src/errors/specialized.ts +1726 -130
- 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 +4 -21
- package/src/evm/hasher.ts +30 -18
- package/src/evm/index.ts +314 -176
- package/src/evm/logs.ts +1 -1
- package/src/evm/messages.ts +323 -11
- package/src/evm/offchain.ts +2 -191
- package/src/evm/types.ts +20 -2
- package/src/execution.ts +125 -86
- package/src/extra-args.ts +13 -3
- package/src/gas.ts +29 -3
- package/src/index.ts +10 -3
- package/src/offchain.ts +125 -28
- package/src/requests.ts +114 -19
- package/src/selectors.ts +12 -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/idl/1.6.0/BASE_TOKEN_POOL.ts +2 -2
- package/src/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.ts +2 -2
- package/src/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.ts +2 -2
- package/src/solana/idl/1.6.0/CCIP_COMMON.ts +32 -2
- package/src/solana/idl/1.6.0/CCIP_OFFRAMP.ts +2 -2
- package/src/solana/idl/1.6.0/CCIP_ROUTER.ts +2 -2
- package/src/solana/index.ts +110 -85
- package/src/solana/offchain.ts +3 -100
- package/src/solana/utils.ts +8 -5
- package/src/sui/hasher.ts +1 -1
- package/src/sui/index.ts +55 -59
- package/src/sui/manuallyExec/encoder.ts +2 -2
- package/src/sui/manuallyExec/index.ts +2 -2
- package/src/ton/exec.ts +4 -7
- package/src/ton/index.ts +45 -53
- package/src/ton/types.ts +4 -7
- package/src/types.ts +81 -37
- package/src/utils.ts +73 -2
- 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
package/src/evm/const.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { parseAbi } from 'abitype'
|
|
1
2
|
import { type EventFragment, AbiCoder, Interface } from 'ethers'
|
|
2
3
|
|
|
3
4
|
import Token_ABI from './abi/BurnMintERC677Token.ts'
|
|
@@ -10,24 +11,26 @@ import TokenPool_1_6_ABI from './abi/LockReleaseTokenPool_1_6_1.ts'
|
|
|
10
11
|
import EVM2EVMOffRamp_1_2_ABI from './abi/OffRamp_1_2.ts'
|
|
11
12
|
import EVM2EVMOffRamp_1_5_ABI from './abi/OffRamp_1_5.ts'
|
|
12
13
|
import OffRamp_1_6_ABI from './abi/OffRamp_1_6.ts'
|
|
14
|
+
import OffRamp_2_0_ABI from './abi/OffRamp_2_0.ts'
|
|
13
15
|
import EVM2EVMOnRamp_1_2_ABI from './abi/OnRamp_1_2.ts'
|
|
14
16
|
import EVM2EVMOnRamp_1_5_ABI from './abi/OnRamp_1_5.ts'
|
|
15
17
|
import OnRamp_1_6_ABI from './abi/OnRamp_1_6.ts'
|
|
18
|
+
import OnRamp_2_0_ABI from './abi/OnRamp_2_0.ts'
|
|
16
19
|
import PriceRegistry_1_2_ABI from './abi/PriceRegistry_1_2.ts'
|
|
17
20
|
import Router_ABI from './abi/Router.ts'
|
|
18
21
|
import TokenAdminRegistry_ABI from './abi/TokenAdminRegistry_1_5.ts'
|
|
19
22
|
|
|
20
23
|
export const defaultAbiCoder = AbiCoder.defaultAbiCoder()
|
|
21
24
|
|
|
22
|
-
export const DEFAULT_GAS_LIMIT = 200_000n
|
|
23
|
-
export const DEFAULT_APPROVE_GAS_LIMIT = 120_000n
|
|
24
|
-
|
|
25
25
|
const customErrors = [
|
|
26
26
|
'error NoContract()',
|
|
27
27
|
'error NoGasForCallExactCheck()',
|
|
28
28
|
'error NotEnoughGasForCall()',
|
|
29
|
+
'error InvalidChain(uint64 chainSelector)',
|
|
29
30
|
] as const
|
|
30
31
|
|
|
32
|
+
export const VersionedContractABI = parseAbi(['function typeAndVersion() view returns (string)'])
|
|
33
|
+
|
|
31
34
|
export const interfaces = {
|
|
32
35
|
Router: new Interface(Router_ABI),
|
|
33
36
|
Token: new Interface(Token_ABI),
|
|
@@ -38,9 +41,11 @@ export const interfaces = {
|
|
|
38
41
|
TokenPool_v1_6: new Interface(TokenPool_1_6_ABI),
|
|
39
42
|
CommitStore_v1_5: new Interface(CommitStore_1_5_ABI),
|
|
40
43
|
CommitStore_v1_2: new Interface(CommitStore_1_2_ABI),
|
|
44
|
+
OffRamp_v2_0: new Interface(OffRamp_2_0_ABI),
|
|
41
45
|
OffRamp_v1_6: new Interface(OffRamp_1_6_ABI),
|
|
42
46
|
EVM2EVMOffRamp_v1_5: new Interface(EVM2EVMOffRamp_1_5_ABI),
|
|
43
47
|
EVM2EVMOffRamp_v1_2: new Interface(EVM2EVMOffRamp_1_2_ABI),
|
|
48
|
+
OnRamp_v2_0: new Interface(OnRamp_2_0_ABI),
|
|
44
49
|
OnRamp_v1_6: new Interface(OnRamp_1_6_ABI),
|
|
45
50
|
EVM2EVMOnRamp_v1_5: new Interface(EVM2EVMOnRamp_1_5_ABI),
|
|
46
51
|
EVM2EVMOnRamp_v1_2: new Interface(EVM2EVMOnRamp_1_2_ABI),
|
|
@@ -74,3 +79,5 @@ export const commitsFragments = getAllFragmentsMatchingEvents([
|
|
|
74
79
|
'CommitReportAccepted',
|
|
75
80
|
])
|
|
76
81
|
export const receiptsFragments = getAllFragmentsMatchingEvents(['ExecutionStateChanged'])
|
|
82
|
+
|
|
83
|
+
export const CCV_INDEXER_URL = 'https://chainlink-ccv-indexer.ccip.stage.external.griddle.sh/all'
|
package/src/evm/errors.ts
CHANGED
|
@@ -118,7 +118,7 @@ export function parseWithFragment(
|
|
|
118
118
|
|
|
119
119
|
// join truthy property names, separated by a dot
|
|
120
120
|
function j(...args: string[]): string {
|
|
121
|
-
return args.
|
|
121
|
+
return args.reduce((acc, v) => (!v ? acc : acc ? acc + (v.match(/^\w/) ? '.' : '') + v : v), '')
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
/**
|
|
@@ -137,7 +137,11 @@ export function recursiveParseError(
|
|
|
137
137
|
if (data.length === 0) return key ? [[key, data.toArray()]] : []
|
|
138
138
|
let kv: ReturnType<typeof recursiveParseError>
|
|
139
139
|
try {
|
|
140
|
-
|
|
140
|
+
const obj = data.toObject()
|
|
141
|
+
const keys = Object.keys(obj)
|
|
142
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
143
|
+
if (keys.length > 0 && keys.every((k) => k.startsWith('_'))) throw new Error('not an obj')
|
|
144
|
+
kv = Object.entries(obj).map(([k, v]) => [j(key, k), v])
|
|
141
145
|
} catch (_) {
|
|
142
146
|
kv = data.toArray().map((v, i) => [j(key, `[${i}]`), v])
|
|
143
147
|
}
|
package/src/evm/extra-args.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type BytesLike,
|
|
3
|
-
Result,
|
|
4
3
|
concat,
|
|
5
4
|
dataSlice,
|
|
6
5
|
encodeBase58,
|
|
@@ -25,8 +24,10 @@ import {
|
|
|
25
24
|
SVMExtraArgsV1Tag,
|
|
26
25
|
SuiExtraArgsV1Tag,
|
|
27
26
|
} from '../extra-args.ts'
|
|
27
|
+
import { DEFAULT_GAS_LIMIT } from '../shared/constants.ts'
|
|
28
28
|
import { getAddressBytes, getDataBytes } from '../utils.ts'
|
|
29
|
-
import {
|
|
29
|
+
import { defaultAbiCoder } from './const.ts'
|
|
30
|
+
import { resultToObject } from './types.ts'
|
|
30
31
|
|
|
31
32
|
// ABI type strings for extra args encoding
|
|
32
33
|
const EVMExtraArgsV1ABI = 'tuple(uint256 gasLimit)'
|
|
@@ -36,29 +37,11 @@ const SVMExtraArgsV1ABI =
|
|
|
36
37
|
const SuiExtraArgsV1ABI =
|
|
37
38
|
'tuple(uint256 gasLimit, bool allowOutOfOrderExecution, bytes32 tokenReceiver, bytes32[] receiverObjectIds)'
|
|
38
39
|
|
|
39
|
-
/**
|
|
40
|
-
* Converts an ethers Result to a plain object.
|
|
41
|
-
* @internal
|
|
42
|
-
*/
|
|
43
|
-
function resultToObject<T>(o: T): T {
|
|
44
|
-
if (o instanceof Promise) return o.then(resultToObject) as T
|
|
45
|
-
if (!(o instanceof Result)) return o
|
|
46
|
-
if (o.length === 0) return o.toArray() as T
|
|
47
|
-
try {
|
|
48
|
-
const obj = o.toObject()
|
|
49
|
-
if (!Object.keys(obj).every((k) => /^_+\d*$/.test(k)))
|
|
50
|
-
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, resultToObject(v)])) as T
|
|
51
|
-
} catch (_) {
|
|
52
|
-
// fallthrough
|
|
53
|
-
}
|
|
54
|
-
return o.toArray().map(resultToObject) as T
|
|
55
|
-
}
|
|
56
|
-
|
|
57
40
|
/**
|
|
58
41
|
* Encodes GenericExtraArgsV3 using tightly packed binary format.
|
|
59
42
|
*
|
|
60
43
|
* Binary format:
|
|
61
|
-
* - tag (4 bytes):
|
|
44
|
+
* - tag (4 bytes): 0xa69dd4aa
|
|
62
45
|
* - gasLimit (4 bytes): uint32 big-endian
|
|
63
46
|
* - blockConfirmations (2 bytes): uint16 big-endian
|
|
64
47
|
* - ccvsLength (1 byte): uint8
|
package/src/evm/hasher.ts
CHANGED
|
@@ -102,24 +102,39 @@ export function getV16LeafHasher(
|
|
|
102
102
|
onRamp: string,
|
|
103
103
|
{ logger = console }: WithLogger = {},
|
|
104
104
|
): LeafHasher<typeof CCIPVersion.V1_6> {
|
|
105
|
+
const onRampBytes = getAddressBytes(onRamp)
|
|
106
|
+
// Addresses ≤32 bytes (EVM 20B, Aptos/Solana/Sui 32B) are zero-padded to 32 bytes;
|
|
107
|
+
// Addresses >32 bytes (e.g., TON 36B) are used as raw bytes without padding
|
|
108
|
+
const onRampForHash = onRampBytes.length <= 32 ? zeroPadValue(onRampBytes, 32) : onRampBytes
|
|
109
|
+
|
|
105
110
|
const metadataInput = concat([
|
|
106
111
|
ANY_2_EVM_MESSAGE_HASH,
|
|
107
112
|
toBeHex(sourceChainSelector, 32),
|
|
108
113
|
toBeHex(destChainSelector, 32),
|
|
109
|
-
keccak256(
|
|
114
|
+
keccak256(onRampForHash),
|
|
110
115
|
])
|
|
111
116
|
|
|
112
117
|
return (message: ReadonlyDeep<CCIPMessage<typeof CCIPVersion.V1_6>>): string => {
|
|
113
118
|
logger.debug('Message', message)
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
if (
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
119
|
+
|
|
120
|
+
// Non-EVM sources (e.g., TON) embed gasLimit on the message during parsing,
|
|
121
|
+
// since their extraArgs format differs. EVM sources decode from extraArgs.
|
|
122
|
+
let gasLimit: bigint
|
|
123
|
+
if ('gasLimit' in message) {
|
|
124
|
+
gasLimit = message.gasLimit
|
|
125
|
+
} else {
|
|
126
|
+
const parsedArgs = decodeExtraArgs(
|
|
127
|
+
message.extraArgs,
|
|
128
|
+
networkInfo(message.sourceChainSelector).family,
|
|
129
|
+
)
|
|
130
|
+
if (
|
|
131
|
+
!parsedArgs ||
|
|
132
|
+
(parsedArgs._tag !== 'EVMExtraArgsV1' && parsedArgs._tag !== 'EVMExtraArgsV2')
|
|
133
|
+
)
|
|
134
|
+
throw new CCIPExtraArgsInvalidError('EVM', message.extraArgs)
|
|
135
|
+
gasLimit = parsedArgs.gasLimit
|
|
136
|
+
}
|
|
137
|
+
|
|
123
138
|
const tokenAmounts = message.tokenAmounts.map((ta) => ({
|
|
124
139
|
...ta,
|
|
125
140
|
sourcePoolAddress: zeroPadValue(getAddressBytes(ta.sourcePoolAddress), 32),
|
|
@@ -140,16 +155,13 @@ export function getV16LeafHasher(
|
|
|
140
155
|
'uint256 gasLimit',
|
|
141
156
|
'uint64 nonce',
|
|
142
157
|
],
|
|
143
|
-
[
|
|
144
|
-
message.messageId,
|
|
145
|
-
message.receiver,
|
|
146
|
-
message.sequenceNumber,
|
|
147
|
-
parsedArgs.gasLimit,
|
|
148
|
-
message.nonce,
|
|
149
|
-
],
|
|
158
|
+
[message.messageId, message.receiver, message.sequenceNumber, gasLimit, message.nonce],
|
|
150
159
|
)
|
|
151
160
|
|
|
152
|
-
const
|
|
161
|
+
const senderBytes = getAddressBytes(message.sender)
|
|
162
|
+
// Addresses ≤32 bytes (EVM 20B, Aptos/Solana/Sui 32B) are zero-padded to 32 bytes;
|
|
163
|
+
// Addresses >32 bytes (e.g., TON 36B) are used as raw bytes without padding
|
|
164
|
+
const sender = senderBytes.length <= 32 ? zeroPadValue(senderBytes, 32) : senderBytes
|
|
153
165
|
|
|
154
166
|
const packedValues = defaultAbiCoder.encode(
|
|
155
167
|
[
|