Skip to content

About the protocol ​

Carbon12 (C12) is a sovereign Cosmos SDK Layer-1 application (c12d) focused on environmental and metered-energy records: reporters post refundable deposits, independent checkers challenge within defined windows, optional AI review and court adjudication settle disputes, and period roll-ups commit RFC 6962 Merkle roots. The EVM module is a compatibility layer only — execution and state for C12 logic live in native modules; EVM exposes a read-only precompile surface.

Token economics (Path B staking, bonds, fees) are documented in chain ADR-0002 and docs/product/parameters.md — values on testnet are placeholders where noted in ADR-0019. Economics are subject to change until mainnet governance locks parameters.

Architecture ​

mermaid
flowchart TB
  subgraph Clients
    W[Cosmos wallets / CosmJS]
    E[EVM wallets / ethers·viem]
    P[Platform Writer API]
  end

  subgraph C12d["c12d (CometBFT + Cosmos SDK)"]
    REG[x/registry]
    ATT[x/attest]
    CHK[x/checking]
    CRT[x/court]
    CLM[x/claim]
    AGG[x/aggregate]
    ORA[x/oracle]
    GOV[x/c12gov]
    EVM[cosmos-evm + feemarket]
    PRE[IC12 precompile read-only]
  end

  W --> REST[REST / gRPC / RPC]
  E --> EVMRPC[EVM JSON-RPC]
  P --> GRPC[gRPC tx broadcast]

  REST --> C12d
  EVMRPC --> EVM --> PRE
  PRE -.-> ATT
  PRE -.-> AGG
  PRE -.-> CHK
  PRE -.-> CLM

  REG --> ATT
  ATT --> CHK
  CHK --> CRT
  CHK --> CLM
  ATT --> AGG
  ORA --> CHK
  GOV --> REG

Native modules (summary) ​

ModuleRole
x/registryParticipants, assets, schemas, minters
x/attestEventFact records (MsgIssue, MsgCorrect, MsgRetract)
x/checkingDeposits, challenge/response windows, rules, AI review hooks, settlement
x/courtAdjudicator panels, commit/reveal votes
x/claimJ ledger (claim units — not a bank denom)
x/aggregatePeriod roll-ups + Merkle roots (RFC 6962 SHA-256)
x/oracleuusd_per_uc12 price feed for dollar-denominated params
x/reputationParticipant scores
x/treasuryInsurance / audit module accounts
x/c12govGov wrapper + validator admission

Standard Cosmos modules (auth, bank, staking, slashing, gov, upgrade, IBC, …) and cosmos-evm are wired in app/app.go.

Checking & bonds (on-chain defaults) ​

From x/checking/types/params.go (see also docs/spec/03-checking.md):

ParameterDefault
Challenge window60 days (window_seconds)
Response window10 days
AI review window7 days
Minimum deposit$50 (min_deposit_uusd, micro-dollars)
Minimum checker stake floor$500 (min_stake_uusd)
Deposit rate (independent meter)10% base (1000 bps)
Deposit rate (no independent meter)25% (2500 bps)

Local devnet/testnet bring-up scripts shorten windows (e.g. 120s challenge) via patch_genesis in devnet/scripts/lib.sh — do not assume those values on a long-lived public testnet unless the published genesis says so.

J claim units ​

J is minted only for is_supply: true schemas from each schema’s claim_unit_parameter quantity at issue. Consumption schemas (e.g. Scope 3 business travel) mint no J (ADR-0023). Canonical energy parameter uses unit J (kWh display scale in spec). See x/claim and docs/spec/04-court-reputation-claim.md.

Merkle roll-ups ​

x/aggregate builds RFC 6962-style trees (x/aggregate/types/merkle.go):

  • Leaf: SHA256(0x00 || record_id)
  • Internal node: SHA256(0x01 || left || right)
  • Odd leaf promoted; empty set root = SHA256("")

Schemas example: scope3_business_travel_v1 ​

Fixture schema in x/registry/types/devnet.go / ADR-0023:

  • Domain: emissions, is_supply: false (no J)
  • Required roles: OPERATOR + INTEGRATOR
  • Parameters: co2e (gCO₂e), scope (=3), distance (metres; miles converted off-chain)
  • Rules: DUPLICATE_SUBJECT_WINDOW_V1, TIME_BOUNDS_V1 only

Token & denoms ​

SymbolOn-chainNotes
C12uc12Staking, fees, bonds
EVM extended denomac1218-decimal mapping in genesis — not a second token
Accounting unituusdMicro-dollars for params — not a spendable denom

EVM compatibility layer ​

  • Testnet EVM chain id: 12121
  • Read-only precompile at 0x0000000000000000000000000000000000000C12 (precompiles/c12/IC12.sol)
  • Methods: head, record, aggregate, claimState, reputation, checkingState
  • Calls with value revert; precompile is blocked from bank sends (ADR-0015)

Further reading (chain repo) ​

Testnet tokens have no monetary value. Mainnet is planned.