[runtime, tesseract]: Arc consensus client - #1027
Draft
seunlanlege wants to merge 1 commit into
Draft
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
Consensus client for Arc, Circle's EVM L1 finalized by a fork of Malachite (the Tendermint consensus algorithm, but none of CometBFT's wire formats). Finality is attested by commit certificates: per-validator ed25519 signatures over SSZ-encoded precommits for the execution block hash.
Trust model
{Precommit, height, round, block_hash, address}and verify ed25519 signatures against the trusted validator set, requiring strictly more than 2/3 of total voting power (Malachite's quorum rule, including duplicate/unknown-signer rejection).keccak256(rlp(header)) == certificate.block_hash, yielding a trustedstate_root/timestampfor theStateCommitment. State machine dispatch reuses the genericEvmStateMachine(Arc is stock reth).0x36..02, ERC-7201 storage). Every update carries an EIP-1186 proof of the set against the newly finalized state root; the reconstruction mirrors the Arc node's owngetActiveValidatorSet()filtering (Active status, non-zero power, decompressible ed25519 key) so the adopted set and quorum denominator match consensus exactly. Adopting a new set always requires the previous set's signatures. Arc has no epochs, so rotation can happen at any block; the relayer walks back to the rotation boundary when a tip certificate no longer verifies.Components
arc-primitives/arc-verifier(modules/consensus/arc): no_std types, sign-bytes construction, registry slot derivation, and verification.arc-prover(modules/consensus/arc/prover): fetches certificates (arc_getCertificate), headers, and registry proofs. Public Arc RPCs run reth's default zeroeth_getProofwindow while producing 2–4 blocks/s, so proofs are requested at"latest"and the anchor block is discovered afterwards by verifying the account proof against candidate headers' state roots. A separate certificate endpoint is supported since third-party providers (e.g. Alchemy) don't proxy thearcnamespace.ismp-arc(modules/ismp/clients/arc): theConsensusClient, registered in the gargantua runtime. Fraud proof = two conflicting quorum certificates at the same height.tesseract-arc(tesseract/consensus/arc):IsmpHostconsensus relayer, registered astype = "arc"intesseract-consensus-config.Testing
test_arc_consensus_clientfollows live Arc testnet consensus liketest_beefy_consensus_client: bootstraps a trusted state from a storage proof, then fetches and fully verifies 5 consecutive finalized updates. Latest run verified certificates at heights 50764534–50764567 with 12/17–17/17 signature participation (17 active validators, total power 28000).test_arc_rejects_tampered_certificateverifies signatures re-pointed at a different block are rejected. Six verifier unit tests cover the quorum boundary (exactly 2/3 fails), duplicates, unknown signers, invalid signatures, and power weighting. CI gains anarcchange filter and a gatedarc-testsjob.Follow-ups
evm/config.testnet.tomlentry + HostExecutive params once the EvmHost is deployed on Arc testnet (chain id 5042002).