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
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 --> REGNative modules (summary)
| Module | Role |
|---|---|
x/registry | Participants, assets, schemas, minters |
x/attest | EventFact records (MsgIssue, MsgCorrect, MsgRetract) |
x/checking | Deposits, challenge/response windows, rules, AI review hooks, settlement |
x/court | Adjudicator panels, commit/reveal votes |
x/claim | J ledger (claim units — not a bank denom) |
x/aggregate | Period roll-ups + Merkle roots (RFC 6962 SHA-256) |
x/oracle | uusd_per_uc12 price feed for dollar-denominated params |
x/reputation | Participant scores |
x/treasury | Insurance / audit module accounts |
x/c12gov | Gov 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):
| Parameter | Default |
|---|---|
| Challenge window | 60 days (window_seconds) |
| Response window | 10 days |
| AI review window | 7 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_V1only
Token & denoms
| Symbol | On-chain | Notes |
|---|---|---|
| C12 | uc12 | Staking, fees, bonds |
| EVM extended denom | ac12 | 18-decimal mapping in genesis — not a second token |
| Accounting unit | uusd | Micro-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)
- Normative spec:
docs/spec/ - Product parameters:
docs/product/parameters.md - Testnet policy: ADR-0019