@aztec/sequencer-client 1.1.3 → 1.2.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.
@@ -15,7 +15,8 @@ export declare enum VoteType {
15
15
  SLASHING = 1
16
16
  }
17
17
  type GetSlashPayloadCallBack = (slotNumber: bigint) => Promise<EthAddress | undefined>;
18
- export type Action = 'propose' | 'governance-vote' | 'slashing-vote';
18
+ declare const Actions: readonly ["propose", "governance-vote", "slashing-vote"];
19
+ export type Action = (typeof Actions)[number];
19
20
  interface RequestWithExpiry {
20
21
  action: Action;
21
22
  request: L1TxRequest;
@@ -45,6 +46,7 @@ export declare class SequencerPublisher {
45
46
  protected ethereumSlotDuration: bigint;
46
47
  private blobSinkClient;
47
48
  static PROPOSE_GAS_GUESS: bigint;
49
+ static MULTICALL_OVERHEAD_GAS_GUESS: bigint;
48
50
  static VOTE_GAS_GUESS: bigint;
49
51
  l1TxUtils: L1TxUtilsWithBlobs;
50
52
  rollupContract: RollupContract;
@@ -86,8 +88,8 @@ export declare class SequencerPublisher {
86
88
  errorMsg: string | undefined;
87
89
  stats?: undefined;
88
90
  };
89
- expiredActions: Action[];
90
- validActions: Action[];
91
+ expiredActions: ("propose" | "governance-vote" | "slashing-vote")[];
92
+ validActions: ("propose" | "governance-vote" | "slashing-vote")[];
91
93
  } | undefined>;
92
94
  private callbackBundledTransactions;
93
95
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequencer-publisher.d.ts","sourceRoot":"","sources":["../../src/publisher/sequencer-publisher.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,13 @@ export var VoteType = /*#__PURE__*/ function(VoteType) {
18
18
  VoteType[VoteType["SLASHING"] = 1] = "SLASHING";
19
19
  return VoteType;
20
20
  }({});
21
+ const Actions = [
22
+ 'propose',
23
+ 'governance-vote',
24
+ 'slashing-vote'
25
+ ];
26
+ // Sorting for actions such that proposals always go first
27
+ const compareActions = (a, b)=>Actions.indexOf(b) - Actions.indexOf(a);
21
28
  export class SequencerPublisher {
22
29
  config;
23
30
  interrupted;
@@ -37,8 +44,10 @@ export class SequencerPublisher {
37
44
  // Total used for full block from int_l1_pub e2e test: 1m (of which 86k is 1x blob)
38
45
  // Total used for emptier block from above test: 429k (of which 84k is 1x blob)
39
46
  static PROPOSE_GAS_GUESS = 12_000_000n;
40
- // Gas report for VotingWithSigTest shows a max gas of 100k, so better err on the safe side
41
- static VOTE_GAS_GUESS = 500_000n;
47
+ // A CALL to a cold address is 2700 gas
48
+ static MULTICALL_OVERHEAD_GAS_GUESS = 5000n;
49
+ // Gas report for VotingWithSigTest shows a max gas of 100k, but we've seen it cost 700k+ in testnet
50
+ static VOTE_GAS_GUESS = 800_000n;
42
51
  l1TxUtils;
43
52
  rollupContract;
44
53
  govProposerContract;
@@ -143,6 +152,9 @@ export class SequencerPublisher {
143
152
  gasLimit,
144
153
  txTimeoutAt
145
154
  };
155
+ // Sort the requests so that proposals always go first
156
+ // This ensures the committee gets precomputed correctly
157
+ validRequests.sort((a, b)=>compareActions(a.action, b.action));
146
158
  try {
147
159
  this.log.debug('Forwarding transactions', {
148
160
  validRequests: validRequests.map((request)=>request.action)
@@ -360,6 +372,10 @@ export class SequencerPublisher {
360
372
  if (!voteConfig) {
361
373
  return false;
362
374
  }
375
+ if (signerAddress.equals(EthAddress.ZERO)) {
376
+ this.log.warn(`Cannot enqueue vote cast signal ${voteType} for address zero at slot ${slotNumber}`);
377
+ return false;
378
+ }
363
379
  const { payload, base } = voteConfig;
364
380
  return this.enqueueCastVoteHelper(slotNumber, timestamp, voteType, payload, base, signerAddress, signer);
365
381
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/sequencer-client",
3
- "version": "1.1.3",
3
+ "version": "1.2.0",
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.1.3",
30
- "@aztec/bb-prover": "1.1.3",
31
- "@aztec/blob-lib": "1.1.3",
32
- "@aztec/blob-sink": "1.1.3",
33
- "@aztec/constants": "1.1.3",
34
- "@aztec/epoch-cache": "1.1.3",
35
- "@aztec/ethereum": "1.1.3",
36
- "@aztec/foundation": "1.1.3",
37
- "@aztec/l1-artifacts": "1.1.3",
38
- "@aztec/merkle-tree": "1.1.3",
39
- "@aztec/noir-acvm_js": "1.1.3",
40
- "@aztec/noir-contracts.js": "1.1.3",
41
- "@aztec/noir-protocol-circuits-types": "1.1.3",
42
- "@aztec/noir-types": "1.1.3",
43
- "@aztec/p2p": "1.1.3",
44
- "@aztec/protocol-contracts": "1.1.3",
45
- "@aztec/prover-client": "1.1.3",
46
- "@aztec/simulator": "1.1.3",
47
- "@aztec/slasher": "1.1.3",
48
- "@aztec/stdlib": "1.1.3",
49
- "@aztec/telemetry-client": "1.1.3",
50
- "@aztec/validator-client": "1.1.3",
51
- "@aztec/world-state": "1.1.3",
29
+ "@aztec/aztec.js": "1.2.0",
30
+ "@aztec/bb-prover": "1.2.0",
31
+ "@aztec/blob-lib": "1.2.0",
32
+ "@aztec/blob-sink": "1.2.0",
33
+ "@aztec/constants": "1.2.0",
34
+ "@aztec/epoch-cache": "1.2.0",
35
+ "@aztec/ethereum": "1.2.0",
36
+ "@aztec/foundation": "1.2.0",
37
+ "@aztec/l1-artifacts": "1.2.0",
38
+ "@aztec/merkle-tree": "1.2.0",
39
+ "@aztec/noir-acvm_js": "1.2.0",
40
+ "@aztec/noir-contracts.js": "1.2.0",
41
+ "@aztec/noir-protocol-circuits-types": "1.2.0",
42
+ "@aztec/noir-types": "1.2.0",
43
+ "@aztec/p2p": "1.2.0",
44
+ "@aztec/protocol-contracts": "1.2.0",
45
+ "@aztec/prover-client": "1.2.0",
46
+ "@aztec/simulator": "1.2.0",
47
+ "@aztec/slasher": "1.2.0",
48
+ "@aztec/stdlib": "1.2.0",
49
+ "@aztec/telemetry-client": "1.2.0",
50
+ "@aztec/validator-client": "1.2.0",
51
+ "@aztec/world-state": "1.2.0",
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.1.3",
59
- "@aztec/kv-store": "1.1.3",
58
+ "@aztec/archiver": "1.2.0",
59
+ "@aztec/kv-store": "1.2.0",
60
60
  "@jest/globals": "^30.0.0",
61
61
  "@types/jest": "^30.0.0",
62
62
  "@types/lodash.chunk": "^4.2.7",
@@ -63,7 +63,11 @@ export enum VoteType {
63
63
 
64
64
  type GetSlashPayloadCallBack = (slotNumber: bigint) => Promise<EthAddress | undefined>;
65
65
 
66
- export type Action = 'propose' | 'governance-vote' | 'slashing-vote';
66
+ const Actions = ['propose', 'governance-vote', 'slashing-vote'] as const;
67
+ export type Action = (typeof Actions)[number];
68
+
69
+ // Sorting for actions such that proposals always go first
70
+ const compareActions = (a: Action, b: Action) => Actions.indexOf(b) - Actions.indexOf(a);
67
71
 
68
72
  interface RequestWithExpiry {
69
73
  action: Action;
@@ -104,8 +108,11 @@ export class SequencerPublisher {
104
108
  // Total used for emptier block from above test: 429k (of which 84k is 1x blob)
105
109
  public static PROPOSE_GAS_GUESS: bigint = 12_000_000n;
106
110
 
107
- // Gas report for VotingWithSigTest shows a max gas of 100k, so better err on the safe side
108
- public static VOTE_GAS_GUESS: bigint = 500_000n;
111
+ // A CALL to a cold address is 2700 gas
112
+ public static MULTICALL_OVERHEAD_GAS_GUESS = 5000n;
113
+
114
+ // Gas report for VotingWithSigTest shows a max gas of 100k, but we've seen it cost 700k+ in testnet
115
+ public static VOTE_GAS_GUESS: bigint = 800_000n;
109
116
 
110
117
  public l1TxUtils: L1TxUtilsWithBlobs;
111
118
  public rollupContract: RollupContract;
@@ -228,6 +235,10 @@ export class SequencerPublisher {
228
235
  const txTimeoutAt = txTimeoutAts.length > 0 ? new Date(Math.min(...txTimeoutAts.map(g => g.getTime()))) : undefined; // earliest
229
236
  const gasConfig: RequestWithExpiry['gasConfig'] = { gasLimit, txTimeoutAt };
230
237
 
238
+ // Sort the requests so that proposals always go first
239
+ // This ensures the committee gets precomputed correctly
240
+ validRequests.sort((a, b) => compareActions(a.action, b.action));
241
+
231
242
  try {
232
243
  this.log.debug('Forwarding transactions', {
233
244
  validRequests: validRequests.map(request => request.action),
@@ -490,6 +501,10 @@ export class SequencerPublisher {
490
501
  if (!voteConfig) {
491
502
  return false;
492
503
  }
504
+ if (signerAddress.equals(EthAddress.ZERO)) {
505
+ this.log.warn(`Cannot enqueue vote cast signal ${voteType} for address zero at slot ${slotNumber}`);
506
+ return false;
507
+ }
493
508
  const { payload, base } = voteConfig;
494
509
  return this.enqueueCastVoteHelper(slotNumber, timestamp, voteType, payload, base, signerAddress, signer);
495
510
  }