@aztec/ethereum 0.0.1-commit.3100065 → 0.0.1-commit.330febf

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 (69) hide show
  1. package/dest/config.d.ts +13 -3
  2. package/dest/config.d.ts.map +1 -1
  3. package/dest/config.js +30 -3
  4. package/dest/contracts/governance.d.ts +36 -11
  5. package/dest/contracts/governance.d.ts.map +1 -1
  6. package/dest/contracts/governance.js +54 -24
  7. package/dest/contracts/governance_proposer.d.ts +7 -8
  8. package/dest/contracts/governance_proposer.d.ts.map +1 -1
  9. package/dest/contracts/governance_proposer.js +7 -10
  10. package/dest/contracts/gse.d.ts +5 -1
  11. package/dest/contracts/gse.d.ts.map +1 -1
  12. package/dest/contracts/gse.js +9 -0
  13. package/dest/contracts/multicall.d.ts +5 -3
  14. package/dest/contracts/multicall.d.ts.map +1 -1
  15. package/dest/contracts/multicall.js +7 -5
  16. package/dest/contracts/rollup.d.ts +9 -1
  17. package/dest/contracts/rollup.d.ts.map +1 -1
  18. package/dest/contracts/rollup.js +8 -0
  19. package/dest/contracts/slashing_proposer.d.ts +37 -6
  20. package/dest/contracts/slashing_proposer.d.ts.map +1 -1
  21. package/dest/contracts/slashing_proposer.js +447 -17
  22. package/dest/deploy_aztec_l1_contracts.d.ts +15 -4
  23. package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
  24. package/dest/deploy_aztec_l1_contracts.js +24 -13
  25. package/dest/foundry_binary.d.ts +13 -0
  26. package/dest/foundry_binary.d.ts.map +1 -0
  27. package/dest/foundry_binary.js +52 -0
  28. package/dest/l1_artifacts.d.ts +24 -19
  29. package/dest/l1_artifacts.d.ts.map +1 -1
  30. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts +23 -4
  31. package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -1
  32. package/dest/l1_tx_utils/l1_fee_analyzer.js +65 -3
  33. package/dest/l1_tx_utils/l1_tx_utils.d.ts +1 -1
  34. package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
  35. package/dest/l1_tx_utils/l1_tx_utils.js +27 -7
  36. package/dest/l1_tx_utils/types.d.ts +27 -1
  37. package/dest/l1_tx_utils/types.d.ts.map +1 -1
  38. package/dest/l1_tx_utils/types.js +10 -0
  39. package/dest/queries.d.ts +1 -1
  40. package/dest/queries.d.ts.map +1 -1
  41. package/dest/queries.js +7 -1
  42. package/dest/test/eth_cheat_codes.d.ts +7 -1
  43. package/dest/test/eth_cheat_codes.d.ts.map +1 -1
  44. package/dest/test/eth_cheat_codes.js +29 -4
  45. package/dest/test/start_anvil.d.ts +1 -1
  46. package/dest/test/start_anvil.d.ts.map +1 -1
  47. package/dest/test/start_anvil.js +41 -5
  48. package/dest/utils.js +8 -11
  49. package/package.json +5 -6
  50. package/src/config.ts +38 -3
  51. package/src/contracts/governance.ts +63 -20
  52. package/src/contracts/governance_proposer.ts +11 -15
  53. package/src/contracts/gse.ts +12 -0
  54. package/src/contracts/multicall.ts +8 -5
  55. package/src/contracts/rollup.ts +10 -0
  56. package/src/contracts/slashing_proposer.ts +78 -15
  57. package/src/deploy_aztec_l1_contracts.ts +29 -12
  58. package/src/foundry_binary.ts +57 -0
  59. package/src/l1_tx_utils/l1_fee_analyzer.ts +75 -3
  60. package/src/l1_tx_utils/l1_tx_utils.ts +19 -2
  61. package/src/l1_tx_utils/types.ts +32 -0
  62. package/src/queries.ts +6 -0
  63. package/src/test/eth_cheat_codes.ts +23 -2
  64. package/src/test/start_anvil.ts +38 -6
  65. package/src/utils.ts +11 -11
  66. package/dest/generated/l1-contracts-defaults.d.ts +0 -30
  67. package/dest/generated/l1-contracts-defaults.d.ts.map +0 -1
  68. package/dest/generated/l1-contracts-defaults.js +0 -30
  69. package/src/generated/l1-contracts-defaults.ts +0 -32
