@aztec/ethereum 0.0.1-commit.3e3d0c9cd → 0.0.1-commit.3fd054f6

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.
@@ -1,9 +1,51 @@
1
1
  import type { Logger } from '@aztec/foundation/log';
2
- import { type Hex } from 'viem';
2
+ import { type Address, type Hex } from 'viem';
3
3
  import type { L1BlobInputs, L1TxConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
4
4
  import type { ExtendedViemWalletClient } from '../types.js';
5
5
  import { FormattedViemError } from '../utils.js';
6
6
  export declare const MULTI_CALL_3_ADDRESS: "0xcA11bde05977b3631167028862bE2a173976CA11";
7
+ /** ABI fragment for aggregate3Value — not included in viem's multicall3Abi. */
8
+ export declare const aggregate3ValueAbi: readonly [{
9
+ readonly inputs: readonly [{
10
+ readonly components: readonly [{
11
+ readonly internalType: "address";
12
+ readonly name: "target";
13
+ readonly type: "address";
14
+ }, {
15
+ readonly internalType: "bool";
16
+ readonly name: "allowFailure";
17
+ readonly type: "bool";
18
+ }, {
19
+ readonly internalType: "uint256";
20
+ readonly name: "value";
21
+ readonly type: "uint256";
22
+ }, {
23
+ readonly internalType: "bytes";
24
+ readonly name: "callData";
25
+ readonly type: "bytes";
26
+ }];
27
+ readonly internalType: "struct Multicall3.Call3Value[]";
28
+ readonly name: "calls";
29
+ readonly type: "tuple[]";
30
+ }];
31
+ readonly name: "aggregate3Value";
32
+ readonly outputs: readonly [{
33
+ readonly components: readonly [{
34
+ readonly internalType: "bool";
35
+ readonly name: "success";
36
+ readonly type: "bool";
37
+ }, {
38
+ readonly internalType: "bytes";
39
+ readonly name: "returnData";
40
+ readonly type: "bytes";
41
+ }];
42
+ readonly internalType: "struct Multicall3.Result[]";
43
+ readonly name: "returnData";
44
+ readonly type: "tuple[]";
45
+ }];
46
+ readonly stateMutability: "payable";
47
+ readonly type: "function";
48
+ }];
7
49
  export declare class Multicall3 {
8
50
  static forward(requests: L1TxRequest[], l1TxUtils: L1TxUtils, gasConfig: L1TxConfig | undefined, blobConfig: L1BlobInputs | undefined, rollupAddress: Hex, logger: Logger, opts?: {
9
51
  revertOnFailure?: boolean;
@@ -16,6 +58,13 @@ export declare class Multicall3 {
16
58
  receipt: import("viem").TransactionReceipt;
17
59
  errorMsg: string | undefined;
18
60
  }>;
61
+ /** Batch multiple value transfers into a single aggregate3Value call on Multicall3. */
62
+ static forwardValue(calls: {
63
+ to: Address;
64
+ value: bigint;
65
+ }[], l1TxUtils: L1TxUtils, logger: Logger): Promise<{
66
+ receipt: import("viem").TransactionReceipt;
67
+ }>;
19
68
  }
20
69
  export declare function deployMulticall3(l1Client: ExtendedViemWalletClient, logger: Logger): Promise<void>;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL211bHRpY2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQXFDLEtBQUssR0FBRyxFQUFxQyxNQUFNLE1BQU0sQ0FBQztBQUV0RyxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRyxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBR2xFLGVBQU8sTUFBTSxvQkFBb0IsOENBQXdELENBQUM7QUFFMUYscUJBQWEsVUFBVTtJQUNyQixPQUFhLE9BQU8sQ0FDbEIsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUN2QixTQUFTLEVBQUUsU0FBUyxFQUNwQixTQUFTLEVBQUUsVUFBVSxHQUFHLFNBQVMsRUFDakMsVUFBVSxFQUFFLFlBQVksR0FBRyxTQUFTLEVBQ3BDLGFBQWEsRUFBRSxHQUFHLEVBQ2xCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsSUFBSSxHQUFFO1FBQUUsZUFBZSxDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQU87Ozs7Ozs7O09Bc0d6QztDQUNGO0FBRUQsd0JBQXNCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkErQnhGIn0=
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGljYWxsLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL211bHRpY2FsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQXFDLEtBQUssR0FBRyxFQUFxQyxNQUFNLE1BQU0sQ0FBQztBQUVwSCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRyxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBR2xFLGVBQU8sTUFBTSxvQkFBb0IsOENBQXdELENBQUM7QUFFMUYsaUZBQStFO0FBQy9FLGVBQU8sTUFBTSxrQkFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE4QnJCLENBQUM7QUFFWCxxQkFBYSxVQUFVO0lBQ3JCLE9BQWEsT0FBTyxDQUNsQixRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQ3ZCLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFNBQVMsRUFBRSxVQUFVLEdBQUcsU0FBUyxFQUNqQyxVQUFVLEVBQUUsWUFBWSxHQUFHLFNBQVMsRUFDcEMsYUFBYSxFQUFFLEdBQUcsRUFDbEIsTUFBTSxFQUFFLE1BQU0sRUFDZCxJQUFJLEdBQUU7UUFBRSxlQUFlLENBQUMsRUFBRSxPQUFPLENBQUE7S0FBTzs7Ozs7Ozs7T0FzR3pDO0lBRUQsdUZBQXVGO0lBQ3ZGLE9BQWEsWUFBWSxDQUFDLEtBQUssRUFBRTtRQUFFLEVBQUUsRUFBRSxPQUFPLENBQUM7UUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU07O09BNEJ0RztDQUNGO0FBRUQsd0JBQXNCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkErQnhGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEtG,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,8CAAwD,CAAC;AAE1F,qBAAa,UAAU;IACrB,OAAa,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;;;;;;;;OAsGzC;CACF;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBA+BxF"}
1
+ {"version":3,"file":"multicall.d.ts","sourceRoot":"","sources":["../../src/contracts/multicall.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,KAAK,OAAO,EAAqC,KAAK,GAAG,EAAqC,MAAM,MAAM,CAAC;AAEpH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAChG,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAmB,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,8CAAwD,CAAC;AAE1F,iFAA+E;AAC/E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BrB,CAAC;AAEX,qBAAa,UAAU;IACrB,OAAa,OAAO,CAClB,QAAQ,EAAE,WAAW,EAAE,EACvB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,UAAU,GAAG,SAAS,EACjC,UAAU,EAAE,YAAY,GAAG,SAAS,EACpC,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,GAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;;;;;;;;OAsGzC;IAED,uFAAuF;IACvF,OAAa,YAAY,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;;OA4BtG;CACF;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,iBA+BxF"}
@@ -4,6 +4,61 @@ import { encodeFunctionData, multicall3Abi } from 'viem';
4
4
  import { FormattedViemError, formatViemError } from '../utils.js';
5
5
  import { RollupContract } from './rollup.js';
6
6
  export const MULTI_CALL_3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11';
7
+ /** ABI fragment for aggregate3Value — not included in viem's multicall3Abi. */ export const aggregate3ValueAbi = [
8
+ {
9
+ inputs: [
10
+ {
11
+ components: [
12
+ {
13
+ internalType: 'address',
14
+ name: 'target',
15
+ type: 'address'
16
+ },
17
+ {
18
+ internalType: 'bool',
19
+ name: 'allowFailure',
20
+ type: 'bool'
21
+ },
22
+ {
23
+ internalType: 'uint256',
24
+ name: 'value',
25
+ type: 'uint256'
26
+ },
27
+ {
28
+ internalType: 'bytes',
29
+ name: 'callData',
30
+ type: 'bytes'
31
+ }
32
+ ],
33
+ internalType: 'struct Multicall3.Call3Value[]',
34
+ name: 'calls',
35
+ type: 'tuple[]'
36
+ }
37
+ ],
38
+ name: 'aggregate3Value',
39
+ outputs: [
40
+ {
41
+ components: [
42
+ {
43
+ internalType: 'bool',
44
+ name: 'success',
45
+ type: 'bool'
46
+ },
47
+ {
48
+ internalType: 'bytes',
49
+ name: 'returnData',
50
+ type: 'bytes'
51
+ }
52
+ ],
53
+ internalType: 'struct Multicall3.Result[]',
54
+ name: 'returnData',
55
+ type: 'tuple[]'
56
+ }
57
+ ],
58
+ stateMutability: 'payable',
59
+ type: 'function'
60
+ }
61
+ ];
7
62
  export class Multicall3 {
8
63
  static async forward(requests, l1TxUtils, gasConfig, blobConfig, rollupAddress, logger, opts = {}) {
9
64
  requests = requests.filter((request)=>request.to !== null);
@@ -105,6 +160,36 @@ export class Multicall3 {
105
160
  throw err;
106
161
  }
107
162
  }
163
+ /** Batch multiple value transfers into a single aggregate3Value call on Multicall3. */ static async forwardValue(calls, l1TxUtils, logger) {
164
+ const args = calls.map((c)=>({
165
+ target: c.to,
166
+ allowFailure: false,
167
+ value: c.value,
168
+ callData: '0x'
169
+ }));
170
+ const data = encodeFunctionData({
171
+ abi: aggregate3ValueAbi,
172
+ functionName: 'aggregate3Value',
173
+ args: [
174
+ args
175
+ ]
176
+ });
177
+ const totalValue = calls.reduce((sum, c)=>sum + c.value, 0n);
178
+ logger.info(`Sending aggregate3Value with ${calls.length} calls`, {
179
+ totalValue
180
+ });
181
+ const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
182
+ to: MULTI_CALL_3_ADDRESS,
183
+ data,
184
+ value: totalValue
185
+ });
186
+ if (receipt.status !== 'success') {
187
+ throw new Error(`aggregate3Value transaction reverted: ${receipt.transactionHash}`);
188
+ }
189
+ return {
190
+ receipt
191
+ };
192
+ }
108
193
  }
109
194
  export async function deployMulticall3(l1Client, logger) {
110
195
  const existing = await l1Client.getCode({
@@ -282,7 +282,7 @@ export declare class RollupContract {
282
282
  * timestamp of the next L1 block
283
283
  * @throws otherwise
284
284
  */
285
- canProposeAtNextEthBlock(archive: Buffer, account: `0x${string}` | Account, slotDuration: number, opts?: {
285
+ canProposeAt(archive: Buffer, account: `0x${string}` | Account, timestamp: bigint, opts?: {
286
286
  forcePendingCheckpointNumber?: CheckpointNumber;
287
287
  }): Promise<{
288
288
  slot: SlotNumber;
@@ -314,7 +314,7 @@ export declare class RollupContract {
314
314
  archiveAt(checkpointNumber: CheckpointNumber): Promise<Fr>;
315
315
  getSequencerRewards(address: Hex | EthAddress): Promise<bigint>;
316
316
  getSpecificProverRewardsForEpoch(epoch: bigint, prover: Hex | EthAddress): Promise<bigint>;
317
- getAttesters(): Promise<EthAddress[]>;
317
+ getAttesters(timestamp?: bigint): Promise<EthAddress[]>;
318
318
  getAttesterView(address: Hex | EthAddress): Promise<AttesterView>;
319
319
  getStatus(address: Hex | EthAddress): Promise<AttesterStatus>;
320
320
  getBlobCommitmentsHash(checkpointNumber: CheckpointNumber): Promise<Buffer32>;
@@ -347,4 +347,4 @@ export declare class RollupContract {
347
347
  /** Fetches CheckpointProposed events within the given block range. */
348
348
  getCheckpointProposedEvents(fromBlock: bigint, toBlock: bigint): Promise<CheckpointProposedLog[]>;
349
349
  }
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbHVwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL3JvbGx1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkxRCxPQUFPLEVBQ0wsS0FBSyxPQUFPLEVBQ1osS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxHQUFHLEVBQ1IsS0FBSyxhQUFhLEVBQ2xCLEtBQUssNEJBQTRCLEVBS2xDLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFL0UsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztB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
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbHVwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL3JvbGx1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkxRCxPQUFPLEVBQ0wsS0FBSyxPQUFPLEVBQ1osS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxHQUFHLEVBQ1IsS0FBSyxhQUFhLEVBQ2xCLEtBQUssNEJBQTRCLEVBS2xDLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFL0UsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztB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
@@ -1 +1 @@
1
- {"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"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"}
@@ -966,9 +966,8 @@ export class RollupContract {
966
966
  * @return [slot, checkpointNumber, timeOfNextL1Slot] - If you can propose, the L2 slot number, checkpoint number and
967
967
  * timestamp of the next L1 block
968
968
  * @throws otherwise
969
- */ async canProposeAtNextEthBlock(archive, account, slotDuration, opts = {}) {
970
- const latestBlock = await this.client.getBlock();
971
- const timeOfNextL1Slot = latestBlock.timestamp + BigInt(slotDuration);
969
+ */ async canProposeAt(archive, account, timestamp, opts = {}) {
970
+ const timeOfNextL1Slot = timestamp;
972
971
  const who = typeof account === 'string' ? account : account.address;
973
972
  try {
974
973
  const { result: [slot, checkpointNumber] } = await this.client.simulateContract({
@@ -1127,10 +1126,10 @@ export class RollupContract {
1127
1126
  prover
1128
1127
  ]);
1129
1128
  }
1130
- async getAttesters() {
1129
+ async getAttesters(timestamp) {
1131
1130
  const attesterSize = await this.getActiveAttesterCount();
1132
1131
  const gse = new GSEContract(this.client, await this.getGSE());
1133
- const ts = (await this.client.getBlock()).timestamp;
1132
+ const ts = timestamp ?? (await this.client.getBlock()).timestamp;
1134
1133
  const indices = Array.from({
1135
1134
  length: attesterSize
1136
1135
  }, (_, i)=>BigInt(i));
@@ -1,16 +1,30 @@
1
1
  import { type LoggerBindings } from '@aztec/foundation/log';
2
2
  import { L1TxUtils } from './l1_tx_utils/index.js';
3
3
  export type PublisherFilter<UtilsType extends L1TxUtils> = (utils: UtilsType) => boolean;
4
+ /** Config accepted by PublisherManager. */
5
+ type PublisherManagerConfig = {
6
+ publisherAllowInvalidStates?: boolean;
7
+ publisherFundingThreshold?: bigint;
8
+ publisherFundingAmount?: bigint;
9
+ };
4
10
  export declare class PublisherManager<UtilsType extends L1TxUtils = L1TxUtils> {
5
11
  private publishers;
6
12
  private log;
7
13
  private config;
8
- constructor(publishers: UtilsType[], config: {
9
- publisherAllowInvalidStates?: boolean;
10
- }, bindings?: LoggerBindings);
11
- /** Loads the state of all publishers and resumes monitoring any pending txs */
12
- loadState(): Promise<void>;
14
+ private static readonly FUNDING_CHECK_INTERVAL_MS;
15
+ private funder?;
16
+ private fundingPromise?;
17
+ constructor(publishers: UtilsType[], config: PublisherManagerConfig, opts?: {
18
+ bindings?: LoggerBindings;
19
+ funder?: UtilsType;
20
+ });
21
+ /** Loads the state of all publishers and the funder, and starts periodic funding checks. */
22
+ start(): Promise<void>;
23
+ /** Stops the funding loop and interrupts all publishers. */
24
+ stop(): Promise<void>;
13
25
  getAvailablePublisher(filter?: PublisherFilter<UtilsType>): Promise<UtilsType>;
14
- interrupt(): void;
26
+ private triggerFundingIfNeeded;
27
+ private fundPublishers;
15
28
  }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyX21hbmFnZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wdWJsaXNoZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFFdkYsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQXdCakUsTUFBTSxNQUFNLGVBQWUsQ0FBQyxTQUFTLFNBQVMsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUM7QUFFekYscUJBQWEsZ0JBQWdCLENBQUMsU0FBUyxTQUFTLFNBQVMsR0FBRyxTQUFTO0lBS2pFLE9BQU8sQ0FBQyxVQUFVO0lBSnBCLE9BQU8sQ0FBQyxHQUFHLENBQVM7SUFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBNEM7SUFFMUQsWUFDVSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQy9CLE1BQU0sRUFBRTtRQUFFLDJCQUEyQixDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQUUsRUFDakQsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQU0xQjtJQUVELCtFQUErRTtJQUNsRSxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUV0QztJQVFZLHFCQUFxQixDQUFDLE1BQU0sR0FBRSxlQUFlLENBQUMsU0FBUyxDQUFjLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQStDdEc7SUFFTSxTQUFTLFNBRWY7Q0FDRiJ9
29
+ export {};
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyX21hbmFnZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wdWJsaXNoZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFJdkYsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQXdCakUsTUFBTSxNQUFNLGVBQWUsQ0FBQyxTQUFTLFNBQVMsU0FBUyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUM7QUFFekYsMkNBQTJDO0FBQzNDLEtBQUssc0JBQXNCLEdBQUc7SUFDNUIsMkJBQTJCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDdEMseUJBQXlCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDbkMsc0JBQXNCLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDakMsQ0FBQztBQUVGLHFCQUFhLGdCQUFnQixDQUFDLFNBQVMsU0FBUyxTQUFTLEdBQUcsU0FBUztJQVFqRSxPQUFPLENBQUMsVUFBVTtJQVBwQixPQUFPLENBQUMsR0FBRyxDQUFTO0lBQ3BCLE9BQU8sQ0FBQyxNQUFNLENBQXlCO0lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFpQjtJQUNsRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQVk7SUFDM0IsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFpQjtJQUV4QyxZQUNVLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFDL0IsTUFBTSxFQUFFLHNCQUFzQixFQUM5QixJQUFJLENBQUMsRUFBRTtRQUFFLFFBQVEsQ0FBQyxFQUFFLGNBQWMsQ0FBQztRQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsQ0FBQTtLQUFFLEVBcUJ6RDtJQUVELDRGQUE0RjtJQUMvRSxLQUFLLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQWtCbEM7SUFFRCw0REFBNEQ7SUFDL0MsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FJakM7SUFRWSxxQkFBcUIsQ0FBQyxNQUFNLEdBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0ErQ3RHO1lBR2Esc0JBQXNCO1lBcUN0QixjQUFjO0NBVTdCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"publisher_manager.d.ts","sourceRoot":"","sources":["../src/publisher_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAwBjE,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;AAEzF,qBAAa,gBAAgB,CAAC,SAAS,SAAS,SAAS,GAAG,SAAS;IAKjE,OAAO,CAAC,UAAU;IAJpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAA4C;IAE1D,YACU,UAAU,EAAE,SAAS,EAAE,EAC/B,MAAM,EAAE;QAAE,2BAA2B,CAAC,EAAE,OAAO,CAAA;KAAE,EACjD,QAAQ,CAAC,EAAE,cAAc,EAM1B;IAED,+EAA+E;IAClE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtC;IAQY,qBAAqB,CAAC,MAAM,GAAE,eAAe,CAAC,SAAS,CAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CtG;IAEM,SAAS,SAEf;CACF"}
1
+ {"version":3,"file":"publisher_manager.d.ts","sourceRoot":"","sources":["../src/publisher_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAIvF,OAAO,EAAE,SAAS,EAAgB,MAAM,wBAAwB,CAAC;AAwBjE,MAAM,MAAM,eAAe,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;AAEzF,2CAA2C;AAC3C,KAAK,sBAAsB,GAAG;IAC5B,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,qBAAa,gBAAgB,CAAC,SAAS,SAAS,SAAS,GAAG,SAAS;IAQjE,OAAO,CAAC,UAAU;IAPpB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAiB;IAClE,OAAO,CAAC,MAAM,CAAC,CAAY;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAiB;IAExC,YACU,UAAU,EAAE,SAAS,EAAE,EAC/B,MAAM,EAAE,sBAAsB,EAC9B,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,cAAc,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAAE,EAqBzD;IAED,4FAA4F;IAC/E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBlC;IAED,4DAA4D;IAC/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjC;IAQY,qBAAqB,CAAC,MAAM,GAAE,eAAe,CAAC,SAAS,CAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CtG;YAGa,sBAAsB;YAqCtB,cAAc;CAU7B"}
@@ -1,5 +1,7 @@
1
1
  import { pick } from '@aztec/foundation/collection';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
+ import { RunningPromise } from '@aztec/foundation/running-promise';
4
+ import { Multicall3 } from './contracts/multicall.js';
3
5
  import { TxUtilsState } from './l1_tx_utils/index.js';
4
6
  // Defines the order in which we prioritise publishers based on their state (first is better)
5
7
  const sortOrder = [
@@ -25,15 +27,43 @@ export class PublisherManager {
25
27
  publishers;
26
28
  log;
27
29
  config;
28
- constructor(publishers, config, bindings){
30
+ static FUNDING_CHECK_INTERVAL_MS = 2 * 60 * 1000;
31
+ funder;
32
+ fundingPromise;
33
+ constructor(publishers, config, opts){
29
34
  this.publishers = publishers;
30
- this.log = createLogger('publisher:manager', bindings);
35
+ this.funder = opts?.funder;
36
+ this.log = createLogger('publisher:manager', opts?.bindings);
31
37
  this.log.info(`PublisherManager initialized with ${publishers.length} publishers.`);
32
38
  this.publishers = publishers;
33
- this.config = pick(config, 'publisherAllowInvalidStates');
39
+ this.config = pick(config, 'publisherAllowInvalidStates', 'publisherFundingThreshold', 'publisherFundingAmount');
40
+ const hasThreshold = this.config.publisherFundingThreshold !== undefined;
41
+ const hasAmount = this.config.publisherFundingAmount !== undefined;
42
+ if (hasThreshold !== hasAmount) {
43
+ this.log.warn(`Incomplete funding config: both publisherFundingThreshold and publisherFundingAmount must be set`);
44
+ }
45
+ if (this.funder) {
46
+ const funderAddress = this.funder.getSenderAddress();
47
+ if (publishers.some((p)=>p.getSenderAddress().equals(funderAddress))) {
48
+ this.log.error(`Funding account ${funderAddress} is also a publisher, disabling funding to avoid self-funding`);
49
+ this.funder = undefined;
50
+ }
51
+ }
52
+ }
53
+ /** Loads the state of all publishers and the funder, and starts periodic funding checks. */ async start() {
54
+ await Promise.all([
55
+ ...this.publishers.map((pub)=>pub.loadStateAndResumeMonitoring()),
56
+ this.funder?.loadStateAndResumeMonitoring()
57
+ ]);
58
+ if (this.funder && this.config.publisherFundingThreshold !== undefined && this.config.publisherFundingAmount !== undefined) {
59
+ this.fundingPromise = new RunningPromise(()=>this.triggerFundingIfNeeded(), this.log, PublisherManager.FUNDING_CHECK_INTERVAL_MS);
60
+ this.fundingPromise.start();
61
+ }
34
62
  }
35
- /** Loads the state of all publishers and resumes monitoring any pending txs */ async loadState() {
36
- await Promise.all(this.publishers.map((pub)=>pub.loadStateAndResumeMonitoring()));
63
+ /** Stops the funding loop and interrupts all publishers. */ async stop() {
64
+ await this.fundingPromise?.stop();
65
+ this.publishers.forEach((pub)=>pub.interrupt());
66
+ this.funder?.interrupt();
37
67
  }
38
68
  // Finds and prioritises available publishers based on
39
69
  // 1. Validity as per the provided filter function
@@ -82,7 +112,51 @@ export class PublisherManager {
82
112
  });
83
113
  return sortedPublishers[0].publisher;
84
114
  }
85
- interrupt() {
86
- this.publishers.forEach((pub)=>pub.interrupt());
115
+ /** Check all publisher balances and fund those below threshold. */ async triggerFundingIfNeeded() {
116
+ const { funder, config } = this;
117
+ if (!funder || config.publisherFundingThreshold === undefined || config.publisherFundingAmount === undefined) {
118
+ return;
119
+ }
120
+ const allBalances = await Promise.all(this.publishers.map(async (pub)=>({
121
+ balance: await pub.getSenderBalance(),
122
+ publisher: pub
123
+ })));
124
+ const lowBalance = allBalances.filter((p)=>p.balance < config.publisherFundingThreshold);
125
+ if (lowBalance.length === 0) {
126
+ return;
127
+ }
128
+ const fundingAmount = config.publisherFundingAmount;
129
+ const funderBalance = await funder.getSenderBalance();
130
+ if (funderBalance < 10n * fundingAmount) {
131
+ this.log.warn(`Funding account balance is low`, {
132
+ funderBalance,
133
+ threshold: 10n * fundingAmount
134
+ });
135
+ }
136
+ const affordableCount = Number(funderBalance / fundingAmount);
137
+ if (affordableCount === 0) {
138
+ this.log.error(`Funding account balance too low to fund any publisher`, {
139
+ funderBalance,
140
+ fundingAmount
141
+ });
142
+ return;
143
+ }
144
+ if (affordableCount < lowBalance.length) {
145
+ this.log.warn(`Funder can only afford ${affordableCount}/${lowBalance.length} publishers`, {
146
+ funderBalance,
147
+ fundingAmount
148
+ });
149
+ }
150
+ const toFund = lowBalance.slice(0, affordableCount).map((p)=>p.publisher);
151
+ await this.fundPublishers(toFund);
152
+ }
153
+ /** Fund publishers via a single Multicall3 aggregate3Value transaction. */ async fundPublishers(publishers) {
154
+ const fundingAmount = this.config.publisherFundingAmount;
155
+ const calls = publishers.map((pub)=>({
156
+ to: pub.getSenderAddress().toString(),
157
+ value: fundingAmount
158
+ }));
159
+ await Multicall3.forwardValue(calls, this.funder, this.log);
160
+ this.log.info(`Funded ${publishers.length} publishers`);
87
161
  }
88
162
  }
@@ -58,10 +58,12 @@ export declare class EthCheatCodes {
58
58
  */
59
59
  chainId(): Promise<number>;
60
60
  /**
61
- * Get the current timestamp
62
- * @returns The current timestamp
61
+ * Get the timestamp of the latest mined L1 block.
62
+ * Note: this is NOT the current time — it's the discrete timestamp of the last block.
63
+ * Between blocks, the actual chain time advances but no new block reflects it.
64
+ * @returns The latest block timestamp in seconds
63
65
  */
64
- timestamp(): Promise<number>;
66
+ lastBlockTimestamp(): Promise<number>;
65
67
  /**
66
68
  * Advance the chain by a number of blocks
67
69
  * @param numberOfBlocks - The number of blocks to mine
@@ -226,4 +228,4 @@ export type TxPoolTransaction = Transaction & {
226
228
  poolState: TxPoolState;
227
229
  };
228
230
  export {};
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoX2NoZWF0X2NvZGVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9ldGhfY2hlYXRfY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSTNELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBbUQsTUFBTSxNQUFNLENBQUM7QUFHL0csT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxxQkFBYSxhQUFhO0lBR3RCOztPQUVHO0lBQ0ksT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUN4Qjs7T0FFRztJQUNJLFlBQVksRUFBRSxZQUFZLEdBQUcsZ0JBQWdCO0lBQ3BEOztPQUVHO0lBQ0ksTUFBTTtJQUNiOztPQUVHO0lBQ0ksS0FBSyxFQUFFLEtBQUs7SUFqQnJCLFNBQWdCLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztJQUMvQztJQUNFOztPQUVHO0lBQ0ksT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUN4Qjs7T0FFRztJQUNJLFlBQVksRUFBRSxZQUFZLEdBQUcsZ0JBQWdCO0lBQ3BEOztPQUVHO0lBQ0ksTUFBTSx5Q0FBdUM7SUFDcEQ7O09BRUc7SUFDSSxLQUFLLEdBQUUsS0FBZSxFQU05QjtJQUVNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBRzNDO1lBRWEsU0FBUztJQU92Qjs7O09BR0c7SUFDVSxZQUFZLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVE1QztJQUVEOzs7T0FHRztJQUNVLFdBQVcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRzFDO0lBRUQ7OztPQUdHO0lB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
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoX2NoZWF0X2NvZGVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9ldGhfY2hlYXRfY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSTNELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLFdBQVcsRUFBbUQsTUFBTSxNQUFNLENBQUM7QUFHL0csT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxxQkFBYSxhQUFhO0lBR3RCOztPQUVHO0lBQ0ksT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUN4Qjs7T0FFRztJQUNJLFlBQVksRUFBRSxZQUFZLEdBQUcsZ0JBQWdCO0lBQ3BEOztPQUVHO0lBQ0ksTUFBTTtJQUNiOztPQUVHO0lBQ0ksS0FBSyxFQUFFLEtBQUs7SUFqQnJCLFNBQWdCLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztJQUMvQztJQUNFOztPQUVHO0lBQ0ksT0FBTyxFQUFFLE1BQU0sRUFBRTtJQUN4Qjs7T0FFRztJQUNJLFlBQVksRUFBRSxZQUFZLEdBQUcsZ0JBQWdCO0lBQ3BEOztPQUVHO0lBQ0ksTUFBTSx5Q0FBdUM7SUFDcEQ7O09BRUc7SUFDSSxLQUFLLEdBQUUsS0FBZSxFQU05QjtJQUVNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBRzNDO1lBRWEsU0FBUztJQU92Qjs7O09BR0c7SUFDVSxZQUFZLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVE1QztJQUVEOzs7T0FHRztJQUNVLFdBQVcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRzFDO0lBRUQ7OztPQUdHO0lB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
@@ -1 +1 @@
1
- {"version":3,"file":"eth_cheat_codes.d.ts","sourceRoot":"","sources":["../../src/test/eth_cheat_codes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eth_cheat_codes.d.ts","sourceRoot":"","sources":["../../src/test/eth_cheat_codes.ts"],"names":[],"mappings":"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"}
@@ -70,9 +70,11 @@ import { foundry } from 'viem/chains';
70
70
  return parseInt(res, 16);
71
71
  }
72
72
  /**
73
- * Get the current timestamp
74
- * @returns The current timestamp
75
- */ async timestamp() {
73
+ * Get the timestamp of the latest mined L1 block.
74
+ * Note: this is NOT the current time — it's the discrete timestamp of the last block.
75
+ * Between blocks, the actual chain time advances but no new block reflects it.
76
+ * @returns The latest block timestamp in seconds
77
+ */ async lastBlockTimestamp() {
76
78
  const res = await this.doRpcCall('eth_getBlockByNumber', [
77
79
  'latest',
78
80
  true
@@ -536,7 +538,7 @@ import { foundry } from 'viem/chains';
536
538
  }
537
539
  }
538
540
  async syncDateProvider() {
539
- const timestamp = await this.timestamp();
541
+ const timestamp = await this.lastBlockTimestamp();
540
542
  if ('setTime' in this.dateProvider) {
541
543
  this.dateProvider.setTime(timestamp * 1000);
542
544
  }
@@ -1,3 +1,4 @@
1
+ import type { TestDateProvider } from '@aztec/foundation/timer';
1
2
  /** Minimal interface matching the @viem/anvil Anvil shape used by callers. */
2
3
  export interface Anvil {
3
4
  readonly port: number;
@@ -24,10 +25,16 @@ export declare function startAnvil(opts?: {
24
25
  * L1-finality-based logic work without needing hundreds of mined blocks.
25
26
  */
26
27
  slotsInAnEpoch?: number;
28
+ /**
29
+ * If provided, the date provider will be synced to anvil's block time on every mined block.
30
+ * This keeps the dateProvider in lockstep with anvil's chain time, avoiding drift between
31
+ * the wall clock and the L1 chain when computing L1 slot timestamps.
32
+ */
33
+ dateProvider?: TestDateProvider;
27
34
  }): Promise<{
28
35
  anvil: Anvil;
29
36
  methodCalls?: string[];
30
37
  rpcUrl: string;
31
38
  stop: () => Promise<void>;
32
39
  }>;
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfYW52aWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3N0YXJ0X2FudmlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLDhFQUE4RTtBQUM5RSxNQUFNLFdBQVcsS0FBSztJQUNwQixRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN0QixRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN0QixRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxNQUFNLENBQUM7SUFDdEMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUN2QjtBQUVEOztHQUVHO0FBQ0gsd0JBQXNCLFVBQVUsQ0FDOUIsSUFBSSxHQUFFO0lBQ0osSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2QsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNkLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzdCLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQixPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDakIscURBQXFEO0lBQ3JELFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQjs7Ozs7T0FLRztJQUNILGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztDQUNwQixHQUNMLE9BQU8sQ0FBQztJQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7SUFBQyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFBQyxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Q0FBRSxDQUFDLENBNEg5RiJ9
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcnRfYW52aWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3N0YXJ0X2FudmlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNaEUsOEVBQThFO0FBQzlFLE1BQU0sV0FBVyxLQUFLO0lBQ3BCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxHQUFHLE1BQU0sQ0FBQztJQUN0QyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ3ZCO0FBRUQ7O0dBRUc7QUFDSCx3QkFBc0IsVUFBVSxDQUM5QixJQUFJLEdBQUU7SUFDSixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDZCxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDckIsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQ2Qsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUM7SUFDN0IsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNqQixxREFBcUQ7SUFDckQsUUFBUSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2xCOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3hCOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztDQUM1QixHQUNMLE9BQU8sQ0FBQztJQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7SUFBQyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFBQyxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Q0FBRSxDQUFDLENBK0g5RiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"start_anvil.d.ts","sourceRoot":"","sources":["../../src/test/start_anvil.ts"],"names":[],"mappings":"AAOA,8EAA8E;AAC9E,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;IACtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACpB,GACL,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CA4H9F"}
1
+ {"version":3,"file":"start_anvil.d.ts","sourceRoot":"","sources":["../../src/test/start_anvil.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,8EAA8E;AAC9E,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;IACtC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,GAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAC5B,GACL,OAAO,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CA+H9F"}
@@ -75,12 +75,15 @@ import { dirname, resolve } from 'path';
75
75
  child.stderr?.on('data', onStderr);
76
76
  child.once('close', onClose);
77
77
  });
78
- // Continue piping for logging / method-call capture after startup.
79
- if (logger || opts.captureMethodCalls) {
78
+ // Continue piping for logging, method-call capture, and/or dateProvider sync after startup.
79
+ if (logger || opts.captureMethodCalls || opts.dateProvider) {
80
80
  child.stdout?.on('data', (data)=>{
81
81
  const text = data.toString();
82
82
  logger?.debug(text.trim());
83
83
  methodCalls?.push(...text.match(/eth_[^\s]+/g) || []);
84
+ if (opts.dateProvider) {
85
+ syncDateProviderFromAnvilOutput(text, opts.dateProvider);
86
+ }
84
87
  });
85
88
  child.stderr?.on('data', (data)=>{
86
89
  logger?.debug(data.toString().trim());
@@ -125,6 +128,17 @@ import { dirname, resolve } from 'path';
125
128
  rpcUrl: `http://127.0.0.1:${port}`
126
129
  };
127
130
  }
131
+ /** Extracts block time from anvil stdout and syncs the dateProvider. */ function syncDateProviderFromAnvilOutput(text, dateProvider) {
132
+ // Anvil logs mined blocks as:
133
+ // Block Time: "Fri, 20 Mar 2026 02:10:46 +0000"
134
+ const match = text.match(/Block Time:\s*"([^"]+)"/);
135
+ if (match) {
136
+ const blockTimeMs = new Date(match[1]).getTime();
137
+ if (!isNaN(blockTimeMs)) {
138
+ dateProvider.setTime(blockTimeMs);
139
+ }
140
+ }
141
+ }
128
142
  /** Send SIGTERM, wait up to 5 s, then SIGKILL. All timers are always cleared. */ function killChild(child) {
129
143
  return new Promise((resolve)=>{
130
144
  if (child.exitCode !== null || child.killed) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/ethereum",
3
- "version": "0.0.1-commit.3e3d0c9cd",
3
+ "version": "0.0.1-commit.3fd054f6",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./account": "./dest/account.js",
@@ -50,10 +50,10 @@
50
50
  "../package.common.json"
51
51
  ],
52
52
  "dependencies": {
53
- "@aztec/blob-lib": "0.0.1-commit.3e3d0c9cd",
54
- "@aztec/constants": "0.0.1-commit.3e3d0c9cd",
55
- "@aztec/foundation": "0.0.1-commit.3e3d0c9cd",
56
- "@aztec/l1-artifacts": "0.0.1-commit.3e3d0c9cd",
53
+ "@aztec/blob-lib": "0.0.1-commit.3fd054f6",
54
+ "@aztec/constants": "0.0.1-commit.3fd054f6",
55
+ "@aztec/foundation": "0.0.1-commit.3fd054f6",
56
+ "@aztec/l1-artifacts": "0.0.1-commit.3fd054f6",
57
57
  "dotenv": "^16.0.3",
58
58
  "lodash.chunk": "^4.2.0",
59
59
  "lodash.pickby": "^4.5.0",
@@ -2,7 +2,7 @@ import { toHex as toPaddedHex } from '@aztec/foundation/bigint-buffer';
2
2
  import { TimeoutError } from '@aztec/foundation/error';
3
3
  import type { Logger } from '@aztec/foundation/log';
4
4
 
5
- import { type EncodeFunctionDataParameters, type Hex, encodeFunctionData, multicall3Abi } from 'viem';
5
+ import { type Address, type EncodeFunctionDataParameters, type Hex, encodeFunctionData, multicall3Abi } from 'viem';
6
6
 
7
7
  import type { L1BlobInputs, L1TxConfig, L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
8
8
  import type { ExtendedViemWalletClient } from '../types.js';
@@ -11,6 +11,39 @@ import { RollupContract } from './rollup.js';
11
11
 
12
12
  export const MULTI_CALL_3_ADDRESS = '0xcA11bde05977b3631167028862bE2a173976CA11' as const;
13
13
 
14
+ /** ABI fragment for aggregate3Value — not included in viem's multicall3Abi. */
15
+ export const aggregate3ValueAbi = [
16
+ {
17
+ inputs: [
18
+ {
19
+ components: [
20
+ { internalType: 'address', name: 'target', type: 'address' },
21
+ { internalType: 'bool', name: 'allowFailure', type: 'bool' },
22
+ { internalType: 'uint256', name: 'value', type: 'uint256' },
23
+ { internalType: 'bytes', name: 'callData', type: 'bytes' },
24
+ ],
25
+ internalType: 'struct Multicall3.Call3Value[]',
26
+ name: 'calls',
27
+ type: 'tuple[]',
28
+ },
29
+ ],
30
+ name: 'aggregate3Value',
31
+ outputs: [
32
+ {
33
+ components: [
34
+ { internalType: 'bool', name: 'success', type: 'bool' },
35
+ { internalType: 'bytes', name: 'returnData', type: 'bytes' },
36
+ ],
37
+ internalType: 'struct Multicall3.Result[]',
38
+ name: 'returnData',
39
+ type: 'tuple[]',
40
+ },
41
+ ],
42
+ stateMutability: 'payable',
43
+ type: 'function',
44
+ },
45
+ ] as const;
46
+
14
47
  export class Multicall3 {
15
48
  static async forward(
16
49
  requests: L1TxRequest[],
@@ -122,6 +155,37 @@ export class Multicall3 {
122
155
  throw err;
123
156
  }
124
157
  }
158
+
159
+ /** Batch multiple value transfers into a single aggregate3Value call on Multicall3. */
160
+ static async forwardValue(calls: { to: Address; value: bigint }[], l1TxUtils: L1TxUtils, logger: Logger) {
161
+ const args = calls.map(c => ({
162
+ target: c.to,
163
+ allowFailure: false,
164
+ value: c.value,
165
+ callData: '0x' as Hex,
166
+ }));
167
+
168
+ const data = encodeFunctionData({
169
+ abi: aggregate3ValueAbi,
170
+ functionName: 'aggregate3Value',
171
+ args: [args],
172
+ });
173
+
174
+ const totalValue = calls.reduce((sum, c) => sum + c.value, 0n);
175
+
176
+ logger.info(`Sending aggregate3Value with ${calls.length} calls`, { totalValue });
177
+ const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
178
+ to: MULTI_CALL_3_ADDRESS,
179
+ data,
180
+ value: totalValue,
181
+ });
182
+
183
+ if (receipt.status !== 'success') {
184
+ throw new Error(`aggregate3Value transaction reverted: ${receipt.transactionHash}`);
185
+ }
186
+
187
+ return { receipt };
188
+ }
125
189
  }
126
190
 
127
191
  export async function deployMulticall3(l1Client: ExtendedViemWalletClient, logger: Logger) {
@@ -778,14 +778,13 @@ export class RollupContract {
778
778
  * timestamp of the next L1 block
779
779
  * @throws otherwise
780
780
  */
781
- public async canProposeAtNextEthBlock(
781
+ public async canProposeAt(
782
782
  archive: Buffer,
783
783
  account: `0x${string}` | Account,
784
- slotDuration: number,
784
+ timestamp: bigint,
785
785
  opts: { forcePendingCheckpointNumber?: CheckpointNumber } = {},
786
786
  ): Promise<{ slot: SlotNumber; checkpointNumber: CheckpointNumber; timeOfNextL1Slot: bigint }> {
787
- const latestBlock = await this.client.getBlock();
788
- const timeOfNextL1Slot = latestBlock.timestamp + BigInt(slotDuration);
787
+ const timeOfNextL1Slot = timestamp;
789
788
  const who = typeof account === 'string' ? account : account.address;
790
789
 
791
790
  try {
@@ -938,11 +937,10 @@ export class RollupContract {
938
937
  return this.rollup.read.getSpecificProverRewardsForEpoch([epoch, prover]);
939
938
  }
940
939
 
941
- async getAttesters(): Promise<EthAddress[]> {
940
+ async getAttesters(timestamp?: bigint): Promise<EthAddress[]> {
942
941
  const attesterSize = await this.getActiveAttesterCount();
943
942
  const gse = new GSEContract(this.client, await this.getGSE());
944
- const ts = (await this.client.getBlock()).timestamp;
945
-
943
+ const ts = timestamp ?? (await this.client.getBlock()).timestamp;
946
944
  const indices = Array.from({ length: attesterSize }, (_, i) => BigInt(i));
947
945
  const chunks = chunk(indices, 1000);
948
946
 
@@ -1,6 +1,8 @@
1
1
  import { pick } from '@aztec/foundation/collection';
2
2
  import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import { RunningPromise } from '@aztec/foundation/running-promise';
3
4
 
5
+ import { Multicall3 } from './contracts/multicall.js';
4
6
  import { L1TxUtils, TxUtilsState } from './l1_tx_utils/index.js';
5
7
 
6
8
  // Defines the order in which we prioritise publishers based on their state (first is better)
@@ -27,24 +29,72 @@ const busyStates: TxUtilsState[] = [
27
29
 
28
30
  export type PublisherFilter<UtilsType extends L1TxUtils> = (utils: UtilsType) => boolean;
29
31
 
32
+ /** Config accepted by PublisherManager. */
33
+ type PublisherManagerConfig = {
34
+ publisherAllowInvalidStates?: boolean;
35
+ publisherFundingThreshold?: bigint;
36
+ publisherFundingAmount?: bigint;
37
+ };
38
+
30
39
  export class PublisherManager<UtilsType extends L1TxUtils = L1TxUtils> {
31
40
  private log: Logger;
32
- private config: { publisherAllowInvalidStates?: boolean };
41
+ private config: PublisherManagerConfig;
42
+ private static readonly FUNDING_CHECK_INTERVAL_MS = 2 * 60 * 1000;
43
+ private funder?: UtilsType;
44
+ private fundingPromise?: RunningPromise;
33
45
 
34
46
  constructor(
35
47
  private publishers: UtilsType[],
36
- config: { publisherAllowInvalidStates?: boolean },
37
- bindings?: LoggerBindings,
48
+ config: PublisherManagerConfig,
49
+ opts?: { bindings?: LoggerBindings; funder?: UtilsType },
38
50
  ) {
39
- this.log = createLogger('publisher:manager', bindings);
51
+ this.funder = opts?.funder;
52
+ this.log = createLogger('publisher:manager', opts?.bindings);
40
53
  this.log.info(`PublisherManager initialized with ${publishers.length} publishers.`);
41
54
  this.publishers = publishers;
42
- this.config = pick(config, 'publisherAllowInvalidStates');
55
+ this.config = pick(config, 'publisherAllowInvalidStates', 'publisherFundingThreshold', 'publisherFundingAmount');
56
+
57
+ const hasThreshold = this.config.publisherFundingThreshold !== undefined;
58
+ const hasAmount = this.config.publisherFundingAmount !== undefined;
59
+ if (hasThreshold !== hasAmount) {
60
+ this.log.warn(`Incomplete funding config: both publisherFundingThreshold and publisherFundingAmount must be set`);
61
+ }
62
+
63
+ if (this.funder) {
64
+ const funderAddress = this.funder.getSenderAddress();
65
+ if (publishers.some(p => p.getSenderAddress().equals(funderAddress))) {
66
+ this.log.error(`Funding account ${funderAddress} is also a publisher, disabling funding to avoid self-funding`);
67
+ this.funder = undefined;
68
+ }
69
+ }
43
70
  }
44
71
 
45
- /** Loads the state of all publishers and resumes monitoring any pending txs */
46
- public async loadState(): Promise<void> {
47
- await Promise.all(this.publishers.map(pub => pub.loadStateAndResumeMonitoring()));
72
+ /** Loads the state of all publishers and the funder, and starts periodic funding checks. */
73
+ public async start(): Promise<void> {
74
+ await Promise.all([
75
+ ...this.publishers.map(pub => pub.loadStateAndResumeMonitoring()),
76
+ this.funder?.loadStateAndResumeMonitoring(),
77
+ ]);
78
+
79
+ if (
80
+ this.funder &&
81
+ this.config.publisherFundingThreshold !== undefined &&
82
+ this.config.publisherFundingAmount !== undefined
83
+ ) {
84
+ this.fundingPromise = new RunningPromise(
85
+ () => this.triggerFundingIfNeeded(),
86
+ this.log,
87
+ PublisherManager.FUNDING_CHECK_INTERVAL_MS,
88
+ );
89
+ this.fundingPromise.start();
90
+ }
91
+ }
92
+
93
+ /** Stops the funding loop and interrupts all publishers. */
94
+ public async stop(): Promise<void> {
95
+ await this.fundingPromise?.stop();
96
+ this.publishers.forEach(pub => pub.interrupt());
97
+ this.funder?.interrupt();
48
98
  }
49
99
 
50
100
  // Finds and prioritises available publishers based on
@@ -102,7 +152,52 @@ export class PublisherManager<UtilsType extends L1TxUtils = L1TxUtils> {
102
152
  return sortedPublishers[0].publisher;
103
153
  }
104
154
 
105
- public interrupt() {
106
- this.publishers.forEach(pub => pub.interrupt());
155
+ /** Check all publisher balances and fund those below threshold. */
156
+ private async triggerFundingIfNeeded(): Promise<void> {
157
+ const { funder, config } = this;
158
+ if (!funder || config.publisherFundingThreshold === undefined || config.publisherFundingAmount === undefined) {
159
+ return;
160
+ }
161
+
162
+ const allBalances = await Promise.all(
163
+ this.publishers.map(async pub => ({ balance: await pub.getSenderBalance(), publisher: pub })),
164
+ );
165
+ const lowBalance = allBalances.filter(p => p.balance < config.publisherFundingThreshold!);
166
+ if (lowBalance.length === 0) {
167
+ return;
168
+ }
169
+
170
+ const fundingAmount = config.publisherFundingAmount!;
171
+ const funderBalance = await funder.getSenderBalance();
172
+
173
+ if (funderBalance < 10n * fundingAmount) {
174
+ this.log.warn(`Funding account balance is low`, { funderBalance, threshold: 10n * fundingAmount });
175
+ }
176
+ const affordableCount = Number(funderBalance / fundingAmount);
177
+ if (affordableCount === 0) {
178
+ this.log.error(`Funding account balance too low to fund any publisher`, { funderBalance, fundingAmount });
179
+ return;
180
+ }
181
+ if (affordableCount < lowBalance.length) {
182
+ this.log.warn(`Funder can only afford ${affordableCount}/${lowBalance.length} publishers`, {
183
+ funderBalance,
184
+ fundingAmount,
185
+ });
186
+ }
187
+
188
+ const toFund = lowBalance.slice(0, affordableCount).map(p => p.publisher);
189
+ await this.fundPublishers(toFund);
190
+ }
191
+
192
+ /** Fund publishers via a single Multicall3 aggregate3Value transaction. */
193
+ private async fundPublishers(publishers: UtilsType[]): Promise<void> {
194
+ const fundingAmount = this.config.publisherFundingAmount!;
195
+ const calls = publishers.map(pub => ({
196
+ to: pub.getSenderAddress().toString(),
197
+ value: fundingAmount,
198
+ }));
199
+
200
+ await Multicall3.forwardValue(calls, this.funder!, this.log);
201
+ this.log.info(`Funded ${publishers.length} publishers`);
107
202
  }
108
203
  }
@@ -85,10 +85,12 @@ export class EthCheatCodes {
85
85
  }
86
86
 
87
87
  /**
88
- * Get the current timestamp
89
- * @returns The current timestamp
88
+ * Get the timestamp of the latest mined L1 block.
89
+ * Note: this is NOT the current time — it's the discrete timestamp of the last block.
90
+ * Between blocks, the actual chain time advances but no new block reflects it.
91
+ * @returns The latest block timestamp in seconds
90
92
  */
91
- public async timestamp(): Promise<number> {
93
+ public async lastBlockTimestamp(): Promise<number> {
92
94
  const res = await this.doRpcCall('eth_getBlockByNumber', ['latest', true]);
93
95
  return parseInt(res.timestamp, 16);
94
96
  }
@@ -552,7 +554,7 @@ export class EthCheatCodes {
552
554
  }
553
555
 
554
556
  public async syncDateProvider() {
555
- const timestamp = await this.timestamp();
557
+ const timestamp = await this.lastBlockTimestamp();
556
558
  if ('setTime' in this.dateProvider) {
557
559
  this.dateProvider.setTime(timestamp * 1000);
558
560
  }
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { makeBackoff, retry } from '@aztec/foundation/retry';
3
+ import type { TestDateProvider } from '@aztec/foundation/timer';
3
4
  import { fileURLToPath } from '@aztec/foundation/url';
4
5
 
5
6
  import { type ChildProcess, spawn } from 'child_process';
@@ -33,6 +34,12 @@ export async function startAnvil(
33
34
  * L1-finality-based logic work without needing hundreds of mined blocks.
34
35
  */
35
36
  slotsInAnEpoch?: number;
37
+ /**
38
+ * If provided, the date provider will be synced to anvil's block time on every mined block.
39
+ * This keeps the dateProvider in lockstep with anvil's chain time, avoiding drift between
40
+ * the wall clock and the L1 chain when computing L1 slot timestamps.
41
+ */
42
+ dateProvider?: TestDateProvider;
36
43
  } = {},
37
44
  ): Promise<{ anvil: Anvil; methodCalls?: string[]; rpcUrl: string; stop: () => Promise<void> }> {
38
45
  const anvilBinary = resolve(dirname(fileURLToPath(import.meta.url)), '../../', 'scripts/anvil_kill_wrapper.sh');
@@ -108,12 +115,15 @@ export async function startAnvil(
108
115
  child.once('close', onClose);
109
116
  });
110
117
 
111
- // Continue piping for logging / method-call capture after startup.
112
- if (logger || opts.captureMethodCalls) {
118
+ // Continue piping for logging, method-call capture, and/or dateProvider sync after startup.
119
+ if (logger || opts.captureMethodCalls || opts.dateProvider) {
113
120
  child.stdout?.on('data', (data: Buffer) => {
114
121
  const text = data.toString();
115
122
  logger?.debug(text.trim());
116
123
  methodCalls?.push(...(text.match(/eth_[^\s]+/g) || []));
124
+ if (opts.dateProvider) {
125
+ syncDateProviderFromAnvilOutput(text, opts.dateProvider);
126
+ }
117
127
  });
118
128
  child.stderr?.on('data', (data: Buffer) => {
119
129
  logger?.debug(data.toString().trim());
@@ -160,6 +170,19 @@ export async function startAnvil(
160
170
  return { anvil: anvilObj, methodCalls, stop, rpcUrl: `http://127.0.0.1:${port}` };
161
171
  }
162
172
 
173
+ /** Extracts block time from anvil stdout and syncs the dateProvider. */
174
+ function syncDateProviderFromAnvilOutput(text: string, dateProvider: TestDateProvider): void {
175
+ // Anvil logs mined blocks as:
176
+ // Block Time: "Fri, 20 Mar 2026 02:10:46 +0000"
177
+ const match = text.match(/Block Time:\s*"([^"]+)"/);
178
+ if (match) {
179
+ const blockTimeMs = new Date(match[1]).getTime();
180
+ if (!isNaN(blockTimeMs)) {
181
+ dateProvider.setTime(blockTimeMs);
182
+ }
183
+ }
184
+ }
185
+
163
186
  /** Send SIGTERM, wait up to 5 s, then SIGKILL. All timers are always cleared. */
164
187
  function killChild(child: ChildProcess): Promise<void> {
165
188
  return new Promise<void>(resolve => {