@aztec/p2p 1.0.0-nightly.20250708 → 1.0.0-nightly.20250709

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.
Files changed (36) hide show
  1. package/dest/client/interface.d.ts +1 -1
  2. package/dest/client/interface.d.ts.map +1 -1
  3. package/dest/client/p2p_client.d.ts +1 -1
  4. package/dest/client/p2p_client.d.ts.map +1 -1
  5. package/dest/client/p2p_client.js +11 -10
  6. package/dest/services/dummy_service.d.ts +1 -1
  7. package/dest/services/dummy_service.d.ts.map +1 -1
  8. package/dest/services/dummy_service.js +2 -2
  9. package/dest/services/libp2p/libp2p_service.d.ts +6 -6
  10. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  11. package/dest/services/libp2p/libp2p_service.js +29 -18
  12. package/dest/services/reqresp/interface.d.ts +7 -4
  13. package/dest/services/reqresp/interface.d.ts.map +1 -1
  14. package/dest/services/reqresp/interface.js +9 -3
  15. package/dest/services/reqresp/protocols/tx.d.ts +11 -0
  16. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  17. package/dest/services/reqresp/protocols/tx.js +19 -6
  18. package/dest/services/reqresp/reqresp.d.ts +1 -1
  19. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  20. package/dest/services/service.d.ts +1 -1
  21. package/dest/services/service.d.ts.map +1 -1
  22. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  23. package/dest/services/tx_collection/fast_tx_collection.js +5 -1
  24. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  25. package/dest/services/tx_collection/slow_tx_collection.js +5 -1
  26. package/package.json +14 -14
  27. package/src/client/interface.ts +1 -1
  28. package/src/client/p2p_client.ts +14 -13
  29. package/src/services/dummy_service.ts +3 -3
  30. package/src/services/libp2p/libp2p_service.ts +36 -19
  31. package/src/services/reqresp/interface.ts +12 -4
  32. package/src/services/reqresp/protocols/tx.ts +23 -6
  33. package/src/services/reqresp/reqresp.ts +3 -3
  34. package/src/services/service.ts +1 -1
  35. package/src/services/tx_collection/fast_tx_collection.ts +8 -5
  36. package/src/services/tx_collection/slow_tx_collection.ts +8 -5
@@ -51,7 +51,7 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
51
51
  * @param pinnedPeerId - An optional peer id that will be used to request the tx from (in addition to other random peers).
52
52
  * @returns A list of transactions or undefined if the transactions are not found.
53
53
  */
54
- requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId): Promise<(Tx | undefined)[]>;
54
+ requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId): Promise<Tx[]>;
55
55
  /**
56
56
  * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
57
57
  * @param tx - The transaction.
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../src/client/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAEvE;;GAEG;AACH,oBAAY,cAAc;IACxB,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,OAAO,IAAA;IACP,OAAO,IAAA;CACR;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,KAAK,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,eAAe,EAAE,SAAS,CAAC;CAC5B;AAED;;IAEI;AACJ,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG;IAC9E;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D;;;;;OAKG;IAGH,4BAA4B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAEvE;;;;;OAKG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1E;;;QAGI;IACJ,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B;;;;QAII;IACJ,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC;;;;QAII;IACJ,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAE7D;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAEtE;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAErD;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAEhG;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;IAE7D;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAEtE,2DAA2D;IAC3D,iBAAiB,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAE/C,wDAAwD;IACxD,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC;;;OAGG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,OAAO,IAAI,OAAO,CAAC;IAEnB;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAEnC;;OAEG;IACH,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,+BAA+B;IAC/B,WAAW,IAAI,IAAI,CAAC;IAEpB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC,qBAAqB;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC"}
@@ -82,7 +82,7 @@ export declare class P2PClient<T extends P2PClientType = P2PClientType.Full> ext
82
82
  /**
83
83
  * Uses the batched Request Response protocol to request a set of transactions from the network.
84
84
  */
85
- requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<(Tx | undefined)[]>;
85
+ requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<Tx[]>;
86
86
  getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]>;
87
87
  getPendingTxCount(): Promise<number>;
88
88
  iteratePendingTxs(): AsyncIterableIterator<Tx>;
