@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.
- package/dest/blob_tx.d.ts +24 -0
- package/dest/blob_tx.d.ts.map +1 -0
- package/dest/blob_tx.js +94 -0
- package/dest/bn254/hash_to_point.d.ts +32 -0
- package/dest/bn254/hash_to_point.d.ts.map +1 -0
- package/dest/bn254/hash_to_point.js +80 -0
- package/dest/bn254/index.d.ts +3 -0
- package/dest/bn254/index.d.ts.map +1 -0
- package/dest/bn254/index.js +2 -0
- package/dest/bn254/proof_of_possession_gas.d.ts +29 -0
- package/dest/bn254/proof_of_possession_gas.d.ts.map +1 -0
- package/dest/bn254/proof_of_possession_gas.js +24 -0
- package/dest/client.d.ts +1 -1
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +5 -3
- package/dest/contracts/errors.d.ts +10 -3
- package/dest/contracts/errors.d.ts.map +1 -1
- package/dest/contracts/errors.js +10 -4
- package/dest/contracts/inbox.d.ts +1 -1
- package/dest/contracts/inbox.d.ts.map +1 -1
- package/dest/contracts/inbox.js +2 -0
- package/dest/contracts/log.d.ts +7 -1
- package/dest/contracts/log.d.ts.map +1 -1
- package/dest/contracts/log.js +6 -0
- package/dest/contracts/rollup.d.ts +32 -4
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +63 -7
- package/dest/deploy_aztec_l1_contracts.d.ts +16 -1
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_aztec_l1_contracts.js +201 -65
- package/dest/foundry_binary.d.ts +1 -1
- package/dest/foundry_binary.d.ts.map +1 -1
- package/dest/foundry_binary.js +2 -1
- package/dest/l1_tx_utils/amsterdam.d.ts +1 -1
- package/dest/l1_tx_utils/amsterdam.d.ts.map +1 -1
- package/dest/l1_tx_utils/amsterdam.js +4 -1
- package/dest/l1_tx_utils/constants.d.ts +2 -1
- package/dest/l1_tx_utils/constants.d.ts.map +1 -1
- package/dest/l1_tx_utils/constants.js +3 -0
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +1 -1
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -1
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +6 -1
- package/dest/l1_tx_utils/index.d.ts +2 -1
- package/dest/l1_tx_utils/index.d.ts.map +1 -1
- package/dest/l1_tx_utils/index.js +1 -0
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +21 -1
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.js +71 -5
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +8 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +1 -1
- package/dest/l1_tx_utils/send_cost.d.ts +15 -0
- package/dest/l1_tx_utils/send_cost.d.ts.map +1 -0
- package/dest/l1_tx_utils/send_cost.js +10 -0
- package/dest/l1_tx_utils/signer.d.ts +2 -2
- package/dest/l1_tx_utils/signer.d.ts.map +1 -1
- package/dest/l1_tx_utils/signer.js +2 -2
- package/dest/l1_tx_utils/tx_delayer.d.ts +1 -1
- package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -1
- package/dest/l1_tx_utils/tx_delayer.js +8 -26
- package/dest/publisher_manager.d.ts +127 -13
- package/dest/publisher_manager.d.ts.map +1 -1
- package/dest/publisher_manager.js +320 -79
- package/dest/test/anvil_hardfork.d.ts +42 -0
- package/dest/test/anvil_hardfork.d.ts.map +1 -0
- package/dest/test/anvil_hardfork.js +107 -0
- package/dest/test/eth_cheat_codes.d.ts +30 -5
- package/dest/test/eth_cheat_codes.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes.js +283 -101
- package/dest/test/index.d.ts +3 -1
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +2 -0
- package/dest/test/l1_hardfork.d.ts +43 -0
- package/dest/test/l1_hardfork.d.ts.map +1 -0
- package/dest/test/l1_hardfork.js +51 -0
- package/dest/test/recording_rpc_server.d.ts +1 -1
- package/dest/test/recording_rpc_server.d.ts.map +1 -1
- package/dest/test/recording_rpc_server.js +1 -0
- package/dest/test/rollup_cheat_codes.d.ts +1 -1
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
- package/dest/test/rollup_cheat_codes.js +7 -7
- package/dest/test/start_anvil.d.ts +14 -2
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +28 -11
- package/package.json +13 -11
- package/src/blob_tx.ts +118 -0
- package/src/bn254/hash_to_point.ts +95 -0
- package/src/bn254/index.ts +2 -0
- package/src/bn254/proof_of_possession_gas.ts +54 -0
- package/src/client.ts +6 -3
- package/src/contracts/errors.ts +12 -4
- package/src/contracts/inbox.ts +4 -0
- package/src/contracts/log.ts +12 -0
- package/src/contracts/rollup.ts +63 -6
- package/src/deploy_aztec_l1_contracts.ts +238 -63
- package/src/foundry_binary.ts +2 -1
- package/src/l1_tx_utils/amsterdam.ts +4 -1
- package/src/l1_tx_utils/constants.ts +4 -0
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +11 -1
- package/src/l1_tx_utils/index.ts +1 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +72 -5
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +1 -1
- package/src/l1_tx_utils/send_cost.ts +21 -0
- package/src/l1_tx_utils/signer.ts +3 -2
- package/src/l1_tx_utils/tx_delayer.ts +8 -37
- package/src/publisher_manager.ts +458 -83
- package/src/test/anvil_hardfork.ts +95 -0
- package/src/test/eth_cheat_codes.ts +306 -81
- package/src/test/fixtures/sepolia_blob_tx.json +10 -0
- package/src/test/index.ts +2 -0
- package/src/test/l1_hardfork.ts +71 -0
- package/src/test/recording_rpc_server.ts +1 -0
- package/src/test/rollup_cheat_codes.ts +9 -9
- 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"}
|
package/dest/blob_tx.js
ADDED
|
@@ -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,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,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR3pELE9BQU8sRUFDTCxLQUFLLEtBQUssRUFDVixLQUFLLGlCQUFpQixFQUN0QixLQUFLLFNBQVMsRUFFZCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxZQUFZLEVBQ2pCLEtBQUssaUJBQWlCLEVBT3ZCLE1BQU0sTUFBTSxDQUFDO0FBS2QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0UsS0FBSyxNQUFNLEdBQUc7SUFDWiwwRkFBMEY7SUFDMUYsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BCLHlDQUF5QztJQUN6QyxTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLDJDQUEyQztJQUMzQyxxQkFBcUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUMvQiwwREFBMEQ7SUFDMUQsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQzFCLENBQUM7QUFFRixZQUFZLEVBQUUsTUFBTSxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFFL0MseUZBQXlGO0FBQ3pGLHFCQUFhLFVBQVcsU0FBUSxLQUFLO0lBQ25DLFlBQVksT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxZQUFZLEVBR2xEO0NBQ0Y7QUFFRCx3RUFBd0U7QUFDeEUsd0JBQWdCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtJQUFFLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQTtDQUFFLHNDQUtqRjtBQUVELHVGQUF1RjtBQUN2Rix3QkFBZ0Isa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUVuRTtBQUVELHNGQUFzRjtBQUN0Rix3QkFBZ0IsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FFdkU7QUFFRCx1R0FBdUc7QUFDdkcsd0JBQWdCLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxPQUFPLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FFbEU7QUFrQkQ7Ozs7R0FJRztBQUNILHdCQUFnQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLENBV3ZFO0FBSUQsd0RBQXdEO0FBQ3hELHdCQUFnQixlQUFlLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsQ0FPaEU7QUFFRCwwRkFBMEY7QUFDMUYsd0JBQXNCLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUlwRztBQXlCRCx3QkFBZ0Isc0JBQXNCLENBQ3BDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsK0JBQStCLEVBQUUsTUFBTSxHQUFHLFNBQVMsR0FBRyxpQkFBaUIsR0FBRyxZQUFZLEVBQ3RGLEtBQUssR0FBRSxLQUFlLEVBQ3RCLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUMxQixZQUFZLENBQUMsRUFBRSxNQUFNLEVBQ3JCLElBQUksQ0FBQyxFQUFFO0lBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFBO0NBQUUsR0FDaEMsd0JBQXdCLENBZ0IxQiJ9
|
package/dest/client.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
5
|
-
|
|
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,
|
|
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,
|
|
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"}
|
package/dest/contracts/errors.js
CHANGED
|
@@ -4,9 +4,15 @@ export class BlockTagTooOldError extends Error {
|
|
|
4
4
|
this.name = 'BlockTagTooOldError';
|
|
5
5
|
}
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3guZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvaW5ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBSW5FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFHeEYsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsT0FBTyxFQUFFLEtBQUssVUFBVSxFQUEyQixNQUFNLFVBQVUsQ0FBQztBQUdwRSx3R0FBd0c7QUFDeEcsTUFBTSxNQUFNLGtCQUFrQixHQUFHO0lBQy9CLE1BQU0sRUFBRTtRQUFFLEtBQUssRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDbEQsU0FBUyxFQUFFO1FBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUFDLE9BQU8sRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQzFDLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDWixVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQztDQUNmLENBQUM7QUFFRiwyQ0FBMkM7QUFDM0MsTUFBTSxNQUFNLGVBQWUsR0FBRztJQUM1QiwwR0FBMEc7SUFDMUcsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLElBQUksRUFBRSxFQUFFLENB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
|
|
@@ -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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"}
|
package/dest/contracts/inbox.js
CHANGED
|
@@ -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),
|
package/dest/contracts/log.d.ts
CHANGED
|
@@ -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,
|
|
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;
|
|
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"}
|
package/dest/contracts/log.js
CHANGED
|
@@ -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
|