@aztec-labs/ethereum 6.0.0-nightly.20260829
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 +3 -0
- package/dest/account.d.ts +2 -0
- package/dest/account.d.ts.map +1 -0
- package/dest/account.js +4 -0
- package/dest/chain.d.ts +25 -0
- package/dest/chain.d.ts.map +1 -0
- package/dest/chain.js +53 -0
- package/dest/client.d.ts +42 -0
- package/dest/client.d.ts.map +1 -0
- package/dest/client.js +104 -0
- package/dest/config.d.ts +103 -0
- package/dest/config.d.ts.map +1 -0
- package/dest/config.js +233 -0
- package/dest/constants.d.ts +4 -0
- package/dest/constants.d.ts.map +1 -0
- package/dest/constants.js +2 -0
- package/dest/contracts/chain_state_override.d.ts +81 -0
- package/dest/contracts/chain_state_override.d.ts.map +1 -0
- package/dest/contracts/chain_state_override.js +139 -0
- package/dest/contracts/empire_base.d.ts +30 -0
- package/dest/contracts/empire_base.d.ts.map +1 -0
- package/dest/contracts/empire_base.js +84 -0
- package/dest/contracts/errors.d.ts +7 -0
- package/dest/contracts/errors.d.ts.map +1 -0
- package/dest/contracts/errors.js +12 -0
- package/dest/contracts/fee_asset_handler.d.ts +20 -0
- package/dest/contracts/fee_asset_handler.d.ts.map +1 -0
- package/dest/contracts/fee_asset_handler.js +59 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts +105 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
- package/dest/contracts/fee_asset_price_oracle.js +656 -0
- package/dest/contracts/fee_juice.d.ts +14 -0
- package/dest/contracts/fee_juice.d.ts.map +1 -0
- package/dest/contracts/fee_juice.js +59 -0
- package/dest/contracts/governance.d.ts +192 -0
- package/dest/contracts/governance.d.ts.map +1 -0
- package/dest/contracts/governance.js +471 -0
- package/dest/contracts/governance_proposer.d.ts +63 -0
- package/dest/contracts/governance_proposer.d.ts.map +1 -0
- package/dest/contracts/governance_proposer.js +536 -0
- package/dest/contracts/gse.d.ts +38 -0
- package/dest/contracts/gse.d.ts.map +1 -0
- package/dest/contracts/gse.js +81 -0
- package/dest/contracts/inbox.d.ts +94 -0
- package/dest/contracts/inbox.d.ts.map +1 -0
- package/dest/contracts/inbox.js +141 -0
- package/dest/contracts/index.d.ts +18 -0
- package/dest/contracts/index.d.ts.map +1 -0
- package/dest/contracts/index.js +17 -0
- package/dest/contracts/log.d.ts +13 -0
- package/dest/contracts/log.d.ts.map +1 -0
- package/dest/contracts/log.js +1 -0
- package/dest/contracts/multicall.d.ts +138 -0
- package/dest/contracts/multicall.d.ts.map +1 -0
- package/dest/contracts/multicall.js +266 -0
- package/dest/contracts/outbox.d.ts +64 -0
- package/dest/contracts/outbox.d.ts.map +1 -0
- package/dest/contracts/outbox.js +113 -0
- package/dest/contracts/registry.d.ts +31 -0
- package/dest/contracts/registry.d.ts.map +1 -0
- package/dest/contracts/registry.js +142 -0
- package/dest/contracts/rollup.d.ts +5836 -0
- package/dest/contracts/rollup.d.ts.map +1 -0
- package/dest/contracts/rollup.js +1612 -0
- package/dest/contracts/slasher_contract.d.ts +44 -0
- package/dest/contracts/slasher_contract.d.ts.map +1 -0
- package/dest/contracts/slasher_contract.js +75 -0
- package/dest/contracts/slashing_proposer.d.ts +174 -0
- package/dest/contracts/slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/slashing_proposer.js +755 -0
- package/dest/contracts/utils.d.ts +3 -0
- package/dest/contracts/utils.d.ts.map +1 -0
- package/dest/contracts/utils.js +11 -0
- package/dest/contracts/watch_event.d.ts +36 -0
- package/dest/contracts/watch_event.d.ts.map +1 -0
- package/dest/contracts/watch_event.js +66 -0
- package/dest/deploy_aztec_l1_contracts.d.ts +267 -0
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
- package/dest/deploy_aztec_l1_contracts.js +424 -0
- package/dest/deploy_l1_contract.d.ts +68 -0
- package/dest/deploy_l1_contract.d.ts.map +1 -0
- package/dest/deploy_l1_contract.js +312 -0
- package/dest/eth-signer/eth-signer.d.ts +21 -0
- package/dest/eth-signer/eth-signer.d.ts.map +1 -0
- package/dest/eth-signer/eth-signer.js +5 -0
- package/dest/eth-signer/index.d.ts +2 -0
- package/dest/eth-signer/index.d.ts.map +1 -0
- package/dest/eth-signer/index.js +1 -0
- package/dest/forwarder_proxy.d.ts +32 -0
- package/dest/forwarder_proxy.d.ts.map +1 -0
- package/dest/forwarder_proxy.js +93 -0
- package/dest/foundry_binary.d.ts +13 -0
- package/dest/foundry_binary.d.ts.map +1 -0
- package/dest/foundry_binary.js +52 -0
- package/dest/l1_artifacts.d.ts +81896 -0
- package/dest/l1_artifacts.d.ts.map +1 -0
- package/dest/l1_artifacts.js +151 -0
- package/dest/l1_contract_addresses.d.ts +73 -0
- package/dest/l1_contract_addresses.d.ts.map +1 -0
- package/dest/l1_contract_addresses.js +120 -0
- package/dest/l1_reader.d.ts +18 -0
- package/dest/l1_reader.d.ts.map +1 -0
- package/dest/l1_reader.js +35 -0
- package/dest/l1_tx_utils/config.d.ts +65 -0
- package/dest/l1_tx_utils/config.d.ts.map +1 -0
- package/dest/l1_tx_utils/config.js +109 -0
- package/dest/l1_tx_utils/constants.d.ts +12 -0
- package/dest/l1_tx_utils/constants.d.ts.map +1 -0
- package/dest/l1_tx_utils/constants.js +39 -0
- package/dest/l1_tx_utils/factory.d.ts +32 -0
- package/dest/l1_tx_utils/factory.d.ts.map +1 -0
- package/dest/l1_tx_utils/factory.js +22 -0
- package/dest/l1_tx_utils/fee-strategies/index.d.ts +10 -0
- package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/index.js +12 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +8 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +129 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +23 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +191 -0
- package/dest/l1_tx_utils/fee-strategies/types.d.ts +51 -0
- package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -0
- package/dest/l1_tx_utils/fee-strategies/types.js +3 -0
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +41 -0
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +42 -0
- package/dest/l1_tx_utils/index-blobs.d.ts +3 -0
- package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -0
- package/dest/l1_tx_utils/index-blobs.js +2 -0
- package/dest/l1_tx_utils/index.d.ts +13 -0
- package/dest/l1_tx_utils/index.d.ts.map +1 -0
- package/dest/l1_tx_utils/index.js +13 -0
- package/dest/l1_tx_utils/interfaces.d.ts +76 -0
- package/dest/l1_tx_utils/interfaces.d.ts.map +1 -0
- package/dest/l1_tx_utils/interfaces.js +4 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +252 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.js +568 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +113 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_tx_utils.js +720 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +83 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +357 -0
- package/dest/l1_tx_utils/signer.d.ts +4 -0
- package/dest/l1_tx_utils/signer.d.ts.map +1 -0
- package/dest/l1_tx_utils/signer.js +16 -0
- package/dest/l1_tx_utils/tx_delayer.d.ts +58 -0
- package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
- package/dest/l1_tx_utils/tx_delayer.js +223 -0
- package/dest/l1_tx_utils/types.d.ts +93 -0
- package/dest/l1_tx_utils/types.d.ts.map +1 -0
- package/dest/l1_tx_utils/types.js +36 -0
- package/dest/l1_tx_utils/utils.d.ts +4 -0
- package/dest/l1_tx_utils/utils.d.ts.map +1 -0
- package/dest/l1_tx_utils/utils.js +14 -0
- package/dest/l1_types.d.ts +6 -0
- package/dest/l1_types.d.ts.map +1 -0
- package/dest/l1_types.js +1 -0
- package/dest/publisher_manager.d.ts +42 -0
- package/dest/publisher_manager.d.ts.map +1 -0
- package/dest/publisher_manager.js +199 -0
- package/dest/queries.d.ts +25 -0
- package/dest/queries.d.ts.map +1 -0
- package/dest/queries.js +144 -0
- package/dest/test/blob_kzg_warmup.d.ts +19 -0
- package/dest/test/blob_kzg_warmup.d.ts.map +1 -0
- package/dest/test/blob_kzg_warmup.js +64 -0
- package/dest/test/chain_monitor.d.ts +126 -0
- package/dest/test/chain_monitor.d.ts.map +1 -0
- package/dest/test/chain_monitor.js +314 -0
- package/dest/test/eth_cheat_codes.d.ts +260 -0
- package/dest/test/eth_cheat_codes.d.ts.map +1 -0
- package/dest/test/eth_cheat_codes.js +608 -0
- package/dest/test/eth_cheat_codes_with_state.d.ts +18 -0
- package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -0
- package/dest/test/eth_cheat_codes_with_state.js +34 -0
- package/dest/test/index.d.ts +8 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +7 -0
- package/dest/test/recording_rpc_server.d.ts +18 -0
- package/dest/test/recording_rpc_server.d.ts.map +1 -0
- package/dest/test/recording_rpc_server.js +68 -0
- package/dest/test/rollup_cheat_codes.d.ts +142 -0
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -0
- package/dest/test/rollup_cheat_codes.js +338 -0
- package/dest/test/start_anvil.d.ts +40 -0
- package/dest/test/start_anvil.d.ts.map +1 -0
- package/dest/test/start_anvil.js +210 -0
- package/dest/test/upgrade_utils.d.ts +12 -0
- package/dest/test/upgrade_utils.d.ts.map +1 -0
- package/dest/test/upgrade_utils.js +111 -0
- package/dest/types.d.ts +68 -0
- package/dest/types.d.ts.map +1 -0
- package/dest/types.js +3 -0
- package/dest/utils.d.ts +45 -0
- package/dest/utils.d.ts.map +1 -0
- package/dest/utils.js +260 -0
- package/dest/zkPassportVerifierAddress.d.ts +15 -0
- package/dest/zkPassportVerifierAddress.d.ts.map +1 -0
- package/dest/zkPassportVerifierAddress.js +11 -0
- package/package.json +122 -0
- package/src/account.ts +5 -0
- package/src/chain.ts +71 -0
- package/src/client.ts +165 -0
- package/src/config.ts +342 -0
- package/src/constants.ts +4 -0
- package/src/contracts/README.md +157 -0
- package/src/contracts/chain_state_override.ts +203 -0
- package/src/contracts/empire_base.ts +89 -0
- package/src/contracts/errors.ts +13 -0
- package/src/contracts/fee_asset_handler.ts +66 -0
- package/src/contracts/fee_asset_price_oracle.ts +284 -0
- package/src/contracts/fee_juice.ts +57 -0
- package/src/contracts/governance.ts +597 -0
- package/src/contracts/governance_proposer.ts +181 -0
- package/src/contracts/gse.ts +105 -0
- package/src/contracts/inbox.ts +223 -0
- package/src/contracts/index.ts +17 -0
- package/src/contracts/log.ts +13 -0
- package/src/contracts/multicall.ts +298 -0
- package/src/contracts/outbox.ts +132 -0
- package/src/contracts/registry.ts +161 -0
- package/src/contracts/rollup.ts +1502 -0
- package/src/contracts/slasher_contract.ts +89 -0
- package/src/contracts/slashing_proposer.ts +397 -0
- package/src/contracts/utils.ts +14 -0
- package/src/contracts/watch_event.ts +109 -0
- package/src/deploy_aztec_l1_contracts.ts +663 -0
- package/src/deploy_l1_contract.ts +361 -0
- package/src/eth-signer/eth-signer.ts +24 -0
- package/src/eth-signer/index.ts +1 -0
- package/src/forwarder_proxy.ts +107 -0
- package/src/foundry_binary.ts +57 -0
- package/src/l1_artifacts.ts +231 -0
- package/src/l1_contract_addresses.ts +149 -0
- package/src/l1_reader.ts +57 -0
- package/src/l1_tx_utils/README.md +177 -0
- package/src/l1_tx_utils/config.ts +181 -0
- package/src/l1_tx_utils/constants.ts +29 -0
- package/src/l1_tx_utils/factory.ts +64 -0
- package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +162 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +244 -0
- package/src/l1_tx_utils/fee-strategies/types.ts +55 -0
- package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +107 -0
- package/src/l1_tx_utils/index-blobs.ts +2 -0
- package/src/l1_tx_utils/index.ts +15 -0
- package/src/l1_tx_utils/interfaces.ts +86 -0
- package/src/l1_tx_utils/l1_fee_analyzer.ts +874 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +840 -0
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +459 -0
- package/src/l1_tx_utils/signer.ts +27 -0
- package/src/l1_tx_utils/tx_delayer.ts +302 -0
- package/src/l1_tx_utils/types.ts +116 -0
- package/src/l1_tx_utils/utils.ts +15 -0
- package/src/l1_types.ts +6 -0
- package/src/publisher_manager.ts +239 -0
- package/src/queries.ts +189 -0
- package/src/test/blob_kzg_warmup.ts +65 -0
- package/src/test/chain_monitor.ts +389 -0
- package/src/test/eth_cheat_codes.ts +624 -0
- package/src/test/eth_cheat_codes_with_state.ts +38 -0
- package/src/test/index.ts +7 -0
- package/src/test/recording_rpc_server.ts +69 -0
- package/src/test/rollup_cheat_codes.ts +398 -0
- package/src/test/start_anvil.ts +255 -0
- package/src/test/upgrade_utils.ts +109 -0
- package/src/types.ts +97 -0
- package/src/utils.ts +344 -0
- package/src/zkPassportVerifierAddress.ts +15 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { InboxAbi } from '@aztec/l1-artifacts/InboxAbi';
|
|
2
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
3
|
+
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
4
|
+
import { type BlockTag, type GetContractReturnType, type Hex } from 'viem';
|
|
5
|
+
import type { DeployAztecL1ContractsReturnType } from '../deploy_aztec_l1_contracts.js';
|
|
6
|
+
import type { L1ReaderConfig } from '../l1_reader.js';
|
|
7
|
+
import type { ViemClient } from '../types.js';
|
|
8
|
+
import type { L1EventLog } from './log.js';
|
|
9
|
+
/** The full L1-to-L2 message emitted by the Inbox, decoded from the event. Hashing it yields `leaf`. */
|
|
10
|
+
export type MessageSentMessage = {
|
|
11
|
+
sender: {
|
|
12
|
+
actor: `0x${string}`;
|
|
13
|
+
chainId: bigint;
|
|
14
|
+
};
|
|
15
|
+
recipient: {
|
|
16
|
+
actor: Fr;
|
|
17
|
+
version: bigint;
|
|
18
|
+
};
|
|
19
|
+
content: Fr;
|
|
20
|
+
secretHash: Fr;
|
|
21
|
+
index: bigint;
|
|
22
|
+
};
|
|
23
|
+
/** Arguments for the MessageSent event. */
|
|
24
|
+
export type MessageSentArgs = {
|
|
25
|
+
/** Compact cumulative index of the message in the Inbox insertion order (lifted from `message.index`). */
|
|
26
|
+
index: bigint;
|
|
27
|
+
leaf: Fr;
|
|
28
|
+
/** Consensus rolling hash (truncated sha256 chain) after this message. */
|
|
29
|
+
inboxRollingHash: Fr;
|
|
30
|
+
/** Sequence number of the Inbox bucket this message was absorbed into. */
|
|
31
|
+
bucketSeq: bigint;
|
|
32
|
+
/** The full message as emitted, making the event a self-contained record. */
|
|
33
|
+
message: MessageSentMessage;
|
|
34
|
+
};
|
|
35
|
+
/** Log type for MessageSent events, enriched with the emitting L1 block's timestamp (the bucket recency key). */
|
|
36
|
+
export type MessageSentLog = L1EventLog<MessageSentArgs> & {
|
|
37
|
+
/** Timestamp (in seconds) of the L1 block that emitted the event; the key of the message's Inbox bucket. */
|
|
38
|
+
l1BlockTimestamp: bigint;
|
|
39
|
+
};
|
|
40
|
+
export declare class InboxContract {
|
|
41
|
+
readonly client: ViemClient;
|
|
42
|
+
private readonly inbox;
|
|
43
|
+
static getFromL1ContractsValues(deployL1ContractsValues: DeployAztecL1ContractsReturnType): InboxContract;
|
|
44
|
+
static getFromConfig(config: L1ReaderConfig): InboxContract;
|
|
45
|
+
constructor(client: ViemClient, address: Hex | EthAddress);
|
|
46
|
+
get address(): `0x${string}`;
|
|
47
|
+
getContract(): GetContractReturnType<typeof InboxAbi, ViemClient>;
|
|
48
|
+
/**
|
|
49
|
+
* Returns the Inbox's live chain position in one atomic call: the consensus rolling hash and cumulative total
|
|
50
|
+
* after the most recent message, plus the current bucket sequence. Used by the archiver's message sync and
|
|
51
|
+
* L1-reorg detection.
|
|
52
|
+
*/
|
|
53
|
+
getState(opts?: {
|
|
54
|
+
blockTag?: BlockTag;
|
|
55
|
+
blockNumber?: bigint;
|
|
56
|
+
}): Promise<InboxContractState>;
|
|
57
|
+
/** Returns the sequence number of the Inbox bucket currently accumulating messages. */
|
|
58
|
+
getCurrentBucketSeq(opts?: {
|
|
59
|
+
blockTag?: BlockTag;
|
|
60
|
+
blockNumber?: bigint;
|
|
61
|
+
}): Promise<bigint>;
|
|
62
|
+
/** Returns the Inbox bucket with the given sequence number. */
|
|
63
|
+
getBucket(seq: bigint, opts?: {
|
|
64
|
+
blockTag?: BlockTag;
|
|
65
|
+
blockNumber?: bigint;
|
|
66
|
+
}): Promise<InboxContractBucket>;
|
|
67
|
+
/** Fetches MessageSent events within the given block range. */
|
|
68
|
+
getMessageSentEvents(fromBlock: bigint, toBlock: bigint): Promise<MessageSentLog[]>;
|
|
69
|
+
/** Fetches MessageSent events for a specific message hash around a specific block. */
|
|
70
|
+
getMessageSentEventByHash(msgHash: Hex, aroundL1BlockNumber: bigint): Promise<MessageSentLog>;
|
|
71
|
+
private getBlockTimestamps;
|
|
72
|
+
private mapMessageSentLog;
|
|
73
|
+
}
|
|
74
|
+
/** The Inbox's live chain position, read atomically from the contract's getState. */
|
|
75
|
+
export type InboxContractState = {
|
|
76
|
+
/** Consensus rolling hash after the most recently inserted message (zero when none was ever inserted). */
|
|
77
|
+
rollingHash: Fr;
|
|
78
|
+
/** Cumulative number of messages inserted into the Inbox. */
|
|
79
|
+
totalMessagesInserted: bigint;
|
|
80
|
+
/** Sequence number of the bucket currently accumulating messages. */
|
|
81
|
+
currentBucketSeq: bigint;
|
|
82
|
+
};
|
|
83
|
+
/** A snapshot of an on-chain Inbox rolling-hash bucket. */
|
|
84
|
+
export type InboxContractBucket = {
|
|
85
|
+
/** Consensus rolling hash (truncated sha256 chain) after the last message absorbed into this bucket. */
|
|
86
|
+
rollingHash: Fr;
|
|
87
|
+
/** Cumulative number of messages inserted into the Inbox up to and including this bucket. */
|
|
88
|
+
totalMsgCount: bigint;
|
|
89
|
+
/** L1 block timestamp at which this bucket was opened; its recency key, in seconds. */
|
|
90
|
+
timestamp: bigint;
|
|
91
|
+
/** Number of messages absorbed into this bucket. */
|
|
92
|
+
msgCount: number;
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBS3hELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHeEYsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzNDLHdHQUF3RztBQUN4RyxNQUFNLE1BQU0sa0JBQWtCLEdBQUc7SUFDL0IsTUFBTSxFQUFFO1FBQUUsS0FBSyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7UUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUNsRCxTQUFTLEVBQUU7UUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDMUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNaLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDZixLQUFLLEVBQUUsTUFBTSxDQUFDO0NBQ2YsQ0FBQztBQUVGLDJDQUEyQztBQUMzQyxNQUFNLE1BQU0sZUFBZSxHQUFHO0lBQzVCLDBHQUEwRztJQUMxRyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ2QsSUFBSSxFQUFFLEVBQUUsQ0FB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/contracts/inbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { InboxAbi } from '@aztec/l1-artifacts/InboxAbi';
|
|
2
|
+
import { asyncPool } from '@aztec-labs/foundation/async-pool';
|
|
3
|
+
import { maxBigint } from '@aztec-labs/foundation/bigint';
|
|
4
|
+
import { Buffer32 } from '@aztec-labs/foundation/buffer';
|
|
5
|
+
import { Fr } from '@aztec-labs/foundation/curves/bn254';
|
|
6
|
+
import { EthAddress } from '@aztec-labs/foundation/eth-address';
|
|
7
|
+
import { getContract } from 'viem';
|
|
8
|
+
import { getPublicClient } from '../client.js';
|
|
9
|
+
import { checkBlockTag } from './utils.js';
|
|
10
|
+
export class InboxContract {
|
|
11
|
+
client;
|
|
12
|
+
inbox;
|
|
13
|
+
static getFromL1ContractsValues(deployL1ContractsValues) {
|
|
14
|
+
const { l1Client, l1ContractAddresses: { inboxAddress } } = deployL1ContractsValues;
|
|
15
|
+
return new InboxContract(l1Client, inboxAddress.toString());
|
|
16
|
+
}
|
|
17
|
+
static getFromConfig(config) {
|
|
18
|
+
const client = getPublicClient(config);
|
|
19
|
+
const address = config.inboxAddress.toString();
|
|
20
|
+
return new InboxContract(client, address);
|
|
21
|
+
}
|
|
22
|
+
constructor(client, address){
|
|
23
|
+
this.client = client;
|
|
24
|
+
if (address instanceof EthAddress) {
|
|
25
|
+
address = address.toString();
|
|
26
|
+
}
|
|
27
|
+
this.inbox = getContract({
|
|
28
|
+
address,
|
|
29
|
+
abi: InboxAbi,
|
|
30
|
+
client
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
get address() {
|
|
34
|
+
return this.inbox.address;
|
|
35
|
+
}
|
|
36
|
+
getContract() {
|
|
37
|
+
return this.inbox;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns the Inbox's live chain position in one atomic call: the consensus rolling hash and cumulative total
|
|
41
|
+
* after the most recent message, plus the current bucket sequence. Used by the archiver's message sync and
|
|
42
|
+
* L1-reorg detection.
|
|
43
|
+
*/ async getState(opts = {}) {
|
|
44
|
+
await checkBlockTag(opts.blockNumber, this.client);
|
|
45
|
+
const state = await this.inbox.read.getState(opts);
|
|
46
|
+
return {
|
|
47
|
+
rollingHash: Fr.fromString(state.rollingHash),
|
|
48
|
+
totalMessagesInserted: state.totalMessagesInserted,
|
|
49
|
+
currentBucketSeq: state.currentBucketSeq
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Returns the sequence number of the Inbox bucket currently accumulating messages. */ async getCurrentBucketSeq(opts = {}) {
|
|
53
|
+
await checkBlockTag(opts.blockNumber, this.client);
|
|
54
|
+
return this.inbox.read.getCurrentBucketSeq(opts);
|
|
55
|
+
}
|
|
56
|
+
/** Returns the Inbox bucket with the given sequence number. */ async getBucket(seq, opts = {}) {
|
|
57
|
+
await checkBlockTag(opts.blockNumber, this.client);
|
|
58
|
+
const bucket = await this.inbox.read.getBucket([
|
|
59
|
+
seq
|
|
60
|
+
], opts);
|
|
61
|
+
return {
|
|
62
|
+
rollingHash: Fr.fromString(bucket.rollingHash),
|
|
63
|
+
totalMsgCount: bucket.totalMsgCount,
|
|
64
|
+
timestamp: bucket.timestamp,
|
|
65
|
+
msgCount: bucket.msgCount
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Fetches MessageSent events within the given block range. */ async getMessageSentEvents(fromBlock, toBlock) {
|
|
69
|
+
const logs = (await this.inbox.getEvents.MessageSent({}, {
|
|
70
|
+
fromBlock,
|
|
71
|
+
toBlock
|
|
72
|
+
})).filter((log)=>log.blockNumber >= fromBlock && log.blockNumber <= toBlock);
|
|
73
|
+
const timestamps = await this.getBlockTimestamps(logs.map((log)=>log.blockHash));
|
|
74
|
+
return logs.map((log)=>this.mapMessageSentLog(log, timestamps.get(log.blockHash)));
|
|
75
|
+
}
|
|
76
|
+
/** Fetches MessageSent events for a specific message hash around a specific block. */ async getMessageSentEventByHash(msgHash, aroundL1BlockNumber) {
|
|
77
|
+
// We don't use blockHash here because we don't want the query to throw if the L1 block number no longer exists on chain
|
|
78
|
+
// due to an L1 reorg. The use case for this method is usually checking if a message still exists on the Inbox after
|
|
79
|
+
// a reorg, so it's possible the message was moved one block up or down, and that the original L1 block where we
|
|
80
|
+
// saw it no longer exists, rendering the block-by-hash approach invalid.
|
|
81
|
+
const [log] = await this.inbox.getEvents.MessageSent({
|
|
82
|
+
hash: msgHash
|
|
83
|
+
}, {
|
|
84
|
+
fromBlock: maxBigint(aroundL1BlockNumber - 5n, 1n),
|
|
85
|
+
toBlock: aroundL1BlockNumber + 5n
|
|
86
|
+
});
|
|
87
|
+
if (!log) {
|
|
88
|
+
return log;
|
|
89
|
+
}
|
|
90
|
+
const [timestamp] = (await this.getBlockTimestamps([
|
|
91
|
+
log.blockHash
|
|
92
|
+
])).values();
|
|
93
|
+
return this.mapMessageSentLog(log, timestamp);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Fetches the timestamp of each distinct L1 block, so each MessageSent log can carry its bucket key. Blocks are
|
|
97
|
+
* resolved by hash, which pins them to the same fork the logs were read from: resolving by number would silently
|
|
98
|
+
* return the same-height block of another fork if the chain reorgs between the log query and this lookup, storing a
|
|
99
|
+
* timestamp that never applied to the message. By hash, such a reorg fails the lookup instead, and the caller
|
|
100
|
+
* retries against the reorged chain. Fetched with bounded concurrency to keep a large sync batch from fanning out
|
|
101
|
+
* unbounded RPC requests.
|
|
102
|
+
*/ async getBlockTimestamps(blockHashes) {
|
|
103
|
+
const uniqueBlockHashes = [
|
|
104
|
+
...new Set(blockHashes)
|
|
105
|
+
];
|
|
106
|
+
const timestamps = new Map();
|
|
107
|
+
await asyncPool(10, uniqueBlockHashes, async (blockHash)=>{
|
|
108
|
+
const block = await this.client.getBlock({
|
|
109
|
+
blockHash,
|
|
110
|
+
includeTransactions: false
|
|
111
|
+
});
|
|
112
|
+
timestamps.set(blockHash, block.timestamp);
|
|
113
|
+
});
|
|
114
|
+
return timestamps;
|
|
115
|
+
}
|
|
116
|
+
mapMessageSentLog(log, l1BlockTimestamp) {
|
|
117
|
+
const message = log.args.message;
|
|
118
|
+
return {
|
|
119
|
+
l1BlockNumber: log.blockNumber,
|
|
120
|
+
l1BlockHash: Buffer32.fromString(log.blockHash),
|
|
121
|
+
l1TransactionHash: log.transactionHash,
|
|
122
|
+
l1BlockTimestamp,
|
|
123
|
+
args: {
|
|
124
|
+
index: message.index,
|
|
125
|
+
leaf: Fr.fromString(log.args.hash),
|
|
126
|
+
inboxRollingHash: Fr.fromString(log.args.inboxRollingHash),
|
|
127
|
+
bucketSeq: log.args.bucketSeq,
|
|
128
|
+
message: {
|
|
129
|
+
sender: message.sender,
|
|
130
|
+
recipient: {
|
|
131
|
+
actor: Fr.fromString(message.recipient.actor),
|
|
132
|
+
version: message.recipient.version
|
|
133
|
+
},
|
|
134
|
+
content: Fr.fromString(message.content),
|
|
135
|
+
secretHash: Fr.fromString(message.secretHash),
|
|
136
|
+
index: message.index
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from './chain_state_override.js';
|
|
2
|
+
export * from './empire_base.js';
|
|
3
|
+
export * from './errors.js';
|
|
4
|
+
export * from './fee_asset_handler.js';
|
|
5
|
+
export * from './fee_asset_price_oracle.js';
|
|
6
|
+
export * from './fee_juice.js';
|
|
7
|
+
export * from './governance.js';
|
|
8
|
+
export * from './governance_proposer.js';
|
|
9
|
+
export * from './gse.js';
|
|
10
|
+
export * from './inbox.js';
|
|
11
|
+
export * from './log.js';
|
|
12
|
+
export * from './multicall.js';
|
|
13
|
+
export * from './outbox.js';
|
|
14
|
+
export * from './registry.js';
|
|
15
|
+
export * from './rollup.js';
|
|
16
|
+
export * from './slashing_proposer.js';
|
|
17
|
+
export * from './slasher_contract.js';
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './chain_state_override.js';
|
|
2
|
+
export * from './empire_base.js';
|
|
3
|
+
export * from './errors.js';
|
|
4
|
+
export * from './fee_asset_handler.js';
|
|
5
|
+
export * from './fee_asset_price_oracle.js';
|
|
6
|
+
export * from './fee_juice.js';
|
|
7
|
+
export * from './governance.js';
|
|
8
|
+
export * from './governance_proposer.js';
|
|
9
|
+
export * from './gse.js';
|
|
10
|
+
export * from './inbox.js';
|
|
11
|
+
export * from './log.js';
|
|
12
|
+
export * from './multicall.js';
|
|
13
|
+
export * from './outbox.js';
|
|
14
|
+
export * from './registry.js';
|
|
15
|
+
export * from './rollup.js';
|
|
16
|
+
export * from './slashing_proposer.js';
|
|
17
|
+
export * from './slasher_contract.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Buffer32 } from '@aztec-labs/foundation/buffer';
|
|
2
|
+
/** Base L1 event log with common fields. */
|
|
3
|
+
export type L1EventLog<T> = {
|
|
4
|
+
/** L1 block number where the event was emitted. */
|
|
5
|
+
l1BlockNumber: bigint;
|
|
6
|
+
/** L1 block hash. */
|
|
7
|
+
l1BlockHash: Buffer32;
|
|
8
|
+
/** L1 transaction hash that emitted the event. */
|
|
9
|
+
l1TransactionHash: `0x${string}`;
|
|
10
|
+
/** Event-specific arguments. */
|
|
11
|
+
args: T;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCw0Q0FBNEM7QUFDNUMsTUFBTSxNQUFNLFVBQVUsQ0FBQyxDQUFDLElBQUk7SUFDMUIsbURBQW1EO0lBQ25ELGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIscUJBQXFCO0lBQ3JCLFdBQVcsRUFBRSxRQUFRLENBQUM7SUFDdEIsa0RBQWtEO0lBQ2xELGlCQUFpQixFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDakMsZ0NBQWdDO0lBQ2hDLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDVCxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/contracts/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,4CAA4C;AAC5C,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,WAAW,EAAE,QAAQ,CAAC;IACtB,kDAAkD;IAClD,iBAAiB,EAAE,KAAK,MAAM,EAAE,CAAC;IACjC,gCAAgC;IAChC,IAAI,EAAE,CAAC,CAAC;CACT,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/** Base L1 event log with common fields. */ export { };
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import type { Logger } from '@aztec-labs/foundation/log';
|
|
2
|
+
import { type Abi, type Address, type BlockOverrides, type Hex, type RequiredBy, type StateOverride, type TransactionReceipt } from 'viem';
|
|
3
|
+
import type { L1BlobInputs, L1TxConfig, L1TxRequest, L1TxState, L1TxUtils } from '../l1_tx_utils/index.js';
|
|
4
|
+
import type { ExtendedViemWalletClient } from '../types.js';
|
|
5
|
+
export declare const MULTI_CALL_3_ADDRESS: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
6
|
+
/**
|
|
7
|
+
* Thrown by `Multicall3.forward` when the forwarder transaction lands but the receipt reports a
|
|
8
|
+
* reverted status. This is not expected (aggregate3 uses allowFailure: true), so callers should
|
|
9
|
+
* treat it as a fatal on-chain failure rather than retrying on a different publisher.
|
|
10
|
+
*/
|
|
11
|
+
export declare class MulticallForwarderRevertedError extends Error {
|
|
12
|
+
readonly receipt: TransactionReceipt;
|
|
13
|
+
readonly txState?: L1TxState | undefined;
|
|
14
|
+
constructor(receipt: TransactionReceipt, txState?: L1TxState | undefined);
|
|
15
|
+
}
|
|
16
|
+
/** ABI fragment for aggregate3Value — not included in viem's multicall3Abi. */
|
|
17
|
+
export declare const aggregate3ValueAbi: readonly [{
|
|
18
|
+
readonly inputs: readonly [{
|
|
19
|
+
readonly components: readonly [{
|
|
20
|
+
readonly internalType: "address";
|
|
21
|
+
readonly name: "target";
|
|
22
|
+
readonly type: "address";
|
|
23
|
+
}, {
|
|
24
|
+
readonly internalType: "bool";
|
|
25
|
+
readonly name: "allowFailure";
|
|
26
|
+
readonly type: "bool";
|
|
27
|
+
}, {
|
|
28
|
+
readonly internalType: "uint256";
|
|
29
|
+
readonly name: "value";
|
|
30
|
+
readonly type: "uint256";
|
|
31
|
+
}, {
|
|
32
|
+
readonly internalType: "bytes";
|
|
33
|
+
readonly name: "callData";
|
|
34
|
+
readonly type: "bytes";
|
|
35
|
+
}];
|
|
36
|
+
readonly internalType: "struct Multicall3.Call3Value[]";
|
|
37
|
+
readonly name: "calls";
|
|
38
|
+
readonly type: "tuple[]";
|
|
39
|
+
}];
|
|
40
|
+
readonly name: "aggregate3Value";
|
|
41
|
+
readonly outputs: readonly [{
|
|
42
|
+
readonly components: readonly [{
|
|
43
|
+
readonly internalType: "bool";
|
|
44
|
+
readonly name: "success";
|
|
45
|
+
readonly type: "bool";
|
|
46
|
+
}, {
|
|
47
|
+
readonly internalType: "bytes";
|
|
48
|
+
readonly name: "returnData";
|
|
49
|
+
readonly type: "bytes";
|
|
50
|
+
}];
|
|
51
|
+
readonly internalType: "struct Multicall3.Result[]";
|
|
52
|
+
readonly name: "returnData";
|
|
53
|
+
readonly type: "tuple[]";
|
|
54
|
+
}];
|
|
55
|
+
readonly stateMutability: "payable";
|
|
56
|
+
readonly type: "function";
|
|
57
|
+
}];
|
|
58
|
+
/** A single call to embed inside an aggregate3 simulation. The abi is used to decode revert reasons. */
|
|
59
|
+
export type SimulateAggregate3Request = {
|
|
60
|
+
to: Address;
|
|
61
|
+
data: Hex;
|
|
62
|
+
/** Optional ABI used to decode the revert reason if this entry reverts. */
|
|
63
|
+
abi?: Abi;
|
|
64
|
+
};
|
|
65
|
+
export type SimulateAggregate3EntryResult = {
|
|
66
|
+
success: boolean;
|
|
67
|
+
/** Decoded revert reason text when `success === false` and a request abi was provided. */
|
|
68
|
+
revertReason?: string;
|
|
69
|
+
/** Raw return data hex. `'0x'` for successful entries with void return. */
|
|
70
|
+
returnData: Hex;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Outcome of a bundle simulation.
|
|
74
|
+
* - `decoded`: eth_simulateV1 ran and produced a per-entry Result[]. Use `entries` for filtering.
|
|
75
|
+
* - `fallback`: the node does not support eth_simulateV1; `fallbackGasEstimate` was returned and no
|
|
76
|
+
* per-entry info is available. Caller should send the bundle as-is with a conservative gas cap.
|
|
77
|
+
*/
|
|
78
|
+
export type SimulateAggregate3Result = {
|
|
79
|
+
kind: 'decoded';
|
|
80
|
+
entries: SimulateAggregate3EntryResult[];
|
|
81
|
+
gasUsed: bigint;
|
|
82
|
+
} | {
|
|
83
|
+
kind: 'fallback';
|
|
84
|
+
gasUsed: bigint;
|
|
85
|
+
};
|
|
86
|
+
export type SimulateAggregate3Options = {
|
|
87
|
+
blockOverrides?: BlockOverrides<bigint, number>;
|
|
88
|
+
stateOverrides?: StateOverride;
|
|
89
|
+
/**
|
|
90
|
+
* If set, append a state override that fakes the sender's balance during the simulation so a
|
|
91
|
+
* low or zero balance does not cause the simulate to fail with insufficient funds. The fake
|
|
92
|
+
* balance is applied to `l1TxUtils.getSenderAddress()`.
|
|
93
|
+
*/
|
|
94
|
+
fakeSenderBalance?: bigint;
|
|
95
|
+
/** Gas cap to pass on the simulate call itself (defaults to viem's behavior). */
|
|
96
|
+
gas?: bigint;
|
|
97
|
+
/** When eth_simulateV1 is unavailable, fall back to this gas estimate instead of throwing. */
|
|
98
|
+
fallbackGasEstimate?: bigint;
|
|
99
|
+
};
|
|
100
|
+
export declare class Multicall3 {
|
|
101
|
+
/**
|
|
102
|
+
* Returns true iff Multicall3 bytecode is deployed at MULTI_CALL_3_ADDRESS. An empty result from
|
|
103
|
+
* a non-existent contract would otherwise silently validate any bundle that uses Multicall3.
|
|
104
|
+
*/
|
|
105
|
+
static hasCode(l1TxUtils: L1TxUtils): Promise<boolean>;
|
|
106
|
+
/**
|
|
107
|
+
* Simulates an aggregate3 call composed of the given requests via eth_simulateV1 and decodes the
|
|
108
|
+
* per-entry Result[]. Entries that revert are returned with a decoded revertReason (if the request
|
|
109
|
+
* provided an abi).
|
|
110
|
+
*
|
|
111
|
+
* Use this to pre-validate a bundle before sending it through `Multicall3.forward`. The caller can
|
|
112
|
+
* drop reverted entries from the bundle and re-simulate with the reduced list to get an accurate
|
|
113
|
+
* `gasUsed`.
|
|
114
|
+
*/
|
|
115
|
+
static simulateAggregate3(requests: SimulateAggregate3Request[], l1TxUtils: L1TxUtils, opts?: SimulateAggregate3Options): Promise<SimulateAggregate3Result>;
|
|
116
|
+
/**
|
|
117
|
+
* Sends a batch of requests through aggregate3. Individual calls may fail (allowFailure: true),
|
|
118
|
+
* but the top-level multicall is expected to land successfully. Throws if the send fails or if
|
|
119
|
+
* the receipt reports a reverted status.
|
|
120
|
+
*/
|
|
121
|
+
static forward<TOptGasLimitRequired extends boolean>(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: TOptGasLimitRequired extends true ? RequiredBy<L1TxConfig, 'gasLimit'> : L1TxConfig | undefined, blobConfig: L1BlobInputs | undefined, opts?: {
|
|
122
|
+
gasLimitRequired?: TOptGasLimitRequired;
|
|
123
|
+
}): Promise<{
|
|
124
|
+
receipt: TransactionReceipt;
|
|
125
|
+
stats: import("../l1_tx_utils/types.js").TransactionStats | undefined;
|
|
126
|
+
multicallData: `0x${string}`;
|
|
127
|
+
state: L1TxState;
|
|
128
|
+
}>;
|
|
129
|
+
/** Batch multiple value transfers into a single aggregate3Value call on Multicall3. */
|
|
130
|
+
static forwardValue(calls: {
|
|
131
|
+
to: Address;
|
|
132
|
+
value: bigint;
|
|
133
|
+
}[], l1TxUtils: L1TxUtils, logger: Logger): Promise<{
|
|
134
|
+
receipt: TransactionReceipt;
|
|
135
|
+
}>;
|
|
136
|
+
}
|
|
137
|
+
export declare function deployMulticall3(l1Client: ExtendedViemWalletClient, logger: Logger): Promise<void>;
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL211bHRpY2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsS0FBSyxHQUFHLEVBQ1IsS0FBSyxPQUFPLEVBQ1osS0FBSyxjQUFjLEVBQ25CLEtBQUssR0FBRyxFQUNSLEtBQUssVUFBVSxFQUNmLEtBQUssYUFBYSxFQUNsQixLQUFLLGtCQUFrQixFQUl4QixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRyxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUc1RCxlQUFPLE1BQU0sb0JBQW9CLDhDQUF3RCxDQUFDO0FBRTFGOzs7O0dBSUc7QUFDSCxxQkFBYSwrQkFBZ0MsU0FBUSxLQUFLO2FBRXRDLE9BQU8sRUFBRSxrQkFBa0I7YUFDM0IsT0FBTyxDQUFDO0lBRjFCLFlBQ2tCLE9BQU8sRUFBRSxrQkFBa0IsRUFDM0IsT0FBTyxDQUFDLHVCQUFXLEVBSXBDO0NBQ0Y7QUFFRCxpRkFBK0U7QUFDL0UsZUFBTyxNQUFNLGtCQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQThCckIsQ0FBQztBQUVYLHdHQUF3RztBQUN4RyxNQUFNLE1BQU0seUJBQXlCLEdBQUc7SUFDdEMsRUFBRSxFQUFFLE9BQU8sQ0FBQztJQUNaLElBQUksRUFBRSxHQUFHLENBQUM7SUFDViwyRUFBMkU7SUFDM0UsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDO0NBQ1gsQ0FBQztBQUVGLE1BQU0sTUFBTSw2QkFBNkIsR0FBRztJQUMxQyxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2pCLDBGQUEwRjtJQUMxRixZQUFZLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdEIsMkVBQTJFO0lBQzNFLFVBQVUsRUFBRSxHQUFHLENBQUM7Q0FDakIsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxNQUFNLHdCQUF3QixHQUNoQztJQUFFLElBQUksRUFBRSxTQUFTLENBQUM7SUFBQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsQ0FBQztJQUFDLE9BQU8sRUFBRSxNQUFNLENBQUE7Q0FBRSxHQUM5RTtJQUFFLElBQUksRUFBRSxVQUFVLENBQUM7SUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFBO0NBQUUsQ0FBQztBQUUxQyxNQUFNLE1BQU0seUJBQXlCLEdBQUc7SUFDdEMsY0FBYyxDQUFDLEVBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRCxjQUFjLENBQUMsRUFBRSxhQUFhLENBQUM7SUFDL0I7Ozs7T0FJRztJQUNILGlCQUFpQixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQzNCLGlGQUFpRjtJQUNqRixHQUFHLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDYiw4RkFBOEY7SUFDOUYsbUJBQW1CLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDOUIsQ0FBQztBQUVGLHFCQUFhLFVBQVU7SUFDckI7OztPQUdHO0lBQ0gsT0FBYSxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRzNEO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxPQUFhLGtCQUFrQixDQUM3QixRQUFRLEVBQUUseUJBQXlCLEVBQUUsRUFDckMsU0FBUyxFQUFFLFNBQVMsRUFDcEIsSUFBSSxHQUFFLHlCQUE4QixHQUNuQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FpRG5DO0lBRUQ7Ozs7T0FJRztJQUNILE9BQWEsT0FBTyxDQUFDLG9CQUFvQixTQUFTLE9BQU8sRUFDdkQsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUN2QixTQUFTLEVBQUUsU0FBUyxFQUNwQixTQUFTLEVBQUUsb0JBQW9CLFNBQVMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEdBQUcsVUFBVSxHQUFHLFNBQVMsRUFDMUcsVUFBVSxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQ3BDLElBQUksR0FBRTtRQUFFLGdCQUFnQixDQUFDLEVBQUUsb0JBQW9CLENBQUE7S0FBTzs7Ozs7T0FzQ3ZEO0lBRUQsdUZBQXVGO0lBQ3ZGLE9BQWEsWUFBWSxDQUFDLEtBQUssRUFBRTtRQUFFLEVBQUUsRUFBRSxPQUFPLENBQUM7UUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU07O09BNEJ0RztDQUNGO0FBRUQsd0JBQXNCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkErQnhGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"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"}
|