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
17 changes: 15 additions & 2 deletions .github/workflows/docker-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
- name: Build deploy image
id: build_deploy_image
env:
REPOSITORY: scrolltech/scroll-stack-contracts
REPOSITORY: shuunifra/scroll-stack-contracts
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
platforms: linux/amd64,linux/arm64
Expand All @@ -58,7 +58,7 @@ jobs:
- name: Build gen image
id: build_gen_image
env:
REPOSITORY: scrolltech/scroll-stack-contracts
REPOSITORY: shuunifra/scroll-stack-contracts
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
platforms: linux/amd64,linux/arm64
Expand All @@ -67,3 +67,16 @@ jobs:
file: docker/Dockerfile.gen-configs
tags: |
${{ env.REPOSITORY }}:gen-configs-${{ github.sha }}

- name: Build verify image
id: build_verify_image
env:
REPOSITORY: shuunifra/scroll-stack-contracts
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0
with:
platforms: linux/amd64,linux/arm64
push: true
context: .
file: docker/Dockerfile.verify
tags: |
${{ env.REPOSITORY }}:verify-${{ github.sha }}
4 changes: 2 additions & 2 deletions docker/config-example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ MAX_BATCH_IN_BUNDLE = 30
MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000
TEST_ENV_MOCK_FINALIZE_ENABLED = true
TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300
FINALIZE_BATCH_DEADLINE_SEC = 43200
RELAY_MESSAGE_DEADLINE_SEC = 21600
FINALIZE_BATCH_DEADLINE_SEC = 4
RELAY_MESSAGE_DEADLINE_SEC = 5

[frontend]

Expand Down
2 changes: 1 addition & 1 deletion docker/scripts/verify.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ get_source_code_name() {
L1_SCROLL_MESSENGER_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR) echo EnforcedTxGateway ;;
L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
L1_ZKEVM_VERIFIER_V2_ADDR) echo ZkEvmVerifierV2 ;;
L1_ZKEVM_VERIFIER_V1_ADDR) echo ZkEvmVerifierV2 ;;
L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR ) echo MultipleVersionRollupVerifierSetOwner ;;
L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR) echo L1MessageQueueV1WithGasPriceOracle ;;
L1_MESSAGE_QUEUE_V1_PROXY_ADDR) echo TransparentUpgradeableProxy ;;
Expand Down
3 changes: 1 addition & 2 deletions docker/templates/config-contracts.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ L1_SCROLL_MESSENGER_PROXY_ADDR = ""
L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = ""
L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = ""
L1_PLONK_VERIFIER_ADDR = ""
L1_ZKEVM_VERIFIER_V2_ADDR = ""
L1_ZKEVM_VERIFIER_V1_ADDR = ""
L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = ""
L1_MESSAGE_QUEUE_V1_IMPLEMENTATION_ADDR = ""
L1_MESSAGE_QUEUE_V1_PROXY_ADDR = ""
Expand Down Expand Up @@ -60,4 +60,3 @@ L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = ""
L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = ""
L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = ""
L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = ""
L1_ZKEVM_VERIFIER_EUCLIDl_ADDR = ""
7 changes: 6 additions & 1 deletion foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ libs = ["lib"]
remappings = [] # a list of remappings
libraries = [] # a list of deployed libraries to link against
cache = true # whether to cache builds or not
# force = true # whether to ignore the cache (clean build)
force = false # whether to ignore the cache (clean build)
evm_version = 'cancun' # the evm version (by hardfork name)
solc_version = '0.8.24' # override for the solc version (setting this ignores `auto_detect_solc`)
optimizer = true # enable or disable the solc optimizer
Expand All @@ -30,3 +30,8 @@ block_timestamp = 0 # the value of `bl
block_difficulty = 0 # the value of `block.difficulty` in tests

gas_reports = ["L2GasPriceOracle"]

# remove bytecode hash for reliable deterministic addresses
bytecode_hash = 'none'

# file system permissions
145 changes: 49 additions & 96 deletions scripts/deterministic/DeployScroll.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ import {MultipleVersionRollupVerifierSetOwner} from "./contracts/MultipleVersion
import {ScrollChain} from "../../src/L1/rollup/ScrollChain.sol";
import {ZkEvmVerifierV2} from "../../src/libraries/verifier/ZkEvmVerifierV2.sol";
import {GasTokenExample} from "../../src/alternative-gas-token/GasTokenExample.sol";

