Skip to content
Closed
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
22 changes: 22 additions & 0 deletions .github/workflows/cherry-pick.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
on:
pull_request:
branches:
- main
types: ["closed"]

jobs:
cherry_pick_release_0_1_x:
runs-on: ubuntu-latest
name: Cherry pick into release/0.1.x
if: ${{ contains(github.event.pull_request.labels.*.name, 'release/0.1.x') && github.event.pull_request.merged == true }}
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Cherry pick into release/0.1.x
uses: carloscastrojumo/github-cherry-pick-action@v1.0.1
with:
branch: release/0.1.x
labels: |
cherry-pick
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[submodule "go-ethereum"]
path = go-ethereum
url = https://github.com/morph-l2/go-ethereum.git
branch = main
branch = release/0.3.x
4 changes: 3 additions & 1 deletion contracts/deploy/018-StakingInit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,16 +87,18 @@ export const StakingInit = async (
console.log('Upgrading the Staking proxy...')
const admin: string = configTmp.contractAdmin
const sequencerSize: number = configTmp.stakingSequencerSize
const sequencerWhiteList = configTmp.l2SequencerAddresses
const limit: number = configTmp.stakingMinDeposit
const lock: number = configTmp.stakingLockNumber

if (!ethers.utils.isAddress(admin)
|| !ethers.utils.isAddress(L1SequencerProxyAddress)
|| sequencerSize == 0
|| sequencerSize != sequencerWhiteList.length
|| lock == 0
|| limit == 0
) {
console.error('please check your address')
console.error('please check your address and your sequencer array size')
return ''
}

Expand Down
2 changes: 1 addition & 1 deletion contracts/src/deploy-config/holesky.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const config = {

// staking config
// staking initialize config
stakingSequencerSize: 4,
stakingSequencerSize: 7,
stakingLockNumber: 3,
stakingMinDeposit: 1, // limit
// register sequencers
Expand Down
1 change: 1 addition & 0 deletions gas-oracle/.env.dev
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ GAS_ORACLE_L1_BEACON_RPC = https://ethereum-sepolia-beacon-api.publicnode.com
GAS_ORACLE_L2_RPC = "http://127.0.0.1:8545/"
GAS_THRESHOLD = 5 # 5%
INTERVAL = 2000 #2s
OVERHEAD_SWITCH = false

OVERHEAD_THRESHOLD = 100 # 100Gas
OVERHEAD_INTERVAL = 10
Expand Down
17 changes: 15 additions & 2 deletions gas-oracle/app/src/gas_price_oracle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,15 @@ pub async fn update() -> Result<(), Box<dyn Error>> {
l2_oracle.clone(),
l1_rollup,
config.overhead_threshold,
var("GAS_ORACLE_L1_RPC")?,
var("GAS_ORACLE_L1_BEACON_RPC")?,
var("GAS_ORACLE_L1_RPC")
.expect("Cannot detect GAS_ORACLE_L1_RPC env var")
.parse()
.expect("Cannot parse GAS_ORACLE_L1_RPC env var"),
var("GAS_ORACLE_L1_BEACON_RPC")
.expect("Cannot detect GAS_ORACLE_L1_BEACON_RPC env var")
.parse()
.expect("Cannot parse GAS_ORACLE_L1_BEACON_RPC env var"),
read_env_var("OVERHEAD_SWITCH", false),
);

// Register metrics.
Expand Down Expand Up @@ -196,6 +203,12 @@ async fn handle_metrics() -> String {
}
}

pub fn read_env_var<T: Clone + FromStr>(var_name: &'static str, default: T) -> T {
std::env::var(var_name)
.map(|s| s.parse::<T>().unwrap_or_else(|_| default.clone()))
.unwrap_or(default)
}

#[tokio::test(flavor = "multi_thread", worker_threads = 4)]
async fn test() -> Result<(), Box<dyn Error>> {
println!("update");
Expand Down
25 changes: 14 additions & 11 deletions gas-oracle/app/src/overhead.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ pub struct OverHead {
overhead_threshold: u128,
execution_node: ExecutionNode,
beacon_node: BeaconNode,
overhead_switch: bool,
}

impl OverHead {
Expand All @@ -32,6 +33,7 @@ impl OverHead {
overhead_threshold: u128,
l1_rpc: String,
l1_beacon_rpc: String,
overhead_switch: bool,
) -> Self {
let execution_node = ExecutionNode { rpc_url: l1_rpc };
let beacon_node = BeaconNode {
Expand All @@ -45,6 +47,7 @@ impl OverHead {
overhead_threshold,
execution_node,
beacon_node,
overhead_switch,
}
}

Expand Down Expand Up @@ -132,9 +135,7 @@ impl OverHead {
"current overhead on l2 is: {:#?}",
current_overhead.as_u128()
);
ORACLE_SERVICE_METRICS
.overhead
.set(i64::try_from(current_overhead).unwrap_or(-1));
ORACLE_SERVICE_METRICS.overhead.set(latest_overhead as i64);

latest_overhead = latest_overhead.min(MAX_OVERHEAD);
let abs_diff = U256::from(latest_overhead).abs_diff(current_overhead);
Expand All @@ -149,14 +150,16 @@ impl OverHead {
}

// Step3. update overhead
let tx = self
.l2_oracle
.set_overhead(U256::from(latest_overhead))
.legacy();
let rt = tx.send().await;
match rt {
Ok(info) => log::info!("tx of set_overhead has been sent: {:?}", info.tx_hash()),
Err(e) => log::error!("update overhead error: {:#?}", e),
if self.overhead_switch {
let tx = self
.l2_oracle
.set_overhead(U256::from(latest_overhead))
.legacy();
let rt = tx.send().await;
match rt {
Ok(info) => log::info!("tx of set_overhead has been sent: {:?}", info.tx_hash()),
Err(e) => log::error!("update overhead error: {:#?}", e),
}
}
*PREV_ROLLUP_L1_BLOCK.lock().await = current_rollup_l1_block;
}
Expand Down
2 changes: 1 addition & 1 deletion gas-oracle/docker-compose-app-testnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,4 @@ services:
- TXN_PER_BLOCK=${TXN_PER_BLOCK}
- TXN_PER_BATCH=${TXN_PER_BATCH}
- L1_ROLLUP=${L1_ROLLUP}

- OVERHEAD_SWITCH=${OVERHEAD_SWITCH} #false
4 changes: 2 additions & 2 deletions go.work
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
go 1.20

replace (
github.com/scroll-tech/go-ethereum => github.com/morph-l2/go-ethereum v1.10.14-0.20240412073703-cd22e09a65c6
github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.1.0-beta.0.20240417065957-8ff3c98baa2f
github.com/scroll-tech/go-ethereum => github.com/morph-l2/go-ethereum v0.3.0-beta
github.com/tendermint/tendermint => github.com/morph-l2/tendermint v0.2.0-beta
)

use (
Expand Down
4 changes: 4 additions & 0 deletions go.work.sum
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/morph-l2/go-ethereum v0.3.0-beta h1:cYKV5LJ3ACWb+0DtQcmv/hC+m7yh3s4oaQYOJyIZMT0=
github.com/morph-l2/go-ethereum v0.3.0-beta/go.mod h1:ogSuXMMniSGIzy2nHPIOUWS3MAqOJpLtw9A8ObKuv/Q=
github.com/morph-l2/go-ethereum v1.10.14-0.20240314072444-8b0a8e1d2ded/go.mod h1:ogSuXMMniSGIzy2nHPIOUWS3MAqOJpLtw9A8ObKuv/Q=
github.com/morph-l2/go-ethereum v1.10.14-0.20240401031312-d068e9853254 h1:YZ4BSWq3vs1WE5F8mpy5DKcdmaWwf4zjIVekJBqk3FY=
github.com/morph-l2/go-ethereum v1.10.14-0.20240401031312-d068e9853254/go.mod h1:ogSuXMMniSGIzy2nHPIOUWS3MAqOJpLtw9A8ObKuv/Q=
Expand All @@ -477,6 +479,8 @@ github.com/morph-l2/tendermint v0.1.0-beta.0.20240401034235-0403d532dbd3 h1:k622
github.com/morph-l2/tendermint v0.1.0-beta.0.20240401034235-0403d532dbd3/go.mod h1:0d9/EvR8QheuLJBOq7mHPunn/7dPW22JGfeOaNEMxhA=
github.com/morph-l2/tendermint v0.1.0-beta.0.20240417065957-8ff3c98baa2f h1:xVTUs/fQqXzbyllmRk+gVdZw1m5w3/ldMKCgvOaacT0=
github.com/morph-l2/tendermint v0.1.0-beta.0.20240417065957-8ff3c98baa2f/go.mod h1:0d9/EvR8QheuLJBOq7mHPunn/7dPW22JGfeOaNEMxhA=
github.com/morph-l2/tendermint v0.2.0-beta h1:j/6DvfrKt5nT1ZG55Uh6sxzdrtlPgdMbEQ7uE4iZQzo=
github.com/morph-l2/tendermint v0.2.0-beta/go.mod h1:0d9/EvR8QheuLJBOq7mHPunn/7dPW22JGfeOaNEMxhA=
github.com/mrunalp/fileutils v0.5.1 h1:F+S7ZlNKnrwHfSwdlgNSkKo67ReVf8o9fel6C3dkm/Q=
github.com/mrunalp/fileutils v0.5.1/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
Expand Down
1 change: 1 addition & 0 deletions ops/L2-genesis/deploy-config/holesky-deploy-config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"l1ChainID": 17000,
"l2ChainID": 2810,
"l2GenesisBlockTimestamp": "0x663050A0",

"finalSystemOwner": "0x48442fdDd92F1000861c7A26cdb5c3a73FFF294d",
"proxyAdminOwner": "0x48442fdDd92F1000861c7A26cdb5c3a73FFF294d",
Expand Down
4 changes: 2 additions & 2 deletions ops/L2-genesis/op-chain-ops/genesis/setters.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func FundDevAccounts(db vm.StateDB) {
// can be set in state and the ProxyAdmin can be set as the admin of the
// Proxy.
func SetL2Proxies(db vm.StateDB) error {
return setProxies(db, predeploys.ProxyAdminAddr, bigL2PredeployNamespace_53, 128)
return setProxies(db, predeploys.ProxyAdminAddr, bigL2PredeployNamespace_53, 64)
}

func setProxies(db vm.StateDB, proxyAdminAddr common.Address, namespace *big.Int, count uint64) error {
Expand Down Expand Up @@ -171,7 +171,7 @@ func setupPredeploy(db vm.StateDB, deployResults immutables.DeploymentResults, s
}
}

if name == "L2Sequencer" {
if name == "L2Sequencer" || name == "L2WETH" {
// set slots directly
if slots, ok := slotResults[name]; ok {
for slotK, slotV := range slots {
Expand Down
1 change: 0 additions & 1 deletion ops/L2-genesis/op-chain-ops/immutables/immutables.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ func BuildL2(constructors []deployer.Constructor, config *Config) (DeploymentRes
var lastTx *types.Transaction
for _, dep := range deployments {
results[dep.Name] = dep.Bytecode

switch dep.Name {
case "L2Sequencer":
if config == nil || len(config.L2SequencerAddresses) == 0 {
Expand Down
1 change: 1 addition & 0 deletions ops/docker/docker-compose-4nodes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -671,3 +671,4 @@ services:
- TXN_PER_BLOCK=1
- TXN_PER_BATCH=50
- L1_ROLLUP=${MORPH_ROLLUP:-0x6900000000000000000000000000000000000010}
- OVERHEAD_SWITCH=${OVERHEAD_SWITCH}
50 changes: 26 additions & 24 deletions prover/challenge-handler/src/bin/auto_challenge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,30 +178,32 @@ async fn auto_challenge(
}
};

let check_receipt = || async {
let receipt = l1_provider.get_transaction_receipt(pending_tx.tx_hash()).await.unwrap();
match receipt {
Some(tr) => {
// Either 1 (success) or 0 (failure).
match tr.status.unwrap_or_default().as_u64() {
1 => log::info!("challenge_state receipt success: {:#?}", pending_tx.tx_hash()),
_ => log::error!("challenge_state receipt fail: {:#?}", tr),
};
return true;
}
// Maybe still pending.
None => {
log::info!("challenge_state receipt pending");
return false;
match pending_tx.await {
Ok(receipt) => {
match receipt {
Some(receipt) => {
// Check the status of the tx receipt
if receipt.status == Some(1.into()) {
log::info!(
"tx of challenge_state success, batch_index: {:?}, gasUsed: {:?}, txHash: {:?}",
batch_index,
receipt.gas_used,
receipt.transaction_hash
);
} else {
log::error!(
"tx of challenge_state failed, batch_index: {:?}, txHash: {:?}",
batch_index,
receipt.transaction_hash
);
}
}
None => {
log::error!("No challenge_state tx receipt found, may still be in pending status or has been dropped");
}
}
}
};

for _ in 1..5 {
std::thread::sleep(Duration::from_secs(12));
if check_receipt().await {
break;
};
Err(error) => log::error!("provider error: {:?}", error),
}

Ok(())
Expand Down Expand Up @@ -239,13 +241,13 @@ async fn detecte_challenge(latest: U64, l1_rollup: &RollupType, l1_provider: &Pr
return None;
}
};
let is_batch_finalized: bool = l1_rollup.is_batch_finalized(U256::from(batch_index)).await.unwrap();
let _is_batch_finalized: bool = l1_rollup.is_batch_finalized(U256::from(batch_index)).await.unwrap();

if batch_in_challenge {
log::info!("prev challenge not finalized, batch index = {:#?}", batch_index);
return Some(true);
}
log::info!("batch status not in challenge, batch index = {:#?}", batch_index);
log::debug!("batch status not in challenge, batch index = {:#?}", batch_index);
}
log::info!("all batch's status not in challenge now");
Some(false)
Expand Down
3 changes: 1 addition & 2 deletions prover/challenge-handler/src/bin/batch_query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ use dotenv::dotenv;
use env_logger::Env;
use ethers::prelude::*;
use ethers::signers::Wallet;
use ethers::{abi::AbiDecode, prelude::*};
use serde::{Deserialize, Serialize};
use ethers::abi::AbiDecode;
use std::env::var;
use std::error::Error;
use std::ops::Mul;
Expand Down
3 changes: 1 addition & 2 deletions prover/challenge-handler/src/bin/block_query.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ use dotenv::dotenv;
use env_logger::Env;
use ethers::prelude::*;
use ethers::signers::Wallet;
use ethers::{abi::AbiDecode, prelude::*};
use serde::{Deserialize, Serialize};
use ethers::abi::AbiDecode;
use std::env::var;
use std::error::Error;
use std::ops::Mul;
Expand Down
14 changes: 12 additions & 2 deletions prover/challenge-handler/src/handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -237,9 +237,19 @@ async fn prove_state(wallet_address: Address, batch_index: u64, l1_rollup: &Roll
Some(receipt) => {
// Check the status of the tx receipt
if receipt.status == Some(1.into()) {
log::error!("tx of prove_state success, tx hash: {:?}", receipt.transaction_hash);
log::info!(
"tx of prove_state success, batch_index: {:?}, gasUsed: {:?}, txHash: {:?}",
batch_index,
receipt.gas_used,
receipt.transaction_hash
);
return true;
} else {
log::error!("tx of prove_state failed, tx hash: {:?}", receipt.transaction_hash);
log::error!(
"tx of prove_state failed, batch_index: {:?}, txHash: {:?}",
batch_index,
receipt.transaction_hash
);
}
}
None => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// contracts/GLDToken.sol
// SPDX-License-Identifier: MIT
pragma solidity =0.8.24;

import "@openzeppelin/contracts/access/Ownable.sol";
import {IZkEvmVerifier} from "./libs/IZkEvmVerifier.sol";

Expand Down
2 changes: 1 addition & 1 deletion prover/shadow-proving/src/shadow_prove.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ async fn handle_with_prover(batch_info: &BatchInfo, l1_shadow_rollup: &ShadowRol
log::info!("query proof and prove state: {:?}", batch_index);
if !prove_result.proof_data.is_empty() {
prove_state(batch_index, &l1_shadow_rollup).await;
continue;
break;
}
}
None => (),
Expand Down