@aztec/sequencer-client 0.55.1 → 0.57.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/dest/block_builder/index.d.ts +5 -24
- package/dest/block_builder/index.d.ts.map +1 -1
- package/dest/block_builder/index.js +3 -40
- package/dest/block_builder/light.d.ts +26 -0
- package/dest/block_builder/light.d.ts.map +1 -0
- package/dest/block_builder/light.js +60 -0
- package/dest/block_builder/orchestrator.d.ts +23 -0
- package/dest/block_builder/orchestrator.d.ts.map +1 -0
- package/dest/block_builder/orchestrator.js +33 -0
- package/dest/client/sequencer-client.d.ts +2 -1
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +3 -3
- package/dest/config.js +8 -5
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +2 -1
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +7 -2
- package/dest/publisher/index.d.ts +1 -1
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/index.js +1 -1
- package/dest/publisher/l1-publisher.d.ts +46 -34
- package/dest/publisher/l1-publisher.d.ts.map +1 -1
- package/dest/publisher/l1-publisher.js +259 -116
- package/dest/publisher/utils.d.ts +1 -1
- package/dest/publisher/utils.js +1 -1
- package/dest/sequencer/sequencer.d.ts +7 -3
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +62 -23
- package/dest/tx_validator/gas_validator.d.ts +1 -0
- package/dest/tx_validator/gas_validator.d.ts.map +1 -1
- package/dest/tx_validator/gas_validator.js +13 -8
- package/dest/tx_validator/phases_validator.d.ts +1 -0
- package/dest/tx_validator/phases_validator.d.ts.map +1 -1
- package/dest/tx_validator/phases_validator.js +20 -20
- package/dest/tx_validator/test_utils.js +4 -4
- package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
- package/dest/tx_validator/tx_validator_factory.js +5 -4
- package/package.json +22 -19
- package/src/block_builder/index.ts +5 -49
- package/src/block_builder/light.ts +102 -0
- package/src/block_builder/orchestrator.ts +38 -0
- package/src/client/sequencer-client.ts +4 -3
- package/src/config.ts +7 -4
- package/src/global_variable_builder/global_builder.ts +1 -0
- package/src/publisher/config.ts +6 -1
- package/src/publisher/index.ts +1 -1
- package/src/publisher/l1-publisher.ts +373 -144
- package/src/publisher/utils.ts +1 -1
- package/src/sequencer/sequencer.ts +74 -26
- package/src/tx_validator/gas_validator.ts +13 -10
- package/src/tx_validator/phases_validator.ts +5 -6
- package/src/tx_validator/test_utils.ts +3 -3
- package/src/tx_validator/tx_validator_factory.ts +5 -4
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import { getHashedSignaturePayload } from '@aztec/circuit-types';
|
|
2
|
-
import { ETHEREUM_SLOT_DURATION, EthAddress } from '@aztec/circuits.js';
|
|
1
|
+
import { ConsensusPayload, getHashedSignaturePayload, } from '@aztec/circuit-types';
|
|
2
|
+
import { AGGREGATION_OBJECT_LENGTH, ETHEREUM_SLOT_DURATION, EthAddress, } from '@aztec/circuits.js';
|
|
3
3
|
import { createEthereumChain } from '@aztec/ethereum';
|
|
4
|
+
import { makeTuple } from '@aztec/foundation/array';
|
|
5
|
+
import { areArraysEqual, times } from '@aztec/foundation/collection';
|
|
6
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
4
7
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
5
8
|
import { serializeToBuffer } from '@aztec/foundation/serialize';
|
|
6
9
|
import { InterruptibleSleep } from '@aztec/foundation/sleep';
|
|
7
10
|
import { Timer } from '@aztec/foundation/timer';
|
|
8
11
|
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
9
12
|
import pick from 'lodash.pick';
|
|
10
|
-
import {
|
|
13
|
+
import { inspect } from 'util';
|
|
14
|
+
import { ContractFunctionRevertedError, createPublicClient, createWalletClient, encodeFunctionData, getAbiItem, getAddress, getContract, hexToBytes, http, publicActions, } from 'viem';
|
|
11
15
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
12
16
|
import { L1PublisherMetrics } from './l1-publisher-metrics.js';
|
|
13
|
-
import {
|
|
17
|
+
import { prettyLogViemError } from './utils.js';
|
|
14
18
|
/**
|
|
15
19
|
* Publishes L2 blocks to L1. This implementation does *not* retry a transaction in
|
|
16
20
|
* the event of network congestion, but should work for local development.
|
|
@@ -30,7 +34,7 @@ export class L1Publisher {
|
|
|
30
34
|
const chain = createEthereumChain(rpcUrl, chainId);
|
|
31
35
|
this.account = privateKeyToAccount(publisherPrivateKey);
|
|
32
36
|
this.log.debug(`Publishing from address ${this.account.address}`);
|
|
33
|
-
|
|
37
|
+
this.walletClient = createWalletClient({
|
|
34
38
|
account: this.account,
|
|
35
39
|
chain: chain.chainInfo,
|
|
36
40
|
transport: http(chain.rpcUrl),
|
|
@@ -38,15 +42,22 @@ export class L1Publisher {
|
|
|
38
42
|
this.publicClient = createPublicClient({
|
|
39
43
|
chain: chain.chainInfo,
|
|
40
44
|
transport: http(chain.rpcUrl),
|
|
45
|
+
pollingInterval: config.viemPollingIntervalMS,
|
|
41
46
|
});
|
|
42
47
|
this.rollupContract = getContract({
|
|
43
48
|
address: getAddress(l1Contracts.rollupAddress.toString()),
|
|
44
49
|
abi: RollupAbi,
|
|
45
|
-
client: walletClient,
|
|
50
|
+
client: this.walletClient,
|
|
46
51
|
});
|
|
47
52
|
}
|
|
48
53
|
getSenderAddress() {
|
|
49
|
-
return
|
|
54
|
+
return EthAddress.fromString(this.account.address);
|
|
55
|
+
}
|
|
56
|
+
getClient() {
|
|
57
|
+
return this.walletClient.extend(publicActions);
|
|
58
|
+
}
|
|
59
|
+
getRollupContract() {
|
|
60
|
+
return this.rollupContract;
|
|
50
61
|
}
|
|
51
62
|
/**
|
|
52
63
|
* @notice Calls `canProposeAtTime` with the time of the next Ethereum block and the sender address
|
|
@@ -62,6 +73,53 @@ export class L1Publisher {
|
|
|
62
73
|
const [slot, blockNumber] = await this.rollupContract.read.canProposeAtTime([ts, `0x${archive.toString('hex')}`]);
|
|
63
74
|
return [slot, blockNumber];
|
|
64
75
|
}
|
|
76
|
+
async nextEpochToClaim() {
|
|
77
|
+
return await this.rollupContract.read.nextEpochToClaim();
|
|
78
|
+
}
|
|
79
|
+
async getEpochForSlotNumber(slotNumber) {
|
|
80
|
+
return await this.rollupContract.read.getEpochAtSlot([slotNumber]);
|
|
81
|
+
}
|
|
82
|
+
async getEpochToProve() {
|
|
83
|
+
try {
|
|
84
|
+
return await this.rollupContract.read.getEpochToProve();
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
// If this is a revert with Rollup__NoEpochToProve, it means there is no epoch to prove, so we return undefined
|
|
88
|
+
// See https://viem.sh/docs/contract/simulateContract#handling-custom-errors
|
|
89
|
+
const errorName = tryGetCustomErrorName(err);
|
|
90
|
+
if (errorName === getAbiItem({ abi: RollupAbi, name: 'Rollup__NoEpochToProve' }).name) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async getProofClaim() {
|
|
97
|
+
const [epochToProve, basisPointFee, bondAmount, bondProviderHex, proposerClaimantHex] = await this.rollupContract.read.proofClaim();
|
|
98
|
+
const bondProvider = EthAddress.fromString(bondProviderHex);
|
|
99
|
+
const proposerClaimant = EthAddress.fromString(proposerClaimantHex);
|
|
100
|
+
if (bondProvider.isZero() && proposerClaimant.isZero() && epochToProve === 0n) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
epochToProve,
|
|
105
|
+
basisPointFee,
|
|
106
|
+
bondAmount,
|
|
107
|
+
bondProvider,
|
|
108
|
+
proposerClaimant,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async validateProofQuote(quote) {
|
|
112
|
+
const args = [quote.toViemArgs()];
|
|
113
|
+
try {
|
|
114
|
+
await this.rollupContract.read.validateEpochProofRightClaim(args, { account: this.account });
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
const errorName = tryGetCustomErrorName(err);
|
|
118
|
+
this.log.verbose(`Proof quote validation failed: ${errorName}`);
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return quote;
|
|
122
|
+
}
|
|
65
123
|
/**
|
|
66
124
|
* @notice Will call `validateHeader` to make sure that it is possible to propose
|
|
67
125
|
*
|
|
@@ -122,13 +180,14 @@ export class L1Publisher {
|
|
|
122
180
|
* @param block - L2 block to propose.
|
|
123
181
|
* @returns True once the tx has been confirmed and is successful, false on revert or interrupt, blocks otherwise.
|
|
124
182
|
*/
|
|
125
|
-
async proposeL2Block(block, attestations, txHashes) {
|
|
183
|
+
async proposeL2Block(block, attestations, txHashes, proofQuote) {
|
|
126
184
|
const ctx = {
|
|
127
185
|
blockNumber: block.number,
|
|
128
186
|
slotNumber: block.header.globalVariables.slotNumber.toBigInt(),
|
|
129
187
|
blockHash: block.hash().toString(),
|
|
130
188
|
};
|
|
131
|
-
const
|
|
189
|
+
const consensusPayload = new ConsensusPayload(block.header, block.archive.root, txHashes ?? []);
|
|
190
|
+
const digest = getHashedSignaturePayload(consensusPayload);
|
|
132
191
|
const proposeTxArgs = {
|
|
133
192
|
header: block.header.toBuffer(),
|
|
134
193
|
archive: block.archive.root.toBuffer(),
|
|
@@ -138,59 +197,58 @@ export class L1Publisher {
|
|
|
138
197
|
txHashes: txHashes ?? [],
|
|
139
198
|
};
|
|
140
199
|
// Publish body and propose block (if not already published)
|
|
141
|
-
if (
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
// This means that we can avoid the simulation issues in later checks.
|
|
145
|
-
// By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
|
|
146
|
-
// make time consistency checks break.
|
|
147
|
-
await this.validateBlockForSubmission(block.header, {
|
|
148
|
-
digest,
|
|
149
|
-
signatures: attestations ?? [],
|
|
150
|
-
});
|
|
151
|
-
const txHash = await this.sendProposeTx(proposeTxArgs);
|
|
152
|
-
if (!txHash) {
|
|
153
|
-
this.log.info(`Failed to publish block ${block.number} to L1`, ctx);
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
|
-
const receipt = await this.getTransactionReceipt(txHash);
|
|
157
|
-
if (!receipt) {
|
|
158
|
-
this.log.info(`Failed to get receipt for tx ${txHash}`, ctx);
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
// Tx was mined successfully
|
|
162
|
-
if (receipt.status) {
|
|
163
|
-
const tx = await this.getTransactionStats(txHash);
|
|
164
|
-
const stats = {
|
|
165
|
-
...pick(receipt, 'gasPrice', 'gasUsed', 'transactionHash'),
|
|
166
|
-
...pick(tx, 'calldataGas', 'calldataSize'),
|
|
167
|
-
...block.getStats(),
|
|
168
|
-
eventName: 'rollup-published-to-l1',
|
|
169
|
-
};
|
|
170
|
-
this.log.info(`Published L2 block to L1 rollup contract`, { ...stats, ...ctx });
|
|
171
|
-
this.metrics.recordProcessBlockTx(timer.ms(), stats);
|
|
172
|
-
return true;
|
|
173
|
-
}
|
|
174
|
-
this.metrics.recordFailedTx('process');
|
|
175
|
-
this.log.error(`Rollup.process tx status failed: ${receipt.transactionHash}`, ctx);
|
|
176
|
-
await this.sleepOrInterrupted();
|
|
200
|
+
if (this.interrupted) {
|
|
201
|
+
this.log.verbose('L2 block data syncing interrupted while processing blocks.', ctx);
|
|
202
|
+
return false;
|
|
177
203
|
}
|
|
178
|
-
|
|
204
|
+
const timer = new Timer();
|
|
205
|
+
// @note This will make sure that we are passing the checks for our header ASSUMING that the data is also made available
|
|
206
|
+
// This means that we can avoid the simulation issues in later checks.
|
|
207
|
+
// By simulation issue, I mean the fact that the block.timestamp is equal to the last block, not the next, which
|
|
208
|
+
// make time consistency checks break.
|
|
209
|
+
await this.validateBlockForSubmission(block.header, {
|
|
210
|
+
digest: digest.toBuffer(),
|
|
211
|
+
signatures: attestations ?? [],
|
|
212
|
+
});
|
|
213
|
+
this.log.verbose(`Submitting propose transaction`);
|
|
214
|
+
const txHash = proofQuote
|
|
215
|
+
? await this.sendProposeAndClaimTx(proposeTxArgs, proofQuote)
|
|
216
|
+
: await this.sendProposeTx(proposeTxArgs);
|
|
217
|
+
if (!txHash) {
|
|
218
|
+
this.log.info(`Failed to publish block ${block.number} to L1`, ctx);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const receipt = await this.getTransactionReceipt(txHash);
|
|
222
|
+
if (!receipt) {
|
|
223
|
+
this.log.info(`Failed to get receipt for tx ${txHash}`, ctx);
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
// Tx was mined successfully
|
|
227
|
+
if (receipt.status) {
|
|
228
|
+
const tx = await this.getTransactionStats(txHash);
|
|
229
|
+
const stats = {
|
|
230
|
+
...pick(receipt, 'gasPrice', 'gasUsed', 'transactionHash'),
|
|
231
|
+
...pick(tx, 'calldataGas', 'calldataSize'),
|
|
232
|
+
...block.getStats(),
|
|
233
|
+
eventName: 'rollup-published-to-l1',
|
|
234
|
+
};
|
|
235
|
+
this.log.info(`Published L2 block to L1 rollup contract`, { ...stats, ...ctx });
|
|
236
|
+
this.metrics.recordProcessBlockTx(timer.ms(), stats);
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
this.metrics.recordFailedTx('process');
|
|
240
|
+
this.log.error(`Rollup.process tx status failed: ${receipt.transactionHash}`, ctx);
|
|
241
|
+
await this.sleepOrInterrupted();
|
|
179
242
|
return false;
|
|
180
243
|
}
|
|
181
|
-
async
|
|
182
|
-
const
|
|
183
|
-
const
|
|
184
|
-
header: header.toBuffer(),
|
|
185
|
-
archive: archiveRoot.toBuffer(),
|
|
186
|
-
proverId: proverId.toBuffer(),
|
|
187
|
-
aggregationObject: serializeToBuffer(aggregationObject),
|
|
188
|
-
proof: proof.withoutPublicInputs(),
|
|
189
|
-
};
|
|
190
|
-
// Process block
|
|
244
|
+
async submitEpochProof(args) {
|
|
245
|
+
const { epochNumber, fromBlock, toBlock } = args;
|
|
246
|
+
const ctx = { epochNumber, fromBlock, toBlock };
|
|
191
247
|
if (!this.interrupted) {
|
|
192
248
|
const timer = new Timer();
|
|
193
|
-
|
|
249
|
+
// Validate epoch proof range and hashes are correct before submitting
|
|
250
|
+
await this.validateEpochProofSubmission(args);
|
|
251
|
+
const txHash = await this.sendSubmitEpochProofTx(args);
|
|
194
252
|
if (!txHash) {
|
|
195
253
|
return false;
|
|
196
254
|
}
|
|
@@ -206,17 +264,55 @@ export class L1Publisher {
|
|
|
206
264
|
...pick(tx, 'calldataGas', 'calldataSize'),
|
|
207
265
|
eventName: 'proof-published-to-l1',
|
|
208
266
|
};
|
|
209
|
-
this.log.info(`Published proof to L1 rollup contract`, { ...stats, ...ctx });
|
|
267
|
+
this.log.info(`Published epoch proof to L1 rollup contract`, { ...stats, ...ctx });
|
|
210
268
|
this.metrics.recordSubmitProof(timer.ms(), stats);
|
|
211
269
|
return true;
|
|
212
270
|
}
|
|
213
271
|
this.metrics.recordFailedTx('submitProof');
|
|
214
|
-
this.log.error(`Rollup.
|
|
272
|
+
this.log.error(`Rollup.submitEpochProof tx status failed: ${receipt.transactionHash}`, ctx);
|
|
215
273
|
await this.sleepOrInterrupted();
|
|
216
274
|
}
|
|
217
275
|
this.log.verbose('L2 block data syncing interrupted while processing blocks.', ctx);
|
|
218
276
|
return false;
|
|
219
277
|
}
|
|
278
|
+
async validateEpochProofSubmission(args) {
|
|
279
|
+
const { fromBlock, toBlock, publicInputs, proof } = args;
|
|
280
|
+
// Check that the block numbers match the expected epoch to be proven
|
|
281
|
+
const [pending, proven] = await this.rollupContract.read.tips();
|
|
282
|
+
if (proven !== BigInt(fromBlock) - 1n) {
|
|
283
|
+
throw new Error(`Cannot submit epoch proof for ${fromBlock}-${toBlock} as proven block is ${proven}`);
|
|
284
|
+
}
|
|
285
|
+
if (toBlock > pending) {
|
|
286
|
+
throw new Error(`Cannot submit epoch proof for ${fromBlock}-${toBlock} as pending block is ${pending}`);
|
|
287
|
+
}
|
|
288
|
+
// Check the block hash and archive for the immediate block before the epoch
|
|
289
|
+
const [previousArchive, previousBlockHash] = await this.rollupContract.read.blocks([proven]);
|
|
290
|
+
if (publicInputs.previousArchive.root.toString() !== previousArchive) {
|
|
291
|
+
throw new Error(`Previous archive root mismatch: ${publicInputs.previousArchive.root.toString()} !== ${previousArchive}`);
|
|
292
|
+
}
|
|
293
|
+
// TODO: Remove zero check once we inject the proper zero blockhash
|
|
294
|
+
if (previousBlockHash !== Fr.ZERO.toString() && publicInputs.previousBlockHash.toString() !== previousBlockHash) {
|
|
295
|
+
throw new Error(`Previous block hash mismatch: ${publicInputs.previousBlockHash.toString()} !== ${previousBlockHash}`);
|
|
296
|
+
}
|
|
297
|
+
// Check the block hash and archive for the last block in the epoch
|
|
298
|
+
const [endArchive, endBlockHash] = await this.rollupContract.read.blocks([BigInt(toBlock)]);
|
|
299
|
+
if (publicInputs.endArchive.root.toString() !== endArchive) {
|
|
300
|
+
throw new Error(`End archive root mismatch: ${publicInputs.endArchive.root.toString()} !== ${endArchive}`);
|
|
301
|
+
}
|
|
302
|
+
if (publicInputs.endBlockHash.toString() !== endBlockHash) {
|
|
303
|
+
throw new Error(`End block hash mismatch: ${publicInputs.endBlockHash.toString()} !== ${endBlockHash}`);
|
|
304
|
+
}
|
|
305
|
+
// Compare the public inputs computed by the contract with the ones injected
|
|
306
|
+
const rollupPublicInputs = await this.rollupContract.read.getEpochProofPublicInputs(this.getSubmitEpochProofArgs(args));
|
|
307
|
+
const aggregationObject = proof.isEmpty()
|
|
308
|
+
? times(AGGREGATION_OBJECT_LENGTH, Fr.zero)
|
|
309
|
+
: proof.extractAggregationObject();
|
|
310
|
+
const argsPublicInputs = [...publicInputs.toFields(), ...aggregationObject];
|
|
311
|
+
if (!areArraysEqual(rollupPublicInputs.map(Fr.fromString), argsPublicInputs, (a, b) => a.equals(b))) {
|
|
312
|
+
const fmt = (inputs) => inputs.map(x => x.toString()).join(', ');
|
|
313
|
+
throw new Error(`Root rollup public inputs mismatch:\nRollup: ${fmt(rollupPublicInputs)}\nComputed:${fmt(argsPublicInputs)}`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
220
316
|
/**
|
|
221
317
|
* Calling `interrupt` will cause any in progress call to `publishRollup` to return `false` asap.
|
|
222
318
|
* Be warned, the call may return false even if the tx subsequently gets successfully mined.
|
|
@@ -231,70 +327,101 @@ export class L1Publisher {
|
|
|
231
327
|
restart() {
|
|
232
328
|
this.interrupted = false;
|
|
233
329
|
}
|
|
234
|
-
async
|
|
330
|
+
async sendSubmitEpochProofTx(args) {
|
|
235
331
|
try {
|
|
236
|
-
const
|
|
237
|
-
this.
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
332
|
+
const proofHex = `0x${args.proof.withoutPublicInputs().toString('hex')}`;
|
|
333
|
+
const txArgs = [...this.getSubmitEpochProofArgs(args), proofHex];
|
|
334
|
+
this.log.info(`SubmitEpochProof proofSize=${args.proof.withoutPublicInputs().length} bytes`);
|
|
335
|
+
await this.rollupContract.simulate.submitEpochRootProof(txArgs, { account: this.account });
|
|
336
|
+
return await this.rollupContract.write.submitEpochRootProof(txArgs, { account: this.account });
|
|
337
|
+
}
|
|
338
|
+
catch (err) {
|
|
339
|
+
this.log.error(`Rollup submit epoch proof failed`, err);
|
|
340
|
+
return undefined;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
async prepareProposeTx(encodedData, gasGuess) {
|
|
344
|
+
// We have to jump a few hoops because viem is not happy around estimating gas for view functions
|
|
345
|
+
const computeTxsEffectsHashGas = await this.publicClient.estimateGas({
|
|
346
|
+
to: this.rollupContract.address,
|
|
347
|
+
data: encodeFunctionData({
|
|
348
|
+
abi: this.rollupContract.abi,
|
|
349
|
+
functionName: 'computeTxsEffectsHash',
|
|
350
|
+
args: [`0x${encodedData.body.toString('hex')}`],
|
|
351
|
+
}),
|
|
352
|
+
});
|
|
353
|
+
// @note We perform this guesstimate instead of the usual `gasEstimate` since
|
|
354
|
+
// viem will use the current state to simulate against, which means that
|
|
355
|
+
// we will fail estimation in the case where we are simulating for the
|
|
356
|
+
// first ethereum block within our slot (as current time is not in the
|
|
357
|
+
// slot yet).
|
|
358
|
+
const gasGuesstimate = computeTxsEffectsHashGas + gasGuess;
|
|
359
|
+
const attestations = encodedData.attestations
|
|
360
|
+
? encodedData.attestations.map(attest => attest.toViemSignature())
|
|
361
|
+
: [];
|
|
362
|
+
const txHashes = encodedData.txHashes ? encodedData.txHashes.map(txHash => txHash.to0xString()) : [];
|
|
363
|
+
const args = [
|
|
364
|
+
`0x${encodedData.header.toString('hex')}`,
|
|
365
|
+
`0x${encodedData.archive.toString('hex')}`,
|
|
366
|
+
`0x${encodedData.blockHash.toString('hex')}`,
|
|
367
|
+
txHashes,
|
|
368
|
+
attestations,
|
|
369
|
+
`0x${encodedData.body.toString('hex')}`,
|
|
370
|
+
];
|
|
371
|
+
return { args, gasGuesstimate };
|
|
372
|
+
}
|
|
373
|
+
getSubmitEpochProofArgs(args) {
|
|
374
|
+
return [
|
|
375
|
+
BigInt(args.toBlock - args.fromBlock + 1),
|
|
376
|
+
[
|
|
377
|
+
args.publicInputs.previousArchive.root.toString(),
|
|
378
|
+
args.publicInputs.endArchive.root.toString(),
|
|
379
|
+
args.publicInputs.previousBlockHash.toString(),
|
|
380
|
+
args.publicInputs.endBlockHash.toString(),
|
|
381
|
+
args.publicInputs.endTimestamp.toString(),
|
|
382
|
+
args.publicInputs.outHash.toString(),
|
|
383
|
+
args.publicInputs.proverId.toString(),
|
|
384
|
+
],
|
|
385
|
+
makeTuple(64, i => i % 2 === 0
|
|
386
|
+
? args.publicInputs.fees[i / 2].recipient.toField().toString()
|
|
387
|
+
: args.publicInputs.fees[(i - 1) / 2].value.toString()),
|
|
388
|
+
`0x${serializeToBuffer(args.proof.extractAggregationObject()).toString('hex')}`,
|
|
389
|
+
];
|
|
390
|
+
}
|
|
391
|
+
async sendProposeTx(encodedData) {
|
|
392
|
+
if (this.interrupted) {
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
try {
|
|
396
|
+
const { args, gasGuesstimate } = await this.prepareProposeTx(encodedData, L1Publisher.PROPOSE_GAS_GUESS);
|
|
397
|
+
return await this.rollupContract.write.propose(args, {
|
|
250
398
|
account: this.account,
|
|
399
|
+
gas: gasGuesstimate,
|
|
251
400
|
});
|
|
252
401
|
}
|
|
253
402
|
catch (err) {
|
|
254
|
-
this.log
|
|
403
|
+
prettyLogViemError(err, this.log);
|
|
404
|
+
this.log.error(`Rollup publish failed`, err);
|
|
255
405
|
return undefined;
|
|
256
406
|
}
|
|
257
407
|
}
|
|
258
|
-
async
|
|
259
|
-
if (
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
const gasGuesstimate = computeTxsEffectsHashGas + L1Publisher.PROPOSE_GAS_GUESS;
|
|
276
|
-
const attestations = encodedData.attestations
|
|
277
|
-
? encodedData.attestations.map(attest => attest.toViemSignature())
|
|
278
|
-
: [];
|
|
279
|
-
const txHashes = encodedData.txHashes ? encodedData.txHashes.map(txHash => txHash.to0xString()) : [];
|
|
280
|
-
const args = [
|
|
281
|
-
`0x${encodedData.header.toString('hex')}`,
|
|
282
|
-
`0x${encodedData.archive.toString('hex')}`,
|
|
283
|
-
`0x${encodedData.blockHash.toString('hex')}`,
|
|
284
|
-
txHashes,
|
|
285
|
-
attestations,
|
|
286
|
-
`0x${encodedData.body.toString('hex')}`,
|
|
287
|
-
];
|
|
288
|
-
return await this.rollupContract.write.propose(args, {
|
|
289
|
-
account: this.account,
|
|
290
|
-
gas: gasGuesstimate,
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
catch (err) {
|
|
294
|
-
prettyLogVeimError(err, this.log);
|
|
295
|
-
this.log.error(`Rollup publish failed`, err);
|
|
296
|
-
return undefined;
|
|
297
|
-
}
|
|
408
|
+
async sendProposeAndClaimTx(encodedData, quote) {
|
|
409
|
+
if (this.interrupted) {
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
try {
|
|
413
|
+
const { args, gasGuesstimate } = await this.prepareProposeTx(encodedData, L1Publisher.PROPOSE_AND_CLAIM_GAS_GUESS);
|
|
414
|
+
this.log.info(`ProposeAndClaim`);
|
|
415
|
+
this.log.info(inspect(quote.payload));
|
|
416
|
+
return await this.rollupContract.write.proposeAndClaim([...args, quote.toViemArgs()], {
|
|
417
|
+
account: this.account,
|
|
418
|
+
gas: gasGuesstimate,
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
catch (err) {
|
|
422
|
+
prettyLogViemError(err, this.log);
|
|
423
|
+
this.log.error(`Rollup publish failed`, err);
|
|
424
|
+
return undefined;
|
|
298
425
|
}
|
|
299
426
|
}
|
|
300
427
|
/**
|
|
@@ -334,6 +461,7 @@ export class L1Publisher {
|
|
|
334
461
|
}
|
|
335
462
|
}
|
|
336
463
|
L1Publisher.PROPOSE_GAS_GUESS = 500000n;
|
|
464
|
+
L1Publisher.PROPOSE_AND_CLAIM_GAS_GUESS = 600000n;
|
|
337
465
|
/**
|
|
338
466
|
* Returns cost of calldata usage in Ethereum.
|
|
339
467
|
* @param data - Calldata.
|
|
@@ -342,4 +470,19 @@ L1Publisher.PROPOSE_GAS_GUESS = 500000n;
|
|
|
342
470
|
function getCalldataGasUsage(data) {
|
|
343
471
|
return data.filter(byte => byte === 0).length * 4 + data.filter(byte => byte !== 0).length * 16;
|
|
344
472
|
}
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEtcHVibGlzaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9sMS1wdWJsaXNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBMkIsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2hELE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUMvQixPQUFPLEVBQ0wsNkJBQTZCLEVBTzdCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLElBQUksR0FDTCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUlwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE0RGhEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLE9BQU8sV0FBVztJQWdCdEIsWUFBWSxNQUF3QyxFQUFFLE1BQXVCO1FBZnJFLHVCQUFrQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUU5QyxnQkFBVyxHQUFH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
|
|
473
|
+
function tryGetCustomErrorName(err) {
|
|
474
|
+
try {
|
|
475
|
+
// See https://viem.sh/docs/contract/simulateContract#handling-custom-errors
|
|
476
|
+
if (err.name === 'ViemError') {
|
|
477
|
+
const baseError = err;
|
|
478
|
+
const revertError = baseError.walk(err => err.name === 'ContractFunctionRevertedError');
|
|
479
|
+
if (revertError) {
|
|
480
|
+
return revertError.data?.errorName;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
catch (_e) {
|
|
485
|
+
return undefined;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEtcHVibGlzaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B1Ymxpc2hlci9sMS1wdWJsaXNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUtoQix5QkFBeUIsR0FDMUIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixVQUFVLEdBS1gsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdoRCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBSUwsNkJBQTZCLEVBVzdCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLFVBQVUsRUFDVixJQUFJLEVBQ0osYUFBYSxHQUNkLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLG1CQUFtQixFQUFF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
|
package/dest/publisher/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseError, ContractFunctionRevertedError } from 'viem';
|
|
2
|
-
export function
|
|
2
|
+
export function prettyLogViemError(err, logger) {
|
|
3
3
|
if (err instanceof BaseError) {
|
|
4
4
|
const revertError = err.walk(err => err instanceof ContractFunctionRevertedError);
|
|
5
5
|
if (revertError instanceof ContractFunctionRevertedError) {
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { type L1ToL2MessageSource, type L2Block, type L2BlockSource, type ProcessedTx,
|
|
3
|
-
import {
|
|
2
|
+
import { type EpochProofQuote, type L1ToL2MessageSource, type L2Block, type L2BlockSource, type ProcessedTx, Tx, type TxHash, type TxValidator, type WorldStateSynchronizer } from '@aztec/circuit-types';
|
|
3
|
+
import { Header } from '@aztec/circuits.js';
|
|
4
|
+
import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
5
|
+
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
+
import { Signature } from '@aztec/foundation/eth-signature';
|
|
4
7
|
import { type P2P } from '@aztec/p2p';
|
|
5
8
|
import { type PublicProcessorFactory } from '@aztec/simulator';
|
|
6
9
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
@@ -107,11 +110,12 @@ export declare class Sequencer {
|
|
|
107
110
|
/** Forces the sequencer to bypass all time and tx count checks for the next block and build anyway. */
|
|
108
111
|
flush(): void;
|
|
109
112
|
protected collectAttestations(block: L2Block, txHashes: TxHash[]): Promise<Signature[] | undefined>;
|
|
113
|
+
protected createProofClaimForPreviousEpoch(slotNumber: bigint): Promise<EpochProofQuote | undefined>;
|
|
110
114
|
/**
|
|
111
115
|
* Publishes the L2Block to the rollup contract.
|
|
112
116
|
* @param block - The L2Block to be published.
|
|
113
117
|
*/
|
|
114
|
-
protected publishL2Block(block: L2Block, attestations?: Signature[], txHashes?: TxHash[]): Promise<void>;
|
|
118
|
+
protected publishL2Block(block: L2Block, attestations?: Signature[], txHashes?: TxHash[], proofQuote?: EpochProofQuote): Promise<void>;
|
|
115
119
|
protected takeValidTxs<T extends Tx | ProcessedTx>(txs: T[], validator: TxValidator<T>): Promise<T[]>;
|
|
116
120
|
protected takeTxsWithinMaxSize(txs: Tx[]): Tx[];
|
|
117
121
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|