//import {L1ScrollMessengerNonETH} from "../../src/alternative-gas-token/L1ScrollMessengerNonETH.sol"; //shu@unifra.io GROUP01
import {L1ScrollMessengerNonETH} from "../../src/alternative-gas-token/L1ScrollMessengerNonETH.sol";
import {L1GasTokenGateway} from "../../src/alternative-gas-token/L1GasTokenGateway.sol";
import {L1WrappedTokenGateway} from "../../src/alternative-gas-token/L1WrappedTokenGateway.sol";

Expand All @@ -40,18 +39,19 @@ import {L2WETHGateway} from "../../src/L2/gateways/L2WETHGateway.sol";
import {L1GasPriceOracle} from "../../src/L2/predeploys/L1GasPriceOracle.sol";
import {L2MessageQueue} from "../../src/L2/predeploys/L2MessageQueue.sol";
import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol";
//import {L2TxFeeVaultWithGasToken} from "../../src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol"; //shu@unifra.io GROUP02
import {L2TxFeeVaultWithGasToken} from "../../src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol";
import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol";
import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol";
import {ScrollStandardERC20} from "../../src/libraries/token/ScrollStandardERC20.sol";
import {ScrollStandardERC20FactorySetOwner} from "./contracts/ScrollStandardERC20FactorySetOwner.sol";

import {ScrollChainMockFinalize} from "../../src/mocks/ScrollChainMockFinalize.sol";
import {SystemConfig} from "../../src/L1/system-contract/SystemConfig.sol";
import {ZkEvmVerifierPostEuclid} from "../../src/libraries/verifier/ZkEvmVerifierPostEuclid.sol";

import "./Constants.sol";
import "./Configuration.sol";
import "./DeterministicDeployment.sol";
import {SystemConfig} from "../../src/L1/system-contract/SystemConfig.sol";
import {ZkEvmVerifierPostEuclid} from "../../src/libraries/verifier/ZkEvmVerifierPostEuclid.sol";
import {console} from "forge-std/Script.sol";

