@typeberry/lib 0.5.3-fb6e98a → 0.5.4-9233977

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 (76) hide show
  1. package/package.json +1 -1
  2. package/packages/core/networking/certificate.d.ts.map +1 -1
  3. package/packages/core/networking/certificate.js +1 -0
  4. package/packages/core/networking/package.json +1 -1
  5. package/packages/core/networking/setup.d.ts.map +1 -1
  6. package/packages/core/networking/setup.js +16 -12
  7. package/packages/core/telemetry/package.json +1 -1
  8. package/packages/extensions/ipc/jamnp/handler.d.ts +5 -4
  9. package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
  10. package/packages/extensions/ipc/jamnp/handler.js +59 -34
  11. package/packages/extensions/ipc/jamnp/stream.d.ts +6 -4
  12. package/packages/extensions/ipc/jamnp/stream.d.ts.map +1 -1
  13. package/packages/jam/block/work-package.d.ts +3 -1
  14. package/packages/jam/block/work-package.d.ts.map +1 -1
  15. package/packages/jam/block/work-package.js +6 -2
  16. package/packages/jam/block-json/block.d.ts +125 -0
  17. package/packages/jam/block-json/block.d.ts.map +1 -1
  18. package/packages/jam/block-json/block.js +9 -2
  19. package/packages/jam/fuzz-proto/v1/handler.d.ts +1 -1
  20. package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
  21. package/packages/jam/fuzz-proto/v1/handler.js +43 -19
  22. package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
  23. package/packages/jam/jamnp-s/peers.js +10 -0
  24. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +1 -1
  25. package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
  26. package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +10 -8
  27. package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
  28. package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +11 -9
  29. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +3 -3
  30. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
  31. package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +2 -2
  32. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +2 -2
  33. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
  34. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +2 -2
  35. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
  36. package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +8 -6
  37. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +3 -3
  38. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
  39. package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +2 -2
  40. package/packages/jam/jamnp-s/protocol/stream.d.ts +13 -7
  41. package/packages/jam/jamnp-s/protocol/stream.d.ts.map +1 -1
  42. package/packages/jam/jamnp-s/protocol/stream.js +5 -4
  43. package/packages/jam/jamnp-s/protocol/test-utils.d.ts +1 -1
  44. package/packages/jam/jamnp-s/protocol/test-utils.d.ts.map +1 -1
  45. package/packages/jam/jamnp-s/protocol/test-utils.js +9 -12
  46. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
  47. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
  48. package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +1 -1
  49. package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
  50. package/packages/jam/jamnp-s/stream-manager.js +7 -5
  51. package/packages/jam/jamnp-s/stream-manager.test.js +8 -5
  52. package/packages/jam/jamnp-s/tasks/sync.js +1 -1
  53. package/packages/jam/node/jam-config.d.ts +4 -1
  54. package/packages/jam/node/jam-config.d.ts.map +1 -1
  55. package/packages/jam/node/jam-config.js +6 -2
  56. package/packages/jam/node/main.d.ts.map +1 -1
  57. package/packages/jam/node/main.js +5 -4
  58. package/packages/jam/node/package.json +1 -1
  59. package/packages/jam/state-vectors/index.d.ts +377 -5
  60. package/packages/jam/state-vectors/index.d.ts.map +1 -1
  61. package/packages/jam/state-vectors/index.js +3 -3
  62. package/packages/jam/transition/reports/error.d.ts +3 -1
  63. package/packages/jam/transition/reports/error.d.ts.map +1 -1
  64. package/packages/jam/transition/reports/error.js +2 -0
  65. package/packages/jam/transition/reports/verify-basic.d.ts.map +1 -1
  66. package/packages/jam/transition/reports/verify-basic.js +10 -0
  67. package/packages/jam/transition/reports/verify-basic.test.js +29 -0
  68. package/packages/workers/block-authorship/main.d.ts.map +1 -1
  69. package/packages/workers/block-authorship/main.js +23 -4
  70. package/packages/workers/block-authorship/package.json +1 -1
  71. package/packages/workers/block-authorship/protocol.d.ts +3 -1
  72. package/packages/workers/block-authorship/protocol.d.ts.map +1 -1
  73. package/packages/workers/block-authorship/protocol.js +6 -3
  74. package/packages/workers/importer/importer.d.ts.map +1 -1
  75. package/packages/workers/importer/importer.js +0 -1
  76. package/packages/workers/importer/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"up-0-block-announcement.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/up-0-block-announcement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,6DAAqB,CAAC;AAE9C,qBAAa,WAAY,SAAQ,SAAS;aAWtB,IAAI,EAAE,UAAU;aAChB,IAAI,EAAE,QAAQ;IAXhC,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC;IAItD,OAAO;CAMR;AAED;;GAEG;AACH,qBAAa,SAAS;IAWlB,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAClC,sEAAsE;aACtD,KAAK,EAAE,WAAW,EAAE;IAbtC,MAAM,CAAC,KAAK;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC;IAItD,OAAO;CAMR;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,SAAS;IAWvC,sDAAsD;aACtC,MAAM,EAAE,MAAM;IAC9B,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAbpC,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,YAAY,CAAC;IAI1D,OAAO;CAQR;AAID,qBAAa,OAAQ,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAO7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,IAAI,8DAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;gBAGpD,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,MAAM,SAAS,EAC7B,cAAc,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,KAAK,IAAI,EAC7D,WAAW,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI;IAGhF,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAqBtE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKjC,aAAa,CAAC,MAAM,EAAE,mBAAmB;IAWzC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY;CAUxE"}