@@ -1 +1 @@
1
- {"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAsC,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,EAGV,aAAa,EAEb,kBAAkB,EAClB,MAAM,EAEP,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,KAAK,QAAQ,EAAW,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,eAAe,EAEpB,UAAU,EAGX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,GAAG,EAAkB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7E;;GAEG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAC,IAAI,CACjE,SAAQ,UACR,YAAW,GAAG,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;;IAqCvC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,aAAa;IAErB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IA3Cb,0HAA0H;IAC1H,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAAC,CAAyB;IAC7C,OAAO,CAAC,wBAAwB,CAAM;IACtC,OAAO,CAAC,wBAAwB,CAAM;IACtC,OAAO,CAAC,2BAA2B,CAAM;IAEzC,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,wBAAwB,CAA8B;IAC9D,OAAO,CAAC,wBAAwB,CAA8B;IAC9D,OAAO,CAAC,2BAA2B,CAA8B;IACjE,OAAO,CAAC,iBAAiB,CAA8B;IAEvD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAA6D;IAEpF,OAAO,CAAC,MAAM,CAAY;IAE1B,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;;;OAOG;gBAED,WAAW,EAAE,CAAC,EACN,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,aAAa,GAAG,kBAAkB,EACzD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACb,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAClC,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,EACvB,aAAa,GAAE,YAAiC,EAChD,SAAS,GAAE,eAAsC,EACjD,GAAG,yCAAsB;IAsC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,WAAW,IAAI,IAAI;IAInB,aAAa,IAAI,UAAU;IAI3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIvD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI3D,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAsC5B,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkC/D,YAAY;IAa1B;;;OAGG;IACU,KAAK;IA+DlB,OAAO,CAAC,eAAe;IAevB;;;OAGG;IACU,IAAI;IAajB,yDAAyD;IAC5C,IAAI;IAWV,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ5F,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,4BAA4B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAI5E;;OAEG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IA0BzG,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAI5D,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B,iBAAiB,IAAI,qBAAqB,CAAC,EAAE,CAAC;IAS5D;;;;;;OAMG;IACU,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAmDvG;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAI5D;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAIrE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIpD;;;;;OAKG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAsCrG;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAI5D;;;;QAII;IACS,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C;;;QAGI;IACS,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrD;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAIrE,MAAM,IAAI,GAAG,GAAG,SAAS;IAIzB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAInD;;;;;QAKI;IACS,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD;;;OAGG;IACI,OAAO;IAId;;;OAGG;IACU,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvD;;;OAGG;IACU,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1C,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1D,iEAAiE;IACpD,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInD;;;OAGG;IACU,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAgB/C;;;;OAIG;YACW,wBAAwB;IAOtC;;;;OAIG;YACW,mBAAmB;IAQjC;;;;OAIG;YACW,oBAAoB;IAyBlC,uFAAuF;YACzE,yBAAyB;IA4BvC;;;;OAIG;YACW,uBAAuB;IAkBrC;;;OAGG;YACW,mBAAmB;YAkDnB,qBAAqB;IA0BnC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAMhB,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC;;;OAGG;IACI,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhE"}
1
+ {"version":3,"file":"p2p_client.d.ts","sourceRoot":"","sources":["../../src/client/p2p_client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAsC,MAAM,iBAAiB,CAAC;AAC7F,OAAO,KAAK,EAGV,aAAa,EAEb,kBAAkB,EAClB,MAAM,EAEP,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,KAAK,QAAQ,EAAW,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAEL,KAAK,eAAe,EAEpB,UAAU,EAGX,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAEnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAI1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,KAAK,GAAG,EAAkB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7E;;GAEG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAC,IAAI,CACjE,SAAQ,UACR,YAAW,GAAG,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;;IAqCvC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,aAAa;IAErB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,GAAG;IA3Cb,0HAA0H;IAC1H,OAAO,CAAC,cAAc,CAAiB;IAEvC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAAC,CAAyB;IAC7C,OAAO,CAAC,wBAAwB,CAAM;IACtC,OAAO,CAAC,wBAAwB,CAAM;IACtC,OAAO,CAAC,2BAA2B,CAAM;IAEzC,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,wBAAwB,CAA8B;IAC9D,OAAO,CAAC,wBAAwB,CAA8B;IAC9D,OAAO,CAAC,2BAA2B,CAA8B;IACjE,OAAO,CAAC,iBAAiB,CAA8B;IAEvD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAA6D;IAEpF,OAAO,CAAC,MAAM,CAAY;IAE1B,OAAO,CAAC,WAAW,CAA4B;IAE/C,OAAO,CAAC,UAAU,CAAa;IAE/B;;;;;;;OAOG;gBAED,WAAW,EAAE,CAAC,EACN,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,aAAa,GAAG,kBAAkB,EACzD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACb,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAClC,MAAM,GAAE,OAAO,CAAC,SAAS,CAAM,EACvB,aAAa,GAAE,YAAiC,EAChD,SAAS,GAAE,eAAsC,EACjD,GAAG,yCAAsB;IAsC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,WAAW,IAAI,IAAI;IAInB,aAAa,IAAI,UAAU;IAI3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIvD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI3D,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAsC5B,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YAkC/D,YAAY;IAa1B;;;OAGG;IACU,KAAK;IA+DlB,OAAO,CAAC,eAAe;IAevB;;;OAGG;IACU,IAAI;IAajB,yDAAyD;IAC5C,IAAI;IAWV,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAQ5F,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,4BAA4B,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI;IAI5E;;OAEG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IA2B3F,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAI5D,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B,iBAAiB,IAAI,qBAAqB,CAAC,EAAE,CAAC;IAS5D;;;;;;OAMG;IACU,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC;IAmDvG;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAI5D;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAIrE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIpD;;;;;OAKG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAqCrG;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAI5D;;;;QAII;IACS,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C;;;QAGI;IACS,YAAY,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAKrD;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAIrE,MAAM,IAAI,GAAG,GAAG,SAAS;IAIzB,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAInD;;;;;QAKI;IACS,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzD;;;OAGG;IACI,OAAO;IAId;;;OAGG;IACU,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvD;;;OAGG;IACU,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1C,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC;IAI1D,iEAAiE;IACpD,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInD;;;OAGG;IACU,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAgB/C;;;;OAIG;YACW,wBAAwB;IAOtC;;;;OAIG;YACW,mBAAmB;IAQjC;;;;OAIG;YACW,oBAAoB;IAyBlC,uFAAuF;YACzE,yBAAyB;IA4BvC;;;;OAIG;YACW,uBAAuB;IAkBrC;;;OAGG;YACW,mBAAmB;YAkDnB,qBAAqB;IA0BnC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAMhB,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC;;;OAGG;IACI,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAGhE"}
@@ -12,6 +12,7 @@ import { tryStop } from '@aztec/stdlib/interfaces/server';
12
12
  import { Attributes, TraceableL2BlockStream, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
13
13
  import { getP2PDefaultConfig } from '../config.js';
14
14
  import { ReqRespSubProtocol } from '../services/reqresp/interface.js';
15
+ import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
15
16
  import { TxProvider } from '../services/tx_provider.js';
16
17
  import { P2PClientState } from './interface.js';
17
18
  /**
@@ -288,16 +289,16 @@ import { P2PClientState } from './interface.js';
288
289
  * Uses the batched Request Response protocol to request a set of transactions from the network.
289
290
  */ async requestTxsByHash(txHashes, pinnedPeerId) {
290
291
  const timeoutMs = 8000; // Longer timeout for now
291
- const maxPeers = Math.min(Math.ceil(txHashes.length / 3), 10);
292
292
  const maxRetryAttempts = 10; // Keep retrying within the timeout
293
- const txs = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, txHashes, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
294
- // Some transactions may return undefined, so we filter them out
295
- const filteredTxs = txs.filter((tx)=>!!tx);
296
- if (filteredTxs.length > 0) {
297
- await this.txPool.addTxs(filteredTxs);
293
+ const requests = chunkTxHashesRequest(txHashes);
294
+ const maxPeers = Math.min(Math.ceil(requests.length / 3), 10);
295
+ const txBatches = await this.p2pService.sendBatchRequest(ReqRespSubProtocol.TX, requests, pinnedPeerId, timeoutMs, maxPeers, maxRetryAttempts);
296
+ const txs = txBatches.flat();
297
+ if (txs.length > 0) {
298
+ await this.txPool.addTxs(txs);
298
299
  }
299
300
  const txHashesStr = txHashes.map((tx)=>tx.toString()).join(', ');
300
- this.log.debug(`Requested txs ${txHashesStr} (${filteredTxs.length} / ${txHashes.length}) from peers`);
301
+ this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
301
302
  // We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
302
303
  return txs;
303
304
  }
@@ -394,7 +395,6 @@ import { P2PClientState } from './interface.js';
394
395
  return txs;
395
396
  }
396
397
  const missingTxs = await this.requestTxsByHash(missingTxHashes, pinnedPeerId);
397
- const fetchedMissingTxs = missingTxs.filter((tx)=>!!tx);
398
398
  // TODO: optimize
399
399
  // Merge the found txs in order
400
400
  const mergingTxsPromises = txHashes.map(async (txHash)=>{
@@ -405,8 +405,9 @@ import { P2PClientState } from './interface.js';
405
405
  }
406
406
  }
407
407
  // Is it in the fetched missing txs?
408
- for (const tx of fetchedMissingTxs){
409
- if (tx !== undefined && (await tx.getTxHash()).equals(txHash)) {
408
+ // Note: this is an O(n^2) operation, but we expect the number of missing txs to be small.
409
+ for (const tx of missingTxs){
410
+ if ((await tx.getTxHash()).equals(txHash)) {
410
411
  return tx;
411
412
  }
412
413
  }
@@ -105,7 +105,7 @@ export declare class DummyReqResp implements ReqRespInterface {
105
105
  start(_subProtocolHandlers: ReqRespSubProtocolHandlers, _subProtocolValidators: ReqRespSubProtocolValidators): Promise<void>;
106
106
  stop(): Promise<void>;
107
107
  sendRequest<SubProtocol extends ReqRespSubProtocol>(_subProtocol: SubProtocol, _request: InstanceType<SubProtocolMap[SubProtocol]['request']>): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined>;
108
- sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(_subProtocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], _pinnedPeer: PeerId | undefined, _timeoutMs?: number, _maxPeers?: number, _maxRetryAttempts?: number): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]>;
108
+ sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(_subProtocol: SubProtocol, _requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], _pinnedPeer: PeerId | undefined, _timeoutMs?: number, _maxPeers?: number, _maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
109
109
  sendRequestToPeer(_peerId: PeerId, _subProtocol: ReqRespSubProtocol, _payload: Buffer, _dialTimeout?: number): Promise<ReqRespResponse>;
110
110
  }
111
111
  //# sourceMappingURL=dummy_service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_service.ts"],"names":[],"mappings":"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"}
@@ -138,8 +138,8 @@ export class DummyReqResp {
138
138
  sendRequest(_subProtocol, _request) {
139
139
  return Promise.resolve(undefined);
140
140
  }
141
- sendBatchRequest(_subProtocol, requests, _pinnedPeer, _timeoutMs, _maxPeers, _maxRetryAttempts) {
142
- return Promise.resolve(requests.map(()=>undefined));
141
+ sendBatchRequest(_subProtocol, _requests, _pinnedPeer, _timeoutMs, _maxPeers, _maxRetryAttempts) {
142
+ return Promise.resolve([]);
143
143
  }
144
144
  sendRequestToPeer(_peerId, _subProtocol, _payload, _dialTimeout) {
145
145
  return Promise.resolve({
@@ -84,7 +84,7 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
84
84
  * @param requests - The requests to send to the peers
85
85
  * @returns The responses to the requests
86
86
  */
87
- sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(protocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], pinnedPeerId: PeerId | undefined): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]>;
87
+ sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(protocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], pinnedPeerId: PeerId | undefined): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
88
88
  /**
89
89
  * Get the ENR of the node
90
90
  * @returns The ENR of the node
@@ -141,18 +141,18 @@ export declare class LibP2PService<T extends P2PClientType = P2PClientType.Full>
141
141
  */
142
142
  propagate<T extends Gossipable>(message: T): Promise<void>;
143
143
  /**
144
- * Validate a tx that has been requested from a peer.
144
+ * Validate a collection of txs that has been requested from a peer.
145
145
  *
146
- * The core component of this validator is that the tx hash MUST match the requested tx hash,
146
+ * The core component of this validator is that each tx hash MUST match the requested tx hash,
147
147
  * In order to perform this check, the tx proof must be verified.
148
148
  *
149
149
  * Note: This function is called from within `ReqResp.sendRequest` as part of the
150
150
  * ReqRespSubProtocol.TX subprotocol validation.
151
151
  *
152
- * @param requestedTxHash - The hash of the tx that was requested.
153
- * @param responseTx - The tx that was received as a response to the request.
152
+ * @param requestedTxHash - The collection of the txs that was requested.
153
+ * @param responseTx - The collectin of txs that was received as a response to the request.
154
154
  * @param peerId - The peer ID of the peer that sent the tx.
155
- * @returns True if the tx is valid, false otherwise.
155
+ * @returns True if the whole collection of txs is valid, false otherwise.
156
156
  */
157
157
  private validateRequestedTx;
158
158
  private validatePropagatedTx;
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@ import { SnappyTransform, fastMsgIdFn, getMsgIdFn, msgIdToStrFn } from '../encod
41
41
  import { gossipScoreThresholds } from '../gossipsub/scoring.js';
42
42
  import { PeerManager } from '../peer-manager/peer_manager.js';
43
43
  import { PeerScoring } from '../peer-manager/peer_scoring.js';
44
- import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol } from '../reqresp/interface.js';
44
+ import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, ValidationError } from '../reqresp/interface.js';
45
45
  import { reqGoodbyeHandler } from '../reqresp/protocols/goodbye.js';
46
46
  import { pingHandler, reqRespBlockHandler, reqRespStatusHandler, reqRespTxHandler } from '../reqresp/protocols/index.js';
47
47
  import { ReqResp } from '../reqresp/reqresp.js';
@@ -569,33 +569,44 @@ import { P2PInstrumentation } from './instrumentation.js';
569
569
  });
