@aztec-labs/ethereum 6.0.0-rc.3 → 6.0.0-rc.4

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 (114) hide show
  1. package/dest/blob_tx.d.ts +24 -0
  2. package/dest/blob_tx.d.ts.map +1 -0
  3. package/dest/blob_tx.js +94 -0
  4. package/dest/bn254/hash_to_point.d.ts +32 -0
  5. package/dest/bn254/hash_to_point.d.ts.map +1 -0
  6. package/dest/bn254/hash_to_point.js +80 -0
  7. package/dest/bn254/index.d.ts +3 -0
  8. package/dest/bn254/index.d.ts.map +1 -0
  9. package/dest/bn254/index.js +2 -0
  10. package/dest/bn254/proof_of_possession_gas.d.ts +29 -0
  11. package/dest/bn254/proof_of_possession_gas.d.ts.map +1 -0
  12. package/dest/bn254/proof_of_possession_gas.js +24 -0
  13. package/dest/client.d.ts +1 -1
  14. package/dest/client.d.ts.map +1 -1
  15. package/dest/client.js +5 -3
  16. package/dest/contracts/errors.d.ts +10 -3
  17. package/dest/contracts/errors.d.ts.map +1 -1
  18. package/dest/contracts/errors.js +10 -4
  19. package/dest/contracts/inbox.d.ts +1 -1
  20. package/dest/contracts/inbox.d.ts.map +1 -1
  21. package/dest/contracts/inbox.js +2 -0
  22. package/dest/contracts/log.d.ts +7 -1
  23. package/dest/contracts/log.d.ts.map +1 -1
  24. package/dest/contracts/log.js +6 -0
  25. package/dest/contracts/rollup.d.ts +32 -4
  26. package/dest/contracts/rollup.d.ts.map +1 -1
  27. package/dest/contracts/rollup.js +63 -7
  28. package/dest/deploy_aztec_l1_contracts.d.ts +16 -1
  29. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
  30. package/dest/deploy_aztec_l1_contracts.js +201 -65
  31. package/dest/foundry_binary.d.ts +1 -1
  32. package/dest/foundry_binary.d.ts.map +1 -1
  33. package/dest/foundry_binary.js +2 -1
  34. package/dest/l1_tx_utils/amsterdam.d.ts +1 -1
  35. package/dest/l1_tx_utils/amsterdam.d.ts.map +1 -1
  36. package/dest/l1_tx_utils/amsterdam.js +4 -1
  37. package/dest/l1_tx_utils/constants.d.ts +2 -1
  38. package/dest/l1_tx_utils/constants.d.ts.map +1 -1
  39. package/dest/l1_tx_utils/constants.js +3 -0
  40. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +1 -1
  41. package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -1
  42. package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +6 -1
  43. package/dest/l1_tx_utils/index.d.ts +2 -1
  44. package/dest/l1_tx_utils/index.d.ts.map +1 -1
  45. package/dest/l1_tx_utils/index.js +1 -0
  46. package/dest/l1_tx_utils/l1_tx_utils.d.ts +21 -1
  47. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
  48. package/dest/l1_tx_utils/l1_tx_utils.js +71 -5
  49. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +8 -1
  50. package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
  51. package/dest/l1_tx_utils/readonly_l1_tx_utils.js +1 -1
  52. package/dest/l1_tx_utils/send_cost.d.ts +15 -0
  53. package/dest/l1_tx_utils/send_cost.d.ts.map +1 -0
  54. package/dest/l1_tx_utils/send_cost.js +10 -0
  55. package/dest/l1_tx_utils/signer.d.ts +2 -2
  56. package/dest/l1_tx_utils/signer.d.ts.map +1 -1
  57. package/dest/l1_tx_utils/signer.js +2 -2
  58. package/dest/l1_tx_utils/tx_delayer.d.ts +1 -1
  59. package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -1
  60. package/dest/l1_tx_utils/tx_delayer.js +8 -26
  61. package/dest/publisher_manager.d.ts +127 -13
  62. package/dest/publisher_manager.d.ts.map +1 -1
  63. package/dest/publisher_manager.js +320 -79
  64. package/dest/test/anvil_hardfork.d.ts +42 -0
  65. package/dest/test/anvil_hardfork.d.ts.map +1 -0
  66. package/dest/test/anvil_hardfork.js +107 -0
  67. package/dest/test/eth_cheat_codes.d.ts +30 -5
  68. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  69. package/dest/test/eth_cheat_codes.js +283 -101
  70. package/dest/test/index.d.ts +3 -1
  71. package/dest/test/index.d.ts.map +1 -1
  72. package/dest/test/index.js +2 -0
  73. package/dest/test/l1_hardfork.d.ts +43 -0
  74. package/dest/test/l1_hardfork.d.ts.map +1 -0
  75. package/dest/test/l1_hardfork.js +51 -0
  76. package/dest/test/recording_rpc_server.d.ts +1 -1
  77. package/dest/test/recording_rpc_server.d.ts.map +1 -1
  78. package/dest/test/recording_rpc_server.js +1 -0
  79. package/dest/test/rollup_cheat_codes.d.ts +1 -1
  80. package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
  81. package/dest/test/rollup_cheat_codes.js +7 -7
  82. package/dest/test/start_anvil.d.ts +14 -2
  83. package/dest/test/start_anvil.d.ts.map +1 -1
  84. package/dest/test/start_anvil.js +28 -11
  85. package/package.json +13 -11
  86. package/src/blob_tx.ts +118 -0
  87. package/src/bn254/hash_to_point.ts +95 -0
  88. package/src/bn254/index.ts +2 -0
  89. package/src/bn254/proof_of_possession_gas.ts +54 -0
  90. package/src/client.ts +6 -3
  91. package/src/contracts/errors.ts +12 -4
  92. package/src/contracts/inbox.ts +4 -0
  93. package/src/contracts/log.ts +12 -0
  94. package/src/contracts/rollup.ts +63 -6
  95. package/src/deploy_aztec_l1_contracts.ts +238 -63
  96. package/src/foundry_binary.ts +2 -1
  97. package/src/l1_tx_utils/amsterdam.ts +4 -1
  98. package/src/l1_tx_utils/constants.ts +4 -0
  99. package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +11 -1
  100. package/src/l1_tx_utils/index.ts +1 -0
  101. package/src/l1_tx_utils/l1_tx_utils.ts +72 -5
  102. package/src/l1_tx_utils/readonly_l1_tx_utils.ts +1 -1
  103. package/src/l1_tx_utils/send_cost.ts +21 -0
  104. package/src/l1_tx_utils/signer.ts +3 -2
  105. package/src/l1_tx_utils/tx_delayer.ts +8 -37
  106. package/src/publisher_manager.ts +458 -83
  107. package/src/test/anvil_hardfork.ts +95 -0
  108. package/src/test/eth_cheat_codes.ts +306 -81
  109. package/src/test/fixtures/sepolia_blob_tx.json +10 -0
  110. package/src/test/index.ts +2 -0
  111. package/src/test/l1_hardfork.ts +71 -0
  112. package/src/test/recording_rpc_server.ts +1 -0
  113. package/src/test/rollup_cheat_codes.ts +9 -9
  114. package/src/test/start_anvil.ts +41 -13
