@@ -130,8 +130,8 @@ export class BlockStore {
130
130
* @returns The requested L2 blocks
131
131
*/
132
132
async * getBlocks ( start : number , limit : number ) : AsyncIterableIterator < PublishedL2Block > {
133
- for await ( const blockStorage of this . #blocks. valuesAsync ( this . #computeBlockRange( start , limit ) ) ) {
134
- const block = await this . getBlockFromBlockStorage ( blockStorage ) ;
133
+ for await ( const [ blockNumber , blockStorage ] of this . #blocks. entriesAsync ( this . #computeBlockRange( start , limit ) ) ) {
134
+ const block = await this . getBlockFromBlockStorage ( blockNumber , blockStorage ) ;
135
135
if ( block ) {
136
136
yield block ;
137
137
}
@@ -148,7 +148,7 @@ export class BlockStore {
148
148
if ( ! blockStorage || ! blockStorage . header ) {
149
149
return Promise . resolve ( undefined ) ;
150
150
}
151
- return this . getBlockFromBlockStorage ( blockStorage ) ;
151
+ return this . getBlockFromBlockStorage ( blockNumber , blockStorage ) ;
152
152
}
153
153
154
154
/**
@@ -158,12 +158,18 @@ export class BlockStore {
158
158
* @returns The requested L2 block headers
159
159
*/
160
160
async * getBlockHeaders ( start : number , limit : number ) : AsyncIterableIterator < BlockHeader > {
161
- for await ( const blockStorage of this . #blocks. valuesAsync ( this . #computeBlockRange( start , limit ) ) ) {
162
- yield BlockHeader . fromBuffer ( blockStorage . header ) ;
161
+ for await ( const [ blockNumber , blockStorage ] of this . #blocks. entriesAsync ( this . #computeBlockRange( start , limit ) ) ) {
162
+ const header = BlockHeader . fromBuffer ( blockStorage . header ) ;
163
+ if ( header . getBlockNumber ( ) !== blockNumber ) {
164
+ throw new Error (
165
+ `Block number mismatch when retrieving block header from archive (expected ${ blockNumber } but got ${ header . getBlockNumber ( ) } )` ,
166
+ ) ;
167
+ }
168
+ yield header ;
163
169
}
164
170
}
165
171
166
- private async getBlockFromBlockStorage ( blockStorage : BlockStorage ) {
172
+ private async getBlockFromBlockStorage ( blockNumber : number , blockStorage : BlockStorage ) {
167
173
const header = BlockHeader . fromBuffer ( blockStorage . header ) ;
168
174
const archive = AppendOnlyTreeSnapshot . fromBuffer ( blockStorage . archive ) ;
169
175
const blockHash = ( await header . hash ( ) ) . toString ( ) ;
@@ -174,6 +180,13 @@ export class BlockStore {
174
180
}
175
181
const body = Body . fromBuffer ( blockBodyBuffer ) ;
176
182
const block = new L2Block ( archive , header , body ) ;
183
+ if ( block . number !== blockNumber ) {
184
+ throw new Error (
185
+ `Block number mismatch when retrieving block from archive (expected ${ blockNumber } but got ${
186
+ block . number
187
+ } with hash ${ await block . hash ( ) } )`,
188
+ ) ;
189
+ }
177
190
const signatures = blockStorage . signatures . map ( Signature . fromBuffer ) ;
178
191
return { block, l1 : blockStorage . l1 , signatures } ;
179
192
}
0 commit comments