mainnet live · chain 7628 privacy layer 1 · EVM-compatible

The EVM, with a shielded state.

Sanect is a Layer 1 that runs unmodified Solidity at 400 ms block times and adds a native zero-knowledge shielded pool. Same wallets, same tooling — and a transfer path where the sender is a proof, not an address.

block—
avg block time— ms
validators—/50
gas price— gwei
sourcerpc.sanect.com
01The public ledger

Every EVM address is a permanent, public dossier.

Balances, counterparties, salaries, timing. Indexed forever, by anyone, for free. On Ethereum, privacy today means a mixer, a bridge, or a different wallet. Sanect puts the private path on the same chain, behind the same wallet, one toggle away from the public one.

100%
of Ethereum transfers link sender to recipient
0
new seed phrases required on Sanect
address · 0x7cB6…d02Ewhat an indexer sees
  • employerAcme Labs (monthly, 4,200 USDC)
  • exchangeDeposits to Binance 14
  • friend0x9f2a…c41b · 31 transfers
  • balance128,410.22 USDC · 4.8 ETH
  • timezoneUTC+5:30 · active 09:00–23:00
  • donations3 political · 2 medical
▮ shielded on sanectsender: proof · not address
02What Sanect is

One chain. Two transfer paths. Same wallet.

Sanect is a dual-stack Layer 1: an EVM execution layer on a Cosmos SDK base, joined by precompiles. The shielded pool is a contract on that EVM — not a sidechain, not a rollup, not a bridge.

L0
Wallet
Any EVM wallet. MetaMask, Rabby, Frame — connect, sign one message, and your shielded keys are derived for life.
personal_sign → HKDF
L1
JSON-RPC
Standard eth_* surface. Hardhat, Foundry, ethers, viem — unchanged.
rpc.sanect.com · chain 7628
L2
Execution
EVM
cosmos/evm v0.4.1 · unmodified Solidity · ERC-20 / 721 · Paris
Shielded pool
ShieldedPool v1.4 · Poseidon-2 Merkle tree · HonkVerifier
public state ↔ shield / unshield ↔ private state
L3
Modules
Cosmos SDK v0.53 staking, distribution, governance and slashing — exposed to the EVM as precompiles at 0x…800–806.
DPoS · top-50 by stake
L4
Consensus
CometBFT v0.38. Deterministic finality — a committed block is final, not probably final.
timeout_commit 400 ms · 150M gas/block
03A shielded transfer, step by step
shielded transfer · lifecycle
WALLET · METAMASK personal_sign( "sanect.shielded.v1: derive viewing key…" ) HKDF-SHA256 domain-separated VIEWX25519 SPENDin-proof viewing key → finds your notes (decrypts memos) spending key → authorises spends inside the proof no new seed phrase · deterministic · re-sign to recover DERIVATION_MESSAGE is frozen — keys never change NOTE { asset: SNCT, value: 1,250.00, owner_pk, salt } POSEIDON-2 BN254 c = 0x0b59…568d MERKLE TREE · depth 32 · append-only root ↑ new commitment MEMO · 240 B X25519 + ChaCha20 NOIR CIRCUIT · transfer.nr · 2-in / 2-out 6,307 gates · 8 public inputs · UltraHonk · universal SRS commitment ∈ Merkle tree (path to a recent root) owner_pk derived from the spending key you hold nullifier = H(note, spending_key) — unique per note Σ inputs + public_amount = Σ outputs (same asset_id) output commitments well-formed proving in browser (wasm) · ~2–3 s · nothing leaves the device → proof (bytes) + 8 public inputs SHIELDEDPOOL.transact() HonkVerifier.verify(proof, inputs) → true 1 block · deterministic final RECENT ROOTS 32-slot window NULLIFIER SET · append-only · one entry per spent note 0x18a4f0c2…9be1 spent 0x7d0e33b8…c410 spent 0xa12c9d47…04ff spent 0x5e91bc03…77d2 ← this spend double-spend → nullifier already present → revert forged proof → verifier returns false → revert observers see: one nullifier, one commitment. no sender. NEW MEMOS ON CHAIN · scanned by the recipient wallet memo #4181 ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ × not mine memo #4182 ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ × not mine memo #4183 { SNCT · 1,250.00 · salt } ✓ decrypts memo #4184 ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ × not mine SHIELDED BALANCE + 1,250.00 SNCT spendable now no claim tx · no interaction · works after any time offline an indexer serves scans at scale; wallets can also scan RPC
01 · Derive

One signature. Two keys. No new seed phrase.

The wallet asks MetaMask to sign a fixed message once. The signature is fed through HKDF-SHA256 into a viewing key and a spending key. Recovery on a new device is “connect, sign once.”

02 · Shield

Value becomes a note.

A deposit into the ShieldedPool creates a note {asset, value, owner_pk, salt}. Only its Poseidon-2 commitment is stored on chain, appended to a depth-32 Merkle tree. A 240-byte encrypted memo (X25519 + ChaCha20-Poly1305) lets the recipient find it.

03 · Prove

Spending is a proof, not a signature.

In the browser, a Noir 2-in/2-out circuit (6,307 gates, 8 public inputs) proves Merkle inclusion, key ownership, a correct nullifier and value conservation — without revealing which note is spent. UltraHonk, roughly two to three seconds on a laptop.

04 · Verify

The chain checks math, not identity.

The HonkVerifier contract accepts or rejects the proof on chain. The nullifier is recorded so no note can be spent twice. A 32-slot window of recent roots means a proof built against a slightly stale tree still lands.

05 · Receive