1
+ {"version":3,"file":"up-0-block-announcement.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/up-0-block-announcement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,6DAAqB,CAAC;AAE9C,qBAAa,WAAY,SAAQ,SAAS;aAWtB,IAAI,EAAE,UAAU;aAChB,IAAI,EAAE,QAAQ;IAXhC,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC;IAItD,OAAO;CAMR;AAED;;GAEG;AACH,qBAAa,SAAS;IAWlB,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAClC,sEAAsE;aACtD,KAAK,EAAE,WAAW,EAAE;IAbtC,MAAM,CAAC,KAAK;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC;IAItD,OAAO;CAMR;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,SAAS;IAWvC,sDAAsD;aACtC,MAAM,EAAE,MAAM;IAC9B,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAbpC,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,YAAY,CAAC;IAI1D,OAAO;CAQR;AAID,qBAAa,OAAQ,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAO7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,IAAI,8DAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;gBAGpD,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,MAAM,SAAS,EAC7B,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,KAAK,IAAI,EAC/D,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI;IAGlF,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAqBtE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKjC,aAAa,CAAC,MAAM,EAAE,mBAAmB;IAWzC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY;CAUxE"}
@@ -119,7 +119,7 @@ export class Handler {
119
119
  }
120
120
  const handshake = this.getHandshake();
121
121
  logger.trace `[${streamId}] <-- sending handshake`;
122
- this.pendingHandshakes.set(sender.streamId, true);
122
+ this.pendingHandshakes.set(streamId, true);
123
123
  sender.bufferAndSend(Encoder.encodeObject(Handshake.Codec, handshake));
124
124
  }
