---
# System prepended metadata

title: Morph Holesky Testnet Pre-launch Development Resources

---

---
title: Morph Holesky Testnet Pre-launch Development Resources
lang: en-US
keywords: [morph,ethereum,rollup,layer2,validity proof,optimstic zk-rollup]
description: Upgrade your blockchain experience with Morph - the secure decentralized, cost0efficient, and high-performing optimstic zk-rollup solution. Try it now!
---


# Holesky Testnet:

## Network Configuration

Before you start, ensure you are connected to the following networks:

| Network Name | Morph Holesky Testnet | Holesky Testnet |
| --- | --- | --- |
| RPC URL | https://rpc-holesky.morphl2.io | https://ethereum-holesky-rpc.publicnode.com/ |
| Chain ID | 2810 | 17000 |
| Currency Symbol | ETH | ETH |
| Block Explorer URL | https://explorer-holesky.morphl2.io/| https://holesky.etherscan.io/ |

Websocket Connection: 

wss://rpc-holesky.morphl2.io:8443/

## Testnet Bridge

bridge-holesky.morphl2.io

## Contract Address

### Main Contract

#### L1 Contract

[Staking](https://holesky.etherscan.io/address/0x868dd5d1c268277e331b726bb438edde8221d389):0x868dd5d1c268277e331b726bb438edde8221d389

[Rollup](https://holesky.etherscan.io/address/0xd8c5c541d56f59d65cf775de928ccf4a47d4985c):0xd8c5c541d56f59d65cf775de928ccf4a47d4985c

[L1MessageQueueWithGasPriceOracle](https://holesky.etherscan.io/address/0x778d1d9a4d8b6b9ade36d967a9ac19455ec3fd0b):0x778d1d9a4d8b6b9ade36d967a9ac19455ec3fd0b

[L1CrossDomainMessenger](https://holesky.etherscan.io/address/0xecc966ab425f3f5bd58085ce4ebdbf81d829126f):0xecc966ab425f3f5bd58085ce4ebdbf81d829126f

#### L2 Contract

[L2ToL1MessagePasser](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000001):0x5300000000000000000000000000000000000001

[L2Sequencer](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000003):0x5300000000000000000000000000000000000003

[L2Gov](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000004):0x5300000000000000000000000000000000000004

[L2Submitter](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000005):0x5300000000000000000000000000000000000005

[L2CrossDomainMessenger](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000007):0x5300000000000000000000000000000000000007

### Gateway

#### L1 Gateway

[L1GatewayRouter](https://holesky.etherscan.io/address/0xea593b730d745fb5fe01b6d20e6603915252c6bf):0xea593b730d745fb5fe01b6d20e6603915252c6bf

[L1ETHGateway](https://holesky.etherscan.io/address/0xcc3d455481967dc97346ef1771a112d7a14c8f12):0xcc3d455481967dc97346ef1771a112d7a14c8f12

[L1WETHGateway](https://holesky.etherscan.io/address/0xbbdb317b50313d96823eba0fc2c1d9e469dc1906):0xbbdb317b50313d96823eba0fc2c1d9e469dc1906

[L1StandardERC20Gateway](https://holesky.etherscan.io/address/0xb26dafdb434ae93e3b8efde4f0193934955d86cd):0xb26dafdb434ae93e3b8efde4f0193934955d86cd

#### L2 Gateway

[L2GatewayRouter](https://explorer-holesky.morphl2.io/address/https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000002):0x5300000000000000000000000000000000000002

[L2StandardERC20Gateway](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000008):0x5300000000000000000000000000000000000008

[L2ERC721Gateway](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000009):0x5300000000000000000000000000000000000009

[L2ERC1155Gateway](https://explorer-holesky.morphl2.io/address/0x530000000000000000000000000000000000000C):0x530000000000000000000000000000000000000C

[L2WETHGateway](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000010):0x5300000000000000000000000000000000000010

[L2ETHGateway](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000006):0x5300000000000000000000000000000000000006

### Other Layer 2 Predeploys

[L2TxFeeVault](https://explorer-holesky.morphl2.io/address/0x530000000000000000000000000000000000000A):0x530000000000000000000000000000000000000A

[ProxyAdmin](https://explorer-holesky.morphl2.io/address/0x530000000000000000000000000000000000000B):0x530000000000000000000000000000000000000B

[MorphStandardERC20](https://explorer-holesky.morphl2.io/address/0x530000000000000000000000000000000000000D):0x530000000000000000000000000000000000000D

[MorphStandardERC20Factory](https://explorer-holesky.morphl2.io/address/0x530000000000000000000000000000000000000E):0x530000000000000000000000000000000000000E

[GasPriceOracle](https://explorer-holesky.morphl2.io/address/0x530000000000000000000000000000000000000F):0x530000000000000000000000000000000000000F

[L2WETH](https://explorer-holesky.morphl2.io/address/0x5300000000000000000000000000000000000011):0x5300000000000000000000000000000000000011

## Node Deployment



## Run a Morph Node 

This guide describes the approach to starting up a morph node. We create the folder `~/.morph` as our home directory for the following example. 

### Hardware requirements

Running the morph node requires 2 processes to be started, which are `geth` and `node`.  

`Geth` is the Morph execution layer which needs to meet the [go-ethereum hardware requirements](https://github.com/ethereum/go-ethereum#hardware-requirements), but with less storage, 500GB is enough so far. 

`Node` is the Morph consensus layer embedded tendermint which needs to meet the [tendermint hardware requirements](https://docs.tendermint.com/v0.34/tendermint-core/running-in-production.html#processor-and-memory). 



According to limitations of the current geth implementation, we only support archive mode for launching a Geth.  So the storage size of Geth will constantly increase along with blocks produced. 


### Build executable binary

#### Clone morph

```
mkdir -p ~/.morph 
cd ~/.morph
git clone https://github.com/morph-l2/morph.git
```

Currently, we use tag v0.1.0-beta as our beta version.

```
cd morph
git checkout v0.1.0-beta
```

#### Build Geth

```
make nccc_geth
```

#### Build Node

```
cd ~/.morph/morph/node 
make build
```

### Sync from genesis block

#### Config Preparation

Download the config files and make data dir

```
cd ~/.morph
wget https://raw.githubusercontent.com/morph-l2/config-template/main/holesky/data.zip
unzip data.zip
```

Create a shared secret with node

```
cd ~/.morph
openssl rand -hex 32 > jwt-secret.txt
```

#### Script to start the process

*Geth*

```
./morph/go-ethereum/build/bin/geth --morph-holesky \
    --datadir "./geth-data" \
    --http --http.api=web3,debug,eth,txpool,net,engine \
    --authrpc.addr localhost \
    --authrpc.vhosts="localhost" \
    --authrpc.port 8551 \
    --authrpc.jwtsecret=./jwt-secret.txt \
    --miner.gasprice="100000000" \
    --log.filename=./geth.log
```

*tail -f geth.log* to check if the Geth is running properly, or you can also exeucte the below curl command to check if you are connected to the peer.

```
curl -X POST -H 'Content-Type: application/json' --data 
'{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' 
localhost:8545

{"jsonrpc":"2.0","id":74,"result":"0x3"}
```


*Node*

```
./morph/node/build/bin/morphnode --home ./node-data \
     --l2.jwt-secret ./jwt-secret.txt \
     --l2.eth http://localhost:8545 \
     --l2.engine http://localhost:8551 \
     --log.filename ./node.log
```

tail -f node.log to check if the node is running properly, and you can also execute the command curl to check your node connection status.

```
curl http://localhost:26657/net_info

{
  "jsonrpc": "2.0",
  "id": -1,
  "result": {
    "listening": true,
    "listeners": [
      "Listener(@)"
    ],
    "n_peers": "3",
    "peers": [
      {
        "node_info": {
          "protocol_version": {
            "p2p": "8",
            "block": "11",
            "app": "0"
          },
          "id": "0fb5ce425197a462a66de015ee5fbbf103835b8a",
          "listen_addr": "tcp://0.0.0.0:26656",
          "network": "chain-morph-holesky",
          "version": "0.37.0-alpha.1",
          "channels": "4020212223386061",
          "moniker": "morph-dataseed-node-1",
          "other": {
            "tx_index": "on",
            "rpc_address": "tcp://0.0.0.0:26657"
          }
        },
        "is_outbound": true,
```

### Check sync status


curl http://localhost:26657/status to check the sync status of the node

```
{
  "jsonrpc": "2.0",
  "id": -1,
  "result": {
    "node_info": {
      "protocol_version": {
        "p2p": "8",
        "block": "11",
        "app": "0"
      },
      "id": "b3f34dc2ce9c4fee5449426992941aee1e09670f",
      "listen_addr": "tcp://0.0.0.0:26656",
      "network": "chain-morph-holesky",
      "version": "0.37.0-alpha.1",
      "channels": "4020212223386061",
      "moniker": "my-morph-node",
      "other": {
        "tx_index": "on",
        "rpc_address": "tcp://0.0.0.0:26657"
      }
    },
    "sync_info": {
      "latest_block_hash": "71024385DDBEB7B554DB11FD2AE097ECBD99B2AF826C11B2A74F7172F2DEE5D2",
      "latest_app_hash": "",
      "latest_block_height": "2992",
      "latest_block_time": "2024-04-25T13:48:27.647889852Z",
      "earliest_block_hash": "C7A73D3907C6CA34B9DFA043FC6D4529A8EAEC8F059E100055653E46E63F6F8E",
      "earliest_app_hash": "",
      "earliest_block_height": "1",
      "earliest_block_time": "2024-04-25T09:06:30Z",
      "catching_up": false
    },
    "validator_info": {
      "address": "5FB3D3734640792F14B70E7A53FBBD39DB9787A8",
      "pub_key": {
        "type": "tendermint/PubKeyEd25519",
        "value": "rzN67ZJWsaLSGGpNj7HOWs8nrL5kr1n+w0OckWUCetw="
      },
      "voting_power": "0"
    }
  }
}
```

The returned "catching_up" indicates whether the node is in sync or not. True means it is in sync. Meanwhile, the returned latest_block_height indicates the latest block height this node synced.













