├── .env.example ├── .gitignore ├── Makefile ├── README.md ├── config ├── .gitignore ├── boot_enr.txt ├── bootstrap_nodes.txt ├── cl_nodes.list ├── config.yaml ├── deploy_block.txt ├── deposit_contract.txt ├── deposit_contract_block.txt ├── el_nodes.list ├── genesis.ssz └── jwt.hex ├── docker-compose.yaml ├── genesis.json ├── geth-script.sh ├── keys └── .gitignore ├── lighthouse-script.sh └── validator.yaml /.env.example: -------------------------------------------------------------------------------- 1 | ## BOOTNODE Configuration 2 | NETWORK_ID=8899 3 | TARGET_PEERS=100 4 | NODE_PUBLIC_IP=xx.xx.xx.xxx 5 | 6 | ## VALIDATOR Configuration 7 | NODE_GRAFFITI=JBCValidatorClient 8 | PUBLIC_BEACON_NODE="https://metrabyte-cl.jibchain.net/" 9 | FEE_RECIPIENT=0x00000000000 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | data -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | generate_hex: 2 | jwt=$$(openssl rand -hex 32) && echo "0x$$jwt" > config/jwt.hex 3 | 4 | node: 5 | docker compose up -d 6 | 7 | env: 8 | cp .env.example .env 9 | 10 | import-validator-key: 11 | docker run -ti --rm -v ./data/lighthouse:/root/lighthouse -v ./data/lighthouse/custom/validators:/root/.lighthouse/custom/validators -v ./config:/config -v ./keys:/keys sigp/lighthouse lighthouse account validator import --directory=/keys --testnet-dir=/config 12 | 13 | run-validator: 14 | docker compose -f validator.yaml up -d 15 | 16 | stop-validator: 17 | docker compose -f validator.yaml down 18 | 19 | validator-logs: 20 | docker compose -f validator.yaml logs -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The JBC Blockchain Network 2 | 3 | ## 🏃 How to run a node 4 | 1. Make an environment file 5 | ```sh 6 | make env 7 | ``` 8 | 9 | 2. Open the `.env` file to edit your machine's public IP address 10 | ```sh 11 | # Change to your IP address 12 | NODE_PUBLIC_IP=xx.xx.xx.xxx 13 | ``` 14 | 15 | 3. Generate new `jwt.hex` 16 | ```sh 17 | make generate_hex 18 | cat config/jwt.hex # check new jwt.hex 19 | ``` 20 | 21 | 4. Run a node 22 | ```sh 23 | make node 24 | ``` 25 | 26 | ## 📁 How to check execution and consensus logs 27 | - All logs 28 | ``` 29 | docker compose logs -f 30 | ``` 31 | 32 | - Execution logs 33 | ``` 34 | docker logs -f jbc-execution 35 | ``` 36 | 37 | - Consensus logs 38 | ``` 39 | docker logs -f jbc-consensus 40 | ``` 41 | -------------------------------------------------------------------------------- /config/.gitignore: -------------------------------------------------------------------------------- 1 | jwt.hex -------------------------------------------------------------------------------- /config/boot_enr.txt: -------------------------------------------------------------------------------- 1 | - enr:-MS4QJAuI4oIY-ZUi4rAD7Ct82_f7siNTju3q2Kn_YRub7TOD498ikqKboIoaEk7GRCQyhDfkUQNdISoxH9atrTV-P4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsfv6EcXVpY4IjKYlzZWNwMjU2azGhA8EoNyqOI_8Yg-mRQbZglc6Nx5JALRlAbul7CenJcrW9iHN5bmNuZXRzAIN0Y3CCIyiDdWRwgiMo 2 | -------------------------------------------------------------------------------- /config/bootstrap_nodes.txt: -------------------------------------------------------------------------------- 1 | - enr:-MS4QJAuI4oIY-ZUi4rAD7Ct82_f7siNTju3q2Kn_YRub7TOD498ikqKboIoaEk7GRCQyhDfkUQNdISoxH9atrTV-P4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsfv6EcXVpY4IjKYlzZWNwMjU2azGhA8EoNyqOI_8Yg-mRQbZglc6Nx5JALRlAbul7CenJcrW9iHN5bmNuZXRzAIN0Y3CCIyiDdWRwgiMo 2 | -------------------------------------------------------------------------------- /config/cl_nodes.list: -------------------------------------------------------------------------------- 1 | enr:-MS4QO7nnkhvlmO8PjGbX89mCWKoB8RVmvm3yYrlchLWW1lpEsfT0ONYqezLoPLtbJyeMHHXdB1Y0T3Se6KdUF4SXyYTh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhIe1BPOEcXVpY4IjjYlzZWNwMjU2azGhAqAFlsx85u3GpSrGQ7Q0Vdgb8OCyvQYcJqgkfF57TPr-iHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QIwO0sSQdahvgPa8UlFBXV08pfRgsue7W_KlkcHfB4mbBbDrHAfpPlU8u3DXr2_ixHCqRGkkDXu5osJiJUN97G0Qh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhFjG5oOEcXVpY4IjjYlzZWNwMjU2azGhAzwikSxEp5_DivEM4y6byo715UzqwHwZAp0q3i8NYpTxiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QB9GpZD2SygbX7KByaW55l7S0p3FGAvxLbYrgUiRoFcHU9XZDQI6zMxRi64syMHxGiK8f0L1m9yIzaFgUh2Ld-wNh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEEVwNyEcXVpY4IjjYlzZWNwMjU2azGhA28nHNdJuzEef0O-Y0vpUuCAqqJixKDy-k3hWQr4THD6iHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QAVkgWC0lg43GNi5t76pim5yJsqZgnT_HI0QzZmmsfUbLVxeZwP54Tv5jX1kyr8295fDevjjK1L7N2MxN3v1OycEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEEVwsaEcXVpY4IjjYlzZWNwMjU2azGhAm-JkY-JJ2ikAxNgvlK41IxG7GVYiW21Qg4jdn4gDgaCiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QL5I43Gm89DXsQY5YeDdKHyNCXst_YhTsB4nFjdg2-B0GixOC-ZMesJlLfrhj-Kiu7OMrT5ylooVnKOlQ0WLNqMOh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhF_ZOg6EcXVpY4IjjYlzZWNwMjU2azGhAmcg3uon6pHcIFyu9YZ5YecjQzzDFODdu4azseJffXtZiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QBGksw7SJl5Vt2ID-9PinTc0WKjdOZJQOzqdPN5xoy-OJTei-kub3l_Y75y9vI6lGq9dj1tqRSCqM9dsufSuFfwNh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhF6C3pGEcXVpY4IjjYlzZWNwMjU2azGhA7t0KXG_vZf7AyZ_HeGWDM7PHxInwYkFo7D63spS2MvliHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QFKB8W_MmHLZQtvc-20v7BsFg1j6MIfvxSYaYPGk6Z8aALu8KjGtdDmaG4lBnTCFGc0ASy8OMLjdSkmiUgMFr2QEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhMPJaaaEcXVpY4IjjYlzZWNwMjU2azGhArpfoVPPePJdNZ8mOAa_-d9Z5kKc2Ged6KZlnn6wP7FPiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QBoYhwy-NTmmpAYJJ2isdVxJ3oZ40OfEfPG1S2C4irJIdj7GuOK3GCueoQJX0BxpGKquhn6fYBbzXvsjFiZ9ISUEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsS_yEcXVpY4IjjYlzZWNwMjU2azGhA99ojsASmqaD00ClocBRn9bGGLYHoO4lgBKMUMdnFIzIiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QPwUJVI5JcSCq6l8zBsNRU_dJgJOxJa8mJt-Fo9pCFpTIxczXzE3gsKW3F6lBux5y8e1baj7NHDO4Xu4hHwoGnsPh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFseHSEcXVpY4IjjYlzZWNwMjU2azGhAlfRbk8emZxrLAQ4CK3bjz1z2Uzd8BXEQiNRSsGcaQSPiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QEJHYd8PS1XwoqvaC7EsopJzX15BhWc_awfARkAkC8LDAJyP2oHZ_0X7HHn0H2rTj9iQwcNAQXfInu5KISAZ2MsHh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsw36EcXVpY4IjjYlzZWNwMjU2azGhAqBZMAhpY-HDiRu88T-vSXYym07hZoLz-bMT08a8RKwoiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QNJIa24yHtUxoQO_Xp9qEZsrbsuG-wYDhzNlFalDhdHsBLcOi2AUsG3vSeAYpTrVl_2ZMXZsUnf3jv8h1p043OgEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsydKEcXVpY4IjjYlzZWNwMjU2azGhA9Wten_DWVK3aUuVfJyqwV9L53pQsBl_V9BQ6lTh2Nd7iHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QMEiRrcvs_XIFzUkvFXedhceYBzwSrH8GkrYRnmpGi67TsyS7ss1T8rVzW8MhwKHVvNYUp5Xa_tjTBOM7_qv2sIEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhIe1PiiEcXVpY4IjjYlzZWNwMjU2azGhA0IRaEEacgxwPsdXTXkRWuKO-sh36F3PtzR8Z1TawKuAiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QLciafMSIpmQ21-E-aOQH3mJwqO6pcq-SoZQuoEJbDxXS0sUSRQDWw0Tn83qCPnUFObnOc-IpOeRngfSfXkP3aIEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhF_ZepaEcXVpY4IjjYlzZWNwMjU2azGhAx40S7XpXa_GS9tQvYwp2tdZWYYASCYGaSz_ptyRikAxiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QO7nnkhvlmO8PjGbX89mCWKoB8RVmvm3yYrlchLWW1lpEsfT0ONYqezLoPLtbJyeMHHXdB1Y0T3Se6KdUF4SXyYTh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhIe1BPOEcXVpY4IjjYlzZWNwMjU2azGhAqAFlsx85u3GpSrGQ7Q0Vdgb8OCyvQYcJqgkfF57TPr-iHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QIwO0sSQdahvgPa8UlFBXV08pfRgsue7W_KlkcHfB4mbBbDrHAfpPlU8u3DXr2_ixHCqRGkkDXu5osJiJUN97G0Qh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhFjG5oOEcXVpY4IjjYlzZWNwMjU2azGhAzwikSxEp5_DivEM4y6byo715UzqwHwZAp0q3i8NYpTxiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QB9GpZD2SygbX7KByaW55l7S0p3FGAvxLbYrgUiRoFcHU9XZDQI6zMxRi64syMHxGiK8f0L1m9yIzaFgUh2Ld-wNh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEEVwNyEcXVpY4IjjYlzZWNwMjU2azGhA28nHNdJuzEef0O-Y0vpUuCAqqJixKDy-k3hWQr4THD6iHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QAVkgWC0lg43GNi5t76pim5yJsqZgnT_HI0QzZmmsfUbLVxeZwP54Tv5jX1kyr8295fDevjjK1L7N2MxN3v1OycEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEEVwsaEcXVpY4IjjYlzZWNwMjU2azGhAm-JkY-JJ2ikAxNgvlK41IxG7GVYiW21Qg4jdn4gDgaCiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QL5I43Gm89DXsQY5YeDdKHyNCXst_YhTsB4nFjdg2-B0GixOC-ZMesJlLfrhj-Kiu7OMrT5ylooVnKOlQ0WLNqMOh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhF_ZOg6EcXVpY4IjjYlzZWNwMjU2azGhAmcg3uon6pHcIFyu9YZ5YecjQzzDFODdu4azseJffXtZiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QBGksw7SJl5Vt2ID-9PinTc0WKjdOZJQOzqdPN5xoy-OJTei-kub3l_Y75y9vI6lGq9dj1tqRSCqM9dsufSuFfwNh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhF6C3pGEcXVpY4IjjYlzZWNwMjU2azGhA7t0KXG_vZf7AyZ_HeGWDM7PHxInwYkFo7D63spS2MvliHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QFKB8W_MmHLZQtvc-20v7BsFg1j6MIfvxSYaYPGk6Z8aALu8KjGtdDmaG4lBnTCFGc0ASy8OMLjdSkmiUgMFr2QEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhMPJaaaEcXVpY4IjjYlzZWNwMjU2azGhArpfoVPPePJdNZ8mOAa_-d9Z5kKc2Ged6KZlnn6wP7FPiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QBoYhwy-NTmmpAYJJ2isdVxJ3oZ40OfEfPG1S2C4irJIdj7GuOK3GCueoQJX0BxpGKquhn6fYBbzXvsjFiZ9ISUEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsS_yEcXVpY4IjjYlzZWNwMjU2azGhA99ojsASmqaD00ClocBRn9bGGLYHoO4lgBKMUMdnFIzIiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QPwUJVI5JcSCq6l8zBsNRU_dJgJOxJa8mJt-Fo9pCFpTIxczXzE3gsKW3F6lBux5y8e1baj7NHDO4Xu4hHwoGnsPh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFseHSEcXVpY4IjjYlzZWNwMjU2azGhAlfRbk8emZxrLAQ4CK3bjz1z2Uzd8BXEQiNRSsGcaQSPiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QEJHYd8PS1XwoqvaC7EsopJzX15BhWc_awfARkAkC8LDAJyP2oHZ_0X7HHn0H2rTj9iQwcNAQXfInu5KISAZ2MsHh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsw36EcXVpY4IjjYlzZWNwMjU2azGhAqBZMAhpY-HDiRu88T-vSXYym07hZoLz-bMT08a8RKwoiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QNJIa24yHtUxoQO_Xp9qEZsrbsuG-wYDhzNlFalDhdHsBLcOi2AUsG3vSeAYpTrVl_2ZMXZsUnf3jv8h1p043OgEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhEFsydKEcXVpY4IjjYlzZWNwMjU2azGhA9Wten_DWVK3aUuVfJyqwV9L53pQsBl_V9BQ6lTh2Nd7iHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QMEiRrcvs_XIFzUkvFXedhceYBzwSrH8GkrYRnmpGi67TsyS7ss1T8rVzW8MhwKHVvNYUp5Xa_tjTBOM7_qv2sIEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhIe1PiiEcXVpY4IjjYlzZWNwMjU2azGhA0IRaEEacgxwPsdXTXkRWuKO-sh36F3PtzR8Z1TawKuAiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-MS4QLciafMSIpmQ21-E-aOQH3mJwqO6pcq-SoZQuoEJbDxXS0sUSRQDWw0Tn83qCPnUFObnOc-IpOeRngfSfXkP3aIEh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAY_TCCQACImf__________gmlkgnY0gmlwhF_ZepaEcXVpY4IjjYlzZWNwMjU2azGhAx40S7XpXa_GS9tQvYwp2tdZWYYASCYGaSz_ptyRikAxiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-Ma4QBGijIEMg5EN9koxm7yU7v0bEhj190ap6alZOzjgMItGEAAx8w2cTy0YNvegekIUnzPoMKFSWmNt6IkDwmUJLCmCAV6HYXR0bmV0c4hgAAAAAAAAAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEh7UE84RxdWljgiONiXNlY3AyNTZrMaECoAWWzHzm7calKsZDtDRV2Bvw4LK9BhwmqCR8XntM-v6Ic3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QJd4czLm-x7W4cKIEz_gJyVUiYk5V6NuXLo0Ae7JUZJBHGQsEZUFND4swGbPe8CWWjorClMXDrKYLqTryEYZJY-CAV2HYXR0bmV0c4gAAAAAAIABAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEQRXA3IRxdWljgiONiXNlY3AyNTZrMaEDbycc10m7MR5_Q75jS-lS4ICqomLEoPL6TeFZCvhMcPqIc3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-MS4QJ75XeHAfGqEoIZ4V6BqKTnAd2yRNLgnX2T108V8fRPcC8dKrMwLeuVs_yuemisIj7Watky5KkgunnhEKDkzXHo-h2F0dG5ldHOIAAAAYAAAAACEZXRoMpAY_TCCCACImS5cAAAAAAAAgmlkgnY0gmlwhEEVwsaEcXVpY4IjjYlzZWNwMjU2azGhA2tZR098hB2oCB-XUlM8GBvU-9nnxr_f_z_ap68dbAdfiHN5bmNuZXRzAIN0Y3CCI4yDdWRwgiOM,enr:-Ma4QHnxeamQF5phlajqslecwBT8VXlQEyLpqKp5Ww5M5uaHFw-mcG9tF8ADdJe3-7SJus2awSVUkRdjaWdpVxHdb7mCAVOHYXR0bmV0c4gAAAAAAAAAMIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEX9k6DoRxdWljgiONiXNlY3AyNTZrMaECZyDe6ifqkdwgXK71hnlh5yNDPMMU4N27hrOx4l99e1mIc3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QMcIwPVUqmY0pfqUxk6y0tb3_vcv3bEXhQL_Urb3hiYEYlYYw-yDXYPdy7zUNmuexbljw4PeDnJLON_JvqqKlyOCAVuHYXR0bmV0c4gAAAAAAAAAYIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEXoLekYRxdWljgiONiXNlY3AyNTZrMaEDu3Qpcb-9l_sDJn8d4ZYMzs8fEifBiQWjsPreylLYy-WIc3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QOLLOHUSCE77Z8YL8USEK3NY4rWFtkdigwKNUrhyvNjaLcGQ7Oa802Otco94xuEKehaGaVmFxPaNheSWlfTbnUCCAU2HYXR0bmV0c4gGAAAAAAAAAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEw8lppoRxdWljgiONiXNlY3AyNTZrMaECul-hU8948l01nyY4Br_531nmQpzYZ53opmWefrA_sU-Ic3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QMG_i24qX4OfEd6iAmjWHM6LcgVlPgbru5kwOwZ7iPgVOV3j-gmh8fKW0FYfpr-m1lQqrofWCrC_7TyJIRFXNaiCAUaHYXR0bmV0c4gAAAAMAAAAAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEQWxL_IRxdWljgiONiXNlY3AyNTZrMaED32iOwBKapoPTQKWhwFGf1sYYtgeg7iWAEoxQx2cUjMiIc3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QNx-uR2HULi-gJtAqHJNQ---0Q2MbOO5fzIcqHUAzOLvaHPrmvar37YysLyJCh8B9nt1EUcTa3gMTf27JDrQqpKCAVqHYXR0bmV0c4gAAAAAABgAAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEQWx4dIRxdWljgiONiXNlY3AyNTZrMaECV9FuTx6ZnGssBDgIrduPPXPZTN3wFcRCI1FKwZxpBI-Ic3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QFbYxrbEmBg3ZU1YkFz1PW4szGshiQUa2JPdCYUsK7AMNkK0eCxz1vhkPG2N1sOUxe7pDv47xRR1Q7aAHKlbA7eCAVOHYXR0bmV0c4gAMAAAAAAAAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEQWzJ0oRxdWljgiONiXNlY3AyNTZrMaED1a16f8NZUrdpS5V8nKrBX0vnelCwGX9X0FDqVOHY13uIc3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QOnb6oZClHVr58xWpDyD-TKwDDm6Hg69k8aLYl14X-a3J-_5ju807HMNosQaXBBt6ZoAMm9FfcfSb9Md7i2Uza6CAUuHYXR0bmV0c4gAwAAAAAAAAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEh7U-KIRxdWljgiONiXNlY3AyNTZrMaEDQhFoQRpyDHA-x1dNeRFa4o76yHfoXc-3NHxnVNrAq4CIc3luY25ldHMAg3RjcIIjjIN1ZHCCI4w,enr:-Ma4QCjA_DxmXMqXPPxJnNzcbXDzFcvbqrk-CO9AZXYoY9aWKu6aCZGZ8PZrXoSU0Biwckyopcs089OaxPCclDCzTK6CAVaHYXR0bmV0c4gAAMAAAAAAAIRldGgykBj9MIIIAIiZLlwAAAAAAACCaWSCdjSCaXCEX9l6loRxdWljgiONiXNlY3AyNTZrMaEDHjRLteldr8ZL21C9jCna11lZhgBIJgZpLP-m3JGKQDGIc3luY25ldHMAg3RjcIIjjIN1ZHCCI4w 2 | -------------------------------------------------------------------------------- /config/config.yaml: -------------------------------------------------------------------------------- 1 | # Extends the mainnet preset 2 | PRESET_BASE: 'mainnet' 3 | CONFIG_NAME: 'jibchain' # needs to exist because of Prysm. Otherwise it conflicts with mainnet genesis 4 | 5 | # Genesis 6 | # --------------------------------------------------------------- 7 | # `2**14` (= 16,384) 8 | MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 1 9 | # Friday, April 22, 2022 9:00:00 AM +UTC 10 | MIN_GENESIS_TIME: 1701158551 11 | GENESIS_FORK_VERSION: 0x10008899 12 | GENESIS_DELAY: 100 13 | 14 | 15 | # Forking 16 | # --------------------------------------------------------------- 17 | # Some forks are disabled for now: 18 | # - These may be re-assigned to another fork-version later 19 | # - Temporarily set to max uint64 value: 2**64 - 1 20 | 21 | # Altair 22 | ALTAIR_FORK_VERSION: 0x20008899 23 | ALTAIR_FORK_EPOCH: 1 24 | # Merge 25 | BELLATRIX_FORK_VERSION: 0x30008899 26 | BELLATRIX_FORK_EPOCH: 1 27 | TERMINAL_TOTAL_DIFFICULTY: 512048629250937967 28 | TERMINAL_BLOCK_HASH: 0x0000000000000000000000000000000000000000000000000000000000000000 29 | TERMINAL_BLOCK_HASH_ACTIVATION_EPOCH: 18446744073709551615 30 | 31 | # Capella 32 | CAPELLA_FORK_VERSION: 0x40008899 33 | CAPELLA_FORK_EPOCH: 1 34 | 35 | # Sharding 36 | SHARDING_FORK_VERSION: 0x70008899 37 | SHARDING_FORK_EPOCH: 18446744073709551615 38 | 39 | # Deneb 40 | DENEB_FORK_VERSION: 0x08008899 41 | DENEB_FORK_EPOCH: 23598 42 | 43 | # Time parameters 44 | # --------------------------------------------------------------- 45 | # 12 seconds 46 | SECONDS_PER_SLOT: 12 47 | # 14 (estimate from Eth1 mainnet) 48 | SECONDS_PER_ETH1_BLOCK: 14 49 | # 2**8 (= 256) epochs ~27 hours 50 | MIN_VALIDATOR_WITHDRAWABILITY_DELAY: 256 51 | # 2**8 (= 256) epochs ~27 hours 52 | SHARD_COMMITTEE_PERIOD: 256 53 | # 2**11 (= 2,048) Eth1 blocks ~8 hours 54 | ETH1_FOLLOW_DISTANCE: 2048 55 | 56 | 57 | # Validator cycle 58 | # --------------------------------------------------------------- 59 | # 2**2 (= 4) 60 | INACTIVITY_SCORE_BIAS: 4 61 | # 2**4 (= 16) 62 | INACTIVITY_SCORE_RECOVERY_RATE: 16 63 | # 2**4 * 10**9 (= 16,000,000,000) Gwei 64 | EJECTION_BALANCE: 16000000000 65 | # 2**2 (= 4) 66 | MIN_PER_EPOCH_CHURN_LIMIT: 4 67 | # 2**16 (= 65,536) 68 | CHURN_LIMIT_QUOTIENT: 65536 69 | # [New in Deneb:EIP7514] 2**3 (= 8) 70 | MAX_PER_EPOCH_ACTIVATION_CHURN_LIMIT: 8 71 | 72 | # Fork choice 73 | # --------------------------------------------------------------- 74 | # 40% 75 | PROPOSER_SCORE_BOOST: 40 76 | 77 | # Deposit contract 78 | # --------------------------------------------------------------- 79 | DEPOSIT_CHAIN_ID: 8899 80 | DEPOSIT_NETWORK_ID: 8899 81 | DEPOSIT_CONTRACT_ADDRESS: 0xe9364471539cD35D1911f844914c7DaBf7aeE92D 82 | 83 | # Networking 84 | # --------------------------------------------------------------- 85 | # `10 * 2**20` (= 10485760, 10 MiB) 86 | GOSSIP_MAX_SIZE: 10485760 87 | # `2**10` (= 1024) 88 | MAX_REQUEST_BLOCKS: 1024 89 | # `2**8` (= 256) 90 | EPOCHS_PER_SUBNET_SUBSCRIPTION: 256 91 | # `MIN_VALIDATOR_WITHDRAWABILITY_DELAY + CHURN_LIMIT_QUOTIENT // 2` (= 33024, ~5 months) 92 | MIN_EPOCHS_FOR_BLOCK_REQUESTS: 33024 93 | # `10 * 2**20` (=10485760, 10 MiB) 94 | MAX_CHUNK_SIZE: 10485760 95 | # 5s 96 | TTFB_TIMEOUT: 5 97 | # 10s 98 | RESP_TIMEOUT: 10 99 | ATTESTATION_PROPAGATION_SLOT_RANGE: 32 100 | # 500ms 101 | MAXIMUM_GOSSIP_CLOCK_DISPARITY: 500 102 | MESSAGE_DOMAIN_INVALID_SNAPPY: 0x00000000 103 | MESSAGE_DOMAIN_VALID_SNAPPY: 0x01000000 104 | # 2 subnets per node 105 | SUBNETS_PER_NODE: 2 106 | # 2**8 (= 64) 107 | ATTESTATION_SUBNET_COUNT: 64 108 | ATTESTATION_SUBNET_EXTRA_BITS: 0 109 | # ceillog2(ATTESTATION_SUBNET_COUNT) + ATTESTATION_SUBNET_EXTRA_BITS 110 | ATTESTATION_SUBNET_PREFIX_BITS: 6 111 | 112 | # Deneb 113 | # `2**7` (=128) 114 | MAX_REQUEST_BLOCKS_DENEB: 128 115 | # MAX_REQUEST_BLOCKS_DENEB * MAX_BLOBS_PER_BLOCK 116 | MAX_REQUEST_BLOB_SIDECARS: 768 117 | # `2**12` (= 4096 epochs, ~18 days) 118 | MIN_EPOCHS_FOR_BLOB_SIDECARS_REQUESTS: 4096 119 | # `6` 120 | BLOB_SIDECAR_SUBNET_COUNT: 6 121 | -------------------------------------------------------------------------------- /config/deploy_block.txt: -------------------------------------------------------------------------------- 1 | 2176957 2 | -------------------------------------------------------------------------------- /config/deposit_contract.txt: -------------------------------------------------------------------------------- 1 | 0xe9364471539cD35D1911f844914c7DaBf7aeE92D 2 | -------------------------------------------------------------------------------- /config/deposit_contract_block.txt: -------------------------------------------------------------------------------- 1 | 2200641 2 | -------------------------------------------------------------------------------- /config/el_nodes.list: -------------------------------------------------------------------------------- 1 | enode://90877302d81ba5daad07a795ec7130879af34aa112d117f9ff46aaae3dcd002b1f88eeffb0ba17dc25777313df0682bd6779f98c5ba13aa125fc2bd9d2366e8c@65.108.126.254:30303,enode://f06e9a7b61376bcd95df21cd6f624c46c62c8fe5b18faa96d85542bb08aa3af0c0726291cab36f30917e34ab35e0ba064ac811f5c4ac7e836d2ce95447975d5e@135.181.4.243:32323,enode://af679fdd2c099223a3a7eb361c45467bbd8f38bbceccb10775ae2a41c933c9edfd751f0df52faab356644c9ce7fe7cdfd091b9570da1384d16468901d6128c28@88.198.230.131:32323,enode://d72f4e721c183842339728da3ee63d4406bed2ce61bb053d613ccf3ccbae1fffaedeb3285675d0889577e0d284e61d1b240897c7bedadaf188bb7cdd89a55aa3@65.21.192.220:32323,enode://5519975ec8e34998d7d0a043facb1b355e3cad7f1ce7e9ba8e7527ef1d42be2a851382b7f2b8803391ea6b7c8e39f8921ce58452a540cc26c5d21861489629c8@65.21.194.198:32323,enode://78afa4dcdaac345d66fc13c1962ac2f16d1ea6769022a882cb0eda66e32c2887698ea1215d453764545e73e68559cc2fd1e9f202b18262a0d602267f04d5f261@95.217.58.14:32323,enode://a8f25666194c5d56516168040322f8a8a5dd501fff549845f8fce06f64f8553feec6fbacb70aa4e85f7a9361351e454e8498c817a227a854b9104a8dcb4c8ee7@94.130.222.145:32323,enode://b22a53a06bde223260ab9b0547fbe762ae4e22a15045df2302a5d4d804fd91889a235098c774afd0cde9ebdde9ff9cc88f9e4a0ccbf792fe6a76665eef66f028@195.201.105.166:32323,enode://fb6d8e33fa16949995c5f20479948bda9ede515334331da39e8e099053f563ac3472eddd29ecbe34a5088af0dec09b034617ad74181179084fbdf80fb37c323a@65.108.75.252:32323,enode://a94483cecbcd07fa8b1610af4b10586c650665679544a77bf57d0b6abfc5f6aec335a6e0e2cab4235599707cac3496f6d28b08806a169539a53021485aaf792c@65.108.120.116:32323,enode://0cb1d60e40aa5dcd83a91f7c4aab4e8c53fcbe64b6a0127b6b30ce54838c1f68b46d60a344d88fdb4335eace67343ed04a8a60d2ebe7f8a5c4d5534366c5d29c@65.108.195.126:32323,enode://5d8e4f7d49b3ccd6a1482afe8475300b80f6283352b1c8f3f55c7098c92c6f84bc19a6e97748676921785d5672b7023ae9896908c47a519424035159e6ed8077@65.108.201.210:32323,enode://e674c17f9fbad5d5b8776fd9aab48d958b972f48b28c3d2ae0cb3e238f058cafc1d4996b0936bbe26dbfb4b94f80bc80ad425d5d37ca2fe2d241c60ca0bcaf50@135.181.62.40:32323,enode://d370724b1ceff14ef55a23098b21b4182a6b9743d48ee3cee539d662b051ff0452a27aaef7f43da8312f66f9c3cbd3201420b6145bbfe1544b4cd99b412d798a@95.217.122.150:32323 -------------------------------------------------------------------------------- /config/genesis.ssz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jibchain-net/node/c180a19215f60369de42a8c7a3dc40949b2c6316/config/genesis.ssz -------------------------------------------------------------------------------- /config/jwt.hex: -------------------------------------------------------------------------------- 1 | 0x5b80427cf440e904204803a3b9b4475c9e71b814cc8af948cfdcad38c98a682a 2 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3.8" 2 | services: 3 | 4 | jbc-execution: 5 | container_name: jbc-execution 6 | image: ethereum/client-go:v1.13.13 7 | user: root 8 | entrypoint: /root/geth-script.sh 9 | command: 10 | - "--datadir=/datadir/geth" 11 | - "--networkid=${NETWORK_ID}" 12 | - --authrpc.addr=0.0.0.0 13 | - --authrpc.port=8551 14 | - --authrpc.vhosts=* 15 | - --authrpc.jwtsecret=/config/jwt.hex 16 | - --http 17 | - --http.addr=0.0.0.0 18 | - --http.api=eth,engine,web3,net 19 | - --http.port=8545 20 | - --http.corsdomain=* 21 | - --http.vhosts=* 22 | volumes: 23 | - ./genesis.json:/genesis.json 24 | - ./data:/datadir 25 | - ./geth-script.sh:/root/geth-script.sh 26 | - ./config:/config 27 | ports: 28 | - 30303:30303 29 | - 8545:8545 30 | restart: always 31 | 32 | jbc-consensus: 33 | container_name: jbc-consensus 34 | image: sigp/lighthouse:v5.0.0 35 | user: root 36 | entrypoint: /root/lighthouse-script.sh 37 | command: 38 | - lighthouse 39 | - beacon 40 | - --execution-endpoint=http://jbc-execution:8551 41 | - --execution-jwt=/config/jwt.hex 42 | - --testnet-dir=/config 43 | - --http-allow-sync-stalled 44 | - --disable-peer-scoring 45 | - --http 46 | - --http-address=0.0.0.0 47 | - --http-port=5002 48 | - --disable-packet-filter 49 | - --eth1 50 | - --target-peers=${TARGET_PEERS} 51 | - --enr-address=${NODE_PUBLIC_IP} 52 | - --enr-udp-port=9100 53 | - --enr-tcp-port=9100 54 | - --port=9100 55 | - --checkpoint-sync-url=https://metrabyte-cl.jibchain.net/ 56 | - --prune-blobs=false 57 | volumes: 58 | - ./data/lighthouse:/root/.lighthouse 59 | - ./config:/config 60 | - ./lighthouse-script.sh:/root/lighthouse-script.sh 61 | ports: 62 | - 0.0.0.0:9100:9100/tcp 63 | - 0.0.0.0:9100:9100/udp 64 | - 0.0.0.0:5002:5002/tcp 65 | - 0.0.0.0:5002:5002/udp 66 | -------------------------------------------------------------------------------- /genesis.json: -------------------------------------------------------------------------------- 1 | { 2 | "config": { 3 | "chainId": 8899, 4 | "homesteadBlock": 0, 5 | "eip150Block": 0, 6 | "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", 7 | "eip155Block": 0, 8 | "eip158Block": 0, 9 | "byzantiumBlock": 0, 10 | "constantinopleBlock": 0, 11 | "petersburgBlock": 0, 12 | "istanbulBlock": 0, 13 | "muirGlacierBlock": 0, 14 | "berlinBlock": 0, 15 | "londonBlock": 0, 16 | "arrowGlacierBlock": 0, 17 | "grayGlacierBlock": 0, 18 | "mergeForkBlock": 2200641, 19 | "terminalTotalDifficulty": 512048629250937967, 20 | "terminalTotalDifficultyPassed": true, 21 | "shanghaiTime": 1701158251, 22 | "cancunTime": 1710220283, 23 | "ethash": {} 24 | }, 25 | "nonce": "0x0", 26 | "gasLimit": "8000000", 27 | "difficulty": "0x40000", 28 | "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 29 | "coinbase": "0x0000000000000000000000000000000000000000", 30 | "alloc": { 31 | "4Fbd49c841c2f891b8e04B887B9C5035BE7c7209": { 32 | "balance": "1000000000000000000000000001" 33 | } 34 | }, 35 | "number": "0x0", 36 | "gasUsed": "0x0", 37 | "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 38 | "baseFeePergas": "0x2540BE400" 39 | } 40 | -------------------------------------------------------------------------------- /geth-script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | geth --datadir /datadir/geth init /genesis.json 3 | bootnodes=$(cat /config/el_nodes.list) 4 | exec geth "$@" \ 5 | --bootnodes "$bootnodes" 6 | 7 | -------------------------------------------------------------------------------- /keys/.gitignore: -------------------------------------------------------------------------------- 1 | *.json -------------------------------------------------------------------------------- /lighthouse-script.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | bootnodes=$(cat /config/cl_nodes.list) 3 | exec "$@" \ 4 | --boot-nodes "$bootnodes" 5 | 6 | -------------------------------------------------------------------------------- /validator.yaml: -------------------------------------------------------------------------------- 1 | version: "3.8" 2 | services: 3 | jbc-validator: 4 | container_name: jbc-validator 5 | image: sigp/lighthouse:v5.0.0 6 | user: root 7 | volumes: 8 | - ./data/lighthouse:/root/.lighthouse 9 | - ./config:/config 10 | command: 11 | - lighthouse 12 | - vc 13 | - --beacon-nodes=${PUBLIC_BEACON_NODE} 14 | - --testnet-dir=/config 15 | - --init-slashing-protection 16 | - --graffiti=${NODE_GRAFFITI} 17 | - --suggested-fee-recipient=${FEE_RECIPIENT} 18 | - --debug-level=info 19 | --------------------------------------------------------------------------------