@@ -0,0 +1,24 @@
1
+ import { type Address, type Hex, type TransactionSerializable, serializeTransaction } from 'viem';
2
+ type TransactionSignature = Parameters<typeof serializeTransaction>[1];
3
+ /** Returns whether blob txs sent to the given chain must use the EIP-7594 network wrapper. */
4
+ export declare function usesEip7594BlobWrapper(chainId: number | undefined): boolean;
5
+ /**
6
+ * Serializes a signed tx for broadcasting. Behaves like viem's `serializeTransaction`, except that blob txs
7
+ * for chains that require it are wrapped in the EIP-7594 network wrapper, which viem v2 does not support:
8
+ * `0x03 || rlp([tx_payload_body, wrapper_version, blobs, commitments, cell_proofs])`.
9
+ */
10
+ export declare function serializeSignedTransaction(tx: TransactionSerializable, signature: TransactionSignature): Hex;
11
+ /**
12
+ * Parses a signed serialized tx like viem's `parseTransaction`, also accepting blob txs in the EIP-7594 network
13
+ * wrapper. The network wrapper of such txs is dropped, so the result carries no blobs or sidecars.
14
+ */
15
+ export declare function parseSignedTransaction(serializedTransaction: Hex): TransactionSerializable;
16
+ /**
17
+ * Computes the hash of a signed serialized tx. For blob txs, this is the hash of the tx payload without the network
18
+ * wrapper, i.e. without blobs, commitments, and proofs.
19
+ */
20
+ export declare function computeSignedTransactionHash(serializedTransaction: Hex): Hex;
21
+ /** Recovers the sender of a signed serialized tx, also accepting blob txs in the EIP-7594 network wrapper. */
22
+ export declare function recoverSignedTransactionAddress(serializedTransaction: Hex): Promise<Address>;
23
+ export {};
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl90eC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfdHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssT0FBTyxFQUVaLEtBQUssR0FBRyxFQUNSLEtBQUssdUJBQXVCLEVBWTVCLG9CQUFvQixFQUVyQixNQUFNLE1BQU0sQ0FBQztBQXFCZCxLQUFLLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxPQUFPLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdkUsOEZBQThGO0FBQzlGLHdCQUFnQixzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBRTNFO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQiwwQkFBMEIsQ0FBQyxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixHQUFHLEdBQUcsQ0EyQjVHO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUFDLHFCQUFxQixFQUFFLEdBQUcsMkJBRWhFO0FBRUQ7OztHQUdHO0FBQ0gsd0JBQWdCLDRCQUE0QixDQUFDLHFCQUFxQixFQUFFLEdBQUcsR0FBRyxHQUFHLENBTzVFO0FBRUQsOEdBQThHO0FBQzlHLHdCQUFnQiwrQkFBK0IsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUk1RiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blob_tx.d.ts","sourceRoot":"","sources":["../src/blob_tx.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,GAAG,EACR,KAAK,uBAAuB,EAY5B,oBAAoB,EAErB,MAAM,MAAM,CAAC;AAqBd,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvE,8FAA8F;AAC9F,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,uBAAuB,EAAE,SAAS,EAAE,oBAAoB,GAAG,GAAG,CA2B5G;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,qBAAqB,EAAE,GAAG,2BAEhE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,qBAAqB,EAAE,GAAG,GAAG,GAAG,CAO5E;AAED,8GAA8G;AAC9G,wBAAgB,+BAA+B,CAAC,qBAAqB,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAI5F"}
@@ -0,0 +1,94 @@
1
+ import { blobsToCommitments, bytesToHex, concatHex, fromRlp, getTransactionType, hexToBytes, keccak256, parseTransaction, recoverTransactionAddress, serializeTransaction, toRlp } from 'viem';
2
+ /**
3
+ * Chains whose execution layer runs Fusaka, which only accepts blob txs in the EIP-7594 network wrapper
4
+ * (wrapper version 1, with cell proofs). Other chains (e.g. anvil) keep the EIP-4844 wrapper. Since foundry 1.8.5, anvil
5
+ * accepts both wrappers on every hardfork, so it gets the EIP-4844 wrapper only because chains are opted in by id here.
6
+ */ const EIP7594_CHAIN_IDS = new Set([
7
+ 1,
8
+ 11_155_111,
9
+ 560_048
10
+ ]);
11
+ /** Number of cell proofs per blob in an EIP-7594 network wrapper. */ const CELLS_PER_EXT_BLOB = 128;
12
+ /** Returns whether blob txs sent to the given chain must use the EIP-7594 network wrapper. */ export function usesEip7594BlobWrapper(chainId) {
13
+ return chainId !== undefined && EIP7594_CHAIN_IDS.has(chainId);
14
+ }
15
+ /**
16
+ * Serializes a signed tx for broadcasting. Behaves like viem's `serializeTransaction`, except that blob txs
17
+ * for chains that require it are wrapped in the EIP-7594 network wrapper, which viem v2 does not support:
18
+ * `0x03 || rlp([tx_payload_body, wrapper_version, blobs, commitments, cell_proofs])`.
19
+ */ export function serializeSignedTransaction(tx, signature) {
20
+ if (getTransactionType(tx) !== 'eip4844' || !tx.blobs || !usesEip7594BlobWrapper(tx.chainId)) {
21
+ return serializeTransaction(tx, signature);
22
+ }
23
+ const kzg = tx.kzg;
24
+ if (!kzg?.blobToKzgCommitment || !kzg.computeCellsAndKzgProofs) {
25
+ throw new Error('Serializing an EIP-7594 blob tx requires a kzg instance with computeCellsAndKzgProofs');
26
+ }
27
+ const envelope = serializeTransaction({
28
+ ...tx,
29
+ type: 'eip4844',
30
+ sidecars: false
31
+ }, signature);
32
+ const payloadBody = fromRlp(`0x${envelope.slice(4)}`, 'hex');
33
+ const blobs = tx.blobs.map((blob)=>typeof blob === 'string' ? blob : bytesToHex(blob));
34
+ const commitments = blobsToCommitments({
35
+ blobs,
36
+ kzg: kzg,
37
+ to: 'hex'
38
+ });
39
+ const cellProofs = blobs.flatMap((blob)=>{
40
+ const [, proofs] = kzg.computeCellsAndKzgProofs(hexToBytes(blob));
41
+ if (proofs.length !== CELLS_PER_EXT_BLOB) {
42
+ throw new Error(`Expected ${CELLS_PER_EXT_BLOB} cell proofs per blob but got ${proofs.length}`);
43
+ }
44
+ return proofs.map((proof)=>bytesToHex(proof));
45
+ });
46
+ return concatHex([
47
+ '0x03',
48
+ toRlp([
49
+ payloadBody,
50
+ '0x01',
51
+ blobs,
52
+ commitments,
53
+ cellProofs
54
+ ])
55
+ ]);
56
+ }
57
+ /**
58
+ * Parses a signed serialized tx like viem's `parseTransaction`, also accepting blob txs in the EIP-7594 network
59
+ * wrapper. The network wrapper of such txs is dropped, so the result carries no blobs or sidecars.
60
+ */ export function parseSignedTransaction(serializedTransaction) {
61
+ return parseTransaction(stripEip7594BlobWrapper(serializedTransaction));
62
+ }
63
+ /**
64
+ * Computes the hash of a signed serialized tx. For blob txs, this is the hash of the tx payload without the network
65
+ * wrapper, i.e. without blobs, commitments, and proofs.
66
+ */ export function computeSignedTransactionHash(serializedTransaction) {
67
+ if (!serializedTransaction.startsWith('0x03')) {
68
+ return keccak256(serializedTransaction);
69
+ }
70
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
71
+ const { blobs, sidecars, ...rest } = parseSignedTransaction(serializedTransaction);
72
+ return keccak256(serializeTransaction({
73
+ ...rest,
74
+ type: 'eip4844'
75
+ }));
76
+ }
77
+ /** Recovers the sender of a signed serialized tx, also accepting blob txs in the EIP-7594 network wrapper. */ export function recoverSignedTransactionAddress(serializedTransaction) {
78
+ return recoverTransactionAddress({
79
+ serializedTransaction: stripEip7594BlobWrapper(serializedTransaction)
80
+ });
81
+ }
82
+ function stripEip7594BlobWrapper(serializedTransaction) {
83
+ if (!serializedTransaction.startsWith('0x03')) {
84
+ return serializedTransaction;
85
+ }
86
+ const decoded = fromRlp(`0x${serializedTransaction.slice(4)}`, 'hex');
87
+ if (Array.isArray(decoded) && decoded.length === 5 && Array.isArray(decoded[0]) && decoded[1] === '0x01') {
88
+ return concatHex([
89
+ '0x03',
90
+ toRlp(decoded[0])
91
+ ]);
92
+ }
93
+ return serializedTransaction;
94
+ }
@@ -0,0 +1,32 @@
1
+ import { Buffer } from 'buffer';
2
+ /** `BN254Lib.STAKING_DOMAIN_SEPARATOR`: `bytes32("AZTEC_BLS_POP_BN254_V1")`, left-aligned and zero-padded. */
3
+ export declare const BN254_STAKING_DOMAIN_SEPARATOR: Buffer;
4
+ /** Result of {@link bn254HashToPoint}, with the work the L1 loop performs to reach it. */
5
+ export type Bn254HashToPointResult = {
6
+ /** The G1 point in affine coordinates. */
7
+ point: {
8
+ x: bigint;
9
+ y: bigint;
10
+ };
11
+ /** Loop attempts, each one a keccak over `(domain, message, attempt)`. */
12
+ attempts: number;
13
+ /** Attempts whose candidate was below the base field order and so reached the modexp square root. */
14
+ sqrtCalls: number;
15
+ };
16
+ /**
17
+ * Port of `BN254Lib.hashToPoint` from the L1 contracts. It must stay bit-for-bit identical to the Solidity
18
+ * implementation, including its rejection-sampling loop and root choice, since the result is what a proof of
19
+ * possession signs and the attempt count drives the L1 verification gas.
20
+ */
21
+ export declare function bn254HashToPoint(domain: Buffer, message: Buffer): Bn254HashToPointResult;
22
+ /**
23
+ * Port of `BN254Lib.g1ToDigestPoint`, which GSE exposes as `getRegistrationDigest`: the point a BLS key signs to
24
+ * prove possession of the key, derived from the affine G1 public key.
25
+ */
26
+ export declare function computeBn254RegistrationDigest(publicKeyG1: {
27
+ x: bigint;
28
+ y: bigint;
29
+ }): Bn254HashToPointResult;
30
+ /** Computes the registration digest of the G1 public key of a BN254 BLS private key. */
31
+ export declare function computeBn254RegistrationDigestForPrivateKey(privateKeyHex: string): Bn254HashToPointResult;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaF90b19wb2ludC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JuMjU0L2hhc2hfdG9fcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVoQyw4R0FBOEc7QUFDOUcsZUFBTyxNQUFNLDhCQUE4QixFQUFFLE1BRzNDLENBQUM7QUFPSCwwRkFBMEY7QUFDMUYsTUFBTSxNQUFNLHNCQUFzQixHQUFHO0lBQ25DLDBDQUEwQztJQUMxQyxLQUFLLEVBQUU7UUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDaEMsMEVBQTBFO0lBQzFFLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIscUdBQXFHO0lBQ3JHLFNBQVMsRUFBRSxNQUFNLENBQUM7Q0FDbkIsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLHNCQUFzQixDQTZCeEY7QUFFRDs7O0dBR0c7QUFDSCx3QkFBZ0IsOEJBQThCLENBQUMsV0FBVyxFQUFFO0lBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUFDLENBQUMsRUFBRSxNQUFNLENBQUE7Q0FBRSxHQUFHLHNCQUFzQixDQUs1RztBQUVELHdGQUF3RjtBQUN4Rix3QkFBZ0IsMkNBQTJDLENBQUMsYUFBYSxFQUFFLE1BQU0sR0FBRyxzQkFBc0IsQ0FJekcifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash_to_point.d.ts","sourceRoot":"","sources":["../../src/bn254/hash_to_point.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,8GAA8G;AAC9G,eAAO,MAAM,8BAA8B,EAAE,MAG3C,CAAC;AAOH,0FAA0F;AAC1F,MAAM,MAAM,sBAAsB,GAAG;IACnC,0CAA0C;IAC1C,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,qGAAqG;IACrG,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB,CA6BxF;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,sBAAsB,CAK5G;AAED,wFAAwF;AACxF,wBAAgB,2CAA2C,CAAC,aAAa,EAAE,MAAM,GAAG,sBAAsB,CAIzG"}
@@ -0,0 +1,80 @@
1
+ import { toBigIntBE, toBufferBE } from '@aztec-labs/foundation/bigint-buffer';
2
+ import { keccak256 } from '@aztec-labs/foundation/crypto/keccak';
3
+ import { bn254 } from '@noble/curves/bn254';
4
+ import { Buffer } from 'buffer';
5
+ /** `BN254Lib.STAKING_DOMAIN_SEPARATOR`: `bytes32("AZTEC_BLS_POP_BN254_V1")`, left-aligned and zero-padded. */ export const BN254_STAKING_DOMAIN_SEPARATOR = Buffer.concat([
6
+ Buffer.from('AZTEC_BLS_POP_BN254_V1', 'utf8'),
7
+ Buffer.alloc(32 - 'AZTEC_BLS_POP_BN254_V1'.length)
8
+ ]);
9
+ const Fp = bn254.fields.Fp;
10
+ const BASE_FIELD_ORDER = Fp.ORDER;
11
+ const SQRT_EXPONENT = (BASE_FIELD_ORDER + 1n) / 4n;
12
+ const UINT256_MAX = (1n << 256n) - 1n;
13
+ /**
14
+ * Port of `BN254Lib.hashToPoint` from the L1 contracts. It must stay bit-for-bit identical to the Solidity
15
+ * implementation, including its rejection-sampling loop and root choice, since the result is what a proof of
16
+ * possession signs and the attempt count drives the L1 verification gas.
17
+ */ export function bn254HashToPoint(domain, message) {
18
+ if (domain.length !== 32) {
19
+ throw new Error(`Domain must be 32 bytes, got ${domain.length}`);
20
+ }
21
+ let attempts = 0;
22
+ let sqrtCalls = 0;
23
+ while(true){
24
+ const x = toBigIntBE(keccak256(abiEncodeHashInput(domain, message, BigInt(attempts))));
25
+ attempts++;
26
+ if (x >= BASE_FIELD_ORDER) {
27
+ continue;
28
+ }
29
+ const yy = Fp.add(Fp.mul(Fp.mul(x, x), x), 3n);
30
+ sqrtCalls++;
31
+ const y = Fp.pow(yy, SQRT_EXPONENT);
32
+ if (Fp.mul(y, y) !== yy) {
33
+ continue;
34
+ }
35
+ let y0 = y;
36
+ let y1 = BASE_FIELD_ORDER - y;
37
+ if (y0 > y1) {
38
+ [y0, y1] = [
39
+ y1,
40
+ y0
41
+ ];
42
+ }
43
+ const b = toBigIntBE(keccak256(abiEncodeHashInput(domain, message, UINT256_MAX)));
44
+ return {
45
+ point: {
46
+ x,
47
+ y: (b & 1n) === 0n ? y0 : y1
48
+ },
49
+ attempts,
50
+ sqrtCalls
51
+ };
52
+ }
53
+ }
54
+ /**
55
+ * Port of `BN254Lib.g1ToDigestPoint`, which GSE exposes as `getRegistrationDigest`: the point a BLS key signs to
56
+ * prove possession of the key, derived from the affine G1 public key.
57
+ */ export function computeBn254RegistrationDigest(publicKeyG1) {
58
+ return bn254HashToPoint(BN254_STAKING_DOMAIN_SEPARATOR, Buffer.concat([
59
+ toUint256(publicKeyG1.x),
60
+ toUint256(publicKeyG1.y)
61
+ ]));
62
+ }
63
+ /** Computes the registration digest of the G1 public key of a BN254 BLS private key. */ export function computeBn254RegistrationDigestForPrivateKey(privateKeyHex) {
64
+ const sk = BigInt(privateKeyHex) % bn254.fields.Fr.ORDER;
65
+ const publicKey = bn254.G1.ProjectivePoint.BASE.multiply(sk).toAffine();
66
+ return computeBn254RegistrationDigest(publicKey);
67
+ }
68
+ /** Solidity `abi.encode(bytes32 domain, bytes message, uint256 counter)`. */ function abiEncodeHashInput(domain, message, counter) {
69
+ const paddedMessageLength = Math.ceil(message.length / 32) * 32;
70
+ const out = Buffer.alloc(128 + paddedMessageLength);
71
+ domain.copy(out, 0);
72
+ toUint256(96n).copy(out, 32);
73
+ toUint256(counter).copy(out, 64);
74
+ toUint256(BigInt(message.length)).copy(out, 96);
75
+ message.copy(out, 128);
76
+ return out;
77
+ }
78
+ function toUint256(value) {
79
+ return toBufferBE(value, 32);
80
+ }
@@ -0,0 +1,3 @@
1
+ export * from './hash_to_point.js';
2
+ export * from './proof_of_possession_gas.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ibjI1NC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsOEJBQThCLENBQUMifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bn254/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './hash_to_point.js';
2
+ export * from './proof_of_possession_gas.js';
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Upper-bound model of the minimum gas stipend `Bn254LibWrapper.proofOfPossession` needs to accept a valid key, as a
3
+ * function of the `hashToPoint` loop work for that key:
4
+ * `fixed + perAttempt * attempts + perSqrtCall * sqrtCalls + ceil(memoryNumerator * attempts^2 / memoryDenominator)`.
5
+ */
6
+ export type ProofOfPossessionGasModel = {
7
+ /** Work that does not depend on the key: pairing, scalar multiplications, hashing, stipend headroom. */
8
+ fixed: number;
9
+ /** Per loop attempt: keccak, ABI encoding and loop overhead. */
10
+ perAttempt: number;
11
+ /** Per attempt that reaches the modexp square root. */
12
+ perSqrtCall: number;
13
+ /** Memory growth from allocations that every attempt leaves behind, quadratic in the attempts. */
14
+ memoryNumerator: number;
15
+ memoryDenominator: number;
16
+ };
17
+ /**
18
+ * Conservative min-stipend fit of the BN254 proof-of-possession gas calibration vectors measured under amsterdam
19
+ * pricing, which matches osaka on this path. The vectors are aztec-packages `l1-contracts/test/fixtures/
20
+ * bn254_pop_gas_vectors.json`, copied verbatim to `fixtures/` next to this file.
21
+ */
22
+ export declare const AMSTERDAM_PROOF_OF_POSSESSION_GAS_MODEL: ProofOfPossessionGasModel;
23
+ /** Estimated minimum stipend for the proof-of-possession check of a key with the given `hashToPoint` work. */
24
+ export declare function estimateProofOfPossessionGas(model: ProofOfPossessionGasModel, attempts: number, sqrtCalls: number): number;
25
+ /** Estimated minimum stipend for the proof-of-possession check of a BN254 BLS private key. */
26
+ export declare function estimateBlsKeyProofOfPossessionGas(model: ProofOfPossessionGasModel, privateKey: string): number;
27
+ /** Lowest gas estimate any key can have: one attempt that reaches the square root and succeeds. */
28
+ export declare function minimumProofOfPossessionGas(model: ProofOfPossessionGasModel): number;
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvb2Zfb2ZfcG9zc2Vzc2lvbl9nYXMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ibjI1NC9wcm9vZl9vZl9wb3NzZXNzaW9uX2dhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsTUFBTSxNQUFNLHlCQUF5QixHQUFHO0lBQ3RDLHdHQUF3RztJQUN4RyxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQ2QsZ0VBQWdFO0lBQ2hFLFVBQVUsRUFBRSxNQUFNLENBQUM7SUFDbkIsdURBQXVEO0lBQ3ZELFdBQVcsRUFBRSxNQUFNLENBQUM7SUFDcEIsa0dBQWtHO0lBQ2xHLGVBQWUsRUFBRSxNQUFNLENBQUM7SUFDeEIsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO0NBQzNCLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsZUFBTyxNQUFNLHVDQUF1QyxFQUFFLHlCQU1yRCxDQUFDO0FBRUYsOEdBQThHO0FBQzlHLHdCQUFnQiw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQVNqSDtBQUVELDhGQUE4RjtBQUM5Rix3QkFBZ0Isa0NBQWtDLENBQUMsS0FBSyxFQUFFLHlCQUF5QixFQUFFLFVBQVUsRUFBRSxNQUFNLFVBR3RHO0FBRUQsbUdBQW1HO0FBQ25HLHdCQUFnQiwyQkFBMkIsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLFVBRTNFIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof_of_possession_gas.d.ts","sourceRoot":"","sources":["../../src/bn254/proof_of_possession_gas.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,wGAAwG;IACxG,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,kGAAkG;IAClG,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,EAAE,yBAMrD,CAAC;AAEF,8GAA8G;AAC9G,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UASjH;AAED,8FAA8F;AAC9F,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,yBAAyB,EAAE,UAAU,EAAE,MAAM,UAGtG;AAED,mGAAmG;AACnG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,yBAAyB,UAE3E"}
@@ -0,0 +1,24 @@
1
+ import { computeBn254RegistrationDigestForPrivateKey } from './hash_to_point.js';
2
+ /**
3
+ * Conservative min-stipend fit of the BN254 proof-of-possession gas calibration vectors measured under amsterdam
4
+ * pricing, which matches osaka on this path. The vectors are aztec-packages `l1-contracts/test/fixtures/
5
+ * bn254_pop_gas_vectors.json`, copied verbatim to `fixtures/` next to this file.
6
+ */ export const AMSTERDAM_PROOF_OF_POSSESSION_GAS_MODEL = {
7
+ fixed: 132_694,
8
+ perAttempt: 515,
9
+ perSqrtCall: 4_580,
10
+ memoryNumerator: 95_975,
11
+ memoryDenominator: 1_000_000
12
+ };
13
+ /** Estimated minimum stipend for the proof-of-possession check of a key with the given `hashToPoint` work. */ export function estimateProofOfPossessionGas(model, attempts, sqrtCalls) {
14
+ const memory = BigInt(model.memoryNumerator) * BigInt(attempts) ** 2n;
15
+ const denominator = BigInt(model.memoryDenominator);
16
+ return model.fixed + model.perAttempt * attempts + model.perSqrtCall * sqrtCalls + Number((memory + denominator - 1n) / denominator);
17
+ }
18
+ /** Estimated minimum stipend for the proof-of-possession check of a BN254 BLS private key. */ export function estimateBlsKeyProofOfPossessionGas(model, privateKey) {
19
+ const { attempts, sqrtCalls } = computeBn254RegistrationDigestForPrivateKey(privateKey);
20
+ return estimateProofOfPossessionGas(model, attempts, sqrtCalls);
21
+ }
22
+ /** Lowest gas estimate any key can have: one attempt that reaches the square root and succeeds. */ export function minimumProofOfPossessionGas(model) {
23
+ return estimateProofOfPossessionGas(model, 1, 1);
24
+ }
package/dest/client.d.ts CHANGED
@@ -39,4 +39,4 @@ export declare function waitForPublicClient(config: Config, logger?: Logger): Pr
39
39
  export declare function createExtendedL1Client(rpcUrls: string[], mnemonicOrPrivateKeyOrHdAccount: string | HDAccount | PrivateKeyAccount | LocalAccount, chain?: Chain, pollingIntervalMS?: number, addressIndex?: number, opts?: {
40
40
  httpTimeoutMS?: number;
41
41
  }): ExtendedViemWalletClient;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3pELE9BQU8sRUFDTCxLQUFLLEtBQUssRUFDVixLQUFLLGlCQUFpQixFQUN0QixLQUFLLFNBQVMsRUFFZCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssaUJBQWlCLEVBT3ZCLE1BQU0sTUFBTSxDQUFDO0FBS2QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0UsS0FBSyxNQUFNLEdBQUc7SUFDWiwwRkFBMEY7SUFDMUYsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLHlDQUF5QztJQUN6QyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLDJDQUEyQztJQUMzQyxxQkFBcUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUMvQiwwREFBMEQ7SUFDMUQsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQzFCLENBQUM7QUFFRixZQUFZLEVBQUUsTUFBTSxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFFL0MseUZBQXlGO0FBQ3pGLHFCQUFhLFVBQVcsU0FBUSxLQUFLO0lBQ25DLFlBQVksT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxZQUFZLEVBR2xEO0NBQ0Y7QUFFRCx3RUFBd0U7QUFDeEUsd0JBQWdCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtJQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUFFLHNDQUVqRjtBQUVELHVGQUF1RjtBQUN2Rix3QkFBZ0Isa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUVuRTtBQUVELHNGQUFzRjtBQUN0Rix3QkFBZ0IsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FFdkU7QUFFRCx1R0FBdUc7QUFDdkcsd0JBQWdCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FFbEU7QUFrQkQ7Ozs7R0FJRztBQUNILHdCQUFnQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLENBV3ZFO0FBSUQsd0RBQXdEO0FBQ3hELHdCQUFnQixlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsQ0FPaEU7QUFFRCwwRkFBMEY7QUFDMUYsd0JBQXNCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUlwRztBQXlCRCx3QkFBZ0Isc0JBQXNCLENBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsK0JBQStCLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxZQUFZLEVBQ3RGLEtBQUssR0FBRSxLQUFlLEVBQ3RCLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUMxQixZQUFZLENBQUMsRUFBRSxNQUFNLEVBQ3JCLElBQUksQ0FBQyxFQUFFO0lBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FDaEMsd0JBQXdCLENBZ0IxQiJ9
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3pELE9BQU8sRUFDTCxLQUFLLEtBQUssRUFDVixLQUFLLGlCQUFpQixFQUN0QixLQUFLLFNBQVMsRUFFZCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssaUJBQWlCLEVBT3ZCLE1BQU0sTUFBTSxDQUFDO0FBS2QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0UsS0FBSyxNQUFNLEdBQUc7SUFDWiwwRkFBMEY7SUFDMUYsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLHlDQUF5QztJQUN6QyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLDJDQUEyQztJQUMzQyxxQkFBcUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUMvQiwwREFBMEQ7SUFDMUQsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQzFCLENBQUM7QUFFRixZQUFZLEVBQUUsTUFBTSxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFFL0MseUZBQXlGO0FBQ3pGLHFCQUFhLFVBQVcsU0FBUSxLQUFLO0lBQ25DLFlBQVksT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxZQUFZLEVBR2xEO0NBQ0Y7QUFFRCx3RUFBd0U7QUFDeEUsd0JBQWdCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtJQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUFFLHNDQUtqRjtBQUVELHVGQUF1RjtBQUN2Rix3QkFBZ0Isa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUVuRTtBQUVELHNGQUFzRjtBQUN0Rix3QkFBZ0IsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FFdkU7QUFFRCx1R0FBdUc7QUFDdkcsd0JBQWdCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FFbEU7QUFrQkQ7Ozs7R0FJRztBQUNILHdCQUFnQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLENBV3ZFO0FBSUQsd0RBQXdEO0FBQ3hELHdCQUFnQixlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsQ0FPaEU7QUFFRCwwRkFBMEY7QUFDMUYsd0JBQXNCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUlwRztBQXlCRCx3QkFBZ0Isc0JBQXNCLENBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsK0JBQStCLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxZQUFZLEVBQ3RGLEtBQUssR0FBRSxLQUFlLEVBQ3RCLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUMxQixZQUFZLENBQUMsRUFBRSxNQUFNLEVBQ3JCLElBQUksQ0FBQyxFQUFFO0lBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FDaEMsd0JBQXdCLENBZ0IxQiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGzD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAEd,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAOvB,MAAM,MAAM,CAAC;AAKd,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7E,KAAK,MAAM,GAAG;IACZ,0FAA0F;IAC1F,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,YAAY,EAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;AAE/C,yFAAyF;AACzF,qBAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGlD;CACF;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,sCAEjF;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEnE;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,uGAAuG;AACvG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAElE;AAkBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAWvE;AAID,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAOhE;AAED,0FAA0F;AAC1F,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIpG;AAyBD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,+BAA+B,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,EACtF,KAAK,GAAE,KAAe,EACtB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,wBAAwB,CAgB1B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGzD,OAAO,EACL,KAAK,KAAK,EACV,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAEd,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAOvB,MAAM,MAAM,CAAC;AAKd,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE7E,KAAK,MAAM,GAAG;IACZ,0FAA0F;IAC1F,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,YAAY,EAAE,MAAM,IAAI,oBAAoB,EAAE,CAAC;AAE/C,yFAAyF;AACzF,qBAAa,UAAW,SAAQ,KAAK;IACnC,YAAY,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAGlD;CACF;AAED,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,sCAKjF;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEnE;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,uGAAuG;AACvG,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAElE;AAkBD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAWvE;AAID,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAOhE;AAED,0FAA0F;AAC1F,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIpG;AAyBD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,+BAA+B,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,EACtF,KAAK,GAAE,KAAe,EACtB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,YAAY,CAAC,EAAE,MAAM,EACrB,IAAI,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,wBAAwB,CAgB1B"}
package/dest/client.js CHANGED
@@ -3,7 +3,7 @@ import { getErrorCause } from '@aztec-labs/foundation/types';
3
3
  import { HttpRequestError, RpcRequestError, createPublicClient, createWalletClient, fallback, http, publicActions } from 'viem';
