Skip to content

Architecture

sanect is a privacy-focused EVM Layer-1 (codenamed pvtchain during early development; renamed to sanect for the public launch).

Status: mainnet live (sanect_7628-1, EVM chain ID 7628) since 2026-06-22. Shielded path (ShieldedPool v1.4) is deployed and verified end-to-end — see Shielded transfers for usage and Privacy model for the design.


Goals

RequirementTarget
Block time~400 ms
Throughput2,000–5,000 tx / block
ConsensusDPoS, top 50 validators by stake; open delegation
Smart contractsNative EVM (Solidity, MetaMask / JSON-RPC)
EconomicsCustom token denom, custom gas model, configurable gas price
TransfersTwo paths: (1) public send/receive, (2) shielded send with passive auto-receive (no claim tx)
NodesAnyone can run a full node / public RPC node
Testnet hostRailway, 24 GB / 24 vCPU per box, up to 1000 boxes × 100 replicas

Stack — Cosmos SDK + CometBFT + evmOS

            EVM contracts (Solidity, MetaMask, ethers)

                ┌───────────▼───────────┐
                │     x/evm + x/erc20   │  evmOS modules
                │     x/feemarket       │
                ├───────────────────────┤
                │   x/staking (DPoS)    │
                │   x/bank x/mint ...   │  Cosmos SDK v0.53.4
                ├───────────────────────┤
                │      CometBFT v0.38   │  BFT consensus, ~400 ms blocks
                └───────────────────────┘

Why this stack:

  • CometBFT consensus reaches sub-second finality and is tunable to ~400 ms with a small, well-connected validator set.
  • Cosmos SDK x/staking is DPoS out of the box: set MaxValidators = 50, top-by-stake become active, delegation / redelegation / unbonding / slashing all built in. Minimal custom code needed.
  • cosmos/evm modules (x/evm, x/feemarket, x/erc20) provide a native EVM inside the Cosmos binary — real Solidity, JSON-RPC, MetaMask — while keeping custom modules and staking in the same state machine. This is the only mature path to "EVM + custom L1 modules + DPoS" in one chain.
  • Custom precompiles are supported — required for fast in-EVM verification of the privacy proofs.

Rejected options:

  • Substrate/Polkadot — weaker EVM via Frontier, significantly steeper learning curve
  • From-scratch chain — reinventing consensus/staking is not worth the cost for a small team

Consensus & performance tuning

CometBFT config

Validators run config.toml with:

toml
timeout_commit              = "400ms"   # primary block-time lever
timeout_propose             = "300ms"
skip_timeout_commit         = false
create_empty_blocks         = true      # keep 400ms cadence even when idle
create_empty_blocks_interval = "0s"

Genesis consensus params

json
{
  "block": {
    "max_bytes": 22020096,
    "max_gas":   150000000
  }
}

max_bytes = ~21 MB gives room for 2–5k transactions. max_gas = 150M gives headroom for ZK proof verification alongside normal transactions.

Hard truths to design around

ConstraintImplication
50 validators tolerates 16 faulty (BFT f = (n−1)/3)Deliberate decentralisation / latency tradeoff — fine for a fast chain
400 ms timeout_commit means wall-clock RTT dominatesSpread validators across regions per Variant A topology (Asia 52% / EU+US 48%) — cross-continent latency is manageable with tuned timeouts
2–5k tx/block at 400 ms ⇒ 5k–12k TPS targetBottlenecks will be EVM execution and mempool gossip, not consensus — plan load tests early

Performance targets

