Search

Search for projects by name

Kroma logoKroma

Badges

About

Kroma aims to develop a universal ZK Rollup based on the Optimism Bedrock architecture. Currently, Kroma operates as an Optimistic Rollup with ZK fault proofs, utilizing a zkEVM based on Scroll and a zkVM based proven with SP1.


Value secured
$10.48 M5.93%
Canonically Bridged
$2.43 M
Externally Bridged
$5.34 M
Natively Minted
$2.70 M

  • Tokens
  • Past day UOPS
    1.322.25%
  • 30D ops count
    2.80 M

  • Stage
  • Type
    Optimistic Rollup
  • Purpose
    Universal
  • Sequencer failureState validationData availabilityExit windowProposer failure

    Badges

    About

    Kroma aims to develop a universal ZK Rollup based on the Optimism Bedrock architecture. Currently, Kroma operates as an Optimistic Rollup with ZK fault proofs, utilizing a zkEVM based on Scroll and a zkVM based proven with SP1.

    Recategorisation

    120d
    04h
    26m
    44s

    The project will be classified as "Other" due to its specific risks that set it apart from the standard classifications.

    The project will move to Others because:

    The proof system isn't fully functional

    Consequence: projects without a proper proof system fully rely on single entities to safely update the state. A malicious proposer can finalize an invalid state, which can cause loss of funds.

    Learn more about the recategorisation
    Value Secured
    Canonical
    External
    Native
    Activity
    Kroma
    Ethereum
    Onchain costs

    The section shows the operating costs that L2s pay to Ethereum.


    Calldata
    Blobs
    Compute
    Overhead

    Milestones & Incidents

    SP1 fault proofs upgrade

    2025 Feb 11th

    Kroma adds an option to prove faults using the SP1 zk virtual machine.

    Learn more

    Ecotone upgrade

    2024 Apr 25th

    Introduces EIP-4844 data blobs for L1 data availability and more L2 opcodes.

    Learn more
    Risk summary
    Risk analysis
    Sequencer failureState validationData availabilityExit windowProposer failure

    Sequencer failure

    Self sequence

    In the event of a sequencer failure, users can force transactions to be included in the project’s chain by sending them to L1. There can be up to a 12h delay on this operation.

    State validation

    Fraud proofs (INT, ZK)

    Fraud proofs allow actors watching the chain to prove that the state is incorrect. Interactive proofs (INT) require multiple transactions over time to resolve. ZK proofs are used to adjudicate the correctness of the last step. The challenge protocol can fail under certain conditions. The current system doesn’t use posted L2 txs batches on L1 as inputs to prove a fault (for the zkEVM prover path), meaning that DA is not always enforced.

    Data availability

    Onchain

    All of the data needed for proof construction is published on Ethereum L1.

    Exit window

    None

    There is no window for users to exit in case of an unwanted regular upgrade since contracts are instantly upgradable.

    Proposer failure

    Self propose

    Anyone can be a Proposer and propose new roots to the L1 bridge.

    Rollup stageKromaKroma is a
    Stage 0
    Optimistic Rollup.

    Learn more about Rollup stages
    Please keep in mind that these stages do not reflect rollup security, this is an opinionated assessment of rollup maturity based on subjective criteria, created with a goal of incentivizing projects to push toward better decentralization. Each team may have taken different paths to achieve this goal.
    Technology

    Fraud Proofs ensure state correctness

    Kroma uses an interactive fraud proof system to find a single block of disagreement, which is then ZK proven. Once the single block of disagreement is found, the challenger is required to present a ZK proof of the fraud. This can be either a proof verified in a zkEVM verifier base on Scroll, or in a zkVM verifier built by Succinct SP1. If the proof is validated, the incorrect state output is deleted. The Security Council can always override the result of the challenge, it can also delete any L2 state root at any time. The protocol can fail under certain conditions.

    • Funds can be lost if the cryptography is broken or implemented incorrectly.

    1. Colosseum.sol#L300 - Etherscan source code, createChallenge() function
    2. Colosseum.sol#L378 - Etherscan source code, bisect() function
    3. Colosseum.sol#L434 - Etherscan source code, proveFaultWithZkEvm() function
    4. KROMA-020: lack of validation segments and proofs in Colosseum.sol - ChainLight security audit

    All transaction data is recorded on chain

    All executed transactions are submitted to an on chain smart contract. The execution of the rollup is based entirely on the submitted transactions, so anyone monitoring the contract can know the correct state of the rollup chain.

    1. Derivation: Batch Submission - Kroma specs
    2. BatchInbox - Etherscan address
    3. KromaPortal.sol - Etherscan source code, depositTransaction() function
    Learn more about the DA layer here: Ethereum logoEthereum
    State derivation
    Node software

    Kroma nodes source code, including full node, proposer and validator, can be found here. Also, the geth server, source maintained here, is a fork of go-ethereum. For more details on how they are different from the Optimism implementation, see here. The instructions to run the proposer (called validator) and the ZK prover, are documented here.

    Compression scheme

    Data batches are compressed using the zlib algorithm with best compression level.

    Genesis state

    The genesis file can be found here.

    Data format

    L2 blocks derivation from L1 data plus the format and architecture of batch submission is documented here.

    Operator

    The system has a centralized sequencer

    While forcing transaction is open to anyone the system employs a privileged sequencer that has priority for submitting transaction batches and ordering transactions.

    • MEV can be extracted if the operator exploits their centralized position and frontruns user transactions.

    1. SystemConfig - batcher address

    Users can force any transaction

    Because the state of the system is based on transactions submitted on the underlying host chain and anyone can submit their transactions there it allows the users to circumvent censorship by interacting with the smart contract on the host chain directly.

    1. Sequencing Window - Kroma specs
    2. KromaPortal.sol - Etherscan source code, depositTransaction function
    Withdrawals

    Regular messaging

    The user initiates L2->L1 messages by submitting a regular transaction on this chain. When the block containing that transaction is settled, the message becomes available for processing on L1. The process of block finalization takes a challenge period of 7d to complete.

    1. KromaPortal.sol - Etherscan source code, proveWithdrawalTransaction function
    2. KromaPortal.sol - Etherscan source code, finalizeWithdrawalTransaction function

    Autonomous exit

    Users can (eventually) exit the system by pushing the transaction on L1 and providing the corresponding state root. The only way to prevent such withdrawal is via an upgrade.

    Other considerations

    EVM compatible smart contracts are supported

    OP stack chains are pursuing the EVM Equivalence model. No changes to smart contracts are required regardless of the language they are written in, i.e. anything deployed on L1 can be deployed on L2.

    1. Introducing EVM Equivalence
    Permissions

    Ethereum

    Roles:

    Allowed to pause deposits and withdrawals.

    Sequencer 0x41b8…cE12

    Allowed to commit transactions from the current layer to the host chain.

    Actors:

    KromaSecurityCouncil 0x3de2…6Ec4
    • Custom Multisig contract in which each signer is identified by a token. The threshold is 8 and the token contract is called SecurityCouncilToken.
    • A Guardian.
    • Is allowed to interact with Colosseum - dismiss ongoing challenges and override state roots (forceDeleteOutput()).
    • Is allowed to interact with ValidatorPool - become a validator without posting a bond.
    1. Security Council members - Announcing Kroma Security Council
    SuccinctGatewaySP1Multisig 0xCafE…6878
    • A Multisig with 2 / 3 threshold.
    • Is allowed to interact with SP1VerifierGateway - holds the power to affect the liveness and safety of the gateway - can transfer ownership, add and freeze verifier routes.

    Used in:

    SecurityCouncilTokenOwners 0xe4D0…B08c
    • A soulbound token implementation to identify participants of the KromaSecurityCouncil. Owners of the token are members of the council. There are currently 10 members.
    • Can act on behalf of UpgradeGovernor.
    • Is allowed to interact with TimeLock - cancel queued transactions - acting via UpgradeGovernor.
    • Is allowed to interact with TimeLock - execute transactions that are ready - acting via UpgradeGovernor.
    • Is allowed to interact with TimeLock - manage all access control roles - acting via TimeLock, UpgradeGovernor.
    • Is allowed to interact with TimeLock - manage all access control roles - acting via UpgradeGovernor.
    • Is allowed to interact with TimeLock - propose transactions - acting via UpgradeGovernor.
    • Is allowed to interact with SystemConfig - it can update the preconfer address, the batch submitter (Sequencer) address and the gas configuration of the system - acting via TimeLock, UpgradeGovernor.
    • Can upgrade the implementation of ZKProofVerifier, L2OutputOracle, TimeLock, ValidatorManager, KromaPortal, SystemConfig, KromaSecurityCouncil, L1CrossDomainMessenger, L1ERC721Bridge, ZkVerifier, Colosseum, AssetManager, UpgradeGovernor, SecurityCouncilTokenOwners, ValidatorPool - acting via ProxyAdmin, TimeLock, UpgradeGovernor.
    • Can upgrade the implementation of USDCBridge - acting via TimeLock, UpgradeGovernor.
    • Can upgrade the implementation of L1StandardBridge - upgrading the bridge implementation can give access to all funds escrowed therein - acting via ProxyAdmin, TimeLock, UpgradeGovernor.
    KromaRewardVaultMultisig 0xe57E…E950
    • A Multisig with 3 / 5 threshold.
    • Escrows a pool of KRO used as validator rewards by the AssetManager.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    KromaOperator 0x3aa0…29e6

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Is allowed to interact with SecurityCouncilTokenOwners - one of the signers of the KromaSecurityCouncil.

    Smart contracts
    A diagram of the smart contract architecture
    A diagram of the smart contract architecture

    Ethereum

    The L2OutputOracle contract contains a list of proposed state roots which Proposers assert to be a result of block execution. Anyone can participate as a Proposer by depositing in the ValidatorPool. A root can be proposed every 1800 blocks (2s block time).

    • A timelock with access control. The current minimum delay is 0s.
    • Can act on behalf of ProxyAdmin.
    • Can be used to interact with TimeLock - manage all access control roles.
    • Can be used to interact with SystemConfig - it can update the preconfer address, the batch submitter (Sequencer) address and the gas configuration of the system.
    • Can be used to upgrade implementation of USDCBridge.

    Manages the set of Proposers (Validators in Kroma) and selects the next proposer with the window to submit the output root within 30m, after which anyone can propose for them. It is also the entry point for other contracts, such as the L2OutputOracle and the Colosseum, which distribute output rewards and slash challenge losers. It makes successive calls to the AssetManager to apply changes to the proposers’ assets.

    This is a fork of the standard OP stack OptimismPortal contract, the main entry point to deposit funds from L1 to L2. It also allows to prove and finalize withdrawals. This contract stores the following tokens: ETH.

    ZKMerkleTrie 0x3392…610B

    Merkle Trie contract used to prove withdrawals that were initiated in the legacy system, deprecated for new withdrawals and succeeded by a merkle tree library in the KromaPortal.

    Contains configuration parameters such as the Sequencer address, gas limit on this chain and the unsafe block signer address.

    SP1VerifierGateway 0x3B60…185e

    This contract is the router for zk proof verification. It stores the mapping between identifiers and the address of onchain verifier contracts, routing each identifier to the corresponding verifier contract.

    Implementation used in:

    Sends messages from host chain to this chain, and relays messages back onto host chain. In the event that a message sent from host chain to this chain is rejected for exceeding this chain’s epoch gas limit, it can be resubmitted via this contract’s replay function.

    Used to bridge ERC-721 tokens from host chain to this chain.

    ProxyAdmin 0x665c…1edd
    • Can be used to upgrade implementation of ZKProofVerifier, L2OutputOracle, TimeLock, ValidatorManager, KromaPortal, SystemConfig, KromaSecurityCouncil, L1CrossDomainMessenger, L1ERC721Bridge, ZkVerifier, Colosseum, AssetManager, UpgradeGovernor, SecurityCouncilTokenOwners, ValidatorPool.
    • Can be used to upgrade implementation of L1StandardBridge - upgrading the bridge implementation can give access to all funds escrowed therein.

    ZK verifier used to verify the last step of a legacy zkEVM proof, which corresponds to a block.

    Contract used to challenge state roots and prove fraud. If successful, the wrong state root in the L2OutputOracle is replaced.

    This contract stores the following tokens: USDC.

    The main entry point to deposit ERC20 tokens from host chain to this chain. This contract can store any token.

    Manages the delegation and undelegation of KRO tokens and Kroma Guardian House (KGH) NFTs for Proposers (Kroma Validators) and distributes rewards.

    • A governance proxy contract using token voting with SecurityCouncilTokenOwners as identification of actors allowed to vote/sign a proposal which is passed to the TimeLock afterwards.
    • Can act on behalf of TimeLock.
    • Can be used to interact with TimeLock - cancel queued transactions.
    • Can be used to interact with TimeLock - execute transactions that are ready.
    • Can be used to interact with TimeLock - manage all access control roles.
    • Can be used to interact with TimeLock - propose transactions.
    SP1Verifier 0xd283…1d16

    Implementation used in:

    Poseidon2 0xFd23…d273

    Contract used to compute hashes. It is used by the ZKMerkeTrie. The contract has been generated using the circomlibjs library.

    1. Source Code

    Contract used to manage the Proposers. Anyone can submit a deposit and bond to a state root, or create a challenge. It also manages the Proposer rotation for each submittable block using a random selection. If the selected proposer fails to publish a root within 30m then the submission becomes open to everyone.

    Value Secured is calculated based on these smart contracts and tokens:

    Main entry point for users depositing ERC20 token that do not require custom gateway.

    Main entry point for users depositing ETH.

    Main entry point for users depositing USDC.

    The current deployment carries some associated risks:

    • Funds can be stolen if a contract receives a malicious code upgrade. There is no delay on code upgrades (CRITICAL).

    Knowledge nuggets