/// @dev The minimum deployer account balance.
Expand Down Expand Up @@ -114,8 +114,7 @@ contract DeployScroll is DeterministicDeployment {
address internal L1_WETH_GATEWAY_PROXY_ADDR;
address internal L1_WHITELIST_ADDR;
address internal L1_PLONK_VERIFIER_ADDR;
address internal L1_ZKEVM_VERIFIER_V2_ADDR;
address internal L1_ZKEVM_VERIFIER_EUCLIDl_ADDR;
address internal L1_ZKEVM_VERIFIER_V1_ADDR;
address internal L1_GAS_TOKEN_ADDR;
address internal L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR;
address internal L1_GAS_TOKEN_GATEWAY_PROXY_ADDR;
Expand Down Expand Up @@ -203,7 +202,9 @@ contract DeployScroll is DeterministicDeployment {
function run(string memory layer, string memory scriptMode) public {
broadcastLayer = parseLayer(layer);
ScriptMode mode = parseScriptMode(scriptMode);

DeterministicDeployment.initialize(mode);

checkDeployerBalance();
deployAllContracts();
initializeL1Contracts();
Expand Down Expand Up @@ -332,11 +333,8 @@ contract DeployScroll is DeterministicDeployment {

function deployAllContracts() private {
deployL1Contracts1stPass();

deployL2Contracts1stPass();

deployL1Contracts2ndPass();

deployL2Contracts2ndPass();
}

Expand All @@ -349,21 +347,19 @@ contract DeployScroll is DeterministicDeployment {
deployL1SystemConfig();
deployL1Whitelist();
deployL1ScrollChainProxy();
deployL1EnforcedTxGatewayProxy();
deployL1ScrollMessengerProxy();
deployL1ETHGatewayProxy();
deployL1EnforcedTxGatewayProxy();

deployL1MessageQueueProxy();

deployL1PlonkVerifier();
deployL1ZkEvmVerifier();
deployL1MultipleVersionRollupVerifier();
deployL1EnforcedTxGatewayImpl();

deployL1MessageQueue();

deployL1ScrollChain();
deployL1GatewayRouter();

deployL1ETHGatewayProxy();
deployL1WETHGatewayProxy();
deployL1StandardERC20GatewayProxy();
deployL1CustomERC20GatewayProxy();
Expand Down Expand Up @@ -543,56 +539,33 @@ contract DeployScroll is DeterministicDeployment {
constructorArgs
);

//upgrade(L2_PROXY_ADMIN_ADDR, L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR);
}

function deployL1EnforcedTxGateway() private {
L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = deploy(
"L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION",
type(EnforcedTxGateway).creationCode
);

bytes memory args = abi.encode(
notnull(L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR),
notnull(L1_PROXY_ADMIN_ADDR),
new bytes(0)
);

L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = deploy(
"L1_ENFORCED_TX_GATEWAY_PROXY",
type(TransparentUpgradeableProxy).creationCode,
args
);
upgrade(L1_PROXY_ADMIN_ADDR, L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR);
}

function deployL1PlonkVerifier() private {
L1_PLONK_VERIFIER_ADDR = deploy("L1_PLONK_VERIFIER", PLONK_VERIFIER_CREATION_CODE);
}

function deployL1ZkEvmVerifier() private {
// bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR), V4_VERIFIER_DIGEST);
// L1_ZKEVM_VERIFIER_V2_ADDR = deploy("L1_ZKEVM_VERIFIER_V2", type(ZkEvmVerifierV2).creationCode, args);

//TODO shu@unifra.io WHERE is VERIFIER_DIGEST_1
bytes32 VERIFIER_DIGEST_1 = 0x0000000000000000111111111111111100000000000000001111111111111111;
bytes32 VERIFIER_DIGEST_2 = 0x0000000000000000111111111111111100000000000000001111111111111112;

// ZkEvmVerifierPostEuclid x = new ZkEvmVerifierPostEuclid(
// L1_PLONK_VERIFIER_ADDR,
// VERIFIER_DIGEST_1,
// VERIFIER_DIGEST_2
// );

bytes memory constructorArgs = abi.encode(
notnull(L1_PLONK_VERIFIER_ADDR),
VERIFIER_DIGEST_1,
VERIFIER_DIGEST_2
);
L1_ZKEVM_VERIFIER_EUCLIDl_ADDR = deploy(
"L1_ZKEVM_VERIFIER_EUCLIDl",
L1_ZKEVM_VERIFIER_V1_ADDR = deploy(
"L1_ZKEVM_VERIFIER_V1",
type(ZkEvmVerifierPostEuclid).creationCode,
constructorArgs
);
/*
zkEvmVerifier = new ZkEvmVerifierPostEuclid(L1_PLONK_VERIFIER_ADDR, VERIFIER_DIGEST_1, VERIFIER_DIGEST_2);

logAddress("L1_ZKEVM_VERIFIER_V1_ADDR", address(zkEvmVerifier));
*/
}

function deployL1MultipleVersionRollupVerifier() private {
Expand All @@ -602,7 +575,7 @@ contract DeployScroll is DeterministicDeployment {
// register V4 verifier: DarwinV2 upgrade, plonk verifier v0.13.1
// version 6 comes from 'scripts/foundry/DeployL1BridgeContracts.s.sol:deployMultipleVersionRollupVerifier'
_versions[0] = 6;
_verifiers[0] = notnull(L1_ZKEVM_VERIFIER_EUCLIDl_ADDR);
_verifiers[0] = notnull(L1_ZKEVM_VERIFIER_V1_ADDR);
bytes memory args = abi.encode(DEPLOYER_ADDR, _versions, _verifiers);
L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = deploy(
"L1_MULTIPLE_VERSION_ROLLUP_VERIFIER",
Expand Down Expand Up @@ -662,19 +635,9 @@ contract DeployScroll is DeterministicDeployment {
);

upgrade(L1_PROXY_ADMIN_ADDR, L1_MESSAGE_QUEUE_V2_PROXY_ADDR, L1_MESSAGE_QUEUE_V2_IMPLEMENTATION_ADDR);

//upgrade(L2_PROXY_ADMIN_ADDR, L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR);
}

function deployL1ScrollChain() private {
// ScrollChain constructor(
// uint64 _chainId,
// address _messageQueueV1,
// address _messageQueueV2,
// address _verifier,
// address _system
// )

bytes memory args = abi.encode(
CHAIN_ID_L2,
notnull(L1_MESSAGE_QUEUE_V1_PROXY_ADDR),
Expand Down Expand Up @@ -882,17 +845,15 @@ contract DeployScroll is DeterministicDeployment {
if (!ALTERNATIVE_GAS_TOKEN_ENABLED) {
bytes memory args = abi.encode(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT);
L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVault).creationCode, args);
} else {
bytes memory args = abi.encode(
L2_ETH_GATEWAY_PROXY_ADDR,
DEPLOYER_ADDR,
L1_FEE_VAULT_ADDR,
FEE_VAULT_MIN_WITHDRAW_AMOUNT
);
L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVaultWithGasToken).creationCode, args);
}
// shu@unifra.io GROUP02
// else {
// bytes memory args = abi.encode(
// L2_ETH_GATEWAY_PROXY_ADDR,
// DEPLOYER_ADDR,
// L1_FEE_VAULT_ADDR,
// FEE_VAULT_MIN_WITHDRAW_AMOUNT
// );
// L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVaultWithGasToken).creationCode, args);
// }
}

function deployL2ProxyAdmin() private {
Expand Down Expand Up @@ -1021,28 +982,21 @@ contract DeployScroll is DeterministicDeployment {
***************************/

function deployL1ScrollMessenger() private {
//default ALTERNATIVE_GAS_TOKEN_ENABLED is false //shu@unifra.io GROUP01
if (ALTERNATIVE_GAS_TOKEN_ENABLED) {
// bytes memory args = abi.encode(
// notnull(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR),
// notnull(L2_SCROLL_MESSENGER_PROXY_ADDR),
// notnull(L1_SCROLL_CHAIN_PROXY_ADDR),
// notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR)
// );
// L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy(
// "L1_SCROLL_MESSENGER_IMPLEMENTATION",
// type(L1ScrollMessengerNonETH).creationCode,
// args
// );
bytes memory args = abi.encode(
notnull(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR),
notnull(L2_SCROLL_MESSENGER_PROXY_ADDR),
notnull(L1_SCROLL_CHAIN_PROXY_ADDR),
notnull(L1_MESSAGE_QUEUE_V1_PROXY_ADDR),
notnull(L1_MESSAGE_QUEUE_V2_PROXY_ADDR)
);

L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy(
"L1_SCROLL_MESSENGER_IMPLEMENTATION",
type(L1ScrollMessengerNonETH).creationCode,
args
);
} else {
/*
L1ScrollMessenger
constructor(
address _counterpart,
address _rollup,
address _messageQueueV1,
address _messageQueueV2)
*/
bytes memory args = abi.encode(
notnull(L2_SCROLL_MESSENGER_PROXY_ADDR),
notnull(L1_SCROLL_CHAIN_PROXY_ADDR),
Expand Down Expand Up @@ -1390,14 +1344,13 @@ contract DeployScroll is DeterministicDeployment {
}

function initializeEnforcedTxGateway() private {
//TODO shu@unifra.io in DogeOs, we do not need it
// if (getInitializeCount(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) == 0) {
// EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).initialize();
// }
// // disable gateway
// if (!EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).paused()) {
// EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).setPause(true);
// }
if (getInitializeCount(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) == 0) {
EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).initialize();
}
// disable gateway
if (!EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).paused()) {
EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).setPause(true);
}
}

function initializeL1GatewayRouter() private {
Expand Down Expand Up @@ -1531,7 +1484,7 @@ contract DeployScroll is DeterministicDeployment {
}

function transferL1ContractOwnership() private {
//transferOwnership(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, OWNER_ADDR);
transferOwnership(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, OWNER_ADDR);
transferOwnership(L1_SYSTEM_CONFIG_PROXY_ADDR, OWNER_ADDR);
transferOwnership(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR);
transferOwnership(L1_ERC1155_GATEWAY_PROXY_ADDR, OWNER_ADDR);
Expand Down
Loading
Loading