@aztec/foundation 0.22.0 → 0.24.0

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 (121) hide show
  1. package/dest/abi/buffer.js +2 -2
  2. package/dest/fields/fields.d.ts +1 -0
  3. package/dest/fields/fields.d.ts.map +1 -1
  4. package/dest/fields/fields.js +6 -3
  5. package/package.json +2 -2
  6. package/src/abi/abi.ts +337 -0
  7. package/src/abi/buffer.ts +36 -0
  8. package/src/abi/decoder.ts +176 -0
  9. package/src/abi/encoder.ts +143 -0
  10. package/src/abi/index.ts +6 -0
  11. package/src/abi/selector.ts +243 -0
  12. package/src/abi/utils.ts +50 -0
  13. package/src/array/array.ts +86 -0
  14. package/src/array/index.ts +1 -0
  15. package/src/async-map/index.ts +18 -0
  16. package/src/aztec-address/index.ts +36 -0
  17. package/src/bigint-buffer/index.ts +87 -0
  18. package/src/collection/array.ts +64 -0
  19. package/src/collection/index.ts +1 -0
  20. package/src/committable/committable.ts +46 -0
  21. package/src/committable/index.ts +1 -0
  22. package/src/crypto/index.ts +16 -0
  23. package/src/crypto/keccak/index.ts +33 -0
  24. package/src/crypto/pedersen/index.ts +1 -0
  25. package/src/crypto/pedersen/pedersen.elliptic.ts +584 -0
  26. package/src/crypto/pedersen/pedersen.noble.ts +573 -0
  27. package/src/crypto/pedersen/pedersen.wasm.ts +42 -0
  28. package/src/crypto/random/index.ts +42 -0
  29. package/src/crypto/sha256/index.ts +3 -0
  30. package/src/errors/index.ts +6 -0
  31. package/src/eth-address/index.ts +234 -0
  32. package/src/fields/coordinate.ts +104 -0
  33. package/src/fields/fields.ts +328 -0
  34. package/src/fields/index.ts +3 -0
  35. package/src/fields/point.ts +145 -0
  36. package/src/fifo/bounded_serial_queue.ts +100 -0
  37. package/src/fifo/index.ts +4 -0
  38. package/src/fifo/memory_fifo.ts +118 -0
  39. package/src/fifo/semaphore.ts +33 -0
  40. package/src/fifo/serial_queue.ts +81 -0
  41. package/src/index.ts +29 -0
  42. package/src/json-rpc/README.md +55 -0
  43. package/src/json-rpc/class_converter.ts +213 -0
  44. package/src/json-rpc/client/index.ts +1 -0
  45. package/src/json-rpc/client/json_rpc_client.ts +147 -0
  46. package/src/json-rpc/convert.ts +163 -0
  47. package/src/json-rpc/fixtures/class_a.ts +15 -0
  48. package/src/json-rpc/fixtures/class_b.ts +15 -0
  49. package/src/json-rpc/fixtures/test_state.ts +59 -0
  50. package/src/json-rpc/index.ts +8 -0
  51. package/src/json-rpc/js_utils.ts +20 -0
  52. package/src/json-rpc/server/index.ts +2 -0
  53. package/src/json-rpc/server/json_proxy.ts +60 -0
  54. package/src/json-rpc/server/json_rpc_server.ts +269 -0
  55. package/src/log/console.ts +39 -0
  56. package/src/log/debug.ts +83 -0
  57. package/src/log/index.ts +5 -0
  58. package/src/log/log_fn.ts +5 -0
  59. package/src/log/log_history.ts +44 -0
  60. package/src/log/logger.ts +137 -0
  61. package/src/mutex/index.ts +83 -0
  62. package/src/mutex/mutex_database.ts +12 -0
  63. package/src/noir/index.ts +1 -0
  64. package/src/noir/noir_package_config.ts +54 -0
  65. package/src/retry/index.ts +99 -0
  66. package/src/running-promise/index.ts +60 -0
  67. package/src/serialize/buffer_reader.ts +286 -0
  68. package/src/serialize/field_reader.ts +143 -0
  69. package/src/serialize/free_funcs.ts +147 -0
  70. package/src/serialize/index.ts +5 -0
  71. package/src/serialize/serialize.ts +303 -0
  72. package/src/serialize/types.ts +40 -0
  73. package/src/sleep/index.ts +71 -0
  74. package/src/testing/index.ts +1 -0
  75. package/src/testing/test_data.ts +36 -0
  76. package/src/timer/elapsed.ts +23 -0
  77. package/src/timer/index.ts +3 -0
  78. package/src/timer/timeout.ts +64 -0
  79. package/src/timer/timer.ts +48 -0
  80. package/src/transport/browser/index.ts +4 -0
  81. package/src/transport/browser/message_port_socket.ts +48 -0
  82. package/src/transport/browser/shared_worker_connector.ts +21 -0
  83. package/src/transport/browser/shared_worker_listener.ts +53 -0
  84. package/src/transport/browser/worker_connector.ts +30 -0
  85. package/src/transport/browser/worker_listener.ts +54 -0
  86. package/src/transport/dispatch/create_dispatch_fn.ts +35 -0
  87. package/src/transport/dispatch/create_dispatch_proxy.ts +141 -0
  88. package/src/transport/dispatch/messages.ts +58 -0
  89. package/src/transport/index.ts +11 -0
  90. package/src/transport/interface/connector.ts +9 -0
  91. package/src/transport/interface/listener.ts +16 -0
  92. package/src/transport/interface/socket.ts +15 -0
  93. package/src/transport/interface/transferable.ts +125 -0
  94. package/src/transport/node/index.ts +2 -0
  95. package/src/transport/node/node_connector.ts +30 -0
  96. package/src/transport/node/node_connector_socket.ts +52 -0
  97. package/src/transport/node/node_listener.ts +34 -0
  98. package/src/transport/node/node_listener_socket.ts +48 -0
  99. package/src/transport/transport_client.ts +131 -0
  100. package/src/transport/transport_server.ts +108 -0
  101. package/src/trees/index.ts +54 -0
  102. package/src/types/index.ts +8 -0
  103. package/src/url/index.ts +73 -0
  104. package/src/wasm/README.md +6 -0
  105. package/src/wasm/empty_wasi_sdk.ts +166 -0
  106. package/src/wasm/fixtures/gcd.wasm +0 -0
  107. package/src/wasm/fixtures/gcd.wat +27 -0
  108. package/src/wasm/index.ts +1 -0
  109. package/src/wasm/wasm_module.ts +260 -0
  110. package/src/worker/browser/index.ts +2 -0
  111. package/src/worker/browser/start_web_module.ts +23 -0
  112. package/src/worker/browser/web_data_store.ts +38 -0
  113. package/src/worker/browser/web_worker.ts +24 -0
  114. package/src/worker/data_store.ts +19 -0
  115. package/src/worker/index.ts +2 -0
  116. package/src/worker/node/index.ts +2 -0
  117. package/src/worker/node/node_data_store.ts +27 -0
  118. package/src/worker/node/node_worker.ts +22 -0
  119. package/src/worker/node/start_node_module.ts +29 -0
  120. package/src/worker/wasm_worker.ts +7 -0
  121. package/src/worker/worker_pool.ts +73 -0
