@chainlink/ccip-sdk 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 +127 -80
- package/dist/aptos/hasher.d.ts.map +1 -1
- package/dist/aptos/hasher.js +7 -6
- package/dist/aptos/hasher.js.map +1 -1
- package/dist/aptos/index.d.ts +7 -2
- package/dist/aptos/index.d.ts.map +1 -1
- package/dist/aptos/index.js +29 -20
- package/dist/aptos/index.js.map +1 -1
- package/dist/aptos/logs.d.ts +5 -3
- package/dist/aptos/logs.d.ts.map +1 -1
- package/dist/aptos/logs.js +64 -27
- package/dist/aptos/logs.js.map +1 -1
- package/dist/aptos/token.d.ts.map +1 -1
- package/dist/aptos/token.js +2 -1
- package/dist/aptos/token.js.map +1 -1
- package/dist/aptos/types.js +6 -6
- package/dist/aptos/types.js.map +1 -1
- package/dist/chain.d.ts +36 -11
- package/dist/chain.d.ts.map +1 -1
- package/dist/chain.js +34 -2
- package/dist/chain.js.map +1 -1
- package/dist/commits.d.ts +2 -3
- package/dist/commits.d.ts.map +1 -1
- package/dist/commits.js +19 -8
- package/dist/commits.js.map +1 -1
- package/dist/errors/CCIPError.d.ts +48 -0
- package/dist/errors/CCIPError.d.ts.map +1 -0
- package/dist/errors/CCIPError.js +65 -0
- package/dist/errors/CCIPError.js.map +1 -0
- package/dist/errors/codes.d.ts +120 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +156 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +26 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +51 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/recovery.d.ts +6 -0
- package/dist/errors/recovery.d.ts.map +1 -0
- package/dist/errors/recovery.js +118 -0
- package/dist/errors/recovery.js.map +1 -0
- package/dist/errors/specialized.d.ts +637 -0
- package/dist/errors/specialized.d.ts.map +1 -0
- package/dist/errors/specialized.js +1298 -0
- package/dist/errors/specialized.js.map +1 -0
- package/dist/errors/utils.d.ts +11 -0
- package/dist/errors/utils.d.ts.map +1 -0
- package/dist/errors/utils.js +61 -0
- package/dist/errors/utils.js.map +1 -0
- package/dist/evm/abi/CommitStore_1_5.js +1 -1
- package/dist/evm/abi/LockReleaseTokenPool_1_5.js +1 -1
- package/dist/evm/abi/OffRamp_1_5.js +1 -1
- package/dist/evm/abi/OnRamp_1_5.js +1 -1
- package/dist/evm/abi/PriceRegistry_1_2.d.ts +443 -0
- package/dist/evm/abi/PriceRegistry_1_2.d.ts.map +1 -0
- package/dist/evm/abi/PriceRegistry_1_2.js +439 -0
- package/dist/evm/abi/PriceRegistry_1_2.js.map +1 -0
- package/dist/evm/const.d.ts +1 -0
- package/dist/evm/const.d.ts.map +1 -1
- package/dist/evm/const.js +2 -0
- package/dist/evm/const.js.map +1 -1
- package/dist/evm/hasher.d.ts.map +1 -1
- package/dist/evm/hasher.js +7 -6
- package/dist/evm/hasher.js.map +1 -1
- package/dist/evm/index.d.ts +9 -13
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +85 -68
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/logs.d.ts.map +1 -1
- package/dist/evm/logs.js +47 -16
- package/dist/evm/logs.js.map +1 -1
- package/dist/evm/messages.d.ts +7 -6
- package/dist/evm/messages.d.ts.map +1 -1
- package/dist/evm/offchain.js +1 -1
- package/dist/evm/offchain.js.map +1 -1
- package/dist/evm/types.d.ts +10 -0
- package/dist/evm/types.d.ts.map +1 -0
- package/dist/evm/types.js +2 -0
- package/dist/evm/types.js.map +1 -0
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +9 -5
- package/dist/execution.js.map +1 -1
- package/dist/extra-args.d.ts.map +1 -1
- package/dist/extra-args.js +4 -3
- package/dist/extra-args.js.map +1 -1
- package/dist/gas.d.ts.map +1 -1
- package/dist/gas.js +3 -2
- package/dist/gas.js.map +1 -1
- package/dist/hasher/hasher.d.ts.map +1 -1
- package/dist/hasher/hasher.js +2 -1
- package/dist/hasher/hasher.js.map +1 -1
- package/dist/hasher/merklemulti.d.ts.map +1 -1
- package/dist/hasher/merklemulti.js +9 -8
- package/dist/hasher/merklemulti.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/offchain.d.ts.map +1 -1
- package/dist/offchain.js +5 -8
- package/dist/offchain.js.map +1 -1
- package/dist/requests.d.ts +1 -1
- package/dist/requests.d.ts.map +1 -1
- package/dist/requests.js +37 -43
- package/dist/requests.js.map +1 -1
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +22 -0
- package/dist/selectors.js.map +1 -1
- package/dist/solana/cleanup.d.ts +2 -2
- package/dist/solana/cleanup.d.ts.map +1 -1
- package/dist/solana/cleanup.js +2 -3
- package/dist/solana/cleanup.js.map +1 -1
- package/dist/solana/exec.d.ts.map +1 -1
- package/dist/solana/exec.js +12 -12
- package/dist/solana/exec.js.map +1 -1
- package/dist/solana/hasher.d.ts.map +1 -1
- package/dist/solana/hasher.js +6 -5
- package/dist/solana/hasher.js.map +1 -1
- package/dist/solana/index.d.ts +30 -13
- package/dist/solana/index.d.ts.map +1 -1
- package/dist/solana/index.js +96 -143
- package/dist/solana/index.js.map +1 -1
- package/dist/solana/logs.d.ts +15 -0
- package/dist/solana/logs.d.ts.map +1 -0
- package/dist/solana/logs.js +106 -0
- package/dist/solana/logs.js.map +1 -0
- package/dist/solana/offchain.d.ts.map +1 -1
- package/dist/solana/offchain.js +6 -5
- package/dist/solana/offchain.js.map +1 -1
- package/dist/solana/patchBorsh.d.ts.map +1 -1
- package/dist/solana/patchBorsh.js +3 -2
- package/dist/solana/patchBorsh.js.map +1 -1
- package/dist/solana/send.d.ts.map +1 -1
- package/dist/solana/send.js +8 -7
- package/dist/solana/send.js.map +1 -1
- package/dist/solana/utils.d.ts +7 -8
- package/dist/solana/utils.d.ts.map +1 -1
- package/dist/solana/utils.js +23 -11
- package/dist/solana/utils.js.map +1 -1
- package/dist/sui/discovery.d.ts +18 -0
- package/dist/sui/discovery.d.ts.map +1 -0
- package/dist/sui/discovery.js +116 -0
- package/dist/sui/discovery.js.map +1 -0
- package/dist/sui/events.d.ts +36 -0
- package/dist/sui/events.d.ts.map +1 -0
- package/dist/sui/events.js +176 -0
- package/dist/sui/events.js.map +1 -0
- package/dist/sui/hasher.d.ts.map +1 -1
- package/dist/sui/hasher.js +6 -5
- package/dist/sui/hasher.js.map +1 -1
- package/dist/sui/index.d.ts +69 -41
- package/dist/sui/index.d.ts.map +1 -1
- package/dist/sui/index.js +402 -65
- package/dist/sui/index.js.map +1 -1
- package/dist/sui/manuallyExec/encoder.d.ts +8 -0
- package/dist/sui/manuallyExec/encoder.d.ts.map +1 -0
- package/dist/sui/manuallyExec/encoder.js +76 -0
- package/dist/sui/manuallyExec/encoder.js.map +1 -0
- package/dist/sui/manuallyExec/index.d.ts +37 -0
- package/dist/sui/manuallyExec/index.d.ts.map +1 -0
- package/dist/sui/manuallyExec/index.js +81 -0
- package/dist/sui/manuallyExec/index.js.map +1 -0
- package/dist/sui/objects.d.ts +46 -0
- package/dist/sui/objects.d.ts.map +1 -0
- package/dist/sui/objects.js +259 -0
- package/dist/sui/objects.js.map +1 -0
- package/dist/ton/bindings/offramp.d.ts +48 -0
- package/dist/ton/bindings/offramp.d.ts.map +1 -0
- package/dist/ton/bindings/offramp.js +63 -0
- package/dist/ton/bindings/offramp.js.map +1 -0
- package/dist/ton/bindings/onramp.d.ts +40 -0
- package/dist/ton/bindings/onramp.d.ts.map +1 -0
- package/dist/ton/bindings/onramp.js +51 -0
- package/dist/ton/bindings/onramp.js.map +1 -0
- package/dist/ton/bindings/router.d.ts +47 -0
- package/dist/ton/bindings/router.d.ts.map +1 -0
- package/dist/ton/bindings/router.js +51 -0
- package/dist/ton/bindings/router.js.map +1 -0
- package/dist/ton/exec.d.ts +18 -0
- package/dist/ton/exec.d.ts.map +1 -0
- package/dist/ton/exec.js +28 -0
- package/dist/ton/exec.js.map +1 -0
- package/dist/ton/hasher.d.ts +27 -0
- package/dist/ton/hasher.d.ts.map +1 -0
- package/dist/ton/hasher.js +134 -0
- package/dist/ton/hasher.js.map +1 -0
- package/dist/ton/index.d.ts +247 -0
- package/dist/ton/index.d.ts.map +1 -0
- package/dist/ton/index.js +781 -0
- package/dist/ton/index.js.map +1 -0
- package/dist/ton/logs.d.ts +26 -0
- package/dist/ton/logs.d.ts.map +1 -0
- package/dist/ton/logs.js +126 -0
- package/dist/ton/logs.js.map +1 -0
- package/dist/ton/types.d.ts +37 -0
- package/dist/ton/types.d.ts.map +1 -0
- package/dist/ton/types.js +92 -0
- package/dist/ton/types.js.map +1 -0
- package/dist/ton/utils.d.ts +67 -0
- package/dist/ton/utils.d.ts.map +1 -0
- package/dist/ton/utils.js +425 -0
- package/dist/ton/utils.js.map +1 -0
- package/dist/types.d.ts +4 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +52 -17
- package/dist/utils.js.map +1 -1
- package/package.json +11 -9
- package/src/aptos/hasher.ts +10 -6
- package/src/aptos/index.ts +50 -31
- package/src/aptos/logs.ts +85 -29
- package/src/aptos/token.ts +5 -1
- package/src/aptos/types.ts +6 -6
- package/src/chain.ts +83 -12
- package/src/commits.ts +23 -11
- package/src/errors/CCIPError.ts +86 -0
- package/src/errors/codes.ts +179 -0
- package/src/errors/index.ts +175 -0
- package/src/errors/recovery.ts +170 -0
- package/src/errors/specialized.ts +1655 -0
- package/src/errors/utils.ts +73 -0
- package/src/evm/abi/CommitStore_1_5.ts +1 -1
- package/src/evm/abi/LockReleaseTokenPool_1_5.ts +1 -1
- package/src/evm/abi/OffRamp_1_5.ts +1 -1
- package/src/evm/abi/OnRamp_1_5.ts +1 -1
- package/src/evm/abi/PriceRegistry_1_2.ts +438 -0
- package/src/evm/const.ts +2 -0
- package/src/evm/hasher.ts +7 -6
- package/src/evm/index.ts +104 -86
- package/src/evm/logs.ts +64 -16
- package/src/evm/messages.ts +14 -14
- package/src/evm/offchain.ts +1 -1
- package/src/evm/types.ts +11 -0
- package/src/execution.ts +13 -9
- package/src/extra-args.ts +4 -3
- package/src/gas.ts +10 -3
- package/src/hasher/hasher.ts +2 -1
- package/src/hasher/merklemulti.ts +18 -8
- package/src/index.ts +15 -2
- package/src/offchain.ts +10 -14
- package/src/requests.ts +51 -53
- package/src/selectors.ts +23 -0
- package/src/solana/cleanup.ts +2 -4
- package/src/solana/exec.ts +13 -13
- package/src/solana/hasher.ts +9 -5
- package/src/solana/index.ts +126 -200
- package/src/solana/logs.ts +155 -0
- package/src/solana/offchain.ts +10 -7
- package/src/solana/patchBorsh.ts +3 -2
- package/src/solana/send.ts +14 -7
- package/src/solana/utils.ts +31 -17
- package/src/sui/discovery.ts +163 -0
- package/src/sui/events.ts +325 -0
- package/src/sui/hasher.ts +6 -5
- package/src/sui/index.ts +528 -80
- package/src/sui/manuallyExec/encoder.ts +88 -0
- package/src/sui/manuallyExec/index.ts +137 -0
- package/src/sui/objects.ts +358 -0
- package/src/ton/bindings/offramp.ts +96 -0
- package/src/ton/bindings/onramp.ts +72 -0
- package/src/ton/bindings/router.ts +65 -0
- package/src/ton/exec.ts +44 -0
- package/src/ton/hasher.ts +184 -0
- package/src/ton/index.ts +989 -0
- package/src/ton/logs.ts +157 -0
- package/src/ton/types.ts +143 -0
- package/src/ton/utils.ts +514 -0
- package/src/types.ts +6 -2
- package/src/utils.ts +58 -23
- package/tsconfig.json +2 -1
package/README.md
CHANGED
|
@@ -1,118 +1,165 @@
|
|
|
1
1
|
# @chainlink/ccip-sdk
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
This tool can be used to query and interact with [CCIP](https://ccip.chain.link) contracts deployed
|
|
6
|
-
in supported blockchains, through its publicly accessible data and methods, requiring only
|
|
7
|
-
compatible RPCs for each involved network.
|
|
3
|
+
TypeScript SDK for integrating [CCIP](https://chain.link/cross-chain) (Cross-Chain Interoperability Protocol) into your applications.
|
|
8
4
|
|
|
9
5
|
> [!IMPORTANT]
|
|
10
6
|
> This tool is provided under an MIT license and is for convenience and illustration purposes only.
|
|
11
7
|
|
|
12
|
-
|
|
8
|
+
📖 **[Full SDK Documentation](https://github.com/smartcontractkit/ccip-tools-ts/blob/main/docs/sdk/index.md)** - Complete API reference, advanced patterns, and tree-shaking guide.
|
|
13
9
|
|
|
14
|
-
|
|
10
|
+
## Installation
|
|
15
11
|
|
|
16
|
-
```
|
|
17
|
-
npm install @
|
|
12
|
+
```bash
|
|
13
|
+
npm install @chainlink/ccip-sdk
|
|
18
14
|
```
|
|
19
15
|
|
|
20
16
|
> [!NOTE]
|
|
21
|
-
>
|
|
17
|
+
> Node.js v20+ required. v23+ recommended for native TypeScript execution.
|
|
22
18
|
|
|
23
|
-
## Chain
|
|
19
|
+
## Chain Classes
|
|
24
20
|
|
|
25
|
-
The
|
|
26
|
-
implemented to provide support for a given chain family. Static methods are required by the
|
|
27
|
-
`ChainStatic` interface, and are used for functions that don't require an instance or provider.
|
|
21
|
+
The SDK provides a unified `Chain` class interface for each blockchain family. Create instances using `fromUrl`:
|
|
28
22
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
- [Solana](./src/solana/index.ts): uses [solana-web3.js](https://github.com/solana-foundation/solana-web3.js) and [Anchor](https://github.com/solana-foundation/anchor)
|
|
32
|
-
- [Aptos](./src/aptos/index.ts): uses [aptos-ts-sdk](https://github.com/aptos-labs/aptos-ts-sdk)
|
|
23
|
+
```ts
|
|
24
|
+
import { EVMChain, SolanaChain, AptosChain } from '@chainlink/ccip-sdk'
|
|
33
25
|
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
// EVM chains (Ethereum, Arbitrum, Optimism, etc.)
|
|
27
|
+
const evmChain = await EVMChain.fromUrl('https://ethereum-sepolia-rpc.publicnode.com')
|
|
36
28
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
[supportedChains](./src/supported-chains.ts) mapping, or even construct directly.
|
|
29
|
+
// Solana
|
|
30
|
+
const solanaChain = await SolanaChain.fromUrl('https://api.devnet.solana.com')
|
|
40
31
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class MySolanaChain extends SolanaChain {
|
|
44
|
-
// ...custom implementation
|
|
45
|
-
}
|
|
46
|
-
supportedChains[ChainFamily.Solana] = MySolanaChain
|
|
32
|
+
// Aptos
|
|
33
|
+
const aptosChain = await AptosChain.fromUrl('https://api.testnet.aptoslabs.com/v1')
|
|
47
34
|
```
|
|
48
35
|
|
|
49
|
-
##
|
|
36
|
+
## Common Tasks
|
|
50
37
|
|
|
51
|
-
|
|
52
|
-
of the chain class with a provider. The only common/required signature is
|
|
53
|
-
`fromUrl(url: string): Promise<Chain>`, but each chain family class usually also provides a
|
|
54
|
-
constructor from the specific library provider (e.g. `EVMChain.fromProvider(provider: ethers.JsonRpcApiProvider)`)
|
|
38
|
+
### Track a CCIP Message
|
|
55
39
|
|
|
56
|
-
|
|
40
|
+
```ts
|
|
41
|
+
import { EVMChain } from '@chainlink/ccip-sdk'
|
|
57
42
|
|
|
58
|
-
|
|
59
|
-
require a `wallet` property in last `opts` parameter. This is marked as `unknown` in generic Chain
|
|
60
|
-
abstract class, but required to be an asynchronous signer wallet respective to each chain family:
|
|
43
|
+
const source = await EVMChain.fromUrl('https://ethereum-sepolia-rpc.publicnode.com')
|
|
61
44
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
45
|
+
// Fetch message details from a transaction
|
|
46
|
+
const requests = await source.fetchRequestsInTx(
|
|
47
|
+
'0xb8b27d9811509e3c364c9afaf8f14d8ebc65dec06327493981d7f7f4a00f2918'
|
|
48
|
+
)
|
|
65
49
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
50
|
+
const request = requests[0]
|
|
51
|
+
console.log('Message ID:', request.message.messageId)
|
|
52
|
+
console.log('Sender:', request.message.sender)
|
|
53
|
+
console.log('Destination chain:', request.lane.destChainSelector)
|
|
54
|
+
```
|
|
69
55
|
|
|
70
|
-
|
|
71
|
-
`generateUnsignedExecuteReport` methods, returning chain-family-specific unsigned data, which one
|
|
72
|
-
can use to sign and send the transactions manually.
|
|
56
|
+
### Get Fee Estimate
|
|
73
57
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
retries, gas estimation and transactions batching.
|
|
58
|
+
```ts
|
|
59
|
+
import { EVMChain, networkInfo } from '@chainlink/ccip-sdk'
|
|
77
60
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
61
|
+
const source = await EVMChain.fromUrl('https://ethereum-sepolia-rpc.publicnode.com')
|
|
62
|
+
const router = '0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59' // Sepolia Router
|
|
63
|
+
const destSelector = networkInfo('ethereum-testnet-sepolia-arbitrum-1').chainSelector
|
|
81
64
|
|
|
82
|
-
|
|
65
|
+
const fee = await source.getFee(router, destSelector, {
|
|
66
|
+
receiver: '0xYourReceiverAddress',
|
|
67
|
+
data: '0x48656c6c6f', // "Hello" in hex
|
|
68
|
+
extraArgs: { gasLimit: 200_000 }, // Gas limit for receiver's ccipReceive callback
|
|
69
|
+
})
|
|
83
70
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
This should ensure those chain family implementations are registered and used by utility functions.
|
|
71
|
+
console.log('Fee in native token:', fee.toString())
|
|
72
|
+
```
|
|
87
73
|
|
|
88
|
-
|
|
74
|
+
### Send a Cross-Chain Message
|
|
89
75
|
|
|
90
|
-
### Fetching details of a CCIP message
|
|
91
76
|
```ts
|
|
92
|
-
import {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
77
|
+
import { EVMChain, networkInfo } from '@chainlink/ccip-sdk'
|
|
78
|
+
import { Wallet } from 'ethers'
|
|
79
|
+
|
|
80
|
+
const source = await EVMChain.fromUrl('https://ethereum-sepolia-rpc.publicnode.com')
|
|
81
|
+
const wallet = new Wallet('YOUR_PRIVATE_KEY', source.provider)
|
|
82
|
+
|
|
83
|
+
const router = '0x0BF3dE8c5D3e8A2B34D2BEeB17ABfCeBaf363A59'
|
|
84
|
+
const destSelector = networkInfo('ethereum-testnet-sepolia-arbitrum-1').chainSelector
|
|
85
|
+
|
|
86
|
+
// Get fee first
|
|
87
|
+
const fee = await source.getFee(router, destSelector, {
|
|
88
|
+
receiver: '0xYourReceiverAddress',
|
|
89
|
+
data: '0x48656c6c6f',
|
|
90
|
+
extraArgs: {
|
|
91
|
+
gasLimit: 200_000,
|
|
92
|
+
allowOutOfOrderExecution: true, // Don't wait for prior messages from this sender
|
|
93
|
+
},
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
// Send the message
|
|
97
|
+
const request = await source.sendMessage(
|
|
98
|
+
router,
|
|
99
|
+
destSelector,
|
|
100
|
+
{
|
|
101
|
+
receiver: '0xYourReceiverAddress',
|
|
102
|
+
data: '0x48656c6c6f',
|
|
103
|
+
extraArgs: { gasLimit: 200_000, allowOutOfOrderExecution: true },
|
|
104
|
+
fee,
|
|
105
|
+
},
|
|
106
|
+
{ wallet }
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
console.log('Transaction hash:', request.tx.hash)
|
|
110
|
+
console.log('Message ID:', request.message.messageId)
|
|
96
111
|
```
|
|
97
112
|
|
|
98
|
-
|
|
113
|
+
## Wallet Configuration
|
|
114
|
+
|
|
115
|
+
Transaction-sending methods require a chain-specific wallet:
|
|
116
|
+
|
|
117
|
+
| Chain | Wallet Type | Example |
|
|
118
|
+
| ------ | --------------- | ------------------------------------------ |
|
|
119
|
+
| EVM | `ethers.Signer` | `new Wallet(privateKey, provider)` |
|
|
120
|
+
| Solana | `anchor.Wallet` | `new Wallet(Keypair.fromSecretKey(...))` |
|
|
121
|
+
| Aptos | `aptos.Account` | `Account.fromPrivateKey(...)` |
|
|
122
|
+
|
|
123
|
+
### Unsigned Transactions
|
|
124
|
+
|
|
125
|
+
For custom signing workflows (e.g., browser wallets, hardware wallets), use the `generateUnsigned*` methods:
|
|
126
|
+
|
|
99
127
|
```ts
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
const dest = networkInfo('ethereum-mainnet').chainSelector
|
|
104
|
-
const message: AnyMessage = {
|
|
105
|
-
receiver: '0xReceiverAddress',
|
|
106
|
-
data: '0xbeef',
|
|
107
|
-
extraArgs: { gasLimit: 250000, allowOutOfOrderExecution: true },
|
|
108
|
-
}
|
|
109
|
-
const fee = await source.getFee(router, dest, message)
|
|
110
|
-
const request = await source.sendMessage(
|
|
128
|
+
// Generate unsigned transaction data
|
|
129
|
+
const unsignedTx = await source.generateUnsignedSendMessage(
|
|
130
|
+
senderAddress, // Your wallet address
|
|
111
131
|
router,
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
{ wallet: process.env['SOLANA_PRIVATE_KEY'] },
|
|
132
|
+
destSelector,
|
|
133
|
+
message
|
|
115
134
|
)
|
|
116
|
-
|
|
117
|
-
|
|
135
|
+
|
|
136
|
+
// Sign and send with your own logic
|
|
137
|
+
const signedTx = await customSigner.sign(unsignedTx)
|
|
138
|
+
await customSender.broadcast(signedTx)
|
|
118
139
|
```
|
|
140
|
+
|
|
141
|
+
For EVM chains in browsers, get a signer from the connected wallet:
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
const signer = await source.provider.getSigner()
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Supported Chains
|
|
148
|
+
|
|
149
|
+
| Chain Family | Class | Library | Status |
|
|
150
|
+
| ------------ | ------------- | ------------------------------------------------------------------------ | -------------- |
|
|
151
|
+
| EVM | `EVMChain` | [ethers.js v6](https://docs.ethers.org/v6/) | Supported |
|
|
152
|
+
| Solana | `SolanaChain` | [solana-web3.js](https://github.com/solana-foundation/solana-web3.js) | Supported |
|
|
153
|
+
| Aptos | `AptosChain` | [aptos-ts-sdk](https://github.com/aptos-labs/aptos-ts-sdk) | Supported |
|
|
154
|
+
| Sui | `SuiChain` | [@mysten/sui](https://github.com/MystenLabs/sui) | In Development |
|
|
155
|
+
| TON | `TONChain` | [@ton/ton](https://github.com/ton-org/ton) | In Development |
|
|
156
|
+
|
|
157
|
+
## Related
|
|
158
|
+
|
|
159
|
+
- [@chainlink/ccip-cli](https://www.npmjs.com/package/@chainlink/ccip-cli) - Command-line interface
|
|
160
|
+
- [CCIP Official Docs](https://docs.chain.link/ccip) - Protocol documentation
|
|
161
|
+
- [CCIP Directory](https://docs.chain.link/ccip/directory) - Router addresses
|
|
162
|
+
|
|
163
|
+
## License
|
|
164
|
+
|
|
165
|
+
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasher.d.ts","sourceRoot":"","sources":["../../src/aptos/hasher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hasher.d.ts","sourceRoot":"","sources":["../../src/aptos/hasher.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,UAAU,EAAyB,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAIlF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAAE,EACtE,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,EACN,OAAO,GACR,EAAE;IACD,mBAAmB,EAAE,MAAM,CAAA;IAC3B,iBAAiB,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,CAAC,CAAA;CACX,GAAG,UAAU,CAAC,CAAC,CAAC,CAUhB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAAC,OAAO,WAAW,CAAC,IAAI,CAAC,EAChE,YAAY,EAAE,MAAM,GACnB,MAAM,CA6CR;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,qBAAqB,MAAM,EAC3B,mBAAmB,MAAM,EACzB,QAAQ,MAAM,KACb,MAOF,CAAA"}
|
package/dist/aptos/hasher.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { concat, id, keccak256, zeroPadValue } from 'ethers';
|
|
2
|
+
import { CCIPAptosHasherVersionUnsupportedError, CCIPExtraArgsInvalidError, } from "../errors/index.js";
|
|
2
3
|
import { decodeExtraArgs } from "../extra-args.js";
|
|
3
4
|
import { LEAF_DOMAIN_SEPARATOR } from "../hasher/common.js";
|
|
4
5
|
import { CCIPVersion } from "../types.js";
|
|
@@ -16,7 +17,7 @@ export function getAptosLeafHasher({ sourceChainSelector, destChainSelector, onR
|
|
|
16
17
|
metadataHash = hashAptosMetadata(sourceChainSelector, destChainSelector, onRamp);
|
|
17
18
|
return ((message) => hashV16AptosMessage(message, metadataHash));
|
|
18
19
|
default:
|
|
19
|
-
throw new
|
|
20
|
+
throw new CCIPAptosHasherVersionUnsupportedError(version);
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
@@ -28,20 +29,20 @@ export function getAptosLeafHasher({ sourceChainSelector, destChainSelector, onR
|
|
|
28
29
|
export function hashV16AptosMessage(message, metadataHash) {
|
|
29
30
|
let gasLimit;
|
|
30
31
|
if (!('gasLimit' in message)) {
|
|
31
|
-
const parsedArgs = decodeExtraArgs(message.extraArgs, networkInfo(message.
|
|
32
|
+
const parsedArgs = decodeExtraArgs(message.extraArgs, networkInfo(message.sourceChainSelector).family);
|
|
32
33
|
if (!parsedArgs || !('gasLimit' in parsedArgs))
|
|
33
|
-
throw new
|
|
34
|
+
throw new CCIPExtraArgsInvalidError('Aptos', message.extraArgs);
|
|
34
35
|
gasLimit = parsedArgs.gasLimit;
|
|
35
36
|
}
|
|
36
37
|
else {
|
|
37
38
|
gasLimit = message.gasLimit;
|
|
38
39
|
}
|
|
39
40
|
const innerHash = concat([
|
|
40
|
-
message.
|
|
41
|
+
message.messageId,
|
|
41
42
|
zeroPadValue(message.receiver, 32),
|
|
42
|
-
encodeNumber(message.
|
|
43
|
+
encodeNumber(message.sequenceNumber),
|
|
43
44
|
encodeNumber(gasLimit), // Aptos as dest uses EVMExtraArgs
|
|
44
|
-
encodeNumber(message.
|
|
45
|
+
encodeNumber(message.nonce),
|
|
45
46
|
]);
|
|
46
47
|
const tokenHash = concat([
|
|
47
48
|
encodeNumber(message.tokenAmounts.length),
|
package/dist/aptos/hasher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasher.js","sourceRoot":"","sources":["../../src/aptos/hasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAmB,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAA2C,WAAW,EAAE,MAAM,aAAa,CAAA;AAClF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEzD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAsC,EACtE,mBAAmB,EACnB,iBAAiB,EACjB,MAAM,EACN,OAAO,GAMR;IACC,IAAI,YAAoB,CAAA;IACxB,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,WAAW,CAAC,IAAI;YACnB,YAAY,GAAG,iBAAiB,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAA;YAChF,OAAO,CAAC,CAAC,OAA6C,EAAU,EAAE,CAChE,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAkB,CAAA;QAChE;YACE,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"hasher.js","sourceRoot":"","sources":["../../src/aptos/hasher.ts"],"names":[],"mappings":"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"}
|
package/dist/aptos/index.d.ts
CHANGED
|
@@ -3,15 +3,16 @@ import { type BytesLike } from 'ethers';
|
|
|
3
3
|
import type { PickDeep } from 'type-fest';
|
|
4
4
|
import { type LogFilter, type TokenInfo, type TokenPoolRemote, Chain } from '../chain.ts';
|
|
5
5
|
import { type EVMExtraArgsV2, type ExtraArgs, type SVMExtraArgsV1 } from '../extra-args.ts';
|
|
6
|
+
import { type UnsignedAptosTx } from './types.ts';
|
|
6
7
|
import type { LeafHasher } from '../hasher/common.ts';
|
|
7
8
|
import { type AnyMessage, type CCIPMessage, type CCIPRequest, type ChainTransaction, type CommitReport, type ExecutionReceipt, type ExecutionReport, type Lane, type Log_, type NetworkInfo, type OffchainTokenData, type WithLogger, ChainFamily } from '../types.ts';
|
|
8
|
-
import { type UnsignedAptosTx } from './types.ts';
|
|
9
9
|
/**
|
|
10
10
|
* Aptos chain implementation supporting Aptos networks.
|
|
11
11
|
*/
|
|
12
12
|
export declare class AptosChain extends Chain<typeof ChainFamily.Aptos> {
|
|
13
13
|
static readonly family: "aptos";
|
|
14
14
|
static readonly decimals = 8;
|
|
15
|
+
readonly destroy$: Promise<void>;
|
|
15
16
|
provider: Aptos;
|
|
16
17
|
getTokenInfo: (token: string) => Promise<TokenInfo>;
|
|
17
18
|
_getAccountModulesNames: (address: string) => Promise<string[]>;
|
|
@@ -57,7 +58,7 @@ export declare class AptosChain extends Chain<typeof ChainFamily.Aptos> {
|
|
|
57
58
|
page?: number;
|
|
58
59
|
}): Promise<CCIPRequest>;
|
|
59
60
|
/** {@inheritDoc Chain.fetchAllMessagesInBatch} */
|
|
60
|
-
fetchAllMessagesInBatch<R extends PickDeep<CCIPRequest, 'lane' | `log.${'topics' | 'address' | 'blockNumber'}` | 'message.
|
|
61
|
+
fetchAllMessagesInBatch<R extends PickDeep<CCIPRequest, 'lane' | `log.${'topics' | 'address' | 'blockNumber'}` | 'message.sequenceNumber'>>(request: R, commit: Pick<CommitReport, 'minSeqNr' | 'maxSeqNr'>, opts?: {
|
|
61
62
|
page?: number;
|
|
62
63
|
}): Promise<R['message'][]>;
|
|
63
64
|
/** {@inheritDoc Chain.typeAndVersion} */
|
|
@@ -123,6 +124,10 @@ export declare class AptosChain extends Chain<typeof ChainFamily.Aptos> {
|
|
|
123
124
|
* @returns Aptos address (0x-prefixed hex, 32 bytes padded).
|
|
124
125
|
*/
|
|
125
126
|
static getAddress(bytes: BytesLike): string;
|
|
127
|
+
/**
|
|
128
|
+
* Validates a transaction hash format for Aptos
|
|
129
|
+
*/
|
|
130
|
+
static isTxHash(v: unknown): v is `0x${string}`;
|
|
126
131
|
/**
|
|
127
132
|
* Gets the leaf hasher for Aptos destination chains.
|
|
128
133
|
* @param lane - Lane configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aptos/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,WAAW,EAEX,OAAO,EAGR,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,KAAK,SAAS,EAUf,MAAM,QAAQ,CAAA;AAEf,OAAO,KAAK,EAAE,QAAQ,EAAe,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aptos/index.ts"],"names":[],"mappings":"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"}
|
package/dist/aptos/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Aptos, AptosConfig, Deserializer, Network, SimpleTransaction, TransactionResponseType, } from '@aptos-labs/ts-sdk';
|
|
2
2
|
import { concat, dataLength, dataSlice, decodeBase64, getBytes, hexlify, isBytesLike, isHexString, zeroPadValue, } from 'ethers';
|
|
3
3
|
import { memoize } from 'micro-memoize';
|
|
4
|
-
import { generateUnsignedCcipSend, getFee } from "./send.js";
|
|
5
4
|
import { Chain } from "../chain.js";
|
|
5
|
+
import { generateUnsignedCcipSend, getFee } from "./send.js";
|
|
6
|
+
import { CCIPAptosAddressInvalidError, CCIPAptosExtraArgsEncodingError, CCIPAptosExtraArgsV2RequiredError, CCIPAptosLogInvalidError, CCIPAptosNetworkUnknownError, CCIPAptosRegistryTypeInvalidError, CCIPAptosTokenNotRegisteredError, CCIPAptosTransactionInvalidError, CCIPAptosTransactionTypeInvalidError, CCIPAptosWalletInvalidError, CCIPError, CCIPOnRampRequiredError, } from "../errors/index.js";
|
|
6
7
|
import { EVMExtraArgsV2Tag, SVMExtraArgsV1Tag, } from "../extra-args.js";
|
|
8
|
+
import { EVMExtraArgsV2Codec, SVMExtraArgsV1Codec, isAptosAccount, } from "./types.js";
|
|
7
9
|
import { supportedChains } from "../supported-chains.js";
|
|
8
10
|
import { ChainFamily, } from "../types.js";
|
|
9
11
|
import { convertKeysToCamelCase, decodeAddress, decodeOnRampAddress, getAddressBytes, getDataBytes, networkInfo, parseTypeAndVersion, util, } from "../utils.js";
|
|
@@ -11,7 +13,6 @@ import { generateUnsignedExecuteReport } from "./exec.js";
|
|
|
11
13
|
import { getAptosLeafHasher } from "./hasher.js";
|
|
12
14
|
import { getUserTxByVersion, getVersionTimestamp, streamAptosLogs } from "./logs.js";
|
|
13
15
|
import { getTokenInfo } from "./token.js";
|
|
14
|
-
import { EVMExtraArgsV2Codec, SVMExtraArgsV1Codec, isAptosAccount, } from "./types.js";
|
|
15
16
|
import { decodeMessage, fetchAllMessagesInBatch, fetchCCIPRequestById, fetchCCIPRequestsInTx, } from "../requests.js";
|
|
16
17
|
/**
|
|
17
18
|
* Aptos chain implementation supporting Aptos networks.
|
|
@@ -22,6 +23,7 @@ export class AptosChain extends Chain {
|
|
|
22
23
|
}
|
|
23
24
|
static family = ChainFamily.Aptos;
|
|
24
25
|
static decimals = 8;
|
|
26
|
+
destroy$;
|
|
25
27
|
provider;
|
|
26
28
|
getTokenInfo;
|
|
27
29
|
_getAccountModulesNames;
|
|
@@ -32,6 +34,7 @@ export class AptosChain extends Chain {
|
|
|
32
34
|
*/
|
|
33
35
|
constructor(provider, network, ctx) {
|
|
34
36
|
super(network, ctx);
|
|
37
|
+
this.destroy$ = new Promise((resolve) => (this.destroy = resolve));
|
|
35
38
|
this.provider = provider;
|
|
36
39
|
this.typeAndVersion = memoize(this.typeAndVersion.bind(this), {
|
|
37
40
|
maxSize: 100,
|
|
@@ -99,7 +102,7 @@ export class AptosChain extends Chain {
|
|
|
99
102
|
else if (url.includes('local'))
|
|
100
103
|
network = Network.LOCAL;
|
|
101
104
|
else
|
|
102
|
-
throw new
|
|
105
|
+
throw new CCIPAptosNetworkUnknownError(util.inspect(url));
|
|
103
106
|
const config = new AptosConfig({
|
|
104
107
|
network,
|
|
105
108
|
fullnode: typeof url === 'string' && url.includes('://') ? url : undefined,
|
|
@@ -123,10 +126,10 @@ export class AptosChain extends Chain {
|
|
|
123
126
|
tx = await getUserTxByVersion(this.provider, +hashOrVersion);
|
|
124
127
|
}
|
|
125
128
|
else {
|
|
126
|
-
throw new
|
|
129
|
+
throw new CCIPAptosTransactionInvalidError(hashOrVersion);
|
|
127
130
|
}
|
|
128
131
|
if (tx.type !== TransactionResponseType.User)
|
|
129
|
-
throw new
|
|
132
|
+
throw new CCIPAptosTransactionTypeInvalidError();
|
|
130
133
|
return {
|
|
131
134
|
hash: tx.hash,
|
|
132
135
|
blockNumber: +tx.version,
|
|
@@ -144,7 +147,7 @@ export class AptosChain extends Chain {
|
|
|
144
147
|
}
|
|
145
148
|
/** {@inheritDoc Chain.getLogs} */
|
|
146
149
|
async *getLogs(opts) {
|
|
147
|
-
yield* streamAptosLogs(this
|
|
150
|
+
yield* streamAptosLogs(this, opts);
|
|
148
151
|
}
|
|
149
152
|
/** {@inheritDoc Chain.fetchRequestsInTx} */
|
|
150
153
|
async fetchRequestsInTx(tx) {
|
|
@@ -153,7 +156,7 @@ export class AptosChain extends Chain {
|
|
|
153
156
|
/** {@inheritDoc Chain.fetchRequestById} */
|
|
154
157
|
async fetchRequestById(messageId, onRamp, opts) {
|
|
155
158
|
if (!onRamp)
|
|
156
|
-
throw new
|
|
159
|
+
throw new CCIPOnRampRequiredError();
|
|
157
160
|
return fetchCCIPRequestById(this, messageId, {
|
|
158
161
|
address: await this.getOnRampForRouter(onRamp, 0n),
|
|
159
162
|
...opts,
|
|
@@ -227,14 +230,14 @@ export class AptosChain extends Chain {
|
|
|
227
230
|
firstErr ??= err;
|
|
228
231
|
}
|
|
229
232
|
}
|
|
230
|
-
throw firstErr ??
|
|
233
|
+
throw CCIPError.from(firstErr ?? `Could not view 'get_token' in ${tokenPool}`, 'UNKNOWN');
|
|
231
234
|
}
|
|
232
235
|
/** {@inheritDoc Chain.getTokenAdminRegistryFor} */
|
|
233
236
|
async getTokenAdminRegistryFor(address) {
|
|
234
237
|
const registry = address.split('::')[0] + '::token_admin_registry';
|
|
235
238
|
const [type] = await this.typeAndVersion(registry);
|
|
236
239
|
if (type !== 'TokenAdminRegistry') {
|
|
237
|
-
throw new
|
|
240
|
+
throw new CCIPAptosRegistryTypeInvalidError(registry, type);
|
|
238
241
|
}
|
|
239
242
|
return registry;
|
|
240
243
|
}
|
|
@@ -247,7 +250,7 @@ export class AptosChain extends Chain {
|
|
|
247
250
|
const { data } = log;
|
|
248
251
|
if ((typeof data !== 'string' || !data.startsWith('{')) &&
|
|
249
252
|
(typeof data !== 'object' || data == null || isBytesLike(data)))
|
|
250
|
-
throw new
|
|
253
|
+
throw new CCIPAptosLogInvalidError(util.inspect(log));
|
|
251
254
|
// offload massaging to generic decodeJsonMessage
|
|
252
255
|
try {
|
|
253
256
|
return decodeMessage(data);
|
|
@@ -305,7 +308,7 @@ export class AptosChain extends Chain {
|
|
|
305
308
|
accounts: extraArgs.accounts.map(getAddressBytes),
|
|
306
309
|
}).toBytes(),
|
|
307
310
|
]);
|
|
308
|
-
throw new
|
|
311
|
+
throw new CCIPAptosExtraArgsEncodingError();
|
|
309
312
|
}
|
|
310
313
|
/**
|
|
311
314
|
* Decodes commit reports from an Aptos log event.
|
|
@@ -315,7 +318,7 @@ export class AptosChain extends Chain {
|
|
|
315
318
|
*/
|
|
316
319
|
static decodeCommits({ data }, lane) {
|
|
317
320
|
if (!data || typeof data != 'object')
|
|
318
|
-
throw new
|
|
321
|
+
throw new CCIPAptosLogInvalidError(data);
|
|
319
322
|
const data_ = data;
|
|
320
323
|
if (!data_.blessed_merkle_roots)
|
|
321
324
|
return;
|
|
@@ -335,7 +338,7 @@ export class AptosChain extends Chain {
|
|
|
335
338
|
*/
|
|
336
339
|
static decodeReceipt({ data }) {
|
|
337
340
|
if (!data || typeof data != 'object')
|
|
338
|
-
throw new
|
|
341
|
+
throw new CCIPAptosLogInvalidError(data);
|
|
339
342
|
const data_ = data;
|
|
340
343
|
if (!data_.message_id || !data_.state)
|
|
341
344
|
return;
|
|
@@ -359,9 +362,15 @@ export class AptosChain extends Chain {
|
|
|
359
362
|
}
|
|
360
363
|
}
|
|
361
364
|
if (dataLength(bytes) > 32)
|
|
362
|
-
throw new
|
|
365
|
+
throw new CCIPAptosAddressInvalidError(hexlify(bytes));
|
|
363
366
|
return zeroPadValue(bytes, 32) + suffix;
|
|
364
367
|
}
|
|
368
|
+
/**
|
|
369
|
+
* Validates a transaction hash format for Aptos
|
|
370
|
+
*/
|
|
371
|
+
static isTxHash(v) {
|
|
372
|
+
return typeof v === 'string' && /^0x[0-9a-fA-F]{64}$/.test(v);
|
|
373
|
+
}
|
|
365
374
|
/**
|
|
366
375
|
* Gets the leaf hasher for Aptos destination chains.
|
|
367
376
|
* @param lane - Lane configuration.
|
|
@@ -388,7 +397,7 @@ export class AptosChain extends Chain {
|
|
|
388
397
|
async sendMessage(router, destChainSelector, message, opts) {
|
|
389
398
|
const account = opts.wallet;
|
|
390
399
|
if (!isAptosAccount(account)) {
|
|
391
|
-
throw new
|
|
400
|
+
throw new CCIPAptosWalletInvalidError(this.constructor.name, util.inspect(opts.wallet));
|
|
392
401
|
}
|
|
393
402
|
const unsignedTx = await this.generateUnsignedSendMessage(account.accountAddress.toString(), router, destChainSelector, message, opts);
|
|
394
403
|
const unsigned = SimpleTransaction.deserialize(new Deserializer(unsignedTx.transactions[0]));
|
|
@@ -413,7 +422,7 @@ export class AptosChain extends Chain {
|
|
|
413
422
|
/** generate raw/unsigned `manually_execute` transaction data */
|
|
414
423
|
async generateUnsignedExecuteReport(payer, offRamp, execReport, opts) {
|
|
415
424
|
if (!('allowOutOfOrderExecution' in execReport.message && 'gasLimit' in execReport.message)) {
|
|
416
|
-
throw new
|
|
425
|
+
throw new CCIPAptosExtraArgsV2RequiredError();
|
|
417
426
|
}
|
|
418
427
|
const tx = await generateUnsignedExecuteReport(this.provider, payer, offRamp, execReport, opts);
|
|
419
428
|
return {
|
|
@@ -425,7 +434,7 @@ export class AptosChain extends Chain {
|
|
|
425
434
|
async executeReport(offRamp, execReport, opts) {
|
|
426
435
|
const account = opts.wallet;
|
|
427
436
|
if (!isAptosAccount(account)) {
|
|
428
|
-
throw new
|
|
437
|
+
throw new CCIPAptosWalletInvalidError(this.constructor.name, util.inspect(opts.wallet));
|
|
429
438
|
}
|
|
430
439
|
const unsignedTx = await this.generateUnsignedExecuteReport(account.accountAddress.toString(), offRamp, execReport, opts);
|
|
431
440
|
const unsigned = SimpleTransaction.deserialize(new Deserializer(unsignedTx.transactions[0]));
|
|
@@ -478,7 +487,7 @@ export class AptosChain extends Chain {
|
|
|
478
487
|
},
|
|
479
488
|
});
|
|
480
489
|
if (administrator.match(/^0x0*$/))
|
|
481
|
-
throw new
|
|
490
|
+
throw new CCIPAptosTokenNotRegisteredError(token, registry);
|
|
482
491
|
return {
|
|
483
492
|
administrator,
|
|
484
493
|
...(!pendingAdministrator.match(/^0x0*$/) && { pendingAdministrator }),
|
|
@@ -518,7 +527,7 @@ export class AptosChain extends Chain {
|
|
|
518
527
|
firstErr ??= err;
|
|
519
528
|
}
|
|
520
529
|
}
|
|
521
|
-
throw firstErr ??
|
|
530
|
+
throw CCIPError.from(firstErr ?? `Could not get tokenPool configs from ${tokenPool}`, 'UNKNOWN');
|
|
522
531
|
}
|
|
523
532
|
/** {@inheritDoc Chain.getTokenPoolRemotes} */
|
|
524
533
|
async getTokenPoolRemotes(tokenPool, remoteChainSelector) {
|
|
@@ -596,7 +605,7 @@ export class AptosChain extends Chain {
|
|
|
596
605
|
firstErr ??= err;
|
|
597
606
|
}
|
|
598
607
|
}
|
|
599
|
-
throw firstErr ??
|
|
608
|
+
throw CCIPError.from(firstErr ?? `Could not view 'get_remote_token' in ${tokenPool}`, 'UNKNOWN');
|
|
600
609
|
}
|
|
601
610
|
/** {@inheritDoc Chain.getFeeTokens} */
|
|
602
611
|
async getFeeTokens(router) {
|