@aztec/ethereum 0.0.1-fake-ceab37513c → 0.0.6-commit.a2d1860fe9
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/dest/account.d.ts +1 -1
- package/dest/chain.d.ts +1 -1
- package/dest/client.d.ts +2 -2
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +6 -2
- package/dest/config.d.ts +22 -68
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +61 -338
- package/dest/constants.d.ts +1 -1
- package/dest/contracts/empire_base.d.ts +9 -5
- package/dest/contracts/empire_base.d.ts.map +1 -1
- package/dest/contracts/empire_base.js +1 -1
- package/dest/contracts/empire_slashing_proposer.d.ts +8 -4
- package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
- package/dest/contracts/empire_slashing_proposer.js +39 -17
- package/dest/contracts/errors.d.ts +1 -1
- package/dest/contracts/errors.d.ts.map +1 -1
- package/dest/contracts/fee_asset_handler.d.ts +6 -5
- package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
- package/dest/contracts/fee_asset_handler.js +11 -9
- package/dest/contracts/fee_asset_price_oracle.d.ts +101 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
- package/dest/contracts/fee_asset_price_oracle.js +651 -0
- package/dest/contracts/fee_juice.d.ts +1 -1
- package/dest/contracts/fee_juice.d.ts.map +1 -1
- package/dest/contracts/governance.d.ts +18 -16
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +14 -4
- package/dest/contracts/governance_proposer.d.ts +8 -4
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +412 -11
- package/dest/contracts/gse.d.ts +1 -1
- package/dest/contracts/gse.d.ts.map +1 -1
- package/dest/contracts/inbox.d.ts +24 -3
- package/dest/contracts/inbox.d.ts.map +1 -1
- package/dest/contracts/inbox.js +36 -1
- package/dest/contracts/index.d.ts +4 -1
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +3 -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 +2 -2
- package/dest/contracts/multicall.d.ts.map +1 -1
- package/dest/contracts/multicall.js +2 -1
- package/dest/contracts/outbox.d.ts +41 -0
- package/dest/contracts/outbox.d.ts.map +1 -0
- package/dest/contracts/outbox.js +86 -0
- package/dest/contracts/registry.d.ts +1 -1
- package/dest/contracts/registry.d.ts.map +1 -1
- package/dest/contracts/rollup.d.ts +195 -123
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +755 -184
- package/dest/contracts/slasher_contract.d.ts +1 -1
- package/dest/contracts/slasher_contract.d.ts.map +1 -1
- package/dest/contracts/tally_slashing_proposer.d.ts +15 -7
- package/dest/contracts/tally_slashing_proposer.d.ts.map +1 -1
- package/dest/contracts/tally_slashing_proposer.js +22 -5
- package/dest/contracts/utils.d.ts +1 -1
- package/dest/deploy_aztec_l1_contracts.d.ts +259 -0
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -0
- package/dest/deploy_aztec_l1_contracts.js +413 -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 +1 -1
- package/dest/eth-signer/index.d.ts +1 -1
- 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/generated/l1-contracts-defaults.d.ts +30 -0
- package/dest/generated/l1-contracts-defaults.d.ts.map +1 -0
- package/dest/generated/l1-contracts-defaults.js +30 -0
- package/dest/l1_artifacts.d.ts +11903 -1961
- package/dest/l1_artifacts.d.ts.map +1 -1
- package/dest/l1_contract_addresses.d.ts +3 -3
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +3 -3
- package/dest/l1_reader.d.ts +4 -2
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +7 -1
- package/dest/l1_tx_utils/config.d.ts +11 -5
- package/dest/l1_tx_utils/config.d.ts.map +1 -1
- package/dest/l1_tx_utils/config.js +45 -9
- package/dest/l1_tx_utils/constants.d.ts +8 -2
- package/dest/l1_tx_utils/constants.d.ts.map +1 -1
- package/dest/l1_tx_utils/constants.js +27 -2
- package/dest/l1_tx_utils/factory.d.ts +18 -10
- package/dest/l1_tx_utils/factory.d.ts.map +1 -1
- package/dest/l1_tx_utils/factory.js +17 -7
- 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 +4 -1
- package/dest/l1_tx_utils/index.d.ts.map +1 -1
- package/dest/l1_tx_utils/index.js +3 -0
- package/dest/l1_tx_utils/interfaces.d.ts +2 -2
- package/dest/l1_tx_utils/interfaces.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +233 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -0
- package/dest/l1_tx_utils/l1_fee_analyzer.js +506 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +15 -6
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.js +64 -17
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +19 -17
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +69 -40
- package/dest/l1_tx_utils/signer.d.ts +1 -1
- package/dest/l1_tx_utils/tx_delayer.d.ts +56 -0
- package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
- package/dest/{test → l1_tx_utils}/tx_delayer.js +65 -36
- package/dest/l1_tx_utils/types.d.ts +1 -1
- package/dest/l1_tx_utils/types.d.ts.map +1 -1
- package/dest/l1_tx_utils/utils.d.ts +1 -1
- package/dest/l1_types.d.ts +1 -1
- package/dest/publisher_manager.d.ts +3 -2
- package/dest/publisher_manager.d.ts.map +1 -1
- package/dest/publisher_manager.js +2 -2
- package/dest/queries.d.ts +2 -2
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +16 -6
- package/dest/test/chain_monitor.d.ts +27 -24
- package/dest/test/chain_monitor.d.ts.map +1 -1
- package/dest/test/chain_monitor.js +33 -36
- package/dest/test/eth_cheat_codes.d.ts +26 -9
- package/dest/test/eth_cheat_codes.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes.js +28 -12
- package/dest/test/eth_cheat_codes_with_state.d.ts +1 -1
- package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -1
- package/dest/test/index.d.ts +1 -3
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +0 -2
- package/dest/test/rollup_cheat_codes.d.ts +24 -20
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
- package/dest/test/rollup_cheat_codes.js +97 -41
- package/dest/test/start_anvil.d.ts +4 -1
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +3 -2
- package/dest/test/upgrade_utils.d.ts +1 -1
- package/dest/test/upgrade_utils.d.ts.map +1 -1
- package/dest/test/upgrade_utils.js +4 -3
- package/dest/types.d.ts +57 -2
- package/dest/types.d.ts.map +1 -1
- package/dest/utils.d.ts +16 -3
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +64 -0
- package/dest/zkPassportVerifierAddress.d.ts +1 -1
- package/package.json +34 -14
- package/src/client.ts +3 -3
- package/src/config.ts +74 -414
- package/src/contracts/README.md +157 -0
- package/src/contracts/empire_base.ts +8 -5
- package/src/contracts/empire_slashing_proposer.ts +38 -32
- package/src/contracts/fee_asset_handler.ts +10 -7
- package/src/contracts/fee_asset_price_oracle.ts +280 -0
- package/src/contracts/governance.ts +13 -4
- package/src/contracts/governance_proposer.ts +26 -6
- package/src/contracts/inbox.ts +55 -3
- package/src/contracts/index.ts +3 -0
- package/src/contracts/log.ts +13 -0
- package/src/contracts/multicall.ts +5 -2
- package/src/contracts/outbox.ts +98 -0
- package/src/contracts/rollup.ts +433 -167
- package/src/contracts/tally_slashing_proposer.ts +25 -9
- package/src/deploy_aztec_l1_contracts.ts +650 -0
- package/src/deploy_l1_contract.ts +362 -0
- package/src/forwarder_proxy.ts +108 -0
- package/src/generated/l1-contracts-defaults.ts +32 -0
- package/src/l1_contract_addresses.ts +22 -20
- package/src/l1_reader.ts +10 -2
- package/src/l1_tx_utils/config.ts +54 -13
- package/src/l1_tx_utils/constants.ts +13 -2
- package/src/l1_tx_utils/factory.ts +31 -31
- package/src/l1_tx_utils/fee-strategies/index.ts +22 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +163 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +245 -0
- package/src/l1_tx_utils/fee-strategies/types.ts +56 -0
- package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +108 -0
- package/src/l1_tx_utils/index-blobs.ts +2 -0
- package/src/l1_tx_utils/index.ts +3 -0
- package/src/l1_tx_utils/interfaces.ts +1 -1
- package/src/l1_tx_utils/l1_fee_analyzer.ts +803 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +76 -21
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +92 -45
- package/src/{test → l1_tx_utils}/tx_delayer.ts +82 -52
- package/src/publisher_manager.ts +4 -2
- package/src/queries.ts +17 -6
- package/src/test/chain_monitor.ts +51 -49
- package/src/test/eth_cheat_codes.ts +34 -15
- package/src/test/index.ts +0 -2
- package/src/test/rollup_cheat_codes.ts +111 -54
- package/src/test/start_anvil.ts +5 -1
- package/src/test/upgrade_utils.ts +4 -3
- package/src/types.ts +62 -0
- package/src/utils.ts +83 -1
- package/dest/deploy_l1_contracts.d.ts +0 -226
- package/dest/deploy_l1_contracts.d.ts.map +0 -1
- package/dest/deploy_l1_contracts.js +0 -1459
- package/dest/index.d.ts +0 -18
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -17
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +0 -26
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +0 -1
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +0 -26
- package/dest/test/delayed_tx_utils.d.ts +0 -13
- package/dest/test/delayed_tx_utils.d.ts.map +0 -1
- package/dest/test/delayed_tx_utils.js +0 -28
- package/dest/test/tx_delayer.d.ts +0 -36
- package/dest/test/tx_delayer.d.ts.map +0 -1
- package/src/deploy_l1_contracts.ts +0 -1838
- package/src/index.ts +0 -17
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +0 -77
- package/src/test/delayed_tx_utils.ts +0 -52
package/src/publisher_manager.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { pick } from '@aztec/foundation/collection';
|
|
2
|
-
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
|
|
3
3
|
|
|
4
4
|
import { L1TxUtils, TxUtilsState } from './l1_tx_utils/index.js';
|
|
5
5
|
|
|
@@ -28,13 +28,15 @@ const busyStates: TxUtilsState[] = [
|
|
|
28
28
|
export type PublisherFilter<UtilsType extends L1TxUtils> = (utils: UtilsType) => boolean;
|
|
29
29
|
|
|
30
30
|
export class PublisherManager<UtilsType extends L1TxUtils = L1TxUtils> {
|
|
31
|
-
private log
|
|
31
|
+
private log: Logger;
|
|
32
32
|
private config: { publisherAllowInvalidStates?: boolean };
|
|
33
33
|
|
|
34
34
|
constructor(
|
|
35
35
|
private publishers: UtilsType[],
|
|
36
36
|
config: { publisherAllowInvalidStates?: boolean },
|
|
37
|
+
bindings?: LoggerBindings,
|
|
37
38
|
) {
|
|
39
|
+
this.log = createLogger('publisher:manager', bindings);
|
|
38
40
|
this.log.info(`PublisherManager initialized with ${publishers.length} publishers.`);
|
|
39
41
|
this.publishers = publishers;
|
|
40
42
|
this.config = pick(config, 'publisherAllowInvalidStates');
|
package/src/queries.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
|
|
3
|
-
import type
|
|
3
|
+
import { DefaultL1ContractsConfig, type L1ContractsConfig } from './config.js';
|
|
4
4
|
import { ReadOnlyGovernanceContract } from './contracts/governance.js';
|
|
5
5
|
import { GovernanceProposerContract } from './contracts/governance_proposer.js';
|
|
6
|
+
import { InboxContract } from './contracts/inbox.js';
|
|
6
7
|
import { RollupContract } from './contracts/rollup.js';
|
|
7
8
|
import type { ViemPublicClient } from './types.js';
|
|
8
9
|
|
|
@@ -25,6 +26,8 @@ export async function getL1ContractsConfig(
|
|
|
25
26
|
const rollup = new RollupContract(publicClient, rollupAddress.toString());
|
|
26
27
|
const slasherProposer = await rollup.getSlashingProposer();
|
|
27
28
|
const slasher = await rollup.getSlasherContract();
|
|
29
|
+
const rollupAddresses = await rollup.getRollupAddresses();
|
|
30
|
+
const inboxContract = new InboxContract(publicClient, rollupAddresses.inboxAddress.toString());
|
|
28
31
|
|
|
29
32
|
const [
|
|
30
33
|
l1StartBlock,
|
|
@@ -33,7 +36,9 @@ export async function getL1ContractsConfig(
|
|
|
33
36
|
aztecSlotDuration,
|
|
34
37
|
aztecProofSubmissionEpochs,
|
|
35
38
|
aztecTargetCommitteeSize,
|
|
36
|
-
|
|
39
|
+
lagInEpochsForValidatorSet,
|
|
40
|
+
lagInEpochsForRandao,
|
|
41
|
+
inboxLag,
|
|
37
42
|
activationThreshold,
|
|
38
43
|
ejectionThreshold,
|
|
39
44
|
localEjectionThreshold,
|
|
@@ -59,7 +64,9 @@ export async function getL1ContractsConfig(
|
|
|
59
64
|
rollup.getSlotDuration(),
|
|
60
65
|
rollup.getProofSubmissionEpochs(),
|
|
61
66
|
rollup.getTargetCommitteeSize(),
|
|
62
|
-
rollup.
|
|
67
|
+
rollup.getLagInEpochsForValidatorSet(),
|
|
68
|
+
rollup.getLagInEpochsForRandao(),
|
|
69
|
+
inboxContract.getLag(),
|
|
63
70
|
rollup.getActivationThreshold(),
|
|
64
71
|
rollup.getEjectionThreshold(),
|
|
65
72
|
rollup.getLocalEjectionThreshold(),
|
|
@@ -87,14 +94,17 @@ export async function getL1ContractsConfig(
|
|
|
87
94
|
aztecSlotDuration: Number(aztecSlotDuration),
|
|
88
95
|
aztecProofSubmissionEpochs: Number(aztecProofSubmissionEpochs),
|
|
89
96
|
aztecTargetCommitteeSize: Number(aztecTargetCommitteeSize),
|
|
90
|
-
|
|
97
|
+
lagInEpochsForValidatorSet: Number(lagInEpochsForValidatorSet),
|
|
98
|
+
lagInEpochsForRandao: Number(lagInEpochsForRandao),
|
|
99
|
+
inboxLag: Number(inboxLag),
|
|
91
100
|
governanceProposerQuorum: Number(governanceProposerQuorum),
|
|
92
101
|
governanceProposerRoundSize: Number(governanceProposerRoundSize),
|
|
102
|
+
governanceVotingDuration: DefaultL1ContractsConfig.governanceVotingDuration,
|
|
93
103
|
activationThreshold,
|
|
94
104
|
ejectionThreshold,
|
|
95
105
|
localEjectionThreshold,
|
|
96
106
|
slashingQuorum: Number(slashingQuorum),
|
|
97
|
-
slashingRoundSizeInEpochs: Number(slashingRoundSize / aztecEpochDuration),
|
|
107
|
+
slashingRoundSizeInEpochs: Number(Number(slashingRoundSize) / aztecEpochDuration),
|
|
98
108
|
slashingLifetimeInRounds: Number(slashingLifetimeInRounds),
|
|
99
109
|
slashingExecutionDelayInRounds: Number(slashingExecutionDelayInRounds),
|
|
100
110
|
slashingVetoer,
|
|
@@ -102,12 +112,13 @@ export async function getL1ContractsConfig(
|
|
|
102
112
|
manaTarget,
|
|
103
113
|
provingCostPerMana: provingCostPerMana,
|
|
104
114
|
rollupVersion: Number(rollupVersion),
|
|
105
|
-
genesisArchiveTreeRoot,
|
|
115
|
+
genesisArchiveTreeRoot: genesisArchiveTreeRoot.toString(),
|
|
106
116
|
exitDelaySeconds: Number(exitDelay),
|
|
107
117
|
slasherFlavor: slasherProposer?.type ?? 'tally',
|
|
108
118
|
slashingOffsetInRounds: Number(slashingOffsetInRounds),
|
|
109
119
|
slashAmountSmall: slashingAmounts[0],
|
|
110
120
|
slashAmountMedium: slashingAmounts[1],
|
|
111
121
|
slashAmountLarge: slashingAmounts[2],
|
|
122
|
+
initialEthPerFeeAsset: DefaultL1ContractsConfig.initialEthPerFeeAsset,
|
|
112
123
|
};
|
|
113
124
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { RollupContract } from '@aztec/ethereum/contracts';
|
|
2
|
+
import { InboxContract } from '@aztec/ethereum/contracts';
|
|
3
|
+
import { CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
4
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
6
|
import { promiseWithResolvers } from '@aztec/foundation/promise';
|
|
@@ -10,11 +12,13 @@ import type { ViemClient } from '../types.js';
|
|
|
10
12
|
|
|
11
13
|
export type ChainMonitorEventMap = {
|
|
12
14
|
'l1-block': [{ l1BlockNumber: number; timestamp: bigint }];
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
checkpoint: [
|
|
16
|
+
{ checkpointNumber: CheckpointNumber; l1BlockNumber: number; l2SlotNumber: SlotNumber; timestamp: bigint },
|
|
17
|
+
];
|
|
18
|
+
'checkpoint-proven': [{ provenCheckpointNumber: CheckpointNumber; l1BlockNumber: number; timestamp: bigint }];
|
|
15
19
|
'l2-messages': [{ totalL2Messages: number; l1BlockNumber: number }];
|
|
16
|
-
'l2-epoch': [{ l2EpochNumber:
|
|
17
|
-
'l2-slot': [{ l2SlotNumber:
|
|
20
|
+
'l2-epoch': [{ l2EpochNumber: EpochNumber; timestamp: bigint; committee: EthAddress[] | undefined }];
|
|
21
|
+
'l2-slot': [{ l2SlotNumber: SlotNumber; timestamp: bigint }];
|
|
18
22
|
};
|
|
19
23
|
|
|
20
24
|
/** Utility class that polls the chain on quick intervals and logs new L1 blocks, L2 blocks, and L2 proofs. */
|
|
@@ -27,20 +31,20 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
27
31
|
|
|
28
32
|
/** Current L1 block number */
|
|
29
33
|
public l1BlockNumber!: number;
|
|
30
|
-
/** Current
|
|
31
|
-
public
|
|
32
|
-
/** Current
|
|
33
|
-
public
|
|
34
|
-
/** L1 timestamp for the current
|
|
35
|
-
public
|
|
36
|
-
/** L1 timestamp for the proven
|
|
37
|
-
public
|
|
34
|
+
/** Current checkpoint number */
|
|
35
|
+
public checkpointNumber!: CheckpointNumber;
|
|
36
|
+
/** Current proven checkpoint number */
|
|
37
|
+
public provenCheckpointNumber!: CheckpointNumber;
|
|
38
|
+
/** L1 timestamp for the current checkpoint */
|
|
39
|
+
public checkpointTimestamp!: bigint;
|
|
40
|
+
/** L1 timestamp for the proven checkpoint */
|
|
41
|
+
public provenCheckpointTimestamp!: bigint;
|
|
38
42
|
/** Total number of L2 messages pushed into the Inbox */
|
|
39
43
|
public totalL2Messages: number = 0;
|
|
40
44
|
/** Current L2 epoch number */
|
|
41
|
-
public l2EpochNumber!:
|
|
45
|
+
public l2EpochNumber!: EpochNumber;
|
|
42
46
|
/** Current L2 slot number */
|
|
43
|
-
public l2SlotNumber!:
|
|
47
|
+
public l2SlotNumber!: SlotNumber;
|
|
44
48
|
|
|
45
49
|
constructor(
|
|
46
50
|
private readonly rollup: RollupContract,
|
|
@@ -114,28 +118,28 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
114
118
|
this.emit('l1-block', { l1BlockNumber: newL1BlockNumber, timestamp });
|
|
115
119
|
let msg = `L1 block ${newL1BlockNumber} mined at ${timestampString}`;
|
|
116
120
|
|
|
117
|
-
const
|
|
118
|
-
if (this.
|
|
119
|
-
const epochNumber = await this.rollup.
|
|
120
|
-
msg += ` with new
|
|
121
|
-
this.
|
|
122
|
-
this.
|
|
123
|
-
this.emit('
|
|
124
|
-
|
|
121
|
+
const newCheckpointNumber = await this.rollup.getCheckpointNumber();
|
|
122
|
+
if (this.checkpointNumber !== newCheckpointNumber) {
|
|
123
|
+
const epochNumber = await this.rollup.getEpochNumberForCheckpoint(newCheckpointNumber);
|
|
124
|
+
msg += ` with new checkpoint ${newCheckpointNumber} for epoch ${epochNumber}`;
|
|
125
|
+
this.checkpointNumber = newCheckpointNumber;
|
|
126
|
+
this.checkpointTimestamp = timestamp;
|
|
127
|
+
this.emit('checkpoint', {
|
|
128
|
+
checkpointNumber: newCheckpointNumber,
|
|
125
129
|
l1BlockNumber: newL1BlockNumber,
|
|
126
|
-
l2SlotNumber
|
|
130
|
+
l2SlotNumber,
|
|
127
131
|
timestamp,
|
|
128
132
|
});
|
|
129
133
|
}
|
|
130
134
|
|
|
131
|
-
const
|
|
132
|
-
if (this.
|
|
133
|
-
const epochNumber = await this.rollup.
|
|
134
|
-
msg += ` with proof up to
|
|
135
|
-
this.
|
|
136
|
-
this.
|
|
137
|
-
this.emit('
|
|
138
|
-
|
|
135
|
+
const newProvenCheckpointNumber = await this.rollup.getProvenCheckpointNumber();
|
|
136
|
+
if (this.provenCheckpointNumber !== newProvenCheckpointNumber) {
|
|
137
|
+
const epochNumber = await this.rollup.getEpochNumberForCheckpoint(newProvenCheckpointNumber);
|
|
138
|
+
msg += ` with proof up to checkpoint ${newProvenCheckpointNumber} for epoch ${epochNumber}`;
|
|
139
|
+
this.provenCheckpointNumber = newProvenCheckpointNumber;
|
|
140
|
+
this.provenCheckpointTimestamp = timestamp;
|
|
141
|
+
this.emit('checkpoint-proven', {
|
|
142
|
+
provenCheckpointNumber: newProvenCheckpointNumber,
|
|
139
143
|
l1BlockNumber: newL1BlockNumber,
|
|
140
144
|
timestamp,
|
|
141
145
|
});
|
|
@@ -152,14 +156,14 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
152
156
|
let committee: EthAddress[] | undefined;
|
|
153
157
|
if (l2Epoch !== this.l2EpochNumber) {
|
|
154
158
|
this.l2EpochNumber = l2Epoch;
|
|
155
|
-
committee =
|
|
156
|
-
this.emit('l2-epoch', { l2EpochNumber:
|
|
159
|
+
committee = await this.rollup.getCurrentEpochCommittee();
|
|
160
|
+
this.emit('l2-epoch', { l2EpochNumber: l2Epoch, timestamp, committee });
|
|
157
161
|
msg += ` starting new epoch ${this.l2EpochNumber} `;
|
|
158
162
|
}
|
|
159
163
|
|
|
160
164
|
if (l2SlotNumber !== this.l2SlotNumber) {
|
|
161
165
|
this.l2SlotNumber = l2SlotNumber;
|
|
162
|
-
this.emit('l2-slot', { l2SlotNumber
|
|
166
|
+
this.emit('l2-slot', { l2SlotNumber, timestamp });
|
|
163
167
|
}
|
|
164
168
|
|
|
165
169
|
this.logger.info(msg, {
|
|
@@ -168,8 +172,8 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
168
172
|
l1BlockNumber: this.l1BlockNumber,
|
|
169
173
|
l2SlotNumber,
|
|
170
174
|
l2Epoch,
|
|
171
|
-
|
|
172
|
-
|
|
175
|
+
checkpointNumber: this.checkpointNumber,
|
|
176
|
+
provenCheckpointNumber: this.provenCheckpointNumber,
|
|
173
177
|
totalL2Messages: this.totalL2Messages,
|
|
174
178
|
committee,
|
|
175
179
|
});
|
|
@@ -177,14 +181,13 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
177
181
|
return this;
|
|
178
182
|
}
|
|
179
183
|
|
|
180
|
-
public waitUntilL2Slot(slot:
|
|
181
|
-
|
|
182
|
-
if (this.l2SlotNumber >= targetSlot) {
|
|
184
|
+
public waitUntilL2Slot(slot: SlotNumber): Promise<void> {
|
|
185
|
+
if (this.l2SlotNumber >= slot) {
|
|
183
186
|
return Promise.resolve();
|
|
184
187
|
}
|
|
185
188
|
return new Promise(resolve => {
|
|
186
|
-
const listener = (data: { l2SlotNumber:
|
|
187
|
-
if (data.l2SlotNumber >=
|
|
189
|
+
const listener = (data: { l2SlotNumber: SlotNumber; timestamp: bigint }) => {
|
|
190
|
+
if (data.l2SlotNumber >= slot) {
|
|
188
191
|
this.off('l2-slot', listener);
|
|
189
192
|
resolve();
|
|
190
193
|
}
|
|
@@ -225,19 +228,18 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
225
228
|
});
|
|
226
229
|
}
|
|
227
230
|
|
|
228
|
-
public
|
|
229
|
-
|
|
230
|
-
if (this.l2BlockNumber >= targetBlock) {
|
|
231
|
+
public waitUntilCheckpoint(checkpointNumber: CheckpointNumber): Promise<void> {
|
|
232
|
+
if (this.checkpointNumber >= checkpointNumber) {
|
|
231
233
|
return Promise.resolve();
|
|
232
234
|
}
|
|
233
235
|
return new Promise(resolve => {
|
|
234
|
-
const listener = (data: {
|
|
235
|
-
if (data.
|
|
236
|
-
this.off('
|
|
236
|
+
const listener = (data: { checkpointNumber: CheckpointNumber; timestamp: bigint }) => {
|
|
237
|
+
if (data.checkpointNumber >= checkpointNumber) {
|
|
238
|
+
this.off('checkpoint', listener);
|
|
237
239
|
resolve();
|
|
238
240
|
}
|
|
239
241
|
};
|
|
240
|
-
this.on('
|
|
242
|
+
this.on('checkpoint', listener);
|
|
241
243
|
});
|
|
242
244
|
}
|
|
243
245
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { toBigIntBE, toHex } from '@aztec/foundation/bigint-buffer';
|
|
2
|
-
import { keccak256 } from '@aztec/foundation/crypto';
|
|
2
|
+
import { keccak256 } from '@aztec/foundation/crypto/keccak';
|
|
3
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
4
4
|
import { jsonStringify } from '@aztec/foundation/json-rpc';
|
|
5
5
|
import { createLogger } from '@aztec/foundation/log';
|
|
6
6
|
import { pluralize } from '@aztec/foundation/string';
|
|
7
|
-
import type { TestDateProvider } from '@aztec/foundation/timer';
|
|
7
|
+
import type { DateProvider, TestDateProvider } from '@aztec/foundation/timer';
|
|
8
8
|
|
|
9
|
-
import { type Hex, type Transaction, createPublicClient, fallback, hexToNumber, http } from 'viem';
|
|
9
|
+
import { type Chain, type Hex, type Transaction, createPublicClient, fallback, hexToNumber, http } from 'viem';
|
|
10
|
+
import { foundry } from 'viem/chains';
|
|
10
11
|
|
|
11
12
|
import type { ViemPublicClient } from '../types.js';
|
|
12
13
|
|
|
@@ -20,13 +21,22 @@ export class EthCheatCodes {
|
|
|
20
21
|
* The RPC URL to use for interacting with the chain
|
|
21
22
|
*/
|
|
22
23
|
public rpcUrls: string[],
|
|
24
|
+
/**
|
|
25
|
+
* The date provider to use for time operations
|
|
26
|
+
*/
|
|
27
|
+
public dateProvider: DateProvider | TestDateProvider,
|
|
23
28
|
/**
|
|
24
29
|
* The logger to use for the eth cheatcodes
|
|
25
30
|
*/
|
|
26
31
|
public logger = createLogger('ethereum:cheat_codes'),
|
|
32
|
+
/**
|
|
33
|
+
* The chain configuration provided to Anvil
|
|
34
|
+
*/
|
|
35
|
+
public chain: Chain = foundry,
|
|
27
36
|
) {
|
|
28
37
|
this.publicClient = createPublicClient({
|
|
29
|
-
transport: fallback(this.rpcUrls.map(url => http(url))),
|
|
38
|
+
transport: fallback(this.rpcUrls.map(url => http(url, { batch: false }))),
|
|
39
|
+
chain: chain,
|
|
30
40
|
});
|
|
31
41
|
}
|
|
32
42
|
|
|
@@ -230,12 +240,12 @@ export class EthCheatCodes {
|
|
|
230
240
|
/**
|
|
231
241
|
* Set the next block timestamp and mines the block.
|
|
232
242
|
* Optionally resets interval mining so the next block is mined in `blockInterval` seconds from now.
|
|
233
|
-
*
|
|
243
|
+
* Always updates the injected date provider to follow L1 time.
|
|
234
244
|
* @param timestamp - The timestamp to set the next block to
|
|
235
245
|
*/
|
|
236
246
|
public async warp(
|
|
237
247
|
timestamp: number | bigint,
|
|
238
|
-
opts: { silent?: boolean; resetBlockInterval?: boolean
|
|
248
|
+
opts: { silent?: boolean; resetBlockInterval?: boolean } = {},
|
|
239
249
|
): Promise<void> {
|
|
240
250
|
let blockInterval: number | null = null;
|
|
241
251
|
try {
|
|
@@ -250,8 +260,10 @@ export class EthCheatCodes {
|
|
|
250
260
|
await this.rpcCall('evm_setNextBlockTimestamp', [Number(timestamp)]);
|
|
251
261
|
// And mine a block so the timestamp goes into effect now
|
|
252
262
|
await this.doMine();
|
|
253
|
-
// Update the date provider
|
|
254
|
-
|
|
263
|
+
// Update the injected date provider so it follows L1 time
|
|
264
|
+
if ('setTime' in this.dateProvider) {
|
|
265
|
+
this.dateProvider.setTime(Number(timestamp) * 1000);
|
|
266
|
+
}
|
|
255
267
|
} catch (err) {
|
|
256
268
|
throw new Error(`Error warping: ${err}`);
|
|
257
269
|
} finally {
|
|
@@ -282,14 +294,21 @@ export class EthCheatCodes {
|
|
|
282
294
|
* @param slot - The storage slot
|
|
283
295
|
* @param value - The value to set the storage slot to
|
|
284
296
|
*/
|
|
285
|
-
public async store(
|
|
297
|
+
public async store(
|
|
298
|
+
contract: EthAddress,
|
|
299
|
+
slot: bigint,
|
|
300
|
+
value: bigint,
|
|
301
|
+
opts: { silent?: boolean } = {},
|
|
302
|
+
): Promise<void> {
|
|
286
303
|
// for the rpc call, we need to change value to be a 32 byte hex string.
|
|
287
304
|
try {
|
|
288
305
|
await this.rpcCall('hardhat_setStorageAt', [contract.toString(), toHex(slot), toHex(value, true)]);
|
|
289
306
|
} catch (err) {
|
|
290
307
|
throw new Error(`Error setting storage for contract ${contract} at ${slot}: ${err}`);
|
|
291
308
|
}
|
|
292
|
-
|
|
309
|
+
if (!opts.silent) {
|
|
310
|
+
this.logger.warn(`Set L1 storage for contract ${contract} at ${slot} to ${value}`);
|
|
311
|
+
}
|
|
293
312
|
}
|
|
294
313
|
|
|
295
314
|
/**
|
|
@@ -499,7 +518,7 @@ export class EthCheatCodes {
|
|
|
499
518
|
this.logger.warn(`Mined ${blockCount} empty L1 ${pluralize('block', blockCount)}`);
|
|
500
519
|
}
|
|
501
520
|
|
|
502
|
-
public async execWithPausedAnvil(fn: () => Promise<
|
|
521
|
+
public async execWithPausedAnvil<T>(fn: () => Promise<T>): Promise<T> {
|
|
503
522
|
const [blockInterval, wasAutoMining] = await Promise.all([this.getIntervalMining(), this.isAutoMining()]);
|
|
504
523
|
try {
|
|
505
524
|
if (blockInterval !== null) {
|
|
@@ -510,7 +529,7 @@ export class EthCheatCodes {
|
|
|
510
529
|
await this.setAutomine(false, { silent: true });
|
|
511
530
|
}
|
|
512
531
|
|
|
513
|
-
await fn();
|
|
532
|
+
return await fn();
|
|
514
533
|
} finally {
|
|
515
534
|
try {
|
|
516
535
|
// restore automine if necessary
|
|
@@ -532,10 +551,10 @@ export class EthCheatCodes {
|
|
|
532
551
|
}
|
|
533
552
|
}
|
|
534
553
|
|
|
535
|
-
public async syncDateProvider(
|
|
554
|
+
public async syncDateProvider() {
|
|
536
555
|
const timestamp = await this.timestamp();
|
|
537
|
-
if ('setTime' in dateProvider) {
|
|
538
|
-
dateProvider.setTime(timestamp * 1000);
|
|
556
|
+
if ('setTime' in this.dateProvider) {
|
|
557
|
+
this.dateProvider.setTime(timestamp * 1000);
|
|
539
558
|
}
|
|
540
559
|
}
|
|
541
560
|
}
|
package/src/test/index.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
export * from './delayed_tx_utils.js';
|
|
2
1
|
export * from './eth_cheat_codes.js';
|
|
3
2
|
export * from './eth_cheat_codes_with_state.js';
|
|
4
3
|
export * from './start_anvil.js';
|
|
5
|
-
export * from './tx_delayer.js';
|
|
6
4
|
export * from './upgrade_utils.js';
|
|
7
5
|
export * from './chain_monitor.js';
|
|
8
6
|
export * from './rollup_cheat_codes.js';
|