diff --git a/docs/amphora_catalyst_logs.png b/docs/amphora_catalyst_logs.png deleted file mode 100644 index e779e3733..000000000 Binary files a/docs/amphora_catalyst_logs.png and /dev/null differ diff --git a/docs/interop_merge.md b/docs/interop_merge.md index 1cd865fb8..3d4eb6111 100644 --- a/docs/interop_merge.md +++ b/docs/interop_merge.md @@ -1,72 +1,64 @@ -Nimbus passes phase 0, Altair, and Merge consensus spec tests in minimal and mainnet presets. - # How to run Catalyst -- Clone Geth: `git clone --branch merge-interop-spec https://github.com/MariusVanDerWijden/go-ethereum.git ~/execution-clients/go-ethereum` +- Clone Geth: `git clone --branch kintsugi-spec https://github.com/MariusVanDerWijden/go-ethereum.git ~/execution_clients/go-ethereum - Build Geth and Catalyst with `make geth` - Run `scripts/run-catalyst.sh` to run Catalyst. It listens on port 8545. # Verify Catalyst is working -- Clone Nimbus and check out the `amphora-merge-interop` branch +- Clone Nimbus and check out the `kintsugi` branch - Run `scripts/run-catalyst.sh`. This depends on the paths set up in the first section. If those are changed, adjust accordingly. - While the Geth console is running, run `scripts/check_merge_test_vectors.sh`. The results should be similar to ``` -engine_preparePayload response: {"jsonrpc":"2.0","id":67,"result":"0x0"} -engine_getPayload response: {"jsonrpc":"2.0","id":67,"result":{"blockHash":"0x7a694c5e6e372e6f865b073c101c2fba01f899f16480eb13f7e333a3b7e015bc","parentHash":"0xa0513a503d5bd6e89a144c3268e5b7e9da9dbf63df125a360e3950a7d0d67131","coinbase":"0x0000000000000000000000000000000000000000","stateRoot":"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45","receiptRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","random":"0x0000000000000000000000000000000000000000000000000000000000000000","blockNumber":"0x1","gasLimit":"0x989680","gasUsed":"0x0","timestamp":"0x5","extraData":"0x","baseFeePerGas":"0x0","transactions":[]}} -Execution test vectors for Merge passed +engine_forkchoiceUpdatedV1 response: {"jsonrpc":"2.0","id":67,"result":{"status":"SUCCESS","payloadId":"0xa247243752eb10b4"}} +engine_getPayloadV1 response: {"jsonrpc":"2.0","id":67,"result":{"parentHash":"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a","coinbase":"0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b","stateRoot":"0xca3149fa9e37db08d1cd49c9061db1002ef1cd58db2210f2115c8c989b2bdf45","receiptRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421","logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","random":"0x0000000000000000000000000000000000000000000000000000000000000000","blockNumber":"0x1","gasLimit":"0x1c9c380","gasUsed":"0x0","timestamp":"0x5","extraData":"0x","baseFeePerGas":"0x7","blockHash":"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858","transactions":[]}} +engine_executePayloadV1 response: {"jsonrpc":"2.0","id":67,"result":{"status":"VALID","latestValidHash":"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858"}} +engine_forkchoiceUpdatedV1 response: {"jsonrpc":"2.0","id":67,"result":{"status":"SUCCESS","payloadId":null}} +kintsugi test vectors passed ``` - If issues present themselves here, or when Nimbus attempts to use the API, one can `debug.verbosity(4)` console command in Catalyst. # Verify that Nimbus runs through the same examples +- Ensure `tests/test_merge_vectors.nim` points to the correct Web3 URL, e.g.: +``` +diff --git a/tests/test_merge_vectors.nim b/tests/test_merge_vectors.nim +index 7eedb46d..1a573c80 100644 +--- a/tests/test_merge_vectors.nim ++++ b/tests/test_merge_vectors.nim +@@ -12,7 +12,7 @@ import + + suite "Merge test vectors": + let web3Provider = (waitFor Web3DataProvider.new( +- default(Eth1Address), "ws://127.0.0.1:8551")).get ++ default(Eth1Address), "ws://127.0.0.1:8546")).get + + test "getPayload, executePayload, and forkchoiceUpdated": + const feeRecipient = +``` + - Run `./env.sh nim c -r tests/test_merge_vectors.nim`. It should show output akin to: ``` [Suite] Merge test vectors -DBG 2021-10-01 14:56:56.127+00:00 Message sent to RPC server topics="JSONRPC-HTTP-CLIENT" tid=354460 file=httpclient.nim:191 address=127.0.0.1:8545 msg_len=308 -DBG 2021-10-01 14:56:56.128+00:00 Message sent to RPC server topics="JSONRPC-HTTP-CLIENT" tid=354460 file=httpclient.nim:191 address=127.0.0.1:8545 msg_len=70 -DBG 2021-10-01 14:56:56.128+00:00 Message sent to RPC server topics="JSONRPC-HTTP-CLIENT" tid=354460 file=httpclient.nim:191 address=127.0.0.1:8545 msg_len=1193 -DBG 2021-10-01 14:56:56.129+00:00 Message sent to RPC server topics="JSONRPC-HTTP-CLIENT" tid=354460 file=httpclient.nim:191 address=127.0.0.1:8545 msg_len=172 - [OK] preparePayload, getPayload, executePayload, and consensusValidated -DBG 2021-10-01 14:56:56.129+00:00 Message sent to RPC server topics="JSONRPC-HTTP-CLIENT" tid=354460 file=httpclient.nim:191 address=127.0.0.1:8545 msg_len=74 -{"code":5,"message":"unknown payload"} - [OK] getPayload unknown payload -DBG 2021-10-01 14:56:56.129+00:00 Message sent to RPC server topics="JSONRPC-HTTP-CLIENT" tid=354460 file=httpclient.nim:191 address=127.0.0.1:8545 msg_len=172 + [OK] getPayload, executePayload, and forkchoiceUpdated ``` # How to run Nimbus local testnet with Catalyst -- Check out branch `amphora-merge-interop` +- Check out branch `kintsugi` - Run (and keep running) `./scripts/run-catalyst.sh`. It should look something like ![./amphora_catalyst_run.png](./amphora_catalyst_run.png) - - Run `./scripts/launch_local_testnet.sh --preset minimal --nodes 4 --disable-htop --stop-at-epoch 7 -- --verify-finalization --discv5:no` This creates a 4-node local testnet with 128 validators. The Nimbus console output will be similar to -``` -NOT 2021-10-02 07:14:01.809+02:00 Generating deposits tid=695415 file=keystore_management.nim:441 totalNewValidators=128 validatorsDir=local_testnet_data/validators secretsDir=local_testnet_data/secrets -NOT 2021-10-02 07:14:41.840+02:00 Deposit data written tid=695415 file=deposit_contract.nim:222 filename=local_testnet_data/deposits.json -Wrote local_testnet_data/genesis.ssz -{"lvl":"WRN","ts":"2021-10-02 07:14:41.849+02:00","msg":"Using insecure password to lock networking key","tid":695608,"file":"keystore_management.nim:372","key_path":"local_testnet_data/network_key.json"} -{"lvl":"INF","ts":"2021-10-02 07:14:42.526+02:00","msg":"New network key storage was created","topics":"networking","tid":695608,"file":"eth2_network.nim:1763","key_path":"local_testnet_data/network_key.json","network_public_key":"0802122102cedeccf39e6a247b8911ccc01716befb1501546b3f7bc9c3c16dbea64de3b3f3"} -Wrote local_testnet_data/bootstrap_nodes.txt -Wrote local_testnet_data/config.yaml: -PRESET_BASE: minimal -MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 128 -MIN_GENESIS_TIME: 0 -GENESIS_DELAY: 10 -DEPOSIT_CONTRACT_ADDRESS: 0x0000000000000000000000000000000000000000 -ETH1_FOLLOW_DISTANCE: 1 -ALTAIR_FORK_EPOCH: 1 -MERGE_FORK_EPOCH: 2 -``` +![./nimbus_localhost_run.png](./nimbus_localhost_run.png) -Meanwhile, Nimbus is interacting with Geth/Catalyst in preparing, getting, executing, and marking as valid execution payloads: -![./amphora_catalyst_logs.png](./amphora_catalyst_logs.png) +Meanwhile, Nimbus is interacting with Geth/Catalyst in preparing, getting, and executing payloads: +![./kintsugi_catalyst_logs.png](./kintsugi_catalyst_logs.png) diff --git a/docs/kintsugi_catalyst_logs.png b/docs/kintsugi_catalyst_logs.png new file mode 100644 index 000000000..623d961a1 Binary files /dev/null and b/docs/kintsugi_catalyst_logs.png differ diff --git a/docs/nimbus_localhost_run.png b/docs/nimbus_localhost_run.png new file mode 100644 index 000000000..69ed694d3 Binary files /dev/null and b/docs/nimbus_localhost_run.png differ diff --git a/scripts/check_merge_test_vectors.sh b/scripts/check_merge_test_vectors.sh index d6a5ad405..e7349f42b 100755 --- a/scripts/check_merge_test_vectors.sh +++ b/scripts/check_merge_test_vectors.sh @@ -41,7 +41,7 @@ empirical_resp_execute_payload='{"jsonrpc":"2.0","id":67,"result":{"status":"VAL resp_update_forkchoice=$(curl -sX POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"engine_forkchoiceUpdatedV1","params":[{"headBlockHash":"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "safeBlockHash":"0x3559e851470f6e7bbed1db474980683e8c315bfce99b2a6ef47c057c04de7858", "finalizedBlockHash":"0x3b8fb240d288781d4aac94d3fd16809ee413bc99294a085798a589dae51ddd4a"}, null],"id":67}' http://localhost:8545) echo "engine_forkchoiceUpdatedV1 response: ${resp_update_forkchoice}" -expected_resp_update_forkchoice='{"jsonrpc":"2.0","id":67,"result":{"status":"SUCCESS","payloadId":"0x"}}' +expected_resp_update_forkchoice='{"jsonrpc":"2.0","id":67,"result":{"status":"SUCCESS","payloadId":null}}' [[ ${resp_update_forkchoice} == "${expected_resp_update_forkchoice}" ]] || (echo "Unexpected response to engine_forkchoiceUpdatedV1"; false) echo "kintsugi test vectors passed" diff --git a/tests/test_merge_vectors.nim b/tests/test_merge_vectors.nim index 7eedb46d8..1a573c806 100644 --- a/tests/test_merge_vectors.nim +++ b/tests/test_merge_vectors.nim @@ -12,7 +12,7 @@ import suite "Merge test vectors": let web3Provider = (waitFor Web3DataProvider.new( - default(Eth1Address), "ws://127.0.0.1:8551")).get + default(Eth1Address), "ws://127.0.0.1:8546")).get test "getPayload, executePayload, and forkchoiceUpdated": const feeRecipient =