@@ -11,7 +11,7 @@ export function bufferAsFields(input, targetLength) {
11
11
  const encoded = [
12
12
  new Fr(input.length),
13
13
  ...chunk(input, Fr.SIZE_IN_BYTES - 1).map(c => {
14
- const fieldBytes = Buffer.alloc(32);
14
+ const fieldBytes = Buffer.alloc(Fr.SIZE_IN_BYTES);
15
15
  Buffer.from(c).copy(fieldBytes, 1);
16
16
  return Fr.fromBuffer(fieldBytes);
17
17
  }),
@@ -31,4 +31,4 @@ export function bufferFromFields(fields) {
31
31
  const [length, ...payload] = fields;
32
32
  return Buffer.concat(payload.map(f => f.toBuffer().subarray(1))).subarray(0, length.toNumber());
33
33
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FiaS9idWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxZQUFvQjtJQUNoRSxNQUFNLE9BQU8sR0FBRztRQUNkLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDcEIsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7S0FDSCxDQUFDO0lBQ0YsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLE9BQU8sQ0FBQyxNQUFNLGVBQWUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBQ0QsOEZBQThGO0lBQzlGLE9BQU8sQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFZO0lBQzNDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDcEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2xHLENBQUMifQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FiaS9idWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV6Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxZQUFvQjtJQUNoRSxNQUFNLE9BQU8sR0FBRztRQUNkLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDcEIsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO0tBQ0gsQ0FBQztJQUNGLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxPQUFPLENBQUMsTUFBTSxlQUFlLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUNELDhGQUE4RjtJQUM5RixPQUFPLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBWTtJQUMzQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3BDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNsRyxDQUFDIn0=
@@ -26,6 +26,7 @@ declare abstract class BaseField {
26
26
  toBuffer(): Buffer;
27
27
  toString(): `0x${string}`;
28
28
  toBigInt(): bigint;
29
+ toBool(): boolean;
29
30
  toNumber(): number;
30
31
  toShortString(): string;
31
32
  equals(rhs: BaseField): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/fields/fields.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiB7D;;;;;;;;GAQG;AACH,uBAAe,SAAS;IACtB,MAAM,CAAC,aAAa,SAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B;;;SAGK;IACL,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,SAAS,aAAa,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM;IA8B3E,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;IAEpC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAOlB,QAAQ,IAAI,KAAK,MAAM,EAAE;IAIzB,QAAQ,IAAI,MAAM;IAUlB,QAAQ,IAAI,MAAM;IAQlB,aAAa,IAAI,MAAM;IAKvB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAI/B,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAI3B,MAAM,IAAI,OAAO;IAIjB,cAAc,IAAI,MAAM;IAIxB,OAAO;CAGR;AAmCD;;GAEG;AACH,MAAM,WAAW,EAAE;IACjB,aAAa;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,EAAG,SAAQ,SAAS;IAC/B,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;gBAEzE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM;IAI1D,SAAS,CAAC,OAAO;IAIjB,MAAM,CAAC,MAAM;IAIb,MAAM,CAAC,IAAI;IAIX,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAI/C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAItC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,iBAAiB;IAEjB,GAAG,CAAC,GAAG,EAAE,EAAE;IAIX,GAAG,CAAC,GAAG,EAAE,EAAE;IAKX,GAAG,CAAC,GAAG,EAAE,EAAE;IAIX,GAAG,CAAC,GAAG,EAAE,EAAE;CAQZ;AAED;;GAEG;AACH,MAAM,WAAW,EAAE;IACjB,aAAa;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,EAAG,SAAQ,SAAS;IAC/B,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;IACrF,OAAO,CAAC,MAAM,CAAC,UAAU,CAA6C;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IAErD,IAAI,GAAG,IAAI,EAAE,CAEZ;IAED,IAAI,IAAI,IAAI,EAAE,CAEb;gBAEW,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM;IAI1D,SAAS,CAAC,OAAO;IAIjB,MAAM,CAAC,MAAM;IAIb,MAAM,CAAC,IAAI;IAIX,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAI/C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAItC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE;CAG1C;AA6BD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAChC,eAAO,MAAM,cAAc,WAAK,CAAC"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/fields/fields.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAiB7D;;;;;;;;GAQG;AACH,uBAAe,SAAS;IACtB,MAAM,CAAC,aAAa,SAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAE1B;;;SAGK;IACL,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,SAAS,aAAa,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM;IA8B3E,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM;IAEpC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAOlB,QAAQ,IAAI,KAAK,MAAM,EAAE;IAIzB,QAAQ,IAAI,MAAM;IAUlB,MAAM,IAAI,OAAO;IAIjB,QAAQ,IAAI,MAAM;IAQlB,aAAa,IAAI,MAAM;IAKvB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAI/B,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAI3B,MAAM,IAAI,OAAO;IAIjB,cAAc,IAAI,MAAM;IAIxB,OAAO;CAGR;AAmCD;;GAEG;AACH,MAAM,WAAW,EAAE;IACjB,aAAa;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,EAAG,SAAQ,SAAS;IAC/B,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;gBAEzE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM;IAI1D,SAAS,CAAC,OAAO;IAIjB,MAAM,CAAC,MAAM;IAIb,MAAM,CAAC,IAAI;IAIX,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAI/C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAItC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,iBAAiB;IAEjB,GAAG,CAAC,GAAG,EAAE,EAAE;IAIX,GAAG,CAAC,GAAG,EAAE,EAAE;IAKX,GAAG,CAAC,GAAG,EAAE,EAAE;IAIX,GAAG,CAAC,GAAG,EAAE,EAAE;CAQZ;AAED;;GAEG;AACH,MAAM,WAAW,EAAE;IACjB,aAAa;IACb,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,EAAG,SAAQ,SAAS;IAC/B,MAAM,CAAC,IAAI,KAAc;IACzB,MAAM,CAAC,OAAO,SAAuE;IACrF,OAAO,CAAC,MAAM,CAAC,UAAU,CAA6C;IACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IAErD,IAAI,GAAG,IAAI,EAAE,CAEZ;IAED,IAAI,IAAI,IAAI,EAAE,CAEb;gBAEW,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,MAAM;IAI1D,SAAS,CAAC,OAAO;IAIjB,MAAM,CAAC,MAAM;IAIb,MAAM,CAAC,IAAI;IAIX,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY;IAI/C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;IAItC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM;IAI7B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE;CAG1C;AA6BD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,EAAE,CAAC;AAChC,eAAO,MAAM,cAAc,WAAK,CAAC"}
@@ -71,6 +71,9 @@ class BaseField {
71
71
  }
72
72
  return this.asBigInt;
73
73
  }
74
+ toBool() {
75
+ return Boolean(this.toBigInt());
76
+ }
74
77
  toNumber() {
75
78
  const value = this.toBigInt();
76
79
  if (value > Number.MAX_SAFE_INTEGER) {
@@ -222,8 +225,8 @@ function modInverse(b) {
222
225
  if (gcd != 1n) {
223
226
  throw Error('Inverse does not exist');
224
227
  }
225
- // Add modulus to ensure positive
226
- return new Fr(x + Fr.MODULUS);
228
+ // Add modulus if -ve to ensure positive
229
+ return new Fr(x > 0 ? x : x + Fr.MODULUS);
227
230
  }
228
231
  /**
229
232
  * The extended Euclidean algorithm can be used to find the multiplicative inverse of a field element
@@ -239,4 +242,4 @@ function extendedEuclidean(a, modulus) {
239
242
  }
240
243
  }
241
244
  export const GrumpkinScalar = Fq;
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpZWxkcy9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFlckM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFlLFNBQVM7SUFLdEI7OztTQUdLO0lBQ0wsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQXNCLEtBQXFEO1FBQ3pFLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxNQUFNLFlBQVksU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckYsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRO2dCQUNYLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLGFBQWE7b0JBQ3RDLENBQUMsQ0FBQyxLQUFLO29CQUNQLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FB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
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZpZWxkcy9maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFlckM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFlLFNBQVM7SUFLdEI7OztTQUdLO0lBQ0wsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFlBQXNCLEtBQXFEO1FBQ3pFLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1lBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssQ0FBQyxNQUFNLFlBQVksU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckYsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRO2dCQUNYLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLGFBQWE7b0JBQ3RDLENBQUMsQ0FBQyxLQUFLO29CQUNQLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7YUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/foundation",
3
- "version": "0.22.0",
3
+ "version": "0.24.0",
4
4
  "packageManager": "yarn@3.4.1",
5
5
  "type": "module",
6
6
  "main": "./dest/index.js",
@@ -61,7 +61,7 @@
61
61
  "rootDir": "./src"
62
62
  },
63
63
  "dependencies": {
64
- "@aztec/bb.js": "0.22.0",
64
+ "@aztec/bb.js": "0.24.0",
65
65
  "@koa/cors": "^4.0.0",
66
66
  "@noble/curves": "^1.2.0",
67
67
  "bn.js": "^5.2.1",
package/src/abi/abi.ts ADDED
@@ -0,0 +1,337 @@
1
+ import { inflate } from 'pako';
2
+
3
+ import { type FunctionSelector } from './selector.js';
4
+
5
+ /**
6
+ * A named type.
7
+ */
8
+ export interface ABIVariable {
9
+ /**
10
+ * The name of the variable.
11
+ */
12
+ name: string;
13
+ /**
14
+ * The type of the variable.
15
+ */
16
+ type: ABIType;
17
+ }
18
+
19
+ /**
20
+ * Indicates whether a parameter is public or secret/private.
21
+ */
22
+ export enum ABIParameterVisibility {
23
+ PUBLIC = 'public',
24
+ SECRET = 'secret',
25
+ }
26
+
27
+ /**
28
+ * A function parameter.
29
+ */
30
+ export interface ABIParameter extends ABIVariable {
31
+ /**
32
+ * Indicates whether a parameter is public or secret/private.
33
+ */
34
+ visibility: ABIParameterVisibility;
35
+ }
36
+
37
+ /**
38
+ * A basic type.
39
+ */
40
+ export interface BasicType<T extends string> {
41
+ /**
42
+ * The kind of the type.
43
+ */
44
+ kind: T;
45
+ }
46
+
47
+ /**
48
+ * A variable type.
49
+ */
50
+ export type ABIType = BasicType<'field'> | BasicType<'boolean'> | IntegerType | ArrayType | StringType | StructType;
51
+
52
+ /**
53
+ * An integer type.
54
+ */
55
+ export interface IntegerType extends BasicType<'integer'> {
56
+ /**
57
+ * The sign of the integer.
58
+ */
59
+ sign: string;
60
+ /**
61
+ * The width of the integer in bits.
62
+ */
63
+ width: number;
64
+ }
65
+
66
+ /**
67
+ * An array type.
68
+ */
69
+ export interface ArrayType extends BasicType<'array'> {
70
+ /**
71
+ * The length of the array.
72
+ */
73
+ length: number;
74
+ /**
75
+ * The type of the array elements.
76
+ */
77
+ type: ABIType;
78
+ }
79
+
80
+ /**
81
+ * A string type.
82
+ */
83
+ export interface StringType extends BasicType<'string'> {
84
+ /**
85
+ * The length of the string.
86
+ */
87
+ length: number;
88
+ }
89
+
90
+ /**
91
+ * A struct type.
92
+ */
93
+ export interface StructType extends BasicType<'struct'> {
94
+ /**
95
+ * The fields of the struct.
96
+ */
97
+ fields: ABIVariable[];
98
+ /**
99
+ * Fully qualified name of the struct.
100
+ */
101
+ path: string;
102
+ }
103
+
104
+ /**
105
+ * A contract event.
106
+ */
107
+ export interface EventAbi {
108
+ /**
109
+ * The event name.
110
+ */
111
+ name: string;
112
+ /**
113
+ * Fully qualified name of the event.
114
+ */
115
+ path: string;
116
+ /**
117
+ * The fields of the event.
118
+ */
119
+ fields: ABIVariable[];
120
+ }
121
+
122
+ /**
123
+ * Aztec.nr function types.
124
+ */
125
+ export enum FunctionType {
126
+ SECRET = 'secret',
127
+ OPEN = 'open',
128
+ UNCONSTRAINED = 'unconstrained',
129
+ }
130
+
131
+ /**
132
+ * The abi entry of a function.
133
+ */
134
+ export interface FunctionAbi {
135
+ /**
136
+ * The name of the function.
137
+ */
138
+ name: string;
139
+ /**
140
+ * Whether the function is secret.
141
+ */
142
+ functionType: FunctionType;
143
+ /**
144
+ * Whether the function is internal.
145
+ */
146
+ isInternal: boolean;
147
+ /**
148
+ * Function parameters.
149
+ */
150
+ parameters: ABIParameter[];
151
+ /**
152
+ * The types of the return values.
153
+ */
154
+ returnTypes: ABIType[];
155
+ }
156
+
157
+ /**
158
+ * The artifact entry of a function.
159
+ */
160
+ export interface FunctionArtifact extends FunctionAbi {
161
+ /**
162
+ * The ACIR bytecode of the function.
163
+ */
164
+ bytecode: string;
165
+ /**
166
+ * The verification key of the function.
167
+ */
168
+ verificationKey?: string;
169
+ /**
170
+ * Maps opcodes to source code pointers
171
+ */
172
+ debugSymbols: string;
173
+ }
174
+
175
+ /**
176
+ * A file ID. It's assigned during compilation.
177
+ */
178
+ export type FileId = number;
179
+
180
+ /**
181
+ * A pointer to a specific section of the source code.
182
+ */
183
+ export interface SourceCodeLocation {
184
+ /**
185
+ * The section of the source code.
186
+ */
187
+ span: {
188
+ /**
189
+ * The byte where the section starts.
190
+ */
191
+ start: number;
192
+ /**
193
+ * The byte where the section ends.
194
+ */
195
+ end: number;
196
+ };
197
+ /**
198
+ * The source code file pointed to.
199
+ */
200
+ file: FileId;
201
+ }
202
+
203
+ /**
204
+ * The location of an opcode in the bytecode.
205
+ * It's a string of the form `{acirIndex}` or `{acirIndex}:{brilligIndex}`.
206
+ */
207
+ export type OpcodeLocation = string;
208
+
209
+ /**
210
+ * The debug information for a given function.
211
+ */
212
+ export interface DebugInfo {
213
+ /**
214
+ * A map of the opcode location to the source code location.
215
+ */
216
+ locations: Record<OpcodeLocation, SourceCodeLocation[]>;
217
+ }
218
+
219
+ /**
220
+ * Maps a file ID to its metadata for debugging purposes.
221
+ */
222
+ export type DebugFileMap = Record<
223
+ FileId,
224
+ {
225
+ /**
226
+ * The source code of the file.
227
+ */
228
+ source: string;
229
+ /**
230
+ * The path of the file.
231
+ */
232
+ path: string;
233
+ }
234
+ >;
235
+
236
+ /**
237
+ * Defines artifact of a contract.
238
+ */
239
+ export interface ContractArtifact {
240
+ /**
241
+ * The name of the contract.
242
+ */
243
+ name: string;
244
+
245
+ /**
246
+ * The version of compiler used to create this artifact
247
+ */
248
+ aztecNrVersion?: string;
249
+
250
+ /**
251
+ * The functions of the contract.
252
+ */
253
+ functions: FunctionArtifact[];
254
+ /**
255
+ * The events of the contract.
256
+ */
257
+ events: EventAbi[];
258
+
259
+ /**
260
+ * The map of file ID to the source code and path of the file.
261
+ */
262
+ fileMap: DebugFileMap;
263
+ }
264
+
265
+ /**
266
+ * Debug metadata for a function.
267
+ */
268
+ export interface FunctionDebugMetadata {
269
+ /**
270
+ * Maps opcodes to source code pointers
271
+ */
272
+ debugSymbols: DebugInfo;
273
+ /**
274
+ * Maps the file IDs to the file contents to resolve pointers
275
+ */
276
+ files: DebugFileMap;
277
+ }
278
+
279
+ /** A function artifact with optional debug metadata */
280
+ export interface FunctionArtifactWithDebugMetadata extends FunctionArtifact {
281
+ /** Debug metadata for the function. */
282
+ debug?: FunctionDebugMetadata;
283
+ }
284
+
285
+ /**
286
+ * Gets a function artifact given its name or selector.
287
+ */
288
+ export function getFunctionArtifact(
289
+ artifact: ContractArtifact,
290
+ functionNameOrSelector: string | FunctionSelector,
291
+ ): FunctionArtifact {
292
+ const functionArtifact = artifact.functions.find(f =>
293
+ typeof functionNameOrSelector === 'string'
294
+ ? f.name === functionNameOrSelector
295
+ : functionNameOrSelector.equals(f.name, f.parameters),
296
+ );
297
+ if (!functionArtifact) {
298
+ throw new Error(`Unknown function ${functionNameOrSelector}`);
299
+ }
300
+ return functionArtifact;
301
+ }
302
+
303
+ /** @deprecated Use getFunctionArtifact instead */
304
+ export function getFunctionArtifactWithSelector(artifact: ContractArtifact, selector: FunctionSelector) {
305
+ return getFunctionArtifact(artifact, selector);
306
+ }
307
+
308
+ /**
309
+ * Gets a function artifact including debug metadata given its name or selector.
310
+ */
311
+ export function getFunctionArtifactWithDebugMetadata(
312
+ artifact: ContractArtifact,
313
+ functionNameOrSelector: string | FunctionSelector,
314
+ ): FunctionArtifactWithDebugMetadata {
315
+ const functionArtifact = getFunctionArtifact(artifact, functionNameOrSelector);
316
+ const debugMetadata = getFunctionDebugMetadata(artifact, functionArtifact);
317
+ return { ...functionArtifact, debug: debugMetadata };
318
+ }
319
+
320
+ /**
321
+ * Gets the debug metadata of a given function from the contract artifact
322
+ * @param artifact - The contract build artifact
323
+ * @param functionName - The name of the function
324
+ * @returns The debug metadata of the function
325
+ */
326
+ export function getFunctionDebugMetadata(
327
+ contractArtifact: ContractArtifact,
328
+ functionArtifact: FunctionArtifact,
329
+ ): FunctionDebugMetadata | undefined {
330
+ if (functionArtifact.debugSymbols && contractArtifact.fileMap) {
331
+ const debugSymbols = JSON.parse(
332
+ inflate(Buffer.from(functionArtifact.debugSymbols, 'base64'), { to: 'string', raw: true }),
333
+ );
334
+ return { debugSymbols, files: contractArtifact.fileMap };
335
+ }
336
+ return undefined;
337
+ }
@@ -0,0 +1,36 @@
1
+ import chunk from 'lodash.chunk';
2
+
3
+ import { Fr } from '../fields/fields.js';
4
+
5
+ /**
6
+ * Formats a buffer as an array of fields. Splits the input into 31-byte chunks, and stores each
7
+ * of them into a field, omitting the field's first byte, then adds zero-fields at the end until the max length.
8
+ * @param input - Input to format.
9
+ * @param targetLength - Length of the target array in number of fields.
10
+ * @returns A field with the total length in bytes, followed by an array of fields such that their concatenation is equal to the input buffer, followed by enough zeroes to reach targetLength.
11
+ */
12
+ export function bufferAsFields(input: Buffer, targetLength: number): Fr[] {
13
+ const encoded = [
14
+ new Fr(input.length),
15
+ ...chunk(input, Fr.SIZE_IN_BYTES - 1).map(c => {
16
+ const fieldBytes = Buffer.alloc(Fr.SIZE_IN_BYTES);
17
+ Buffer.from(c).copy(fieldBytes, 1);
18
+ return Fr.fromBuffer(fieldBytes);
19
+ }),
20
+ ];
21
+ if (encoded.length > targetLength) {
22
+ throw new Error(`Input buffer exceeds maximum size: got ${encoded.length} but max is ${targetLength}`);
23
+ }
24
+ // Fun fact: we cannot use padArrayEnd here since typescript cannot deal with a Tuple this big
25
+ return [...encoded, ...Array(targetLength - encoded.length).fill(Fr.ZERO)];
26
+ }
27
+
28
+ /**
29
+ * Recovers a buffer from an array of fields.
30
+ * @param fields - An output from bufferAsFields.
31
+ * @returns The recovered buffer.
32
+ */
33
+ export function bufferFromFields(fields: Fr[]): Buffer {
34
+ const [length, ...payload] = fields;
35
+ return Buffer.concat(payload.map(f => f.toBuffer().subarray(1))).subarray(0, length.toNumber());
36
+ }
@@ -0,0 +1,176 @@
1
+ import { AztecAddress } from '../aztec-address/index.js';
2
+ import { Fr } from '../fields/index.js';
3
+ import { ABIParameter, type ABIType, ABIVariable, FunctionArtifact } from './abi.js';
4
+ import { isAztecAddressStruct } from './utils.js';
5
+
6
+ /**
7
+ * The type of our decoded ABI.
8
+ */
9
+ export type DecodedReturn = bigint | boolean | AztecAddress | DecodedReturn[] | { [key: string]: DecodedReturn };
10
+
11
+ /**
12
+ * Decodes return values from a function call.
13
+ * Missing support for integer and string.
14
+ */
15
+ class ReturnValuesDecoder {
16
+ constructor(private artifact: FunctionArtifact, private flattened: Fr[]) {}
17
+
18
+ /**
19
+ * Decodes a single return value from field to the given type.
20
+ * @param abiType - The type of the return value.
21
+ * @returns The decoded return value.
22
+ */
23
+ private decodeReturn(abiType: ABIType): DecodedReturn {
24
+ switch (abiType.kind) {
25
+ case 'field':
26
+ return this.getNextField().toBigInt();
27
+ case 'integer':
28
+ if (abiType.sign === 'signed') {
29
+ throw new Error('Unsupported type: signed integer');
30
+ }
31
+ return this.getNextField().toBigInt();
32
+ case 'boolean':
33
+ return !this.getNextField().isZero();
34
+ case 'array': {
35
+ const array = [];
36
+ for (let i = 0; i < abiType.length; i += 1) {
37
+ array.push(this.decodeReturn(abiType.type));
38
+ }
39
+ return array;
40
+ }
41
+ case 'struct': {
42
+ const struct: { [key: string]: DecodedReturn } = {};
43
+ if (isAztecAddressStruct(abiType)) {
44
+ return new AztecAddress(this.getNextField().toBuffer());
45
+ }
46
+
47
+ for (const field of abiType.fields) {
48
+ struct[field.name] = this.decodeReturn(field.type);
49
+ }
50
+ return struct;
51
+ }
52
+ case 'string': {
53
+ const array = [];
54
+ for (let i = 0; i < abiType.length; i += 1) {
55
+ array.push(this.getNextField().toBigInt());
56
+ }
57
+ return array;
58
+ }
59
+ default:
60
+ throw new Error(`Unsupported type: ${abiType}`);
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Gets the next field in the flattened return values.
66
+ * @returns The next field in the flattened return values.
67
+ */
68
+ private getNextField(): Fr {
69
+ const field = this.flattened.shift();
70
+ if (!field) {
71
+ throw new Error('Not enough return values');
72
+ }
73
+ return field;
74
+ }
75
+
76
+ /**
77
+ * Decodes all the return values for the given function ABI.
78
+ * Aztec.nr support only single return value
79
+ * The return value can however be simple types, structs or arrays
80
+ * @returns The decoded return values.
81
+ */
82
+ public decode(): DecodedReturn {
83
+ if (this.artifact.returnTypes.length > 1) {
84
+ throw new Error('Multiple return values not supported');
85
+ }
86
+ if (this.artifact.returnTypes.length === 0) {
87
+ return [];
88
+ }
89
+ return this.decodeReturn(this.artifact.returnTypes[0]);
90
+ }
91
+ }
92
+
93
+ /**
94
+ * Decodes return values from a function call.
95
+ * @param abi - The ABI entry of the function.
96
+ * @param returnValues - The decoded return values.
97
+ * @returns
98
+ */
99
+ export function decodeReturnValues(abi: FunctionArtifact, returnValues: Fr[]) {
100
+ return new ReturnValuesDecoder(abi, returnValues.slice()).decode();
101
+ }
102
+
103
+ /**
104
+ * Decodes the signature of a function from the name and parameters.
105
+ */
106
+ export class FunctionSignatureDecoder {
107
+ private separator: string;
108
+ constructor(private name: string, private parameters: ABIParameter[], private includeNames = false) {
109
+ this.separator = includeNames ? ', ' : ',';
110
+ }
111
+
112
+ /**
113
+ * Decodes a single function parameter type for the function signature.
114
+ * @param param - The parameter type to decode.
115
+ * @returns A string representing the parameter type.
116
+ */
117
+ private getParameterType(param: ABIType): string {
118
+ switch (param.kind) {
119
+ case 'field':
120
+ return 'Field';
121
+ case 'integer':
122
+ if (param.sign === 'signed') {
123
+ throw new Error('Unsupported type: signed integer');
124
+ }
125
+ return `u${param.width}`;
126
+ case 'boolean':
127
+ return 'bool';
128
+ case 'array':
129
+ return `[${this.getParameterType(param.type)};${param.length}]`;
130
+ case 'string':
131
+ return `str<${param.length}>`;
132
+ case 'struct':
133
+ return `(${param.fields.map(field => `${this.decodeParameter(field)}`).join(this.separator)})`;
134
+ default:
135
+ throw new Error(`Unsupported type: ${param}`);
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Decodes a single function parameter for the function signature.
141
+ * @param param - The parameter to decode.
142
+ * @returns A string representing the parameter type and optionally its name.
143
+ */
144
+ private decodeParameter(param: ABIVariable): string {
145
+ const type = this.getParameterType(param.type);
146
+ return this.includeNames ? `${param.name}: ${type}` : type;
147
+ }
148
+
149
+ /**
150
+ * Decodes all the parameters and build the function signature
151
+ * @returns The function signature.
152
+ */
153
+ public decode(): string {
154
+ return `${this.name}(${this.parameters.map(param => this.decodeParameter(param)).join(this.separator)})`;
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Decodes a function signature from the name and parameters.
160
+ * @param name - The name of the function.
161
+ * @param parameters - The parameters of the function.
162
+ * @returns - The function signature.
163
+ */
164
+ export function decodeFunctionSignature(name: string, parameters: ABIParameter[]) {
165
+ return new FunctionSignatureDecoder(name, parameters).decode();
166
+ }
167
+
168
+ /**
169
+ * Decodes a function signature from the name and parameters including parameter names.
170
+ * @param name - The name of the function.
171
+ * @param parameters - The parameters of the function.
172
+ * @returns - The user-friendly function signature.
173
+ */
174
+ export function decodeFunctionSignatureWithParameterNames(name: string, parameters: ABIParameter[]) {
175
+ return new FunctionSignatureDecoder(name, parameters, true).decode();
176
+ }