@aztec/sequencer-client 0.0.0-test.0 → 0.0.1-commit.03f7ef2
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/client/index.d.ts +1 -1
- package/dest/client/sequencer-client.d.ts +30 -29
- package/dest/client/sequencer-client.d.ts.map +1 -1
- package/dest/client/sequencer-client.js +82 -60
- package/dest/config.d.ts +15 -16
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +113 -70
- package/dest/global_variable_builder/global_builder.d.ts +25 -14
- package/dest/global_variable_builder/global_builder.d.ts.map +1 -1
- package/dest/global_variable_builder/global_builder.js +60 -42
- package/dest/global_variable_builder/index.d.ts +1 -1
- package/dest/index.d.ts +2 -3
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +1 -2
- package/dest/publisher/config.d.ts +15 -12
- package/dest/publisher/config.d.ts.map +1 -1
- package/dest/publisher/config.js +32 -19
- package/dest/publisher/index.d.ts +3 -1
- package/dest/publisher/index.d.ts.map +1 -1
- package/dest/publisher/index.js +3 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts +44 -0
- package/dest/publisher/sequencer-publisher-factory.d.ts.map +1 -0
- package/dest/publisher/sequencer-publisher-factory.js +51 -0
- package/dest/publisher/sequencer-publisher-metrics.d.ts +5 -4
- package/dest/publisher/sequencer-publisher-metrics.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher-metrics.js +37 -2
- package/dest/publisher/sequencer-publisher.d.ts +132 -86
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +755 -248
- package/dest/sequencer/block_builder.d.ts +26 -0
- package/dest/sequencer/block_builder.d.ts.map +1 -0
- package/dest/sequencer/block_builder.js +129 -0
- package/dest/sequencer/checkpoint_builder.d.ts +63 -0
- package/dest/sequencer/checkpoint_builder.d.ts.map +1 -0
- package/dest/sequencer/checkpoint_builder.js +131 -0
- package/dest/sequencer/checkpoint_proposal_job.d.ts +74 -0
- package/dest/sequencer/checkpoint_proposal_job.d.ts.map +1 -0
- package/dest/sequencer/checkpoint_proposal_job.js +640 -0
- package/dest/sequencer/checkpoint_voter.d.ts +34 -0
- package/dest/sequencer/checkpoint_voter.d.ts.map +1 -0
- package/dest/sequencer/checkpoint_voter.js +85 -0
- package/dest/sequencer/config.d.ts +7 -1
- package/dest/sequencer/config.d.ts.map +1 -1
- package/dest/sequencer/errors.d.ts +11 -0
- package/dest/sequencer/errors.d.ts.map +1 -0
- package/dest/sequencer/errors.js +15 -0
- package/dest/sequencer/events.d.ts +46 -0
- package/dest/sequencer/events.d.ts.map +1 -0
- package/dest/sequencer/events.js +1 -0
- package/dest/sequencer/index.d.ts +6 -2
- package/dest/sequencer/index.d.ts.map +1 -1
- package/dest/sequencer/index.js +5 -1
- package/dest/sequencer/metrics.d.ts +48 -12
- package/dest/sequencer/metrics.d.ts.map +1 -1
- package/dest/sequencer/metrics.js +274 -48
- package/dest/sequencer/sequencer.d.ts +132 -135
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +519 -521
- package/dest/sequencer/timetable.d.ts +76 -24
- package/dest/sequencer/timetable.d.ts.map +1 -1
- package/dest/sequencer/timetable.js +177 -61
- package/dest/sequencer/types.d.ts +3 -0
- package/dest/sequencer/types.d.ts.map +1 -0
- package/dest/sequencer/types.js +1 -0
- package/dest/sequencer/utils.d.ts +20 -38
- package/dest/sequencer/utils.d.ts.map +1 -1
- package/dest/sequencer/utils.js +12 -47
- package/dest/test/index.d.ts +10 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +0 -4
- package/dest/test/mock_checkpoint_builder.d.ts +83 -0
- package/dest/test/mock_checkpoint_builder.d.ts.map +1 -0
- package/dest/test/mock_checkpoint_builder.js +179 -0
- package/dest/test/utils.d.ts +49 -0
- package/dest/test/utils.d.ts.map +1 -0
- package/dest/test/utils.js +94 -0
- package/dest/tx_validator/nullifier_cache.d.ts +1 -3
- package/dest/tx_validator/nullifier_cache.d.ts.map +1 -1
- package/dest/tx_validator/tx_validator_factory.d.ts +11 -11
- package/dest/tx_validator/tx_validator_factory.d.ts.map +1 -1
- package/dest/tx_validator/tx_validator_factory.js +28 -25
- package/package.json +45 -45
- package/src/client/sequencer-client.ts +105 -105
- package/src/config.ts +126 -81
- package/src/global_variable_builder/global_builder.ts +82 -53
- package/src/index.ts +8 -2
- package/src/publisher/config.ts +45 -32
- package/src/publisher/index.ts +4 -0
- package/src/publisher/sequencer-publisher-factory.ts +92 -0
- package/src/publisher/sequencer-publisher-metrics.ts +26 -4
- package/src/publisher/sequencer-publisher.ts +955 -293
- package/src/sequencer/README.md +531 -0
- package/src/sequencer/block_builder.ts +217 -0
- package/src/sequencer/checkpoint_builder.ts +217 -0
- package/src/sequencer/checkpoint_proposal_job.ts +703 -0
- package/src/sequencer/checkpoint_voter.ts +105 -0
- package/src/sequencer/config.ts +8 -0
- package/src/sequencer/errors.ts +21 -0
- package/src/sequencer/events.ts +27 -0
- package/src/sequencer/index.ts +5 -1
- package/src/sequencer/metrics.ts +355 -50
- package/src/sequencer/sequencer.ts +631 -594
- package/src/sequencer/timetable.ts +221 -62
- package/src/sequencer/types.ts +6 -0
- package/src/sequencer/utils.ts +28 -60
- package/src/test/index.ts +13 -4
- package/src/test/mock_checkpoint_builder.ts +247 -0
- package/src/test/utils.ts +137 -0
- package/src/tx_validator/tx_validator_factory.ts +46 -33
- package/dest/sequencer/allowed.d.ts +0 -3
- package/dest/sequencer/allowed.d.ts.map +0 -1
- package/dest/sequencer/allowed.js +0 -27
- package/dest/slasher/factory.d.ts +0 -7
- package/dest/slasher/factory.d.ts.map +0 -1
- package/dest/slasher/factory.js +0 -8
- package/dest/slasher/index.d.ts +0 -3
- package/dest/slasher/index.d.ts.map +0 -1
- package/dest/slasher/index.js +0 -2
- package/dest/slasher/slasher_client.d.ts +0 -75
- package/dest/slasher/slasher_client.d.ts.map +0 -1
- package/dest/slasher/slasher_client.js +0 -132
- package/dest/tx_validator/archive_cache.d.ts +0 -14
- package/dest/tx_validator/archive_cache.d.ts.map +0 -1
- package/dest/tx_validator/archive_cache.js +0 -22
- package/dest/tx_validator/gas_validator.d.ts +0 -14
- package/dest/tx_validator/gas_validator.d.ts.map +0 -1
- package/dest/tx_validator/gas_validator.js +0 -78
- package/dest/tx_validator/phases_validator.d.ts +0 -12
- package/dest/tx_validator/phases_validator.d.ts.map +0 -1
- package/dest/tx_validator/phases_validator.js +0 -80
- package/dest/tx_validator/test_utils.d.ts +0 -23
- package/dest/tx_validator/test_utils.d.ts.map +0 -1
- package/dest/tx_validator/test_utils.js +0 -26
- package/src/sequencer/allowed.ts +0 -36
- package/src/slasher/factory.ts +0 -15
- package/src/slasher/index.ts +0 -2
- package/src/slasher/slasher_client.ts +0 -193
- package/src/tx_validator/archive_cache.ts +0 -28
- package/src/tx_validator/gas_validator.ts +0 -101
- package/src/tx_validator/phases_validator.ts +0 -98
- package/src/tx_validator/test_utils.ts +0 -48
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { EthAddress } from '@aztec/aztec.js/addresses';
|
|
2
|
+
import { type Logger, createLogger } from '@aztec/aztec.js/log';
|
|
3
|
+
import type { BlobClientInterface } from '@aztec/blob-client/client';
|
|
4
|
+
import type { EpochCache } from '@aztec/epoch-cache';
|
|
5
|
+
import type { GovernanceProposerContract, RollupContract } from '@aztec/ethereum/contracts';
|
|
6
|
+
import type { L1TxUtilsWithBlobs } from '@aztec/ethereum/l1-tx-utils-with-blobs';
|
|
7
|
+
import type { PublisherFilter, PublisherManager } from '@aztec/ethereum/publisher-manager';
|
|
8
|
+
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
9
|
+
import type { DateProvider } from '@aztec/foundation/timer';
|
|
10
|
+
import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
|
|
11
|
+
import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
12
|
+
import { NodeKeystoreAdapter } from '@aztec/validator-client';
|
|
13
|
+
|
|
14
|
+
import type { SequencerClientConfig } from '../config.js';
|
|
15
|
+
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
16
|
+
import { type Action, SequencerPublisher } from './sequencer-publisher.js';
|
|
17
|
+
|
|
18
|
+
export type AttestorPublisherPair = {
|
|
19
|
+
attestorAddress: EthAddress;
|
|
20
|
+
publisher: SequencerPublisher;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export class SequencerPublisherFactory {
|
|
24
|
+
private publisherMetrics: SequencerPublisherMetrics;
|
|
25
|
+
|
|
26
|
+
/** Stores the last slot in which every action was carried out by a publisher */
|
|
27
|
+
private lastActions: Partial<Record<Action, SlotNumber>> = {};
|
|
28
|
+
|
|
29
|
+
private logger: Logger;
|
|
30
|
+
|
|
31
|
+
constructor(
|
|
32
|
+
private sequencerConfig: SequencerClientConfig,
|
|
33
|
+
private deps: {
|
|
34
|
+
telemetry: TelemetryClient;
|
|
35
|
+
publisherManager: PublisherManager<L1TxUtilsWithBlobs>;
|
|
36
|
+
blobClient?: BlobClientInterface;
|
|
37
|
+
dateProvider: DateProvider;
|
|
38
|
+
epochCache: EpochCache;
|
|
39
|
+
rollupContract: RollupContract;
|
|
40
|
+
governanceProposerContract: GovernanceProposerContract;
|
|
41
|
+
slashFactoryContract: SlashFactoryContract;
|
|
42
|
+
nodeKeyStore: NodeKeystoreAdapter;
|
|
43
|
+
logger?: Logger;
|
|
44
|
+
},
|
|
45
|
+
) {
|
|
46
|
+
this.publisherMetrics = new SequencerPublisherMetrics(deps.telemetry, 'SequencerPublisher');
|
|
47
|
+
this.logger = deps.logger ?? createLogger('sequencer');
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a new SequencerPublisher instance.
|
|
51
|
+
* @param _validatorAddress - The address of the validator that will be using the publisher.
|
|
52
|
+
* @returns A new SequencerPublisher instance.
|
|
53
|
+
*/
|
|
54
|
+
public async create(validatorAddress?: EthAddress): Promise<AttestorPublisherPair> {
|
|
55
|
+
// If we have been given an attestor address we must only allow publishers permitted for that attestor
|
|
56
|
+
|
|
57
|
+
const allowedPublishers = !validatorAddress ? [] : this.deps.nodeKeyStore.getPublisherAddresses(validatorAddress);
|
|
58
|
+
const filter: PublisherFilter<L1TxUtilsWithBlobs> = !validatorAddress
|
|
59
|
+
? () => true
|
|
60
|
+
: (utils: L1TxUtilsWithBlobs) => {
|
|
61
|
+
const publisherAddress = utils.getSenderAddress();
|
|
62
|
+
return allowedPublishers.some(allowedPublisher => allowedPublisher.equals(publisherAddress));
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const l1Publisher = await this.deps.publisherManager.getAvailablePublisher(filter);
|
|
66
|
+
const attestorAddress =
|
|
67
|
+
validatorAddress ?? this.deps.nodeKeyStore.getAttestorForPublisher(l1Publisher.getSenderAddress());
|
|
68
|
+
|
|
69
|
+
const rollup = this.deps.rollupContract;
|
|
70
|
+
const slashingProposerContract = await rollup.getSlashingProposer();
|
|
71
|
+
|
|
72
|
+
const publisher = new SequencerPublisher(this.sequencerConfig, {
|
|
73
|
+
l1TxUtils: l1Publisher,
|
|
74
|
+
telemetry: this.deps.telemetry,
|
|
75
|
+
blobClient: this.deps.blobClient,
|
|
76
|
+
rollupContract: this.deps.rollupContract,
|
|
77
|
+
epochCache: this.deps.epochCache,
|
|
78
|
+
governanceProposerContract: this.deps.governanceProposerContract,
|
|
79
|
+
slashingProposerContract,
|
|
80
|
+
slashFactoryContract: this.deps.slashFactoryContract,
|
|
81
|
+
dateProvider: this.deps.dateProvider,
|
|
82
|
+
metrics: this.publisherMetrics,
|
|
83
|
+
lastActions: this.lastActions,
|
|
84
|
+
log: this.logger.createChild('publisher'),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
attestorAddress,
|
|
89
|
+
publisher,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createLogger } from '@aztec/aztec.js';
|
|
2
|
-
import type {
|
|
1
|
+
import { createLogger } from '@aztec/aztec.js/log';
|
|
2
|
+
import type { L1PublishCheckpointStats, L1PublishStats } from '@aztec/stdlib/stats';
|
|
3
3
|
import {
|
|
4
4
|
Attributes,
|
|
5
5
|
type Gauge,
|
|
@@ -24,6 +24,7 @@ export class SequencerPublisherMetrics {
|
|
|
24
24
|
private txCalldataGas: Histogram;
|
|
25
25
|
private txBlobDataGasUsed: Histogram;
|
|
26
26
|
private txBlobDataGasCost: Histogram;
|
|
27
|
+
private txTotalFee: Histogram;
|
|
27
28
|
|
|
28
29
|
private readonly blobCountHistogram: Histogram;
|
|
29
30
|
private readonly blobInclusionBlocksHistogram: Histogram;
|
|
@@ -105,6 +106,17 @@ export class SequencerPublisherMetrics {
|
|
|
105
106
|
description: 'Number of failed L1 transactions with blobs',
|
|
106
107
|
});
|
|
107
108
|
|
|
109
|
+
this.txTotalFee = meter.createHistogram(Metrics.L1_PUBLISHER_TX_TOTAL_FEE, {
|
|
110
|
+
description: 'How much L1 tx costs',
|
|
111
|
+
unit: 'eth',
|
|
112
|
+
valueType: ValueType.DOUBLE,
|
|
113
|
+
advice: {
|
|
114
|
+
explicitBucketBoundaries: [
|
|
115
|
+
0.001, 0.002, 0.004, 0.008, 0.01, 0.02, 0.04, 0.08, 0.1, 0.2, 0.4, 0.8, 1, 1.2, 1.4, 1.8, 2,
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
|
|
108
120
|
this.senderBalance = meter.createGauge(Metrics.L1_PUBLISHER_BALANCE, {
|
|
109
121
|
unit: 'eth',
|
|
110
122
|
description: 'The balance of the sender address',
|
|
@@ -123,7 +135,7 @@ export class SequencerPublisherMetrics {
|
|
|
123
135
|
}
|
|
124
136
|
}
|
|
125
137
|
|
|
126
|
-
recordProcessBlockTx(durationMs: number, stats:
|
|
138
|
+
recordProcessBlockTx(durationMs: number, stats: L1PublishCheckpointStats) {
|
|
127
139
|
this.recordTx('process', durationMs, stats);
|
|
128
140
|
|
|
129
141
|
if (stats.blobCount && stats.blobCount > 0) {
|
|
@@ -169,7 +181,17 @@ export class SequencerPublisherMetrics {
|
|
|
169
181
|
|
|
170
182
|
try {
|
|
171
183
|
this.gasPrice.record(parseInt(formatEther(stats.gasPrice, 'gwei'), 10));
|
|
172
|
-
} catch
|
|
184
|
+
} catch {
|
|
185
|
+
// ignore
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const executionFee = stats.gasUsed * stats.gasPrice;
|
|
189
|
+
const blobFee = stats.blobGasUsed * stats.blobDataGas;
|
|
190
|
+
const totalFee = executionFee + blobFee;
|
|
191
|
+
|
|
192
|
+
try {
|
|
193
|
+
this.txTotalFee.record(parseFloat(formatEther(totalFee)));
|
|
194
|
+
} catch {
|
|
173
195
|
// ignore
|
|
174
196
|
}
|
|
175
197
|
}
|