@@ -29,8 +29,8 @@ describe('loadLogsForRange', () => {
2929 return SiloedTag . compute ( tag , app ) ;
3030 }
3131
32- function makeLog ( txHash : TxHash , blockHash : L2BlockHash , blockNumber : number , tag : Fr ) {
33- return new TxScopedL2Log ( txHash , 0 , 0 , BlockNumber ( blockNumber ) , blockHash , PrivateLog . random ( tag ) ) ;
32+ function makeLog ( txHash : TxHash , blockHash : L2BlockHash , blockNumber : number , tag : SiloedTag ) {
33+ return new TxScopedL2Log ( txHash , 0 , 0 , BlockNumber ( blockNumber ) , blockHash , PrivateLog . random ( tag . value ) ) ;
3434 }
3535
3636 beforeAll ( async ( ) => {
@@ -64,7 +64,7 @@ describe('loadLogsForRange', () => {
6464
6565 aztecNode . getLogsByTags . mockImplementation ( ( tags : Fr [ ] ) => {
6666 return Promise . resolve (
67- tags . map ( ( t : Fr ) => ( t . equals ( tag . value ) ? [ makeLog ( txHash , blockHash , blockNumber , tag . value ) ] : [ ] ) ) ,
67+ tags . map ( ( t : Fr ) => ( t . equals ( tag . value ) ? [ makeLog ( txHash , blockHash , blockNumber , tag ) ] : [ ] ) ) ,
6868 ) ;
6969 } ) ;
7070
@@ -92,7 +92,7 @@ describe('loadLogsForRange', () => {
9292 const tag = await computeSiloedTagForIndex ( index ) ;
9393 const blockHeader = makeBlockHeader ( 0 , { timestamp } ) ;
9494
95- const privateLog = makeLog ( txHash , blockHash , blockNumber , tag . value ) ;
95+ const privateLog = makeLog ( txHash , blockHash , blockNumber , tag ) ;
9696 const publicLog = new TxScopedL2Log (
9797 TxHash . random ( ) ,
9898 0 ,
@@ -140,9 +140,9 @@ describe('loadLogsForRange', () => {
140140 return Promise . resolve (
141141 tags . map ( ( t : Fr ) => {
142142 if ( t . equals ( tag1 . value ) ) {
143- return [ makeLog ( txHash1 , blockHash1 , blockNumber1 , tag1 . value ) ] ;
143+ return [ makeLog ( txHash1 , blockHash1 , blockNumber1 , tag1 ) ] ;
144144 } else if ( t . equals ( tag2 . value ) ) {
145- return [ makeLog ( txHash2 , blockHash2 , blockNumber2 , tag2 . value ) ] ;
145+ return [ makeLog ( txHash2 , blockHash2 , blockNumber2 , tag2 ) ] ;
146146 }
147147 return [ ] ;
148148 } ) ,
@@ -186,9 +186,9 @@ describe('loadLogsForRange', () => {
186186 return Promise . resolve (
187187 tags . map ( ( t : Fr ) => {
188188 if ( t . equals ( tag1 . value ) ) {
189- return [ makeLog ( txHash1 , blockHash , blockNumber , tag1 . value ) ] ;
189+ return [ makeLog ( txHash1 , blockHash , blockNumber , tag1 ) ] ;
190190 } else if ( t . equals ( tag2 . value ) ) {
191- return [ makeLog ( txHash2 , blockHash , blockNumber , tag2 . value ) ] ;
191+ return [ makeLog ( txHash2 , blockHash , blockNumber , tag2 ) ] ;
192192 }
193193 return [ ] ;
194194 } ) ,
@@ -230,9 +230,9 @@ describe('loadLogsForRange', () => {
230230 return Promise . resolve (
231231 tags . map ( ( t : Fr ) => {
232232 if ( t . equals ( tagAtStart . value ) ) {
233- return [ makeLog ( txHashAtStart , blockHash , 5 , tagAtStart . value ) ] ;
233+ return [ makeLog ( txHashAtStart , blockHash , 5 , tagAtStart ) ] ;
234234 } else if ( t . equals ( tagAtEnd . value ) ) {
235- return [ makeLog ( txHashAtEnd , blockHash , 6 , tagAtEnd . value ) ] ;
235+ return [ makeLog ( txHashAtEnd , blockHash , 6 , tagAtEnd ) ] ;
236236 }
237237 return [ ] ;
238238 } ) ,
@@ -254,26 +254,49 @@ describe('loadLogsForRange', () => {
254254 expect ( result [ 0 ] . log . txHash . equals ( txHashAtStart ) ) . toBe ( true ) ;
255255 } ) ;
256256
257- it ( 'throws error when block header is not found' , async ( ) => {
258- const txHash = TxHash . random ( ) ;
259- const blockHash = L2BlockHash . random ( ) ;
260- const blockNumber = 5 ;
261- const index = 3 ;
262- const tag = await computeSiloedTagForIndex ( index ) ;
257+ it ( 'ignores logs from reorged blocks' , async ( ) => {
258+ const txHashReorged = TxHash . random ( ) ;
259+ const txHashValid = TxHash . random ( ) ;
260+ const blockHashReorged = L2BlockHash . random ( ) ;
261+ const blockHashValid = L2BlockHash . random ( ) ;
262+ const blockNumberReorged = 5 ;
263+ const blockNumberValid = 6 ;
264+ const index1 = 3 ;
265+ const index2 = 4 ;
266+ const timestamp = 2000n ;
267+ const tag1 = await computeSiloedTagForIndex ( index1 ) ;
268+ const tag2 = await computeSiloedTagForIndex ( index2 ) ;
269+ const blockHeaderValid = makeBlockHeader ( 1 , { timestamp } ) ;
263270
264271 aztecNode . getLogsByTags . mockImplementation ( ( tags : Fr [ ] ) => {
265272 return Promise . resolve (
266- tags . map ( ( t : Fr ) => ( t . equals ( tag . value ) ? [ makeLog ( txHash , blockHash , blockNumber , tag . value ) ] : [ ] ) ) ,
273+ tags . map ( ( t : Fr ) => {
274+ if ( t . equals ( tag1 . value ) ) {
275+ return [ makeLog ( txHashReorged , blockHashReorged , blockNumberReorged , tag1 ) ] ;
276+ } else if ( t . equals ( tag2 . value ) ) {
277+ return [ makeLog ( txHashValid , blockHashValid , blockNumberValid , tag2 ) ] ;
278+ }
279+ return [ ] ;
280+ } ) ,
267281 ) ;
268282 } ) ;
269283
270- aztecNode . getBlockHeaderByHash . mockImplementation ( ( ) => {
284+ aztecNode . getBlockHeaderByHash . mockImplementation ( ( hash : Fr ) => {
285+ // Block header for reorged block is not found (returns undefined)
286+ if ( hash . toBigInt ( ) === blockHashReorged . toBigInt ( ) ) {
287+ return Promise . resolve ( undefined ) ;
288+ } else if ( hash . toBigInt ( ) === blockHashValid . toBigInt ( ) ) {
289+ return Promise . resolve ( blockHeaderValid ) ;
290+ }
271291 return Promise . resolve ( undefined ) ;
272292 } ) ;
273293
274- await expect ( loadLogsForRange ( secret , app , aztecNode , 0 , 10 , NON_INTERFERING_ANCHOR_BLOCK_NUMBER ) ) . rejects . toThrow (
275- 'not found when syncing logs. This could be a reorg.' ,
276- ) ;
294+ const result = await loadLogsForRange ( secret , app , aztecNode , 0 , 10 , NON_INTERFERING_ANCHOR_BLOCK_NUMBER ) ;
295+
296+ // Should only include the log from the valid block, ignoring the log from the reorged block
297+ expect ( result ) . toHaveLength ( 1 ) ;
298+ expect ( result [ 0 ] . log . txHash . equals ( txHashValid ) ) . toBe ( true ) ;
299+ expect ( result [ 0 ] . taggingIndex ) . toBe ( index2 ) ;
277300 } ) ;
278301
279302 it ( 'handles multiple logs at the same index' , async ( ) => {
@@ -294,10 +317,7 @@ describe('loadLogsForRange', () => {
294317 return Promise . resolve (
295318 tags . map ( ( t : Fr ) =>
296319 t . equals ( tag . value )
297- ? [
298- makeLog ( txHash1 , blockHash1 , blockNumber1 , tag . value ) ,
299- makeLog ( txHash2 , blockHash2 , blockNumber2 , tag . value ) ,
300- ]
320+ ? [ makeLog ( txHash1 , blockHash1 , blockNumber1 , tag ) , makeLog ( txHash2 , blockHash2 , blockNumber2 , tag ) ]
301321 : [ ] ,
302322 ) ,
303323 ) ;
@@ -340,9 +360,9 @@ describe('loadLogsForRange', () => {
340360 tags . map ( ( t : Fr ) =>
341361 t . equals ( tag . value )
342362 ? [
343- makeLog ( TxHash . random ( ) , blockHashBefore , anchorBlockNumber - 1 , tag . value ) ,
344- makeLog ( TxHash . random ( ) , blockHashAtAnchor , anchorBlockNumber , tag . value ) ,
345- makeLog ( TxHash . random ( ) , blockHashAfter , anchorBlockNumber + 1 , tag . value ) ,
363+ makeLog ( TxHash . random ( ) , blockHashBefore , anchorBlockNumber - 1 , tag ) ,
364+ makeLog ( TxHash . random ( ) , blockHashAtAnchor , anchorBlockNumber , tag ) ,
365+ makeLog ( TxHash . random ( ) , blockHashAfter , anchorBlockNumber + 1 , tag ) ,
346366 ]
347367 : [ ] ,
348368 ) ,
0 commit comments