@aztec/ethereum 0.0.0-test.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +3 -0
  2. package/dest/chain.d.ts +25 -0
  3. package/dest/chain.d.ts.map +1 -0
  4. package/dest/chain.js +53 -0
  5. package/dest/client.d.ts +16 -0
  6. package/dest/client.d.ts.map +1 -0
  7. package/dest/client.js +31 -0
  8. package/dest/config.d.ts +39 -0
  9. package/dest/config.d.ts.map +1 -0
  10. package/dest/config.js +70 -0
  11. package/dest/constants.d.ts +4 -0
  12. package/dest/constants.d.ts.map +1 -0
  13. package/dest/constants.js +2 -0
  14. package/dest/contracts/empire_base.d.ts +13 -0
  15. package/dest/contracts/empire_base.d.ts.map +1 -0
  16. package/dest/contracts/empire_base.js +11 -0
  17. package/dest/contracts/fee_juice.d.ts +15 -0
  18. package/dest/contracts/fee_juice.d.ts.map +1 -0
  19. package/dest/contracts/fee_juice.js +52 -0
  20. package/dest/contracts/forwarder.d.ts +24 -0
  21. package/dest/contracts/forwarder.d.ts.map +1 -0
  22. package/dest/contracts/forwarder.js +101 -0
  23. package/dest/contracts/governance.d.ts +79 -0
  24. package/dest/contracts/governance.d.ts.map +1 -0
  25. package/dest/contracts/governance.js +247 -0
  26. package/dest/contracts/governance_proposer.d.ts +28 -0
  27. package/dest/contracts/governance_proposer.d.ts.map +1 -0
  28. package/dest/contracts/governance_proposer.js +82 -0
  29. package/dest/contracts/index.d.ts +9 -0
  30. package/dest/contracts/index.d.ts.map +1 -0
  31. package/dest/contracts/index.js +8 -0
  32. package/dest/contracts/registry.d.ts +24 -0
  33. package/dest/contracts/registry.d.ts.map +1 -0
  34. package/dest/contracts/registry.js +85 -0
  35. package/dest/contracts/rollup.d.ts +92 -0
  36. package/dest/contracts/rollup.d.ts.map +1 -0
  37. package/dest/contracts/rollup.js +234 -0
  38. package/dest/contracts/slashing_proposer.d.ts +21 -0
  39. package/dest/contracts/slashing_proposer.d.ts.map +1 -0
  40. package/dest/contracts/slashing_proposer.js +47 -0
  41. package/dest/deploy_l1_contracts.d.ts +21210 -0
  42. package/dest/deploy_l1_contracts.d.ts.map +1 -0
  43. package/dest/deploy_l1_contracts.js +687 -0
  44. package/dest/eth_cheat_codes.d.ts +147 -0
  45. package/dest/eth_cheat_codes.d.ts.map +1 -0
  46. package/dest/eth_cheat_codes.js +303 -0
  47. package/dest/index.d.ts +14 -0
  48. package/dest/index.d.ts.map +1 -0
  49. package/dest/index.js +13 -0
  50. package/dest/l1_contract_addresses.d.ts +57 -0
  51. package/dest/l1_contract_addresses.d.ts.map +1 -0
  52. package/dest/l1_contract_addresses.js +97 -0
  53. package/dest/l1_reader.d.ts +16 -0
  54. package/dest/l1_reader.d.ts.map +1 -0
  55. package/dest/l1_reader.js +27 -0
  56. package/dest/l1_tx_utils.d.ts +192 -0
  57. package/dest/l1_tx_utils.d.ts.map +1 -0
  58. package/dest/l1_tx_utils.js +641 -0
  59. package/dest/l1_tx_utils_with_blobs.d.ts +12 -0
  60. package/dest/l1_tx_utils_with_blobs.d.ts.map +1 -0
  61. package/dest/l1_tx_utils_with_blobs.js +64 -0
  62. package/dest/queries.d.ts +12 -0
  63. package/dest/queries.d.ts.map +1 -0
  64. package/dest/queries.js +35 -0
  65. package/dest/test/delayed_tx_utils.d.ts +8 -0
  66. package/dest/test/delayed_tx_utils.d.ts.map +1 -0
  67. package/dest/test/delayed_tx_utils.js +21 -0
  68. package/dest/test/eth_cheat_codes_with_state.d.ts +18 -0
  69. package/dest/test/eth_cheat_codes_with_state.d.ts.map +1 -0
  70. package/dest/test/eth_cheat_codes_with_state.js +34 -0
  71. package/dest/test/index.d.ts +6 -0
  72. package/dest/test/index.d.ts.map +1 -0
  73. package/dest/test/index.js +5 -0
  74. package/dest/test/start_anvil.d.ts +12 -0
  75. package/dest/test/start_anvil.d.ts.map +1 -0
  76. package/dest/test/start_anvil.js +46 -0
  77. package/dest/test/tx_delayer.d.ts +25 -0
  78. package/dest/test/tx_delayer.d.ts.map +1 -0
  79. package/dest/test/tx_delayer.js +116 -0
  80. package/dest/test/upgrade_utils.d.ts +11 -0
  81. package/dest/test/upgrade_utils.d.ts.map +1 -0
  82. package/dest/test/upgrade_utils.js +104 -0
  83. package/dest/types.d.ts +14 -0
  84. package/dest/types.d.ts.map +1 -0
  85. package/dest/types.js +1 -0
  86. package/dest/utils.d.ts +24 -0
  87. package/dest/utils.d.ts.map +1 -0
  88. package/dest/utils.js +209 -0
  89. package/package.json +98 -0
  90. package/src/chain.ts +71 -0
  91. package/src/client.ts +58 -0
  92. package/src/config.ts +103 -0
  93. package/src/constants.ts +4 -0
  94. package/src/contracts/empire_base.ts +19 -0
  95. package/src/contracts/fee_juice.ts +43 -0
  96. package/src/contracts/forwarder.ts +132 -0
  97. package/src/contracts/governance.ts +285 -0
  98. package/src/contracts/governance_proposer.ts +82 -0
  99. package/src/contracts/index.ts +8 -0
  100. package/src/contracts/registry.ts +106 -0
  101. package/src/contracts/rollup.ts +274 -0
  102. package/src/contracts/slashing_proposer.ts +51 -0
  103. package/src/deploy_l1_contracts.ts +948 -0
  104. package/src/eth_cheat_codes.ts +314 -0
  105. package/src/index.ts +13 -0
  106. package/src/l1_contract_addresses.ts +109 -0
  107. package/src/l1_reader.ts +42 -0
  108. package/src/l1_tx_utils.ts +847 -0
  109. package/src/l1_tx_utils_with_blobs.ts +86 -0
  110. package/src/queries.ts +58 -0
  111. package/src/test/delayed_tx_utils.ts +24 -0
  112. package/src/test/eth_cheat_codes_with_state.ts +38 -0
  113. package/src/test/index.ts +5 -0
  114. package/src/test/start_anvil.ts +52 -0
  115. package/src/test/tx_delayer.ts +163 -0
  116. package/src/test/upgrade_utils.ts +100 -0
  117. package/src/types.ts +33 -0
  118. package/src/utils.ts +276 -0
