@aztec/sequencer-client 1.0.0-nightly.20250721 → 1.0.0-nightly.20250722
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/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/sequencer-publisher.d.ts +11 -11
- package/dest/publisher/sequencer-publisher.d.ts.map +1 -1
- package/dest/publisher/sequencer-publisher.js +30 -30
- package/dest/sequencer/sequencer.d.ts.map +1 -1
- package/dest/sequencer/sequencer.js +3 -3
- package/package.json +26 -26
- package/src/publisher/index.ts +1 -1
- package/src/publisher/sequencer-publisher.ts +32 -32
- package/src/sequencer/sequencer.ts +5 -5
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { SequencerPublisher,
|
|
1
|
+
export { SequencerPublisher, SignalType } from './sequencer-publisher.js';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dest/publisher/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { SequencerPublisher,
|
|
1
|
+
export { SequencerPublisher, SignalType } from './sequencer-publisher.js';
|
|
@@ -11,12 +11,12 @@ import { type ProposedBlockHeader, TxHash } from '@aztec/stdlib/tx';
|
|
|
11
11
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
12
12
|
import { type TransactionReceipt } from 'viem';
|
|
13
13
|
import type { PublisherConfig, TxSenderConfig } from './config.js';
|
|
14
|
-
export declare enum
|
|
14
|
+
export declare enum SignalType {
|
|
15
15
|
GOVERNANCE = 0,
|
|
16
16
|
SLASHING = 1
|
|
17
17
|
}
|
|
18
18
|
type GetSlashPayloadCallBack = (slotNumber: bigint) => Promise<EthAddress | undefined>;
|
|
19
|
-
export type Action = 'propose' | 'governance-
|
|
19
|
+
export type Action = 'propose' | 'governance-signal' | 'slashing-signal';
|
|
20
20
|
interface RequestWithExpiry {
|
|
21
21
|
action: Action;
|
|
22
22
|
request: L1TxRequest;
|
|
@@ -42,7 +42,7 @@ export declare class SequencerPublisher {
|
|
|
42
42
|
protected slashingLog: import("@aztec/foundation/log").Logger;
|
|
43
43
|
protected slashingProposerAddress?: EthAddress;
|
|
44
44
|
private getSlashPayload?;
|
|
45
|
-
private
|
|
45
|
+
private myLastSignals;
|
|
46
46
|
protected log: import("@aztec/foundation/log").Logger;
|
|
47
47
|
protected ethereumSlotDuration: bigint;
|
|
48
48
|
private blobSinkClient;
|
|
@@ -126,16 +126,16 @@ export declare class SequencerPublisher {
|
|
|
126
126
|
digest: Buffer;
|
|
127
127
|
attestations: CommitteeAttestation[];
|
|
128
128
|
}): Promise<bigint>;
|
|
129
|
-
private
|
|
130
|
-
private
|
|
129
|
+
private enqueueCastSignalHelper;
|
|
130
|
+
private getSignalConfig;
|
|
131
131
|
/**
|
|
132
|
-
* Enqueues a
|
|
133
|
-
* @param slotNumber - The slot number to cast a
|
|
134
|
-
* @param timestamp - The timestamp of the slot to cast a
|
|
135
|
-
* @param
|
|
136
|
-
* @returns True if the
|
|
132
|
+
* Enqueues a castSignal transaction to cast a signal for a given slot number.
|
|
133
|
+
* @param slotNumber - The slot number to cast a signal for.
|
|
134
|
+
* @param timestamp - The timestamp of the slot to cast a signal for.
|
|
135
|
+
* @param signalType - The type of signal to cast.
|
|
136
|
+
* @returns True if the signal was successfully enqueued, false otherwise.
|
|
137
137
|
*/
|
|
138
|
-
|
|
138
|
+
enqueueCastSignal(slotNumber: bigint, timestamp: bigint, signalType: SignalType, signerAddress: EthAddress, signer: (msg: `0x${string}`) => Promise<`0x${string}`>): Promise<boolean>;
|
|
139
139
|
/**
|
|
140
140
|
* Proposes a L2 block on L1.
|
|
141
141
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,0BAA0B,EAE/B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAGhB,cAAc,EACd,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EAKtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAGjF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,KAAK,mBAAmB,EAAkB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EAAE,KAAK,kBAAkB,EAA0D,MAAM,MAAM,CAAC;AAEvG,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAmBnE,oBAAY,
|
|
1
|
+
{"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,0BAA0B,EAE/B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,WAAW,EAGhB,cAAc,EACd,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EAKtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAGjF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EAAE,KAAK,mBAAmB,EAAkB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,EAAE,KAAK,kBAAkB,EAA0D,MAAM,MAAM,CAAC;AAEvG,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAmBnE,oBAAY,UAAU;IACpB,UAAU,IAAA;IACV,QAAQ,IAAA;CACT;AAED,KAAK,uBAAuB,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;AAEvF,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAEzE,UAAU,iBAAiB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,UAAU,CAAC,CAAC;IAC1D,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,YAAY,EAAE,CACZ,OAAO,EAAE,WAAW,EACpB,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,kBAAkB,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KACtG,OAAO,CAAC;CACd;AAED,qBAAa,kBAAkB;IA0C3B,OAAO,CAAC,MAAM;IAzChB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAA4B;IACpC,UAAU,EAAE,UAAU,CAAC;IAC9B,OAAO,CAAC,YAAY,CAAe;IAEnC,SAAS,CAAC,aAAa,yCAAkD;IACzE,SAAS,CAAC,yBAAyB,CAAC,EAAE,UAAU,CAAC;IACjD,OAAO,CAAC,iBAAiB,CAA+B;IAExD,SAAS,CAAC,WAAW,yCAAgD;IACrE,SAAS,CAAC,uBAAuB,CAAC,EAAE,UAAU,CAAC;IAC/C,OAAO,CAAC,eAAe,CAAC,CAAsC;IAE9D,OAAO,CAAC,aAAa,CAGnB;IAEF,SAAS,CAAC,GAAG,yCAAuC;IACpD,SAAS,CAAC,oBAAoB,EAAE,MAAM,CAAC;IAEvC,OAAO,CAAC,cAAc,CAA0B;IAIhD,OAAc,iBAAiB,EAAE,MAAM,CAAe;IAGtD,OAAc,4BAA4B,SAAS;IAGnD,OAAc,cAAc,EAAE,MAAM,CAAY;IAEzC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,cAAc,EAAE,cAAc,CAAC;IAC/B,mBAAmB,EAAE,0BAA0B,CAAC;IAChD,wBAAwB,EAAE,wBAAwB,CAAC;IAE1D,SAAS,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAM;gBAGnC,MAAM,EAAE,cAAc,GAAG,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,EAClG,IAAI,EAAE;QACJ,SAAS,CAAC,EAAE,eAAe,CAAC;QAC5B,cAAc,CAAC,EAAE,uBAAuB,CAAC;QACzC,SAAS,EAAE,kBAAkB,CAAC;QAC9B,cAAc,EAAE,cAAc,CAAC;QAC/B,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,0BAA0B,EAAE,0BAA0B,CAAC;QACvD,UAAU,EAAE,UAAU,CAAC;QACvB,YAAY,EAAE,YAAY,CAAC;KAC5B;IAmBI,iBAAiB,IAAI,cAAc;IAInC,0BAA0B,CAAC,QAAQ,EAAE,uBAAuB;IAI5D,gBAAgB;IAIhB,oBAAoB;IAIpB,oBAAoB,CAAC,OAAO,EAAE,UAAU;IAIxC,UAAU,CAAC,OAAO,EAAE,iBAAiB;IAIrC,gBAAgB,IAAI,MAAM;IAIjC;;;;;;OAMG;IACU,YAAY;;;;;;;;;;;;;;;;;IA4EzB,OAAO,CAAC,2BAA2B;IAuBnC;;;;OAIG;IACI,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;;;;;IAiBzE;;;;;OAKG;IACU,mBAAmB,CAAC,MAAM,EAAE,mBAAmB;IAiC5D;;;;;;;;OAQG;IACU,0BAA0B,CACrC,KAAK,EAAE,OAAO,EACd,eAAe,GAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,oBAAoB,EAAE,CAAA;KAGtE,GACA,OAAO,CAAC,MAAM,CAAC;YAwCJ,uBAAuB;YAmFvB,eAAe;IAsB7B;;;;;;OAMG;IACU,iBAAiB,CAC5B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,UAAU,EACzB,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,GACrD,OAAO,CAAC,OAAO,CAAC;IASnB;;;;;OAKG;IACU,qBAAqB,CAChC,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,oBAAoB,EAAE,EACrC,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,IAAI,GAAE;QAAE,WAAW,CAAC,EAAE,IAAI,CAAA;KAAO,GAChC,OAAO,CAAC,OAAO,CAAC;IAyCnB;;;;;OAKG;IACI,SAAS;IAKhB,wDAAwD;IACjD,OAAO;YAKA,gBAAgB;IAoD9B;;;;;OAKG;YACW,iBAAiB;YA6DjB,YAAY;IA4E1B;;;;;;;OAOG;IACH,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAGlF"}
|
|
@@ -13,10 +13,10 @@ import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
|
13
13
|
import pick from 'lodash.pick';
|
|
14
14
|
import { encodeFunctionData, getAbiItem, toEventSelector, toHex } from 'viem';
|
|
15
15
|
import { SequencerPublisherMetrics } from './sequencer-publisher-metrics.js';
|
|
16
|
-
export var
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return
|
|
16
|
+
export var SignalType = /*#__PURE__*/ function(SignalType) {
|
|
17
|
+
SignalType[SignalType["GOVERNANCE"] = 0] = "GOVERNANCE";
|
|
18
|
+
SignalType[SignalType["SLASHING"] = 1] = "SLASHING";
|
|
19
|
+
return SignalType;
|
|
20
20
|
}({});
|
|
21
21
|
export class SequencerPublisher {
|
|
22
22
|
config;
|
|
@@ -30,7 +30,7 @@ export class SequencerPublisher {
|
|
|
30
30
|
slashingLog;
|
|
31
31
|
slashingProposerAddress;
|
|
32
32
|
getSlashPayload;
|
|
33
|
-
|
|
33
|
+
myLastSignals;
|
|
34
34
|
log;
|
|
35
35
|
ethereumSlotDuration;
|
|
36
36
|
blobSinkClient;
|
|
@@ -54,7 +54,7 @@ export class SequencerPublisher {
|
|
|
54
54
|
this.governancePayload = EthAddress.ZERO;
|
|
55
55
|
this.slashingLog = createLogger('sequencer:publisher:slashing');
|
|
56
56
|
this.getSlashPayload = undefined;
|
|
57
|
-
this.
|
|
57
|
+
this.myLastSignals = {
|
|
58
58
|
[0]: 0n,
|
|
59
59
|
[1]: 0n
|
|
60
60
|
};
|
|
@@ -301,8 +301,8 @@ export class SequencerPublisher {
|
|
|
301
301
|
await this.simulateProposeTx(args, ts);
|
|
302
302
|
return ts;
|
|
303
303
|
}
|
|
304
|
-
async
|
|
305
|
-
if (this.
|
|
304
|
+
async enqueueCastSignalHelper(slotNumber, timestamp, signalType, payload, base, signerAddress, signer) {
|
|
305
|
+
if (this.myLastSignals[signalType] >= slotNumber) {
|
|
306
306
|
return false;
|
|
307
307
|
}
|
|
308
308
|
if (payload.equals(EthAddress.ZERO)) {
|
|
@@ -310,13 +310,13 @@ export class SequencerPublisher {
|
|
|
310
310
|
}
|
|
311
311
|
const round = await base.computeRound(slotNumber);
|
|
312
312
|
const roundInfo = await base.getRoundInfo(this.rollupContract.address, round);
|
|
313
|
-
if (roundInfo.
|
|
313
|
+
if (roundInfo.lastSignalSlot >= slotNumber) {
|
|
314
314
|
return false;
|
|
315
315
|
}
|
|
316
|
-
const cachedLastVote = this.
|
|
317
|
-
this.
|
|
318
|
-
const action =
|
|
319
|
-
const request = await base.
|
|
316
|
+
const cachedLastVote = this.myLastSignals[signalType];
|
|
317
|
+
this.myLastSignals[signalType] = slotNumber;
|
|
318
|
+
const action = signalType === 0 ? 'governance-signal' : 'slashing-signal';
|
|
319
|
+
const request = await base.createSignalRequestWithSignature(payload.toString(), round, this.config.l1ChainId, signerAddress.toString(), signer);
|
|
320
320
|
this.log.debug(`Created ${action} request with signature`, {
|
|
321
321
|
request,
|
|
322
322
|
round,
|
|
@@ -344,7 +344,7 @@ export class SequencerPublisher {
|
|
|
344
344
|
checkSuccess: (_request, result)=>{
|
|
345
345
|
const success = result && result.receipt && result.receipt.status === 'success' && result.receipt.logs.find((log)=>log.topics[0] === toEventSelector(getAbiItem({
|
|
346
346
|
abi: EmpireBaseAbi,
|
|
347
|
-
name: '
|
|
347
|
+
name: 'SignalCast'
|
|
348
348
|
})));
|
|
349
349
|
const logData = {
|
|
350
350
|
...result,
|
|
@@ -354,7 +354,7 @@ export class SequencerPublisher {
|
|
|
354
354
|
};
|
|
355
355
|
if (!success) {
|
|
356
356
|
this.log.error(`Voting in [${action}] for ${payload} at slot ${slotNumber} in round ${round} failed`, logData);
|
|
357
|
-
this.
|
|
357
|
+
this.myLastSignals[signalType] = cachedLastVote;
|
|
358
358
|
return false;
|
|
359
359
|
} else {
|
|
360
360
|
this.log.info(`Voting in [${action}] for ${payload} at slot ${slotNumber} in round ${round} succeeded`, logData);
|
|
@@ -364,13 +364,13 @@ export class SequencerPublisher {
|
|
|
364
364
|
});
|
|
365
365
|
return true;
|
|
366
366
|
}
|
|
367
|
-
async
|
|
368
|
-
if (
|
|
367
|
+
async getSignalConfig(slotNumber, signalType) {
|
|
368
|
+
if (signalType === 0) {
|
|
369
369
|
return {
|
|
370
370
|
payload: this.governancePayload,
|
|
371
371
|
base: this.govProposerContract
|
|
372
372
|
};
|
|
373
|
-
} else if (
|
|
373
|
+
} else if (signalType === 1) {
|
|
374
374
|
if (!this.getSlashPayload) {
|
|
375
375
|
return undefined;
|
|
376
376
|
}
|
|
@@ -384,23 +384,23 @@ export class SequencerPublisher {
|
|
|
384
384
|
base: this.slashingProposerContract
|
|
385
385
|
};
|
|
386
386
|
} else {
|
|
387
|
-
const _ =
|
|
388
|
-
throw new Error('Unreachable: Invalid
|
|
387
|
+
const _ = signalType;
|
|
388
|
+
throw new Error('Unreachable: Invalid signal type');
|
|
389
389
|
}
|
|
390
390
|
}
|
|
391
391
|
/**
|
|
392
|
-
* Enqueues a
|
|
393
|
-
* @param slotNumber - The slot number to cast a
|
|
394
|
-
* @param timestamp - The timestamp of the slot to cast a
|
|
395
|
-
* @param
|
|
396
|
-
* @returns True if the
|
|
397
|
-
*/ async
|
|
398
|
-
const
|
|
399
|
-
if (!
|
|
392
|
+
* Enqueues a castSignal transaction to cast a signal for a given slot number.
|
|
393
|
+
* @param slotNumber - The slot number to cast a signal for.
|
|
394
|
+
* @param timestamp - The timestamp of the slot to cast a signal for.
|
|
395
|
+
* @param signalType - The type of signal to cast.
|
|
396
|
+
* @returns True if the signal was successfully enqueued, false otherwise.
|
|
397
|
+
*/ async enqueueCastSignal(slotNumber, timestamp, signalType, signerAddress, signer) {
|
|
398
|
+
const signalConfig = await this.getSignalConfig(slotNumber, signalType);
|
|
399
|
+
if (!signalConfig) {
|
|
400
400
|
return false;
|
|
401
401
|
}
|
|
402
|
-
const { payload, base } =
|
|
403
|
-
return this.
|
|
402
|
+
const { payload, base } = signalConfig;
|
|
403
|
+
return this.enqueueCastSignalHelper(slotNumber, timestamp, signalType, payload, base, signerAddress, signer);
|
|
404
404
|
}
|
|
405
405
|
/**
|
|
406
406
|
* Proposes a L2 block on L1.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAK/C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAG9C,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,KAAK,iBAAiB,EAAsB,MAAM,6BAA6B,CAAC;AAEzF,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAKnE,OAAO,EAKL,EAAE,EACF,KAAK,MAAM,EACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,MAAM,EAGZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAC1F,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ import { ContentCommitment, ProposedBlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
|
23
23
|
import { AttestationTimeoutError } from '@aztec/stdlib/validators';
|
|
24
24
|
import { Attributes, L1Metrics, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
|
|
25
25
|
import EventEmitter from 'node:events';
|
|
26
|
-
import {
|
|
26
|
+
import { SignalType } from '../publisher/sequencer-publisher.js';
|
|
27
27
|
import { SequencerMetrics } from './metrics.js';
|
|
28
28
|
import { SequencerTimetable, SequencerTooSlowError } from './timetable.js';
|
|
29
29
|
import { SequencerState, orderAttestations } from './utils.js';
|
|
@@ -295,8 +295,8 @@ export { SequencerState };
|
|
|
295
295
|
validatorAddresses
|
|
296
296
|
});
|
|
297
297
|
const newGlobalVariables = await this.globalsBuilder.buildGlobalVariables(newBlockNumber, this.coinbase, this._feeRecipient, slot);
|
|
298
|
-
const enqueueGovernanceVotePromise = this.publisher.
|
|
299
|
-
const enqueueSlashingVotePromise = this.publisher.
|
|
298
|
+
const enqueueGovernanceVotePromise = this.publisher.enqueueCastSignal(slot, newGlobalVariables.timestamp, SignalType.GOVERNANCE, proposerAddress, (msg)=>this.validatorClient.signWithAddress(proposerAddress, Buffer32.fromString(msg)).then((s)=>s.toString()));
|
|
299
|
+
const enqueueSlashingVotePromise = this.publisher.enqueueCastSignal(slot, newGlobalVariables.timestamp, SignalType.SLASHING, proposerAddress, (msg)=>this.validatorClient.signWithAddress(proposerAddress, Buffer32.fromString(msg)).then((s)=>s.toString()));
|
|
300
300
|
this.setState(SequencerState.INITIALIZING_PROPOSAL, slot);
|
|
301
301
|
this.log.verbose(`Preparing proposal for block ${newBlockNumber} at slot ${slot}`, {
|
|
302
302
|
proposer: proposerInNextSlot?.toString(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/sequencer-client",
|
|
3
|
-
"version": "1.0.0-nightly.
|
|
3
|
+
"version": "1.0.0-nightly.20250722",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -26,37 +26,37 @@
|
|
|
26
26
|
"test:integration:run": "NODE_NO_WARNINGS=1 node --experimental-vm-modules $(yarn bin jest) --no-cache --config jest.integration.config.json"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@aztec/aztec.js": "1.0.0-nightly.
|
|
30
|
-
"@aztec/bb-prover": "1.0.0-nightly.
|
|
31
|
-
"@aztec/blob-lib": "1.0.0-nightly.
|
|
32
|
-
"@aztec/blob-sink": "1.0.0-nightly.
|
|
33
|
-
"@aztec/constants": "1.0.0-nightly.
|
|
34
|
-
"@aztec/epoch-cache": "1.0.0-nightly.
|
|
35
|
-
"@aztec/ethereum": "1.0.0-nightly.
|
|
36
|
-
"@aztec/foundation": "1.0.0-nightly.
|
|
37
|
-
"@aztec/l1-artifacts": "1.0.0-nightly.
|
|
38
|
-
"@aztec/merkle-tree": "1.0.0-nightly.
|
|
39
|
-
"@aztec/noir-acvm_js": "1.0.0-nightly.
|
|
40
|
-
"@aztec/noir-contracts.js": "1.0.0-nightly.
|
|
41
|
-
"@aztec/noir-protocol-circuits-types": "1.0.0-nightly.
|
|
42
|
-
"@aztec/noir-types": "1.0.0-nightly.
|
|
43
|
-
"@aztec/p2p": "1.0.0-nightly.
|
|
44
|
-
"@aztec/protocol-contracts": "1.0.0-nightly.
|
|
45
|
-
"@aztec/prover-client": "1.0.0-nightly.
|
|
46
|
-
"@aztec/simulator": "1.0.0-nightly.
|
|
47
|
-
"@aztec/slasher": "1.0.0-nightly.
|
|
48
|
-
"@aztec/stdlib": "1.0.0-nightly.
|
|
49
|
-
"@aztec/telemetry-client": "1.0.0-nightly.
|
|
50
|
-
"@aztec/validator-client": "1.0.0-nightly.
|
|
51
|
-
"@aztec/world-state": "1.0.0-nightly.
|
|
29
|
+
"@aztec/aztec.js": "1.0.0-nightly.20250722",
|
|
30
|
+
"@aztec/bb-prover": "1.0.0-nightly.20250722",
|
|
31
|
+
"@aztec/blob-lib": "1.0.0-nightly.20250722",
|
|
32
|
+
"@aztec/blob-sink": "1.0.0-nightly.20250722",
|
|
33
|
+
"@aztec/constants": "1.0.0-nightly.20250722",
|
|
34
|
+
"@aztec/epoch-cache": "1.0.0-nightly.20250722",
|
|
35
|
+
"@aztec/ethereum": "1.0.0-nightly.20250722",
|
|
36
|
+
"@aztec/foundation": "1.0.0-nightly.20250722",
|
|
37
|
+
"@aztec/l1-artifacts": "1.0.0-nightly.20250722",
|
|
38
|
+
"@aztec/merkle-tree": "1.0.0-nightly.20250722",
|
|
39
|
+
"@aztec/noir-acvm_js": "1.0.0-nightly.20250722",
|
|
40
|
+
"@aztec/noir-contracts.js": "1.0.0-nightly.20250722",
|
|
41
|
+
"@aztec/noir-protocol-circuits-types": "1.0.0-nightly.20250722",
|
|
42
|
+
"@aztec/noir-types": "1.0.0-nightly.20250722",
|
|
43
|
+
"@aztec/p2p": "1.0.0-nightly.20250722",
|
|
44
|
+
"@aztec/protocol-contracts": "1.0.0-nightly.20250722",
|
|
45
|
+
"@aztec/prover-client": "1.0.0-nightly.20250722",
|
|
46
|
+
"@aztec/simulator": "1.0.0-nightly.20250722",
|
|
47
|
+
"@aztec/slasher": "1.0.0-nightly.20250722",
|
|
48
|
+
"@aztec/stdlib": "1.0.0-nightly.20250722",
|
|
49
|
+
"@aztec/telemetry-client": "1.0.0-nightly.20250722",
|
|
50
|
+
"@aztec/validator-client": "1.0.0-nightly.20250722",
|
|
51
|
+
"@aztec/world-state": "1.0.0-nightly.20250722",
|
|
52
52
|
"lodash.chunk": "^4.2.0",
|
|
53
53
|
"lodash.pick": "^4.4.0",
|
|
54
54
|
"tslib": "^2.4.0",
|
|
55
55
|
"viem": "2.23.7"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
|
-
"@aztec/archiver": "1.0.0-nightly.
|
|
59
|
-
"@aztec/kv-store": "1.0.0-nightly.
|
|
58
|
+
"@aztec/archiver": "1.0.0-nightly.20250722",
|
|
59
|
+
"@aztec/kv-store": "1.0.0-nightly.20250722",
|
|
60
60
|
"@jest/globals": "^30.0.0",
|
|
61
61
|
"@types/jest": "^30.0.0",
|
|
62
62
|
"@types/lodash.chunk": "^4.2.7",
|
package/src/publisher/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { SequencerPublisher,
|
|
1
|
+
export { SequencerPublisher, SignalType } from './sequencer-publisher.js';
|
|
@@ -56,14 +56,14 @@ type L1ProcessArgs = {
|
|
|
56
56
|
attestations?: CommitteeAttestation[];
|
|
57
57
|
};
|
|
58
58
|
|
|
59
|
-
export enum
|
|
59
|
+
export enum SignalType {
|
|
60
60
|
GOVERNANCE,
|
|
61
61
|
SLASHING,
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
type GetSlashPayloadCallBack = (slotNumber: bigint) => Promise<EthAddress | undefined>;
|
|
65
65
|
|
|
66
|
-
export type Action = 'propose' | 'governance-
|
|
66
|
+
export type Action = 'propose' | 'governance-signal' | 'slashing-signal';
|
|
67
67
|
|
|
68
68
|
interface RequestWithExpiry {
|
|
69
69
|
action: Action;
|
|
@@ -91,9 +91,9 @@ export class SequencerPublisher {
|
|
|
91
91
|
protected slashingProposerAddress?: EthAddress;
|
|
92
92
|
private getSlashPayload?: GetSlashPayloadCallBack = undefined;
|
|
93
93
|
|
|
94
|
-
private
|
|
95
|
-
[
|
|
96
|
-
[
|
|
94
|
+
private myLastSignals: Record<SignalType, bigint> = {
|
|
95
|
+
[SignalType.GOVERNANCE]: 0n,
|
|
96
|
+
[SignalType.SLASHING]: 0n,
|
|
97
97
|
};
|
|
98
98
|
|
|
99
99
|
protected log = createLogger('sequencer:publisher');
|
|
@@ -398,16 +398,16 @@ export class SequencerPublisher {
|
|
|
398
398
|
return ts;
|
|
399
399
|
}
|
|
400
400
|
|
|
401
|
-
private async
|
|
401
|
+
private async enqueueCastSignalHelper(
|
|
402
402
|
slotNumber: bigint,
|
|
403
403
|
timestamp: bigint,
|
|
404
|
-
|
|
404
|
+
signalType: SignalType,
|
|
405
405
|
payload: EthAddress,
|
|
406
406
|
base: IEmpireBase,
|
|
407
407
|
signerAddress: EthAddress,
|
|
408
408
|
signer: (msg: `0x${string}`) => Promise<`0x${string}`>,
|
|
409
409
|
): Promise<boolean> {
|
|
410
|
-
if (this.
|
|
410
|
+
if (this.myLastSignals[signalType] >= slotNumber) {
|
|
411
411
|
return false;
|
|
412
412
|
}
|
|
413
413
|
if (payload.equals(EthAddress.ZERO)) {
|
|
@@ -416,16 +416,16 @@ export class SequencerPublisher {
|
|
|
416
416
|
const round = await base.computeRound(slotNumber);
|
|
417
417
|
const roundInfo = await base.getRoundInfo(this.rollupContract.address, round);
|
|
418
418
|
|
|
419
|
-
if (roundInfo.
|
|
419
|
+
if (roundInfo.lastSignalSlot >= slotNumber) {
|
|
420
420
|
return false;
|
|
421
421
|
}
|
|
422
422
|
|
|
423
|
-
const cachedLastVote = this.
|
|
424
|
-
this.
|
|
423
|
+
const cachedLastVote = this.myLastSignals[signalType];
|
|
424
|
+
this.myLastSignals[signalType] = slotNumber;
|
|
425
425
|
|
|
426
|
-
const action =
|
|
426
|
+
const action = signalType === SignalType.GOVERNANCE ? 'governance-signal' : 'slashing-signal';
|
|
427
427
|
|
|
428
|
-
const request = await base.
|
|
428
|
+
const request = await base.createSignalRequestWithSignature(
|
|
429
429
|
payload.toString(),
|
|
430
430
|
round,
|
|
431
431
|
this.config.l1ChainId,
|
|
@@ -458,7 +458,7 @@ export class SequencerPublisher {
|
|
|
458
458
|
result.receipt &&
|
|
459
459
|
result.receipt.status === 'success' &&
|
|
460
460
|
result.receipt.logs.find(
|
|
461
|
-
log => log.topics[0] === toEventSelector(getAbiItem({ abi: EmpireBaseAbi, name: '
|
|
461
|
+
log => log.topics[0] === toEventSelector(getAbiItem({ abi: EmpireBaseAbi, name: 'SignalCast' })),
|
|
462
462
|
);
|
|
463
463
|
|
|
464
464
|
const logData = { ...result, slotNumber, round, payload: payload.toString() };
|
|
@@ -467,7 +467,7 @@ export class SequencerPublisher {
|
|
|
467
467
|
`Voting in [${action}] for ${payload} at slot ${slotNumber} in round ${round} failed`,
|
|
468
468
|
logData,
|
|
469
469
|
);
|
|
470
|
-
this.
|
|
470
|
+
this.myLastSignals[signalType] = cachedLastVote;
|
|
471
471
|
return false;
|
|
472
472
|
} else {
|
|
473
473
|
this.log.info(
|
|
@@ -481,13 +481,13 @@ export class SequencerPublisher {
|
|
|
481
481
|
return true;
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
-
private async
|
|
484
|
+
private async getSignalConfig(
|
|
485
485
|
slotNumber: bigint,
|
|
486
|
-
|
|
486
|
+
signalType: SignalType,
|
|
487
487
|
): Promise<{ payload: EthAddress; base: IEmpireBase } | undefined> {
|
|
488
|
-
if (
|
|
488
|
+
if (signalType === SignalType.GOVERNANCE) {
|
|
489
489
|
return { payload: this.governancePayload, base: this.govProposerContract };
|
|
490
|
-
} else if (
|
|
490
|
+
} else if (signalType === SignalType.SLASHING) {
|
|
491
491
|
if (!this.getSlashPayload) {
|
|
492
492
|
return undefined;
|
|
493
493
|
}
|
|
@@ -498,31 +498,31 @@ export class SequencerPublisher {
|
|
|
498
498
|
this.log.info(`Slash payload: ${slashPayload}`);
|
|
499
499
|
return { payload: slashPayload, base: this.slashingProposerContract };
|
|
500
500
|
} else {
|
|
501
|
-
const _: never =
|
|
502
|
-
throw new Error('Unreachable: Invalid
|
|
501
|
+
const _: never = signalType;
|
|
502
|
+
throw new Error('Unreachable: Invalid signal type');
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
505
|
|
|
506
506
|
/**
|
|
507
|
-
* Enqueues a
|
|
508
|
-
* @param slotNumber - The slot number to cast a
|
|
509
|
-
* @param timestamp - The timestamp of the slot to cast a
|
|
510
|
-
* @param
|
|
511
|
-
* @returns True if the
|
|
507
|
+
* Enqueues a castSignal transaction to cast a signal for a given slot number.
|
|
508
|
+
* @param slotNumber - The slot number to cast a signal for.
|
|
509
|
+
* @param timestamp - The timestamp of the slot to cast a signal for.
|
|
510
|
+
* @param signalType - The type of signal to cast.
|
|
511
|
+
* @returns True if the signal was successfully enqueued, false otherwise.
|
|
512
512
|
*/
|
|
513
|
-
public async
|
|
513
|
+
public async enqueueCastSignal(
|
|
514
514
|
slotNumber: bigint,
|
|
515
515
|
timestamp: bigint,
|
|
516
|
-
|
|
516
|
+
signalType: SignalType,
|
|
517
517
|
signerAddress: EthAddress,
|
|
518
518
|
signer: (msg: `0x${string}`) => Promise<`0x${string}`>,
|
|
519
519
|
): Promise<boolean> {
|
|
520
|
-
const
|
|
521
|
-
if (!
|
|
520
|
+
const signalConfig = await this.getSignalConfig(slotNumber, signalType);
|
|
521
|
+
if (!signalConfig) {
|
|
522
522
|
return false;
|
|
523
523
|
}
|
|
524
|
-
const { payload, base } =
|
|
525
|
-
return this.
|
|
524
|
+
const { payload, base } = signalConfig;
|
|
525
|
+
return this.enqueueCastSignalHelper(slotNumber, timestamp, signalType, payload, base, signerAddress, signer);
|
|
526
526
|
}
|
|
527
527
|
|
|
528
528
|
/**
|
|
@@ -48,7 +48,7 @@ import type { ValidatorClient } from '@aztec/validator-client';
|
|
|
48
48
|
import EventEmitter from 'node:events';
|
|
49
49
|
|
|
50
50
|
import type { GlobalVariableBuilder } from '../global_variable_builder/global_builder.js';
|
|
51
|
-
import { type Action, type SequencerPublisher,
|
|
51
|
+
import { type Action, type SequencerPublisher, SignalType } from '../publisher/sequencer-publisher.js';
|
|
52
52
|
import type { SequencerConfig } from './config.js';
|
|
53
53
|
import { SequencerMetrics } from './metrics.js';
|
|
54
54
|
import { SequencerTimetable, SequencerTooSlowError } from './timetable.js';
|
|
@@ -400,18 +400,18 @@ export class Sequencer extends (EventEmitter as new () => TypedEventEmitter<Sequ
|
|
|
400
400
|
slot,
|
|
401
401
|
);
|
|
402
402
|
|
|
403
|
-
const enqueueGovernanceVotePromise = this.publisher.
|
|
403
|
+
const enqueueGovernanceVotePromise = this.publisher.enqueueCastSignal(
|
|
404
404
|
slot,
|
|
405
405
|
newGlobalVariables.timestamp,
|
|
406
|
-
|
|
406
|
+
SignalType.GOVERNANCE,
|
|
407
407
|
proposerAddress,
|
|
408
408
|
msg => this.validatorClient!.signWithAddress(proposerAddress, Buffer32.fromString(msg)).then(s => s.toString()),
|
|
409
409
|
);
|
|
410
410
|
|
|
411
|
-
const enqueueSlashingVotePromise = this.publisher.
|
|
411
|
+
const enqueueSlashingVotePromise = this.publisher.enqueueCastSignal(
|
|
412
412
|
slot,
|
|
413
413
|
newGlobalVariables.timestamp,
|
|
414
|
-
|
|
414
|
+
SignalType.SLASHING,
|
|
415
415
|
proposerAddress,
|
|
416
416
|
msg => this.validatorClient!.signWithAddress(proposerAddress, Buffer32.fromString(msg)).then(s => s.toString()),
|
|
417
417
|
);
|