@aztec/ethereum 0.0.1-commit.f146247c → 0.0.1-commit.f1b29a41e
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/client.d.ts +10 -2
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +13 -7
- package/dest/config.d.ts +3 -1
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +11 -3
- package/dest/contracts/empire_base.d.ts +3 -1
- package/dest/contracts/empire_base.d.ts.map +1 -1
- package/dest/contracts/empire_slashing_proposer.d.ts +3 -1
- package/dest/contracts/empire_slashing_proposer.d.ts.map +1 -1
- package/dest/contracts/empire_slashing_proposer.js +9 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts +101 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
- package/dest/contracts/fee_asset_price_oracle.js +651 -0
- package/dest/contracts/governance.js +3 -3
- package/dest/contracts/governance_proposer.d.ts +3 -1
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +9 -0
- package/dest/contracts/index.d.ts +2 -1
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +1 -0
- package/dest/contracts/multicall.d.ts +51 -2
- package/dest/contracts/multicall.d.ts.map +1 -1
- package/dest/contracts/multicall.js +85 -0
- package/dest/contracts/registry.d.ts +3 -1
- package/dest/contracts/registry.d.ts.map +1 -1
- package/dest/contracts/registry.js +30 -1
- package/dest/contracts/rollup.d.ts +46 -9
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +211 -17
- package/dest/deploy_aztec_l1_contracts.d.ts +2 -3
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_aztec_l1_contracts.js +37 -22
- package/dest/deploy_l1_contract.js +3 -3
- package/dest/generated/l1-contracts-defaults.d.ts +1 -1
- package/dest/generated/l1-contracts-defaults.js +1 -1
- package/dest/l1_artifacts.d.ts +1051 -42
- package/dest/l1_artifacts.d.ts.map +1 -1
- package/dest/l1_reader.d.ts +3 -1
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +6 -1
- package/dest/l1_tx_utils/config.d.ts +7 -1
- package/dest/l1_tx_utils/config.d.ts.map +1 -1
- package/dest/l1_tx_utils/config.js +14 -1
- package/dest/l1_tx_utils/factory.d.ts +18 -10
- package/dest/l1_tx_utils/factory.d.ts.map +1 -1
- package/dest/l1_tx_utils/factory.js +17 -7
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +1 -1
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +1 -1
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts +15 -15
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/forwarder_l1_tx_utils.js +9 -15
- package/dest/l1_tx_utils/index-blobs.d.ts +3 -3
- package/dest/l1_tx_utils/index-blobs.d.ts.map +1 -1
- package/dest/l1_tx_utils/index-blobs.js +2 -2
- 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 +20 -7
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.js +74 -50
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +1 -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 +8 -4
- package/dest/l1_tx_utils/tx_delayer.d.ts +56 -0
- package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
- package/dest/{test → l1_tx_utils}/tx_delayer.js +62 -34
- package/dest/publisher_manager.d.ts +21 -7
- package/dest/publisher_manager.d.ts.map +1 -1
- package/dest/publisher_manager.js +81 -7
- package/dest/test/chain_monitor.d.ts +22 -3
- package/dest/test/chain_monitor.d.ts.map +1 -1
- package/dest/test/chain_monitor.js +33 -2
- package/dest/test/eth_cheat_codes.d.ts +6 -4
- package/dest/test/eth_cheat_codes.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes.js +6 -4
- package/dest/test/index.d.ts +1 -3
- package/dest/test/index.d.ts.map +1 -1
- package/dest/test/index.js +0 -2
- package/dest/test/start_anvil.d.ts +23 -3
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +143 -29
- package/dest/test/upgrade_utils.js +2 -2
- package/dest/utils.d.ts +1 -1
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +16 -12
- package/package.json +5 -7
- package/src/client.ts +10 -2
- package/src/config.ts +15 -2
- package/src/contracts/empire_base.ts +2 -0
- package/src/contracts/empire_slashing_proposer.ts +6 -0
- package/src/contracts/fee_asset_price_oracle.ts +280 -0
- package/src/contracts/governance.ts +3 -3
- package/src/contracts/governance_proposer.ts +6 -0
- package/src/contracts/index.ts +1 -0
- package/src/contracts/multicall.ts +65 -1
- package/src/contracts/registry.ts +31 -1
- package/src/contracts/rollup.ts +240 -21
- package/src/deploy_aztec_l1_contracts.ts +60 -29
- package/src/deploy_l1_contract.ts +3 -3
- package/src/generated/l1-contracts-defaults.ts +1 -1
- package/src/l1_reader.ts +13 -1
- package/src/l1_tx_utils/config.ts +20 -0
- package/src/l1_tx_utils/factory.ts +31 -31
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +1 -1
- package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +1 -1
- package/src/l1_tx_utils/forwarder_l1_tx_utils.ts +43 -54
- package/src/l1_tx_utils/index-blobs.ts +2 -2
- package/src/l1_tx_utils/index.ts +1 -0
- package/src/l1_tx_utils/l1_tx_utils.ts +67 -29
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +8 -4
- package/src/{test → l1_tx_utils}/tx_delayer.ts +78 -50
- package/src/publisher_manager.ts +105 -10
- package/src/test/chain_monitor.ts +60 -3
- package/src/test/eth_cheat_codes.ts +6 -4
- package/src/test/index.ts +0 -2
- package/src/test/start_anvil.ts +177 -29
- package/src/test/upgrade_utils.ts +2 -2
- package/src/utils.ts +17 -14
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts +0 -26
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.d.ts.map +0 -1
- package/dest/l1_tx_utils/l1_tx_utils_with_blobs.js +0 -26
- package/dest/test/delayed_tx_utils.d.ts +0 -13
- package/dest/test/delayed_tx_utils.d.ts.map +0 -1
- package/dest/test/delayed_tx_utils.js +0 -28
- package/dest/test/tx_delayer.d.ts +0 -36
- package/dest/test/tx_delayer.d.ts.map +0 -1
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +0 -77
- package/src/test/delayed_tx_utils.ts +0 -52
package/dest/contracts/rollup.js
CHANGED
|
@@ -376,12 +376,13 @@ import { Buffer32 } from '@aztec/foundation/buffer';
|
|
|
376
376
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
377
377
|
import { memoize } from '@aztec/foundation/decorators';
|
|
378
378
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
379
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
379
380
|
import { makeBackoff, retry } from '@aztec/foundation/retry';
|
|
380
381
|
import { EscapeHatchAbi } from '@aztec/l1-artifacts/EscapeHatchAbi';
|
|
381
382
|
import { RollupAbi } from '@aztec/l1-artifacts/RollupAbi';
|
|
382
383
|
import { RollupStorage } from '@aztec/l1-artifacts/RollupStorage';
|
|
383
384
|
import chunk from 'lodash.chunk';
|
|
384
|
-
import { encodeFunctionData, getContract, hexToBigInt, keccak256 } from 'viem';
|
|
385
|
+
import { encodeAbiParameters, encodeFunctionData, getContract, hexToBigInt, keccak256 } from 'viem';
|
|
385
386
|
import { getPublicClient } from '../client.js';
|
|
386
387
|
import { formatViemError } from '../utils.js';
|
|
387
388
|
import { EmpireSlashingProposerContract } from './empire_slashing_proposer.js';
|
|
@@ -499,6 +500,16 @@ export class RollupContract {
|
|
|
499
500
|
2,
|
|
500
501
|
"getGenesisArchiveTreeRoot"
|
|
501
502
|
],
|
|
503
|
+
[
|
|
504
|
+
memoize,
|
|
505
|
+
2,
|
|
506
|
+
"getVkTreeRoot"
|
|
507
|
+
],
|
|
508
|
+
[
|
|
509
|
+
memoize,
|
|
510
|
+
2,
|
|
511
|
+
"getProtocolContractsHash"
|
|
512
|
+
],
|
|
502
513
|
[
|
|
503
514
|
memoize,
|
|
504
515
|
2,
|
|
@@ -507,6 +518,7 @@ export class RollupContract {
|
|
|
507
518
|
], []));
|
|
508
519
|
}
|
|
509
520
|
rollup;
|
|
521
|
+
logger;
|
|
510
522
|
static cachedStfStorageSlot;
|
|
511
523
|
cachedEscapeHatch;
|
|
512
524
|
static get checkBlobStorageSlot() {
|
|
@@ -530,7 +542,7 @@ export class RollupContract {
|
|
|
530
542
|
}
|
|
531
543
|
constructor(client, address){
|
|
532
544
|
this.client = client;
|
|
533
|
-
_initProto(this);
|
|
545
|
+
this.logger = (_initProto(this), createLogger('ethereum:rollup'));
|
|
534
546
|
if (address instanceof EthAddress) {
|
|
535
547
|
address = address.toString();
|
|
536
548
|
}
|
|
@@ -640,24 +652,44 @@ export class RollupContract {
|
|
|
640
652
|
0n
|
|
641
653
|
]));
|
|
642
654
|
}
|
|
655
|
+
async getVkTreeRoot() {
|
|
656
|
+
const slot = BigInt(RollupContract.stfStorageSlot) + 3n;
|
|
657
|
+
const value = await this.client.getStorageAt({
|
|
658
|
+
address: this.address,
|
|
659
|
+
slot: `0x${slot.toString(16)}`
|
|
660
|
+
});
|
|
661
|
+
return Fr.fromString(value ?? '0x0');
|
|
662
|
+
}
|
|
663
|
+
async getProtocolContractsHash() {
|
|
664
|
+
const slot = BigInt(RollupContract.stfStorageSlot) + 4n;
|
|
665
|
+
const value = await this.client.getStorageAt({
|
|
666
|
+
address: this.address,
|
|
667
|
+
slot: `0x${slot.toString(16)}`
|
|
668
|
+
});
|
|
669
|
+
return Fr.fromString(value ?? '0x0');
|
|
670
|
+
}
|
|
643
671
|
/**
|
|
644
672
|
* Returns rollup constants used for epoch queries.
|
|
645
673
|
* Return type is `L1RollupConstants` which is defined in stdlib,
|
|
646
674
|
* so we cant reference it until we move this contract to that package.
|
|
647
675
|
*/ async getRollupConstants() {
|
|
648
|
-
const [l1StartBlock, l1GenesisTime, slotDuration, epochDuration, proofSubmissionEpochs] = await Promise.all([
|
|
676
|
+
const [l1StartBlock, l1GenesisTime, slotDuration, epochDuration, proofSubmissionEpochs, targetCommitteeSize, rollupManaLimit] = await Promise.all([
|
|
649
677
|
this.getL1StartBlock(),
|
|
650
678
|
this.getL1GenesisTime(),
|
|
651
679
|
this.getSlotDuration(),
|
|
652
680
|
this.getEpochDuration(),
|
|
653
|
-
this.getProofSubmissionEpochs()
|
|
681
|
+
this.getProofSubmissionEpochs(),
|
|
682
|
+
this.getTargetCommitteeSize(),
|
|
683
|
+
this.getManaLimit()
|
|
654
684
|
]);
|
|
655
685
|
return {
|
|
656
686
|
l1StartBlock,
|
|
657
687
|
l1GenesisTime,
|
|
658
688
|
slotDuration,
|
|
659
689
|
epochDuration: Number(epochDuration),
|
|
660
|
-
proofSubmissionEpochs: Number(proofSubmissionEpochs)
|
|
690
|
+
proofSubmissionEpochs: Number(proofSubmissionEpochs),
|
|
691
|
+
targetCommitteeSize,
|
|
692
|
+
rollupManaLimit: Number(rollupManaLimit)
|
|
661
693
|
};
|
|
662
694
|
}
|
|
663
695
|
async getSlasherAddress() {
|
|
@@ -703,7 +735,11 @@ export class RollupContract {
|
|
|
703
735
|
BigInt(epoch)
|
|
704
736
|
]);
|
|
705
737
|
return isOpen;
|
|
706
|
-
} catch
|
|
738
|
+
} catch (err) {
|
|
739
|
+
this.logger.warn('isEscapeHatchOpen failed (treating as closed); RPC or contract error may cause liveness risk', {
|
|
740
|
+
epoch: Number(epoch),
|
|
741
|
+
error: err
|
|
742
|
+
});
|
|
707
743
|
return false;
|
|
708
744
|
}
|
|
709
745
|
}
|
|
@@ -735,8 +771,9 @@ export class RollupContract {
|
|
|
735
771
|
async getCheckpointNumber() {
|
|
736
772
|
return CheckpointNumber.fromBigInt(await this.rollup.read.getPendingCheckpointNumber());
|
|
737
773
|
}
|
|
738
|
-
async getProvenCheckpointNumber() {
|
|
739
|
-
|
|
774
|
+
async getProvenCheckpointNumber(options) {
|
|
775
|
+
await checkBlockTag(options?.blockNumber, this.client);
|
|
776
|
+
return CheckpointNumber.fromBigInt(await this.rollup.read.getProvenCheckpointNumber(options));
|
|
740
777
|
}
|
|
741
778
|
async getSlotNumber() {
|
|
742
779
|
return SlotNumber.fromBigInt(await this.rollup.read.getCurrentSlot());
|
|
@@ -935,10 +972,10 @@ export class RollupContract {
|
|
|
935
972
|
* @return [slot, checkpointNumber, timeOfNextL1Slot] - If you can propose, the L2 slot number, checkpoint number and
|
|
936
973
|
* timestamp of the next L1 block
|
|
937
974
|
* @throws otherwise
|
|
938
|
-
*/ async
|
|
939
|
-
const
|
|
940
|
-
const timeOfNextL1Slot = latestBlock.timestamp + BigInt(slotDuration);
|
|
975
|
+
*/ async canProposeAt(archive, account, timestamp, opts = {}) {
|
|
976
|
+
const timeOfNextL1Slot = timestamp;
|
|
941
977
|
const who = typeof account === 'string' ? account : account.address;
|
|
978
|
+
const stateOverride = RollupContract.mergeStateOverrides(await this.makePendingCheckpointNumberOverride(opts.forcePendingCheckpointNumber), opts.forceArchive ? this.makeArchiveOverride(opts.forceArchive.checkpointNumber, opts.forceArchive.archive) : []);
|
|
942
979
|
try {
|
|
943
980
|
const { result: [slot, checkpointNumber] } = await this.client.simulateContract({
|
|
944
981
|
address: this.address,
|
|
@@ -950,7 +987,7 @@ export class RollupContract {
|
|
|
950
987
|
who
|
|
951
988
|
],
|
|
952
989
|
account,
|
|
953
|
-
stateOverride
|
|
990
|
+
stateOverride
|
|
954
991
|
});
|
|
955
992
|
return {
|
|
956
993
|
slot: SlotNumber.fromBigInt(slot),
|
|
@@ -988,6 +1025,139 @@ export class RollupContract {
|
|
|
988
1025
|
}
|
|
989
1026
|
];
|
|
990
1027
|
}
|
|
1028
|
+
/**
|
|
1029
|
+
* Returns a state override that sets tempCheckpointLogs[checkpointNumber].feeHeader to the compressed fee header.
|
|
1030
|
+
* Used when simulating a propose call where the parent checkpoint hasn't landed on L1 yet (pipelining).
|
|
1031
|
+
*/ async makeFeeHeaderOverride(checkpointNumber, feeHeader) {
|
|
1032
|
+
const { epochDuration, proofSubmissionEpochs } = await this.getRollupConstants();
|
|
1033
|
+
const roundaboutSize = BigInt(epochDuration * (proofSubmissionEpochs + 1) + 1);
|
|
1034
|
+
const circularIndex = BigInt(checkpointNumber) % roundaboutSize;
|
|
1035
|
+
// tempCheckpointLogs is at offset 2 in RollupStore
|
|
1036
|
+
const tempCheckpointLogsMappingBase = hexToBigInt(RollupContract.stfStorageSlot) + 2n;
|
|
1037
|
+
// Solidity mapping slot: keccak256(abi.encode(key, baseSlot))
|
|
1038
|
+
const structBaseSlot = hexToBigInt(keccak256(encodeAbiParameters([
|
|
1039
|
+
{
|
|
1040
|
+
type: 'uint256'
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
type: 'uint256'
|
|
1044
|
+
}
|
|
1045
|
+
], [
|
|
1046
|
+
circularIndex,
|
|
1047
|
+
tempCheckpointLogsMappingBase
|
|
1048
|
+
])));
|
|
1049
|
+
// feeHeader is the 7th field (offset 6) in CompressedTempCheckpointLog
|
|
1050
|
+
const feeHeaderSlot = structBaseSlot + 6n;
|
|
1051
|
+
const compressed = RollupContract.compressFeeHeader(feeHeader);
|
|
1052
|
+
return [
|
|
1053
|
+
{
|
|
1054
|
+
address: this.address,
|
|
1055
|
+
stateDiff: [
|
|
1056
|
+
{
|
|
1057
|
+
slot: `0x${feeHeaderSlot.toString(16).padStart(64, '0')}`,
|
|
1058
|
+
value: `0x${compressed.toString(16).padStart(64, '0')}`
|
|
1059
|
+
}
|
|
1060
|
+
]
|
|
1061
|
+
}
|
|
1062
|
+
];
|
|
1063
|
+
}
|
|
1064
|
+
/**
|
|
1065
|
+
* Returns a state override that sets archives[checkpointNumber] to the given archive value.
|
|
1066
|
+
* Used when simulating a canProposeAtTime call where the local archive differs from L1
|
|
1067
|
+
* (e.g. pipelining where the parent checkpoint hasn't landed on L1 yet).
|
|
1068
|
+
*/ makeArchiveOverride(checkpointNumber, archive) {
|
|
1069
|
+
const archivesMappingBase = hexToBigInt(RollupContract.stfStorageSlot) + 1n;
|
|
1070
|
+
const archiveSlot = hexToBigInt(keccak256(encodeAbiParameters([
|
|
1071
|
+
{
|
|
1072
|
+
type: 'uint256'
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
type: 'uint256'
|
|
1076
|
+
}
|
|
1077
|
+
], [
|
|
1078
|
+
BigInt(checkpointNumber),
|
|
1079
|
+
archivesMappingBase
|
|
1080
|
+
])));
|
|
1081
|
+
return [
|
|
1082
|
+
{
|
|
1083
|
+
address: this.address,
|
|
1084
|
+
stateDiff: [
|
|
1085
|
+
{
|
|
1086
|
+
slot: `0x${archiveSlot.toString(16).padStart(64, '0')}`,
|
|
1087
|
+
value: archive.toString()
|
|
1088
|
+
}
|
|
1089
|
+
]
|
|
1090
|
+
}
|
|
1091
|
+
];
|
|
1092
|
+
}
|
|
1093
|
+
/** Merges multiple StateOverride arrays, combining stateDiff entries for the same address. */ static mergeStateOverrides(...overrides) {
|
|
1094
|
+
const byAddress = new Map();
|
|
1095
|
+
for (const override of overrides){
|
|
1096
|
+
for (const entry of override){
|
|
1097
|
+
const key = entry.address.toLowerCase();
|
|
1098
|
+
const existing = byAddress.get(key);
|
|
1099
|
+
if (existing) {
|
|
1100
|
+
existing.stateDiff.push(...entry.stateDiff ?? []);
|
|
1101
|
+
if (entry.balance !== undefined) {
|
|
1102
|
+
existing.balance = entry.balance;
|
|
1103
|
+
}
|
|
1104
|
+
} else {
|
|
1105
|
+
byAddress.set(key, {
|
|
1106
|
+
address: entry.address,
|
|
1107
|
+
balance: entry.balance,
|
|
1108
|
+
stateDiff: [
|
|
1109
|
+
...entry.stateDiff ?? []
|
|
1110
|
+
]
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
return [
|
|
1116
|
+
...byAddress.values()
|
|
1117
|
+
];
|
|
1118
|
+
}
|
|
1119
|
+
/** Compresses a FeeHeader into a uint256 matching FeeHeaderLib.compress() in FeeStructs.sol. */ static compressFeeHeader(feeHeader) {
|
|
1120
|
+
const MASK_48_BITS = (1n << 48n) - 1n;
|
|
1121
|
+
const MASK_64_BITS = (1n << 64n) - 1n;
|
|
1122
|
+
const MASK_63_BITS = (1n << 63n) - 1n;
|
|
1123
|
+
let value = BigInt(feeHeader.manaUsed) & (1n << 32n) - 1n; // bits [0:31]
|
|
1124
|
+
value |= (feeHeader.excessMana < MASK_48_BITS ? feeHeader.excessMana : MASK_48_BITS) << 32n; // bits [32:79]
|
|
1125
|
+
value |= (BigInt(feeHeader.ethPerFeeAsset) & MASK_48_BITS) << 80n; // bits [80:127]
|
|
1126
|
+
value |= (feeHeader.congestionCost < MASK_64_BITS ? feeHeader.congestionCost : MASK_64_BITS) << 128n; // bits [128:191]
|
|
1127
|
+
value |= (feeHeader.proverCost < MASK_63_BITS ? feeHeader.proverCost : MASK_63_BITS) << 192n; // bits [192:254]
|
|
1128
|
+
value |= 1n << 255n; // preheat flag
|
|
1129
|
+
return value;
|
|
1130
|
+
}
|
|
1131
|
+
/** Computes the fee header for a child checkpoint given parent fee header and child data.
|
|
1132
|
+
* Must stay in sync with Solidity FeeLib.sol (computeNewEthPerFeeAsset, clampedAdd). */ static computeChildFeeHeader(parentFeeHeader, childManaUsed, feeAssetPriceModifier, manaTarget) {
|
|
1133
|
+
const MIN_ETH_PER_FEE_ASSET = 100n;
|
|
1134
|
+
const MAX_ETH_PER_FEE_ASSET = 100_000_000_000_000n; // 1e14, matches FeeLib.sol
|
|
1135
|
+
// excessMana = clampedAdd(parent.excessMana + parent.manaUsed, -manaTarget)
|
|
1136
|
+
const sum = parentFeeHeader.excessMana + parentFeeHeader.manaUsed;
|
|
1137
|
+
const excessMana = sum > manaTarget ? sum - manaTarget : 0n;
|
|
1138
|
+
// ethPerFeeAsset = computeNewEthPerFeeAsset(max(parent.ethPerFeeAsset, MIN), modifier)
|
|
1139
|
+
const parentPrice = parentFeeHeader.ethPerFeeAsset > MIN_ETH_PER_FEE_ASSET ? parentFeeHeader.ethPerFeeAsset : MIN_ETH_PER_FEE_ASSET;
|
|
1140
|
+
let newPrice;
|
|
1141
|
+
if (feeAssetPriceModifier >= 0n) {
|
|
1142
|
+
newPrice = parentPrice * (10_000n + feeAssetPriceModifier) / 10_000n;
|
|
1143
|
+
} else {
|
|
1144
|
+
const absMod = -feeAssetPriceModifier;
|
|
1145
|
+
newPrice = parentPrice * (10_000n - absMod) / 10_000n;
|
|
1146
|
+
}
|
|
1147
|
+
if (newPrice < MIN_ETH_PER_FEE_ASSET) {
|
|
1148
|
+
newPrice = MIN_ETH_PER_FEE_ASSET;
|
|
1149
|
+
}
|
|
1150
|
+
if (newPrice > MAX_ETH_PER_FEE_ASSET) {
|
|
1151
|
+
newPrice = MAX_ETH_PER_FEE_ASSET;
|
|
1152
|
+
}
|
|
1153
|
+
return {
|
|
1154
|
+
excessMana,
|
|
1155
|
+
manaUsed: childManaUsed,
|
|
1156
|
+
ethPerFeeAsset: newPrice,
|
|
1157
|
+
congestionCost: 0n,
|
|
1158
|
+
proverCost: 0n
|
|
1159
|
+
};
|
|
1160
|
+
}
|
|
991
1161
|
/** Creates a request to Rollup#invalidateBadAttestation to be simulated or sent */ buildInvalidateBadAttestationRequest(checkpointNumber, attestationsAndSigners, committee, invalidIndex) {
|
|
992
1162
|
return {
|
|
993
1163
|
to: this.address,
|
|
@@ -1029,11 +1199,25 @@ export class RollupContract {
|
|
|
1029
1199
|
prover
|
|
1030
1200
|
]);
|
|
1031
1201
|
}
|
|
1032
|
-
getManaMinFeeAt(timestamp, inFeeAsset) {
|
|
1202
|
+
getManaMinFeeAt(timestamp, inFeeAsset, stateOverride) {
|
|
1033
1203
|
return this.rollup.read.getManaMinFeeAt([
|
|
1034
1204
|
timestamp,
|
|
1035
1205
|
inFeeAsset
|
|
1206
|
+
], {
|
|
1207
|
+
stateOverride
|
|
1208
|
+
});
|
|
1209
|
+
}
|
|
1210
|
+
async getManaMinFeeComponentsAt(timestamp, inFeeAsset) {
|
|
1211
|
+
const result = await this.rollup.read.getManaMinFeeComponentsAt([
|
|
1212
|
+
timestamp,
|
|
1213
|
+
inFeeAsset
|
|
1036
1214
|
]);
|
|
1215
|
+
return {
|
|
1216
|
+
sequencerCost: result.sequencerCost,
|
|
1217
|
+
proverCost: result.proverCost,
|
|
1218
|
+
congestionCost: result.congestionCost,
|
|
1219
|
+
congestionMultiplier: result.congestionMultiplier
|
|
1220
|
+
};
|
|
1037
1221
|
}
|
|
1038
1222
|
async getSlotAt(timestamp) {
|
|
1039
1223
|
return SlotNumber.fromBigInt(await this.rollup.read.getSlotAt([
|
|
@@ -1084,10 +1268,10 @@ export class RollupContract {
|
|
|
1084
1268
|
prover
|
|
1085
1269
|
]);
|
|
1086
1270
|
}
|
|
1087
|
-
async getAttesters() {
|
|
1271
|
+
async getAttesters(timestamp) {
|
|
1088
1272
|
const attesterSize = await this.getActiveAttesterCount();
|
|
1089
1273
|
const gse = new GSEContract(this.client, await this.getGSE());
|
|
1090
|
-
const ts = (await this.client.getBlock()).timestamp;
|
|
1274
|
+
const ts = timestamp ?? (await this.client.getBlock()).timestamp;
|
|
1091
1275
|
const indices = Array.from({
|
|
1092
1276
|
length: attesterSize
|
|
1093
1277
|
}, (_, i)=>BigInt(i));
|
|
@@ -1237,8 +1421,18 @@ export class RollupContract {
|
|
|
1237
1421
|
checkpointNumber: CheckpointNumber.fromBigInt(log.args.checkpointNumber),
|
|
1238
1422
|
archive: Fr.fromString(log.args.archive),
|
|
1239
1423
|
versionedBlobHashes: log.args.versionedBlobHashes.map((h)=>Buffer.from(h.slice(2), 'hex')),
|
|
1240
|
-
attestationsHash:
|
|
1241
|
-
|
|
1424
|
+
attestationsHash: (()=>{
|
|
1425
|
+
if (!log.args.attestationsHash) {
|
|
1426
|
+
throw new Error(`CheckpointProposed event missing attestationsHash for checkpoint ${log.args.checkpointNumber}`);
|
|
1427
|
+
}
|
|
1428
|
+
return Buffer32.fromString(log.args.attestationsHash);
|
|
1429
|
+
})(),
|
|
1430
|
+
payloadDigest: (()=>{
|
|
1431
|
+
if (!log.args.payloadDigest) {
|
|
1432
|
+
throw new Error(`CheckpointProposed event missing payloadDigest for checkpoint ${log.args.checkpointNumber}`);
|
|
1433
|
+
}
|
|
1434
|
+
return Buffer32.fromString(log.args.payloadDigest);
|
|
1435
|
+
})()
|
|
1242
1436
|
}
|
|
1243
1437
|
}));
|
|
1244
1438
|
}
|
|
@@ -6,7 +6,6 @@ import type { Hex } from 'viem';
|
|
|
6
6
|
import type { L1ContractsConfig } from './config.js';
|
|
7
7
|
import { RollupContract } from './contracts/rollup.js';
|
|
8
8
|
import type { L1ContractAddresses } from './l1_contract_addresses.js';
|
|
9
|
-
import type { L1TxUtilsConfig } from './l1_tx_utils/config.js';
|
|
10
9
|
import type { ExtendedViemWalletClient } from './types.js';
|
|
11
10
|
export interface G2PointJson {
|
|
12
11
|
x0: string;
|
|
@@ -156,7 +155,7 @@ export type VerificationRecord = {
|
|
|
156
155
|
constructorArgsHex: Hex;
|
|
157
156
|
libraries: VerificationLibraryEntry[];
|
|
158
157
|
};
|
|
159
|
-
export interface DeployAztecL1ContractsArgs extends Omit<L1ContractsConfig,
|
|
158
|
+
export interface DeployAztecL1ContractsArgs extends Omit<L1ContractsConfig, 'gasLimitBufferPercentage' | 'maxGwei' | 'maxBlobGwei' | 'priorityFeeBumpPercentage' | 'priorityFeeRetryBumpPercentage' | 'minimumPriorityFeePerGas' | 'maxSpeedUpAttempts' | 'checkIntervalMs' | 'stallTimeMs' | 'txTimeoutMs' | 'cancelTxOnTimeout' | 'txCancellationFinalTimeoutMs' | 'txUnseenConsideredDroppedMs' | 'enableDelayer' | 'txDelayerMaxInclusionTimeIntoSlot'> {
|
|
160
159
|
/** The vk tree root. */
|
|
161
160
|
vkTreeRoot: Fr;
|
|
162
161
|
/** The hash of the protocol contracts. */
|
|
@@ -257,4 +256,4 @@ export declare const deployRollupForUpgrade: (privateKey: `0x${string}`, rpcUrl:
|
|
|
257
256
|
rollup: RollupContract;
|
|
258
257
|
slashFactoryAddress: `0x${string}`;
|
|
259
258
|
}>;
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2F6dGVjX2wxX2NvbnRyYWN0cy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RlcGxveV9henRlY19sMV9jb250cmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBd0IsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJM0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJcEQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU0zQyxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFLaEMsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUErRTNELE1BQU0sV0FBVyxXQUFXO0lBQzFCLEVBQUUsRUFBRSxNQUFNLENBQUM7SUFDWCxFQUFFLEVBQUUsTUFBTSxDQUFDO0lBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQztJQUNYLEVBQUUsRUFBRSxNQUFNLENBQUM7Q0FDWjtBQUVEOzs7R0FHRztBQUNILE1BQU0sV0FBVyxhQUFhO0lBQzVCLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixxQ0FBcUM7SUFDckMsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixrRUFBa0U7SUFDbEUsYUFBYSxFQUFFLFdBQVcsQ0FBQztDQUM1QjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0Isa0JBQWtCLElBQUks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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy_aztec_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_aztec_l1_contracts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAwB,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAI3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,2BAA2B,CAAC;AAIpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAM3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAKhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"deploy_aztec_l1_contracts.d.ts","sourceRoot":"","sources":["../src/deploy_aztec_l1_contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, write
|
|
|
11
11
|
import { tmpdir } from 'os';
|
|
12
12
|
import { dirname, join, resolve } from 'path';
|
|
13
13
|
import readline from 'readline';
|
|
14
|
-
import {
|
|
14
|
+
import { mainnet, sepolia } from 'viem/chains';
|
|
15
15
|
import { createEthereumChain, isAnvilTestChain } from './chain.js';
|
|
16
16
|
import { createExtendedL1Client } from './client.js';
|
|
17
17
|
import { deployMulticall3 } from './contracts/multicall.js';
|
|
@@ -19,9 +19,9 @@ import { RollupContract } from './contracts/rollup.js';
|
|
|
19
19
|
const logger = createLogger('ethereum:deploy_aztec_l1_contracts');
|
|
20
20
|
const JSON_DEPLOY_RESULT_PREFIX = 'JSON DEPLOY RESULT:';
|
|
21
21
|
/**
|
|
22
|
-
* Runs a process
|
|
23
|
-
*
|
|
24
|
-
*
|
|
22
|
+
* Runs a process and parses JSON deploy results from stdout.
|
|
23
|
+
* Lines starting with JSON_DEPLOY_RESULT_PREFIX are parsed and returned.
|
|
24
|
+
* All other stdout goes to logger.info, stderr goes to logger.warn.
|
|
25
25
|
*/ function runProcess(command, args, env, cwd) {
|
|
26
26
|
const { promise, resolve, reject } = promiseWithResolvers();
|
|
27
27
|
const proc = spawn(command, args, {
|
|
@@ -37,27 +37,42 @@ const JSON_DEPLOY_RESULT_PREFIX = 'JSON DEPLOY RESULT:';
|
|
|
37
37
|
]
|
|
38
38
|
});
|
|
39
39
|
let result;
|
|
40
|
+
let parseError;
|
|
41
|
+
let settled = false;
|
|
40
42
|
readline.createInterface({
|
|
41
43
|
input: proc.stdout
|
|
42
44
|
}).on('line', (line)=>{
|
|
43
45
|
const trimmedLine = line.trim();
|
|
44
46
|
if (trimmedLine.startsWith(JSON_DEPLOY_RESULT_PREFIX)) {
|
|
45
47
|
const jsonStr = trimmedLine.slice(JSON_DEPLOY_RESULT_PREFIX.length).trim();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
+
try {
|
|
49
|
+
result = JSON.parse(jsonStr);
|
|
50
|
+
} catch {
|
|
51
|
+
parseError = new Error(`Failed to parse deploy result JSON: ${jsonStr.slice(0, 200)}`);
|
|
52
|
+
}
|
|
48
53
|
} else {
|
|
49
54
|
logger.info(line);
|
|
50
55
|
}
|
|
51
56
|
});
|
|
52
57
|
readline.createInterface({
|
|
53
58
|
input: proc.stderr
|
|
54
|
-
}).on('line', logger.
|
|
59
|
+
}).on('line', logger.warn.bind(logger));
|
|
55
60
|
proc.on('error', (error)=>{
|
|
61
|
+
if (settled) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
settled = true;
|
|
56
65
|
reject(new Error(`Failed to spawn ${command}: ${error.message}`));
|
|
57
66
|
});
|
|
58
67
|
proc.on('close', (code)=>{
|
|
68
|
+
if (settled) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
settled = true;
|
|
59
72
|
if (code !== 0) {
|
|
60
|
-
reject(new Error(`${command} exited with code ${code}
|
|
73
|
+
reject(new Error(`${command} exited with code ${code}`));
|
|
74
|
+
} else if (parseError) {
|
|
75
|
+
reject(parseError);
|
|
61
76
|
} else {
|
|
62
77
|
resolve(result);
|
|
63
78
|
}
|
|
@@ -137,6 +152,9 @@ function cleanupDeployDir() {
|
|
|
137
152
|
const foundryTomlPath = join(basePath, 'foundry.toml');
|
|
138
153
|
let foundryToml = readFileSync(foundryTomlPath, 'utf-8');
|
|
139
154
|
const solcPathMatch = foundryToml.match(/solc\s*=\s*"\.\/solc-([^"]+)"/);
|
|
155
|
+
// Did we find a hardcoded solc path that we need to make absolute?
|
|
156
|
+
// This code path happens in CI currently as we bundle solc there to avoid race conditions when
|
|
157
|
+
// downloading solc.
|
|
140
158
|
if (solcPathMatch) {
|
|
141
159
|
const solcVersion = solcPathMatch[1];
|
|
142
160
|
const absoluteSolcPath = join(basePath, `solc-${solcVersion}`);
|
|
@@ -225,11 +243,8 @@ function cleanupDeployDir() {
|
|
|
225
243
|
if (isVerifiableChain && !process.env.ETHERSCAN_API_KEY) {
|
|
226
244
|
logger.warn(`Deploying to chain ${chainId} (${chainId === mainnet.id ? 'mainnet' : 'sepolia'}) without ETHERSCAN_API_KEY. ` + `Contracts will NOT be verified on Etherscan. Set ETHERSCAN_API_KEY environment variable to enable verification.`);
|
|
227
245
|
}
|
|
228
|
-
|
|
229
|
-
const MAGIC_ANVIL_BATCH_SIZE = 8;
|
|
230
|
-
// Anvil seems to stall with unbounded batch size. Otherwise no max batch size is desirable.
|
|
246
|
+
const scriptPath = join(getL1ContractsPath(), 'scripts', 'forge_broadcast.js');
|
|
231
247
|
const forgeArgs = [
|
|
232
|
-
'script',
|
|
233
248
|
FORGE_SCRIPT,
|
|
234
249
|
'--sig',
|
|
235
250
|
'run()',
|
|
@@ -237,11 +252,6 @@ function cleanupDeployDir() {
|
|
|
237
252
|
privateKey,
|
|
238
253
|
'--rpc-url',
|
|
239
254
|
rpcUrl,
|
|
240
|
-
'--broadcast',
|
|
241
|
-
...chainId === foundry.id ? [
|
|
242
|
-
'--batch-size',
|
|
243
|
-
MAGIC_ANVIL_BATCH_SIZE.toString()
|
|
244
|
-
] : [],
|
|
245
255
|
...shouldVerify ? [
|
|
246
256
|
'--verify'
|
|
247
257
|
] : []
|
|
@@ -252,7 +262,10 @@ function cleanupDeployDir() {
|
|
|
252
262
|
FOUNDRY_PROFILE: chainId === mainnet.id ? 'production' : undefined,
|
|
253
263
|
...getDeployAztecL1ContractsEnvVars(args)
|
|
254
264
|
};
|
|
255
|
-
const result = await runProcess(
|
|
265
|
+
const result = await runProcess(process.execPath, [
|
|
266
|
+
scriptPath,
|
|
267
|
+
...forgeArgs
|
|
268
|
+
], forgeEnv, l1ContractsPath);
|
|
256
269
|
if (!result) {
|
|
257
270
|
throw new Error('Forge script did not output deployment result');
|
|
258
271
|
}
|
|
@@ -364,16 +377,15 @@ export function getDeployRollupForUpgradeEnvVars(args) {
|
|
|
364
377
|
const l1ContractsPath = prepareL1ContractsForDeployment();
|
|
365
378
|
const FORGE_SCRIPT = 'script/deploy/DeployRollupForUpgrade.s.sol';
|
|
366
379
|
await maybeForgeForceProductionBuild(l1ContractsPath, FORGE_SCRIPT, chainId);
|
|
380
|
+
const scriptPath = join(getL1ContractsPath(), 'scripts', 'forge_broadcast.js');
|
|
367
381
|
const forgeArgs = [
|
|
368
|
-
'script',
|
|
369
382
|
FORGE_SCRIPT,
|
|
370
383
|
'--sig',
|
|
371
384
|
'run()',
|
|
372
385
|
'--private-key',
|
|
373
386
|
privateKey,
|
|
374
387
|
'--rpc-url',
|
|
375
|
-
rpcUrl
|
|
376
|
-
'--broadcast'
|
|
388
|
+
rpcUrl
|
|
377
389
|
];
|
|
378
390
|
const forgeEnv = {
|
|
379
391
|
FOUNDRY_PROFILE: chainId === mainnet.id ? 'production' : undefined,
|
|
@@ -382,7 +394,10 @@ export function getDeployRollupForUpgradeEnvVars(args) {
|
|
|
382
394
|
NETWORK: getActiveNetworkName(),
|
|
383
395
|
...getDeployRollupForUpgradeEnvVars(args)
|
|
384
396
|
};
|
|
385
|
-
const result = await runProcess(
|
|
397
|
+
const result = await runProcess(process.execPath, [
|
|
398
|
+
scriptPath,
|
|
399
|
+
...forgeArgs
|
|
400
|
+
], forgeEnv, l1ContractsPath);
|
|
386
401
|
if (!result) {
|
|
387
402
|
throw new Error('Forge script did not output deployment result');
|
|
388
403
|
}
|
|
@@ -5,7 +5,7 @@ import { concatHex, encodeAbiParameters, encodeDeployData, getContractAddress, n
|
|
|
5
5
|
import { DEPLOYER_ADDRESS } from './deploy_aztec_l1_contracts.js';
|
|
6
6
|
import { RegisterNewRollupVersionPayloadArtifact } from './l1_artifacts.js';
|
|
7
7
|
import { getL1TxUtilsConfigEnvVars } from './l1_tx_utils/config.js';
|
|
8
|
-
import {
|
|
8
|
+
import { createL1TxUtils } from './l1_tx_utils/factory.js';
|
|
9
9
|
import { formatViemError } from './utils.js';
|
|
10
10
|
export class L1Deployer {
|
|
11
11
|
client;
|
|
@@ -28,7 +28,7 @@ export class L1Deployer {
|
|
|
28
28
|
this.salt = maybeSalt ? padHex(numberToHex(maybeSalt), {
|
|
29
29
|
size: 32
|
|
30
30
|
}) : undefined;
|
|
31
|
-
this.l1TxUtils =
|
|
31
|
+
this.l1TxUtils = createL1TxUtils(this.client, {
|
|
32
32
|
logger: this.logger,
|
|
33
33
|
dateProvider
|
|
34
34
|
}, {
|
|
@@ -130,7 +130,7 @@ export class L1Deployer {
|
|
|
130
130
|
let { l1TxUtils } = opts;
|
|
131
131
|
if (!l1TxUtils) {
|
|
132
132
|
const config = getL1TxUtilsConfigEnvVars();
|
|
133
|
-
l1TxUtils =
|
|
133
|
+
l1TxUtils = createL1TxUtils(extendedClient, {
|
|
134
134
|
logger
|
|
135
135
|
}, {
|
|
136
136
|
...config,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Default L1 contracts configuration values from network-defaults.yml */
|
|
2
2
|
export declare const l1ContractsDefaultEnv: {
|
|
3
3
|
readonly ETHEREUM_SLOT_DURATION: 12;
|
|
4
|
-
readonly AZTEC_SLOT_DURATION:
|
|
4
|
+
readonly AZTEC_SLOT_DURATION: 72;
|
|
5
5
|
readonly AZTEC_EPOCH_DURATION: 32;
|
|
6
6
|
readonly AZTEC_TARGET_COMMITTEE_SIZE: 48;
|
|
7
7
|
readonly AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Do not edit manually - run yarn generate to regenerate
|
|
3
3
|
/** Default L1 contracts configuration values from network-defaults.yml */ export const l1ContractsDefaultEnv = {
|
|
4
4
|
ETHEREUM_SLOT_DURATION: 12,
|
|
5
|
-
AZTEC_SLOT_DURATION:
|
|
5
|
+
AZTEC_SLOT_DURATION: 72,
|
|
6
6
|
AZTEC_EPOCH_DURATION: 32,
|
|
7
7
|
AZTEC_TARGET_COMMITTEE_SIZE: 48,
|
|
8
8
|
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: 2,
|