@chainlink/ccip-sdk 0.90.2 → 0.91.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 +35 -26
- package/dist/aptos/exec.d.ts +4 -5
- package/dist/aptos/exec.d.ts.map +1 -1
- package/dist/aptos/exec.js +5 -14
- package/dist/aptos/exec.js.map +1 -1
- package/dist/aptos/hasher.d.ts +18 -0
- package/dist/aptos/hasher.d.ts.map +1 -1
- package/dist/aptos/hasher.js +18 -0
- package/dist/aptos/hasher.js.map +1 -1
- package/dist/aptos/index.d.ts +127 -28
- package/dist/aptos/index.d.ts.map +1 -1
- package/dist/aptos/index.js +199 -70
- package/dist/aptos/index.js.map +1 -1
- package/dist/aptos/logs.d.ts +18 -0
- package/dist/aptos/logs.d.ts.map +1 -1
- package/dist/aptos/logs.js +21 -3
- package/dist/aptos/logs.js.map +1 -1
- package/dist/aptos/send.d.ts +22 -5
- package/dist/aptos/send.d.ts.map +1 -1
- package/dist/aptos/send.js +23 -15
- package/dist/aptos/send.js.map +1 -1
- package/dist/aptos/token.d.ts +6 -0
- package/dist/aptos/token.d.ts.map +1 -1
- package/dist/aptos/token.js +6 -0
- package/dist/aptos/token.js.map +1 -1
- package/dist/aptos/types.d.ts +16 -1
- package/dist/aptos/types.d.ts.map +1 -1
- package/dist/aptos/types.js +13 -0
- package/dist/aptos/types.js.map +1 -1
- package/dist/aptos/utils.d.ts +1 -1
- package/dist/aptos/utils.js +1 -1
- package/dist/chain.d.ts +185 -99
- package/dist/chain.d.ts.map +1 -1
- package/dist/chain.js +38 -15
- package/dist/chain.js.map +1 -1
- package/dist/commits.d.ts +4 -10
- package/dist/commits.d.ts.map +1 -1
- package/dist/commits.js +2 -1
- package/dist/commits.js.map +1 -1
- package/dist/evm/const.d.ts +5 -0
- package/dist/evm/const.d.ts.map +1 -1
- package/dist/evm/const.js +5 -0
- package/dist/evm/const.js.map +1 -1
- package/dist/evm/errors.d.ts +5 -0
- package/dist/evm/errors.d.ts.map +1 -1
- package/dist/evm/errors.js +6 -1
- package/dist/evm/errors.js.map +1 -1
- package/dist/evm/hasher.d.ts +16 -2
- package/dist/evm/hasher.d.ts.map +1 -1
- package/dist/evm/hasher.js +17 -3
- package/dist/evm/hasher.js.map +1 -1
- package/dist/evm/index.d.ts +176 -31
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +312 -154
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/logs.d.ts +20 -0
- package/dist/evm/logs.d.ts.map +1 -0
- package/dist/evm/logs.js +194 -0
- package/dist/evm/logs.js.map +1 -0
- package/dist/evm/messages.d.ts +11 -2
- package/dist/evm/messages.d.ts.map +1 -1
- package/dist/evm/messages.js +4 -2
- package/dist/evm/messages.js.map +1 -1
- package/dist/evm/offchain.d.ts +7 -2
- package/dist/evm/offchain.d.ts.map +1 -1
- package/dist/evm/offchain.js +12 -7
- package/dist/evm/offchain.js.map +1 -1
- package/dist/execution.d.ts +19 -62
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +28 -31
- package/dist/execution.js.map +1 -1
- package/dist/extra-args.d.ts +35 -5
- package/dist/extra-args.d.ts.map +1 -1
- package/dist/extra-args.js +10 -5
- package/dist/extra-args.js.map +1 -1
- package/dist/gas.d.ts +6 -8
- package/dist/gas.d.ts.map +1 -1
- package/dist/gas.js +7 -9
- package/dist/gas.js.map +1 -1
- package/dist/hasher/common.d.ts +3 -2
- package/dist/hasher/common.d.ts.map +1 -1
- package/dist/hasher/common.js +2 -2
- package/dist/hasher/common.js.map +1 -1
- package/dist/hasher/hasher.d.ts +8 -2
- package/dist/hasher/hasher.d.ts.map +1 -1
- package/dist/hasher/hasher.js +8 -3
- package/dist/hasher/hasher.js.map +1 -1
- package/dist/hasher/merklemulti.d.ts +11 -9
- package/dist/hasher/merklemulti.d.ts.map +1 -1
- package/dist/hasher/merklemulti.js +17 -16
- package/dist/hasher/merklemulti.js.map +1 -1
- package/dist/index.d.ts +16 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -7
- package/dist/index.js.map +1 -1
- package/dist/requests.d.ts +39 -25
- package/dist/requests.d.ts.map +1 -1
- package/dist/requests.js +42 -35
- package/dist/requests.js.map +1 -1
- package/dist/selectors.d.ts +1 -1
- package/dist/solana/cleanup.d.ts +14 -10
- package/dist/solana/cleanup.d.ts.map +1 -1
- package/dist/solana/cleanup.js +35 -33
- package/dist/solana/cleanup.js.map +1 -1
- package/dist/solana/exec.d.ts +19 -11
- package/dist/solana/exec.d.ts.map +1 -1
- package/dist/solana/exec.js +86 -163
- package/dist/solana/exec.js.map +1 -1
- package/dist/solana/hasher.d.ts +7 -2
- package/dist/solana/hasher.d.ts.map +1 -1
- package/dist/solana/hasher.js +7 -2
- package/dist/solana/hasher.js.map +1 -1
- package/dist/solana/index.d.ts +202 -84
- package/dist/solana/index.d.ts.map +1 -1
- package/dist/solana/index.js +367 -252
- package/dist/solana/index.js.map +1 -1
- package/dist/solana/offchain.d.ts +8 -18
- package/dist/solana/offchain.d.ts.map +1 -1
- package/dist/solana/offchain.js +29 -83
- package/dist/solana/offchain.js.map +1 -1
- package/dist/solana/patchBorsh.d.ts +5 -1
- package/dist/solana/patchBorsh.d.ts.map +1 -1
- package/dist/solana/patchBorsh.js +57 -46
- package/dist/solana/patchBorsh.js.map +1 -1
- package/dist/solana/send.d.ts +28 -10
- package/dist/solana/send.d.ts.map +1 -1
- package/dist/solana/send.js +44 -77
- package/dist/solana/send.js.map +1 -1
- package/dist/solana/types.d.ts +22 -1
- package/dist/solana/types.d.ts.map +1 -1
- package/dist/solana/types.js +12 -1
- package/dist/solana/types.js.map +1 -1
- package/dist/solana/utils.d.ts +58 -4
- package/dist/solana/utils.d.ts.map +1 -1
- package/dist/solana/utils.js +110 -7
- package/dist/solana/utils.js.map +1 -1
- package/dist/sui/hasher.d.ts +18 -0
- package/dist/sui/hasher.d.ts.map +1 -1
- package/dist/sui/hasher.js +18 -0
- package/dist/sui/hasher.js.map +1 -1
- package/dist/sui/index.d.ts +99 -12
- package/dist/sui/index.d.ts.map +1 -1
- package/dist/sui/index.js +108 -19
- package/dist/sui/index.js.map +1 -1
- package/dist/sui/types.d.ts +6 -0
- package/dist/sui/types.d.ts.map +1 -1
- package/dist/sui/types.js +5 -0
- package/dist/sui/types.js.map +1 -1
- package/dist/supported-chains.d.ts +2 -1
- package/dist/supported-chains.d.ts.map +1 -1
- package/dist/supported-chains.js.map +1 -1
- package/dist/types.d.ts +127 -16
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +67 -46
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +143 -21
- package/dist/utils.js.map +1 -1
- package/package.json +13 -9
- package/src/aptos/exec.ts +7 -18
- package/src/aptos/hasher.ts +18 -0
- package/src/aptos/index.ts +288 -110
- package/src/aptos/logs.ts +21 -3
- package/src/aptos/send.ts +25 -22
- package/src/aptos/token.ts +6 -0
- package/src/aptos/types.ts +26 -2
- package/src/aptos/utils.ts +1 -1
- package/src/chain.ts +243 -108
- package/src/commits.ts +6 -7
- package/src/evm/const.ts +5 -0
- package/src/evm/errors.ts +6 -1
- package/src/evm/hasher.ts +20 -4
- package/src/evm/index.ts +416 -214
- package/src/evm/logs.ts +255 -0
- package/src/evm/messages.ts +11 -5
- package/src/evm/offchain.ts +13 -4
- package/src/execution.ts +40 -32
- package/src/extra-args.ts +38 -6
- package/src/gas.ts +7 -9
- package/src/hasher/common.ts +3 -2
- package/src/hasher/hasher.ts +12 -4
- package/src/hasher/merklemulti.ts +17 -16
- package/src/index.ts +29 -23
- package/src/requests.ts +64 -46
- package/src/selectors.ts +1 -1
- package/src/solana/cleanup.ts +49 -34
- package/src/solana/exec.ts +128 -272
- package/src/solana/hasher.ts +13 -4
- package/src/solana/index.ts +483 -356
- package/src/solana/offchain.ts +32 -102
- package/src/solana/patchBorsh.ts +65 -50
- package/src/solana/send.ts +52 -111
- package/src/solana/types.ts +44 -3
- package/src/solana/utils.ts +143 -19
- package/src/sui/hasher.ts +18 -0
- package/src/sui/index.ts +143 -31
- package/src/sui/types.ts +6 -0
- package/src/supported-chains.ts +2 -1
- package/src/types.ts +130 -18
- package/src/utils.ts +168 -26
- package/tsconfig.json +2 -1
package/dist/chain.d.ts
CHANGED
|
@@ -1,57 +1,92 @@
|
|
|
1
|
-
import util from 'util';
|
|
2
1
|
import type { BytesLike } from 'ethers';
|
|
2
|
+
import type { PickDeep } from 'type-fest';
|
|
3
|
+
import type { UnsignedAptosTx } from './aptos/types.ts';
|
|
4
|
+
import type { UnsignedEVMTx } from './evm/index.ts';
|
|
3
5
|
import type { EVMExtraArgsV1, EVMExtraArgsV2, ExtraArgs, SVMExtraArgsV1, SuiExtraArgsV1 } from './extra-args.ts';
|
|
4
6
|
import type { LeafHasher } from './hasher/common.ts';
|
|
5
|
-
import type {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
export type ChainFamily = (typeof ChainFamily)[keyof typeof ChainFamily];
|
|
7
|
+
import type { UnsignedSolanaTx } from './solana/types.ts';
|
|
8
|
+
import { type AnyMessage, type CCIPCommit, type CCIPExecution, type CCIPMessage, type CCIPRequest, type ChainFamily, type ChainTransaction, type CommitReport, type ExecutionReceipt, type ExecutionReport, type Lane, type Log_, type Logger, type NetworkInfo, type OffchainTokenData, type WithLogger } from './types.ts';
|
|
9
|
+
import { util } from './utils.ts';
|
|
10
|
+
/**
|
|
11
|
+
* Filter options for getLogs queries across chains.
|
|
12
|
+
*/
|
|
13
13
|
export type LogFilter = {
|
|
14
|
+
/** Starting block number (inclusive). */
|
|
14
15
|
startBlock?: number;
|
|
16
|
+
/** Starting Unix timestamp (inclusive). */
|
|
15
17
|
startTime?: number;
|
|
18
|
+
/** Ending block number (inclusive). */
|
|
16
19
|
endBlock?: number;
|
|
20
|
+
/** Optional hint signature for end of iteration. */
|
|
17
21
|
endBefore?: string;
|
|
22
|
+
/** Contract address to filter logs by. */
|
|
18
23
|
address?: string;
|
|
19
|
-
|
|
24
|
+
/** Topics to filter logs by. */
|
|
25
|
+
topics?: (string | string[] | null)[];
|
|
26
|
+
/** Page size for pagination. */
|
|
20
27
|
page?: number;
|
|
21
28
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
logs: readonly Log_[];
|
|
26
|
-
blockNumber: number;
|
|
27
|
-
timestamp: number;
|
|
28
|
-
from: string;
|
|
29
|
-
error?: unknown;
|
|
30
|
-
};
|
|
29
|
+
/**
|
|
30
|
+
* Token metadata information.
|
|
31
|
+
*/
|
|
31
32
|
export type TokenInfo = {
|
|
33
|
+
/** Token symbol (e.g., "LINK"). */
|
|
32
34
|
readonly symbol: string;
|
|
35
|
+
/** Number of decimals for the token. */
|
|
33
36
|
readonly decimals: number;
|
|
37
|
+
/** Optional human-readable token name. */
|
|
34
38
|
readonly name?: string;
|
|
35
39
|
};
|
|
40
|
+
/**
|
|
41
|
+
* Rate limiter state for token pool configurations.
|
|
42
|
+
* Null if rate limiting is disabled.
|
|
43
|
+
*/
|
|
36
44
|
export type RateLimiterState = {
|
|
45
|
+
/** Current token balance in the rate limiter bucket. */
|
|
37
46
|
tokens: bigint;
|
|
47
|
+
/** Maximum capacity of the rate limiter bucket. */
|
|
38
48
|
capacity: bigint;
|
|
49
|
+
/** Rate at which tokens are replenished. */
|
|
39
50
|
rate: bigint;
|
|
40
51
|
} | null;
|
|
52
|
+
/**
|
|
53
|
+
* Remote token pool configuration for a specific chain.
|
|
54
|
+
*/
|
|
41
55
|
export type TokenPoolRemote = {
|
|
56
|
+
/** Address of the remote token on the destination chain. */
|
|
42
57
|
remoteToken: string;
|
|
58
|
+
/** Addresses of remote token pools. */
|
|
43
59
|
remotePools: string[];
|
|
60
|
+
/** Inbound rate limiter state for tokens coming into this chain. */
|
|
44
61
|
inboundRateLimiterState: RateLimiterState;
|
|
62
|
+
/** Outbound rate limiter state for tokens leaving this chain. */
|
|
45
63
|
outboundRateLimiterState: RateLimiterState;
|
|
46
64
|
};
|
|
65
|
+
/**
|
|
66
|
+
* Maps chain family to respective unsigned transaction type.
|
|
67
|
+
*/
|
|
68
|
+
export type UnsignedTx = {
|
|
69
|
+
[ChainFamily.EVM]: UnsignedEVMTx;
|
|
70
|
+
[ChainFamily.Solana]: UnsignedSolanaTx;
|
|
71
|
+
[ChainFamily.Aptos]: UnsignedAptosTx;
|
|
72
|
+
[ChainFamily.Sui]: never;
|
|
73
|
+
};
|
|
47
74
|
/**
|
|
48
75
|
* Works like an interface for a base Chain class, but provides implementation (which can be
|
|
49
76
|
* specialized) for some basic methods
|
|
50
77
|
*/
|
|
51
78
|
export declare abstract class Chain<F extends ChainFamily = ChainFamily> {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
/** Custom inspector for Node.js util.inspect. */
|
|
80
|
+
[util.inspect.custom]: () => string;
|
|
81
|
+
readonly network: NetworkInfo<F>;
|
|
82
|
+
logger: Logger;
|
|
83
|
+
/**
|
|
84
|
+
* Base constructor for Chain class.
|
|
85
|
+
* @param network - NetworkInfo object for the Chain instance
|
|
86
|
+
*/
|
|
87
|
+
constructor(network: NetworkInfo, { logger }?: WithLogger);
|
|
88
|
+
/** Cleanup method to release resources (e.g., close connections). */
|
|
89
|
+
destroy?(): void | Promise<void>;
|
|
55
90
|
/**
|
|
56
91
|
* Fetch the timestamp of a given block
|
|
57
92
|
* @param block - block number or 'finalized'
|
|
@@ -66,28 +101,55 @@ export declare abstract class Chain<F extends ChainFamily = ChainFamily> {
|
|
|
66
101
|
abstract getTransaction(hash: string): Promise<ChainTransaction>;
|
|
67
102
|
/**
|
|
68
103
|
* An async generator that yields logs based on the provided options.
|
|
69
|
-
* @param opts -
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* @returns
|
|
104
|
+
* @param opts - Options object containing:
|
|
105
|
+
* - `startBlock`: if provided, fetch and generate logs forward starting from this block;
|
|
106
|
+
* otherwise, returns logs backwards in time from endBlock;
|
|
107
|
+
* optionally, startTime may be provided to fetch logs forward starting from this time
|
|
108
|
+
* - `endBlock`: if omitted, use latest block
|
|
109
|
+
* - `endBefore`: optional hint signature for end of iteration, instead of endBlock
|
|
110
|
+
* - `address`: if provided, fetch logs for this address only (may be required in some
|
|
111
|
+
* networks/implementations)
|
|
112
|
+
* - `topics`: if provided, fetch logs for these topics only;
|
|
113
|
+
* if string[], it's assumed to be a list of topic0s (i.e. string[] or string[][0], event_ids);
|
|
114
|
+
* some networks/implementations may not be able to filter topics other than topic0s, so one may
|
|
115
|
+
* want to assume those are optimization hints, instead of hard filters, and verify results
|
|
116
|
+
* - `page`: if provided, try to use this page/range for batches
|
|
117
|
+
* @returns An async iterable iterator of logs.
|
|
83
118
|
*/
|
|
84
119
|
abstract getLogs(opts: LogFilter): AsyncIterableIterator<Log_>;
|
|
85
120
|
/**
|
|
86
|
-
* Fetch
|
|
121
|
+
* Fetch all CCIP requests in a transaction
|
|
122
|
+
* @param tx - ChainTransaction or txHash to fetch requests from
|
|
123
|
+
* @returns CCIP messages in the transaction (at least one)
|
|
124
|
+
**/
|
|
125
|
+
abstract fetchRequestsInTx(tx: string | ChainTransaction): Promise<CCIPRequest[]>;
|
|
126
|
+
/**
|
|
127
|
+
* Scan for a CCIP request by message ID
|
|
128
|
+
* @param messageId - message ID to fetch request for
|
|
129
|
+
* @param onRamp - address may be required in some implementations, and throw if missing
|
|
130
|
+
* @returns CCIPRequest
|
|
131
|
+
**/
|
|
132
|
+
fetchRequestById?(messageId: string, onRamp?: string, opts?: {
|
|
133
|
+
page?: number;
|
|
134
|
+
}): Promise<CCIPRequest>;
|
|
135
|
+
/**
|
|
136
|
+
* Fetches all CCIP messages contained in a given commit batch.
|
|
137
|
+
* @param request - CCIPRequest to fetch batch for.
|
|
138
|
+
* @param commit - CommitReport range (min, max).
|
|
139
|
+
* @param opts - Optional parameters (e.g., `page` for pagination width).
|
|
140
|
+
*/
|
|
141
|
+
abstract fetchAllMessagesInBatch<R extends PickDeep<CCIPRequest, 'lane' | `log.${'topics' | 'address' | 'blockNumber'}` | 'message.header.sequenceNumber'>>(request: R, commit: Pick<CommitReport, 'minSeqNr' | 'maxSeqNr'>, opts?: {
|
|
142
|
+
page?: number;
|
|
143
|
+
}): Promise<R['message'][]>;
|
|
144
|
+
/**
|
|
145
|
+
* Fetch typeAndVersion for a given CCIP contract address
|
|
87
146
|
* @param address - CCIP contract address
|
|
88
|
-
* @returns
|
|
147
|
+
* @returns type - parsed type of the contract, e.g. `OnRamp`
|
|
148
|
+
* @returns version - parsed version of the contract, e.g. `1.6.0`
|
|
149
|
+
* @returns typeAndVersion - original (unparsed) typeAndVersion() string
|
|
150
|
+
* @returns suffix - suffix of the version, if any (e.g. `-dev`)
|
|
89
151
|
*/
|
|
90
|
-
abstract typeAndVersion(address: string): Promise<[
|
|
152
|
+
abstract typeAndVersion(address: string): Promise<[type: string, version: string, typeAndVersion: string, suffix?: string]>;
|
|
91
153
|
/**
|
|
92
154
|
* Fetch the Router address set in OnRamp config
|
|
93
155
|
* Used to discover OffRamp connected to OnRamp
|
|
@@ -133,10 +195,10 @@ export declare abstract class Chain<F extends ChainFamily = ChainFamily> {
|
|
|
133
195
|
*/
|
|
134
196
|
abstract getOnRampForOffRamp(offRamp: string, sourceChainSelector: bigint): Promise<string>;
|
|
135
197
|
/**
|
|
136
|
-
* Fetch the CommitStore set in OffRamp config (CCIP
|
|
137
|
-
* For CCIP
|
|
138
|
-
* @param offRamp - OffRamp contract address
|
|
139
|
-
* @returns CommitStore address
|
|
198
|
+
* Fetch the CommitStore set in OffRamp config (CCIP v1.5 and earlier).
|
|
199
|
+
* For CCIP v1.6 and later, it should return the offRamp address.
|
|
200
|
+
* @param offRamp - OffRamp contract address.
|
|
201
|
+
* @returns CommitStore address.
|
|
140
202
|
*/
|
|
141
203
|
abstract getCommitStoreForOffRamp(offRamp: string): Promise<string>;
|
|
142
204
|
/**
|
|
@@ -157,14 +219,6 @@ export declare abstract class Chain<F extends ChainFamily = ChainFamily> {
|
|
|
157
219
|
* @param onRamp - Some contract for which we can fetch a TokenAdminRegistry
|
|
158
220
|
*/
|
|
159
221
|
abstract getTokenAdminRegistryFor(address: string): Promise<string>;
|
|
160
|
-
/**
|
|
161
|
-
* Build, derive, load or fetch a wallet for this instance which will be used in any tx send operation
|
|
162
|
-
* @param opts.wallet - cli or environmental parameters to help pick a wallet
|
|
163
|
-
* @returns address of fetched (and stored internally) account
|
|
164
|
-
*/
|
|
165
|
-
abstract getWalletAddress(opts?: {
|
|
166
|
-
wallet?: unknown;
|
|
167
|
-
}): Promise<string>;
|
|
168
222
|
/**
|
|
169
223
|
* Fetch the current fee for a given intended message
|
|
170
224
|
* @param router - router address on this chain
|
|
@@ -173,72 +227,101 @@ export declare abstract class Chain<F extends ChainFamily = ChainFamily> {
|
|
|
173
227
|
*/
|
|
174
228
|
abstract getFee(router: string, destChainSelector: bigint, message: AnyMessage): Promise<bigint>;
|
|
175
229
|
/**
|
|
176
|
-
*
|
|
177
|
-
* @param
|
|
178
|
-
* @param
|
|
179
|
-
* @param
|
|
180
|
-
* @param
|
|
181
|
-
* @param
|
|
230
|
+
* Generate unsigned txs for ccipSend'ing a message
|
|
231
|
+
* @param sender - sender address
|
|
232
|
+
* @param router - address of the Router contract
|
|
233
|
+
* @param destChainSelector - chainSelector of destination chain
|
|
234
|
+
* @param message - AnyMessage to send; if `fee` is not present, it'll be calculated
|
|
235
|
+
* @param approveMax - if tokens approvals are needed, opt into approving maximum allowance
|
|
236
|
+
* @returns chain-family specific unsigned txs
|
|
182
237
|
*/
|
|
183
|
-
abstract
|
|
184
|
-
fee
|
|
238
|
+
abstract generateUnsignedSendMessage(sender: string, router: string, destChainSelector: bigint, message: AnyMessage & {
|
|
239
|
+
fee?: bigint;
|
|
185
240
|
}, opts?: {
|
|
186
|
-
wallet?: unknown;
|
|
187
241
|
approveMax?: boolean;
|
|
188
|
-
}): Promise<
|
|
242
|
+
}): Promise<UnsignedTx[F]>;
|
|
243
|
+
/**
|
|
244
|
+
* Send a CCIP message through a router using provided wallet.
|
|
245
|
+
* @param router - Router address on this chain.
|
|
246
|
+
* @param destChainSelector - Destination network selector.
|
|
247
|
+
* @param message - Message to send.
|
|
248
|
+
* @param opts - Optional parameters:
|
|
249
|
+
* - `wallet`: cli or environmental parameters to help pick a wallet
|
|
250
|
+
* - `approveMax`: approve the maximum amount of tokens to transfer
|
|
251
|
+
*/
|
|
252
|
+
abstract sendMessage(router: string, destChainSelector: bigint, message: AnyMessage & {
|
|
253
|
+
fee?: bigint;
|
|
254
|
+
}, opts: {
|
|
255
|
+
wallet: unknown;
|
|
256
|
+
approveMax?: boolean;
|
|
257
|
+
}): Promise<CCIPRequest>;
|
|
189
258
|
/**
|
|
190
259
|
* Fetch supported offchain token data for a request from this network
|
|
191
260
|
* @param request - CCIP request, with tx, logs and message
|
|
192
261
|
* @returns array with one offchain token data for each token transfer in request
|
|
193
262
|
*/
|
|
194
263
|
abstract fetchOffchainTokenData(request: CCIPRequest): Promise<OffchainTokenData[]>;
|
|
264
|
+
/**
|
|
265
|
+
* Generate unsigned tx to manuallyExecute a message
|
|
266
|
+
* @param payer - address which will be used to transmit the report tx
|
|
267
|
+
* @param offRamp - address of the OffRamp contract
|
|
268
|
+
* @param execReport - execution report
|
|
269
|
+
* @param gasLimit - gasLimit or computeUnits limit override for the ccipReceive call
|
|
270
|
+
* @param tokensGasLimit - For EVM, overrides gasLimit on tokenpPool call
|
|
271
|
+
* @param forceBuffer - For Solana, send report in chunks to OffRamp, to later execute
|
|
272
|
+
* @param forceLookupTable - For Solana, create and extend addresses in a lookup table before executing
|
|
273
|
+
* @returns chain-family specific unsigned txs
|
|
274
|
+
*/
|
|
275
|
+
abstract generateUnsignedExecuteReport(payer: string, offRamp: string, execReport: ExecutionReport, opts: {
|
|
276
|
+
gasLimit?: number;
|
|
277
|
+
tokensGasLimit?: number;
|
|
278
|
+
forceBuffer?: boolean;
|
|
279
|
+
forceLookupTable?: boolean;
|
|
280
|
+
}): Promise<UnsignedTx[F]>;
|
|
195
281
|
/**
|
|
196
282
|
* Execute messages in report in an offRamp
|
|
197
283
|
* @param offRamp - offRamp address on this dest chain
|
|
198
284
|
* @param execReport - execution report containing messages to execute, proofs and offchainTokenData
|
|
199
|
-
* @param opts - general options for execution
|
|
200
|
-
* @
|
|
201
|
-
|
|
202
|
-
|
|
285
|
+
* @param opts - general options for execution (see [[generateUnsignedExecuteReport]])
|
|
286
|
+
* @param wallet - chain-specific wallet or signer instance, to sign transactions
|
|
287
|
+
* @returns transaction of the execution
|
|
288
|
+
*/
|
|
289
|
+
abstract executeReport(offRamp: string, execReport: ExecutionReport, opts: {
|
|
290
|
+
wallet: unknown;
|
|
291
|
+
gasLimit?: number;
|
|
292
|
+
tokensGasLimit?: number;
|
|
293
|
+
forceBuffer?: boolean;
|
|
294
|
+
forceLookupTable?: boolean;
|
|
295
|
+
}): Promise<ChainTransaction>;
|
|
203
296
|
/**
|
|
204
297
|
* Look for a CommitReport at dest for given CCIP request
|
|
205
298
|
* May be specialized by some subclasses
|
|
206
299
|
*
|
|
207
|
-
* @param
|
|
208
|
-
* @param request -
|
|
300
|
+
* @param commitStore - Commit store address
|
|
301
|
+
* @param request - CCIPRequest to get commit info for
|
|
209
302
|
* @param hints - Additional filtering hints
|
|
210
|
-
* @returns
|
|
303
|
+
* @returns CCIPCommit info, or reject if none found
|
|
211
304
|
**/
|
|
212
|
-
fetchCommitReport(commitStore: string, request: {
|
|
213
|
-
lane: Lane;
|
|
214
|
-
message: {
|
|
215
|
-
header: {
|
|
216
|
-
sequenceNumber: bigint;
|
|
217
|
-
};
|
|
218
|
-
};
|
|
219
|
-
timestamp?: number;
|
|
220
|
-
}, hints?: {
|
|
305
|
+
fetchCommitReport(commitStore: string, request: PickDeep<CCIPRequest, 'lane' | 'message.header.sequenceNumber' | 'tx.timestamp'>, hints?: {
|
|
221
306
|
startBlock?: number;
|
|
222
307
|
page?: number;
|
|
223
308
|
}): Promise<CCIPCommit>;
|
|
224
309
|
/**
|
|
225
310
|
* Default/generic implementation of fetchExecutionReceipts
|
|
226
311
|
* @param offRamp - Off-ramp address
|
|
227
|
-
* @param
|
|
312
|
+
* @param request - CCIPRequest to get execution receipts for
|
|
313
|
+
* @param commit - CCIPCommit info to help narrowing search for executions
|
|
228
314
|
* @param hints - Additional filtering hints
|
|
229
|
-
* @returns Async generator of
|
|
315
|
+
* @returns Async generator of CCIPExecution receipts
|
|
230
316
|
*/
|
|
231
|
-
fetchExecutionReceipts(offRamp: string,
|
|
232
|
-
startBlock?: number;
|
|
233
|
-
startTime?: number;
|
|
317
|
+
fetchExecutionReceipts(offRamp: string, request: PickDeep<CCIPRequest, 'lane' | 'message.header.messageId' | 'tx.timestamp'>, commit?: CCIPCommit, hints?: {
|
|
234
318
|
page?: number;
|
|
235
|
-
|
|
236
|
-
}): AsyncGenerator<CCIPExecution>;
|
|
319
|
+
}): AsyncIterableIterator<CCIPExecution>;
|
|
237
320
|
/**
|
|
238
|
-
* List tokens supported by given TokenAdminRegistry contract
|
|
239
|
-
* @param address - Usually TokenAdminRegistry, but chain may support receiving Router, OnRamp, etc
|
|
240
|
-
* @param opts.page
|
|
241
|
-
* @
|
|
321
|
+
* List tokens supported by given TokenAdminRegistry contract.
|
|
322
|
+
* @param address - Usually TokenAdminRegistry, but chain may support receiving Router, OnRamp, etc.
|
|
323
|
+
* @param opts - Optional parameters (e.g., `page` for pagination range).
|
|
324
|
+
* @returns Array of supported token addresses.
|
|
242
325
|
*/
|
|
243
326
|
abstract getSupportedTokens(address: string, opts?: {
|
|
244
327
|
page?: number;
|
|
@@ -263,19 +346,20 @@ export declare abstract class Chain<F extends ChainFamily = ChainFamily> {
|
|
|
263
346
|
typeAndVersion?: string;
|
|
264
347
|
}>;
|
|
265
348
|
/**
|
|
266
|
-
* Get TokenPool remote configurations
|
|
267
|
-
* @param tokenPool - Token pool address
|
|
268
|
-
* @param remoteChainSelector - If provided, only return remotes for the specified chain (may error if remote not supported)
|
|
269
|
-
* @
|
|
349
|
+
* Get TokenPool remote configurations.
|
|
350
|
+
* @param tokenPool - Token pool address.
|
|
351
|
+
* @param remoteChainSelector - If provided, only return remotes for the specified chain (may error if remote not supported).
|
|
352
|
+
* @returns Record of network names and remote configurations (remoteToken, remotePools, rateLimitStates).
|
|
270
353
|
*/
|
|
271
354
|
abstract getTokenPoolRemotes(tokenPool: string, remoteChainSelector?: bigint): Promise<Record<string, TokenPoolRemote>>;
|
|
272
355
|
/**
|
|
273
|
-
* Fetch list and info of supported feeTokens
|
|
274
|
-
* @param router address on this chain
|
|
275
|
-
* @returns
|
|
356
|
+
* Fetch list and info of supported feeTokens.
|
|
357
|
+
* @param router - Router address on this chain.
|
|
358
|
+
* @returns Mapping of token addresses to respective TokenInfo objects.
|
|
276
359
|
*/
|
|
277
|
-
abstract
|
|
360
|
+
abstract getFeeTokens(router: string): Promise<Record<string, TokenInfo>>;
|
|
278
361
|
}
|
|
362
|
+
/** Static methods and properties available on Chain class constructors. */
|
|
279
363
|
export type ChainStatic<F extends ChainFamily = ChainFamily> = Function & {
|
|
280
364
|
readonly family: F;
|
|
281
365
|
readonly decimals: number;
|
|
@@ -283,7 +367,7 @@ export type ChainStatic<F extends ChainFamily = ChainFamily> = Function & {
|
|
|
283
367
|
* async constructor: builds a Chain from a rpc endpoint url
|
|
284
368
|
* @param url - rpc endpoint url
|
|
285
369
|
*/
|
|
286
|
-
fromUrl(url: string): Promise<Chain<F>>;
|
|
370
|
+
fromUrl(url: string, ctx?: WithLogger): Promise<Chain<F>>;
|
|
287
371
|
/**
|
|
288
372
|
* Try to decode a CCIP message *from* a log/event *originated* from this *source* chain,
|
|
289
373
|
* but which may *target* other dest chain families
|
|
@@ -330,15 +414,17 @@ export type ChainStatic<F extends ChainFamily = ChainFamily> = Function & {
|
|
|
330
414
|
/**
|
|
331
415
|
* Create a leaf hasher for this dest chain and lane
|
|
332
416
|
* @param lane - source, dest and onramp lane info
|
|
417
|
+
* @param ctx - context object containing logger
|
|
333
418
|
* @returns LeafHasher is a function that takes a message and returns a hash of it
|
|
334
419
|
*/
|
|
335
|
-
getDestLeafHasher(lane: Lane): LeafHasher;
|
|
420
|
+
getDestLeafHasher(lane: Lane, ctx?: WithLogger): LeafHasher;
|
|
336
421
|
/**
|
|
337
422
|
* Try to parse an error or bytearray generated by this chain family
|
|
338
|
-
* @param
|
|
423
|
+
* @param data - Caught object, string or bytearray
|
|
339
424
|
* @returns Ordered record with messages/properties, or undefined if not a recognized error
|
|
340
425
|
*/
|
|
341
426
|
parse?(data: unknown): Record<string, unknown> | undefined | null;
|
|
342
427
|
};
|
|
428
|
+
/** Function type for getting a Chain instance by ID, selector, or name. */
|
|
343
429
|
export type ChainGetter = (idOrSelectorOrName: number | string | bigint) => Promise<Chain>;
|
|
344
430
|
//# sourceMappingURL=chain.d.ts.map
|
package/dist/chain.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
|
package/dist/chain.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
import util from 'util';
|
|
2
1
|
import { fetchCommitReport } from "./commits.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
EVM: 'evm',
|
|
6
|
-
Solana: 'solana',
|
|
7
|
-
Aptos: 'aptos',
|
|
8
|
-
Sui: 'sui',
|
|
9
|
-
};
|
|
2
|
+
import { ExecutionState, } from "./types.js";
|
|
3
|
+
import { util } from "./utils.js";
|
|
10
4
|
/**
|
|
11
5
|
* Works like an interface for a base Chain class, but provides implementation (which can be
|
|
12
6
|
* specialized) for some basic methods
|
|
13
7
|
*/
|
|
14
8
|
export class Chain {
|
|
9
|
+
network;
|
|
10
|
+
logger;
|
|
11
|
+
/**
|
|
12
|
+
* Base constructor for Chain class.
|
|
13
|
+
* @param network - NetworkInfo object for the Chain instance
|
|
14
|
+
*/
|
|
15
|
+
constructor(network, { logger = console } = {}) {
|
|
16
|
+
if (network.family !== this.constructor.family)
|
|
17
|
+
throw new Error(`Invalid network family for ${this.constructor.name}: ${network.family}`);
|
|
18
|
+
this.network = network;
|
|
19
|
+
this.logger = logger;
|
|
20
|
+
}
|
|
21
|
+
/** Custom inspector for Node.js util.inspect. */
|
|
15
22
|
[util.inspect.custom]() {
|
|
16
23
|
return `${this.constructor.name} { ${this.network.name} }`;
|
|
17
24
|
}
|
|
@@ -19,10 +26,10 @@ export class Chain {
|
|
|
19
26
|
* Look for a CommitReport at dest for given CCIP request
|
|
20
27
|
* May be specialized by some subclasses
|
|
21
28
|
*
|
|
22
|
-
* @param
|
|
23
|
-
* @param request -
|
|
29
|
+
* @param commitStore - Commit store address
|
|
30
|
+
* @param request - CCIPRequest to get commit info for
|
|
24
31
|
* @param hints - Additional filtering hints
|
|
25
|
-
* @returns
|
|
32
|
+
* @returns CCIPCommit info, or reject if none found
|
|
26
33
|
**/
|
|
27
34
|
async fetchCommitReport(commitStore, request, hints) {
|
|
28
35
|
return fetchCommitReport(this, commitStore, request, hints);
|
|
@@ -30,12 +37,28 @@ export class Chain {
|
|
|
30
37
|
/**
|
|
31
38
|
* Default/generic implementation of fetchExecutionReceipts
|
|
32
39
|
* @param offRamp - Off-ramp address
|
|
33
|
-
* @param
|
|
40
|
+
* @param request - CCIPRequest to get execution receipts for
|
|
41
|
+
* @param commit - CCIPCommit info to help narrowing search for executions
|
|
34
42
|
* @param hints - Additional filtering hints
|
|
35
|
-
* @returns Async generator of
|
|
43
|
+
* @returns Async generator of CCIPExecution receipts
|
|
36
44
|
*/
|
|
37
|
-
async *fetchExecutionReceipts(offRamp,
|
|
38
|
-
|
|
45
|
+
async *fetchExecutionReceipts(offRamp, request, commit, hints) {
|
|
46
|
+
const onlyLast = !commit?.log.blockNumber && !request.tx.timestamp; // backwards
|
|
47
|
+
for await (const log of this.getLogs({
|
|
48
|
+
startBlock: commit?.log.blockNumber,
|
|
49
|
+
startTime: request.tx.timestamp,
|
|
50
|
+
address: offRamp,
|
|
51
|
+
topics: ['ExecutionStateChanged'],
|
|
52
|
+
...hints,
|
|
53
|
+
})) {
|
|
54
|
+
const receipt = this.constructor.decodeReceipt(log);
|
|
55
|
+
if (!receipt || receipt.messageId !== request.message.header.messageId)
|
|
56
|
+
continue;
|
|
57
|
+
const timestamp = log.tx?.timestamp ?? (await this.getBlockTimestamp(log.blockNumber));
|
|
58
|
+
yield { receipt, log, timestamp };
|
|
59
|
+
if (onlyLast || receipt.state === ExecutionState.Success)
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
39
62
|
}
|
|
40
63
|
}
|
|
41
64
|
//# sourceMappingURL=chain.js.map
|
package/dist/chain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAWhD,OAAO,EAiBL,cAAc,GACf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAuEjC;;;GAGG;AACH,MAAM,OAAgB,KAAK;IAChB,OAAO,CAAgB;IAChC,MAAM,CAAQ;IAEd;;;OAGG;IACH,YAAY,OAAoB,EAAE,EAAE,MAAM,GAAG,OAAO,KAAiB,EAAE;QACrE,IAAI,OAAO,CAAC,MAAM,KAAM,IAAI,CAAC,WAA2B,CAAC,MAAM;YAC7D,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3F,IAAI,CAAC,OAAO,GAAG,OAAyB,CAAA;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAKD,iDAAiD;IACjD,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnB,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAA;IAC5D,CAAC;IA2OD;;;;;;;;QAQI;IACJ,KAAK,CAAC,iBAAiB,CACrB,WAAmB,EACnB,OAAyF,EACzF,KAA8C;QAE9C,OAAO,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IAC7D,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,CAAC,sBAAsB,CAC3B,OAAe,EACf,OAAoF,EACpF,MAAmB,EACnB,KAAyB;QAEzB,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAA,CAAC,YAAY;QAC/E,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;YACnC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW;YACnC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS;YAC/B,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,CAAC,uBAAuB,CAAC;YACjC,GAAG,KAAK;SACT,CAAC,EAAE,CAAC;YACH,MAAM,OAAO,GAAI,IAAI,CAAC,WAA2B,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;YACpE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS;gBAAE,SAAQ;YAEhF,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,EAAE,SAAS,IAAI,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAA;YACtF,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAA;YACjC,IAAI,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,cAAc,CAAC,OAAO;gBAAE,MAAK;QACjE,CAAC;IACH,CAAC;CAmDF"}
|
package/dist/commits.d.ts
CHANGED
|
@@ -1,24 +1,18 @@
|
|
|
1
|
+
import type { PickDeep } from 'type-fest';
|
|
1
2
|
import type { Chain } from './chain.ts';
|
|
2
|
-
import { type CCIPCommit, type
|
|
3
|
+
import { type CCIPCommit, type CCIPRequest } from './types.ts';
|
|
3
4
|
/**
|
|
4
5
|
* Look for a CommitReport at dest for given CCIPRequest
|
|
5
6
|
* Provides a basic/generic implementation, but subclasses of Chain may override with more specific
|
|
6
7
|
* logic in Chain.fetchCommitReport method
|
|
7
8
|
*
|
|
8
9
|
* @param dest - Destination network provider
|
|
10
|
+
* @param commitStore - Commit store address
|
|
9
11
|
* @param request - CCIP request info
|
|
10
12
|
* @param hints - Additional filtering hints
|
|
11
13
|
* @returns CCIP commit info
|
|
12
14
|
**/
|
|
13
|
-
export declare function fetchCommitReport(dest: Chain, commitStore: string, { lane, message: { header }, timestamp: requestTimestamp, }: {
|
|
14
|
-
lane: Lane;
|
|
15
|
-
message: {
|
|
16
|
-
header: {
|
|
17
|
-
sequenceNumber: bigint;
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
timestamp?: number;
|
|
21
|
-
}, hints?: {
|
|
15
|
+
export declare function fetchCommitReport(dest: Chain, commitStore: string, { lane, message: { header }, tx: { timestamp: requestTimestamp }, }: PickDeep<CCIPRequest, 'lane' | 'message.header.sequenceNumber' | 'tx.timestamp'>, hints?: {
|
|
22
16
|
startBlock?: number;
|
|
23
17
|
page?: number;
|
|
24
18
|
}): Promise<CCIPCommit>;
|
package/dist/commits.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commits.d.ts","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"commits.d.ts","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,WAAW,EAAe,MAAM,YAAY,CAAA;AAE3E;;;;;;;;;;IAUI;AACJ,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,KAAK,EACX,WAAW,EAAE,MAAM,EACnB,EACE,IAAI,EACJ,OAAO,EAAE,EAAE,MAAM,EAAE,EACnB,EAAE,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,GACpC,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,+BAA+B,GAAG,cAAc,CAAC,EACnF,KAAK,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,UAAU,CAAC,CAiBrB"}
|
package/dist/commits.js
CHANGED
|
@@ -5,11 +5,12 @@ import { CCIPVersion } from "./types.js";
|
|
|
5
5
|
* logic in Chain.fetchCommitReport method
|
|
6
6
|
*
|
|
7
7
|
* @param dest - Destination network provider
|
|
8
|
+
* @param commitStore - Commit store address
|
|
8
9
|
* @param request - CCIP request info
|
|
9
10
|
* @param hints - Additional filtering hints
|
|
10
11
|
* @returns CCIP commit info
|
|
11
12
|
**/
|
|
12
|
-
export async function fetchCommitReport(dest, commitStore, { lane, message: { header }, timestamp: requestTimestamp, }, hints) {
|
|
13
|
+
export async function fetchCommitReport(dest, commitStore, { lane, message: { header }, tx: { timestamp: requestTimestamp }, }, hints) {
|
|
13
14
|
for await (const log of dest.getLogs({
|
|
14
15
|
...hints,
|
|
15
16
|
...(!hints?.startBlock ? { startTime: requestTimestamp } : { startBlock: hints.startBlock }),
|
package/dist/commits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commits.js","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commits.js","sourceRoot":"","sources":["../src/commits.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,WAAW,EAAE,MAAM,YAAY,CAAA;AAE3E;;;;;;;;;;IAUI;AACJ,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAW,EACX,WAAmB,EACnB,EACE,IAAI,EACJ,OAAO,EAAE,EAAE,MAAM,EAAE,EACnB,EAAE,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAC8C,EACnF,KAA8C;IAE9C,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC;QACnC,GAAG,KAAK;QACR,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAC5F,OAAO,EAAE,WAAW;QACpB,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC;KACtF,CAAC,EAAE,CAAC;QACH,MAAM,MAAM,GAAI,IAAI,CAAC,WAA2B,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc;YAAE,SAAQ;QAChE,0FAA0F;QAC1F,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,cAAc;YAAE,MAAK;QAClD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;IACxB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,EAAE,UAAU,IAAI,gBAAgB,uBAAuB,MAAM,CAAC,cAAc,EAAE,CACnH,CAAA;AACH,CAAC"}
|
package/dist/evm/const.d.ts
CHANGED
|
@@ -20,6 +20,11 @@ export declare const interfaces: {
|
|
|
20
20
|
readonly EVM2EVMOnRamp_v1_2: Interface;
|
|
21
21
|
readonly Custom: Interface;
|
|
22
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Gets all event fragments matching the given event names.
|
|
25
|
+
* @param events - Event names to match.
|
|
26
|
+
* @returns Map of topic hash to event fragment.
|
|
27
|
+
*/
|
|
23
28
|
export declare function getAllFragmentsMatchingEvents(events: readonly string[]): Record<`0x${string}`, EventFragment>;
|
|
24
29
|
export declare const requestsFragments: Record<`0x${string}`, EventFragment>;
|
|
25
30
|
export declare const commitsFragments: Record<`0x${string}`, EventFragment>;
|
package/dist/evm/const.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/evm/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAkBhE,eAAO,MAAM,eAAe,UAA6B,CAAA;AAEzD,eAAO,MAAM,iBAAiB,UAAW,CAAA;AACzC,eAAO,MAAM,yBAAyB,UAAW,CAAA;AAQjD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;CAiBb,CAAA;AAEV,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,aAAa,CAAC,CAStC;AACD,eAAO,MAAM,iBAAiB,sCAG5B,CAAA;AACF,eAAO,MAAM,gBAAgB,sCAG3B,CAAA;AACF,eAAO,MAAM,iBAAiB,sCAA2D,CAAA"}
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/evm/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAkBhE,eAAO,MAAM,eAAe,UAA6B,CAAA;AAEzD,eAAO,MAAM,iBAAiB,UAAW,CAAA;AACzC,eAAO,MAAM,yBAAyB,UAAW,CAAA;AAQjD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;CAiBb,CAAA;AAEV;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,aAAa,CAAC,CAStC;AACD,eAAO,MAAM,iBAAiB,sCAG5B,CAAA;AACF,eAAO,MAAM,gBAAgB,sCAG3B,CAAA;AACF,eAAO,MAAM,iBAAiB,sCAA2D,CAAA"}
|