Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions zkstack_cli/crates/config/src/consts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ pub(crate) const INITIAL_DEPLOYMENT_FILE: &str = "initial_deployments.yaml";
/// Name of the erc20 deployments config file
pub(crate) const ERC20_DEPLOYMENT_FILE: &str = "erc20_deployments.yaml";
/// Name of the contracts file
pub const CORE_CONTRACTS_FILE: &str = "core_contracts.yaml";
/// Name of the contracts file
pub const CONTRACTS_FILE: &str = "contracts.yaml";
/// Name of the gateway contracts file
pub const GATEWAY_FILE: &str = "gateway.yaml";
Expand Down
129 changes: 127 additions & 2 deletions zkstack_cli/crates/config/src/contracts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ use zksync_basic_types::H160;
use zksync_system_constants::{L2_ASSET_ROUTER_ADDRESS, L2_NATIVE_TOKEN_VAULT_ADDRESS};

use crate::{
consts::CONTRACTS_FILE,
consts::{CONTRACTS_FILE, CORE_CONTRACTS_FILE},
forge_interface::{
deploy_ecosystem::output::DeployL1Output,
deploy_ecosystem::output::{DeployL1CoreContractsOutput, DeployL1Output},
deploy_l2_contracts::output::{
ConsensusRegistryOutput, DefaultL2UpgradeOutput, InitializeBridgeOutput,
L2DAValidatorAddressOutput, Multicall3Output, TimestampAsserterOutput,
Expand All @@ -18,6 +18,80 @@ use crate::{
traits::{FileConfigTrait, FileConfigWithDefaultName},
};

#[derive(Debug, Deserialize, Serialize, Clone, Default)]
pub struct CoreContractsConfig {
pub create2_factory_addr: Address,
pub create2_factory_salt: H256,
pub core_ecosystem_contracts: CoreEcosystemContracts,
pub bridges: BridgesContracts,
pub l1: L1CoreContracts,
#[serde(flatten)]
pub other: serde_json::Value,
}

impl CoreContractsConfig {
pub fn update_from_l1_output(
&mut self,
deploy_l1_core_contracts_output: &DeployL1CoreContractsOutput,
) {
self.create2_factory_addr = deploy_l1_core_contracts_output.create2_factory_addr;
self.create2_factory_salt = deploy_l1_core_contracts_output.create2_factory_salt;
self.bridges.erc20.l1_address = deploy_l1_core_contracts_output
.deployed_addresses
.bridges
.erc20_bridge_proxy_addr;
self.bridges.shared.l1_address = deploy_l1_core_contracts_output
.deployed_addresses
.bridges
.shared_bridge_proxy_addr;
self.bridges.l1_nullifier_addr = Some(
deploy_l1_core_contracts_output
.deployed_addresses
.bridges
.l1_nullifier_proxy_addr,
);
self.core_ecosystem_contracts.bridgehub_proxy_addr = deploy_l1_core_contracts_output
.deployed_addresses
.bridgehub
.bridgehub_proxy_addr;
self.core_ecosystem_contracts.message_root_proxy_addr = Some(
deploy_l1_core_contracts_output
.deployed_addresses
.bridgehub
.message_root_proxy_addr,
);
self.core_ecosystem_contracts.transparent_proxy_admin_addr =
deploy_l1_core_contracts_output
.deployed_addresses
.transparent_proxy_admin_addr;
self.core_ecosystem_contracts
.stm_deployment_tracker_proxy_addr = Some(
deploy_l1_core_contracts_output
.deployed_addresses
.bridgehub
.ctm_deployment_tracker_proxy_addr,
);

self.l1.governance_addr = deploy_l1_core_contracts_output
.deployed_addresses
.governance_addr;
self.core_ecosystem_contracts.native_token_vault_addr = Some(
deploy_l1_core_contracts_output
.deployed_addresses
.native_token_vault_addr,
);
self.l1.chain_admin_addr = deploy_l1_core_contracts_output
.deployed_addresses
.chain_admin;
}
}

impl FileConfigWithDefaultName for CoreContractsConfig {
const FILE_NAME: &'static str = CORE_CONTRACTS_FILE;
}

impl FileConfigTrait for CoreContractsConfig {}

#[derive(Debug, Deserialize, Serialize, Clone, Default)]
pub struct ContractsConfig {
pub create2_factory_addr: Address,
Expand Down Expand Up @@ -216,6 +290,44 @@ impl FileConfigWithDefaultName for ContractsConfig {

impl FileConfigTrait for ContractsConfig {}

#[derive(Debug, Deserialize, Serialize, Clone, Default)]
pub struct ContractsConfigForDeployERC20 {
pub create2_factory_addr: Address,
pub create2_factory_salt: H256,
}

impl From<ContractsConfig> for ContractsConfigForDeployERC20 {
fn from(config: ContractsConfig) -> Self {
ContractsConfigForDeployERC20 {
create2_factory_addr: config.create2_factory_addr,
create2_factory_salt: config.create2_factory_salt,
}
}
}

impl From<CoreContractsConfig> for ContractsConfigForDeployERC20 {
fn from(config: CoreContractsConfig) -> Self {
ContractsConfigForDeployERC20 {
create2_factory_addr: config.create2_factory_addr,
create2_factory_salt: config.create2_factory_salt,
}
}
}

#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
pub struct CoreEcosystemContracts {
pub bridgehub_proxy_addr: Address,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_root_proxy_addr: Option<Address>,
pub transparent_proxy_admin_addr: Address,
// `Option` to be able to parse configs from pre-gateway protocol version.
#[serde(skip_serializing_if = "Option::is_none")]
pub stm_deployment_tracker_proxy_addr: Option<Address>,
// `Option` to be able to parse configs from pre-gateway protocol version.
#[serde(skip_serializing_if = "Option::is_none")]
pub native_token_vault_addr: Option<Address>,
}

#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
pub struct EcosystemContracts {
pub bridgehub_proxy_addr: Address,
Expand Down Expand Up @@ -299,6 +411,19 @@ pub struct L1Contracts {
pub transaction_filterer_addr: Option<Address>,
}

#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct L1CoreContracts {
pub governance_addr: Address,
#[serde(default)]
pub chain_admin_addr: Address,
// `Option` to be able to parse configs from pre-gateway protocol version.
#[serde(skip_serializing_if = "Option::is_none")]
pub access_control_restriction_addr: Option<Address>,
// `Option` to be able to parse configs from pre-gateway protocol version.
#[serde(skip_serializing_if = "Option::is_none")]
pub chain_proxy_admin_addr: Option<Address>,
}

#[derive(Debug, Serialize, Deserialize, Clone, Default)]
pub struct EthProofManagerContracts {
pub proof_manager_addr: Address,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use zksync_basic_types::{protocol_version::ProtocolSemanticVersion, L2ChainId};
use crate::{
consts::INITIAL_DEPLOYMENT_FILE,
traits::{FileConfigTrait, FileConfigWithDefaultName},
ContractsConfig, GenesisConfig, WalletsConfig, ERC20_DEPLOYMENT_FILE,
ContractsConfigForDeployERC20, GenesisConfig, WalletsConfig, ERC20_DEPLOYMENT_FILE,
};

/// Part of the genesis config influencing `DeployGatewayCTMInput`.
Expand Down Expand Up @@ -256,7 +256,7 @@ impl FileConfigTrait for DeployErc20Config {}
impl DeployErc20Config {
pub fn new(
erc20_deployment_config: &Erc20DeploymentConfig,
contracts_config: &ContractsConfig,
contracts_config: &ContractsConfigForDeployERC20,
additional_addresses_for_minting: Vec<Address>,
) -> Self {
let mut tokens = HashMap::new();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,30 @@ use crate::{
traits::{FileConfigTrait, FileConfigWithDefaultName},
};

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DeployL1CoreContractsOutput {
pub create2_factory_addr: Address,
pub create2_factory_salt: H256,
pub deployer_addr: Address,
pub era_chain_id: u32,
pub l1_chain_id: u32,
pub owner_address: Address,
pub deployed_addresses: DeployL1CoreContractsDeployedAddressesOutput,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DeployL1CoreContractsDeployedAddressesOutput {
pub governance_addr: Address,
pub transparent_proxy_admin_addr: Address,
pub chain_admin: Address,
pub access_control_restriction_addr: Address,
pub bridgehub: L1BridgehubOutput,
pub bridges: L1BridgesOutput,
pub native_token_vault_addr: Address,
}

impl FileConfigTrait for DeployL1CoreContractsOutput {}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DeployL1Output {
pub create2_factory_addr: Address,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ pub const DEPLOY_ECOSYSTEM_SCRIPT_PARAMS: ForgeScriptParams = ForgeScriptParams

pub const DEPLOY_ECOSYSTEM_CORE_CONTRACTS_SCRIPT_PARAMS: ForgeScriptParams = ForgeScriptParams {
input: "script-config/config-deploy-l1.toml",
output: "script-out/output-deploy-l1.toml",
output: "script-out/output-deploy-l1-core-contracts.toml",
script_path: "deploy-scripts/DeployL1CoreContracts.s.sol",
};

pub const REGISTER_CTM_SCRIPT_PARAMS: ForgeScriptParams = ForgeScriptParams {
input: "script-config/config-deploy-l1.toml",
input: "script-config/config-register-ctm-l1.toml",
output: "script-out/register-ctm-l1.toml",
script_path: "deploy-scripts/RegisterCTM.s.sol",
};
Expand Down
Loading
Loading