owned this note
owned this note
Published
Linked with GitHub
# Prysm x Geth EIP4844 Interop
## Prysm setup
Clone the `eip4844` branch in the Prysm repo and build the binaries
```shell=
$ git clone https://github.com/prysmaticlabs/prysm.git
$ cd prysm
$ git checkout eip4844
$ bazel build //cmd/prysmctl
$ bazel build //cmd/beacon-chain
$ bazel build //cmd/validator
$ cd ../
```
## Geth setup
Clone the `eip-4844` branch in `mdehoog`'s geth repo and build the binary
```shell=
$ git clone https://github.com/mdehoog/go-ethereum.git
$ cd go-ethereum
$ git checkout eip-4844
$ make geth
```
## Create the config files
Create the following config files and remember the location of each config file :point_down:
Create a `genesis.json` file and remember path as `$PATH_TO_GENESIS`
```jsonld=
{
"config": {
"ChainName": "l1_chain",
"chainId": 32382,
"consensus": "clique",
"homesteadBlock": 0,
"daoForkSupport": true,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"muirGlacierBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"terminalBlockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"arrowGlacierBlock": 0,
"grayGlacierBlock": 0,
"shanghaiTime": XXX,
"shardingForkTime": YYY,
"clique": {
"period": 5,
"epoch": 30000
},
"terminalTotalDifficulty": 25
},
"difficulty": "1",
"gasLimit": "30000000",
"extradata": "0x0000000000000000000000000000000000000000000000000000000000000000123463a4B065722E99115D6c222f267d9cABb5240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"0x4242424242424242424242424242424242424242": {
"balance": "0",
"code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100b6578063621fd130146101e3578063c5f2892f14610273575b600080fd5b34801561005057600080fd5b5061009c6004803603602081101561006757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916906020019092919050505061029e565b604051808215151515815260200191505060405180910390f35b6101e1600480360360808110156100cc57600080fd5b81019080803590602001906401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b90919293919293908035906020019064010000000081111561013e57600080fd5b82018360208201111561015057600080fd5b8035906020019184600183028401116401000000008311171561017257600080fd5b90919293919293908035906020019064010000000081111561019357600080fd5b8201836020820111156101a557600080fd5b803590602001918460018302840111640100000000831117156101c757600080fd5b909192939192939080359060200190929190505050610370565b005b3480156101ef57600080fd5b506101f8610fd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561023857808201518184015260208101905061021d565b50505050905090810190601f1680156102655780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561027f57600080fd5b50610288610fe2565b6040518082815260200191505060405180910390f35b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061036957507f85640907000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b603087879050146103cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806116ec6026913960400191505060405180910390fd5b60208585905014610428576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806116836036913960400191505060405180910390fd5b60608383905014610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061175f6029913960400191505060405180910390fd5b670de0b6b3a76400003410156104e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806117396026913960400191505060405180910390fd5b6000633b9aca0034816104f457fe5b061461054b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806116b96033913960400191505060405180910390fd5b6000633b9aca00348161055a57fe5b04905067ffffffffffffffff80168111156105c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806117126027913960400191505060405180910390fd5b60606105cb82611314565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a610600602054611314565b60405180806020018060200180602001806020018060200186810386528e8e82818152602001925080828437600081840152601f19601f82011690508083019250505086810385528c8c82818152602001925080828437600081840152601f19601f82011690508083019250505086810384528a818151815260200191508051906020019080838360005b838110156106a657808201518184015260208101905061068b565b50505050905090810190601f1680156106d35780820380516001836020036101000a031916815260200191505b508681038352898982818152602001925080828437600081840152601f19601f820116905080830192505050868103825287818151815260200191508051906020019080838360005b8381101561073757808201518184015260208101905061071c565b50505050905090810190601f1680156107645780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b6040516020018084848082843780830192505050826fffffffffffffffffffffffffffffffff19166fffffffffffffffffffffffffffffffff1916815260100193505050506040516020818303038152906040526040518082805190602001908083835b6020831061080e57805182526020820191506020810190506020830392506107eb565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610850573d6000803e3d6000fd5b5050506040513d602081101561086557600080fd5b8101908080519060200190929190505050905060006002808888600090604092610891939291906115da565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108eb57805182526020820191506020810190506020830392506108c8565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561092d573d6000803e3d6000fd5b5050506040513d602081101561094257600080fd5b8101908080519060200190929190505050600289896040908092610968939291906115da565b6000801b604051602001808484808284378083019250505082815260200193505050506040516020818303038152906040526040518082805190602001908083835b602083106109cd57805182526020820191506020810190506020830392506109aa565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610a0f573d6000803e3d6000fd5b5050506040513d6020811015610a2457600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610a8e5780518252602082019150602081019050602083039250610a6b565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ad0573d6000803e3d6000fd5b5050506040513d6020811015610ae557600080fd5b810190808051906020019092919050505090506000600280848c8c604051602001808481526020018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610b615780518252602082019150602081019050602083039250610b3e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610ba3573d6000803e3d6000fd5b5050506040513d6020811015610bb857600080fd5b8101908080519060200190929190505050600286600060401b866040516020018084805190602001908083835b60208310610c085780518252602082019150602081019050602083039250610be5565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610c935780518252602082019150602081019050602083039250610c70565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610cd5573d6000803e3d6000fd5b5050506040513d6020811015610cea57600080fd5b810190808051906020019092919050505060405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610d545780518252602082019150602081019050602083039250610d31565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610d96573d6000803e3d6000fd5b5050506040513d6020811015610dab57600080fd5b81019080805190602001909291905050509050858114610e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605481526020018061162f6054913960600191505060405180910390fd5b6001602060020a0360205410610e77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061160e6021913960400191505060405180910390fd5b60016020600082825401925050819055506000602054905060008090505b6020811015610fb75760018083161415610ec8578260008260208110610eb757fe5b018190555050505050505050610fc7565b600260008260208110610ed757fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310610f335780518252602082019150602081019050602083039250610f10565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa158015610f75573d6000803e3d6000fd5b5050506040513d6020811015610f8a57600080fd5b8101908080519060200190929190505050925060028281610fa757fe5b0491508080600101915050610e95565b506000610fc057fe5b5050505050505b50505050505050565b6060610fdd602054611314565b905090565b6000806000602054905060008090505b60208110156111d057600180831614156110e05760026000826020811061101557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b60208310611071578051825260208201915060208101905060208303925061104e565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156110b3573d6000803e3d6000fd5b5050506040513d60208110156110c857600080fd5b810190808051906020019092919050505092506111b6565b600283602183602081106110f057fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061114b5780518252602082019150602081019050602083039250611128565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa15801561118d573d6000803e3d6000fd5b5050506040513d60208110156111a257600080fd5b810190808051906020019092919050505092505b600282816111c057fe5b0491508080600101915050610ff2565b506002826111df602054611314565b600060401b6040516020018084815260200183805190602001908083835b6020831061122057805182526020820191506020810190506020830392506111fd565b6001836020036101000a0380198251168184511680821785525050505050509050018267ffffffffffffffff191667ffffffffffffffff1916815260180193505050506040516020818303038152906040526040518082805190602001908083835b602083106112a55780518252602082019150602081019050602083039250611282565b6001836020036101000a038019825116818451168082178552505050505050905001915050602060405180830381855afa1580156112e7573d6000803e3d6000fd5b5050506040513d60208110156112fc57600080fd5b81019080805190602001909291905050509250505090565b6060600867ffffffffffffffff8111801561132e57600080fd5b506040519080825280601f01601f1916602001820160405280156113615781602001600182028036833780820191505090505b50905060008260c01b90508060076008811061137957fe5b1a60f81b8260008151811061138a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806006600881106113c657fe5b1a60f81b826001815181106113d757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060056008811061141357fe5b1a60f81b8260028151811061142457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060046008811061146057fe5b1a60f81b8260038151811061147157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806003600881106114ad57fe5b1a60f81b826004815181106114be57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350806002600881106114fa57fe5b1a60f81b8260058151811061150b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060016008811061154757fe5b1a60f81b8260068151811061155857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060006008811061159457fe5b1a60f81b826007815181106115a557fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b600080858511156115ea57600080fd5b838611156115f757600080fd5b600185028301915084860390509450949250505056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220230afd4b6e3551329e50f1239e08fa3ab7907b77403c4f237d9adf679e8e43cf64736f6c634300060b0033"
},
"0x123463a4B065722E99115D6c222f267d9cABb524": {
"balance": "20000000000000000000000"
},
"0x5678E9E827B3be0E3d4b910126a64a697a148267": {
"balance": "20000000000000000000000"
},
"0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266": {
"balance": "10000000000000000000000"
},
"0x70997970c51812dc3a010c7d01b50e0d17dc79c8": {
"balance": "10000000000000000000000"
},
"0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc": {
"balance": "10000000000000000000000"
},
"0x90f79bf6eb2c4f870365e785982e1f101e93b906": {
"balance": "10000000000000000000000"
},
"0x15d34aaf54267db7d7c367839aaf71a00a2c6a65": {
"balance": "10000000000000000000000"
},
"0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc": {
"balance": "10000000000000000000000"
},
"0x976ea74026e726554db657fa54763abd0c3a0aa9": {
"balance": "10000000000000000000000"
},
"0x14dc79964da2c08b23698b3d3cc7ca32193d9955": {
"balance": "10000000000000000000000"
},
"0x23618e81e3f5cdf7f54c3d65f7fbc0abf5b21e8f": {
"balance": "10000000000000000000000"
},
"0xa0ee7a142d267c1f36714e4a8f75612f20a79720": {
"balance": "10000000000000000000000"
},
"0xbcd4042de499d14e55001ccbb24a551f3b954096": {
"balance": "10000000000000000000000"
},
"0x71be63f3384f5fb98995898a86b02fb2426c5788": {
"balance": "10000000000000000000000"
},
"0xfabb0ac9d68b0b445fb7357272ff202c5651694a": {
"balance": "10000000000000000000000"
},
"0x1cbd3b2770909d4e10f157cabc84c7264073c9ec": {
"balance": "10000000000000000000000"
},
"0xdf3e18d64bc6a983f673ab319ccae4f1a57c7097": {
"balance": "10000000000000000000000"
},
"0xcd3b766ccdd6ae721141f452c550ca635964ce71": {
"balance": "10000000000000000000000"
},
"0x2546bcd3c84621e976d8185a91a922ae77ecec30": {
"balance": "10000000000000000000000"
},
"0xbda5747bfd65f08deb54cb465eb87d40e51b197e": {
"balance": "10000000000000000000000"
},
"0xdd2fd4581271e230360230f9337d5c0430bf44c0": {
"balance": "10000000000000000000000"
},
"0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199": {
"balance": "10000000000000000000000"
}
}
}
```
Note that `shanghaiTime` is hardcoded as `XXX` and `shardingForkTime` is hardcoded as `YYY`. They will be repalced later by real fork unix times
Create a `config.yml` file and remember path as `$PATH_TO_CONFIG`
```yml=
CONFIG_NAME: interop
PRESET_BASE: interop
# Genesis
GENESIS_FORK_VERSION: 0x20000089
# Altair
ALTAIR_FORK_EPOCH: 2
ALTAIR_FORK_VERSION: 0x20000090
# Merge
BELLATRIX_FORK_EPOCH: 3
BELLATRIX_FORK_VERSION: 0x20000091
TERMINAL_TOTAL_DIFFICULTY: 50
# Capella
CAPELLA_FORK_EPOCH: 4
CAPELLA_FORK_VERSION: 0x20000092
MAX_WITHDRAWALS_PER_PAYLOAD: 4
# EIP4844
EIP4844_FORK_EPOCH: 5
EIP4844_FORK_VERSION: 0x20000093
# Time parameters
SECONDS_PER_SLOT: 6
SLOTS_PER_EPOCH: 6
# Deposit contract
DEPOSIT_CONTRACT_ADDRESS: 0x4242424242424242424242424242424242424242
```
Create a `jwtsecret.txt` file and remember path as `$PATH_TO_JWTSECRET`
```
0xfad2709d0bb03bf0e8ba3c99bea194575d3e98863133d1af638ed056d1d59345
```
Within your geth datadir, you can to include the following keystore file `UTC--2022-08-19T17-38-31.257380510Z--123463a4b065722e99115d6c222f267d9cabb524`. That will enable you to unlock and mine later
```
{"address":"123463a4b065722e99115d6c222f267d9cabb524","crypto":{"cipher":"aes-128-ctr","ciphertext":"93b90389b855889b9f91c89fd15b9bd2ae95b06fe8e2314009fc88859fc6fde9","cipherparams":{"iv":"9dc2eff7967505f0e6a40264d1511742"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"c07503bb1b66083c37527cd8f06f8c7c1443d4c724767f625743bd47ae6179a4"},"mac":"6d359be5d6c432d5bbb859484009a4bf1bd71b76e89420c380bd0593ce25a817"},"id":"622df904-0bb1-4236-b254-f1b8dfdff1ec","version":3}
```
## Interop time :tada:
:warning: We MUST launch the beacon node before geth; messing up the order will result in run time failure and you will have to start from scratch
1. Beacon node
2. Validator
3. Geth
### Start beacon node
First you will need to **CD to your Prysm directory**. Set up your genesis time and set up Shanghai hardfork time to 144 seconds later. Please fill in `$PATH_TO_GENESIS` to the location that you created earlier. Then Run the following:
```bash=
#!/bin/bash
GENESIS=$(($(date +%s) + 30)) # 120s until genesis, feel free to increase this to give you more time to everything
# The following are configureable too but you have to make sure they align.
# Take SECONDS_PER_SLOT * SLOTS_PER_EPOCH * CAPELLA_FORK_EPOCH for SHANGHAI
# Take SECONDS_PER_SLOT * SLOTS_PER_EPOCH * EIP4844_FORK_EPOCH for CANCUN
SHANGHAI=$(($GENESIS + 108))
CANCUN=$(($GENESIS + 144))
sed -i -e 's/XXX/'$SHANGHAI'/' $PATH_TO_GENSIS/genesis.json
sed -i -e 's/YYY/'$CANCUN'/' $PATH_TO_GENESIS/genesis.json
```
Within your Prysm directory. Please fill in `$PATH_TO_DATADIR`. Selection where you want the database to be
```bash=
bazel run //cmd/prysmctl -- testnet generate-genesis --num-validators=512 --output-ssz=$PATH_TO_DATADIR/genesis.ssz --chain-config-file=$PATH_TO_CONFIG/config.yml --genesis-time=$GENESIS
bazel run //cmd/beacon-chain -- \
--datadir=$PATH_TO_DATADIR \
--min-sync-peers=0 \
--force-clear-db \
--interop-genesis-state=$PATH_TO_DATADIR/genesis.ssz \
--interop-eth1data-votes \
--bootstrap-node= \
--chain-config-file=$PATH_TO_CONFIG/config.yml \
--chain-id=32382 \
--accept-terms-of-use \
--jwt-secret=$PATH_TO_JWTSECRET/jwtsecret.txt \
--suggested-fee-recipient=0x123463a4b065722e99115d6c222f267d9cabb524 \
--verbosity debug
```
### Start validator
Within your prysm directory, run the following to start the validator:
```bash=
bazel run //cmd/validator -- \
--datadir=$PATH_TO_DATADIR \
--accept-terms-of-use \
--interop-num-validators=512 \
--interop-start-index=0 \
--chain-config-file=$PATH_TO_CONFIG/config.yml
```
### Start geth
Last but not least, we need to start geth. **CD to your Geth directory**. You will need to find a location to store Geth data `$PATH_TO_GETH`. Then run the following:
```bash=
./build/bin/geth --datadir $PATH_TO_GETH init $PATH_TO_GENESIS/genesis.json
./build/bin/geth --http \
--datadir=$PATH_TO_GETH \
--nodiscover \
--syncmode=full \
--allow-insecure-unlock \
--mine \
--authrpc.jwtsecret=$PATH_TO_JWTSECRET/jwtsecret.txt
```
### How do you know it's working?
Genesis state generated
![](https://i.imgur.com/aB1yDZO.png)
Chain started (ignore unknown finalized root errors)
![](https://i.imgur.com/k7spneE.png)
Forked to Bellatrix and Merged :panda_face:
![](https://i.imgur.com/Ps66Q7Z.png)
Forked to EIP4844 :tada:
![](https://i.imgur.com/DXo7YI3.png)
### Test syncing with a secondary node
To add an additional beacon node to sync on the devnet using a few command with a few tweaks, in a new terminal window, enter:
```
curl localhost:8080/p2p
```
You should get an output similar to:
```
bootnode=[]
self=enr:-MK4QCxV5SEkUO1chqZDSqMChX5fTbqeas4PEJqZtzmcWqZOKpZN8ABVrQFTqHI74M9TKNjE6DPAAgyv5JydsQ6NfPqGAYKxymm8h2F0dG5ldHOI-7v9vd4GdE2EZXRoMpCMkQYoIAAAkf__________gmlkgnY0gmlwhAoAAEqJc2VjcDI1NmsxoQNZcfvPnVEfnKz-mFv285nkDzgRXRVujloXQ_tjuCNEbYhzeW5jbmV0cw-DdGNwgjLIg3VkcIIu4A,/ip4/10.0.0.74/tcp/13000/p2p/16Uiu2HAmJg9Sfy8bX4wyjZNTi8soJrdPt9E9pPzJSmewN5rLoRM6
```
Copy paste the part that starts with `/ip4`
```
/ip4/10.0.0.74/tcp/13000/p2p/16Uiu2HAmJg9Sfy8bX4wyjZNTi8soJrdPt9E9pPzJSmewN5rLoRM6
```
Then set this as an environment variable:
export PEER=/ip4/10.0.0.74/tcp/13000/p2p/16Uiu2HAmJg9Sfy8bX4wyjZNTi8soJrdPt9E9pPzJSmewN5rLoRM6
Then run your second beacon node with the additional parameters
```
--datadir=$PATH_TO_DATADIR \
--rpc-port=4001 \
--p2p-tcp-port=13001 \
--p2p-udp-port=12001 \
--grpc-gateway-port=3501 \
--monitoring-port=8001 \
--peer=$PEER --verbosity=debug
```
That's it! Dm me if you have any questions!
.oO