# Taiko proof generation Taiko is a decentralized, Ethereum-equivalent ZK-Rollup (Type 1 ZK-EVM). ## Taiko node Taiko nodes are minimally modified Ethereum execution clients that consist of two parts * **taiko-geth :** Like Ethereum mainnet execution engines, taiko-geth listens to new L2 transactions broadcasted in the L2 network, executes them in the EVM, and holds the latest state and database of all current L2 data. * **taiko-client :** The taiko-client software replaces the consensus client piece of an Ethereum mainnet node. You can think of it like an Ethereum mainnet node, except replacing the consensus client with taiko-client. taiko-client then drives taiko-geth over the Engine API. <u>Official guide for running a taiko node:</u> https://taiko.xyz/docs/guides/run-a-taiko-node ### Hardware Requirements for running a taiko node **Minimum:** > * CPU with 2+ cores > * 4GB RAM > * 1TB free storage space to sync the Mainnet > * 8 MBit/sec download Internet service **Recommended:** > * Fast CPU with 4+ cores > * 16GB+ RAM > * High-performance SSD with at least 1TB of free space > * 25+ MBit/sec download Internet service ### Node modes A taiko node can be enabled in one of the following two modes **Proposer:** The proposer fetches pending transactions from the L2 execution engine's mempool intervally pool, then tries to propose them to the TaikoL1 protocol contract. <u>Prerequisites</u> * You have already setup a node. * Must have a balance of ETH on Sepolia L1. * Access to either a local prover or an outsourced prover from the prover market. **Prover:** The prover requests validity proofs from the ZK-EVM and sends transactions to prove the proposed blocks are valid or invalid. <u>Prerequisites</u> * You have already setup a node. * A balance of ETH and TTKOj on Sepolia L1. * At least 8/16 core CPU and 32GB of RAM. ## Initial proof generation findings The taiko simple node uses different scripts for running the taiko-client prover and proverd. https://github.com/taikoxyz/simple-taiko-node/tree/main/script ### Requesting proof taiko-client's `zkevm_rpcd_producer` is used for making an RPC request to proverd for generating zkevm proof. Code : https://github.com/taikoxyz/taiko-client/blob/main/prover/proof_producer/zkevm_rpcd_producer.go#L216 `requestProof` function is used for requesting the proof from the proverd ![image](https://hackmd.io/_uploads/r1wH5L4ST.png) ### Generating proof `prover-rpcd` is a JSON RPC server running inside the taiko simple node, which accepts RPC request from the taiko-client to generate the proof proverd rpc server source code : https://github.com/taikoxyz/zkevm-chain/blob/master/prover/src/bin/prover_rpcd.rs `compute_proof` function is used for generating the proof : https://github.com/taikoxyz/zkevm-chain/blob/master/prover/src/shared_state.rs#L74 ![image](https://hackmd.io/_uploads/ByIGoIVST.png)