Funds appear. There is no claim step.

The recipient’s wallet trial-decrypts new memos with its viewing key. A memo that opens is a note it owns — spendable immediately, even if the wallet was offline for a year.

04Disclosure is per transaction

Four ways to send. You choose what is visible.

Privacy is not binary. Each mode hides a different combination of sender, recipient and amount. The wallet detects the recipient type and picks the mode for you — the explorer sees only what you allowed.

from0x7cB6…d02Evisible
to0x9f2a…c41bvisible
amount100.00 SNCTvisible
shielded balance needednofrom public balance
what the explorer shows

“R sent 100 SNCT to A.” Full sender → recipient link.

use it for

Exchanges, public DeFi, anything already public.

from0x7cB6…d02Evisible
to0x9f2a…c41bhidden
amount100.00 SNCTvisible
shielded balance needednofrom public balance
what the explorer shows

“R deposited 100 SNCT into the pool.” New commitment + encrypted memo.

use it for

Pay one person privately from a public balance.

from0x7cB6…d02Ehidden
to0x9f2a…c41bvisible
amount100.00 SNCTvisible
shielded balance neededyesspend from pool
what the explorer shows

“Pool sent 100 SNCT to A.” One nullifier consumed — no link to R.

use it for

Contractors, donations, settling with people who aren’t shielded.

from0x7cB6…d02Ehidden
to0x9f2a…c41bhidden
amount100.00 SNCThidden
shielded balance neededyesspend from pool
what the explorer shows

“Pool activity.” One nullifier consumed, one commitment added.

use it for

Salary, recurring transfers, counterparties who both value discretion.

05EVM compatibility

Change one line. Keep everything else.

Sanect speaks standard JSON-RPC and runs the same bytecode. Contracts deploy unchanged, tests run unchanged, wallets connect unchanged. Privacy is a contract you can call — and staking, governance and rewards are precompiles you can call from Solidity.

  • MetaMask
  • Rabby
  • Frame
  • ethers
  • viem
  • Hardhat
  • Foundry
  • Solidity
hardhat.config.ts
export default {
  networks: {
    sanect: {
      url: "https://rpc.sanect.com/",   // the only change
      chainId: 7628,
    },
  },
}
deploy · foundry
forge create src/MyContract.sol:MyContract \
  --rpc-url https://rpc.sanect.com/ \
  --private-key $PK
# same bytecode · same ABI · confirmed in ~1 block (≈ 400 ms)

Chain-level modules, as contracts.

cosmos/evm precompiles — callable from any wallet or contract, no special client.

0x…800Stakingdelegate · undelegate · redelegate · createValidatorprecompile
0x…801Distributionclaim rewards · withdraw addressprecompile
0x…804Bankmulti-sendprecompile
0x…805Governancesubmit proposals · voteprecompile
0x…806Slashingunjailprecompile
0xEeee…EEeEWERC20native SNCT with an ERC-20 interface — same coins, any DEXprecompile
0x5532…3ecfShieldedPool v1.4shield · transact(proof) · unshield — the privacy primitivecontract
06The network, right now

Deterministic finality every 400 milliseconds.

CometBFT consensus over a top-50 delegated proof-of-stake set. A committed block cannot be reorganised. Numbers below are read live from the chain — if a source is down, it shows a dash rather than a guess.

block height
—
live · eth_blockNumber
avg block time
—ms
live · explorer
bonded validators
—/ 50
live · staking module
SNCT bonded
—
live · staking pool
block target
400ms
timeout_commit
block gas limit
150M
≈ 2–5k transfers / block
min gas price
1gwei
~0.00002 SNCT per transfer
finality
BFT
deterministic · > ⅔ stake
unbonding
21days
slashing on downtime / double-sign
chain id
7628
0x1dcc · sanect_7628-1
08Security posture · roadmap

What we can claim. What we can’t yet.

  • ✓
    No per-circuit trusted setup. UltraHonk over Barretenberg’s universal SRS. No ceremony, no toxic waste tied to our circuit.
  • ✓
    Deterministic finality. CometBFT — safe with up to ⅓ faulty stake; a committed block is final.
  • ✓
    Reviewable code. Contracts, circuit, wallet and node are public. Source-available licence.
  • ✓
    Round-trip verified on mainnet. Shield → send → unshield confirmed on chain, with 17 Foundry tests across Poseidon-2 and the pool.
  • …
    External audit — underway, not complete. Reports will be published in full, unredacted, when done. Until then, treat the shielded pool as pre-audit.
  • ✓
    Bug bounty active. Up to 50,000 SNCT for critical findings. Disclosure policy →
Roadmap
  1. Q1 2026
    TestnetChain 76287 · explorer · staking dApp · validator set
  2. Q2 2026
    Shielded protocolShieldedPool v1.4 · Poseidon-2 tree · browser proving
  3. Jun 2026
    Mainnet genesisChain 7628 · Hyperlane bridge · DEX · .snct names
  4. Jul 2026
    Order bookFully on-chain CLOB at trade.sanect.com
  5. Q3 2026
    Multi-chain & hardeningBase / Arbitrum / Optimism bridges · multi-validator ISM · audit · Safe migration
  6. 2027 →
    Governed by the networkPrivate contract execution · IBC · mobile SDK — decided on chain
Full roadmap →
Start

Point your tooling at sanect.

Add the network to your wallet, deploy with the toolchain you already use, and make a shielded transfer in under a minute.

RPC https://rpc.sanect.com/ chain 7628 · 0x1dcc symbol SNCT explorer scan.sanect.com