4
4
  import { mnemonicToAccount, privateKeyToAccount } from 'viem/accounts';
5
5
  import { foundry } from 'viem/chains';
6
- import { createEthereumChain } from './chain.js';
6
+ import { createEthereumChain, isAnvilTestChain } from './chain.js';
7
7
  /** Error exposed by L1 RPC transports without including provider URLs in its message. */ export class L1RpcError extends Error {
8
8
  constructor(message, options){
9
9
  super(message, options);
@@ -11,9 +11,11 @@ import { createEthereumChain } from './chain.js';
11
11
  }
12
12
  }
13
13
  /** Creates a viem fallback HTTP transport for the given L1 RPC URLs. */ export function makeL1HttpTransport(rpcUrls, opts) {
14
+ // viem caps response bodies at 10MB by default, which large getLogs or debug trace responses can exceed.
14
15
  return wrapL1RpcTransport(fallback(rpcUrls.map((url)=>http(url, {
15
16
  batch: false,
16
- timeout: opts?.timeout
17
+ timeout: opts?.timeout,
18
+ maxResponseBodySize: false
17
19
  }))));
18
20
  }
19
21
  /** Returns the HTTP status from an L1 RPC error's cause chain, if one is available. */ export function getL1RpcHttpStatus(err) {
@@ -98,7 +100,7 @@ export function createExtendedL1Client(rpcUrls, mnemonicOrPrivateKeyOrHdAccount,
98
100
  transport: makeL1HttpTransport(rpcUrls, {
99
101
  timeout: opts?.httpTimeoutMS
100
102
  }),
101
- pollingInterval: pollingIntervalMS
103
+ pollingInterval: pollingIntervalMS ?? (isAnvilTestChain(chain.id) ? 100 : undefined)
102
104
  }).extend(publicActions);
