Architecture
sanect is a privacy-focused EVM Layer-1 (codenamed
pvtchainduring 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
| Requirement | Target |
|---|---|
| Block time | ~400 ms |
| Throughput | 2,000–5,000 tx / block |
| Consensus | DPoS, top 50 validators by stake; open delegation |
| Smart contracts | Native EVM (Solidity, MetaMask / JSON-RPC) |
| Economics | Custom token denom, custom gas model, configurable gas price |
| Transfers | Two paths: (1) public send/receive, (2) shielded send with passive auto-receive (no claim tx) |
| Nodes | Anyone can run a full node / public RPC node |
| Testnet host | Railway, 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/stakingis DPoS out of the box: setMaxValidators = 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:
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
{
"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
| Constraint | Implication |
|---|---|
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 dominates | Spread 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 target | Bottlenecks will be EVM execution and mempool gossip, not consensus — plan load tests early |
Performance targets
| Public (EVM / bank) | Shielded (when shipped) | |
|---|---|---|
| Tx per block | 2,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 proving | none | ~0.5–3 s per shielded spend |
| State growth | prunable | monotonic (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, WERC20The 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
| Component | Setup |
|---|---|
| Validators (50) | NVMe-backed hosts (Vultr, Hetzner, or bare metal), low-latency regions per Variant A topology, persistent volumes for chain data |
| Sentries | 2–3 per validator, public-facing, shield validators from direct connection |
| RPC replicas | Read-only nodes scaled via state sync; fronted by load balancer |
| Archive RPC | Full-history node (PRUNING=nothing) at archive.sanect.com for indexers and explorers |
| Genesis & keys | Scripted genesis via scripts/localnet.sh, validator registration via staking precompile |
| Observability | Prometheus (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
.snctname 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
- Privacy model — full shielded pool design, cryptography, ABI, threat model
- Precompiles reference —
shield/unshieldentry points and staking precompiles - Run a full / RPC node — join the network
- Run a validator — join the active set
- 1 → 50 validators on Railway — the Railway-specific topology walkthrough