{
"creator": "RISC Zero",
"projectsForTvs": [
{
"projectId": "taiko",
"sinceTimestamp": 1730452800
},
{
"projectId": "bob",
"sinceTimestamp": 1752703200
}
],
"proofSystemInfo": "\n \n ## Description\n\n RISC Zero is the first zkVM proving RISC-V ISA programs. Its STARK proving system is based on a rather standard theoretical construction of [Ben-Sasson et al paper](https://eprint.iacr.org/2018/046) and [DEEP-ALI version of FRI](https://eprint.iacr.org/2019/336). The proof of zkVM execution is wrapped in Groth16 SNARK for efficient onchain verification. RISC Zero onchain verifier targets [96 bits of security](https://dev.risczero.com/api/security-model#cryptographic-security).\n\n ## Proof system\n\n ### RISC-V circuit\n\n RISC Zero implements a [circuit that proves RISC-V RV32IM instruction set](https://github.com/risc0/risc0/tree/main/risc0/circuit/rv32im) (see [here](https://dev.risczero.com/api/zkvm/zkvm-specification#the-zkvm-execution-model) for more details). Arithmetization of this circuit has different types of columns: control, data and accumulator. Control columns contain public data that describes the RISC-V program being executed and proven. Data and accumulator columns contain private data (accessible only to prover), data represents the running state of the processor and memory and accumulator is auxiliary data for the PLOOKUP argument.\n\n ### Recursion circuit\n\n RISC Zero prover supports recursive proving of RISC-V programs using [recursion circuit](https://github.com/risc0/risc0/tree/main/risc0/circuit/recursion). This is a separate STARK circuit that is designed to efficiently generate proofs for the verification of STARK proofs, it uses the same proving system as the RISC-V circuit.\n\n Big programs are split into several segments that are executed and proven in parallel. Segment receipts (i.e. proofs of correct execution) are verified with recursion circuits and succinct receipts are produced. These succinct receipts could be recursively joined in pairs of two until a single succinct proof of the whole execution is produced. \n\n ### Final wrap\n\n RISC Zero [implements a SNARK wrapping](https://github.com/risc0/risc0/tree/main/risc0/groth16) of a recursive succinct receipt into a Groth16 proof over BN254 curve for onchain verification. This Groth16 R1CS circuit uses a circuit-specific trusted setup, the ceremony was run by RISC Zero, see [below](#trusted-setups) for more details. \n\n The final wrap circuit has a [control root](https://dev.risczero.com/terminology#control-root) public input that depends on the RISC-V and recursion circuit versions. This design allows upgrading RISC Zero proving system without changing the final wrapper and thus without running a new trusted setup ceremony.\n ",
"techStack": {
"zkVM": [
{
"id": "RISC0",
"type": "STARK",
"name": "Risc0",
"description": "zkVM STARK proving system developed by RISC ZERO for RISC-V programs."
},
{
"id": "RISCV",
"type": "ISA",
"name": "RISC-V",
"description": "Free and open-source universal 32-bit ISA used across a variety of hardware and software."
},
{
"id": "BabyBear",
"type": "Field",
"name": "Baby Bear",
"description": "Prime field of order p = 15 * 2**27 + 1."
}
],
"finalWrap": [
{
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
{
"id": "BN254",
"type": "curve",
"name": "BN254",
"description": "BN254, aka BN256, aka alt_bn128 pairing-friendly 254-bit prime field Weierstrass elliptic curve."
}
]
},
"trustedSetups": [
{
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"id": "Risc0",
"name": "Risc0 Groth16",
"risk": "green",
"shortDescription": "Circuit-specific trusted setup for Risc0 final wrap Groth16 onchain verifier. It was publicly announced and run with 238 participants.",
"longDescription": "\n Ceremony for a circuit-specific trusted setup run by Risc0 for Groth16 circuits verifying Risc0 STARK proof. \n It was publicly announced and run with 238 participants. Ceremony transcript, as well as instructions for participation and verification \n are publicly available.\n\n - Ceremony instructions: [https://risczero.com/blog/ceremony-contribution-public-instructions](https://risczero.com/blog/ceremony-contribution-public-instructions)\n - Link to the verification: [https://dev.risczero.com/api/trusted-setup-ceremony#the-transcript-matches-the-circuit](https://dev.risczero.com/api/trusted-setup-ceremony#the-transcript-matches-the-circuit)\n - Post with a call to community to participate: [https://x.com/RiscZero/status/1781110200923275769](https://x.com/RiscZero/status/1781110200923275769)\n "
}
],
"verifierHashes": [
{
"hash": "0x1dcf73cbd51c9eba43c437c5a5ebc5328ca2d7a590c701a9a9bc1136eceeeea7",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "0xafB31f5b70623CDF4b20Ada3f7230916A5A79df9",
"chain": "ethereum"
},
{
"address": "0x34Eda8BfFb539AeC33078819847B36D221c6641c",
"chain": "ethereum"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the following values abi packed together: the bytes32 value of internal pure function verifier_key_digest() of the RiscZeroGroth16Verifier.sol, bytes16 value of CONTROL_ROOT_1, bytes16 value of CONTROL_ROOT_2."
},
{
"hash": "0xc6fcb1951eb5b45a669431346a01577df99f30d72baa9d5c7eea40ec6cccfab9",
"proofSystem": {
"id": "Snarkjs",
"type": "Groth16",
"name": "Snarkjs",
"description": "Circom / iden3 implementation of Groth16 proving system written in JS."
},
"knownDeployments": [
{
"address": "0x2a098988600d87650Fb061FfAff08B97149Fa84D",
"chain": "ethereum"
},
{
"address": "0x7CCA385bdC790c25924333F5ADb7F4967F5d1599",
"chain": "ethereum"
}
],
"verificationStatus": "notVerified",
"description": "Custom verifier ID: SHA256 hash of the following values abi packed together: the bytes32 value of internal pure function verifier_key_digest() of the RiscZeroGroth16Verifier.sol, bytes16 value of CONTROL_ROOT_1, bytes16 value of CONTROL_ROOT_2."
}
]
}
taiko+37-37
scalingTechnology+1-1
{
"dataAvailability": [
{
"name": "All data required for proofs is published on chain",
"description": "All the data that is used to construct the system state is published on chain in the form of blobs. This ensures that it will be available for enough time.",
"references": [],
"risks": []
}
],
"exitMechanisms": [
{
"name": "Regular exit",
"description": "The user initiates the withdrawal by submitting a regular transaction on this chain. When the block containing that transaction is finalized the funds become available for withdrawal on L1. Finally the user submits an L1 transaction to claim the funds. This transaction requires a merkle proof.",
"risks": [],
"references": []
}
],
"forceTransactions": {
"name": "Users can force any transaction via L1",
"description": "Users can submit a blob containing a standalone transaction by calling the `storeForcedInclusion()` function on the `ForcedInclusionStore` contract. \n This forced transaction mechanism allows users to submit a transaction without running a prover.\n This mechanism ensures that at least one forced transaction from the queue is processed every 255 batches. However, if many transactions (k) are added to the queue, an individual transaction could experience a worst-case delay of up to k * 255 batches while waiting for its turn. Also, right now there is no mechanism that forces L2 Sequencer to include transactions from the queue in an L2 block, since L1 batches submission is permissioned behind a whitelist.",
"references": [
{
"title": "ForcedInclusionStore.sol - Etherscan source code, storeForcedInclusion function",
"url": "https://etherscan.io/address/0xcdb25e201ad3fdcfe16730a6ca2cc0b1ce2137a2#code"
}
],
"risks": [
{
"category": "Users can be censored if",
"text": "the operator refuses to include their transactions."
}
]
},
"operator": {
"name": "The system uses whitelist-based rotating operators",
"description": "The system uses a whitelist-based sequencing mechanism to allow for fast preconfirmations on the L2. On the L1, whitelisted preconfirmers (or the fallback operator) can sequence Taiko L2 blocks by proposing them on the TaikoL1 contract.\n The whitelist is managed by the `PreconfWhitelist` contract, which currently has 2 active operators registered.\n The proposer of a block is assigned the designated prover role, and will be the only entity allowed to provide a proof for the block during the 2h proving window.\n Currently, proving a block requires the block proposer to run a SGX instance with Geth, plus either SGX (Reth), SP1, or RISC0 to prove the block.\n Unless the block proposer proves the block within the proving window, it will forfeit half of its liveness bond to the TaikoL1 smart contract.",
"description": "The system uses a whitelist-based sequencing mechanism to allow for fast preconfirmations on the L2. On the L1, whitelisted preconfirmers (or the fallback operator) can sequence Taiko L2 blocks by proposing them on the TaikoL1 contract.\n The whitelist is managed by the `PreconfWhitelist` contract, which currently has 1 active operators registered.\n The proposer of a block is assigned the designated prover role, and will be the only entity allowed to provide a proof for the block during the 2h proving window.\n Currently, proving a block requires the block proposer to run a SGX instance with Geth, plus either SGX (Reth), SP1, or RISC0 to prove the block.\n Unless the block proposer proves the block within the proving window, it will forfeit half of its liveness bond to the TaikoL1 smart contract.",
"references": [
{
"title": "TaikoL1.sol - Etherscan source code, proposeBatch function",
"url": "https://etherscan.io/address/0xB0600e011e02eD35A142B45B506B16A35493c3F5#code"
},
{
"title": "PreconfWhitelist.sol - Etherscan source code",
"url": "https://etherscan.io/address/0xFD019460881e6EeC632258222393d5821029b2ac#code"
}
],
"risks": [
{
"category": "MEV can be extracted if",
"text": "the operator exploits their centralized position and frontruns user transactions."
}
]
},
"stateValidation": {
"categories": [
{
"title": "Validity proofs",
"description": "Taiko uses a multi-proof system to validate state transitions. The system requires two proofs among four available verifiers: SGX (Geth), SGX (Reth), SP1, and RISC0. The use of SGX (Geth) is mandatory, while the other three can be used interchangeably. This means that a block can be proven without providing a ZK proof if SGX (Geth) and SGX (Reth) are used together. Batch proposers are required to stake a liveness bond of 25.0 TAIKO, half of which is forfeited if they fail to prove the block within the proving window of 2h. The multi-proof system allows to detect bugs in the verifiers if they produce different results for the same block. If such a bug is detected, the system gets automatically paused.",
"references": [
{
"title": "TaikoL1.sol - Etherscan source code, liveness bond",
"url": "https://etherscan.io/address/0xB0600e011e02eD35A142B45B506B16A35493c3F5#code"
}
],
"risks": [
{
"category": "Funds can be stolen if",
"text": "a malicious block is proven by compromised SGX instances."
}
]
}
]
}
}
permissions+3-17
{
"ethereum": {
"roles": [
{
"id": "Sequencer",
"name": "Sequencer",
"description": "Allowed to commit transactions from the current layer to the host chain.",
"accounts": [
{
"address": "eth:0x5F62d006C10C009ff50C878Cd6157aC861C99990",
"type": "EOA",
"isVerified": true,
"name": "EOA 2",
"url": "#EOA-2-and-EOA-3"
},
{
"address": "eth:0xCbeB5d484b54498d3893A0c3Eb790331962e9e9d",
"type": "EOA",
"isVerified": true,
"name": "EOA 3",
"url": "#EOA-2-and-EOA-3"
"url": "#EOA-2"
}
],
"chain": "ethereum",
"discoveryDrivenData": true
}
],
"actors": [
{
"id": "DAO",
"name": "DAO",
"accounts": [
{
"address": "eth:0x9CDf589C941ee81D75F34d3755671d614f7cf261",
"type": "Contract",
"isVerified": true,
"name": "0x9CDf…f261",
"url": "https://etherscan.io/address/0x9CDf589C941ee81D75F34d3755671d614f7cf261"
}
],
"chain": "ethereum",
"description": "The main contract and entrypoint of the Aragon-based DAO governance framework. Fine-grained DAO permissions, proposals, voting and thresholds are configured here.\n* Can upgrade **with no delay**\n * ForcedInclusionStore [via: TaikoDAOController]\n * TaikoL1 [via: TaikoDAOController]\n * AutomataDcapV3Attestation [via: TaikoDAOController]\n * Taiko Token [via: TaikoDAOController]\n * DefaultResolver [via: TaikoDAOController]\n * Risc0VerifierGateway [via: TaikoDAOController]\n * TaikoDAOController \n * SgxVerifier [via: TaikoDAOController]\n * AutomataDcapV3Attestation [via: TaikoDAOController]\n * DefaultResolver [via: TaikoDAOController]\n * QuotaManager [via: TaikoDAOController]\n * MainnetERC20Vault [via: TaikoDAOController]\n * MainnetSignalService [via: TaikoDAOController]\n * SgxVerifier [via: TaikoDAOController]\n * TaikoWrapper [via: TaikoDAOController]\n * VerifierGateway [via: TaikoDAOController]\n * SP1VerifierGateway [via: TaikoDAOController]\n * PreconfRouter [via: TaikoDAOController]\n * MainnetBridge [via: TaikoDAOController]\n * L1SharedAddressManager [via: TaikoDAOController]\n * TaikoDAOController \n * PreconfWhitelist [via: TaikoDAOController]\n* Can interact with AutomataDcapV3Attestation\n * can update the program being verified [via: TaikoDAOController]\n* Can interact with DefaultResolver\n * can update the contract address for a given name [via: TaikoDAOController]\n* Can interact with Risc0VerifierGateway\n * can update the program being verified [via: TaikoDAOController]\n* Can interact with SgxVerifier\n * can add new instances without a DCAP attestation [via: TaikoDAOController]\n* Can interact with AutomataDcapV3Attestation\n * can update the program being verified [via: TaikoDAOController]\n* Can interact with DefaultResolver\n * can update the contract address for a given name [via: TaikoDAOController]\n* Can interact with SgxVerifier\n * can add new instances without a DCAP attestation [via: TaikoDAOController]\n* Can interact with SP1VerifierGateway\n * can update the program being verified [via: TaikoDAOController]\n* Can interact with L1SharedAddressManager\n * can update the contract address for a given name [via: TaikoDAOController]",
"discoveryDrivenData": true
},
{
"id": "Taiko Foundation Treasury Multisig",
"name": "Taiko Foundation Treasury Multisig",
"description": "A Multisig with 2/3 threshold. ",
"accounts": [
{
"address": "eth:0x363e846B91AF677Fb82f709b6c35BD1AaFc6B3Da",
"type": "Contract",
"isVerified": true,
"name": "0x363e…B3Da",
"url": "https://etherscan.io/address/0x363e846B91AF677Fb82f709b6c35BD1AaFc6B3Da"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a",
"type": "Contract",
"isVerified": true,
"name": "TaikoDAOController",
"url": "https://etherscan.io/address/0x75Ba76403b13b26AD1beC70D6eE937314eeaCD0a"
},
{
"address": "eth:0x0F026a3efE44E0Fe34B87375EFe69b16c05D0438",
"type": "EOA",
"isVerified": true,
"name": "EOA 1",
"url": "#EOA-1"
},
{
"address": "eth:0x3b1D1F89E0b6803174A2dE72e21A6f6f8464d5F1",
"type": "EOA",
"isVerified": true,
"name": "0x3b1D…d5F1",
"url": "https://etherscan.io/address/0x3b1D1F89E0b6803174A2dE72e21A6f6f8464d5F1"
}
],
"discoveryDrivenData": true
},
{
"id": "Taiko Multisig",
"name": "Taiko Multisig",
"description": "A Multisig with 5/7 threshold. ",
"accounts": [
{
"address": "eth:0x9CBeE534B5D8a6280e01a14844Ee8aF350399C7F",
"type": "Contract",
"isVerified": true,
"name": "0x9CBe…9C7F",
"url": "https://etherscan.io/address/0x9CBeE534B5D8a6280e01a14844Ee8aF350399C7F"
}
],
"chain": "ethereum",
"references": [],
"participants": [
{
"address": "eth:0xAC5898b0FFFd23F4Ef09F0E50Fa1bC4896eF7163",
"type": "EOA",
"isVerified": true,
"name": "0xAC58…7163",
"url": "https://etherscan.io/address/0xAC5898b0FFFd23F4Ef09F0E50Fa1bC4896eF7163"
},
{
"address": "eth:0xDC4ece5620659F4d5d1536Cab52BD5e5B15F8a0a",
"type": "EOA",
"isVerified": true,
"name": "0xDC4e…8a0a",
"url": "https://etherscan.io/address/0xDC4ece5620659F4d5d1536Cab52BD5e5B15F8a0a"
},
{
"address": "eth:0x0aED2375549D1115e180bd0caea829C429Ea50B3",
"type": "EOA",
"isVerified": true,
"name": "0x0aED…50B3",
"url": "https://etherscan.io/address/0x0aED2375549D1115e180bd0caea829C429Ea50B3"
},
{
"address": "eth:0x1eE487CEdCe52c370DB11e62987F3ABe873E145A",
"type": "EOA",
"isVerified": true,
"name": "0x1eE4…145A",
"url": "https://etherscan.io/address/0x1eE487CEdCe52c370DB11e62987F3ABe873E145A"
},
{
"address": "eth:0x0F026a3efE44E0Fe34B87375EFe69b16c05D0438",
"type": "EOA",
"isVerified": true,
"name": "EOA 1",
"url": "#EOA-1"
},
{
"address": "eth:0x7Cdd1c128Cd72dd252f569eeD942735330937F91",
"type": "EOA",
"isVerified": true,
"name": "0x7Cdd…7F91",
"url": "https://etherscan.io/address/0x7Cdd1c128Cd72dd252f569eeD942735330937F91"
},
{
"address": "eth:0x3b1D1F89E0b6803174A2dE72e21A6f6f8464d5F1",
"type": "EOA",
"isVerified": true,
"name": "0x3b1D…d5F1",
"url": "https://etherscan.io/address/0x3b1D1F89E0b6803174A2dE72e21A6f6f8464d5F1"
}
],
"discoveryDrivenData": true
},
{
"id": "EOA-1",
"name": "EOA 1",
"accounts": [
{
"address": "eth:0x0F026a3efE44E0Fe34B87375EFe69b16c05D0438",
"type": "EOA",
"isVerified": true,
"name": "0x0F02…0438",
"url": "https://etherscan.io/address/0x0F026a3efE44E0Fe34B87375EFe69b16c05D0438"
}
],
"chain": "ethereum",
"description": "Member of Taiko Foundation Treasury Multisig, Taiko Multisig.\n* Can upgrade **with no delay**\n * ProverSet ",
"discoveryDrivenData": true
},
{
"id": "EOA-2-and-EOA-3",
"name": "EOA 2 and EOA 3",
"id": "EOA-2",
"name": "EOA 2",
"accounts": [
{
"address": "eth:0x5F62d006C10C009ff50C878Cd6157aC861C99990",
"type": "EOA",
"isVerified": true,
"name": "0x5F62…9990",
"url": "https://etherscan.io/address/0x5F62d006C10C009ff50C878Cd6157aC861C99990"
},
{
"address": "eth:0xCbeB5d484b54498d3893A0c3Eb790331962e9e9d",
"type": "EOA",
"isVerified": true,
"name": "0xCbeB…9e9d",
"url": "https://etherscan.io/address/0xCbeB5d484b54498d3893A0c3Eb790331962e9e9d"
}
],
"chain": "ethereum",
"description": "* A Sequencer - acting directly",
"discoveryDrivenData": true
}
]
},
"taiko": {
"roles": [],
"actors": [
{
"id": "DelegateController",
"name": "DelegateController",
"accounts": [
{
"address": "taiko:0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C",
"type": "Contract",
"isVerified": false,
"name": "0xfA06…8C7C",
"url": "https://taikoscan.io/address/0xfA06E15B8b4c5BF3FC5d9cfD083d45c53Cbe8C7C"
}
],
"chain": "taiko",
"description": "* Can upgrade **with no delay**\n * Bridge \n * SignalService \n * L2AddressManager \n * TaikoAnchor \n * DefaultResolver \n * DelegateController \n* Can interact with L2AddressManager\n * can update the contract address for a given name \n* Can interact with DefaultResolver\n * can update the contract address for a given name ",
"discoveryDrivenData": true
}
]
}
}