Skip to main content
  1. Who pays for the network fees? The user pays Base network fees on deposit (included in the txSender callback). For withdrawals, the transaction is submitted directly and the user’s wallet also covers gas.

    After you integrate with the SDK, no additional fee infrastructure is needed.
  2. What’s the minimum deposit and withdrawal amount? Both are 0.001 ETH. Attempting to deposit or withdraw below this threshold will throw an error.
  3. Is there testnet support? Not currently. Please test on Base mainnet. Amounts as small as 0.001 ETH work fine for testing.
  4. Does the client ever send the private key or encryption key to the relayer? No. The signature derived from signMessage never leaves the client. All key derivation and UTXO decryption happens locally in the browser or Node.js process.
  5. What keyBasePath should I use?
    • Next.js frontend: Place circuit2.zkey in public/ and pass keyBasePath: '/circuit'.
    • Node.js backend: Pass the path relative to your working directory, e.g., keyBasePath: './circuits/transaction'.
  6. Why does withdraw() succeed but the recipient receives less than the requested amount? Fees (flat fee + 0.35% rate fee) are deducted from withdrawAmountInput. The recipient receives withdrawAmountInput - fees. See Withdraw for the exact fee formula.
  7. Why does getBalance() take a while? It scans all historic NewCommitment events from the contract and attempts to decrypt each one locally. Performance scales with the total number of deposits ever made to the pool. Caching is built into the SDK to speed up repeated calls.
  8. Can I use the Base SDK in a Node.js script without a browser wallet? Yes. Create an ethers.Wallet from your private key, call signer.signMessage(SIGN_PRIVACY_MESSAGE) to get the signature, and implement txSender using signer.sendTransaction(). See the Backend Integration page for a full example.
  9. Can I clear the local event cache? Yes. Call clearCache() exported from privacycash-evm to reset the cached UTXO event data.
    import { clearCache } from 'privacycash-evm'
    clearCache()