@aztec/ethereum 0.69.0 → 0.69.1-devnet
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/config.d.ts +15 -0
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +32 -2
- package/dest/constants.d.ts +0 -1
- package/dest/constants.d.ts.map +1 -1
- package/dest/constants.js +1 -2
- package/dest/deploy_l1_contracts.d.ts +4 -0
- package/dest/deploy_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_l1_contracts.js +17 -13
- package/dest/l1_contract_addresses.d.ts +4 -1
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +8 -1
- package/dest/l1_tx_utils.d.ts +24 -9
- package/dest/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils.js +154 -56
- package/dest/test/start_anvil.d.ts.map +1 -1
- package/dest/test/start_anvil.js +15 -8
- package/dest/test/tx_delayer.js +4 -4
- package/dest/utils.d.ts +2 -0
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +95 -2
- package/package.json +3 -4
- package/src/config.ts +46 -1
- package/src/constants.ts +0 -1
- package/src/deploy_l1_contracts.ts +22 -11
- package/src/l1_contract_addresses.ts +7 -0
- package/src/l1_tx_utils.ts +187 -65
- package/src/test/start_anvil.ts +17 -8
- package/src/test/tx_delayer.ts +3 -3
- package/src/utils.ts +109 -0
package/dest/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { decodeEventLog, } from 'viem';
|
|
1
|
+
import { BaseError, ContractFunctionRevertedError, decodeEventLog, } from 'viem';
|
|
2
2
|
export function extractEvent(logs, address, abi, eventName, filter, logger) {
|
|
3
3
|
const event = tryExtractEvent(logs, address, abi, eventName, filter, logger);
|
|
4
4
|
if (!event) {
|
|
@@ -24,4 +24,97 @@ function tryExtractEvent(logs, address, abi, eventName, filter, logger) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
|
|
27
|
+
export function prettyLogViemErrorMsg(err) {
|
|
28
|
+
if (err instanceof BaseError) {
|
|
29
|
+
const revertError = err.walk(err => err instanceof ContractFunctionRevertedError);
|
|
30
|
+
if (revertError instanceof ContractFunctionRevertedError) {
|
|
31
|
+
const errorName = revertError.data?.errorName ?? '';
|
|
32
|
+
const args = revertError.metaMessages && revertError.metaMessages?.length > 1 ? revertError.metaMessages[1].trimStart() : '';
|
|
33
|
+
return `${errorName}${args}`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return err?.message ?? err;
|
|
37
|
+
}
|
|
38
|
+
export function formatViemError(error) {
|
|
39
|
+
const truncateHex = (hex, length = 100) => {
|
|
40
|
+
if (!hex || typeof hex !== 'string') {
|
|
41
|
+
return hex;
|
|
42
|
+
}
|
|
43
|
+
if (!hex.startsWith('0x')) {
|
|
44
|
+
return hex;
|
|
45
|
+
}
|
|
46
|
+
if (hex.length <= length * 2) {
|
|
47
|
+
return hex;
|
|
48
|
+
}
|
|
49
|
+
return `${hex.slice(0, length)}...${hex.slice(-length)}`;
|
|
50
|
+
};
|
|
51
|
+
const formatRequestBody = (body) => {
|
|
52
|
+
try {
|
|
53
|
+
const parsed = JSON.parse(body);
|
|
54
|
+
// Recursively process all parameters that might contain hex strings
|
|
55
|
+
const processParams = (obj) => {
|
|
56
|
+
if (Array.isArray(obj)) {
|
|
57
|
+
return obj.map(item => processParams(item));
|
|
58
|
+
}
|
|
59
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
60
|
+
const result = {};
|
|
61
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
62
|
+
result[key] = processParams(value);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
if (typeof obj === 'string') {
|
|
67
|
+
if (obj.startsWith('0x')) {
|
|
68
|
+
return truncateHex(obj);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return obj;
|
|
72
|
+
};
|
|
73
|
+
// Process the entire request body
|
|
74
|
+
const processed = processParams(parsed);
|
|
75
|
+
return JSON.stringify(processed, null, 2);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return body;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const truncateHexStringsInText = (text) => {
|
|
82
|
+
const hexRegex = /\b0x[a-fA-F0-9]{10,}/g;
|
|
83
|
+
return text.replace(hexRegex, hex => truncateHex(hex));
|
|
84
|
+
};
|
|
85
|
+
const extractAndFormatRequestBody = (message) => {
|
|
86
|
+
// First handle Request body JSON
|
|
87
|
+
const requestBodyRegex = /Request body: ({[\s\S]*?})\n/g;
|
|
88
|
+
let result = message.replace(requestBodyRegex, (match, body) => {
|
|
89
|
+
return `Request body: ${formatRequestBody(body)}\n`;
|
|
90
|
+
});
|
|
91
|
+
// Then handle Arguments section
|
|
92
|
+
const argsRegex = /((?:Request |Estimate Gas )?Arguments:[\s\S]*?(?=\n\n|$))/g;
|
|
93
|
+
result = result.replace(argsRegex, section => {
|
|
94
|
+
const lines = section.split('\n');
|
|
95
|
+
const processedLines = lines.map(line => {
|
|
96
|
+
// Check if line contains a colon followed by content
|
|
97
|
+
const colonIndex = line.indexOf(':');
|
|
98
|
+
if (colonIndex !== -1) {
|
|
99
|
+
const [prefix, content] = [line.slice(0, colonIndex + 1), line.slice(colonIndex + 1).trim()];
|
|
100
|
+
// If content contains a hex string, truncate it
|
|
101
|
+
if (content.includes('0x')) {
|
|
102
|
+
const hexMatches = content.match(/0x[a-fA-F0-9]+/g) || [];
|
|
103
|
+
let processedContent = content;
|
|
104
|
+
hexMatches.forEach(hex => {
|
|
105
|
+
processedContent = processedContent.replace(hex, truncateHex(hex));
|
|
106
|
+
});
|
|
107
|
+
return `${prefix} ${processedContent}`;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return line;
|
|
111
|
+
});
|
|
112
|
+
return processedLines.join('\n');
|
|
113
|
+
});
|
|
114
|
+
// Finally, catch any remaining hex strings in the message
|
|
115
|
+
result = truncateHexStringsInText(result);
|
|
116
|
+
return result;
|
|
117
|
+
};
|
|
118
|
+
return JSON.stringify({ error: extractAndFormatRequestBody(error?.message || String(error)) }, null, 2).replace(/\\n/g, '\n');
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUVMLFNBQVMsRUFFVCw2QkFBNkIsRUFJN0IsY0FBYyxHQUNmLE1BQU0sTUFBTSxDQUFDO0FBU2QsTUFBTSxVQUFVLFlBQVksQ0FLMUIsSUFBVyxFQUNYLE9BQVksRUFDWixHQUFTLEVBQ1QsU0FBcUIsRUFDckIsTUFBcUMsRUFDckMsTUFBZTtJQUVmLE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLFNBQVMsaUJBQWlCLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUt0QixJQUFXLEVBQ1gsT0FBWSxFQUNaLEdBQVMsRUFDVCxTQUFxQixFQUNyQixNQUFxQyxFQUNyQyxNQUFlO0lBRWYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDeEQsSUFBSSxDQUFDO2dCQUNILE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELElBQUksWUFBWSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDekMsTUFBTSxhQUFhLEdBQUcsWUFBMEIsQ0FBQztvQkFDakQsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQzt3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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/ethereum",
|
|
3
|
-
"version": "0.69.
|
|
3
|
+
"version": "0.69.1-devnet",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -29,11 +29,10 @@
|
|
|
29
29
|
"../package.common.json"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@aztec/foundation": "0.69.
|
|
33
|
-
"@aztec/l1-artifacts": "0.69.
|
|
32
|
+
"@aztec/foundation": "0.69.1-devnet",
|
|
33
|
+
"@aztec/l1-artifacts": "0.69.1-devnet",
|
|
34
34
|
"@viem/anvil": "^0.0.10",
|
|
35
35
|
"dotenv": "^16.0.3",
|
|
36
|
-
"get-port": "^7.1.0",
|
|
37
36
|
"tslib": "^2.4.0",
|
|
38
37
|
"viem": "^2.7.15",
|
|
39
38
|
"zod": "^3.23.8"
|
package/src/config.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type ConfigMappingsType,
|
|
3
|
+
bigintConfigHelper,
|
|
4
|
+
getConfigFromMappings,
|
|
5
|
+
numberConfigHelper,
|
|
6
|
+
} from '@aztec/foundation/config';
|
|
2
7
|
|
|
3
8
|
export type L1ContractsConfig = {
|
|
4
9
|
/** How many seconds an L1 slot lasts. */
|
|
@@ -11,6 +16,16 @@ export type L1ContractsConfig = {
|
|
|
11
16
|
aztecTargetCommitteeSize: number;
|
|
12
17
|
/** The number of L2 slots that we can wait for a proof of an epoch to be produced. */
|
|
13
18
|
aztecEpochProofClaimWindowInL2Slots: number;
|
|
19
|
+
/** The minimum stake for a validator. */
|
|
20
|
+
minimumStake: bigint;
|
|
21
|
+
/** The slashing quorum */
|
|
22
|
+
slashingQuorum: number;
|
|
23
|
+
/** The slashing round size */
|
|
24
|
+
slashingRoundSize: number;
|
|
25
|
+
/** Governance proposing quorum */
|
|
26
|
+
governanceProposerQuorum: number;
|
|
27
|
+
/** Governance proposing round size */
|
|
28
|
+
governanceProposerRoundSize: number;
|
|
14
29
|
};
|
|
15
30
|
|
|
16
31
|
export const DefaultL1ContractsConfig = {
|
|
@@ -19,6 +34,11 @@ export const DefaultL1ContractsConfig = {
|
|
|
19
34
|
aztecEpochDuration: 16,
|
|
20
35
|
aztecTargetCommitteeSize: 48,
|
|
21
36
|
aztecEpochProofClaimWindowInL2Slots: 13,
|
|
37
|
+
minimumStake: BigInt(100e18),
|
|
38
|
+
slashingQuorum: 6,
|
|
39
|
+
slashingRoundSize: 10,
|
|
40
|
+
governanceProposerQuorum: 6,
|
|
41
|
+
governanceProposerRoundSize: 10,
|
|
22
42
|
} satisfies L1ContractsConfig;
|
|
23
43
|
|
|
24
44
|
export const l1ContractsConfigMappings: ConfigMappingsType<L1ContractsConfig> = {
|
|
@@ -47,6 +67,31 @@ export const l1ContractsConfigMappings: ConfigMappingsType<L1ContractsConfig> =
|
|
|
47
67
|
description: 'The number of L2 slots that we can wait for a proof of an epoch to be produced.',
|
|
48
68
|
...numberConfigHelper(DefaultL1ContractsConfig.aztecEpochProofClaimWindowInL2Slots),
|
|
49
69
|
},
|
|
70
|
+
minimumStake: {
|
|
71
|
+
env: 'AZTEC_MINIMUM_STAKE',
|
|
72
|
+
description: 'The minimum stake for a validator.',
|
|
73
|
+
...bigintConfigHelper(DefaultL1ContractsConfig.minimumStake),
|
|
74
|
+
},
|
|
75
|
+
slashingQuorum: {
|
|
76
|
+
env: 'AZTEC_SLASHING_QUORUM',
|
|
77
|
+
description: 'The slashing quorum',
|
|
78
|
+
...numberConfigHelper(DefaultL1ContractsConfig.slashingQuorum),
|
|
79
|
+
},
|
|
80
|
+
slashingRoundSize: {
|
|
81
|
+
env: 'AZTEC_SLASHING_ROUND_SIZE',
|
|
82
|
+
description: 'The slashing round size',
|
|
83
|
+
...numberConfigHelper(DefaultL1ContractsConfig.slashingRoundSize),
|
|
84
|
+
},
|
|
85
|
+
governanceProposerQuorum: {
|
|
86
|
+
env: 'AZTEC_GOVERNANCE_PROPOSER_QUORUM',
|
|
87
|
+
description: 'The governance proposing quorum',
|
|
88
|
+
...numberConfigHelper(DefaultL1ContractsConfig.governanceProposerQuorum),
|
|
89
|
+
},
|
|
90
|
+
governanceProposerRoundSize: {
|
|
91
|
+
env: 'AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE',
|
|
92
|
+
description: 'The governance proposing round size',
|
|
93
|
+
...numberConfigHelper(DefaultL1ContractsConfig.governanceProposerRoundSize),
|
|
94
|
+
},
|
|
50
95
|
};
|
|
51
96
|
|
|
52
97
|
export function getL1ContractsConfigEnvVars(): L1ContractsConfig {
|
package/src/constants.ts
CHANGED
|
@@ -26,6 +26,8 @@ import {
|
|
|
26
26
|
RollupAbi,
|
|
27
27
|
RollupBytecode,
|
|
28
28
|
RollupLinkReferences,
|
|
29
|
+
SlashFactoryAbi,
|
|
30
|
+
SlashFactoryBytecode,
|
|
29
31
|
TestERC20Abi,
|
|
30
32
|
TestERC20Bytecode,
|
|
31
33
|
} from '@aztec/l1-artifacts';
|
|
@@ -53,7 +55,6 @@ import { type HDAccount, type PrivateKeyAccount, mnemonicToAccount, privateKeyTo
|
|
|
53
55
|
import { foundry } from 'viem/chains';
|
|
54
56
|
|
|
55
57
|
import { type L1ContractsConfig } from './config.js';
|
|
56
|
-
import { MINIMUM_STAKE } from './constants.js';
|
|
57
58
|
import { isAnvilTestChain } from './ethereum_chain.js';
|
|
58
59
|
import { type L1ContractAddresses } from './l1_contract_addresses.js';
|
|
59
60
|
import { L1TxUtils } from './l1_tx_utils.js';
|
|
@@ -156,6 +157,10 @@ export interface L1ContractArtifactsForDeployment {
|
|
|
156
157
|
* Governance contract artifacts.
|
|
157
158
|
*/
|
|
158
159
|
governance: ContractArtifacts;
|
|
160
|
+
/**
|
|
161
|
+
* SlashFactory contract artifacts.
|
|
162
|
+
*/
|
|
163
|
+
slashFactory: ContractArtifacts;
|
|
159
164
|
}
|
|
160
165
|
|
|
161
166
|
export const l1Artifacts: L1ContractArtifactsForDeployment = {
|
|
@@ -216,6 +221,10 @@ export const l1Artifacts: L1ContractArtifactsForDeployment = {
|
|
|
216
221
|
contractAbi: GovernanceAbi,
|
|
217
222
|
contractBytecode: GovernanceBytecode,
|
|
218
223
|
},
|
|
224
|
+
slashFactory: {
|
|
225
|
+
contractAbi: SlashFactoryAbi,
|
|
226
|
+
contractBytecode: SlashFactoryBytecode,
|
|
227
|
+
},
|
|
219
228
|
};
|
|
220
229
|
|
|
221
230
|
export interface DeployL1ContractsArgs extends L1ContractsConfig {
|
|
@@ -331,14 +340,10 @@ export const deployL1Contracts = async (
|
|
|
331
340
|
]);
|
|
332
341
|
logger.verbose(`Deployed Staking Asset at ${stakingAssetAddress}`);
|
|
333
342
|
|
|
334
|
-
// @todo #8084
|
|
335
|
-
// @note These numbers are just chosen to make testing simple.
|
|
336
|
-
const quorumSize = 6n;
|
|
337
|
-
const roundSize = 10n;
|
|
338
343
|
const governanceProposerAddress = await govDeployer.deploy(l1Artifacts.governanceProposer, [
|
|
339
344
|
registryAddress.toString(),
|
|
340
|
-
|
|
341
|
-
|
|
345
|
+
args.governanceProposerQuorum,
|
|
346
|
+
args.governanceProposerRoundSize,
|
|
342
347
|
]);
|
|
343
348
|
logger.verbose(`Deployed GovernanceProposer at ${governanceProposerAddress}`);
|
|
344
349
|
|
|
@@ -382,7 +387,9 @@ export const deployL1Contracts = async (
|
|
|
382
387
|
aztecEpochDuration: args.aztecEpochDuration,
|
|
383
388
|
targetCommitteeSize: args.aztecTargetCommitteeSize,
|
|
384
389
|
aztecEpochProofClaimWindowInL2Slots: args.aztecEpochProofClaimWindowInL2Slots,
|
|
385
|
-
minimumStake:
|
|
390
|
+
minimumStake: args.minimumStake,
|
|
391
|
+
slashingQuorum: args.slashingQuorum,
|
|
392
|
+
slashingRoundSize: args.slashingRoundSize,
|
|
386
393
|
};
|
|
387
394
|
const rollupArgs = [
|
|
388
395
|
feeJuicePortalAddress.toString(),
|
|
@@ -396,6 +403,9 @@ export const deployL1Contracts = async (
|
|
|
396
403
|
const rollupAddress = await deployer.deploy(l1Artifacts.rollup, rollupArgs);
|
|
397
404
|
logger.verbose(`Deployed Rollup at ${rollupAddress}`, rollupConfigArgs);
|
|
398
405
|
|
|
406
|
+
const slashFactoryAddress = await deployer.deploy(l1Artifacts.slashFactory, [rollupAddress.toString()]);
|
|
407
|
+
logger.verbose(`Deployed SlashFactory at ${slashFactoryAddress}`);
|
|
408
|
+
|
|
399
409
|
await deployer.waitForDeployments();
|
|
400
410
|
logger.verbose(`All core contracts have been deployed`);
|
|
401
411
|
|
|
@@ -434,7 +444,7 @@ export const deployL1Contracts = async (
|
|
|
434
444
|
|
|
435
445
|
if (args.initialValidators && args.initialValidators.length > 0) {
|
|
436
446
|
// Mint tokens, approve them, use cheat code to initialise validator set without setting up the epoch.
|
|
437
|
-
const stakeNeeded =
|
|
447
|
+
const stakeNeeded = args.minimumStake * BigInt(args.initialValidators.length);
|
|
438
448
|
await Promise.all(
|
|
439
449
|
[
|
|
440
450
|
await stakingAsset.write.mint([walletClient.account.address, stakeNeeded], {} as any),
|
|
@@ -447,7 +457,7 @@ export const deployL1Contracts = async (
|
|
|
447
457
|
attester: v.toString(),
|
|
448
458
|
proposer: v.toString(),
|
|
449
459
|
withdrawer: v.toString(),
|
|
450
|
-
amount:
|
|
460
|
+
amount: args.minimumStake,
|
|
451
461
|
})),
|
|
452
462
|
]);
|
|
453
463
|
txHashes.push(initiateValidatorSetTxHash);
|
|
@@ -560,6 +570,7 @@ export const deployL1Contracts = async (
|
|
|
560
570
|
rewardDistributorAddress,
|
|
561
571
|
governanceProposerAddress,
|
|
562
572
|
governanceAddress,
|
|
573
|
+
slashFactoryAddress,
|
|
563
574
|
};
|
|
564
575
|
|
|
565
576
|
logger.info(`Aztec L1 contracts initialized`, l1Contracts);
|
|
@@ -751,7 +762,7 @@ export async function deployL1Contract(
|
|
|
751
762
|
} else {
|
|
752
763
|
// Regular deployment path
|
|
753
764
|
const deployData = encodeDeployData({ abi, bytecode, args });
|
|
754
|
-
const receipt = await l1TxUtils.sendAndMonitorTransaction({
|
|
765
|
+
const { receipt } = await l1TxUtils.sendAndMonitorTransaction({
|
|
755
766
|
to: null,
|
|
756
767
|
data: deployData,
|
|
757
768
|
});
|
|
@@ -21,6 +21,7 @@ export const L1ContractsNames = [
|
|
|
21
21
|
'governanceProposerAddress',
|
|
22
22
|
'governanceAddress',
|
|
23
23
|
'stakingAssetAddress',
|
|
24
|
+
'slashFactoryAddress',
|
|
24
25
|
] as const;
|
|
25
26
|
|
|
26
27
|
/** Provides the directory of current L1 contract addresses */
|
|
@@ -40,6 +41,7 @@ export const L1ContractAddressesSchema = z.object({
|
|
|
40
41
|
rewardDistributorAddress: schemas.EthAddress,
|
|
41
42
|
governanceProposerAddress: schemas.EthAddress,
|
|
42
43
|
governanceAddress: schemas.EthAddress,
|
|
44
|
+
slashFactoryAddress: schemas.EthAddress,
|
|
43
45
|
}) satisfies ZodFor<L1ContractAddresses>;
|
|
44
46
|
|
|
45
47
|
const parseEnv = (val: string) => EthAddress.fromString(val);
|
|
@@ -100,4 +102,9 @@ export const l1ContractAddressesMapping: ConfigMappingsType<L1ContractAddresses>
|
|
|
100
102
|
description: 'The deployed L1 governance contract address',
|
|
101
103
|
parseEnv,
|
|
102
104
|
},
|
|
105
|
+
slashFactoryAddress: {
|
|
106
|
+
env: 'SLASH_FACTORY_CONTRACT_ADDRESS',
|
|
107
|
+
description: 'The deployed L1 slashFactory contract address',
|
|
108
|
+
parseEnv,
|
|
109
|
+
},
|
|
103
110
|
};
|