Skip to content
All Hekla Node Runners: Protocol upgrade on Feb 1st, upgrade needed. Please ensure your nodes are using the software tags listed in the announcement! Click here for more info

Enable a prover

Prerequisites

Enable a prover with simple-taiko-node

  1. A Taiko prover needs to be able to generate SGX proofs at the moment. To do that, you need to run raiko. Please follow the Docker setup guide here.

  2. After successfully setting up raiko, set the SGX_RAIKO_HOST endpoint in your .env file.

  3. Set the L1_PROVER_PRIVATE_KEY to an L1 account’s private key which will send the Prove Block transactions.

  4. You may optionally deploy a ProverSet contract to run your prover. If you are working with a third party prover, you will have to follow the guide with them to negotiate allowance and deposit of TAIKO/TTKOh. A ProverSet is recommended for a longer term stable setup to avoid nonce issues. For testing purposes, you may not feel the need to deploy a ProverSet.

  5. Finally set ENABLE_PROVER to true in simple-taiko-node .env.

  6. Set COMPOSE_PROFILES=prover or add prover to the list.

  7. You can then run your prover with docker compose up -d! Please use docker compose -f docker-compose-hekla.yml up -d if you are running on Hekla.

Please find all relevant bond, cooldown, and proving window information here.

Enabling batch proving/proof aggregation (optional)

Batch proving has been enabled in release 0.43.1 of the taiko alethia client!

Please use simple-taiko-node release 1.9.0 or above to enable this functionality.

This functionality can be enabled simply by setting SGX_BATCH_SIZE in your .env file to a number greater than 1.

If it is set to 1 or unset your prover will submit proofs upon assignment (standard function). When enabled, your prover will submit a batch of proofs when x number of blocks are assigned, x being SGX_BATCH_SIZE.

As provers are given a proof window for every assigned proof, it can become the case that while waiting for a batch size to be fulfilled the already assigned proofs exit their proof window and become unassigned. To prevent this, we have introduced another flag FORCE_BATCH_PROVING_INTERVAL. This flag will only be functional if batch proving is enabled.

This flag will force the prover to submit a batch of proofs every x minutes, regardless of the batch size being fulfilled. We don’t recommend this value be set > 45 minutes, as the provingWindow is 60 minutes and any closer will put you at risk of having proof assignments expire. It is by default set to 30 minutes.

Approve TaikoL1 as TAIKO spender (mainnet)

  1. Approve the TaikoL1 contract as a spender.

    Visit the TAIKO contract on Ethereum here.

  2. Click the Connect to Web3 button.

  3. Click the approve function and set the spender address to the TaikoL1 contract address: 0x06a9Ab27c7e2255df1815E6CC0168d7755Feb19a.

  4. Set the amount to at least the minimum bond amount of 150 TAIKO.

    You will need 150 TAIKO for each bond you sign. After entering 150, you need to set the 18 decimals that the TAIKO contract takes, you can click the plus button and then select 10^18.

    You will notice that the amount subtracted is separate in two transactions, 125 for the proposeBlock and 25 for proveBlock.

    This is because the livenessBond (125) is taken when the block is proposed, and once the proof has been provided in the window is credited in TaikoL1; the validityBond (150) is then debited using the existing balance + an extra 25 TTKOh.

    If you have bonded TTKOh in the TaikoL1 contract, it will be used first before more is taken from your ProverSet.

    For an explanation of the difference between these bonds, please refer to the terminology section here.

  5. Finally, click the Write button.

Approve TaikoL1 as TTKOh spender (testnet)

You will need TTKOh deposited on the TaikoL1 contract to secure the bond for the proofs you generate.

  1. Approve the TaikoL1 contract as a spender.

    Visit the TTKOh contract on Holesky here.

  2. Click the Connect to Web3 button.

  3. Click the approve function and set the spender address to the TaikoL1 contract address: 0x79C9109b764609df928d16fC4a91e9081F7e87DB.

  4. Set the amount to at least the minimum bond amount of 150 TTKOh.

    You will need 150 TTKOh for each bond you sign. After entering 150, you need to set the 18 decimals that the TTKOh contract takes, you can click the plus button and then select 10^18.

    You will notice that the amount subtracted is separate in two transactions, 125 for the proposeBlock and 25 for proveBlock.

    This is because the livenessBond (125) is taken when the block is proposed, and once the proof has been provided in the window is credited in TaikoL1; the validityBond (150) is then debited using the existing balance + an extra 25 TTKOh.

    If you have bonded TTKOh in the TaikoL1 contract, it will be used first before more is taken from your ProverSet.

    For an explanation of the difference between these bonds, please refer to the terminology section here.

  5. Finally, click the Write button.

Troubleshooting

If you run into any problems, please visit the node troubleshooting page for help. If you run into an error that isn’t yet listed, please reach out in our Discord!