Public (EVM / bank)Shielded (when shipped)
Tx per block2,000–5,000~100–500 (ZK proof verify ≈ 1–3 ms each)
Tx size~150–300 B~1–2 KB (ZK proof + encrypted notes)
Client-side provingnone~0.5–3 s per shielded spend
State growthprunablemonotonic (nullifier set can't be pruned)

Node topology

Roles

                        ┌──────────────┐
                        │  50 Validators │  (consensus only, hardened, co-located)
                        └──────┬───────┘
                               │ private p2p
                   ┌───────────▼───────────┐
                   │    Sentry full nodes   │  (DDoS shield, 2–3 per validator)
                   └───────────┬───────────┘
                               │ public p2p
                   ┌───────────▼───────────┐
                   │  Public RPC replicas   │  (read-only, scale via state sync)
                   └───────────────────────┘

How it scales:

  • 50 validators — the only nodes in consensus. Co-located, hardened, persistent volumes.
  • Sentry nodes — validators sit behind sentry full nodes (DDoS shield). Public traffic never reaches validators directly.
  • RPC replica fleet — public-facing read nodes that sync via CometBFT state sync. Scale horizontally without overloading validators. Front with a load balancer.
  • State sync enables new nodes to join without replaying the full chain from genesis.

This maps to Railway's topology: private networking for validator↔validator traffic; public subdomain for the RPC fleet.


Economics — token & gas

  • Token: SNCT (display) / asnct (base denom, 18 decimals)
  • Gas: x/feemarket (EIP-1559 style) — base fee + tip, configurable min gas price, burn/tip split set in genesis. Lets you fix a floor price and let it float under load.
  • Fee token for shielded txs: same denom as public txs (simplest; separating to a different denom moves to v2 if needed).
  • Staking rewards / inflation: x/mint + x/distribution. Parameters set in genesis.

Module layout

app/
  app.go                       # wire SDK + evmOS + custom modules
x/staking      (SDK)           # DPoS, MaxValidators = 50
x/evm          (evmOS)         # native EVM
x/feemarket    (evmOS)         # EIP-1559 gas
x/erc20        (evmOS)         # ERC-20 <-> bank denom
x/mint, distribution, slashing # rewards / security
precompiles/                   # staking, distribution, gov, slashing, bank, WERC20

The privacy module (ShieldedPool v1.4) is a Solidity contract on the EVM, not a Cosmos SDK module. It uses a Noir circuit compiled to UltraHonk proofs verified by an on-chain HonkVerifier contract.


Deployment

ComponentSetup
Validators (50)NVMe-backed hosts (Vultr, Hetzner, or bare metal), low-latency regions per Variant A topology, persistent volumes for chain data
Sentries2–3 per validator, public-facing, shield validators from direct connection
RPC replicasRead-only nodes scaled via state sync; fronted by load balancer
Archive RPCFull-history node (PRUNING=nothing) at archive.sanect.com for indexers and explorers
Genesis & keysScripted genesis via scripts/localnet.sh, validator registration via staking precompile
ObservabilityPrometheus (instrumentation.prometheus = true) + Grafana for block time, mempool, missed blocks

NVMe recommended

400 ms blocks require local NVMe storage. Shared/networked storage (ZFS, EBS) introduces I/O contention that can push block times above 700 ms. See Run a validator for hardware recommendations.


What's shipped

  • Mainnet live (sanect_7628-1, EVM chain ID 7628) since 2026-06-22
  • ShieldedPool v1.4 with Noir/UltraHonk proofs — full shield/send/unshield verified
  • AMM DEX (Uniswap V2 fork) with 15+ LP pairs and MasterChef farm
  • On-chain Order Book DEX (CLOB) with limit/market orders
  • .snct name service (registration, auctions, marketplace, reverse records)
  • Hyperlane bridge to Ethereum mainnet (14 ERC-20 assets)
  • Browser-based ZK proving (~2-3s per transaction)

Roadmap

  • Multi-chain bridge expansion (Base, Arbitrum, Optimism, Polygon, BSC)
  • Multi-validator ISM upgrade (replace TrustedRelayerIsm with multisig)
  • IBC integration for Cosmos ecosystem connectivity
  • Off-chain note indexer for faster wallet sync
  • External security audit

Further reading