diff --git a/packages/docs-site/astro.config.ts b/packages/docs-site/astro.config.ts index 7f7e2bd6e0..c42d6690cb 100644 --- a/packages/docs-site/astro.config.ts +++ b/packages/docs-site/astro.config.ts @@ -121,9 +121,13 @@ export default defineConfig({ label: "Run a Holesky node", link: "/guides/run-a-holesky-node/", }, - { label: "Run a Taiko node", link: "/guides/run-a-taiko-node/" }, + { label: "Run a Taiko Node with Docker", link: "/guides/run-a-taiko-node-with-docker/" }, + { label: "Build a Taiko Node from Source", link: "/guides/build-a-taiko-node-from-source/" }, + // { label: "Run a Mainnet Taiko Node from Source", link: "/guides/run-a-mainnet-taiko-node-from-source/" }, + { label: "Run a Testnet Taiko Node from Source", link: "/guides/run-a-testnet-taiko-node-from-source/" }, { label: "Enable a proposer", link: "/guides/enable-a-proposer/" }, { label: "Enable a prover", link: "/guides/enable-a-prover/" }, + { label: "Node Troubleshooting", link:"/guides/node-troubleshooting/" } ], }, { diff --git a/packages/docs-site/src/content/docs/guides/build-a-taiko-node-from-source.mdx b/packages/docs-site/src/content/docs/guides/build-a-taiko-node-from-source.mdx new file mode 100644 index 0000000000..a6e4897420 --- /dev/null +++ b/packages/docs-site/src/content/docs/guides/build-a-taiko-node-from-source.mdx @@ -0,0 +1,147 @@ +--- +title: Building a Node from Source +description: Learn how to build your own node without relying on simple-taiko-node or prebuilt images +--- + +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components'; + +This guide shows you how to build your own node from source code. + +You might want to do this if you want to run a node on a specific architecture or if you want to inspect the source code of the node you're running. + +## Node Components + +---------------------------------------------------------------------- + +A Taiko Node consists of two components, analogous to an Ethereum node; the consensus client and execution engine. + +#### Taiko Client (taiko-client) + +The taiko client is responsible for decoding L2 blocks from L1 calldata (and blobspace!), then passing those payloads to our execution engine. + +It has three subcommands, `driver`, `prover`, and `proposer`. + +The taiko client replaces the [consensus client](https://ethereum.org/en/developers/docs/nodes-and-clients/) in an Ethereum mainnet node. + +In this tutorial you will build the `taiko-client` as found in the [taiko monorepo](https://github.com/taikoxyz/taiko-mono). + +#### Execution Engine (taiko-geth) + +The execution engine is responsible for executing the block payloads it receives from the taiko client. It holds the latest state of the chain. + +`taiko-geth` exposes the standard JSON-RPC API that Ethereum developers are familiar with, and can be used accordingly to query blockchain data and submit transactions to the network. + +`taiko-geth` replaces the [execution client](https://ethereum.org/en/developers/docs/nodes-and-clients/) in an Ethereum mainnet node. + +In this tutorial you will build the `taiko-geth` implementation of `go-ethereum` as found in the [`taiko-geth` repository](https://github.com/taikoxyz/taiko-geth). + +## Software Dependencies + +| Dependency | Version | Version Check Command | +| ------------------------------------------------------------- | -------- | --------------------- | +| [git](https://git-scm.com/) | `^2` | `git --version` | +| [go](https://go.dev/) | `^1.21` | `go version` | +| [make](https://linux.die.net/man/1/make) | `^4` | `make --version` | + +## Building the Taiko Client + +First you're going to build `taiko-client`. + + + +1. Clone the Taiko monorepo + + The [Taiko monorepo](https://github.com/taikoxyz/taiko-mono) contains the source code for the `taiko-client`. + + + + ```bash + git clone https://github.com/taikoxyz/taiko-mono.git + cd taiko-mono/packages/taiko-client + ``` + + + ```sh + git clone https://github.com/taikoxyz/taiko-mono.git + cd taiko-mono/packages/taiko-client && git config core.autocrlf false + ``` + + + +2. Checkout the release branch you wish to run + + Release branches are created when new versions of the `taiko-client` are created. + Find the branch you wish to check out in the [releases page](https://github.com/taikoxyz/taiko-mono/releases). + + Search by `taiko-client` to find all relevant releases. + + ```bash + git checkout + ``` + + :::note + Make sure to read the releases page carefully to determine the correct branch to check out. + Some may be specific to testnet or mainnet. + ::: + +3. Build `taiko-client` + + ```bash + make build + ``` + + + +## Building the Execution Engine + +Next you're going to build `taiko-geth`. + + + +1. Clone taiko-geth + + The [`taiko-geth` repository](https://github.com/taikoxyz/taiko-geth) contains the source code for our execution engine. + + + + ```bash + git clone https://github.com/taikoxyz/taiko-geth.git + cd taiko-geth + ``` + + + ```sh + git clone https://github.com/taikoxyz/taiko-geth.git + cd taiko-geth && git config core.autocrlf false + ``` + + + +2. Checkout the release branch you wish to run + + Release branches are created when new versions of the `taiko-geth` are created. + Find the branch you wish to check out in the [releases page](https://github.com/taikoxyz/taiko-geth/releases). + + ```bash + git checkout + ``` + + :::note + Make sure to read the releases page carefully to determine the correct branch to check out. + Some may be specific to testnet or mainnet. + ::: + +3. Build `taiko-geth` + + ```bash + make geth + ``` + + + +## What's Next? + Now that you've built your own node from source, you can run it for Taiko Mainnet or Testnet! + +{/* * Click here to [Run a Mainnet Taiko Node from Source](/guides/run-a-mainnet-taiko-node-from-source) */} +* Click here to [Run a Testnet Taiko Node from Source](/guides/run-a-testnet-taiko-node-from-source) +* If you run into any problems, please visit the [troubleshooting page](/guides/node-troubleshooting) for help. \ No newline at end of file diff --git a/packages/docs-site/src/content/docs/guides/enable-a-proposer.mdx b/packages/docs-site/src/content/docs/guides/enable-a-proposer.mdx index e9010d85fa..60309eaa8a 100644 --- a/packages/docs-site/src/content/docs/guides/enable-a-proposer.mdx +++ b/packages/docs-site/src/content/docs/guides/enable-a-proposer.mdx @@ -7,7 +7,7 @@ import { Steps } from '@astrojs/starlight/components'; ## Prerequisites -- You are already [running a Taiko node](/guides/run-a-taiko-node). +- You are already running a Taiko node [with Docker](/guides/run-a-taiko-node-with-docker) or [from source](/guides/build-a-taiko-node-from-source). {/*## Using `stn` diff --git a/packages/docs-site/src/content/docs/guides/enable-a-prover.mdx b/packages/docs-site/src/content/docs/guides/enable-a-prover.mdx index de25c60c73..d4f919cb87 100644 --- a/packages/docs-site/src/content/docs/guides/enable-a-prover.mdx +++ b/packages/docs-site/src/content/docs/guides/enable-a-prover.mdx @@ -7,7 +7,7 @@ import { Steps } from '@astrojs/starlight/components'; ## Prerequisites -- You are already [running a Taiko node](/guides/run-a-taiko-node). +- You are already running a Taiko node [with Docker](/guides/run-a-taiko-node-with-docker) or [from source](/guides/build-a-taiko-node-from-source). ## Enable a prover with simple-taiko-node diff --git a/packages/docs-site/src/content/docs/guides/node-troubleshooting.mdx b/packages/docs-site/src/content/docs/guides/node-troubleshooting.mdx new file mode 100644 index 0000000000..4524274772 --- /dev/null +++ b/packages/docs-site/src/content/docs/guides/node-troubleshooting.mdx @@ -0,0 +1,23 @@ +--- +title: Node Troubleshooting +description: This page describes common bugs and potential fixes +--- + + This page describes common bugs and potential fixes. + +### `Caught SIGILL in blst_cgo_init` + +If you get this error message, chances are you're using an older CPU that blst has trouble compiling on due to instruction differences. + +In this case, please set your env as follows and try again. + +```bash +CGO_CFLAGS="-O -D__BLST_PORTABLE__" +CGO_CFLAGS_ALLOW="-O -D__BLST_PORTABLE__" +``` + +### Failed to decode tx list: beacon client not found + +This may mean that you may be missing the `--l1.beacon` flag or have filled it in incorrectly. + +Please use an L1 Node that has a blob server configured! diff --git a/packages/docs-site/src/content/docs/guides/run-a-mainnet-taiko-node-from-source.mdx b/packages/docs-site/src/content/docs/guides/run-a-mainnet-taiko-node-from-source.mdx new file mode 100644 index 0000000000..4425c0b6c9 --- /dev/null +++ b/packages/docs-site/src/content/docs/guides/run-a-mainnet-taiko-node-from-source.mdx @@ -0,0 +1,4 @@ +--- +title: Run a Mainnet Taiko Node From Source +description: This guide will help you start up a Taiko node. +--- \ No newline at end of file diff --git a/packages/docs-site/src/content/docs/guides/run-a-taiko-node.mdx b/packages/docs-site/src/content/docs/guides/run-a-taiko-node-with-docker.mdx similarity index 91% rename from packages/docs-site/src/content/docs/guides/run-a-taiko-node.mdx rename to packages/docs-site/src/content/docs/guides/run-a-taiko-node-with-docker.mdx index 62329b806e..53296f3829 100644 --- a/packages/docs-site/src/content/docs/guides/run-a-taiko-node.mdx +++ b/packages/docs-site/src/content/docs/guides/run-a-taiko-node-with-docker.mdx @@ -1,16 +1,21 @@ --- -title: Run a Taiko node +title: Run a Taiko node with Docker description: This guide will help you start up a Taiko RPC node using simple-taiko-node. --- import { Steps, Tabs, TabItem } from "@astrojs/starlight/components"; -This guide will help you start up a Taiko RPC node using simple-taiko-node. +This guide will help you start up a Taiko RPC node using [simple-taiko-node](https://github.com/taikoxyz/simple-taiko-node). + +## Software Dependencies + +| Dependency | Version | Version Check Command | +| ------------------------------------------------------------- | -------- | --------------------- | +| [git](https://git-scm.com/) | `^2` | `git --version` | +| [Docker](https://docs.docker.com/engine/install/) | `^24.0` | `docker --version` | ## Prerequisites -- [Docker](https://docs.docker.com/engine/install/) is installed and **running**. -- [Git](https://github.com/git-guides/install-git/) is installed. - If using Windows, you should install [Git BASH](https://gitforwindows.org/) or [WSL](https://learn.microsoft.com/en-us/windows/wsl/install) to use as your terminal. - Meet the [Geth minimum hardware requirements](https://github.com/ethereum/go-ethereum#hardware-requirements) except for the storage requirement because Taiko nodes will require less storage (at the time of writing). diff --git a/packages/docs-site/src/content/docs/guides/run-a-testnet-taiko-node-from-source.mdx b/packages/docs-site/src/content/docs/guides/run-a-testnet-taiko-node-from-source.mdx new file mode 100644 index 0000000000..8590253f16 --- /dev/null +++ b/packages/docs-site/src/content/docs/guides/run-a-testnet-taiko-node-from-source.mdx @@ -0,0 +1,154 @@ +--- +title: Run a Testnet Taiko Node From Source +description: This guide will help you start up a Testnet (Hekla) Taiko node. +--- + +import { Steps, Tabs, TabItem } from "@astrojs/starlight/components"; + +This tutorial explains how to run an Taiko node for our testnet Hekla from source code. + +## Building the Source Code + +Please follow the [Building a Node from Source](/guides/build-a-taiko-node-from-source) guide before continuing. +This guide presumes you have built the required images already (`taiko-geth` and `taiko-client`). + +## Hardware Requirements + +These are the recommended specs of a [mainnet Geth node](https://geth.ethereum.org/docs/getting-started/hardware-requirements); the actual requirements may be lower. + +* 16GB RAM +* 2TB SSD +* Quad-core CPU + +Node operators should plan for future storage needs as the requirements will grow continuously. + +### Create a JWT Secret + +`taiko-geth` and `taiko-client` communicate over the standard Ethereum engine API authrpc. This communication is secured using a shared secret. + +You will need to generate a shared secret in the form of a 32 byte hex string. + +```bash +openssl rand -hex 32 > jwt.txt +``` + +### Start `taiko-geth` + +It's generally better to start `taiko-geth` before you start `taiko-client` as you will encounter less error messages. + +`taiko-geth` can be started without `taiko-client` and will wait until `taiko-client` begins communicating. + + + +1. Navigate to your `taiko-geth` directory + + Find the directory where you built the `taiko-geth` binary. + +2. Copy the JWT secret you generated into the `taiko-geth` directory. + + ```bash + cp /path/to/jwt.txt . + ``` + +3. Start taiko-geth + + Use the following command to start `taiko-geth` in a default configuration. + The JSON-RPC API will become available on port 28545. + + ```bash + ./build/bin/geth \ + --taiko \ + --networkid 167009 \ + --gcmode archive \ + --datadir ./data/taiko-geth \ + --metrics \ + --metrics.expensive \ + --metrics.addr "0.0.0.0" \ + --bootnodes enode://2f7ee605f84362671e7d7c6d47b69a3358b0d87e9ba4648befcae8b19453275ed19059db347c459384c1a3e5486419233c06bf6c4c6f489d81ace6f301a2a446@43.153.55.134:30303,enode://c067356146268d2855ad356c1ce36ba9f78c1633a72f9b7f686679c2ffe04bab6d24e48ef6eefb0e01aa00dff5024f7f94bc583da90b6027f40be4129bbbc5fd@43.153.90.191:30303,enode://acc2bdb6416feddff9734bee1e6de91e684e9df5aeb1d36698cc78b920600aed36a2871e4ad0cf4521afcdc2cde8e2cd410a57038767c356d4ce6c69b9107a5a@170.106.109.12:30303,enode://eb5079aae185d5d8afa01bfd2d349da5b476609aced2b57c90142556cf0ee4a152bcdd724627a7de97adfc2a68af5742a8f58781366e6a857d4bde98de6fe986@34.66.210.65:30303,enode://2294f526cbb7faa778192289c252307420532191438ce821d3c50232e019a797bda8c8f8541de0847e953bb03096123856935e32294de9814d15d120131499ba@34.72.186.213:30303 \ + --authrpc.addr "0.0.0.0" \ + --authrpc.port 28551 \ + --authrpc.vhosts "*" \ + --authrpc.jwtsecret ./jwt.txt \ + --http \ + --http.api admin,debug,eth,net,web3,txpool,miner,taiko \ + --http.addr "0.0.0.0" \ + --http.port 28545 \ + --http.vhosts "*" \ + --ws \ + --ws.api admin,debug,eth,net,web3,txpool,miner,taiko \ + --ws.addr "0.0.0.0" \ + --ws.port 28546 \ + --ws.origins "*" \ + --gpo.ignoreprice "100000000" \ + --port 30304 \ + --syncmode full \ + --state.scheme=path + ``` + + +### Start `taiko-client` + +This guide assumes you are running both `taiko-geth` and `taiko-client` on the same machine. + +If you aren't, you can configure the ports and addresses so that the services can access each other. + + +1. Navigate to your `taiko-client` directory + + Find the directory where you built the `taiko-client` binary. + +2. Copy the JWT secret + + :::note + This should be the *same* JWT secret you used in the previous step for `taiko-geth`. + ::: + + ```bash + cp /path/to/jwt.txt . + ``` + +3. Set environment variables + + The following URLs should be a Holesky node. + + You will need either an RPC provider, or run a full Holesky node yourself. + + ```bash + export L1_WS=... # the WS address for the node to sync from. + export L1_BEACON_URL=... # URL address for the L1 Beacon-node HTTP endpoint to use. + ``` + +4. Start taiko-client + + Use the following command to start `taiko-client` in a default configuration. + + You can find all other configurable flags by running `./bin/taiko-client driver`. + + This command assumes you've run the `taiko-geth` command as is, if you've changed ports please change them accordingly. + + ```bash + ./bin/taiko-client driver \ + --l1.ws ${L1_WS} \ + --l1.beacon ${L1_BEACON_URL} \ + --l2.ws ws://localhost:28546 \ + --taikoL1 0x79C9109b764609df928d16fC4a91e9081F7e87DB \ + --taikoL2 0x1670090000000000000000000000000000010001 \ + --jwtSecret ./jwt.txt \ + --l2.auth http://localhost:28551/ \ + --verbosity 3 + ``` + + :::note + If you've participated in our old testnets, the L1 Node is no longer required to be an archive node! + ::: + + +### Syncing + +Once you've started `taiko-geth` and `taiko-client` properly you should see them communicate with each other and start syncing. + +Syncing can take several hours, depending on the size of the chain. + +## Next Steps + +* If you run into any problems, please visit the [troubleshooting page](/guides/node-troubleshooting) for help. \ No newline at end of file