@aztec/ethereum 2.0.0-rc.26 → 2.0.0-rc.28
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/contracts/rollup.d.ts +6 -3
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +14 -0
- package/dest/test/chain_monitor.d.ts +4 -0
- package/dest/test/chain_monitor.d.ts.map +1 -1
- package/dest/test/chain_monitor.js +55 -9
- package/package.json +5 -5
- package/src/contracts/rollup.ts +23 -2
- package/src/test/chain_monitor.ts +62 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
2
|
import type { ViemSignature } from '@aztec/foundation/eth-signature';
|
|
3
3
|
import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
|
|
4
|
-
import { type Account, type GetContractReturnType, type Hex, type StateOverride } from 'viem';
|
|
4
|
+
import { type Account, type GetContractReturnType, type Hex, type StateOverride, type WatchContractEventReturnType } from 'viem';
|
|
5
5
|
import type { DeployL1ContractsReturnType } from '../deploy_l1_contracts.js';
|
|
6
6
|
import type { L1ContractAddresses } from '../l1_contract_addresses.js';
|
|
7
7
|
import type { L1ReaderConfig } from '../l1_reader.js';
|
|
@@ -244,7 +244,10 @@ export declare class RollupContract {
|
|
|
244
244
|
listenToSlasherChanged(callback: (args: {
|
|
245
245
|
oldSlasher: `0x${string}`;
|
|
246
246
|
newSlasher: `0x${string}`;
|
|
247
|
-
}) => unknown):
|
|
247
|
+
}) => unknown): WatchContractEventReturnType;
|
|
248
|
+
listenToBlockInvalidated(callback: (args: {
|
|
249
|
+
blockNumber: bigint;
|
|
250
|
+
}) => unknown): WatchContractEventReturnType;
|
|
248
251
|
getSlashEvents(l1BlockHash: Hex): Promise<{
|
|
249
252
|
amount: bigint;
|
|
250
253
|
attester: EthAddress;
|
|
@@ -252,6 +255,6 @@ export declare class RollupContract {
|
|
|
252
255
|
listenToSlash(callback: (args: {
|
|
253
256
|
amount: bigint;
|
|
254
257
|
attester: EthAddress;
|
|
255
|
-
}) => unknown):
|
|
258
|
+
}) => unknown): WatchContractEventReturnType;
|
|
256
259
|
}
|
|
257
260
|
//# sourceMappingURL=rollup.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAI1D,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,qBAAqB,EAC1B,KAAK,GAAG,EACR,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"rollup.d.ts","sourceRoot":"","sources":["../../src/contracts/rollup.ts"],"names":[],"mappings":"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"}
|
package/dest/contracts/rollup.js
CHANGED
|
@@ -626,6 +626,20 @@ export class RollupContract {
|
|
|
626
626
|
}
|
|
627
627
|
});
|
|
628
628
|
}
|
|
629
|
+
listenToBlockInvalidated(callback) {
|
|
630
|
+
return this.rollup.watchEvent.BlockInvalidated({}, {
|
|
631
|
+
onLogs: (logs)=>{
|
|
632
|
+
for (const log of logs){
|
|
633
|
+
const args = log.args;
|
|
634
|
+
if (args.blockNumber !== undefined) {
|
|
635
|
+
callback({
|
|
636
|
+
blockNumber: args.blockNumber
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
});
|
|
642
|
+
}
|
|
629
643
|
async getSlashEvents(l1BlockHash) {
|
|
630
644
|
const events = await this.rollup.getEvents.Slashed({}, {
|
|
631
645
|
blockHash: l1BlockHash,
|
|
@@ -10,6 +10,7 @@ export type ChainMonitorEventMap = {
|
|
|
10
10
|
'l2-block': [{
|
|
11
11
|
l2BlockNumber: number;
|
|
12
12
|
l1BlockNumber: number;
|
|
13
|
+
l2SlotNumber: number;
|
|
13
14
|
timestamp: bigint;
|
|
14
15
|
}];
|
|
15
16
|
'l2-block-proven': [{
|
|
@@ -64,5 +65,8 @@ export declare class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
64
65
|
protected safeRun(): void;
|
|
65
66
|
run(force?: boolean): Promise<this>;
|
|
66
67
|
waitUntilL2Slot(slot: number | bigint): Promise<void>;
|
|
68
|
+
waitUntilL1Block(block: number | bigint): Promise<void>;
|
|
69
|
+
waitUntilL1Timestamp(timestamp: number | bigint): Promise<void>;
|
|
70
|
+
waitUntilL2Block(l2BlockNumber: number | bigint): Promise<void>;
|
|
67
71
|
}
|
|
68
72
|
//# sourceMappingURL=chain_monitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain_monitor.d.ts","sourceRoot":"","sources":["../../src/test/chain_monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"chain_monitor.d.ts","sourceRoot":"","sources":["../../src/test/chain_monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxG,iBAAiB,EAAE,CAAC;QAAE,mBAAmB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/F,aAAa,EAAE,CAAC;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,UAAU,EAAE,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAChG,SAAS,EAAE,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D,CAAC;AAEF,8GAA8G;AAC9G,qBAAa,YAAa,SAAQ,YAAY,CAAC,oBAAoB,CAAC;IAyBhE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IA3B7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;IACtC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO,CAAC,OAAO,CAAiC;IAEhD,8BAA8B;IACvB,aAAa,EAAG,MAAM,CAAC;IAC9B,8BAA8B;IACvB,aAAa,EAAG,MAAM,CAAC;IAC9B,qCAAqC;IAC9B,mBAAmB,EAAG,MAAM,CAAC;IACpC,4CAA4C;IACrC,gBAAgB,EAAG,MAAM,CAAC;IACjC,2CAA2C;IACpC,sBAAsB,EAAG,MAAM,CAAC;IACvC,wDAAwD;IACjD,eAAe,EAAE,MAAM,CAAK;IACnC,8BAA8B;IACvB,aAAa,EAAG,MAAM,CAAC;IAC9B,6BAA6B;IACtB,YAAY,EAAG,MAAM,CAAC;gBAGV,MAAM,EAAE,cAAc,EACtB,YAAY,GAAE,YAAiC,EAC/C,MAAM,yCAA8C,EACpD,UAAU,SAAM;IAMnC,KAAK;IAQC,IAAI;YAaI,QAAQ;IAQtB,SAAS,CAAC,OAAO;IAcX,GAAG,CAAC,KAAK,UAAQ;IAkFhB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrD,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/D,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAevE"}
|
|
@@ -72,11 +72,15 @@ import { EventEmitter } from 'events';
|
|
|
72
72
|
return this;
|
|
73
73
|
}
|
|
74
74
|
this.l1BlockNumber = newL1BlockNumber;
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
const [l2SlotNumber, l2Epoch, l1block] = await Promise.all([
|
|
76
|
+
this.rollup.getSlotNumber(),
|
|
77
|
+
this.rollup.getCurrentEpoch(),
|
|
78
|
+
this.l1Client.getBlock({
|
|
79
|
+
blockNumber: BigInt(newL1BlockNumber),
|
|
80
|
+
includeTransactions: false
|
|
81
|
+
})
|
|
82
|
+
]);
|
|
83
|
+
const timestamp = l1block.timestamp;
|
|
80
84
|
const timestampString = new Date(Number(timestamp) * 1000).toTimeString().split(' ')[0];
|
|
81
85
|
this.emit('l1-block', {
|
|
82
86
|
l1BlockNumber: newL1BlockNumber,
|
|
@@ -92,6 +96,7 @@ import { EventEmitter } from 'events';
|
|
|
92
96
|
this.emit('l2-block', {
|
|
93
97
|
l2BlockNumber: newL2BlockNumber,
|
|
94
98
|
l1BlockNumber: newL1BlockNumber,
|
|
99
|
+
l2SlotNumber: Number(l2SlotNumber),
|
|
95
100
|
timestamp
|
|
96
101
|
});
|
|
97
102
|
}
|
|
@@ -117,10 +122,6 @@ import { EventEmitter } from 'events';
|
|
|
117
122
|
l1BlockNumber: newL1BlockNumber
|
|
118
123
|
});
|
|
119
124
|
}
|
|
120
|
-
const [l2SlotNumber, l2Epoch] = await Promise.all([
|
|
121
|
-
this.rollup.getSlotNumber(),
|
|
122
|
-
this.rollup.getCurrentEpoch()
|
|
123
|
-
]);
|
|
124
125
|
let committee;
|
|
125
126
|
if (l2Epoch !== this.l2EpochNumber) {
|
|
126
127
|
this.l2EpochNumber = l2Epoch;
|
|
@@ -167,4 +168,49 @@ import { EventEmitter } from 'events';
|
|
|
167
168
|
this.on('l2-slot', listener);
|
|
168
169
|
});
|
|
169
170
|
}
|
|
171
|
+
waitUntilL1Block(block) {
|
|
172
|
+
const targetBlock = typeof block === 'bigint' ? block.valueOf() : block;
|
|
173
|
+
if (this.l1BlockNumber >= targetBlock) {
|
|
174
|
+
return Promise.resolve();
|
|
175
|
+
}
|
|
176
|
+
return new Promise((resolve)=>{
|
|
177
|
+
const listener = (data)=>{
|
|
178
|
+
if (data.l1BlockNumber >= targetBlock) {
|
|
179
|
+
this.off('l1-block', listener);
|
|
180
|
+
resolve();
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
this.on('l1-block', listener);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
waitUntilL1Timestamp(timestamp) {
|
|
187
|
+
const targetTimestamp = typeof timestamp === 'bigint' ? timestamp.valueOf() : timestamp;
|
|
188
|
+
if (this.l1BlockNumber >= targetTimestamp) {
|
|
189
|
+
return Promise.resolve();
|
|
190
|
+
}
|
|
191
|
+
return new Promise((resolve)=>{
|
|
192
|
+
const listener = (data)=>{
|
|
193
|
+
if (data.timestamp >= targetTimestamp) {
|
|
194
|
+
this.off('l1-block', listener);
|
|
195
|
+
resolve();
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
this.on('l1-block', listener);
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
waitUntilL2Block(l2BlockNumber) {
|
|
202
|
+
const targetBlock = typeof l2BlockNumber === 'bigint' ? l2BlockNumber.valueOf() : l2BlockNumber;
|
|
203
|
+
if (this.l2BlockNumber >= targetBlock) {
|
|
204
|
+
return Promise.resolve();
|
|
205
|
+
}
|
|
206
|
+
return new Promise((resolve)=>{
|
|
207
|
+
const listener = (data)=>{
|
|
208
|
+
if (data.l2BlockNumber >= targetBlock) {
|
|
209
|
+
this.off('l2-block', listener);
|
|
210
|
+
resolve();
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
this.on('l2-block', listener);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
170
216
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/ethereum",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.28",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -31,10 +31,10 @@
|
|
|
31
31
|
"../package.common.json"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@aztec/blob-lib": "2.0.0-rc.
|
|
35
|
-
"@aztec/constants": "2.0.0-rc.
|
|
36
|
-
"@aztec/foundation": "2.0.0-rc.
|
|
37
|
-
"@aztec/l1-artifacts": "2.0.0-rc.
|
|
34
|
+
"@aztec/blob-lib": "2.0.0-rc.28",
|
|
35
|
+
"@aztec/constants": "2.0.0-rc.28",
|
|
36
|
+
"@aztec/foundation": "2.0.0-rc.28",
|
|
37
|
+
"@aztec/l1-artifacts": "2.0.0-rc.28",
|
|
38
38
|
"@viem/anvil": "^0.0.10",
|
|
39
39
|
"dotenv": "^16.0.3",
|
|
40
40
|
"lodash.chunk": "^4.2.0",
|
package/src/contracts/rollup.ts
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
type GetContractReturnType,
|
|
11
11
|
type Hex,
|
|
12
12
|
type StateOverride,
|
|
13
|
+
type WatchContractEventReturnType,
|
|
13
14
|
encodeFunctionData,
|
|
14
15
|
getContract,
|
|
15
16
|
hexToBigInt,
|
|
@@ -791,7 +792,9 @@ export class RollupContract {
|
|
|
791
792
|
});
|
|
792
793
|
}
|
|
793
794
|
|
|
794
|
-
public listenToSlasherChanged(
|
|
795
|
+
public listenToSlasherChanged(
|
|
796
|
+
callback: (args: { oldSlasher: `0x${string}`; newSlasher: `0x${string}` }) => unknown,
|
|
797
|
+
): WatchContractEventReturnType {
|
|
795
798
|
return this.rollup.watchEvent.SlasherUpdated(
|
|
796
799
|
{},
|
|
797
800
|
{
|
|
@@ -807,6 +810,22 @@ export class RollupContract {
|
|
|
807
810
|
);
|
|
808
811
|
}
|
|
809
812
|
|
|
813
|
+
public listenToBlockInvalidated(callback: (args: { blockNumber: bigint }) => unknown): WatchContractEventReturnType {
|
|
814
|
+
return this.rollup.watchEvent.BlockInvalidated(
|
|
815
|
+
{},
|
|
816
|
+
{
|
|
817
|
+
onLogs: logs => {
|
|
818
|
+
for (const log of logs) {
|
|
819
|
+
const args = log.args;
|
|
820
|
+
if (args.blockNumber !== undefined) {
|
|
821
|
+
callback({ blockNumber: args.blockNumber });
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
},
|
|
825
|
+
},
|
|
826
|
+
);
|
|
827
|
+
}
|
|
828
|
+
|
|
810
829
|
public async getSlashEvents(l1BlockHash: Hex): Promise<{ amount: bigint; attester: EthAddress }[]> {
|
|
811
830
|
const events = await this.rollup.getEvents.Slashed({}, { blockHash: l1BlockHash, strict: true });
|
|
812
831
|
return events.map(event => ({
|
|
@@ -815,7 +834,9 @@ export class RollupContract {
|
|
|
815
834
|
}));
|
|
816
835
|
}
|
|
817
836
|
|
|
818
|
-
public listenToSlash(
|
|
837
|
+
public listenToSlash(
|
|
838
|
+
callback: (args: { amount: bigint; attester: EthAddress }) => unknown,
|
|
839
|
+
): WatchContractEventReturnType {
|
|
819
840
|
return this.rollup.watchEvent.Slashed(
|
|
820
841
|
{},
|
|
821
842
|
{
|
|
@@ -10,7 +10,7 @@ import type { ViemClient } from '../types.js';
|
|
|
10
10
|
|
|
11
11
|
export type ChainMonitorEventMap = {
|
|
12
12
|
'l1-block': [{ l1BlockNumber: number; timestamp: bigint }];
|
|
13
|
-
'l2-block': [{ l2BlockNumber: number; l1BlockNumber: number; timestamp: bigint }];
|
|
13
|
+
'l2-block': [{ l2BlockNumber: number; l1BlockNumber: number; l2SlotNumber: number; timestamp: bigint }];
|
|
14
14
|
'l2-block-proven': [{ l2ProvenBlockNumber: number; l1BlockNumber: number; timestamp: bigint }];
|
|
15
15
|
'l2-messages': [{ totalL2Messages: number; l1BlockNumber: number }];
|
|
16
16
|
'l2-epoch': [{ l2EpochNumber: number; timestamp: bigint; committee: EthAddress[] | undefined }];
|
|
@@ -102,8 +102,13 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
102
102
|
}
|
|
103
103
|
this.l1BlockNumber = newL1BlockNumber;
|
|
104
104
|
|
|
105
|
-
const
|
|
106
|
-
|
|
105
|
+
const [l2SlotNumber, l2Epoch, l1block] = await Promise.all([
|
|
106
|
+
this.rollup.getSlotNumber(),
|
|
107
|
+
this.rollup.getCurrentEpoch(),
|
|
108
|
+
this.l1Client.getBlock({ blockNumber: BigInt(newL1BlockNumber), includeTransactions: false }),
|
|
109
|
+
]);
|
|
110
|
+
|
|
111
|
+
const timestamp = l1block.timestamp;
|
|
107
112
|
const timestampString = new Date(Number(timestamp) * 1000).toTimeString().split(' ')[0];
|
|
108
113
|
|
|
109
114
|
this.emit('l1-block', { l1BlockNumber: newL1BlockNumber, timestamp });
|
|
@@ -115,7 +120,12 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
115
120
|
msg += ` with new L2 block ${newL2BlockNumber} for epoch ${epochNumber}`;
|
|
116
121
|
this.l2BlockNumber = newL2BlockNumber;
|
|
117
122
|
this.l2BlockTimestamp = timestamp;
|
|
118
|
-
this.emit('l2-block', {
|
|
123
|
+
this.emit('l2-block', {
|
|
124
|
+
l2BlockNumber: newL2BlockNumber,
|
|
125
|
+
l1BlockNumber: newL1BlockNumber,
|
|
126
|
+
l2SlotNumber: Number(l2SlotNumber),
|
|
127
|
+
timestamp,
|
|
128
|
+
});
|
|
119
129
|
}
|
|
120
130
|
|
|
121
131
|
const newL2ProvenBlockNumber = Number(await this.rollup.getProvenBlockNumber());
|
|
@@ -139,8 +149,6 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
139
149
|
this.emit('l2-messages', { totalL2Messages: newTotalL2Messages, l1BlockNumber: newL1BlockNumber });
|
|
140
150
|
}
|
|
141
151
|
|
|
142
|
-
const [l2SlotNumber, l2Epoch] = await Promise.all([this.rollup.getSlotNumber(), this.rollup.getCurrentEpoch()]);
|
|
143
|
-
|
|
144
152
|
let committee: EthAddress[] | undefined;
|
|
145
153
|
if (l2Epoch !== this.l2EpochNumber) {
|
|
146
154
|
this.l2EpochNumber = l2Epoch;
|
|
@@ -184,4 +192,52 @@ export class ChainMonitor extends EventEmitter<ChainMonitorEventMap> {
|
|
|
184
192
|
this.on('l2-slot', listener);
|
|
185
193
|
});
|
|
186
194
|
}
|
|
195
|
+
|
|
196
|
+
public waitUntilL1Block(block: number | bigint): Promise<void> {
|
|
197
|
+
const targetBlock = typeof block === 'bigint' ? block.valueOf() : block;
|
|
198
|
+
if (this.l1BlockNumber >= targetBlock) {
|
|
199
|
+
return Promise.resolve();
|
|
200
|
+
}
|
|
201
|
+
return new Promise(resolve => {
|
|
202
|
+
const listener = (data: { l1BlockNumber: number; timestamp: bigint }) => {
|
|
203
|
+
if (data.l1BlockNumber >= targetBlock) {
|
|
204
|
+
this.off('l1-block', listener);
|
|
205
|
+
resolve();
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
this.on('l1-block', listener);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
public waitUntilL1Timestamp(timestamp: number | bigint): Promise<void> {
|
|
213
|
+
const targetTimestamp = typeof timestamp === 'bigint' ? timestamp.valueOf() : timestamp;
|
|
214
|
+
if (this.l1BlockNumber >= targetTimestamp) {
|
|
215
|
+
return Promise.resolve();
|
|
216
|
+
}
|
|
217
|
+
return new Promise(resolve => {
|
|
218
|
+
const listener = (data: { l1BlockNumber: number; timestamp: bigint }) => {
|
|
219
|
+
if (data.timestamp >= targetTimestamp) {
|
|
220
|
+
this.off('l1-block', listener);
|
|
221
|
+
resolve();
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
this.on('l1-block', listener);
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public waitUntilL2Block(l2BlockNumber: number | bigint): Promise<void> {
|
|
229
|
+
const targetBlock = typeof l2BlockNumber === 'bigint' ? l2BlockNumber.valueOf() : l2BlockNumber;
|
|
230
|
+
if (this.l2BlockNumber >= targetBlock) {
|
|
231
|
+
return Promise.resolve();
|
|
232
|
+
}
|
|
233
|
+
return new Promise(resolve => {
|
|
234
|
+
const listener = (data: { l2BlockNumber: number; timestamp: bigint }) => {
|
|
235
|
+
if (data.l2BlockNumber >= targetBlock) {
|
|
236
|
+
this.off('l2-block', listener);
|
|
237
|
+
resolve();
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
this.on('l2-block', listener);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
187
243
|
}
|