@@ -0,0 +1,27 @@
1
+ import { getConfigFromMappings, numberConfigHelper } from '@aztec/foundation/config';
2
+ import { l1ContractAddressesMapping } from './l1_contract_addresses.js';
3
+ export const l1ReaderConfigMappings = {
4
+ l1RpcUrls: {
5
+ env: 'ETHEREUM_HOSTS',
6
+ description: 'The RPC Url of the ethereum host.',
7
+ parseEnv: (val)=>val.split(',').map((url)=>url.trim())
8
+ },
9
+ l1ChainId: {
10
+ env: 'L1_CHAIN_ID',
11
+ parseEnv: (val)=>+val,
12
+ defaultValue: 31337,
13
+ description: 'The chain ID of the ethereum host.'
14
+ },
15
+ l1Contracts: {
16
+ description: 'The deployed L1 contract addresses',
17
+ nested: l1ContractAddressesMapping
18
+ },
19
+ viemPollingIntervalMS: {
20
+ env: 'L1_READER_VIEM_POLLING_INTERVAL_MS',
21
+ description: 'The polling interval viem uses in ms',
22
+ ...numberConfigHelper(1_000)
23
+ }
24
+ };
25
+ export function getL1ReaderConfigFromEnv() {
26
+ return getConfigFromMappings(l1ReaderConfigMappings);
27
+ }
@@ -0,0 +1,192 @@
1
+ import { type ConfigMappingsType } from '@aztec/foundation/config';
2
+ import { type Logger } from '@aztec/foundation/log';
3
+ import { type Abi, type Account, type Address, type BlockOverrides, type ContractFunctionExecutionError, type Hex, type StateOverride, type TransactionReceipt } from 'viem';
4
+ import type { ViemPublicClient, ViemWalletClient } from './types.js';
5
+ export interface L1TxUtilsConfig {
6
+ /**
7
+ * How much to increase calculated gas limit.
8
+ */
9
+ gasLimitBufferPercentage?: number;
10
+ /**
11
+ * Maximum gas price in gwei
12
+ */
13
+ maxGwei?: bigint;
14
+ /**
15
+ * Maximum blob fee per gas in gwei
16
+ */
17
+ maxBlobGwei?: bigint;
18
+ /**
19
+ * Priority fee bump percentage
20
+ */
21
+ priorityFeeBumpPercentage?: number;
22
+ /**
23
+ * How much to increase priority fee by each attempt (percentage)
24
+ */
25
+ priorityFeeRetryBumpPercentage?: number;
26
+ /**
27
+ * Fixed priority fee per gas in Gwei. Overrides any priority fee bump percentage config
28
+ */
29
+ fixedPriorityFeePerGas?: number;
30
+ /**
31
+ * Maximum number of speed-up attempts
32
+ */
33
+ maxAttempts?: number;
34
+ /**
35
+ * How often to check tx status
36
+ */
37
+ checkIntervalMs?: number;
38
+ /**
39
+ * How long before considering tx stalled
40
+ */
41
+ stallTimeMs?: number;
42
+ /**
43
+ * How long to wait for a tx to be mined before giving up
44
+ */
45
+ txTimeoutMs?: number;
46
+ /**
47
+ * How many attempts will be done to get a tx after it was sent?
48
+ * First attempt is done at 1s, second at 2s, third at 3s, etc.
49
+ */
50
+ txPropagationMaxQueryAttempts?: number;
51
+ }
52
+ export declare const l1TxUtilsConfigMappings: ConfigMappingsType<L1TxUtilsConfig>;
53
+ export declare const defaultL1TxUtilsConfig: L1TxUtilsConfig;
54
+ export interface L1TxRequest {
55
+ to: Address | null;
56
+ data?: Hex;
57
+ value?: bigint;
58
+ }
59
+ export type L1GasConfig = Partial<L1TxUtilsConfig> & {
60
+ gasLimit?: bigint;
61
+ txTimeoutAt?: Date;
62
+ };
63
+ export interface L1BlobInputs {
64
+ blobs: Uint8Array[];
65
+ kzg: any;
66
+ maxFeePerBlobGas?: bigint;
67
+ }
68
+ export interface GasPrice {
69
+ maxFeePerGas: bigint;
70
+ maxPriorityFeePerGas: bigint;
71
+ maxFeePerBlobGas?: bigint;
72
+ }
73
+ export type TransactionStats = {
74
+ /** Address of the sender. */
75
+ sender: string;
76
+ /** Hash of the transaction. */
77
+ transactionHash: string;
78
+ /** Size in bytes of the tx calldata */
79
+ calldataSize: number;
80
+ /** Gas required to pay for the calldata inclusion (depends on size and number of zeros) */
81
+ calldataGas: number;
82
+ };
83
+ export declare class L1TxUtils {
84
+ publicClient: ViemPublicClient;
85
+ walletClient: ViemWalletClient;
86
+ protected logger: Logger;
87
+ private debugMaxGasLimit;
88
+ readonly config: L1TxUtilsConfig;
89
+ private interrupted;
90
+ constructor(publicClient: ViemPublicClient, walletClient: ViemWalletClient, logger?: Logger, config?: Partial<L1TxUtilsConfig>, debugMaxGasLimit?: boolean);
91
+ interrupt(): void;
92
+ restart(): void;
93
+ getSenderAddress(): `0x${string}`;
94
+ getSenderBalance(): Promise<bigint>;
95
+ getBlock(): Promise<{
96
+ number: bigint;
97
+ hash: `0x${string}`;
98
+ nonce: `0x${string}`;
99
+ logsBloom: `0x${string}`;
100
+ baseFeePerGas: bigint | null;
101
+ blobGasUsed: bigint;
102
+ difficulty: bigint;
103
+ excessBlobGas: bigint;
104
+ extraData: `0x${string}`;
105
+ gasLimit: bigint;
106
+ gasUsed: bigint;
107
+ miner: `0x${string}`;
108
+ mixHash: `0x${string}`;
109
+ parentBeaconBlockRoot?: `0x${string}` | undefined;
110
+ parentHash: `0x${string}`;
111
+ receiptsRoot: `0x${string}`;
112
+ sealFields: `0x${string}`[];
113
+ sha3Uncles: `0x${string}`;
114
+ size: bigint;
115
+ stateRoot: `0x${string}`;
116
+ timestamp: bigint;
117
+ totalDifficulty: bigint | null;
118
+ transactionsRoot: `0x${string}`;
119
+ uncles: `0x${string}`[];
120
+ withdrawals?: import("viem").Withdrawal[] | undefined;
121
+ withdrawalsRoot?: `0x${string}` | undefined;
122
+ transactions: `0x${string}`[];
123
+ }>;
124
+ getBlockNumber(): Promise<bigint>;
125
+ /**
126
+ * Sends a transaction with gas estimation and pricing
127
+ * @param request - The transaction request (to, data, value)
128
+ * @param gasConfig - Optional gas configuration
129
+ * @returns The transaction hash and parameters used
130
+ */
131
+ sendTransaction(request: L1TxRequest, _gasConfig?: L1GasConfig, blobInputs?: L1BlobInputs): Promise<{
132
+ txHash: Hex;
133
+ gasLimit: bigint;
134
+ gasPrice: GasPrice;
135
+ }>;
136
+ /**
137
+ * Monitors a transaction until completion, handling speed-ups if needed
138
+ * @param request - Original transaction request (needed for speed-ups)
139
+ * @param initialTxHash - Hash of the initial transaction
140
+ * @param params - Parameters used in the initial transaction
141
+ * @param gasConfig - Optional gas configuration
142
+ */
143
+ monitorTransaction(request: L1TxRequest, initialTxHash: Hex, params: {
144
+ gasLimit: bigint;
145
+ }, _gasConfig?: Partial<L1TxUtilsConfig> & {
146
+ txTimeoutAt?: Date;
147
+ }, _blobInputs?: L1BlobInputs, isCancelTx?: boolean): Promise<TransactionReceipt>;
148
+ /**
149
+ * Sends a transaction and monitors it until completion
150
+ * @param request - The transaction request (to, data, value)
151
+ * @param gasConfig - Optional gas configuration
152
+ * @returns The receipt of the successful transaction
153
+ */
154
+ sendAndMonitorTransaction(request: L1TxRequest, gasConfig?: L1GasConfig, blobInputs?: L1BlobInputs): Promise<{
155
+ receipt: TransactionReceipt;
156
+ gasPrice: GasPrice;
157
+ }>;
158
+ /**
159
+ * Gets the current gas price with bounds checking
160
+ */
161
+ getGasPrice(_gasConfig?: L1TxUtilsConfig, isBlobTx?: boolean, attempt?: number, previousGasPrice?: typeof attempt extends 0 ? never : GasPrice): Promise<GasPrice>;
162
+ /**
163
+ * Estimates gas and adds buffer
164
+ */
165
+ estimateGas(account: Account | Hex, request: L1TxRequest, _gasConfig?: L1TxUtilsConfig, _blobInputs?: L1BlobInputs): Promise<bigint>;
166
+ getTransactionStats(txHash: string): Promise<TransactionStats | undefined>;
167
+ tryGetErrorFromRevertedTx(data: Hex, args: {
168
+ args: readonly any[];
169
+ functionName: string;
170
+ abi: Abi;
171
+ address: Hex;
172
+ }, blobInputs: (L1BlobInputs & {
173
+ maxFeePerBlobGas: bigint;
174
+ }) | undefined, stateOverride?: StateOverride): Promise<string | undefined>;
175
+ simulateGasUsed(request: L1TxRequest & {
176
+ gas?: bigint;
177
+ }, blockOverrides?: BlockOverrides<bigint, number>, stateOverrides?: StateOverride, _gasConfig?: L1TxUtilsConfig & {
178
+ fallbackGasEstimate?: bigint;
179
+ }): Promise<bigint>;
180
+ bumpGasLimit(gasLimit: bigint, _gasConfig?: L1TxUtilsConfig): bigint;
181
+ /**
182
+ * Attempts to cancel a transaction by sending a 0-value tx to self with same nonce but higher gas prices
183
+ * @param nonce - The nonce of the transaction to cancel
184
+ * @param previousGasPrice - The gas price of the previous transaction
185
+ * @param attempts - The number of attempts to cancel the transaction
186
+ * @returns The hash of the cancellation transaction
187
+ */
188
+ protected attemptTxCancellation(nonce: number, isBlobTx?: boolean, previousGasPrice?: GasPrice, attempts?: number): Promise<`0x${string}`>;
189
+ }
190
+ export declare function tryGetCustomErrorNameContractFunction(err: ContractFunctionExecutionError): string;
191
+ export declare function getCalldataGasUsage(data: Uint8Array): number;
192
+ //# sourceMappingURL=l1_tx_utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"l1_tx_utils.d.ts","sourceRoot":"","sources":["../src/l1_tx_utils.ts"],"names":[],"mappings":"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"}