# 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

### 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
