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
2 changes: 1 addition & 1 deletion crates/chainspec/res/genesis/hoodi.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"emeraldTime": 1766988000,
"jadeForkTime": 1774418400,
"morph": {
"useZktrie": true,
"useZktrie": false,
"maxTxPayloadBytesPerBlock": 122880,
"feeVaultAddress": "0x29107cb79ef8f69fe1587f77e283d47e84c5202f"
},
Expand Down
2 changes: 1 addition & 1 deletion crates/chainspec/res/genesis/mainnet.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"jadeForkTime": 1775628000,
"terminalTotalDifficulty": 0,
"morph": {
"useZktrie": true,
"useZktrie": false,
"maxTxPerBlock": 100,
"maxTxPayloadBytesPerBlock": 122880,
"feeVaultAddress": "0x530000000000000000000000000000000000000a"
Expand Down
31 changes: 31 additions & 0 deletions crates/chainspec/src/bootnodes.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
//! Morph boot nodes.
//!
//! Source: <https://github.com/morph-l2/go-ethereum/blob/main/params/bootnodes.go>

use reth_network_peers::{NodeRecord, parse_nodes};

/// Morph Mainnet boot nodes.
pub(crate) static MORPH_MAINNET_BOOTNODES: [&str; 7] = [
"enode://53496aab21ab73f261551d823340b417ecd2cf69652ceba670162b990429e75c4dd6eb622dd96978d65f70c9db9964b3f477886c0b62297a51266168d367bab2@52.193.82.123:30303",
"enode://58773a8b58e70cda8d39ed7500b56f176b22c5d4faab88348a0835f333f25ae3b3a45bf7f3e9fd08245d1ff57d38d01540571c0221be2404ce93568f8472c3a0@52.197.80.227:30303",
"enode://86faa94f8221ae100c6f3aebc2f79941431ce2178f1f4374a73511230846bc26df4c336139e766668f5ba8daea56fdce74f61ecc31a2cba3788e70a2d15f5258@18.177.252.130:30303",
"enode://3e3b6350e0392ace589163e3c26dc27e142acc0e5975a1df57b0da21f1aa27c756dcdb82188a754597f6815e56fce706b033fdbc04e0fefa12b53bcee66b7a0f@18.118.70.50:30303",
"enode://aecc4b91f0a7b1f46a26021f33b0bf0bcadd461312a3140f9dc46dcac82e9943e7e485206862dce2b1d1f210742268b12b048c113ee8be1cf70b29012a22b920@3.134.21.91:30303",
"enode://352f9f59fd1c65442917b81e5b5a78d9590d14921aafc59830d231d34df066da1aff0e986ed272f1cbc76527ac539fbbda8c461e2545389b6cf97f9b26bc3199@3.127.133.228:30303",
"enode://abc60fccd847e9d9d9e5865aa69cef051239f01fa1108ba6a68082d5942f52e560452aeeffbe1aeca88a33afc5a0d97da9ba2111eb825c92cdd5d38727d36e1e@18.199.61.121:30303",
];

/// Morph Hoodi Testnet boot nodes.
pub(crate) static MORPH_HOODI_BOOTNODES: [&str; 3] = [
"enode://8efa3da017d3eeb9db761e17c10121ee3ee6d258045ac4fba42549552376547f818a31e933b9dd904528aaadc9b6b457e9d1970e3cbbad42d7a0171686cbd994@13.159.40.158:30303",
"enode://884f27d218751e1f64eec36f7a5bad2bd03006d0a73b9557e36bb90847db5cb8cc2f86cb88121cecaf8599779ec088a9670fec8ee8611885591a97b52064f171@18.177.181.171:30303",
"enode://cc0a69714111d69bb6f664c06d4d8a560019259ba9828ffd5714d465bc334652354b1660b6c058c50821f790d2f76a005bf0a3c74b55cce44b7e10180130fac3@13.230.212.70:30303",
];

pub(crate) fn morph_mainnet_nodes() -> Vec<NodeRecord> {
parse_nodes(MORPH_MAINNET_BOOTNODES)
}

pub(crate) fn morph_hoodi_nodes() -> Vec<NodeRecord> {
parse_nodes(MORPH_HOODI_BOOTNODES)
}
1 change: 1 addition & 0 deletions crates/chainspec/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
// to silence the unused_crate_dependencies warning.
use alloy_consensus as _;

mod bootnodes;
pub mod constants;
pub mod genesis;
pub mod hardfork;
Expand Down
6 changes: 5 additions & 1 deletion crates/chainspec/src/spec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,11 @@ impl EthChainSpec for MorphChainSpec {
}

fn bootnodes(&self) -> Option<Vec<NodeRecord>> {
self.inner.bootnodes()
match self.inner.chain.id() {
crate::MORPH_MAINNET_CHAIN_ID => Some(crate::bootnodes::morph_mainnet_nodes()),
crate::MORPH_HOODI_CHAIN_ID => Some(crate::bootnodes::morph_hoodi_nodes()),
_ => self.inner.bootnodes(),
}
}

fn final_paris_total_difficulty(&self) -> Option<U256> {
Expand Down
6 changes: 3 additions & 3 deletions local-test/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,16 @@ All defaults can be overridden via environment variables. Common ones:
| `MORPHNODE_BIN` | `../morph/node/build/bin/morphnode` | Path to morphnode binary |
| `RETH_HTTP_PORT` | `8545` | HTTP RPC port |
| `RETH_AUTHRPC_PORT` | `8551` | Engine API auth RPC port |
| `RETH_BOOTNODES` | *(empty)* | Comma-separated enode URLs |
| `MORPH_NODE_L1_RPC` | *(per-network default)* | L1 Ethereum RPC endpoint |
| `MORPH_MAX_TX_PAYLOAD_BYTES` | `122880` | Max transaction payload size |

Example with overrides:

```bash
RETH_HTTP_PORT=9545 RETH_BOOTNODES="enode://abc@1.2.3.4:30303" ./local-test/start-all.sh hoodi
RETH_HTTP_PORT=9545 ./local-test/start-all.sh hoodi
```

> **Note**: Morph bootnodes are hardcoded in the chainspec — no need to pass `--bootnodes` manually.

## Monitoring

```bash
Expand Down
5 changes: 1 addition & 4 deletions local-test/common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,8 @@ fi
: "${RETH_LOG_FILE:=./local-test/${MORPH_NETWORK}/reth.log}"
: "${RETH_HTTP_ADDR:=0.0.0.0}"
: "${RETH_HTTP_PORT:=8545}"
: "${RETH_AUTHRPC_ADDR:=127.0.0.1}"
: "${RETH_AUTHRPC_ADDR:=0.0.0.0}"
: "${RETH_AUTHRPC_PORT:=8551}"
: "${RETH_BOOTNODES:=}"
: "${MORPH_MAX_TX_PAYLOAD_BYTES:=122880}"
: "${MORPH_MAX_TX_PER_BLOCK:=}"

# ─── Helper functions ─────────────────────────────────────────────────────────

Expand Down
18 changes: 2 additions & 16 deletions local-test/reth-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,29 +31,15 @@ args=(
--http
--http.addr "${RETH_HTTP_ADDR}"
--http.port "${RETH_HTTP_PORT}"
--http.api "web3,debug,eth,txpool,net,trace"
--http.api "web3,debug,eth,txpool,net,trace,admin"
--authrpc.addr "${RETH_AUTHRPC_ADDR}"
--authrpc.port "${RETH_AUTHRPC_PORT}"
--authrpc.jwtsecret "${JWT_SECRET}"
--log.file.directory "$(dirname "${RETH_LOG_FILE}")"
--log.file.filter info
--morph.max-tx-payload-bytes "${MORPH_MAX_TX_PAYLOAD_BYTES}"
--nat none
--engine.legacy-state-root
--engine.persistence-threshold 256
--engine.memory-block-buffer-target 16
--rpc.eth-proof-window 1209600
)

# Add optional max-tx-per-block if configured
if [[ -n "${MORPH_MAX_TX_PER_BLOCK}" ]]; then
args+=(--morph.max-tx-per-block "${MORPH_MAX_TX_PER_BLOCK}")
fi

# Add bootnodes if configured
if [[ -n "${RETH_BOOTNODES}" ]]; then
args+=(--bootnodes "${RETH_BOOTNODES}")
fi

# Start morph-reth with pm2
pm2 start "${RETH_BIN}" --name morph-reth -- "${args[@]}"

Expand Down
Loading