Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,4 @@ out
.format_sql_snapshot
.prettier_cache.json
.prettier_cache_contracts.json
call_traces.json
2 changes: 1 addition & 1 deletion contracts
Submodule contracts updated 44 files
+916 −756 AllContractsHashes.json
+3 −3 configs/genesis/era/latest.json
+3 −3 configs/genesis/era/latest.toml
+1 −1 l1-contracts/contracts/common/l2-helpers/IL2ToL1MessengerEra.sol
+25 −0 l1-contracts/contracts/common/l2-helpers/IL2ToL1MessengerZKSyncOS.sol
+30 −9 l1-contracts/contracts/common/l2-helpers/L2ContractAddresses.sol
+2 −2 l1-contracts/contracts/common/libraries/ZKSyncOSBytecodeInfo.sol
+12 −0 l1-contracts/contracts/interop/InteropHandler.sol
+14 −0 l1-contracts/contracts/l2-system/zksync-os/Burner.sol
+27 −0 l1-contracts/contracts/l2-system/zksync-os/L1MessageGasLib.sol
+61 −0 l1-contracts/contracts/l2-system/zksync-os/L1Messenger.sol
+72 −0 l1-contracts/contracts/l2-system/zksync-os/L2BaseToken.sol
+34 −0 l1-contracts/contracts/l2-system/zksync-os/ZKOSContractDeployer.sol
+37 −0 l1-contracts/contracts/l2-system/zksync-os/ZKOSContractHelper.sol
+16 −0 l1-contracts/contracts/l2-system/zksync-os/errors/ZKOSContractErrors.sol
+1 −1 l1-contracts/contracts/l2-system/zksync-os/interfaces/IZKOSContractDeployer.sol
+73 −5 l1-contracts/contracts/l2-upgrades/L2GenesisForceDeploymentsHelper.sol
+13 −0 l1-contracts/contracts/l2-upgrades/L2GenesisUpgrade.sol
+5 −0 l1-contracts/contracts/state-transition/ChainTypeManagerBase.sol
+5 −5 l1-contracts/contracts/state-transition/verifiers/ZKsyncOSVerifierPlonk.sol
+46 −30 l1-contracts/contracts/transactionFilterer/PrividiumTransactionFilterer.sol
+1 −1 l1-contracts/deploy-scripts/AdminFunctions.s.sol
+36 −0 l1-contracts/deploy-scripts/DeployPrividiumTransactionFilterer.s.sol
+1 −1 l1-contracts/deploy-scripts/ctm/DeployCTM.s.sol
+1 −1 l1-contracts/deploy-scripts/ctm/DeployCTMUtils.s.sol
+82 −103 l1-contracts/deploy-scripts/ctm/RegisterZKChain.s.sol
+2 −2 l1-contracts/deploy-scripts/upgrade/default_upgrade/DefaultCTMUpgrade.s.sol
+2 −2 l1-contracts/deploy-scripts/upgrade/default_upgrade/DefaultGatewayUpgrade.s.sol
+79 −20 l1-contracts/deploy-scripts/utils/GetDiamondCutData.sol
+1 −1 l1-contracts/package.json
+278 −71 l1-contracts/selectors
+8 −8 l1-contracts/test/foundry/l1/integration/l2-tests-abstract/L2AssetTrackerData.sol
+22 −0 l1-contracts/test/foundry/l1/unit/concrete/PrividiumTransactionFilterer/CheckTransaction.sol
+3 −0 ...racts/test/foundry/l1/unit/concrete/PrividiumTransactionFilterer/_PrividiumTransactionFilterer_Shared.t.sol
+2 −2 l1-contracts/test/foundry/l1/unit/concrete/state-transition/data-availability/RelayedSLDAValidator.t.sol
+45 −0 l1-contracts/test/foundry/zksync-os/unit/L1MessengerTest.t.sol
+6 −4 system-contracts/contracts/Constants.sol
+1 −1 system-contracts/contracts/L2BaseToken.sol
+2 −2 system-contracts/contracts/SystemContractErrors.sol
+6 −6 system-contracts/contracts/abstract/SystemContractBase.sol
+3 −3 system-contracts/scripts/constants.ts
+4 −4 system-contracts/test/shared/constants.ts
+16 −16 tools/verifier-gen/data/ZKsyncOS_plonk_scheduler_key.json
+24 −7 tools/zksync-os-genesis-gen/src/consts.rs
8 changes: 4 additions & 4 deletions core/lib/constants/src/contracts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,22 +213,22 @@ pub const UPGRADEABLE_BEACON_DEPLOYER_ADDRESS: Address = H160([

pub const L2_INTEROP_CENTER_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x10,
0x00, 0x01, 0x00, 0x0d,
]);