125
125
  sendAnnouncement(sender, annoucement) {
@@ -1 +1 @@
1
- {"version":3,"file":"stream-manager.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/jamnp-s/stream-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAGzB,MAAM,sBAAsB,CAAC;AAK9B,qBAAa,aAAa;IACxB,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAC9E,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAE9E,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAOV;IAEd,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2C;IAE3E,uCAAuC;IACvC,wBAAwB,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE;IAMrD,uCAAuC;IACvC,wBAAwB,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE;IAMrD,yCAAyC;IACzC,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAIxC,gDAAgD;IAC1C,aAAa;IAMnB,4DAA4D;IAC5D,gBAAgB,CAAC,QAAQ,SAAS,aAAa,EAC7C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,KAAK,EAAE,GACxD,IAAI;IAWP,4DAA4D;IAC5D,aAAa,CAAC,QAAQ,SAAS,aAAa,EAC1C,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,KAAK,EAAE,GACxD,IAAI;IAcP,iCAAiC;IAC3B,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;IA8BjD,OAAO,CAAC,cAAc;CA6CvB;AA4CD,cAAM,gBAAiB,YAAW,mBAAmB;aAMjC,QAAQ,EAAE,QAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAiD;IACrE,OAAO,CAAC,oBAAoB,CAA8B;gBAGxC,QAAQ,EAAE,QAAQ,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB;IAG/C,iDAAiD;IACjD,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,UAAO,GAAG,OAAO;IAsChE,KAAK,IAAI,IAAI;IAab;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
1
+ {"version":3,"file":"stream-manager.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/jamnp-s/stream-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAGzB,MAAM,sBAAsB,CAAC;AAK9B,qBAAa,aAAa;IACxB,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAC9E,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAE9E,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAOV;IAEd,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2C;IAE3E,uCAAuC;IACvC,wBAAwB,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE;IAMrD,uCAAuC;IACvC,wBAAwB,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE;IAMrD,yCAAyC;IACzC,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAIxC,gDAAgD;IAC1C,aAAa;IAMnB,4DAA4D;IAC5D,gBAAgB,CAAC,QAAQ,SAAS,aAAa,EAC7C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,KAAK,EAAE,GACxD,IAAI;IAWP,4DAA4D;IAC5D,aAAa,CAAC,QAAQ,SAAS,aAAa,EAC1C,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,KAAK,EAAE,GACxD,IAAI;IAcP,iCAAiC;IAC3B,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;IA8BjD,OAAO,CAAC,cAAc;CA8CvB;AA4CD,cAAM,gBAAiB,YAAW,mBAAmB;aAMjC,QAAQ,EAAE,QAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAiD;IACrE,OAAO,CAAC,oBAAoB,CAA8B;gBAGxC,QAAQ,EAAE,QAAQ,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB;IAG/C,iDAAiD;IACjD,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,UAAO,GAAG,OAAO;IAsChE,KAAK,IAAI,IAAI;IAab;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
@@ -1,6 +1,7 @@
1
1
  import { BytesBlob } from "#@typeberry/bytes";
2
2
  import { Logger } from "#@typeberry/logger";
3
3
  import { encodeMessageLength, handleMessageFragmentation, StreamErrorKind, } from "#@typeberry/networking";
4
+ import { tryAsU32 } from "#@typeberry/numbers";
4
5
  import { tryAsStreamId, tryAsStreamKind, } from "./protocol/stream.js";
5
6
  import { handleAsyncErrors } from "./utils.js";
6
7
  const logger = Logger.new(import.meta.filename, "stream");
@@ -85,13 +86,14 @@ export class StreamManager {
85
86
  this.registerStream(peer, handler, stream, BytesBlob.blobFrom(bytes.raw.subarray(1)));
86
87
  }
87
88
  registerStream(peer, handler, stream, initialData) {
88
- const streamId = tryAsStreamId(stream.streamId);
89
+ const quicStreamId = tryAsU32(stream.streamId);
90
+ const streamId = tryAsStreamId(`${peer.id}:${quicStreamId}`);
89
91
  // NOTE: `onError` callback may be called multiple times.
90
92
  const onError = (e, kind) => {
91
93
  this.streams.delete(streamId);
92
94
  this.backgroundTasks.delete(streamId);
93
95
  if (kind === StreamErrorKind.Exception) {
94
- logger.error `🚰 --- [${peer.id}:${streamId}] Stream error: ${e}. Disconnecting peer.`;
96
+ logger.error `🚰 --- [${streamId}] Stream error: ${e}. Disconnecting peer.`;
95
97
  }
96
98
  if (kind !== StreamErrorKind.LocalClose) {
97
99
  // whenever we have an error, we are going to inform the handler
@@ -125,10 +127,10 @@ async function readStreamForever(peer, handler, quicStream, initialData, reader)
125
127
  let isDone = false;
126
128
  const callback = handleMessageFragmentation((data) => {
127
129
  const bytes = BytesBlob.blobFrom(new Uint8Array(data));
128
- logger.trace `🚰 --> [${peer.id}:${quicStream.streamId}] ${bytes}`;
130
+ logger.trace `🚰 --> [${quicStream.streamId}] ${bytes}`;
129
131
  handler.onStreamMessage(quicStream, bytes);
130
132
  }, () => {
131
- logger.error `🚰 --> [${peer.id}:${quicStream.streamId}] got too much data. Disconnecting.`;
133
+ logger.error `🚰 --> [${quicStream.streamId}] got too much data. Disconnecting.`;
132
134
  peer.disconnect();
133
135
  });
134
136
  for (;;) {
@@ -137,7 +139,7 @@ async function readStreamForever(peer, handler, quicStream, initialData, reader)
137
139
  // be a promise, so that we can make back pressure here.
138
140
  callback(bytes.raw);
139
141
  if (isDone) {
140
- logger.log `🚰 --> [${peer.id}:${quicStream.streamId}] remote finished.`;
142
+ logger.log `🚰 --> [${quicStream.streamId}] remote finished.`;
141
143
  return;
142
144
  }
143
145
  // await for more data
@@ -2,6 +2,7 @@ import assert from "node:assert";
2
2
  import { describe, it } from "node:test";
3
3
  import { createDisconnectedPeer, TestManualStream } from "#@typeberry/networking/testing.js";
4
4
  import { OK } from "#@typeberry/utils";
5
+ import { tryAsStreamId, } from "./protocol/stream.js";
5
6
  import { StreamManager } from "./stream-manager.js";
6
7
  // Test StreamHandler implementation
7
8
  class TestStreamHandler {
@@ -25,7 +26,7 @@ describe("StreamManager", () => {
25
26
  describe("stream management", () => {
26
27
  it("should return null for unknown stream ID", () => {
27
28
  const manager = new StreamManager();
28
- const peer = manager.getPeer(123);
29
+ const peer = manager.getPeer(tryAsStreamId("peer1:123"));
29
30
  assert.strictEqual(peer, null);
30
31
  });
31
32
  it("should open new stream and call work function", async () => {
@@ -38,7 +39,7 @@ describe("StreamManager", () => {
38
39
  manager.withNewStream(peer, 1, (h, sender) => {
39
40
  workCalled = true;
40
41
  assert.strictEqual(h, handler);
41
- assert.strictEqual(typeof sender.streamId, "number");
42
+ assert.strictEqual(typeof sender.streamId, "string");
42
43
  senderFlush = sender.flush();
43
44
  return OK;
44
45
  });
@@ -88,17 +89,19 @@ describe("StreamManager", () => {
88
89
  describe("incoming streams", () => {
89
90
  it("should handle incoming stream with valid kind", async () => {
90
91
  const manager = new StreamManager();
91
- const peer = createDisconnectedPeer("peer1");
92
+ const peerId = "peer1";
93
+ const peer = createDisconnectedPeer(peerId);
92
94
  const handler = createTestHandler(1);
93
95
  manager.registerIncomingHandlers(handler);
94
- const stream = new TestManualStream(42);
96
+ const quicStreamId = 42;
97
+ const stream = new TestManualStream(quicStreamId);
95
98
  // Simulate incoming stream with kind byte
96
99
  const kindData = new Uint8Array([1, 0x41, 0x42]); // kind=1, followed by some data
97
100
  stream._simulateIncomingData(kindData);
98
101
  stream._incomingData.close();
99
102
  await manager.onIncomingStream(peer, stream);
100
103
  // Check that peer is tracked
101
- const retrievedPeer = manager.getPeer(42);
104
+ const retrievedPeer = manager.getPeer(tryAsStreamId(`${peerId}:${quicStreamId}`));
102
105
  assert.strictEqual(retrievedPeer, peer);
103
106
  });
104
107
  it("should throw error for stream without kind byte", async () => {
@@ -48,7 +48,7 @@ export class SyncTask {
48
48
  // server mode
49
49
  streamManager.registerIncomingHandlers(up0Handler);
50
50
  streamManager.registerIncomingHandlers(new ce128.ServerHandler(spec, (streamId, hash, direction, maxBlocks) => {
51
- const peer = getPeerForStream(streamId);
51
+ const peer = streamManager.getPeer(streamId);
52
52
  if (peer !== null) {
53
53
  return syncTask.handleGetBlockSequence(peer, hash, direction, maxBlocks);
54
54
  }
@@ -14,6 +14,8 @@ export declare const DEFAULT_DEV_CONFIG: {
14
14
  export declare class JamConfig {
15
15
  /** Whether we should be authoring blocks. */
16
16
  readonly isAuthoring: boolean;
17
+ /** Fast forward mode - generate blocks as fast as possible without waiting for real time. */
18
+ readonly isFastForward: boolean;
17
19
  /** Node name. */
18
20
  readonly nodeName: string;
19
21
  /** Node starting configuration. */
@@ -28,8 +30,9 @@ export declare class JamConfig {
28
30
  readonly ancestry: [HeaderHash, TimeSlot][];
29
31
  /** Validator index for dev mode authorship. Use "all" to author as all validators. */
30
32
  readonly devValidatorIndex: U16 | "all" | null;
31
- static new({ isAuthoring, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex, }: {
33
+ static new({ isAuthoring, isFastForward, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex, }: {
32
34
  isAuthoring?: boolean;
35
+ isFastForward?: boolean;
33
36
  nodeName: string;
34
37
  nodeConfig: NodeConfiguration;
35
38
  pvmBackend: PvmBackend;
@@ -1 +1 @@
1
- {"version":3,"file":"jam-config.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/jam-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EAGb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAkClB,6CAA6C;aAC7B,WAAW,EAAE,OAAO;IACpC,iBAAiB;aACD,QAAQ,EAAE,MAAM;IAChC,mCAAmC;aACnB,IAAI,EAAE,iBAAiB;IACvC,4BAA4B;aACZ,UAAU,EAAE,UAAU;IACtC,wCAAwC;aACxB,GAAG,EAAE,SAAS,GAAG,IAAI;IACrC,0BAA0B;aACV,OAAO,EAAE,aAAa,GAAG,IAAI;IAC7C,iDAAiD;aACjC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;IAClD,sFAAsF;aACtE,iBAAiB,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI;IAhDvD,MAAM,CAAC,GAAG,CAAC,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAgB,EAChB,aAAoB,EACpB,QAAa,EACb,iBAAwB,GACzB,EAAE;QACD,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,iBAAiB,CAAC;QAC9B,UAAU,EAAE,UAAU,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpC,sFAAsF;QACtF,iBAAiB,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;KACxC;IAaD,OAAO;CAkBR;AAED,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG;IAC1B,uCAAuC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,oCAAoC;AACpC,MAAM,MAAM,SAAS,GAAG;IAGtB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wCAAwC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG;IAC1B,2BAA2B;IAC3B,GAAG,EAAE,iBAAiB,CAAC;IACvB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"jam-config.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/jam-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EAGb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAqClB,6CAA6C;aAC7B,WAAW,EAAE,OAAO;IACpC,6FAA6F;aAC7E,aAAa,EAAE,OAAO;IACtC,iBAAiB;aACD,QAAQ,EAAE,MAAM;IAChC,mCAAmC;aACnB,IAAI,EAAE,iBAAiB;IACvC,4BAA4B;aACZ,UAAU,EAAE,UAAU;IACtC,wCAAwC;aACxB,GAAG,EAAE,SAAS,GAAG,IAAI;IACrC,0BAA0B;aACV,OAAO,EAAE,aAAa,GAAG,IAAI;IAC7C,iDAAiD;aACjC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;IAClD,sFAAsF;aACtE,iBAAiB,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI;IArDvD,MAAM,CAAC,GAAG,CAAC,EACT,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAgB,EAChB,aAAoB,EACpB,QAAa,EACb,iBAAwB,GACzB,EAAE;QACD,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,iBAAiB,CAAC;QAC9B,UAAU,EAAE,UAAU,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpC,sFAAsF;QACtF,iBAAiB,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;KACxC;IAcD,OAAO;CAoBR;AAED,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG;IAC1B,uCAAuC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,oCAAoC;AACpC,MAAM,MAAM,SAAS,GAAG;IAGtB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wCAAwC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG;IAC1B,2BAA2B;IAC3B,GAAG,EAAE,iBAAiB,CAAC;IACvB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC"}
@@ -9,6 +9,7 @@ export const DEFAULT_DEV_CONFIG = {
9
9
  */
10
10
  export class JamConfig {
11
11
  isAuthoring;
12
+ isFastForward;
12
13
  nodeName;
13
14
  node;
14
15
  pvmBackend;
@@ -16,12 +17,14 @@ export class JamConfig {
16
17
  network;
17
18
  ancestry;
18
19
  devValidatorIndex;
19
- static new({ isAuthoring, nodeName, nodeConfig, pvmBackend, devConfig = null, networkConfig = null, ancestry = [], devValidatorIndex = null, }) {
20
- return new JamConfig(isAuthoring ?? false, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex);
20
+ static new({ isAuthoring, isFastForward, nodeName, nodeConfig, pvmBackend, devConfig = null, networkConfig = null, ancestry = [], devValidatorIndex = null, }) {
21
+ return new JamConfig(isAuthoring ?? false, isFastForward ?? false, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex);
21
22
  }
22
23
  constructor(
23
24
  /** Whether we should be authoring blocks. */
24
25
  isAuthoring,
26
+ /** Fast forward mode - generate blocks as fast as possible without waiting for real time. */
27
+ isFastForward,
25
28
  /** Node name. */
26
29
  nodeName,
27
30
  /** Node starting configuration. */
@@ -37,6 +40,7 @@ export class JamConfig {
37
40
  /** Validator index for dev mode authorship. Use "all" to author as all validators. */
38
41
  devValidatorIndex) {
39
42
  this.isAuthoring = isAuthoring;
43
+ this.isFastForward = isFastForward;
40
44
  this.nodeName = nodeName;
41
45
  this.node = node;
42
46
  this.pvmBackend = pvmBackend;
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1E,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAYhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,CAsJlB"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1E,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAYhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,CAuJlB"}
@@ -92,7 +92,7 @@ export async function main(config, withRelPath, telemetry) {
92
92
  },
93
93
  ],
94
94
  };
95
- const closeAuthorship = await initAuthorship(importer, config.isAuthoring, rootDb, baseConfig, authorshipKeys, isInMemory);
95
+ const closeAuthorship = await initAuthorship(importer, config.isAuthoring, config.isFastForward, rootDb, baseConfig, authorshipKeys, isInMemory);
96
96
  // Networking initialization
97
97
  const closeNetwork = await initNetwork(importer, rootDb, baseConfig, genesisHeaderHash, config.network, bestHeader, isInMemory);
98
98
  const api = {
@@ -128,22 +128,23 @@ export async function main(config, withRelPath, telemetry) {
128
128
  };
129
129
  return api;
130
130
  }
131
- const initAuthorship = async (importer, isAuthoring, rootDb, baseConfig, authorshipKeys, isInMemory) => {
131
+ const initAuthorship = async (importer, isAuthoring, isFastForward, rootDb, baseConfig, authorshipKeys, isInMemory) => {
132
132
  if (!isAuthoring) {
133
133
  logger.log `✍️ Authorship off: disabled`;
134
134
  return () => Promise.resolve();
135
135
  }
136
136
  logger.info `✍️ Starting block generator.`;
137
+ const workerParams = { ...authorshipKeys, isFastForward };
137
138
  const { generator, finish } = isInMemory
138
139
  ? await startBlockGenerator(DirectWorkerConfig.new({
139
140
  ...baseConfig,
140
141
  blocksDb: rootDb.getBlocksDb(),
141
142
  statesDb: rootDb.getStatesDb(),
142
- workerParams: authorshipKeys,
143
+ workerParams,
143
144
  }))
144
145
  : await spawnBlockGeneratorWorker(LmdbWorkerConfig.new({
145
146
  ...baseConfig,
146
- workerParams: authorshipKeys,
147
+ workerParams,
147
148
  }));
148
149
  // relay blocks from generator to importer
149
150
  generator.setOnBlock(async (block) => {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/node",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "The main typeberry node.",
5
5
  "main": "index.ts",
6
6
  "dependencies": {