# Syncing the execution layer of the beverlyhills testnet
1. Create two subdirectories: `execution` and `consensus` in a dedicated directory of your choice.
2. Clone the beverly hills branch of `gballet/go-ethereum`
```
$ git clone https://github.com/gballet/go-ethereum
$ cd go-ethereum
$ git checkout beverly-hills-head
```
3. Build geth and come back to the root directory
```
$ go build ./cmd/geth/
$ cd ..
```
4. Initialize the genesis for the execution client.
4.1. Download the genesis file:
```
$ curl https://raw.githubusercontent.com/ethpandaops/verkle-testnet/main/beverly-hills-testnet/custom_config_data/genesis.json
```
4.2. Initialize the execution client
```
$ ./go-ethereum/geth --datadir=$PWD/execution init genesis.json
```
5. Start the execution client:
```
$ ./geth --datadir=$PWD/execution \
--http --http.api="net,eth,debug,engine,web3" \
--ws --ws.api="net,eth,debug,engine,web3" \
--http.corsdomain="*" --networkid=90210 \
--syncmode=full --authrpc.addr=0.0.0.0 \
--authrpc.vhosts="*" --authrpc.jwtsecret=/tmp/jwtsecret \
--bootnodes="enode://80485311e1f22ab86630db23d5d77b7c67d535c7c2aa6df99f10b63250602b230093143b49b40640b227b97eb226c01eaed5a4eb5d66349d78371515b243f4cb@134.122.74.110:30303"
```
6. Send the manual RPC commands in order to trigger the sync without a consensus client:
Open another terminal window.
6.1 if `nc` isn't available on the system, install it:
```
$ sudo apt install netcat
```
6.2 send the `newPayload` message:
```
$ nc -U $PWD/execution/geth/geth.ipc
{
"jsonrpc": "2.0",
"method": "engine_newPayloadV1",
"params": [
{
"parentHash": "0x5f6bbad101d987e35abf1b9c63ee1cf9ad52b1c1eaddcb4629b167ca02817183",
"feeRecipient": "0xf97e180c050e5ab072211ad2c213eb5aee4df134",
"stateRoot": "0x20b6dba95018738d22d7ae96207e922a7808d4a6db80847c8ca428196a523c34",
"receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"prevRandao": "0xda0826ebd01f23a11f4fa04c7a8c23e3776f286c37bb7767dece0fcfa541c184",
"blockNumber": "0x1ee8c",
"gasLimit": "0x1c9c380",
"gasUsed": "0x0",
"timestamp": "0x63b47aa0",
"extraData": "0x",
"baseFeePerGas": "0x7",
"blockHash": "0xcd9ec23b8c3d0ddecd7ca502c9c23aa820b01252a6260a6095ae1ea0f8211092",
"transactions": []
}
],
"id": 758464
}
```
the response will be `{"jsonrpc":"2.0","id":758464,"result":{"status":"SYNCING","latestValidHash":null,"validationError":null}}
`, type `Ctrl+C` to exit `nc`
6.3 Send the `forkchoiceUpdated` message:
```
$ nc -U $PWD/execution/geth/geth.ipc
{
"jsonrpc": "2.0",
"method": "engine_forkchoiceUpdatedV1",
"params": [
{
"headBlockHash": "0xcd9ec23b8c3d0ddecd7ca502c9c23aa820b01252a6260a6095ae1ea0f8211092",
"safeBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"finalizedBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
},
null
],
"id": 758465
}
```
The response will be `{"jsonrpc":"2.0","id":758465,"result":{"payloadStatus":{"status":"SYNCING","latestValidHash":null,"validationError":null},"payloadId":null}}`, type `Ctrl+C` to exit.
Sync should start in the first window where geth is running.