Choose the smallest privacy surface that fits.
Public Solidity state, standard signatures and familiar wallet flows. Best for registries, governance and transparent DeFi.
A public application initiates deposits and withdrawals while value moves privately inside the shielded pool.
Contracts consume verified claims without reading hidden inputs, enabling gated access, private treasury flows and confidential settlement.
Ethereum-compatible where public; explicit where private.
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.
Download compact commitments and encrypted note payloads from one or more indexers.
Use the viewing key locally to identify owned notes; never upload spending keys.
Resolve an accepted anchor root and construct Merkle authentication paths.
Build the zero-knowledge proof locally with circuit and chain domain separation.
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.
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.Do not leak memo text, customer IDs or order identifiers in public logs.
Pin verifier and circuit versions; upgrades require a declared migration window.
Treat stale roots, duplicate nullifiers and proof failures as distinct, recoverable states.
Viewing-key disclosure is user-controlled and scoped; no universal backdoor is assumed.