570
570
  }
571
571
  /**
572
- * Validate a tx that has been requested from a peer.
572
+ * Validate a collection of txs that has been requested from a peer.
573
573
  *
574
- * The core component of this validator is that the tx hash MUST match the requested tx hash,
574
+ * The core component of this validator is that each tx hash MUST match the requested tx hash,
575
575
  * In order to perform this check, the tx proof must be verified.
576
576
  *
577
577
  * Note: This function is called from within `ReqResp.sendRequest` as part of the
578
578
  * ReqRespSubProtocol.TX subprotocol validation.
579
579
  *
580
- * @param requestedTxHash - The hash of the tx that was requested.
581
- * @param responseTx - The tx that was received as a response to the request.
580
+ * @param requestedTxHash - The collection of the txs that was requested.
581
+ * @param responseTx - The collectin of txs that was received as a response to the request.
582
582
  * @param peerId - The peer ID of the peer that sent the tx.
583
- * @returns True if the tx is valid, false otherwise.
584
- */ async validateRequestedTx(requestedTxHash, responseTx, peerId) {
583
+ * @returns True if the whole collection of txs is valid, false otherwise.
584
+ */ //TODO: (mralj) - this is somewhat naive implementation, if single tx is invlid we consider the whole response invalid.
585
+ // I think we should still extract the valid txs and return them, so that we can still use the response.
586
+ async validateRequestedTx(requestedTxHash, responseTx, peerId) {
587
+ const requested = new Set(requestedTxHash.map((h)=>h.toString()));
585
588
  const proofValidator = new TxProofValidator(this.proofVerifier);
586
- const validProof = await proofValidator.validateTx(responseTx);
587
- // If the node returns the wrong data, we penalize it
588
- if (!requestedTxHash.equals(await responseTx.getTxHash())) {
589
- // Returning the wrong data is a low tolerance error
590
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
591
- return false;
592
- }
593
- if (validProof.result === 'invalid') {
594
- // If the proof is invalid, but the txHash is correct, then this is an active attack and we severly punish
595
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
589
+ try {
590
+ await Promise.all(responseTx.map(async (tx)=>{
591
+ if (!requested.has((await tx.getTxHash()).toString())) {
592
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
593
+ throw new ValidationError(`Received tx with hash ${(await tx.getTxHash()).toString()} that was not requested.`);
594
+ }
595
+ const { result } = await proofValidator.validateTx(tx);
596
+ if (result === 'invalid') {
597
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
598
+ throw new ValidationError(`Received tx with hash ${(await tx.getTxHash()).toString()} that is invalid.`);
599
+ }
600
+ }));
601
+ return true;
602
+ } catch (e) {
603
+ if (e instanceof ValidationError) {
604
+ this.logger.debug(`Failed to validate requested txs from peer ${peerId.toString()}, reason ${e.message}`);
605
+ } else {
606
+ this.logger.warn(`Error during validation of requested txs`, e);
607
+ }
596
608
  return false;
597
609
  }
598
- return true;
599
610
  }
600
611
  async validatePropagatedTx(tx, peerId) {
601
612
  const currentBlockNumber = await this.archiver.getBlockNumber();
@@ -1,6 +1,6 @@
1
1
  import { Fr } from '@aztec/foundation/fields';
2
2
  import { L2Block } from '@aztec/stdlib/block';
3
- import { Tx, TxHash } from '@aztec/stdlib/tx';
3
+ import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
4
4
  import type { PeerId } from '@libp2p/interface';
5
5
  import { StatusMessage } from './protocols/status.js';
6
6
  import type { ReqRespStatus } from './status.js';
@@ -69,6 +69,9 @@ export type ReqRespSubProtocolValidators = {
69
69
  [S in ReqRespSubProtocol]: ResponseValidator<any, any>;
70
70
  };
71
71
  export declare const DEFAULT_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators;
72
+ export declare class ValidationError extends Error {
73
+ constructor(message: string);
74
+ }
72
75
  /**
73
76
  * Sub protocol map determines the request and response types for each
74
77
  * Req Resp protocol
@@ -127,8 +130,8 @@ export declare const subProtocolMap: {
127
130
  response: typeof StatusMessage;
128
131
  };
129
132
  "/aztec/req/tx/0.1.0": {
130
- request: typeof TxHash;
131
- response: typeof Tx;
133
+ request: typeof TxHashArray;
134
+ response: typeof TxArray;
132
135
  };
133
136
  "/aztec/req/goodbye/0.1.0": {
134
137
  request: typeof RequestableBuffer;
@@ -142,7 +145,7 @@ export declare const subProtocolMap: {
142
145
  export interface ReqRespInterface {
143
146
  start(subProtocolHandlers: ReqRespSubProtocolHandlers, subProtocolValidators: ReqRespSubProtocolValidators): Promise<void>;
144
147
  stop(): Promise<void>;
145
- sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(subProtocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], pinnedPeer: PeerId | undefined, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]>;
148
+ sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(subProtocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], pinnedPeer: PeerId | undefined, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
146
149
  sendRequestToPeer(peerId: PeerId, subProtocol: ReqRespSubProtocol, payload: Buffer, dialTimeout?: number): Promise<ReqRespResponse>;
147
150
  }
148
151
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/interface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/interface.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Fr } from '@aztec/foundation/fields';
2
2
  import { L2Block } from '@aztec/stdlib/block';
3
- import { Tx, TxHash } from '@aztec/stdlib/tx';
3
+ import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
4
4
  import { StatusMessage } from './protocols/status.js';
5
5
  /*
6
6
  * Request Response Sub Protocols
@@ -25,6 +25,12 @@ export const DEFAULT_SUB_PROTOCOL_VALIDATORS = {
25
25
  [ReqRespSubProtocol.GOODBYE]: noopValidator,
26
26
  [ReqRespSubProtocol.BLOCK]: noopValidator
27
27
  };
28
+ /*
29
+ * Helper class to sub-protocol validation error*/ export class ValidationError extends Error {
30
+ constructor(message){
31
+ super(message);
32
+ }
33
+ }
28
34
  /**
29
35
  * Default handler for unimplemented sub protocols, this SHOULD be overwritten
30
36
  * by the service, but is provided as a fallback
@@ -82,8 +88,8 @@ export const DEFAULT_SUB_PROTOCOL_VALIDATORS = {
82
88
  response: StatusMessage
83
89
  },
84
90
  [ReqRespSubProtocol.TX]: {
85
- request: TxHash,
86
- response: Tx
91
+ request: TxHashArray,
92
+ response: TxArray
87
93
  },
88
94
  [ReqRespSubProtocol.GOODBYE]: {
89
95
  request: RequestableBuffer,
@@ -1,4 +1,5 @@
1
1
  import type { P2PClientType } from '@aztec/stdlib/p2p';
2
+ import { TxHash, TxHashArray } from '@aztec/stdlib/tx';
2
3
  import type { MemPools } from '../../../mem_pools/interface.js';
3
4
  import type { ReqRespSubProtocolHandler } from '../interface.js';
4
5
  /**
@@ -10,4 +11,14 @@ import type { ReqRespSubProtocolHandler } from '../interface.js';
10
11
  * @returns the Tx request handler
11
12
  */
12
13
  export declare function reqRespTxHandler<T extends P2PClientType>(mempools: MemPools<T>): ReqRespSubProtocolHandler;
14
+ /**
15
+ * Helper function to chunk an array of transaction hashes into chunks of a specified size.
16
+ * This is mainly used in ReqResp in order not to request too many transactions at once from the single peer.
17
+ *
18
+ * @param hashes - The array of transaction hashes to chunk.
19
+ * @param chunkSize - The size of each chunk. Default is 8. Reasoning:
20
+ * Per: https://github.com/AztecProtocol/aztec-packages/issues/15149#issuecomment-2999054485
21
+ * we define Q as max number of transactions per batch, the comment explains why we use 8.
22
+ */
23
+ export declare function chunkTxHashesRequest(hashes: TxHash[], chunkSize?: number): Array<TxHashArray>;
13
24
  //# sourceMappingURL=tx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAuB1G"}
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAW,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAwB1G;AAED;;;;;;;;GAQG;AAGH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAExF"}
@@ -1,4 +1,5 @@
1
- import { TxHash } from '@aztec/stdlib/tx';
1
+ import { chunk } from '@aztec/foundation/collection';
2
+ import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
2
3
  import { ReqRespStatus, ReqRespStatusError } from '../status.js';
3
4
  /**
4
5
  * We want to keep the logic of the req resp handler in this file, but we do not have a reference to the mempools here
@@ -14,18 +15,17 @@ import { ReqRespStatus, ReqRespStatusError } from '../status.js';
14
15
  * @returns the tx response message
15
16
  * @throws if msg is not a valid tx hash
16
17
  */ return async (_peerId, msg)=>{
17
- let txHash;
18
+ let txHashes;
18
19
  try {
19
- txHash = TxHash.fromBuffer(msg);
20
+ txHashes = TxHashArray.fromBuffer(msg);
20
21
  } catch (err) {
21
22
  throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, {
22
23
  cause: err
23
24
  });
24
25
  }
25
26
  try {
26
- const foundTx = await mempools.txPool.getTxByHash(txHash);
27
- const buf = foundTx ? foundTx.toBuffer() : Buffer.alloc(0);
28
- return buf;
27
+ const txs = new TxArray(...(await Promise.all(txHashes.map((txHash)=>mempools.txPool.getTxByHash(txHash)))).filter((t)=>!!t));
28
+ return txs.toBuffer();
29
29
  } catch (err) {
30
30
  throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, {
31
31
  cause: err
@@ -33,3 +33,16 @@ import { ReqRespStatus, ReqRespStatusError } from '../status.js';
33
33
  }
34
34
  };
35
35
  }
36
+ /**
37
+ * Helper function to chunk an array of transaction hashes into chunks of a specified size.
38
+ * This is mainly used in ReqResp in order not to request too many transactions at once from the single peer.
39
+ *
40
+ * @param hashes - The array of transaction hashes to chunk.
41
+ * @param chunkSize - The size of each chunk. Default is 8. Reasoning:
42
+ * Per: https://github.com/AztecProtocol/aztec-packages/issues/15149#issuecomment-2999054485
43
+ * we define Q as max number of transactions per batch, the comment explains why we use 8.
44
+ */ //TODO: (mralj) chunk size should by default be 8, this is just temporary until the protocol is implemented correctly
45
+ //more info: https://github.com/AztecProtocol/aztec-packages/pull/15516#pullrequestreview-2995474321
46
+ export function chunkTxHashesRequest(hashes, chunkSize = 1) {
47
+ return chunk(hashes, chunkSize).map((chunk)=>new TxHashArray(...chunk));
48
+ }
@@ -62,7 +62,7 @@ export declare class ReqResp implements ReqRespInterface {
62
62
  *
63
63
  * @throws {CollectiveReqRespTimeoutError} - If the request batch exceeds the specified timeout (`timeoutMs`).
64
64
  */
65
- sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(subProtocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], pinnedPeer: PeerId | undefined, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]>;
65
+ sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(subProtocol: SubProtocol, requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], pinnedPeer: PeerId | undefined, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
66
66
  /**
67
67
  * Sends a request to a specific peer
68
68
  *
@@ -1 +1 @@
1
- {"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":"AAMA,OAAO,EAAc,KAAK,eAAe,EAAiC,MAAM,yBAAyB,CAAC;AAE1G,OAAO,KAAK,EAAsB,MAAM,EAAU,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AASxB;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAiB5C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IAlBhB,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,0BAA0B,CAAS;IAG3C,OAAO,CAAC,mBAAmB,CAA6D;IACxF,OAAO,CAAC,qBAAqB,CAAiE;IAE9F,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,OAAO,CAAiB;gBAG9B,MAAM,EAAE,gBAAgB,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,MAAM,yCAA8B,EAC5C,UAAU,GAAE,OAAO,CAAC,4BAA4B,CAAM,EACtD,eAAe,GAAE,eAAsC;IAmBzD,IAAI,MAAM,6CAET;IAED;;OAEG;IACG,KAAK,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,4BAA4B;IAiBhH;;OAEG;IACG,IAAI;IAoBV;;;;;;;;;;;;;;;;;;;;;OAqBG;IAQG,gBAAgB,CAAC,WAAW,SAAS,kBAAkB,EAC3D,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAChE,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,SAAQ,EACjB,QAAQ,SAA+C,EACvD,gBAAgB,SAAI,GACnB,OAAO,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;IAgJjF;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IAKU,iBAAiB,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAY,GACxB,OAAO,CAAC,eAAe,CAAC;IAsD3B;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiEvB;;;;;;OAMG;YACW,WAAW;IA6CzB;;;;;;;;;;;;;;;;OAgBG;YAKW,aAAa;IA+C3B;;;;;;;SAOK;YACS,aAAa;IA4B3B;;;;;;;OAOG;YACW,YAAY;CA4B3B"}
1
+ {"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":"AAMA,OAAO,EAAc,KAAK,eAAe,EAAiC,MAAM,yBAAyB,CAAC;AAE1G,OAAO,KAAK,EAAsB,MAAM,EAAU,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,kBAAkB,EAClB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AASxB;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAQ,YAAW,gBAAgB;IAiB5C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;IAlBhB,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,0BAA0B,CAAS;IAG3C,OAAO,CAAC,mBAAmB,CAA6D;IACxF,OAAO,CAAC,qBAAqB,CAAiE;IAE9F,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,OAAO,CAAiB;gBAG9B,MAAM,EAAE,gBAAgB,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,MAAM,yCAA8B,EAC5C,UAAU,GAAE,OAAO,CAAC,4BAA4B,CAAM,EACtD,eAAe,GAAE,eAAsC;IAmBzD,IAAI,MAAM,6CAET;IAED;;OAEG;IACG,KAAK,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,4BAA4B;IAiBhH;;OAEG;IACG,IAAI;IAoBV;;;;;;;;;;;;;;;;;;;;;OAqBG;IAQG,gBAAgB,CAAC,WAAW,SAAS,kBAAkB,EAC3D,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAChE,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,SAAQ,EACjB,QAAQ,SAA+C,EACvD,gBAAgB,SAAI,GACnB,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IAgJnE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IAKU,iBAAiB,CAC5B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAY,GACxB,OAAO,CAAC,eAAe,CAAC;IAsD3B;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiEvB;;;;;;OAMG;YACW,WAAW;IA6CzB;;;;;;;;;;;;;;;;OAgBG;YAKW,aAAa;IA+C3B;;;;;;;SAOK;YACS,aAAa;IA4B3B;;;;;;;OAOG;YACW,YAAY;CA4B3B"}
@@ -36,7 +36,7 @@ export interface P2PService {
36
36
  * @param requests - The requests to send to the peers
37
37
  * @returns The responses to the requests
38
38
  */
39
- sendBatchRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, requests: InstanceType<SubProtocolMap[Protocol]['request']>[], pinnedPeerId?: PeerId, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<(InstanceType<SubProtocolMap[Protocol]['response']> | undefined)[]>;
39
+ sendBatchRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, requests: InstanceType<SubProtocolMap[Protocol]['request']>[], pinnedPeerId?: PeerId, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
40
40
  registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
41
41
  getEnr(): ENR | undefined;
42
42
  getPeers(includePending?: boolean): PeerInfo[];
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEjF,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EAClD,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAC7D,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAG/E,6BAA6B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAExE,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;IAE/C,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD;;SAEK;IACL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;SAEK;IACL,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,YAAY,IAAI,GAAG,EAAE,CAAC;IAEtB;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAElD,SAAS,IAAI,kBAAkB,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,iBAAiB,EAAE,GAAG,EAAE,CAAC;CAC1B"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/services/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEjF,oBAAY,kBAAkB;IAC5B,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,wBAAwB,GAAG,CACrC,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,gBAAgB,EAAE,GAAG,SAAS,CAAC,CAAC;AAE7C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;;;;;OAMG;IACH,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EAClD,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAC7D,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAGjE,6BAA6B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAExE,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;IAE/C,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD;;SAEK;IACL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;SAEK;IACL,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,YAAY,IAAI,GAAG,EAAE,CAAC;IAEtB;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC;IAElD,SAAS,IAAI,kBAAkB,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,SAAS,CAAC;IAE1B,iBAAiB,EAAE,GAAG,EAAE,CAAC;CAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"fast_tx_collection.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/fast_tx_collection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,yBAAyB,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,GAAG;IATb,+BAA+B;IAC/B,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAa;gBAGjD,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EACnD,KAAK,EAAE,QAAQ,EAAE,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,YAAY,GAAE,YAAiC,EAC/C,GAAG,GAAE,MAAkD;IAGpD,IAAI;IAKV,yBAAyB;IAInB,cAAc,CACzB,KAAK,EAAE,0BAA0B,EACjC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAC7B,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;cA0C/B,WAAW,CACzB,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAiDzE;;;;;OAKG;YACW,oBAAoB;YAYpB,mBAAmB;YAiFnB,qBAAqB;IA2CnC;;;OAGG;IACI,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE;IA0BjC;;;OAGG;IACI,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAS7D;;;OAGG;IACI,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAQ/D"}
1
+ {"version":3,"file":"fast_tx_collection.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/fast_tx_collection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAIlE,OAAO,EAAE,YAAY,EAAW,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,yBAAyB,CAAC;AAEpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,GAAG;IATb,+BAA+B;IAC/B,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAa;gBAGjD,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EACnD,KAAK,EAAE,QAAQ,EAAE,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,kBAAkB,EAC1B,YAAY,GAAE,YAAiC,EAC/C,GAAG,GAAE,MAAkD;IAGpD,IAAI;IAKV,yBAAyB;IAInB,cAAc,CACzB,KAAK,EAAE,0BAA0B,EACjC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAC7B,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;cA0C/B,WAAW,CACzB,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAiDzE;;;;;OAKG;YACW,oBAAoB;YAYpB,mBAAmB;YAiFnB,qBAAqB;IA6CnC;;;OAGG;IACI,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE;IA0BjC;;;OAGG;IACI,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAS7D;;;OAGG;IACI,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAQ/D"}
@@ -7,6 +7,7 @@ import { sleep } from '@aztec/foundation/sleep';
7
7
  import { DateProvider, elapsed } from '@aztec/foundation/timer';
8
8
  import { TxHash } from '@aztec/stdlib/tx';
9
9
  import { ReqRespSubProtocol } from '../reqresp/interface.js';
10
+ import { chunkTxHashesRequest } from '../reqresp/protocols/tx.js';
10
11
  export class FastTxCollection {
11
12
  reqResp;
12
13
  nodes;
@@ -222,7 +223,10 @@ export class FastTxCollection {
222
223
  pinnedPeer
223
224
  });
224
225
  try {
225
- await this.txCollectionSink.collect((txHashes)=>this.reqResp.sendBatchRequest(ReqRespSubProtocol.TX, txHashes, pinnedPeer, timeoutMs, maxPeers, maxRetryAttempts), Array.from(request.missingTxHashes).map((txHash)=>TxHash.fromString(txHash)), {
226
+ await this.txCollectionSink.collect(async (txHashes)=>{
227
+ const txs = await this.reqResp.sendBatchRequest(ReqRespSubProtocol.TX, chunkTxHashesRequest(txHashes), pinnedPeer, timeoutMs, maxPeers, maxRetryAttempts);
228
+ return txs.flat();
229
+ }, Array.from(request.missingTxHashes).map((txHash)=>TxHash.fromString(txHash)), {
226
230
  description: `reqresp for slot ${slotNumber}`,
227
231
  method: 'fast-req-resp',
228
232
  ...opts,
@@ -1 +1 @@
1
- {"version":3,"file":"slow_tx_collection.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/slow_tx_collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,KAAK,iBAAiB,EAA6C,MAAM,6BAA6B,CAAC;AAChH,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,yBAAyB,CAAC;AACpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,gBAAgB;IAWzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,GAAG;IAjBb,mEAAmE;IACnE,OAAO,CAAC,UAAU,CAAyC;IAE3D,+DAA+D;IAC/D,OAAO,CAAC,wBAAwB,CAAmB;IAEnD,qEAAqE;IACrE,OAAO,CAAC,yBAAyB,CAAiB;gBAGxC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EACnD,KAAK,EAAE,QAAQ,EAAE,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,EACnE,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,kBAAkB,EAC1B,YAAY,GAAE,YAAiC,EAC/C,GAAG,GAAE,MAAkD;IAkB1D,kBAAkB;IAIlB,KAAK;IAKC,IAAI;IAOJ,OAAO;IAOpB,mFAAmF;IAC5E,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;IAsBzD,mDAAmD;YACrC,yBAAyB;IAgCvC,sDAAsD;YACxC,2BAA2B;IAoCzC,+HAA+H;IAC/H,OAAO,CAAC,8BAA8B;IAqBtC,8GAA8G;IACvG,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI;IAMxC;;;OAGG;IACI,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQ7D;;;OAGG;IACI,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQ9D,oIAAoI;IACpI,OAAO,CAAC,kBAAkB;CAM3B"}
1
+ {"version":3,"file":"slow_tx_collection.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/slow_tx_collection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,KAAK,iBAAiB,EAA6C,MAAM,6BAA6B,CAAC;AAChH,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,KAAK,gBAAgB,EAAsB,MAAM,yBAAyB,CAAC;AAEpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,qBAAa,gBAAgB;IAWzB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,GAAG;IAjBb,mEAAmE;IACnE,OAAO,CAAC,UAAU,CAAyC;IAE3D,+DAA+D;IAC/D,OAAO,CAAC,wBAAwB,CAAmB;IAEnD,qEAAqE;IACrE,OAAO,CAAC,yBAAyB,CAAiB;gBAGxC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,EACnD,KAAK,EAAE,QAAQ,EAAE,EACjB,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,EACnE,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,kBAAkB,EAC1B,YAAY,GAAE,YAAiC,EAC/C,GAAG,GAAE,MAAkD;IAkB1D,kBAAkB;IAIlB,KAAK;IAKC,IAAI;IAOJ,OAAO;IAOpB,mFAAmF;IAC5E,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;IAsBzD,mDAAmD;YACrC,yBAAyB;IAgCvC,sDAAsD;YACxC,2BAA2B;IAsCzC,+HAA+H;IAC/H,OAAO,CAAC,8BAA8B;IAqBtC,8GAA8G;IACvG,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,GAAG,IAAI;IAMxC;;;OAGG;IACI,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQ7D;;;OAGG;IACI,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQ9D,oIAAoI;IACpI,OAAO,CAAC,kBAAkB;CAM3B"}
@@ -6,6 +6,7 @@ import { DateProvider } from '@aztec/foundation/timer';
6
6
  import { getEpochAtSlot, getTimestampRangeForEpoch } from '@aztec/stdlib/epoch-helpers';
7
7
  import { TxHash } from '@aztec/stdlib/tx';
8
8
  import { ReqRespSubProtocol } from '../reqresp/interface.js';
9
+ import { chunkTxHashesRequest } from '../reqresp/protocols/tx.js';
9
10
  export class SlowTxCollection {
10
11
  reqResp;
11
12
  nodes;
@@ -118,7 +119,10 @@ export class SlowTxCollection {
118
119
  const maxPeers = boundInclusive(Math.ceil(missingTxs.length / 3), 4, 16);
119
120
  const maxRetryAttempts = 3;
120
121
  // Send a batch request via reqresp for the missing txs
121
- await this.txCollectionSink.collect((txHashes)=>this.reqResp.sendBatchRequest(ReqRespSubProtocol.TX, txHashes, pinnedPeer, timeoutMs, maxPeers, maxRetryAttempts), missingTxs.map(([txHash])=>TxHash.fromString(txHash)), {
122
+ await this.txCollectionSink.collect(async (txHashes)=>{
123
+ const txs = await this.reqResp.sendBatchRequest(ReqRespSubProtocol.TX, chunkTxHashesRequest(txHashes), pinnedPeer, timeoutMs, maxPeers, maxRetryAttempts);
124
+ return txs.flat();
125
+ }, missingTxs.map(([txHash])=>TxHash.fromString(txHash)), {
122
126
  description: 'slow reqresp',
123
127
  timeoutMs,
124
128
  method: 'slow-req-resp'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "1.0.0-nightly.20250708",
3
+ "version": "1.0.0-nightly.20250709",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -67,17 +67,17 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/constants": "1.0.0-nightly.20250708",
71
- "@aztec/epoch-cache": "1.0.0-nightly.20250708",
72
- "@aztec/ethereum": "1.0.0-nightly.20250708",
73
- "@aztec/foundation": "1.0.0-nightly.20250708",
74
- "@aztec/kv-store": "1.0.0-nightly.20250708",
75
- "@aztec/noir-contracts.js": "1.0.0-nightly.20250708",
76
- "@aztec/noir-protocol-circuits-types": "1.0.0-nightly.20250708",
77
- "@aztec/protocol-contracts": "1.0.0-nightly.20250708",
78
- "@aztec/simulator": "1.0.0-nightly.20250708",
79
- "@aztec/stdlib": "1.0.0-nightly.20250708",
80
- "@aztec/telemetry-client": "1.0.0-nightly.20250708",
70
+ "@aztec/constants": "1.0.0-nightly.20250709",
71
+ "@aztec/epoch-cache": "1.0.0-nightly.20250709",
72
+ "@aztec/ethereum": "1.0.0-nightly.20250709",
73
+ "@aztec/foundation": "1.0.0-nightly.20250709",
74
+ "@aztec/kv-store": "1.0.0-nightly.20250709",
75
+ "@aztec/noir-contracts.js": "1.0.0-nightly.20250709",
76
+ "@aztec/noir-protocol-circuits-types": "1.0.0-nightly.20250709",
77
+ "@aztec/protocol-contracts": "1.0.0-nightly.20250709",
78
+ "@aztec/simulator": "1.0.0-nightly.20250709",
79
+ "@aztec/stdlib": "1.0.0-nightly.20250709",
80
+ "@aztec/telemetry-client": "1.0.0-nightly.20250709",
81
81
  "@chainsafe/discv5": "9.0.0",
82
82
  "@chainsafe/enr": "3.0.0",
83
83
  "@chainsafe/libp2p-gossipsub": "13.0.0",
@@ -105,8 +105,8 @@
105
105
  "xxhash-wasm": "^1.1.0"
106
106
  },
107
107
  "devDependencies": {
108
- "@aztec/archiver": "1.0.0-nightly.20250708",
109
- "@aztec/world-state": "1.0.0-nightly.20250708",
108
+ "@aztec/archiver": "1.0.0-nightly.20250709",
109
+ "@aztec/world-state": "1.0.0-nightly.20250709",
110
110
  "@jest/globals": "^30.0.0",
111
111
  "@types/jest": "^30.0.0",
112
112
  "@types/node": "^22.15.17",
@@ -60,7 +60,7 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
60
60
  * @param pinnedPeerId - An optional peer id that will be used to request the tx from (in addition to other random peers).
61
61
  * @returns A list of transactions or undefined if the transactions are not found.
62
62
  */
63
- requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId): Promise<(Tx | undefined)[]>;
63
+ requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId): Promise<Tx[]>;
64
64
 
65
65
  /**
66
66
  * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
@@ -33,6 +33,7 @@ import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_
33
33
  import type { MemPools } from '../mem_pools/interface.js';
34
34
  import type { TxPool } from '../mem_pools/tx_pool/index.js';
35
35
  import { ReqRespSubProtocol } from '../services/reqresp/interface.js';
36
+ import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
36
37
  import type { P2PBlockReceivedCallback, P2PService } from '../services/service.js';
37
38
  import { TxCollection } from '../services/tx_collection/tx_collection.js';
38
39
  import { TxProvider } from '../services/tx_provider.js';
@@ -373,27 +374,28 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
373
374
  /**
374
375
  * Uses the batched Request Response protocol to request a set of transactions from the network.
375
376
  */
376
- public async requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<(Tx | undefined)[]> {
377
+ public async requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId | undefined): Promise<Tx[]> {
377
378
  const timeoutMs = 8000; // Longer timeout for now
378
- const maxPeers = Math.min(Math.ceil(txHashes.length / 3), 10);
379
379
  const maxRetryAttempts = 10; // Keep retrying within the timeout
380
+ const requests = chunkTxHashesRequest(txHashes);
381
+ const maxPeers = Math.min(Math.ceil(requests.length / 3), 10);
380
382
 
381
- const txs = await this.p2pService.sendBatchRequest(
383
+ const txBatches = await this.p2pService.sendBatchRequest(
382
384
  ReqRespSubProtocol.TX,
383
- txHashes,
385
+ requests,
384
386
  pinnedPeerId,
385
387
  timeoutMs,
386
388
  maxPeers,
387
389
  maxRetryAttempts,
388
390
  );
389
391
 
390
- // Some transactions may return undefined, so we filter them out
391
- const filteredTxs = txs.filter((tx): tx is Tx => !!tx);
392
- if (filteredTxs.length > 0) {
393
- await this.txPool.addTxs(filteredTxs);
392
+ const txs = txBatches.flat();
393
+ if (txs.length > 0) {
394
+ await this.txPool.addTxs(txs);
394
395
  }
396
+
395
397
  const txHashesStr = txHashes.map(tx => tx.toString()).join(', ');
396
- this.log.debug(`Requested txs ${txHashesStr} (${filteredTxs.length} / ${txHashes.length}) from peers`);
398
+ this.log.debug(`Requested txs ${txHashesStr} (${txs.length} / ${txHashes.length}) from peers`);
397
399
 
398
400
  // We return all transactions, even the not found ones to the caller, such they can handle missing items themselves.
399
401
  return txs;
@@ -514,8 +516,6 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
514
516
  }
515
517
 
516
518
  const missingTxs = await this.requestTxsByHash(missingTxHashes, pinnedPeerId);
517
- const fetchedMissingTxs = missingTxs.filter((tx): tx is Tx => !!tx);
518
-
519
519
  // TODO: optimize
520
520
  // Merge the found txs in order
521
521
  const mergingTxsPromises = txHashes.map(async txHash => {
@@ -527,8 +527,9 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
527
527
  }
528
528
 
529
529
  // Is it in the fetched missing txs?
530
- for (const tx of fetchedMissingTxs) {
531
- if (tx !== undefined && (await tx.getTxHash()).equals(txHash)) {
530
+ // Note: this is an O(n^2) operation, but we expect the number of missing txs to be small.
531
+ for (const tx of missingTxs) {
532
+ if ((await tx.getTxHash()).equals(txHash)) {
532
533
  return tx;
533
534
  }
534
535
  }
@@ -209,13 +209,13 @@ export class DummyReqResp implements ReqRespInterface {
209
209
  }
210
210
  sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
211
211
  _subProtocol: SubProtocol,
212
- requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
212
+ _requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
213
213
  _pinnedPeer: PeerId | undefined,
214
214
  _timeoutMs?: number,
215
215
  _maxPeers?: number,
216
216
  _maxRetryAttempts?: number,
217
- ): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]> {
218
- return Promise.resolve(requests.map(() => undefined));
217
+ ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
218
+ return Promise.resolve([]);
219
219
  }
220
220
  public sendRequestToPeer(
221
221
  _peerId: PeerId,
@@ -69,6 +69,7 @@ import {
69
69
  type ReqRespInterface,
70
70
  ReqRespSubProtocol,
71
71
  type SubProtocolMap,
72
+ ValidationError,
72
73
  } from '../reqresp/interface.js';
73
74
  import { reqGoodbyeHandler } from '../reqresp/protocols/goodbye.js';
74
75
  import {
@@ -473,7 +474,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
473
474
  protocol: SubProtocol,
474
475
  requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
475
476
  pinnedPeerId: PeerId | undefined,
476
- ): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]> {
477
+ ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
477
478
  return this.reqresp.sendBatchRequest(protocol, requests, pinnedPeerId);
478
479
  }
479
480
 
@@ -782,40 +783,56 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
782
783
  }
783
784
 
784
785
  /**
785
- * Validate a tx that has been requested from a peer.
786
+ * Validate a collection of txs that has been requested from a peer.
786
787
  *
787
- * The core component of this validator is that the tx hash MUST match the requested tx hash,
788
+ * The core component of this validator is that each tx hash MUST match the requested tx hash,
788
789
  * In order to perform this check, the tx proof must be verified.
789
790
  *
790
791
  * Note: This function is called from within `ReqResp.sendRequest` as part of the
791
792
  * ReqRespSubProtocol.TX subprotocol validation.
792
793
  *
793
- * @param requestedTxHash - The hash of the tx that was requested.
794
- * @param responseTx - The tx that was received as a response to the request.
794
+ * @param requestedTxHash - The collection of the txs that was requested.
795
+ * @param responseTx - The collectin of txs that was received as a response to the request.
795
796
  * @param peerId - The peer ID of the peer that sent the tx.
796
- * @returns True if the tx is valid, false otherwise.
797
+ * @returns True if the whole collection of txs is valid, false otherwise.
797
798
  */
799
+ //TODO: (mralj) - this is somewhat naive implementation, if single tx is invlid we consider the whole response invalid.
800
+ // I think we should still extract the valid txs and return them, so that we can still use the response.
798
801
  @trackSpan('Libp2pService.validateRequestedTx', (requestedTxHash, _responseTx) => ({
799
802
  [Attributes.TX_HASH]: requestedTxHash.toString(),
800
803
  }))
801
- private async validateRequestedTx(requestedTxHash: TxHash, responseTx: Tx, peerId: PeerId): Promise<boolean> {
804
+ private async validateRequestedTx(requestedTxHash: TxHash[], responseTx: Tx[], peerId: PeerId): Promise<boolean> {
805
+ const requested = new Set(requestedTxHash.map(h => h.toString()));
806
+
802
807
  const proofValidator = new TxProofValidator(this.proofVerifier);
803
- const validProof = await proofValidator.validateTx(responseTx);
804
808
 
805
- // If the node returns the wrong data, we penalize it
806
- if (!requestedTxHash.equals(await responseTx.getTxHash())) {
807
- // Returning the wrong data is a low tolerance error
808
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
809
- return false;
810
- }
809
+ try {
810
+ await Promise.all(
811
+ responseTx.map(async tx => {
812
+ if (!requested.has((await tx.getTxHash()).toString())) {
813
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
814
+ throw new ValidationError(
815
+ `Received tx with hash ${(await tx.getTxHash()).toString()} that was not requested.`,
816
+ );
817
+ }
818
+
819
+ const { result } = await proofValidator.validateTx(tx);
820
+ if (result === 'invalid') {
821
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
822
+ throw new ValidationError(`Received tx with hash ${(await tx.getTxHash()).toString()} that is invalid.`);
823
+ }
824
+ }),
825
+ );
826
+ return true;
827
+ } catch (e: any) {
828
+ if (e instanceof ValidationError) {
829
+ this.logger.debug(`Failed to validate requested txs from peer ${peerId.toString()}, reason ${e.message}`);
830
+ } else {
831
+ this.logger.warn(`Error during validation of requested txs`, e);
832
+ }
811
833
 
812
- if (validProof.result === 'invalid') {
813
- // If the proof is invalid, but the txHash is correct, then this is an active attack and we severly punish
814
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
815
834
  return false;
816
835
  }
817
-
818
- return true;
819
836
  }
820
837
 
821
838
  @trackSpan('Libp2pService.validatePropagatedTx', async tx => ({
@@ -1,6 +1,6 @@
1
1
  import { Fr } from '@aztec/foundation/fields';
2
2
  import { L2Block } from '@aztec/stdlib/block';
3
- import { Tx, TxHash } from '@aztec/stdlib/tx';
3
+ import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
4
4
 
5
5
  import type { PeerId } from '@libp2p/interface';
6
6
 
@@ -94,6 +94,14 @@ export const DEFAULT_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
94
94
  [ReqRespSubProtocol.BLOCK]: noopValidator,
95
95
  };
96
96
 
97
+ /*
98
+ * Helper class to sub-protocol validation error*/
99
+ export class ValidationError extends Error {
100
+ constructor(message: string) {
101
+ super(message);
102
+ }
103
+ }
104
+
97
105
  /**
98
106
  * Sub protocol map determines the request and response types for each
99
107
  * Req Resp protocol
@@ -191,8 +199,8 @@ export const subProtocolMap = {
191
199
  response: StatusMessage,
192
200
  },
193
201
  [ReqRespSubProtocol.TX]: {
194
- request: TxHash,
195
- response: Tx,
202
+ request: TxHashArray,
203
+ response: TxArray,
196
204
  },
197
205
  [ReqRespSubProtocol.GOODBYE]: {
198
206
  request: RequestableBuffer,
@@ -217,7 +225,7 @@ export interface ReqRespInterface {
217
225
  timeoutMs?: number,
218
226
  maxPeers?: number,
219
227
  maxRetryAttempts?: number,
220
- ): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]>;
228
+ ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
221
229
  sendRequestToPeer(
222
230
  peerId: PeerId,
223
231
  subProtocol: ReqRespSubProtocol,
@@ -1,5 +1,6 @@
1
+ import { chunk } from '@aztec/foundation/collection';
1
2
  import type { P2PClientType } from '@aztec/stdlib/p2p';
2
- import { TxHash } from '@aztec/stdlib/tx';
3
+ import { TxArray, TxHash, TxHashArray } from '@aztec/stdlib/tx';
3
4
 
4
5
  import type { PeerId } from '@libp2p/interface';
5
6
 
@@ -23,19 +24,35 @@ export function reqRespTxHandler<T extends P2PClientType>(mempools: MemPools<T>)
23
24
  * @throws if msg is not a valid tx hash
24
25
  */
25
26
  return async (_peerId: PeerId, msg: Buffer) => {
26
- let txHash: TxHash;
27
+ let txHashes: TxHashArray;
27
28
  try {
28
- txHash = TxHash.fromBuffer(msg);
29
+ txHashes = TxHashArray.fromBuffer(msg);
29
30
  } catch (err: any) {
30
31
  throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, { cause: err });
31
32
  }
32
33
 
33
34
  try {
34
- const foundTx = await mempools.txPool.getTxByHash(txHash);
35
- const buf = foundTx ? foundTx.toBuffer() : Buffer.alloc(0);
36
- return buf;
35
+ const txs = new TxArray(
36
+ ...(await Promise.all(txHashes.map(txHash => mempools.txPool.getTxByHash(txHash)))).filter(t => !!t),
37
+ );
38
+ return txs.toBuffer();
37
39
  } catch (err: any) {
38
40
  throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, { cause: err });
39
41
  }
40
42
  };
41
43
  }
44
+
45
+ /**
46
+ * Helper function to chunk an array of transaction hashes into chunks of a specified size.
47
+ * This is mainly used in ReqResp in order not to request too many transactions at once from the single peer.
48
+ *
49
+ * @param hashes - The array of transaction hashes to chunk.
50
+ * @param chunkSize - The size of each chunk. Default is 8. Reasoning:
51
+ * Per: https://github.com/AztecProtocol/aztec-packages/issues/15149#issuecomment-2999054485
52
+ * we define Q as max number of transactions per batch, the comment explains why we use 8.
53
+ */
54
+ //TODO: (mralj) chunk size should by default be 8, this is just temporary until the protocol is implemented correctly
55
+ //more info: https://github.com/AztecProtocol/aztec-packages/pull/15516#pullrequestreview-2995474321
56
+ export function chunkTxHashesRequest(hashes: TxHash[], chunkSize = 1): Array<TxHashArray> {
57
+ return chunk(hashes, chunkSize).map(chunk => new TxHashArray(...chunk));
58
+ }
@@ -178,9 +178,9 @@ export class ReqResp implements ReqRespInterface {
178
178
  timeoutMs = 10000,
179
179
  maxPeers = Math.max(10, Math.ceil(requests.length / 3)),
180
180
  maxRetryAttempts = 3,
181
- ): Promise<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]> {
181
+ ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
182
182
  const responseValidator = this.subProtocolValidators[subProtocol];
183
- const responses: (InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[] = new Array(requests.length);
183
+ const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = new Array(requests.length);
184
184
  const requestBuffers = requests.map(req => req.toBuffer());
185
185
 
186
186
  const requestFunction = async (signal: AbortSignal) => {
@@ -311,7 +311,7 @@ export class ReqResp implements ReqRespInterface {
311
311
  };
312
312
 
313
313
  try {
314
- return await executeTimeout<(InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined)[]>(
314
+ return await executeTimeout<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>(
315
315
  requestFunction,
316
316
  timeoutMs,
317
317
  () => new CollectiveReqRespTimeoutError(),
@@ -54,7 +54,7 @@ export interface P2PService {
54
54
  timeoutMs?: number,
55
55
  maxPeers?: number,
56
56
  maxRetryAttempts?: number,
57
- ): Promise<(InstanceType<SubProtocolMap[Protocol]['response']> | undefined)[]>;
57
+ ): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
58
58
 
59
59
  // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
60
60
  registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
@@ -12,6 +12,7 @@ import { TxHash, type TxWithHash } from '@aztec/stdlib/tx';
12
12
  import type { PeerId } from '@libp2p/interface';
13
13
 
14
14
  import { type ReqRespInterface, ReqRespSubProtocol } from '../reqresp/interface.js';
15
+ import { chunkTxHashesRequest } from '../reqresp/protocols/tx.js';
15
16
  import type { TxCollectionConfig } from './config.js';
16
17
  import type { FastCollectionRequest, FastCollectionRequestInput } from './tx_collection.js';
17
18
  import type { TxCollectionSink } from './tx_collection_sink.js';
@@ -241,7 +242,6 @@ export class FastTxCollection {
241
242
  const maxRetryAttempts = 5;
242
243
  const blockInfo = request.blockInfo;
243
244
  const slotNumber = blockInfo.slotNumber;
244
-
245
245
  if (timeoutMs < 100) {
246
246
  this.log.warn(
247
247
  `Not initiating fast reqresp for txs for ${request.type} at slot ${blockInfo.slotNumber} due to timeout`,
@@ -257,15 +257,18 @@ export class FastTxCollection {
257
257
 
258
258
  try {
259
259
  await this.txCollectionSink.collect(
260
- txHashes =>
261
- this.reqResp.sendBatchRequest<ReqRespSubProtocol.TX>(
260
+ async txHashes => {
261
+ const txs = await this.reqResp.sendBatchRequest<ReqRespSubProtocol.TX>(
262
262
  ReqRespSubProtocol.TX,
263
- txHashes,
263
+ chunkTxHashesRequest(txHashes),
264
264
  pinnedPeer,
265
265
  timeoutMs,
266
266
  maxPeers,
267
267
  maxRetryAttempts,
268
- ),
268
+ );
269
+
270
+ return txs.flat();
271
+ },
269
272
  Array.from(request.missingTxHashes).map(txHash => TxHash.fromString(txHash)),
270
273
  { description: `reqresp for slot ${slotNumber}`, method: 'fast-req-resp', ...opts, ...request.blockInfo },
271
274
  );
@@ -8,6 +8,7 @@ import { type L1RollupConstants, getEpochAtSlot, getTimestampRangeForEpoch } fro
8
8
  import { TxHash, type TxWithHash } from '@aztec/stdlib/tx';
9
9
 
10
10
  import { type ReqRespInterface, ReqRespSubProtocol } from '../reqresp/interface.js';
11
+ import { chunkTxHashesRequest } from '../reqresp/protocols/tx.js';
11
12
  import type { TxCollectionConfig } from './config.js';
12
13
  import type { FastTxCollection } from './fast_tx_collection.js';
13
14
  import type { MissingTxInfo } from './tx_collection.js';
@@ -149,18 +150,20 @@ export class SlowTxCollection {
149
150
  const timeoutMs = this.config.txCollectionSlowReqRespTimeoutMs;
150
151
  const maxPeers = boundInclusive(Math.ceil(missingTxs.length / 3), 4, 16);
151
152
  const maxRetryAttempts = 3;
152
-
153
153
  // Send a batch request via reqresp for the missing txs
154
154
  await this.txCollectionSink.collect(
155
- txHashes =>
156
- this.reqResp.sendBatchRequest(
155
+ async txHashes => {
156
+ const txs = await this.reqResp.sendBatchRequest<ReqRespSubProtocol.TX>(
157
157
  ReqRespSubProtocol.TX,
158
- txHashes,
158
+ chunkTxHashesRequest(txHashes),
159
159
  pinnedPeer,
160
160
  timeoutMs,
161
161
  maxPeers,
162
162
  maxRetryAttempts,
163
- ),
163
+ );
164
+
165
+ return txs.flat();
166
+ },
164
167
  missingTxs.map(([txHash]) => TxHash.fromString(txHash)),
165
168
  { description: 'slow reqresp', timeoutMs, method: 'slow-req-resp' },
166
169
  );