pub const L2_INTEROP_HANDLER_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x0d,
0x00, 0x01, 0x00, 0x0e,
]);

pub const L2_ASSET_TRACKER_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x0e,
0x00, 0x01, 0x00, 0x0f,
]);

pub const GW_ASSET_TRACKER_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x00, 0x0f,
0x00, 0x01, 0x00, 0x10,
]);

pub const L2_SYSTEM_CONTRACT_PROXY_ADMIN_ADDRESS: Address = H160([
Expand Down
3 changes: 2 additions & 1 deletion zkstack_cli/crates/config/src/contracts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ use zksync_system_constants::{L2_ASSET_ROUTER_ADDRESS, L2_NATIVE_TOKEN_VAULT_ADD
use crate::{
consts::CONTRACTS_FILE,
forge_interface::{
deploy_ecosystem::output::{DeployCTMOutput, DeployL1CoreContractsOutput},
deploy_ctm::output::DeployCTMOutput,
deploy_ecosystem::output::DeployL1CoreContractsOutput,
deploy_l2_contracts::output::{
ConsensusRegistryOutput, DefaultL2UpgradeOutput, Multicall3Output,
TimestampAsserterOutput,
Expand Down
59 changes: 59 additions & 0 deletions zkstack_cli/crates/config/src/forge_interface/deploy_ctm/input.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
use ethers::types::{Address, H256};
use serde::{Deserialize, Serialize};
use zkstack_cli_types::{L1Network, VMOption};

use crate::{
forge_interface::deploy_ecosystem::input::InitialDeploymentConfig, traits::FileConfigTrait,
WalletsConfig,
};

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DeployCTMConfig {
pub owner_address: Address,
pub testnet_verifier: bool,
pub support_l2_legacy_shared_bridge_test: bool,
pub contracts: ContractsDeployCTMConfig,
pub is_zk_sync_os: bool,
}

impl FileConfigTrait for DeployCTMConfig {}

impl DeployCTMConfig {
pub fn new(
wallets_config: &WalletsConfig,
initial_deployment_config: &InitialDeploymentConfig,
testnet_verifier: bool,
l1_network: L1Network,
support_l2_legacy_shared_bridge_test: bool,
vm_option: VMOption,
) -> Self {
Self {
is_zk_sync_os: vm_option.is_zksync_os(),
testnet_verifier,
owner_address: wallets_config.governor.address,
support_l2_legacy_shared_bridge_test,
contracts: ContractsDeployCTMConfig {
create2_factory_addr: initial_deployment_config.create2_factory_addr,
create2_factory_salt: initial_deployment_config.create2_factory_salt,
// TODO verify correctnesss
governance_security_council_address: wallets_config.governor.address,
governance_min_delay: initial_deployment_config.governance_min_delay,
validator_timelock_execution_delay: initial_deployment_config
.validator_timelock_execution_delay,
avail_l1_da_validator_addr: l1_network.avail_l1_da_validator_addr(),
},
}
}
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct ContractsDeployCTMConfig {
pub create2_factory_salt: H256,
#[serde(skip_serializing_if = "Option::is_none")]
pub create2_factory_addr: Option<Address>,
pub governance_security_council_address: Address,
pub governance_min_delay: u64,
pub validator_timelock_execution_delay: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub avail_l1_da_validator_addr: Option<Address>,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pub mod input;
pub mod output;
43 changes: 43 additions & 0 deletions zkstack_cli/crates/config/src/forge_interface/deploy_ctm/output.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
use ethers::types::Address;
use serde::{Deserialize, Serialize};

use crate::traits::FileConfigTrait;

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DeployCTMOutput {
pub contracts_config: DeployCTMContractsConfigOutput,
pub deployed_addresses: DeployCTMDeployedAddressesOutput,
pub multicall3_addr: Address,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DeployCTMDeployedAddressesOutput {
pub governance_addr: Address,
pub transparent_proxy_admin_addr: Address,
pub validator_timelock_addr: Address,
pub chain_admin: Address,
pub state_transition: L1StateTransitionOutput,
pub rollup_l1_da_validator_addr: Address,
pub no_da_validium_l1_validator_addr: Address,
pub avail_l1_da_validator_addr: Address,
pub l1_rollup_da_manager: Address,
pub blobs_zksync_os_l1_da_validator_addr: Option<Address>,
pub server_notifier_proxy_addr: Address,
}

impl FileConfigTrait for DeployCTMOutput {}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct DeployCTMContractsConfigOutput {
pub diamond_cut_data: String,
pub force_deployments_data: Option<String>,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct L1StateTransitionOutput {
pub state_transition_proxy_addr: Address,
pub verifier_addr: Address,
pub genesis_upgrade_addr: Address,
pub default_upgrade_addr: Address,
pub bytecodes_supplier_addr: Address,
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,83 +6,24 @@ use ethers::{
};
use rand::Rng;
use serde::{Deserialize, Serialize};
use zkstack_cli_types::{L1Network, VMOption};
use zksync_basic_types::{protocol_version::ProtocolSemanticVersion, u256_to_h256, L2ChainId};
use zksync_basic_types::L2ChainId;

use crate::{
consts::INITIAL_DEPLOYMENT_FILE,
traits::{FileConfigTrait, FileConfigWithDefaultName},
ContractsConfigForDeployERC20, ContractsGenesisConfig, WalletsConfig, ERC20_DEPLOYMENT_FILE,
ContractsConfigForDeployERC20, WalletsConfig, ERC20_DEPLOYMENT_FILE,
};

/// Part of the genesis config influencing `DeployGatewayCTMInput`.
#[derive(Debug)]
pub struct GenesisInput {
pub bootloader_hash: H256,
pub default_aa_hash: H256,
pub evm_emulator_hash: H256,
pub genesis_root_hash: H256,
pub rollup_last_leaf_index: u64,
pub genesis_commitment: H256,
pub protocol_version: ProtocolSemanticVersion,
}

impl GenesisInput {
pub fn new(
contract_genesis_config: &ContractsGenesisConfig,
vmoption: VMOption,
) -> anyhow::Result<Self> {
let protocol_version = contract_genesis_config.protocol_semantic_version()?;
match vmoption {
VMOption::EraVM => Ok(Self {
bootloader_hash: contract_genesis_config.0.get("bootloader_hash")?,
default_aa_hash: contract_genesis_config.0.get("default_aa_hash")?,
evm_emulator_hash: contract_genesis_config
.0
.get_opt("evm_emulator_hash")?
.unwrap_or_default(),
genesis_root_hash: contract_genesis_config.0.get("genesis_root")?,
rollup_last_leaf_index: contract_genesis_config
.0
.get("genesis_rollup_leaf_index")?,
genesis_commitment: contract_genesis_config.0.get("genesis_batch_commitment")?,
protocol_version,
}),
VMOption::ZKSyncOsVM => {
let one = u256_to_h256(U256::one());
let genesis_root = contract_genesis_config.0.get("genesis_root")?;
Ok(Self {
genesis_root_hash: genesis_root,
// Placeholders, not used in zkSync OS mode. But necessary to be provided.
genesis_commitment: one,
bootloader_hash: one,
default_aa_hash: one,
evm_emulator_hash: one,
rollup_last_leaf_index: 0,
protocol_version,
})
}
}
}
}

#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct InitialDeploymentConfig {
#[serde(skip_serializing_if = "Option::is_none")]
pub create2_factory_addr: Option<Address>,
pub create2_factory_salt: H256,
pub governance_min_delay: u64,
pub max_number_of_chains: u64,
pub diamond_init_batch_overhead_l1_gas: u64,
pub diamond_init_max_l2_gas_per_batch: u64,
pub diamond_init_max_pubdata_per_batch: u64,
pub diamond_init_minimal_l2_gas_price: u64,
pub diamond_init_priority_tx_max_pubdata: u64,
pub diamond_init_pubdata_pricing_mode: u64,
pub priority_tx_max_gas_limit: u64,
pub validator_timelock_execution_delay: u64,
pub token_weth_address: Address,
pub bridgehub_create_new_chain_salt: u64,
pub max_number_of_chains: u64,
pub validator_timelock_execution_delay: u64,
}

impl Default for InitialDeploymentConfig {
Expand All @@ -92,13 +33,6 @@ impl Default for InitialDeploymentConfig {
create2_factory_salt: H256::random(),
governance_min_delay: 0,
max_number_of_chains: 100,
diamond_init_batch_overhead_l1_gas: 1000000,
diamond_init_max_l2_gas_per_batch: 80000000,
diamond_init_max_pubdata_per_batch: 120000,
diamond_init_minimal_l2_gas_price: 250000000,
diamond_init_priority_tx_max_pubdata: 99000,
diamond_init_pubdata_pricing_mode: 0,
priority_tx_max_gas_limit: 72000000,
validator_timelock_execution_delay: 0,
token_weth_address: Address::from_str("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2")
.unwrap(),
Expand Down Expand Up @@ -162,31 +96,22 @@ pub struct Erc20DeploymentTokensConfig {
pub struct DeployL1Config {
pub era_chain_id: L2ChainId,
pub owner_address: Address,
pub testnet_verifier: bool,
pub support_l2_legacy_shared_bridge_test: bool,
pub contracts: ContractsDeployL1Config,
pub tokens: TokensDeployL1Config,
pub is_zk_sync_os: bool,
}

impl FileConfigTrait for DeployL1Config {}

impl DeployL1Config {
#[allow(clippy::too_many_arguments)]
pub fn new(
genesis_input: &GenesisInput,
wallets_config: &WalletsConfig,
initial_deployment_config: &InitialDeploymentConfig,
era_chain_id: L2ChainId,
testnet_verifier: bool,
l1_network: L1Network,
support_l2_legacy_shared_bridge_test: bool,
vm_option: VMOption,
) -> Self {
Self {
is_zk_sync_os: vm_option.is_zksync_os(),
era_chain_id,
testnet_verifier,
owner_address: wallets_config.governor.address,
support_l2_legacy_shared_bridge_test,
contracts: ContractsDeployL1Config {
Expand All @@ -196,33 +121,7 @@ impl DeployL1Config {
governance_security_council_address: wallets_config.governor.address,
governance_min_delay: initial_deployment_config.governance_min_delay,
max_number_of_chains: initial_deployment_config.max_number_of_chains,
diamond_init_batch_overhead_l1_gas: initial_deployment_config
.diamond_init_batch_overhead_l1_gas,
diamond_init_max_l2_gas_per_batch: initial_deployment_config
.diamond_init_max_l2_gas_per_batch,
diamond_init_max_pubdata_per_batch: initial_deployment_config
.diamond_init_max_pubdata_per_batch,
diamond_init_minimal_l2_gas_price: initial_deployment_config
.diamond_init_minimal_l2_gas_price,
bootloader_hash: genesis_input.bootloader_hash,
default_aa_hash: genesis_input.default_aa_hash,
evm_emulator_hash: genesis_input.evm_emulator_hash,
diamond_init_priority_tx_max_pubdata: initial_deployment_config
.diamond_init_priority_tx_max_pubdata,
diamond_init_pubdata_pricing_mode: initial_deployment_config
.diamond_init_pubdata_pricing_mode,
// These values are not optional in genesis config with file based configuration
genesis_batch_commitment: genesis_input.genesis_commitment,
genesis_rollup_leaf_index: genesis_input.rollup_last_leaf_index,
genesis_root: genesis_input.genesis_root_hash,
latest_protocol_version: genesis_input.protocol_version.pack(),
recursion_circuits_set_vks_hash: H256::zero(),
recursion_leaf_level_vk_hash: H256::zero(),
recursion_node_level_vk_hash: H256::zero(),
priority_tx_max_gas_limit: initial_deployment_config.priority_tx_max_gas_limit,
validator_timelock_execution_delay: initial_deployment_config
.validator_timelock_execution_delay,
avail_l1_da_validator_addr: l1_network.avail_l1_da_validator_addr(),
era_diamond_proxy_addr: None,
},
tokens: TokensDeployL1Config {
token_weth_address: initial_deployment_config.token_weth_address,
Expand All @@ -239,26 +138,7 @@ pub struct ContractsDeployL1Config {
pub create2_factory_salt: H256,
#[serde(skip_serializing_if = "Option::is_none")]
pub create2_factory_addr: Option<Address>,
pub validator_timelock_execution_delay: u64,
pub genesis_root: H256,
pub genesis_rollup_leaf_index: u64,
pub genesis_batch_commitment: H256,
pub latest_protocol_version: U256,
pub recursion_node_level_vk_hash: H256,
pub recursion_leaf_level_vk_hash: H256,
pub recursion_circuits_set_vks_hash: H256,
pub priority_tx_max_gas_limit: u64,
pub diamond_init_pubdata_pricing_mode: u64,
pub diamond_init_batch_overhead_l1_gas: u64,
pub diamond_init_max_pubdata_per_batch: u64,
pub diamond_init_max_l2_gas_per_batch: u64,
pub diamond_init_priority_tx_max_pubdata: u64,
pub diamond_init_minimal_l2_gas_price: u64,
pub bootloader_hash: H256,
pub default_aa_hash: H256,
pub evm_emulator_hash: H256,
#[serde(skip_serializing_if = "Option::is_none")]
pub avail_l1_da_validator_addr: Option<Address>,
pub era_diamond_proxy_addr: Option<Address>,
}

#[derive(Debug, Deserialize, Serialize, Clone)]
Expand Down
Loading
Loading