@aztec/ethereum 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f
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 +16 -2
- package/dest/client.d.ts.map +1 -1
- package/dest/client.js +27 -7
- package/dest/config.d.ts +24 -32
- package/dest/config.d.ts.map +1 -1
- package/dest/config.js +63 -62
- package/dest/contracts/chain_state_override.d.ts +78 -0
- package/dest/contracts/chain_state_override.d.ts.map +1 -0
- package/dest/contracts/chain_state_override.js +137 -0
- package/dest/contracts/fee_asset_handler.d.ts +6 -5
- package/dest/contracts/fee_asset_handler.d.ts.map +1 -1
- package/dest/contracts/fee_asset_handler.js +11 -9
- package/dest/contracts/fee_asset_price_oracle.d.ts +105 -0
- package/dest/contracts/fee_asset_price_oracle.d.ts.map +1 -0
- package/dest/contracts/fee_asset_price_oracle.js +656 -0
- package/dest/contracts/governance.d.ts +110 -33
- package/dest/contracts/governance.d.ts.map +1 -1
- package/dest/contracts/governance.js +207 -16
- package/dest/contracts/governance_proposer.d.ts +33 -1
- package/dest/contracts/governance_proposer.d.ts.map +1 -1
- package/dest/contracts/governance_proposer.js +438 -10
- package/dest/contracts/inbox.d.ts +22 -1
- package/dest/contracts/inbox.d.ts.map +1 -1
- package/dest/contracts/inbox.js +42 -2
- package/dest/contracts/index.d.ts +6 -3
- package/dest/contracts/index.d.ts.map +1 -1
- package/dest/contracts/index.js +5 -2
- package/dest/contracts/log.d.ts +13 -0
- package/dest/contracts/log.d.ts.map +1 -0
- package/dest/contracts/log.js +1 -0
- package/dest/contracts/multicall.d.ts +127 -12
- package/dest/contracts/multicall.d.ts.map +1 -1
- package/dest/contracts/multicall.js +201 -93
- package/dest/contracts/outbox.d.ts +58 -0
- package/dest/contracts/outbox.d.ts.map +1 -0
- package/dest/contracts/outbox.js +109 -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 +5409 -115
- package/dest/contracts/rollup.d.ts.map +1 -1
- package/dest/contracts/rollup.js +1027 -189
- package/dest/contracts/{tally_slashing_proposer.d.ts → slashing_proposer.d.ts} +3 -4
- package/dest/contracts/slashing_proposer.d.ts.map +1 -0
- package/dest/contracts/{tally_slashing_proposer.js → slashing_proposer.js} +18 -13
- package/dest/deploy_aztec_l1_contracts.d.ts +20 -9
- package/dest/deploy_aztec_l1_contracts.d.ts.map +1 -1
- package/dest/deploy_aztec_l1_contracts.js +113 -37
- package/dest/deploy_l1_contract.js +3 -3
- package/dest/generated/l1-contracts-defaults.d.ts +30 -0
- package/dest/generated/l1-contracts-defaults.d.ts.map +1 -0
- package/dest/generated/l1-contracts-defaults.js +30 -0
- package/dest/l1_artifacts.d.ts +18360 -16454
- package/dest/l1_artifacts.d.ts.map +1 -1
- package/dest/l1_artifacts.js +9 -24
- package/dest/l1_contract_addresses.d.ts +61 -65
- package/dest/l1_contract_addresses.d.ts.map +1 -1
- package/dest/l1_contract_addresses.js +101 -82
- package/dest/l1_reader.d.ts +5 -5
- package/dest/l1_reader.d.ts.map +1 -1
- package/dest/l1_reader.js +9 -7
- 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/constants.d.ts +1 -1
- package/dest/l1_tx_utils/constants.js +2 -2
- 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/index.d.ts +3 -2
- package/dest/l1_tx_utils/fee-strategies/index.d.ts.map +1 -1
- package/dest/l1_tx_utils/fee-strategies/index.js +2 -1
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts +2 -12
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.d.ts.map +1 -1
- package/dest/l1_tx_utils/fee-strategies/p75_competitive.js +36 -18
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts +2 -11
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.d.ts.map +1 -1
- package/dest/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.js +37 -19
- package/dest/l1_tx_utils/fee-strategies/types.d.ts +14 -27
- package/dest/l1_tx_utils/fee-strategies/types.d.ts.map +1 -1
- package/dest/l1_tx_utils/fee-strategies/types.js +0 -21
- 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_fee_analyzer.d.ts +2 -2
- package/dest/l1_tx_utils/l1_fee_analyzer.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_fee_analyzer.js +3 -3
- package/dest/l1_tx_utils/l1_tx_utils.d.ts +26 -7
- package/dest/l1_tx_utils/l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/l1_tx_utils.js +101 -66
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts +1 -5
- package/dest/l1_tx_utils/readonly_l1_tx_utils.d.ts.map +1 -1
- package/dest/l1_tx_utils/readonly_l1_tx_utils.js +25 -58
- package/dest/l1_tx_utils/tx_delayer.d.ts +58 -0
- package/dest/l1_tx_utils/tx_delayer.d.ts.map +1 -0
- package/dest/{test → l1_tx_utils}/tx_delayer.js +67 -37
- package/dest/publisher_manager.d.ts +21 -6
- package/dest/publisher_manager.d.ts.map +1 -1
- package/dest/publisher_manager.js +81 -7
- package/dest/queries.d.ts +14 -3
- package/dest/queries.d.ts.map +1 -1
- package/dest/queries.js +74 -7
- package/dest/test/chain_monitor.d.ts +23 -3
- package/dest/test/chain_monitor.d.ts.map +1 -1
- package/dest/test/chain_monitor.js +39 -4
- package/dest/test/eth_cheat_codes.d.ts +24 -4
- package/dest/test/eth_cheat_codes.d.ts.map +1 -1
- package/dest/test/eth_cheat_codes.js +17 -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/rollup_cheat_codes.d.ts +34 -3
- package/dest/test/rollup_cheat_codes.d.ts.map +1 -1
- package/dest/test/rollup_cheat_codes.js +75 -6
- 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 +9 -1
- package/dest/utils.d.ts.map +1 -1
- package/dest/utils.js +81 -12
- package/package.json +9 -10
- package/src/client.ts +28 -2
- package/src/config.ts +81 -63
- package/src/contracts/README.md +157 -0
- package/src/contracts/chain_state_override.ts +200 -0
- package/src/contracts/fee_asset_handler.ts +10 -7
- package/src/contracts/fee_asset_price_oracle.ts +285 -0
- package/src/contracts/governance.ts +279 -13
- package/src/contracts/governance_proposer.ts +58 -2
- package/src/contracts/inbox.ts +62 -2
- package/src/contracts/index.ts +5 -2
- package/src/contracts/log.ts +13 -0
- package/src/contracts/multicall.ts +243 -102
- package/src/contracts/outbox.ts +128 -0
- package/src/contracts/registry.ts +31 -1
- package/src/contracts/rollup.ts +728 -148
- package/src/contracts/{tally_slashing_proposer.ts → slashing_proposer.ts} +16 -14
- package/src/deploy_aztec_l1_contracts.ts +137 -47
- package/src/deploy_l1_contract.ts +3 -3
- package/src/generated/l1-contracts-defaults.ts +32 -0
- package/src/l1_artifacts.ts +12 -35
- package/src/l1_contract_addresses.ts +120 -94
- package/src/l1_reader.ts +17 -10
- package/src/l1_tx_utils/config.ts +20 -0
- package/src/l1_tx_utils/constants.ts +2 -2
- package/src/l1_tx_utils/factory.ts +31 -31
- package/src/l1_tx_utils/fee-strategies/index.ts +1 -1
- package/src/l1_tx_utils/fee-strategies/p75_competitive.ts +46 -42
- package/src/l1_tx_utils/fee-strategies/p75_competitive_blob_txs_only.ts +49 -45
- package/src/l1_tx_utils/fee-strategies/types.ts +14 -46
- 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_fee_analyzer.ts +2 -3
- package/src/l1_tx_utils/l1_tx_utils.ts +99 -48
- package/src/l1_tx_utils/readonly_l1_tx_utils.ts +31 -66
- package/src/{test → l1_tx_utils}/tx_delayer.ts +93 -56
- package/src/publisher_manager.ts +107 -10
- package/src/queries.ts +81 -7
- package/src/test/chain_monitor.ts +66 -4
- package/src/test/eth_cheat_codes.ts +16 -4
- package/src/test/index.ts +0 -2
- package/src/test/rollup_cheat_codes.ts +82 -6
- package/src/test/start_anvil.ts +177 -29
- package/src/test/upgrade_utils.ts +2 -2
- package/src/utils.ts +88 -14
- package/dest/contracts/empire_slashing_proposer.d.ts +0 -67
- package/dest/contracts/empire_slashing_proposer.d.ts.map +0 -1
- package/dest/contracts/empire_slashing_proposer.js +0 -209
- package/dest/contracts/tally_slashing_proposer.d.ts.map +0 -1
- 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/contracts/empire_slashing_proposer.ts +0 -270
- package/src/l1_tx_utils/l1_tx_utils_with_blobs.ts +0 -77
- package/src/test/delayed_tx_utils.ts +0 -52
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { L1TxRequest } from '@aztec/ethereum/l1-tx-utils';
|
|
2
2
|
import type { ViemClient } from '@aztec/ethereum/types';
|
|
3
|
-
import { tryExtractEvent } from '@aztec/ethereum/utils';
|
|
3
|
+
import { mergeAbis, tryExtractEvent } from '@aztec/ethereum/utils';
|
|
4
4
|
import { SlotNumber } from '@aztec/foundation/branded-types';
|
|
5
5
|
import { Buffer32 } from '@aztec/foundation/buffer';
|
|
6
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
7
7
|
import { Signature } from '@aztec/foundation/eth-signature';
|
|
8
8
|
import { hexToBuffer } from '@aztec/foundation/string';
|
|
9
|
-
import {
|
|
9
|
+
import { SlasherAbi } from '@aztec/l1-artifacts/SlasherAbi';
|
|
10
|
+
import { SlashingProposerAbi } from '@aztec/l1-artifacts/SlashingProposerAbi';
|
|
10
11
|
|
|
11
12
|
import {
|
|
12
13
|
type GetContractReturnType,
|
|
@@ -18,13 +19,11 @@ import {
|
|
|
18
19
|
} from 'viem';
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
|
-
* Wrapper around the
|
|
22
|
+
* Wrapper around the SlashingProposer contract that provides
|
|
22
23
|
* a TypeScript interface for interacting with the consensus-based slashing system.
|
|
23
24
|
*/
|
|
24
|
-
export class
|
|
25
|
-
private readonly contract: GetContractReturnType<typeof
|
|
26
|
-
|
|
27
|
-
public readonly type = 'tally' as const;
|
|
25
|
+
export class SlashingProposerContract {
|
|
26
|
+
private readonly contract: GetContractReturnType<typeof SlashingProposerAbi, ViemClient>;
|
|
28
27
|
|
|
29
28
|
constructor(
|
|
30
29
|
public readonly client: ViemClient,
|
|
@@ -32,7 +31,7 @@ export class TallySlashingProposerContract {
|
|
|
32
31
|
) {
|
|
33
32
|
this.contract = getContract({
|
|
34
33
|
address: typeof address === 'string' ? address : address.toString(),
|
|
35
|
-
abi:
|
|
34
|
+
abi: SlashingProposerAbi,
|
|
36
35
|
client,
|
|
37
36
|
});
|
|
38
37
|
}
|
|
@@ -135,12 +134,12 @@ export class TallySlashingProposerContract {
|
|
|
135
134
|
|
|
136
135
|
/** Tries to extract a VoteCast event from the given logs. */
|
|
137
136
|
public tryExtractVoteCastEvent(logs: Log[]) {
|
|
138
|
-
return tryExtractEvent(logs, this.address.toString(),
|
|
137
|
+
return tryExtractEvent(logs, this.address.toString(), SlashingProposerAbi, 'VoteCast');
|
|
139
138
|
}
|
|
140
139
|
|
|
141
140
|
/** Tries to extract a RoundExecuted event from the given logs. */
|
|
142
141
|
public tryExtractRoundExecutedEvent(logs: Log[]) {
|
|
143
|
-
return tryExtractEvent(logs, this.address.toString(),
|
|
142
|
+
return tryExtractEvent(logs, this.address.toString(), SlashingProposerAbi, 'RoundExecuted');
|
|
144
143
|
}
|
|
145
144
|
|
|
146
145
|
/**
|
|
@@ -160,8 +159,9 @@ export class TallySlashingProposerContract {
|
|
|
160
159
|
|
|
161
160
|
return {
|
|
162
161
|
to: this.contract.address,
|
|
162
|
+
abi: SlashingProposerAbi,
|
|
163
163
|
data: encodeFunctionData({
|
|
164
|
-
abi:
|
|
164
|
+
abi: SlashingProposerAbi,
|
|
165
165
|
functionName: 'vote',
|
|
166
166
|
args: [votes, signature.toViemSignature()],
|
|
167
167
|
}),
|
|
@@ -171,7 +171,7 @@ export class TallySlashingProposerContract {
|
|
|
171
171
|
/** Returns the typed data definition to EIP712-sign for voting */
|
|
172
172
|
public buildVoteTypedData(votes: Hex, slot: SlotNumber): TypedDataDefinition {
|
|
173
173
|
const domain = {
|
|
174
|
-
name: '
|
|
174
|
+
name: 'SlashingProposer',
|
|
175
175
|
version: '1',
|
|
176
176
|
chainId: this.client.chain.id,
|
|
177
177
|
verifyingContract: this.contract.address,
|
|
@@ -207,8 +207,9 @@ export class TallySlashingProposerContract {
|
|
|
207
207
|
public buildVoteRequestWithSignature(votes: Hex, signature: { v: number; r: Hex; s: Hex }): L1TxRequest {
|
|
208
208
|
return {
|
|
209
209
|
to: this.contract.address,
|
|
210
|
+
abi: SlashingProposerAbi,
|
|
210
211
|
data: encodeFunctionData({
|
|
211
|
-
abi:
|
|
212
|
+
abi: SlashingProposerAbi,
|
|
212
213
|
functionName: 'vote',
|
|
213
214
|
args: [votes, signature],
|
|
214
215
|
}),
|
|
@@ -224,8 +225,9 @@ export class TallySlashingProposerContract {
|
|
|
224
225
|
public buildExecuteRoundRequest(round: bigint, committees: EthAddress[][]): L1TxRequest {
|
|
225
226
|
return {
|
|
226
227
|
to: this.contract.address,
|
|
228
|
+
abi: mergeAbis([SlashingProposerAbi, SlasherAbi]),
|
|
227
229
|
data: encodeFunctionData({
|
|
228
|
-
abi:
|
|
230
|
+
abi: SlashingProposerAbi,
|
|
229
231
|
functionName: 'executeRound',
|
|
230
232
|
args: [round, committees.map(c => c.map(addr => addr.toString()))],
|
|
231
233
|
}),
|
|
@@ -10,10 +10,12 @@ import { fileURLToPath } from '@aztec/foundation/url';
|
|
|
10
10
|
import { bn254 } from '@noble/curves/bn254';
|
|
11
11
|
import type { Abi, Narrow } from 'abitype';
|
|
12
12
|
import { spawn } from 'child_process';
|
|
13
|
-
import {
|
|
13
|
+
import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'fs';
|
|
14
|
+
import { tmpdir } from 'os';
|
|
15
|
+
import { dirname, join, resolve } from 'path';
|
|
14
16
|
import readline from 'readline';
|
|
15
17
|
import type { Hex } from 'viem';
|
|
16
|
-
import {
|
|
18
|
+
import { mainnet, sepolia } from 'viem/chains';
|
|
17
19
|
|
|
18
20
|
import { createEthereumChain, isAnvilTestChain } from './chain.js';
|
|
19
21
|
import { createExtendedL1Client } from './client.js';
|
|
@@ -21,7 +23,6 @@ import type { L1ContractsConfig } from './config.js';
|
|
|
21
23
|
import { deployMulticall3 } from './contracts/multicall.js';
|
|
22
24
|
import { RollupContract } from './contracts/rollup.js';
|
|
23
25
|
import type { L1ContractAddresses } from './l1_contract_addresses.js';
|
|
24
|
-
import type { L1TxUtilsConfig } from './l1_tx_utils/config.js';
|
|
25
26
|
import type { ExtendedViemWalletClient } from './types.js';
|
|
26
27
|
|
|
27
28
|
const logger = createLogger('ethereum:deploy_aztec_l1_contracts');
|
|
@@ -29,9 +30,9 @@ const logger = createLogger('ethereum:deploy_aztec_l1_contracts');
|
|
|
29
30
|
const JSON_DEPLOY_RESULT_PREFIX = 'JSON DEPLOY RESULT:';
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
|
-
* Runs a process
|
|
33
|
-
*
|
|
34
|
-
*
|
|
33
|
+
* Runs a process and parses JSON deploy results from stdout.
|
|
34
|
+
* Lines starting with JSON_DEPLOY_RESULT_PREFIX are parsed and returned.
|
|
35
|
+
* All other stdout goes to logger.info, stderr goes to logger.warn.
|
|
35
36
|
*/
|
|
36
37
|
function runProcess<T>(
|
|
37
38
|
command: string,
|
|
@@ -47,26 +48,41 @@ function runProcess<T>(
|
|
|
47
48
|
});
|
|
48
49
|
|
|
49
50
|
let result: T | undefined;
|
|
51
|
+
let parseError: Error | undefined;
|
|
52
|
+
let settled = false;
|
|
50
53
|
|
|
51
54
|
readline.createInterface({ input: proc.stdout }).on('line', line => {
|
|
52
55
|
const trimmedLine = line.trim();
|
|
53
56
|
if (trimmedLine.startsWith(JSON_DEPLOY_RESULT_PREFIX)) {
|
|
54
57
|
const jsonStr = trimmedLine.slice(JSON_DEPLOY_RESULT_PREFIX.length).trim();
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
try {
|
|
59
|
+
result = JSON.parse(jsonStr);
|
|
60
|
+
} catch {
|
|
61
|
+
parseError = new Error(`Failed to parse deploy result JSON: ${jsonStr.slice(0, 200)}`);
|
|
62
|
+
}
|
|
57
63
|
} else {
|
|
58
64
|
logger.info(line);
|
|
59
65
|
}
|
|
60
66
|
});
|
|
61
|
-
readline.createInterface({ input: proc.stderr }).on('line', logger.
|
|
67
|
+
readline.createInterface({ input: proc.stderr }).on('line', logger.warn.bind(logger));
|
|
62
68
|
|
|
63
69
|
proc.on('error', error => {
|
|
70
|
+
if (settled) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
settled = true;
|
|
64
74
|
reject(new Error(`Failed to spawn ${command}: ${error.message}`));
|
|
65
75
|
});
|
|
66
76
|
|
|
67
77
|
proc.on('close', code => {
|
|
78
|
+
if (settled) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
settled = true;
|
|
68
82
|
if (code !== 0) {
|
|
69
|
-
reject(new Error(`${command} exited with code ${code}
|
|
83
|
+
reject(new Error(`${command} exited with code ${code}`));
|
|
84
|
+
} else if (parseError) {
|
|
85
|
+
reject(parseError);
|
|
70
86
|
} else {
|
|
71
87
|
resolve(result);
|
|
72
88
|
}
|
|
@@ -107,17 +123,80 @@ export interface ValidatorJson {
|
|
|
107
123
|
}
|
|
108
124
|
|
|
109
125
|
/**
|
|
110
|
-
* Gets the path to the l1-contracts directory.
|
|
126
|
+
* Gets the path to the l1-contracts foundry artifacts directory.
|
|
127
|
+
* These are copied from l1-contracts to yarn-project/l1-artifacts/l1-contracts
|
|
128
|
+
* during build to make yarn-project self-contained.
|
|
111
129
|
*/
|
|
112
130
|
export function getL1ContractsPath(): string {
|
|
113
|
-
// Try to find l1-contracts relative to this file
|
|
114
131
|
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const l1ContractsPath = resolve(currentDir, '..', '..', '..', 'l1-contracts');
|
|
132
|
+
// Go up from yarn-project/ethereum/dest to yarn-project, then to l1-artifacts/l1-contracts
|
|
133
|
+
const l1ContractsPath = resolve(currentDir, '..', '..', 'l1-artifacts', 'l1-contracts');
|
|
118
134
|
return l1ContractsPath;
|
|
119
135
|
}
|
|
120
136
|
|
|
137
|
+
// Cached deployment directory
|
|
138
|
+
let preparedDeployDir: string | undefined;
|
|
139
|
+
|
|
140
|
+
function cleanupDeployDir() {
|
|
141
|
+
if (preparedDeployDir) {
|
|
142
|
+
try {
|
|
143
|
+
rmSync(preparedDeployDir, { recursive: true, force: true });
|
|
144
|
+
} catch {
|
|
145
|
+
// ignore cleanup errors
|
|
146
|
+
}
|
|
147
|
+
preparedDeployDir = undefined;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Prepares a temp directory for forge deployment.
|
|
153
|
+
* Copies all artifacts with preserved timestamps (required for forge cache validity).
|
|
154
|
+
* A fresh broadcast/ directory is created for deployment outputs.
|
|
155
|
+
*/
|
|
156
|
+
export function prepareL1ContractsForDeployment(): string {
|
|
157
|
+
if (preparedDeployDir && existsSync(preparedDeployDir)) {
|
|
158
|
+
logger.verbose(`Using cached deployment directory: ${preparedDeployDir}`);
|
|
159
|
+
return preparedDeployDir;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const basePath = getL1ContractsPath();
|
|
163
|
+
logger.verbose(`Preparing L1 contracts from: ${basePath}`);
|
|
164
|
+
const tempDir = mkdtempSync(join(tmpdir(), '.foundry-deploy-'));
|
|
165
|
+
logger.verbose(`Created temp directory for deployment: ${tempDir}`);
|
|
166
|
+
preparedDeployDir = tempDir;
|
|
167
|
+
process.on('exit', cleanupDeployDir);
|
|
168
|
+
|
|
169
|
+
// Copy all dirs with preserved timestamps (required for forge cache validity)
|
|
170
|
+
const copyOpts = { recursive: true, preserveTimestamps: true };
|
|
171
|
+
cpSync(join(basePath, 'out'), join(tempDir, 'out'), copyOpts);
|
|
172
|
+
cpSync(join(basePath, 'lib'), join(tempDir, 'lib'), copyOpts);
|
|
173
|
+
cpSync(join(basePath, 'cache'), join(tempDir, 'cache'), copyOpts);
|
|
174
|
+
cpSync(join(basePath, 'src'), join(tempDir, 'src'), copyOpts);
|
|
175
|
+
cpSync(join(basePath, 'script'), join(tempDir, 'script'), copyOpts);
|
|
176
|
+
cpSync(join(basePath, 'generated'), join(tempDir, 'generated'), copyOpts);
|
|
177
|
+
// Kludge: copy test/ to appease forge cache which references test/shouting.t.sol
|
|
178
|
+
cpSync(join(basePath, 'test'), join(tempDir, 'test'), copyOpts);
|
|
179
|
+
cpSync(join(basePath, 'foundry.lock'), join(tempDir, 'foundry.lock'));
|
|
180
|
+
|
|
181
|
+
// Update foundry.toml to use absolute path to solc binary (avoids copying to noexec tmpfs)
|
|
182
|
+
const foundryTomlPath = join(basePath, 'foundry.toml');
|
|
183
|
+
let foundryToml = readFileSync(foundryTomlPath, 'utf-8');
|
|
184
|
+
const solcPathMatch = foundryToml.match(/solc\s*=\s*"\.\/solc-([^"]+)"/);
|
|
185
|
+
// Did we find a hardcoded solc path that we need to make absolute?
|
|
186
|
+
// This code path happens in CI currently as we bundle solc there to avoid race conditions when
|
|
187
|
+
// downloading solc.
|
|
188
|
+
if (solcPathMatch) {
|
|
189
|
+
const solcVersion = solcPathMatch[1];
|
|
190
|
+
const absoluteSolcPath = join(basePath, `solc-${solcVersion}`);
|
|
191
|
+
foundryToml = foundryToml.replace(/solc\s*=\s*"\.\/solc-[^"]+"/, `solc = "${absoluteSolcPath}"`);
|
|
192
|
+
logger.verbose(`Updated solc path in foundry.toml to: ${absoluteSolcPath}`);
|
|
193
|
+
}
|
|
194
|
+
writeFileSync(join(tempDir, 'foundry.toml'), foundryToml);
|
|
195
|
+
|
|
196
|
+
mkdirSync(join(tempDir, 'broadcast'));
|
|
197
|
+
return tempDir;
|
|
198
|
+
}
|
|
199
|
+
|
|
121
200
|
/**
|
|
122
201
|
* Computes the validator data for passing to Solidity.
|
|
123
202
|
* Only computes the G2 public key (which requires scalar multiplication on G2, not available in EVM).
|
|
@@ -151,7 +230,6 @@ export function computeValidatorData(operator: Operator): ValidatorJson {
|
|
|
151
230
|
export interface RollupUpgradeAddresses {
|
|
152
231
|
rollupAddress: string;
|
|
153
232
|
verifierAddress: string;
|
|
154
|
-
slashFactoryAddress: string;
|
|
155
233
|
inboxAddress: string;
|
|
156
234
|
outboxAddress: string;
|
|
157
235
|
feeJuicePortalAddress: string;
|
|
@@ -164,7 +242,6 @@ export interface RollupUpgradeAddresses {
|
|
|
164
242
|
export interface ForgeRollupUpgradeResult {
|
|
165
243
|
rollupAddress: Hex;
|
|
166
244
|
verifierAddress: Hex;
|
|
167
|
-
slashFactoryAddress: Hex;
|
|
168
245
|
inboxAddress: Hex;
|
|
169
246
|
outboxAddress: Hex;
|
|
170
247
|
feeJuicePortalAddress: Hex;
|
|
@@ -211,7 +288,6 @@ export async function deployAztecL1Contracts(
|
|
|
211
288
|
'Initial validator funding requires minting tokens, which is not possible with an external token.',
|
|
212
289
|
);
|
|
213
290
|
}
|
|
214
|
-
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
215
291
|
const chain = createEthereumChain([rpcUrl], chainId);
|
|
216
292
|
|
|
217
293
|
const l1Client = createExtendedL1Client([rpcUrl], privateKey, chain.chainInfo);
|
|
@@ -240,8 +316,8 @@ export async function deployAztecL1Contracts(
|
|
|
240
316
|
}
|
|
241
317
|
}
|
|
242
318
|
|
|
243
|
-
//
|
|
244
|
-
const l1ContractsPath =
|
|
319
|
+
// Use foundry-artifacts from l1-artifacts package
|
|
320
|
+
const l1ContractsPath = prepareL1ContractsForDeployment();
|
|
245
321
|
|
|
246
322
|
const FORGE_SCRIPT = 'script/deploy/DeployAztecL1Contracts.s.sol';
|
|
247
323
|
await maybeForgeForceProductionBuild(l1ContractsPath, FORGE_SCRIPT, chainId);
|
|
@@ -257,11 +333,8 @@ export async function deployAztecL1Contracts(
|
|
|
257
333
|
);
|
|
258
334
|
}
|
|
259
335
|
|
|
260
|
-
|
|
261
|
-
const MAGIC_ANVIL_BATCH_SIZE = 12;
|
|
262
|
-
// Anvil seems to stall with unbounded batch size. Otherwise no max batch size is desirable.
|
|
336
|
+
const scriptPath = join(getL1ContractsPath(), 'scripts', 'forge_broadcast.js');
|
|
263
337
|
const forgeArgs = [
|
|
264
|
-
'script',
|
|
265
338
|
FORGE_SCRIPT,
|
|
266
339
|
'--sig',
|
|
267
340
|
'run()',
|
|
@@ -269,8 +342,6 @@ export async function deployAztecL1Contracts(
|
|
|
269
342
|
privateKey,
|
|
270
343
|
'--rpc-url',
|
|
271
344
|
rpcUrl,
|
|
272
|
-
'--broadcast',
|
|
273
|
-
...(chainId === foundry.id ? ['--batch-size', MAGIC_ANVIL_BATCH_SIZE.toString()] : []),
|
|
274
345
|
...(shouldVerify ? ['--verify'] : []),
|
|
275
346
|
];
|
|
276
347
|
const forgeEnv = {
|
|
@@ -279,7 +350,12 @@ export async function deployAztecL1Contracts(
|
|
|
279
350
|
FOUNDRY_PROFILE: chainId === mainnet.id ? 'production' : undefined,
|
|
280
351
|
...getDeployAztecL1ContractsEnvVars(args),
|
|
281
352
|
};
|
|
282
|
-
const result = await runProcess<ForgeL1ContractsDeployResult>(
|
|
353
|
+
const result = await runProcess<ForgeL1ContractsDeployResult>(
|
|
354
|
+
process.execPath,
|
|
355
|
+
[scriptPath, ...forgeArgs],
|
|
356
|
+
forgeEnv,
|
|
357
|
+
l1ContractsPath,
|
|
358
|
+
);
|
|
283
359
|
if (!result) {
|
|
284
360
|
throw new Error('Forge script did not output deployment result');
|
|
285
361
|
}
|
|
@@ -325,7 +401,6 @@ export async function deployAztecL1Contracts(
|
|
|
325
401
|
governanceProposerAddress: EthAddress.fromString(result.governanceProposerAddress),
|
|
326
402
|
governanceAddress: EthAddress.fromString(result.governanceAddress),
|
|
327
403
|
stakingAssetAddress: EthAddress.fromString(result.stakingAssetAddress),
|
|
328
|
-
slashFactoryAddress: result.slashFactoryAddress ? EthAddress.fromString(result.slashFactoryAddress) : undefined,
|
|
329
404
|
feeAssetHandlerAddress: result.feeAssetHandlerAddress
|
|
330
405
|
? EthAddress.fromString(result.feeAssetHandlerAddress)
|
|
331
406
|
: undefined,
|
|
@@ -412,7 +487,25 @@ export type VerificationRecord = {
|
|
|
412
487
|
libraries: VerificationLibraryEntry[];
|
|
413
488
|
};
|
|
414
489
|
|
|
415
|
-
export interface DeployAztecL1ContractsArgs
|
|
490
|
+
export interface DeployAztecL1ContractsArgs
|
|
491
|
+
extends Omit<
|
|
492
|
+
L1ContractsConfig,
|
|
493
|
+
| 'gasLimitBufferPercentage'
|
|
494
|
+
| 'maxGwei'
|
|
495
|
+
| 'maxBlobGwei'
|
|
496
|
+
| 'priorityFeeBumpPercentage'
|
|
497
|
+
| 'priorityFeeRetryBumpPercentage'
|
|
498
|
+
| 'minimumPriorityFeePerGas'
|
|
499
|
+
| 'maxSpeedUpAttempts'
|
|
500
|
+
| 'checkIntervalMs'
|
|
501
|
+
| 'stallTimeMs'
|
|
502
|
+
| 'txTimeoutMs'
|
|
503
|
+
| 'cancelTxOnTimeout'
|
|
504
|
+
| 'txCancellationFinalTimeoutMs'
|
|
505
|
+
| 'txUnseenConsideredDroppedMs'
|
|
506
|
+
| 'enableDelayer'
|
|
507
|
+
| 'txDelayerMaxInclusionTimeIntoSlot'
|
|
508
|
+
> {
|
|
416
509
|
/** The vk tree root. */
|
|
417
510
|
vkTreeRoot: Fr;
|
|
418
511
|
/** The hash of the protocol contracts. */
|
|
@@ -447,6 +540,7 @@ export function getDeployAztecL1ContractsEnvVars(args: DeployAztecL1ContractsArg
|
|
|
447
540
|
AZTEC_EJECTION_THRESHOLD: args.ejectionThreshold?.toString(),
|
|
448
541
|
AZTEC_GOVERNANCE_PROPOSER_ROUND_SIZE: args.governanceProposerRoundSize?.toString(),
|
|
449
542
|
AZTEC_GOVERNANCE_PROPOSER_QUORUM: args.governanceProposerQuorum?.toString(),
|
|
543
|
+
AZTEC_GOVERNANCE_VOTING_DURATION: args.governanceVotingDuration?.toString(),
|
|
450
544
|
ZKPASSPORT_DOMAIN: args.zkPassportArgs?.zkPassportDomain,
|
|
451
545
|
ZKPASSPORT_SCOPE: args.zkPassportArgs?.zkPassportScope,
|
|
452
546
|
} as const;
|
|
@@ -477,15 +571,18 @@ export function getDeployRollupForUpgradeEnvVars(
|
|
|
477
571
|
AZTEC_TARGET_COMMITTEE_SIZE: args.aztecTargetCommitteeSize.toString(),
|
|
478
572
|
AZTEC_LAG_IN_EPOCHS_FOR_VALIDATOR_SET: args.lagInEpochsForValidatorSet.toString(),
|
|
479
573
|
AZTEC_LAG_IN_EPOCHS_FOR_RANDAO: args.lagInEpochsForRandao.toString(),
|
|
574
|
+
AZTEC_INBOX_LAG: args.inboxLag?.toString(),
|
|
480
575
|
AZTEC_PROOF_SUBMISSION_EPOCHS: args.aztecProofSubmissionEpochs.toString(),
|
|
481
576
|
AZTEC_LOCAL_EJECTION_THRESHOLD: args.localEjectionThreshold.toString(),
|
|
482
577
|
AZTEC_SLASHING_LIFETIME_IN_ROUNDS: args.slashingLifetimeInRounds.toString(),
|
|
578
|
+
AZTEC_SLASHING_EXECUTION_DELAY_IN_ROUNDS: args.slashingExecutionDelayInRounds.toString(),
|
|
483
579
|
AZTEC_SLASHING_VETOER: args.slashingVetoer.toString(),
|
|
484
580
|
AZTEC_SLASHING_DISABLE_DURATION: args.slashingDisableDuration.toString(),
|
|
485
581
|
AZTEC_MANA_TARGET: args.manaTarget.toString(),
|
|
486
582
|
AZTEC_EXIT_DELAY_SECONDS: args.exitDelaySeconds.toString(),
|
|
487
583
|
AZTEC_PROVING_COST_PER_MANA: args.provingCostPerMana.toString(),
|
|
488
|
-
|
|
584
|
+
AZTEC_INITIAL_ETH_PER_FEE_ASSET: args.initialEthPerFeeAsset.toString(),
|
|
585
|
+
AZTEC_SLASHER_ENABLED: args.slasherEnabled ? 'true' : 'false',
|
|
489
586
|
AZTEC_SLASHING_ROUND_SIZE_IN_EPOCHS: args.slashingRoundSizeInEpochs.toString(),
|
|
490
587
|
AZTEC_SLASHING_QUORUM: args.slashingQuorum?.toString(),
|
|
491
588
|
AZTEC_SLASHING_OFFSET_IN_ROUNDS: args.slashingOffsetInRounds.toString(),
|
|
@@ -512,25 +609,14 @@ export const deployRollupForUpgrade = async (
|
|
|
512
609
|
| 'zkPassportArgs'
|
|
513
610
|
>,
|
|
514
611
|
) => {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
// Relative location of l1-contracts in monorepo or docker image.
|
|
518
|
-
const l1ContractsPath = resolve(currentDir, '..', '..', '..', 'l1-contracts');
|
|
612
|
+
// Use foundry-artifacts from l1-artifacts package
|
|
613
|
+
const l1ContractsPath = prepareL1ContractsForDeployment();
|
|
519
614
|
|
|
520
615
|
const FORGE_SCRIPT = 'script/deploy/DeployRollupForUpgrade.s.sol';
|
|
521
616
|
await maybeForgeForceProductionBuild(l1ContractsPath, FORGE_SCRIPT, chainId);
|
|
522
617
|
|
|
523
|
-
const
|
|
524
|
-
|
|
525
|
-
FORGE_SCRIPT,
|
|
526
|
-
'--sig',
|
|
527
|
-
'run()',
|
|
528
|
-
'--private-key',
|
|
529
|
-
privateKey,
|
|
530
|
-
'--rpc-url',
|
|
531
|
-
rpcUrl,
|
|
532
|
-
'--broadcast',
|
|
533
|
-
];
|
|
618
|
+
const scriptPath = join(getL1ContractsPath(), 'scripts', 'forge_broadcast.js');
|
|
619
|
+
const forgeArgs = [FORGE_SCRIPT, '--sig', 'run()', '--private-key', privateKey, '--rpc-url', rpcUrl];
|
|
534
620
|
const forgeEnv = {
|
|
535
621
|
FOUNDRY_PROFILE: chainId === mainnet.id ? 'production' : undefined,
|
|
536
622
|
// Env vars required by l1-contracts/script/deploy/RollupConfiguration.sol.
|
|
@@ -539,7 +625,12 @@ export const deployRollupForUpgrade = async (
|
|
|
539
625
|
...getDeployRollupForUpgradeEnvVars(args),
|
|
540
626
|
};
|
|
541
627
|
|
|
542
|
-
const result = await runProcess<ForgeRollupUpgradeResult>(
|
|
628
|
+
const result = await runProcess<ForgeRollupUpgradeResult>(
|
|
629
|
+
process.execPath,
|
|
630
|
+
[scriptPath, ...forgeArgs],
|
|
631
|
+
forgeEnv,
|
|
632
|
+
l1ContractsPath,
|
|
633
|
+
);
|
|
543
634
|
if (!result) {
|
|
544
635
|
throw new Error('Forge script did not output deployment result');
|
|
545
636
|
}
|
|
@@ -551,6 +642,5 @@ export const deployRollupForUpgrade = async (
|
|
|
551
642
|
|
|
552
643
|
return {
|
|
553
644
|
rollup,
|
|
554
|
-
slashFactoryAddress: result.slashFactoryAddress,
|
|
555
645
|
};
|
|
556
646
|
};
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
} from './deploy_aztec_l1_contracts.js';
|
|
25
25
|
import { RegisterNewRollupVersionPayloadArtifact } from './l1_artifacts.js';
|
|
26
26
|
import { type L1TxUtilsConfig, getL1TxUtilsConfigEnvVars } from './l1_tx_utils/config.js';
|
|
27
|
-
import {
|
|
27
|
+
import { createL1TxUtils } from './l1_tx_utils/factory.js';
|
|
28
28
|
import type { L1TxUtils } from './l1_tx_utils/l1_tx_utils.js';
|
|
29
29
|
import type { GasPrice, L1TxConfig, L1TxRequest } from './l1_tx_utils/types.js';
|
|
30
30
|
import type { ExtendedViemWalletClient } from './types.js';
|
|
@@ -46,7 +46,7 @@ export class L1Deployer {
|
|
|
46
46
|
private createVerificationJson: boolean = false,
|
|
47
47
|
) {
|
|
48
48
|
this.salt = maybeSalt ? padHex(numberToHex(maybeSalt), { size: 32 }) : undefined;
|
|
49
|
-
this.l1TxUtils =
|
|
49
|
+
this.l1TxUtils = createL1TxUtils(
|
|
50
50
|
this.client,
|
|
51
51
|
{ logger: this.logger, dateProvider },
|
|
52
52
|
{ ...this.txUtilsConfig, debugMaxGasLimit: acceleratedTestDeployments },
|
|
@@ -179,7 +179,7 @@ export async function deployL1Contract(
|
|
|
179
179
|
|
|
180
180
|
if (!l1TxUtils) {
|
|
181
181
|
const config = getL1TxUtilsConfigEnvVars();
|
|
182
|
-
l1TxUtils =
|
|
182
|
+
l1TxUtils = createL1TxUtils(
|
|
183
183
|
extendedClient,
|
|
184
184
|
{ logger },
|
|
185
185
|
{ ...config, debugMaxGasLimit: acceleratedTestDeployments },
|
|
@@ -0,0 +1,32 @@
|
|
|
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: 1,
|
|
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;
|
package/src/l1_artifacts.ts
CHANGED
|
@@ -3,10 +3,6 @@ import {
|
|
|
3
3
|
CoinIssuerBytecode,
|
|
4
4
|
DateGatedRelayerAbi,
|
|
5
5
|
DateGatedRelayerBytecode,
|
|
6
|
-
EmpireSlasherDeploymentExtLibAbi,
|
|
7
|
-
EmpireSlasherDeploymentExtLibBytecode,
|
|
8
|
-
EmpireSlashingProposerAbi,
|
|
9
|
-
EmpireSlashingProposerBytecode,
|
|
10
6
|
FeeAssetHandlerAbi,
|
|
11
7
|
FeeAssetHandlerBytecode,
|
|
12
8
|
FeeJuicePortalAbi,
|
|
@@ -42,16 +38,14 @@ import {
|
|
|
42
38
|
RollupLinkReferences,
|
|
43
39
|
RollupOperationsExtLibAbi,
|
|
44
40
|
RollupOperationsExtLibBytecode,
|
|
45
|
-
SlashFactoryAbi,
|
|
46
|
-
SlashFactoryBytecode,
|
|
47
41
|
SlasherAbi,
|
|
48
42
|
SlasherBytecode,
|
|
43
|
+
SlasherDeploymentExtLibAbi,
|
|
44
|
+
SlasherDeploymentExtLibBytecode,
|
|
45
|
+
SlashingProposerAbi,
|
|
46
|
+
SlashingProposerBytecode,
|
|
49
47
|
StakingAssetHandlerAbi,
|
|
50
48
|
StakingAssetHandlerBytecode,
|
|
51
|
-
TallySlasherDeploymentExtLibAbi,
|
|
52
|
-
TallySlasherDeploymentExtLibBytecode,
|
|
53
|
-
TallySlashingProposerAbi,
|
|
54
|
-
TallySlashingProposerBytecode,
|
|
55
49
|
TestERC20Abi,
|
|
56
50
|
TestERC20Bytecode,
|
|
57
51
|
ValidatorOperationsExtLibAbi,
|
|
@@ -107,15 +101,10 @@ export const RollupArtifact = {
|
|
|
107
101
|
contractAbi: RewardExtLibAbi,
|
|
108
102
|
contractBytecode: RewardExtLibBytecode as Hex,
|
|
109
103
|
},
|
|
110
|
-
|
|
111
|
-
name: '
|
|
112
|
-
contractAbi:
|
|
113
|
-
contractBytecode:
|
|
114
|
-
},
|
|
115
|
-
EmpireSlasherDeploymentExtLib: {
|
|
116
|
-
name: 'EmpireSlasherDeploymentExtLib',
|
|
117
|
-
contractAbi: EmpireSlasherDeploymentExtLibAbi,
|
|
118
|
-
contractBytecode: EmpireSlasherDeploymentExtLibBytecode as Hex,
|
|
104
|
+
SlasherDeploymentExtLib: {
|
|
105
|
+
name: 'SlasherDeploymentExtLib',
|
|
106
|
+
contractAbi: SlasherDeploymentExtLibAbi,
|
|
107
|
+
contractBytecode: SlasherDeploymentExtLibBytecode as Hex,
|
|
119
108
|
},
|
|
120
109
|
},
|
|
121
110
|
},
|
|
@@ -175,22 +164,10 @@ export const SlasherArtifact = {
|
|
|
175
164
|
contractBytecode: SlasherBytecode as Hex,
|
|
176
165
|
};
|
|
177
166
|
|
|
178
|
-
export const
|
|
179
|
-
name: '
|
|
180
|
-
contractAbi:
|
|
181
|
-
contractBytecode:
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
export const TallySlashingProposerArtifact = {
|
|
185
|
-
name: 'TallySlashingProposer',
|
|
186
|
-
contractAbi: TallySlashingProposerAbi,
|
|
187
|
-
contractBytecode: TallySlashingProposerBytecode as Hex,
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
export const SlashFactoryArtifact = {
|
|
191
|
-
name: 'SlashFactory',
|
|
192
|
-
contractAbi: SlashFactoryAbi,
|
|
193
|
-
contractBytecode: SlashFactoryBytecode as Hex,
|
|
167
|
+
export const SlashingProposerArtifact = {
|
|
168
|
+
name: 'SlashingProposer',
|
|
169
|
+
contractAbi: SlashingProposerAbi,
|
|
170
|
+
contractBytecode: SlashingProposerBytecode as Hex,
|
|
194
171
|
};
|
|
195
172
|
|
|
196
173
|
export const RegisterNewRollupVersionPayloadArtifact = {
|