103
105
  return extendedClient;
104
106
  }
@@ -1,7 +1,14 @@
1
1
  export declare class BlockTagTooOldError extends Error {
2
2
  constructor(blockTag: bigint | number, latestBlock: bigint | number);
3
3
  }
4
- export declare class NoCommitteeError extends Error {
5
- constructor();
4
+ /**
5
+ * The committee for an epoch cannot be served yet because its sample seed can still change on L1: the randao it
6
+ * samples has not been checkpointed, and the epoch that would checkpoint it is not over. Thrown by callers that cannot
7
+ * act without the committee and retry later.
8
+ */
9
+ export declare class CommitteeNotStableError extends Error {
10
+ readonly epoch: bigint;
11
+ readonly l1BlockNumber: bigint;
12
+ constructor(epoch: bigint, l1BlockNumber: bigint);
6
13
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBYSxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksUUFBUSxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBR2xFO0NBQ0Y7QUFFRCxxQkFBYSxnQkFBaUIsU0FBUSxLQUFLO0lBQ3pDLGNBR0M7Q0FDRiJ9
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQkFBYSxtQkFBb0IsU0FBUSxLQUFLO0lBQzVDLFlBQVksUUFBUSxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sR0FBRyxNQUFNLEVBR2xFO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gscUJBQWEsdUJBQXdCLFNBQVEsS0FBSzthQUU5QixLQUFLLEVBQUUsTUFBTTthQUNiLGFBQWEsRUFBRSxNQUFNO0lBRnZDLFlBQ2tCLEtBQUssRUFBRSxNQUFNLEVBQ2IsYUFBYSxFQUFFLE1BQU0sRUFJdEM7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/contracts/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAGlE;CACF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,cAGC;CACF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/contracts/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAGlE;CACF;AAED;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;aAE9B,KAAK,EAAE,MAAM;aACb,aAAa,EAAE,MAAM;IAFvC,YACkB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EAItC;CACF"}
@@ -4,9 +4,15 @@ export class BlockTagTooOldError extends Error {
4
4
  this.name = 'BlockTagTooOldError';
5
5
  }
6
6
  }
7
- export class NoCommitteeError extends Error {
8
- constructor(){
9
- super('The committee does not exist on L1');
10
- this.name = 'NoCommitteeError';
7
+ /**
8
+ * The committee for an epoch cannot be served yet because its sample seed can still change on L1: the randao it
9
+ * samples has not been checkpointed, and the epoch that would checkpoint it is not over. Thrown by callers that cannot
10
+ * act without the committee and retry later.
11
+ */ export class CommitteeNotStableError extends Error {
12
+ epoch;
13
+ l1BlockNumber;
14
+ constructor(epoch, l1BlockNumber){
15
+ super(`The committee for epoch ${epoch} is not stable yet as of L1 block ${l1BlockNumber}`), this.epoch = epoch, this.l1BlockNumber = l1BlockNumber;
16
+ this.name = 'CommitteeNotStableError';
11
17
  }
12
18
  }
@@ -126,4 +126,4 @@ export type InboxContractBucket = {
126
126
  /** Number of messages absorbed into this bucket. */
127
127
  msgCount: number;
128
128
  };
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBSW5FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHeEYsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUEyQixNQUFNLFVBQVUsQ0FBQztBQUdwRSx3R0FBd0c7QUFDeEcsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLE1BQU0sRUFBRTtRQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDbEQsU0FBUyxFQUFFO1FBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQzFDLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDWixVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQztDQUNmLENBQUM7QUFFRiwyQ0FBMkM7QUFDM0MsTUFBTSxNQUFNLGVBQWUsR0FBRztJQUM1QiwwR0FBMEc7SUFDMUcsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLElBQUksRUFBRSxFQUFFLENB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
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBSW5FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHeEYsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUEyQixNQUFNLFVBQVUsQ0FBQztBQUdwRSx3R0FBd0c7QUFDeEcsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLE1BQU0sRUFBRTtRQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDbEQsU0FBUyxFQUFFO1FBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQzFDLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDWixVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQztDQUNmLENBQUM7QUFFRiwyQ0FBMkM7QUFDM0MsTUFBTSxNQUFNLGVBQWUsR0FBRztJQUM1QiwwR0FBMEc7SUFDMUcsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLElBQUksRUFBRSxFQUFFLENBQUM7SUFDVCwwRUFBMEU7SUFDMUUsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO0lBQ3JCLDBFQUEwRTtJQUMxRSxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLDZFQUE2RTtJQUM3RSxPQUFPLEVBQUUsa0JBQWtCLENBQUM7Q0FDN0IsQ0FBQztBQUVGLHVDQUF1QztBQUN2QyxNQUFNLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUV6RCx3R0FBd0c7QUFDeEcsZUFBTyxNQUFNLGlDQUFpQyxPQUFPLENBQUM7QUFFdEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCx3QkFBZ0IsdUJBQXVCLENBQ3JDLG1CQUFtQixFQUFFLE1BQU0sRUFDM0IsVUFBVSxDQUFDLEVBQUUsTUFBTSxHQUNsQjtJQUFFLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FBRyxTQUFTLENBS3BEO0FBRUQscUJBQWEsYUFBYTthQWtCTixNQUFNLEVBQUUsVUFBVTtJQWpCcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQXFEO0lBRTNFLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsRUFBRSxnQ0FBZ0MsaUJBTXhGO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxpQkFJMUM7SUFFRCxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFNMUI7SUFFRCxJQUFXLE9BQU8sa0JBRWpCO0lBRU0sV0FBVyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUV2RTtJQUVEOzs7O09BSUc7SUFDVSxRQUFRLENBQUMsSUFBSSxHQUFFO1FBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDO1FBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQU8sR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FRM0c7SUFFRCx1RkFBdUY7SUFDMUUsbUJBQW1CLENBQUMsSUFBSSxHQUFFO1FBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDO1FBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRzFHO0lBRUQsK0RBQStEO0lBQ2xELFNBQVMsQ0FDcEIsR0FBRyxFQUFFLE1BQU0sRUFDWCxJQUFJLEdBQUU7UUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7UUFBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBTyxHQUN2RCxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FJOUI7SUFFRDs7Ozs7T0FLRztJQUNVLHdCQUF3QixDQUNuQyxVQUFVLEVBQUUsTUFBTSxFQUNsQixJQUFJLEdBQUU7UUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7UUFBQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBTyxHQUN2RCxPQUFPLENBQUM7UUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO1FBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFBO0tBQUUsR0FBRyxTQUFTLENBQUMsQ0FXbkU7SUFFRCwrREFBK0Q7SUFDekQsb0JBQW9CLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUt4RjtJQUVEOzs7Ozs7OztPQVFHO0lBQ0cseUJBQXlCLENBQzdCLE9BQU8sRUFBRSxHQUFHLEVBQ1osbUJBQW1CLEVBQUUsTUFBTSxFQUMzQixVQUFVLENBQUMsRUFBRSxNQUFNLEdBQ2xCLE9BQU8sQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLENBYXJDO0lBRUQsT0FBTyxDQUFDLGlCQUFpQjtDQXlDMUI7QUFFRCxxRkFBcUY7QUFDckYsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLDBHQUEwRztJQUMxRyxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ2hCLDZEQUE2RDtJQUM3RCxxQkFBcUIsRUFBRSxNQUFNLENBQUM7SUFDOUIscUVBQXFFO0lBQ3JFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztDQUMxQixDQUFDO0FBZ0JGLDJEQUEyRDtBQUMzRCxNQUFNLE1BQU0sbUJBQW1CLEdBQUc7SUFDaEMsd0dBQXdHO0lBQ3hHLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDaEIsNkZBQTZGO0lBQzdGLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsdUZBQXVGO0lBQ3ZGLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsb0RBQW9EO0lBQ3BELFFBQVEsRUFBRSxNQUFNLENBQUM7Q0FDbEIsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/contracts/inbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../src/contracts/inbox.ts"],"names":[],"mappings":"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"}
@@ -142,6 +142,8 @@ export class InboxContract {
142
142
  l1BlockNumber: log.blockNumber,
143
143
  l1BlockHash: Buffer32.fromString(log.blockHash),
144
144
  l1TransactionHash: log.transactionHash,
145
+ l1TransactionIndex: log.transactionIndex,
146
+ l1LogIndex: log.logIndex,
145
147
  args: {
146
148
  index: message.index,
147
149
  leaf: Fr.fromString(log.args.hash),
@@ -7,9 +7,15 @@ export type L1EventLog<T> = {
7
7
  l1BlockHash: Buffer32;
8
8
  /** L1 transaction hash that emitted the event. */
9
9
  l1TransactionHash: `0x${string}`;
10
+ /** Index of the emitting transaction within its L1 block. */
11
+ l1TransactionIndex: number;
12
+ /** Index of the log within its L1 block (not within its transaction), as `eth_getLogs` reports it. */
13
+ l1LogIndex: number;
10
14
  /** Event-specific arguments. */
11
15
  args: T;
12
16
  };
17
+ /** Orders L1 event logs by their position on L1: block number, then transaction index, then log index. */
18
+ export declare function compareL1LogPosition(a: L1EventLog<unknown>, b: L1EventLog<unknown>): number;
13
19
  /** Whether a provider refused a log query for its range or response size, which a narrower range can fix. */
14
20
  export declare function isLogRangeLimitError(err: unknown): boolean;
15
21
  /** Whether a log query failed for a reason that fails every sub-range too, such as authentication or a rate limit. */
@@ -35,4 +41,4 @@ export declare function isPersistentLogFetchError(err: unknown): boolean;
35
41
  * function returns is complete, and a failure is never reported as an absence of logs.
36
42
  */
37
43
  export declare function fetchLogsBisectingRange<T>(fromBlock: bigint, toBlock: bigint, fetch: (fromBlock: bigint, toBlock: bigint) => Promise<readonly T[]>): Promise<T[]>;
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCw0Q0FBNEM7QUFDNUMsTUFBTSxNQUFNLFVBQVUsQ0FBQyxDQUFDLElBQUk7SUFDMUIsbURBQW1EO0lBQ25ELGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIscUJBQXFCO0lBQ3JCLFdBQVcsRUFBRSxRQUFRLENBQUM7SUFDdEIsa0RBQWtEO0lBQ2xELGlCQUFpQixFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDakMsZ0NBQWdDO0lBQ2hDLElBQUksRUFBRSxDQUFDLENBQUM7Q0FDVCxDQUFDO0FBZ0NGLDZHQUE2RztBQUM3Ryx3QkFBZ0Isb0JBQW9CLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBRzFEO0FBRUQsc0hBQXNIO0FBQ3RILHdCQUFnQix5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FNL0Q7QUE4QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCx3QkFBc0IsdUJBQXVCLENBQUMsQ0FBQyxFQUM3QyxTQUFTLEVBQUUsTUFBTSxFQUNqQixPQUFPLEVBQUUsTUFBTSxFQUNmLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUNuRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FnQmQifQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2xvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCw0Q0FBNEM7QUFDNUMsTUFBTSxNQUFNLFVBQVUsQ0FBQyxDQUFDLElBQUk7SUFDMUIsbURBQW1EO0lBQ25ELGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIscUJBQXFCO0lBQ3JCLFdBQVcsRUFBRSxRQUFRLENBQUM7SUFDdEIsa0RBQWtEO0lBQ2xELGlCQUFpQixFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDakMsNkRBQTZEO0lBQzdELGtCQUFrQixFQUFFLE1BQU0sQ0FBQztJQUMzQixzR0FBc0c7SUFDdEcsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixnQ0FBZ0M7SUFDaEMsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUNULENBQUM7QUFFRiwwR0FBMEc7QUFDMUcsd0JBQWdCLG9CQUFvQixDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBSzNGO0FBZ0NELDZHQUE2RztBQUM3Ryx3QkFBZ0Isb0JBQW9CLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBRzFEO0FBRUQsc0hBQXNIO0FBQ3RILHdCQUFnQix5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FNL0Q7QUE4QkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCx3QkFBc0IsdUJBQXVCLENBQUMsQ0FBQyxFQUM3QyxTQUFTLEVBQUUsTUFBTSxFQUNqQixPQUFPLEVBQUUsTUFBTSxFQUNmLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sS0FBSyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUNuRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FnQmQifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/contracts/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,4CAA4C;AAC5C,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,WAAW,EAAE,QAAQ,CAAC;IACtB,kDAAkD;IAClD,iBAAiB,EAAE,KAAK,MAAM,EAAE,CAAC;IACjC,gCAAgC;IAChC,IAAI,EAAE,CAAC,CAAC;CACT,CAAC;AAgCF,6GAA6G;AAC7G,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED,sHAAsH;AACtH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAM/D;AA8BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAC7C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,GACnE,OAAO,CAAC,CAAC,EAAE,CAAC,CAgBd"}
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/contracts/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,4CAA4C;AAC5C,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;IAC1B,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB;IACrB,WAAW,EAAE,QAAQ,CAAC;IACtB,kDAAkD;IAClD,iBAAiB,EAAE,KAAK,MAAM,EAAE,CAAC;IACjC,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sGAAsG;IACtG,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,IAAI,EAAE,CAAC,CAAC;CACT,CAAC;AAEF,0GAA0G;AAC1G,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAK3F;AAgCD,6GAA6G;AAC7G,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAG1D;AAED,sHAAsH;AACtH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAM/D;AA8BD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAC7C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,GACnE,OAAO,CAAC,CAAC,EAAE,CAAC,CAgBd"}
@@ -1,3 +1,9 @@
1
+ /** Orders L1 event logs by their position on L1: block number, then transaction index, then log index. */ export function compareL1LogPosition(a, b) {
2
+ if (a.l1BlockNumber !== b.l1BlockNumber) {
3
+ return a.l1BlockNumber < b.l1BlockNumber ? -1 : 1;
4
+ }
5
+ return a.l1TransactionIndex - b.l1TransactionIndex || a.l1LogIndex - b.l1LogIndex;
6
+ }
1
7
  /**
2
8
  * Message fragments providers use to refuse a log query for being too wide or returning too much, the failures a
3
9
  * narrower range is known to fix. Matched on text because the JSON-RPC boundary leaves no error class or code behind