Bitmap Privacy Chain
03 / BUILD

EVM outside. ZK inside.

Deploy conventional Solidity contracts through familiar tooling, then add privacy only where the application needs it through explicit shield, transfer and unshield operations.

SDK INTERFACE FREEZE IN PROGRESS

Choose the smallest privacy surface that fits.

MODE AStandard EVM

Public Solidity state, standard signatures and familiar wallet flows. Best for registries, governance and transparent DeFi.

MODE BPrivate settlement

A public application initiates deposits and withdrawals while value moves privately inside the shielded pool.

MODE CProof-aware application

Contracts consume verified claims without reading hidden inputs, enabling gated access, private treasury flows and confidential settlement.

Ethereum-compatible where public; explicit where private.

SURFACECOMPATIBILITYRESPONSIBILITY
JSON-RPCeth_call, eth_sendRawTransaction, eth_getLogsPublic EVM execution and indexing
SolidityABI, events, bytecode, common toolingTransparent contracts and adapters
WalletEIP-1193 public providerChain selection and public signing
Privacy SDKDedicated typed clientKey derivation, note scan, witness and proof creation
IndexerPublic logs + encrypted note payloadsApplication views without consensus authority
bitmap.config.ts
export default {
  chainId: "<genesis-assigned>",
  rpcUrl: "https://rpc.<network>",
  settlementAsset: "BTCB",
  privacy: {
    pool: "<shielded-pool-address>",
    circuitVersion: "v1",
    prover: "local",       // witness never leaves device
    scanKeyStorage: "secure"
  }
}

Proof construction stays on the client boundary.

01SYNC

Download compact commitments and encrypted note payloads from one or more indexers.

02SCAN

Use the viewing key locally to identify owned notes; never upload spending keys.

03WITNESS

Resolve an accepted anchor root and construct Merkle authentication paths.

04PROVE

Build the zero-knowledge proof locally with circuit and chain domain separation.

05SUBMIT

Broadcast only proof, nullifiers, new commitments, fee and public delta.

A remote prover can reduce device cost but learns sensitive witness material unless protected by additional cryptography. Local proving is the default security posture.

Verify claims, never private inputs.

ConfidentialSettlement.sol — interface sketch
interface IShieldedPool {
  function shield(bytes32 commitment, uint256 amount) external;
  function transact(
    bytes calldata proof,
    bytes32 anchorRoot,
    bytes32[] calldata nullifiers,
    bytes32[] calldata commitments,
    int256 publicDelta
  ) external;
}

// Application invariant:
// accept only supported circuitVersion + chainId domain;
// never infer privacy from a normal ERC-20 transfer.
Event design

Do not leak memo text, customer IDs or order identifiers in public logs.

Upgrade boundary

Pin verifier and circuit versions; upgrades require a declared migration window.

Failure handling

Treat stale roots, duplicate nullifiers and proof failures as distinct, recoverable states.

Compliance hooks

Viewing-key disclosure is user-controlled and scoped; no universal backdoor is assumed.

Ship only after the full boundary is tested.

01Pin chain ID, verifier and circuit versionREQUIRED
02Test deposit and withdrawal accounting invariantsREQUIRED
03Run note recovery from viewing and recovery keysREQUIRED
04Use at least two independent indexersRECOMMENDED
05Model metadata leakage and timing correlationREQUIRED
06Exercise emergency pause and user exit pathREQUIRED