@@ -791,9 +791,6 @@ export class L1FeeAnalyzer {
791
791
  });
792
792
  }
793
793
 
794
- /**
795
- * Gets the minimum value from an array of bigints
796
- */
797
794
  private minBigInt(values: bigint[]): bigint {
798
795
  if (values.length === 0) {
799
796
  return 0n;
@@ -801,3 +798,78 @@ export class L1FeeAnalyzer {
801
798
  return values.reduce((min, val) => (val < min ? val : min), values[0]);
802
799
  }
803
800
  }
801
+
802
+ /** Per-block fee data for one mined L1 block, used to diagnose whether a tx was underpriced for it. */
803
+ export interface WindowBlockFees {
804
+ blockNumber: bigint;
805
+ timestamp: bigint;
806
+ baseFeePerGas: bigint;
807
+ /** 75th percentile priority fee among the block's txs (gas-weighted, from eth_feeHistory). */
808
+ p75PriorityFee: bigint;
809
+ /** Minimum priority fee among all included txs — the inclusion bar for that block. */
810
+ minIncludedPriorityFee: bigint;
811
+ blockBlobsFull: boolean;
812
+ includedBlobCount: number;
813
+ }
814
+
815
+ /** Safety bound on how far back the window scan walks if the chain head is far ahead of the window. */
816
+ const MAX_WINDOW_SCAN_BLOCKS = 64;
817
+
818
+ /**
819
+ * Reads the already-mined L1 blocks whose timestamps fall in [windowStartS, windowEndS) — the L1
820
+ * inclusion window of an L2 slot — and extracts per-block fee data. Walks block headers to map the
821
+ * window to block numbers, then reads the priority-fee stats from a single eth_feeHistory call
822
+ * (percentile 0 is the cheapest included tx, i.e. the inclusion bar), so no transaction bodies are
823
+ * ever downloaded. Historical reads only, so it never waits on a future block. Returns the blocks in
824
+ * chronological order, [] on error, or the subset mined so far if the window is still in progress.
825
+ * Never throws.
826
+ */
827
+ export async function captureWindowBlockFees(
828
+ client: ViemClient,
829
+ windowStartS: bigint,
830
+ windowEndS: bigint,
831
+ ): Promise<WindowBlockFees[]> {
832
+ try {
833
+ let current = await client.getBlock({ blockTag: 'latest' });
834
+ const inWindow: (typeof current)[] = [];
835
+ let scanned = 0;
836
+ // Walk back from the head, collecting blocks inside the window and skipping any past its end,
837
+ // until we cross below the window start (or hit the safety cap / genesis).
838
+ while (current.timestamp >= windowStartS && scanned < MAX_WINDOW_SCAN_BLOCKS) {
839
+ if (current.timestamp < windowEndS) {
840
+ inWindow.push(current);
841
+ }
842
+ if (current.number === 0n) {
843
+ break;
844
+ }
845
+ current = await client.getBlock({ blockNumber: current.number - 1n });
846
+ scanned++;
847
+ }
848
+ if (inWindow.length === 0) {
849
+ return [];
850
+ }
851
+ inWindow.reverse();
852
+ const newest = inWindow[inWindow.length - 1];
853
+ const feeHistory = await client.getFeeHistory({
854
+ blockCount: Number(newest.number - inWindow[0].number) + 1,
855
+ blockNumber: newest.number,
856
+ rewardPercentiles: [0, 75],
857
+ });
858
+ return inWindow.map(block => {
859
+ const idx = Number(block.number - feeHistory.oldestBlock);
860
+ const [minIncludedPriorityFee, p75PriorityFee] = feeHistory.reward?.[idx] ?? [0n, 0n];
861
+ const blobsInBlock = block.blobGasUsed ? Number(block.blobGasUsed / GAS_PER_BLOB) : 0;
862
+ return {
863
+ blockNumber: block.number,
864
+ timestamp: block.timestamp,
865
+ baseFeePerGas: block.baseFeePerGas ?? 0n,
866
+ p75PriorityFee,
867
+ minIncludedPriorityFee,
868
+ blockBlobsFull: blobsInBlock >= getMaxBlobCapacity(block.timestamp),
869
+ includedBlobCount: blobsInBlock,
870
+ };
871
+ });
872
+ } catch {
873
+ return [];
874
+ }
875
+ }
@@ -36,6 +36,7 @@ import {
36
36
  type L1TxConfig,
37
37
  type L1TxRequest,
38
38
  type L1TxState,
39
+ L1TxTimeoutError,
39
40
  type SigningCallback,
40
41
  TerminalTxUtilsState,
41
42
  TxUtilsState,
@@ -306,6 +307,7 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
306
307
  txConfigOverrides: gasConfigOverrides ?? {},
307
308
  sentAtL1Ts: now,
308
309
  lastSentAtL1Ts: now,
310
+ gasPriceHistory: [baseState.gasPrice],
309
311
  };
310
312
 
311
313
  // And persist it
@@ -504,6 +506,7 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
504
506
  if (timePassed >= stallTimeMs && attempts <= maxSpeedUpAttempts) {
505
507
  const newGasPrice = await this.getGasPrice(gasConfig, isBlobTx, attempts, state.gasPrice);
506
508
  state.gasPrice = newGasPrice;
509
+ state.gasPriceHistory?.push(newGasPrice);
507
510
 
508
511
  this.logger.debug(
509
512
  `Tx ${currentTxHash} with nonce ${nonce} from ${account} appears stuck. ` +
@@ -672,8 +675,22 @@ export class L1TxUtils extends ReadOnlyL1TxUtils {
672
675
  blobInputs?: L1BlobInputs,
673
676
  ): Promise<{ receipt: TransactionReceipt; state: L1TxState }> {
674
677
  const { state } = await this.sendTransaction(request, gasConfig, blobInputs);
675
- const receipt = await this.monitorTransaction(state);
676
- return { receipt, state };
678
+ try {
679
+ const receipt = await this.monitorTransaction(state);
680
+ return { receipt, state };
681
+ } catch (err) {
682
+ if (err instanceof TimeoutError) {
683
+ // Snapshot the ladder now: the fire-and-forget cancellation mutates state.gasPrice moments later.
684
+ throw new L1TxTimeoutError(err.message, {
685
+ gasPriceHistory: state.gasPriceHistory ? [...state.gasPriceHistory] : undefined,
686
+ finalGasPrice: state.gasPrice,
687
+ attempts: state.txHashes.length,
688
+ nonce: state.nonce,
689
+ gasLimit: state.gasLimit,
690
+ });
691
+ }
692
+ throw err;
693
+ }
677
694
  }
678
695
 
679
696
  public override async simulate(
@@ -1,4 +1,5 @@
1
1
  import type { BlobKzgInstance } from '@aztec/blob-lib/types';
2
+ import { TimeoutError } from '@aztec/foundation/error';
2
3
  import { EthAddress } from '@aztec/foundation/eth-address';
3
4
  import type { ViemTransactionSignature } from '@aztec/foundation/eth-signature';
4
5
 
@@ -55,6 +56,12 @@ export type L1TxState = {
55
56
  cancelTxHashes: Hex[];
56
57
  gasLimit: bigint;
57
58
  gasPrice: GasPrice;
59
+ /**
60
+ * Prices used for each attempt (initial send followed by each speed-up), in order. Always set on
61
+ * newly sent txs; optional because states restored from the state store predate the field.
62
+ * In-memory only — not persisted by the state store.
63
+ */
64
+ gasPriceHistory?: GasPrice[];
58
65
  txConfigOverrides: L1TxConfig;
59
66
  request: L1TxRequest;
60
67
  status: TxUtilsState;
@@ -83,3 +90,28 @@ export class DroppedTransactionError extends Error {
83
90
  this.name = 'DroppedTransactionError';
84
91
  }
85
92
  }
93
+
94
+ /** Snapshot of what a timed-out L1 tx tried to pay, taken when the timeout is raised. */
95
+ export type TimedOutTxState = {
96
+ /** Prices used across the initial send and each speed-up, in order (undefined only for restored states). */
97
+ gasPriceHistory?: GasPrice[];
98
+ /** The last price the tx was sent at before timing out. */
99
+ finalGasPrice: GasPrice;
100
+ /** Number of send attempts (initial + speed-ups). */
101
+ attempts: number;
102
+ nonce: number;
103
+ gasLimit: bigint;
104
+ };
105
+
106
+ /**
107
+ * Thrown by sendAndMonitorTransaction when a tx times out. Subclasses TimeoutError so existing
108
+ * `instanceof TimeoutError` checks keep working, while carrying the gas-price ladder for diagnostics.
109
+ */
110
+ export class L1TxTimeoutError extends TimeoutError {
111
+ constructor(
112
+ message: string,
113
+ public readonly txState: TimedOutTxState,
114
+ ) {
115
+ super(message);
116
+ }
117
+ }
package/src/queries.ts CHANGED
@@ -186,5 +186,11 @@ export async function getL1ContractsConfig(
186
186
  slashAmountMedium: slashingAmounts[1],
187
187
  slashAmountLarge: slashingAmounts[2],
188
188
  initialEthPerFeeAsset: DefaultL1ContractsConfig.initialEthPerFeeAsset,
189
+ // Not exposed by the rollup contract; fall back to defaults like the other non-on-chain fields above.
190
+ entryQueueBootstrapValidatorSetSize: DefaultL1ContractsConfig.entryQueueBootstrapValidatorSetSize,
191
+ entryQueueBootstrapFlushSize: DefaultL1ContractsConfig.entryQueueBootstrapFlushSize,
192
+ entryQueueFlushSizeMin: DefaultL1ContractsConfig.entryQueueFlushSizeMin,
193
+ entryQueueFlushSizeQuotient: DefaultL1ContractsConfig.entryQueueFlushSizeQuotient,
194
+ entryQueueMaxFlushSize: DefaultL1ContractsConfig.entryQueueMaxFlushSize,
189
195
  };
190
196
  }
@@ -505,19 +505,40 @@ export class EthCheatCodes {
505
505
  * reorg is needed because anvil applies a new gas limit only to future blocks: without it the just-mined
506
506
  * blocks would keep the tiny gas limit, and an `eth_call` against `latest` (whose gas is capped by the
507
507
  * block gas limit) would revert with "intrinsic gas too high".
508
+ *
509
+ * The replacement blocks advance L1 time. `anvil_reorg` stamps each replacement as `parent + N*interval`,
510
+ * so on its own it would freeze L1 time at the parent timestamp; callers that measure elapsed L1 time
511
+ * (L1TxUtils stall/timeout detection, `syncDateProvider`-driven slot advancement) rely on it moving
512
+ * forward. We reproduce the wall-clock advance the mine step just made (at least 1s per block) via a
513
+ * temporary block-timestamp interval, then restore any pre-existing interval.
508
514
  */
509
515
  public async mineEmptyBlock(blockCount: number = 1): Promise<void> {
510
516
  await this.execWithPausedAnvil(async () => {
511
517
  const originalGasLimit = await this.getBlockGasLimit();
518
+ const parentTimestamp = await this.lastBlockTimestamp();
519
+ // anvil has no getter for the block-timestamp interval, but the pending block is stamped
520
+ // `latest + interval`, so this delta is the standing interval (0 when none is set).
521
+ const priorInterval = (await this.nextBlockTimestamp()) - parentTimestamp;
512
522
  try {
513
523
  await this.setBlockGasLimit(1n);
514
524
  await this.doMine(blockCount);
515
525
  } finally {
516
526
  await this.setBlockGasLimit(originalGasLimit);
517
527
  }
528
+ const advance = (await this.lastBlockTimestamp()) - parentTimestamp;
529
+ const perBlockInterval = Math.max(1, Math.floor(advance / blockCount));
518
530
  // Replace the tiny-gas-limit blocks with empty blocks at the restored gas limit, keeping the same
519
- // height and timestamps. The reorged-out blocks held no transactions, so nothing returns to the pool.
520
- await this.doRpcCall('anvil_reorg', [blockCount, []]);
531
+ // height. The reorged-out blocks held no transactions, so nothing returns to the pool.
532
+ await this.doRpcCall('anvil_setBlockTimestampInterval', [perBlockInterval]);
533
+ try {
534
+ await this.doRpcCall('anvil_reorg', [blockCount, []]);
535
+ } finally {
536
+ if (priorInterval > 0) {
537
+ await this.doRpcCall('anvil_setBlockTimestampInterval', [priorInterval]);
538
+ } else {
539
+ await this.doRpcCall('anvil_removeBlockTimestampInterval', []);
540
+ }
541
+ }
521
542
  });
522
543
 
523
544
  this.logger.warn(`Mined ${blockCount} empty L1 ${pluralize('block', blockCount)}`);
@@ -1,10 +1,10 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { makeBackoff, retry } from '@aztec/foundation/retry';
3
3
  import type { TestDateProvider } from '@aztec/foundation/timer';
4
- import { fileURLToPath } from '@aztec/foundation/url';
5
4
 
6
5
  import { type ChildProcess, spawn } from 'child_process';
7
- import { dirname, resolve } from 'path';
6
+
7
+ import { resolveFoundryBinary } from '../foundry_binary.js';
8
8
 
9
9
  /** Minimal interface matching the @viem/anvil Anvil shape used by callers. */
10
10
  export interface Anvil {
@@ -14,6 +14,30 @@ export interface Anvil {
14
14
  stop(): Promise<void>;
15
15
  }
16
16
 
17
+ // Watchdog wrapper: instead of spawning anvil directly, we spawn a small bash supervisor that runs
18
+ // anvil as a background child and polls its own parent (this node process). If the parent dies for
19
+ // ANY reason — including SIGKILL / crash / OOM, where node's own exit handlers never run — the poll
20
+ // loop ends and the EXIT trap reaps anvil. The script is inlined (rather than shipped as a `.sh`) so
21
+ // it works from the published npm tarball too, and the resolved anvil binary is passed via
22
+ // `$ANVIL_BIN` so it works without `anvil` on PATH.
23
+ //
24
+ // `$@` is the anvil argv; `bash -c <script> bash <...args>` puts the args in `$@` and `$0` = 'bash'.
25
+ //
26
+ // The EXIT trap reaps anvil; INT/TERM just `exit` (which fires the EXIT trap) so a signal terminates
27
+ // the supervisor promptly instead of being swallowed — a trapped TERM does NOT terminate the shell,
28
+ // so trapping the kill directly on TERM would leave the poll loop running and the caller's teardown
29
+ // hanging until its SIGKILL escalation. `sleep & wait` makes the poll interruptible, so INT/TERM are
30
+ // handled immediately rather than after the current `sleep` returns.
31
+ const ANVIL_WATCHDOG = `
32
+ set -u
33
+ parent=$PPID
34
+ "$ANVIL_BIN" "$@" &
35
+ anvil_pid=$!
36
+ trap 'kill "$anvil_pid" 2>/dev/null' EXIT
37
+ trap 'exit 0' INT TERM
38
+ while kill -0 "$parent" 2>/dev/null; do sleep 1 & wait $!; done
39
+ `;
40
+
17
41
  /**
18
42
  * Ensures there's a running Anvil instance and returns the RPC URL.
19
43
  */
@@ -42,7 +66,7 @@ export async function startAnvil(
42
66
  dateProvider?: TestDateProvider;
43
67
  } = {},
44
68
  ): Promise<{ anvil: Anvil; methodCalls?: string[]; rpcUrl: string; stop: () => Promise<void> }> {
45
- const anvilBinary = resolve(dirname(fileURLToPath(import.meta.url)), '../../', 'scripts/anvil_kill_wrapper.sh');
69
+ const anvilBinary = resolveFoundryBinary('anvil');
46
70
  const logger = opts.log ? createLogger('ethereum:anvil') : undefined;
47
71
  const methodCalls = opts.captureMethodCalls ? ([] as string[]) : undefined;
48
72
 
@@ -50,6 +74,9 @@ export async function startAnvil(
50
74
 
51
75
  const anvil = await retry(
52
76
  async () => {
77
+ // `--port 0` lets anvil bind an OS-assigned ephemeral port; the actual port is read back from
78
+ // its "Listening on host:port" stdout below, so independent suites can spawn their own anvil
79
+ // in parallel without fighting over a fixed port.
53
80
  const port = opts.port ?? (process.env.ANVIL_PORT ? parseInt(process.env.ANVIL_PORT) : 8545);
54
81
  const args: string[] = [
55
82
  '--host',
@@ -71,9 +98,11 @@ export async function startAnvil(
71
98
  }
72
99
  args.push('--slots-in-an-epoch', String(opts.slotsInAnEpoch ?? 1));
73
100
 
74
- const child = spawn(anvilBinary, args, {
101
+ // Spawn the watchdog (see ANVIL_WATCHDOG). It launches anvil with these args and reaps it if we
102
+ // die; `$0` is 'bash' and `$@` is the anvil argv.
103
+ const child = spawn('bash', ['-c', ANVIL_WATCHDOG, 'bash', ...args], {
75
104
  stdio: ['ignore', 'pipe', 'pipe'],
76
- env: { ...process.env, RAYON_NUM_THREADS: '1' },
105
+ env: { ...process.env, ANVIL_BIN: anvilBinary, RAYON_NUM_THREADS: '1' },
77
106
  });
78
107
 
79
108
  // Wait for "Listening on" or an early exit.
@@ -183,7 +212,10 @@ function syncDateProviderFromAnvilOutput(text: string, dateProvider: TestDatePro
183
212
  }
184
213
  }
185
214
 
186
- /** Send SIGTERM, wait up to 5 s, then SIGKILL. All timers are always cleared. */
215
+ /**
216
+ * Send SIGTERM to the watchdog, wait up to 5 s, then SIGKILL. The watchdog's trap forwards the
217
+ * signal to anvil, so terminating it tears down anvil too. All timers are always cleared.
218
+ */
187
219
  function killChild(child: ChildProcess): Promise<void> {
188
220
  return new Promise<void>(resolve => {
189
221
  if (child.exitCode !== null || child.killed) {
package/src/utils.ts CHANGED
@@ -235,18 +235,18 @@ export function formatViemError(error: any, abi: Abi = ErrorsAbi): FormattedViem
235
235
  // If decoding fails, we fall back to the original formatting
236
236
  }
237
237
 
238
- // Strip ABI from the error object before formatting. We clone first to avoid mutating the
239
- // caller's error, but structuredClone throws DataCloneError on values it cannot clone (e.g.
240
- // viem RPC errors carrying function-valued request context). If cloning fails, fall back to
241
- // formatting the original error untouched rather than letting the clone failure mask it.
238
+ // Strip ABI from the error object before formatting
242
239
  if (error && typeof error === 'object') {
243
- try {
244
- const errorClone = structuredClone(error);
245
- stripAbis(errorClone);
246
- error = errorClone;
247
- } catch {
248
- // Leave `error` as the original; we skip stripAbis to avoid mutating the caller's object.
249
- }
240
+ // Create a clone to avoid modifying the original
241
+ const errorClone = structuredClone(error);
242
+
243
+ // Helper function to recursively remove ABI properties
244
+
245
+ // Strip ABIs from the clone
246
+ stripAbis(errorClone);
247
+
248
+ // Use the cleaned clone for further processing
249
+ error = errorClone;
250
250
  }
251
251
 
252
252
  // If it's a regular Error instance, return it with its message
@@ -1,30 +0,0 @@
1
- /** Default L1 contracts configuration values from network-defaults.yml */
2
- export declare const l1ContractsDefaultEnv: {
3
- readonly ETHEREUM_SLOT_DURATION: 12;
4
- readonly AZTEC_SLOT_DURATION: 72;
5
- readonly AZTEC_EPOCH_DURATION: 32;
6
- readonly AZTEC_TARGET_COMMITTEE_SIZE: 48;
7
- readonly AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2;
8
- readonly AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2;
9
- readonly AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000;
10
- readonly AZTEC_EJECTION_THRESHOLD: 50000000000000000000;
11
- readonly AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000;
12
- readonly AZTEC_EXIT_DELAY_SECONDS: 172800;
13
- readonly AZTEC_INBOX_LAG: 2;
14
- readonly AZTEC_PROOF_SUBMISSION_EPOCHS: 1;
15
- readonly AZTEC_MANA_TARGET: 100000000;
16
- readonly AZTEC_PROVING_COST_PER_MANA: 100;
17
- readonly AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000;
18
- readonly AZTEC_SLASHER_ENABLED: true;
19
- readonly AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4;
20
- readonly AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5;
21
- readonly AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 0;
22
- readonly AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2;
23
- readonly AZTEC_SLASHING_VETOER: "0x0000000000000000000000000000000000000000";
24
- readonly AZTEC_SLASHING_DISABLE_DURATION: 432000;
25
- readonly AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000;
26
- readonly AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000;
27
- readonly AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000;
28
- readonly AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300;
29
- };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibDEtY29udHJhY3RzLWRlZmF1bHRzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2VuZXJhdGVkL2wxLWNvbnRyYWN0cy1kZWZhdWx0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSwwRUFBMEU7QUFDMUUsZUFBTyxNQUFNLHFCQUFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBMkJ4QixDQUFDIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"l1-contracts-defaults.d.ts","sourceRoot":"","sources":["../../src/generated/l1-contracts-defaults.ts"],"names":[],"mappings":"AAGA,0EAA0E;AAC1E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BxB,CAAC"}
@@ -1,30 +0,0 @@
1
- // Auto-generated from spartan/environments/network-defaults.yml
2
- // Do not edit manually - run yarn generate to regenerate
3
- /** Default L1 contracts configuration values from network-defaults.yml */ export const l1ContractsDefaultEnv = {
4
- ETHEREUM_SLOT_DURATION: 12,
5
- AZTEC_SLOT_DURATION: 72,
6
- AZTEC_EPOCH_DURATION: 32,
7
- AZTEC_TARGET_COMMITTEE_SIZE: 48,
8
- AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
9
- AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
10
- AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
11
- AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
12
- AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
13
- AZTEC_EXIT_DELAY_SECONDS: 172800,
14
- AZTEC_INBOX_LAG: 2,
15
- AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
16
- AZTEC_MANA_TARGET: 100000000,
17
- AZTEC_PROVING_COST_PER_MANA: 100,
18
- AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
19
- AZTEC_SLASHER_ENABLED: true,
20
- AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
21
- AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
22
- AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 0,
23
- AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
24
- AZTEC_SLASHING_VETOER: '0x0000000000000000000000000000000000000000',
25
- AZTEC_SLASHING_DISABLE_DURATION: 432000,
26
- AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
27
- AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
28
- AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
29
- AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300
30
- };
@@ -1,32 +0,0 @@
1
- // Auto-generated from spartan/environments/network-defaults.yml
2
- // Do not edit manually - run yarn generate to regenerate
3
-
4
- /** Default L1 contracts configuration values from network-defaults.yml */
5
- export const l1ContractsDefaultEnv = {
6
- ETHEREUM_SLOT_DURATION: 12,
7
- AZTEC_SLOT_DURATION: 72,
8
- AZTEC_EPOCH_DURATION: 32,
9
- AZTEC_TARGET_COMMITTEE_SIZE: 48,
10
- AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
11
- AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: 2,
12
- AZTEC_ACTIVATION_THRESHOLD: 100000000000000000000,
13
- AZTEC_EJECTION_THRESHOLD: 50000000000000000000,
14
- AZTEC_LOCAL_EJECTION_THRESHOLD: 98000000000000000000,
15
- AZTEC_EXIT_DELAY_SECONDS: 172800,
16
- AZTEC_INBOX_LAG: 2,
17
- AZTEC_PROOF_SUBMISSION_EPOCHS: 1,
18
- AZTEC_MANA_TARGET: 100000000,
19
- AZTEC_PROVING_COST_PER_MANA: 100,
20
- AZTEC_INITIAL_ETH_PER_FEE_ASSET: 10000000,
21
- AZTEC_SLASHER_ENABLED: true,
22
- AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: 4,
23
- AZTEC_SLASHING_LIFETIME_IN_ROUNDS: 5,
24
- AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: 0,
25
- AZTEC_SLASHING_OFFSET_IN_ROUNDS: 2,
26
- AZTEC_SLASHING_VETOER: '0x0000000000000000000000000000000000000000',
27
- AZTEC_SLASHING_DISABLE_DURATION: 432000,
28
- AZTEC_SLASH_AMOUNT_SMALL: 10000000000000000000,
29
- AZTEC_SLASH_AMOUNT_MEDIUM: 20000000000000000000,
30
- AZTEC_SLASH_AMOUNT_LARGE: 50000000000000000000,
31
- AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: 300,
32
- } as const;