New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ZeroCT - Initial Zerocoin support with Anonymous Identities #412

wants to merge 3 commits into
base: master


None yet
2 participants
Copy link

skreener commented Feb 3, 2019

  • Adds support for Zerocoin Mint and Spend operations
  • New type of address to anonymously receive coins
  • Deterministic private address generated from master private key of the wallet
  • Use of GMP for Bignum operations
  • Use of threading for Mint and Spend verification
  • Witnesser thread for pre-computing of coin witnesses
  • Monitoring of public and private coin supply
  • Staking with private coins
  • Calculation of staking weight based on private coins
  • Fees collected from public transactions are accumulated and only earned by public coin stakes
  • Stakes using coins from the private pool earn in exclusive accumulated fees from private transactions
  • New default data folder: NavCoin5 / navcoin5
  • Testnet uses testnet4 to store chain data.
  • Old NavTech functionality and references are removed
  • GUI-level integrations of private transactions functionality
  • Encryption of the obfuscation parameters for encrypted wallets
  • New rpc commands:
    • getprivateaddress
    • privatesendtoaddress
    • dumpprivateparameters
  • New daemon arguments:
    • -enablewitnesser: enables witnesser thread to precompute coin witnesses (default true)
    • -witnesser_block_snapshot: count of blocks to snapshot and backup witnesses value
    • -witnesser_blocks_per_round: count of checked blocks per witnessing round
  • Includes libzerocoin test units

Consensus rules

  • Transactions do not admit combinations of public and private coins as inputs
  • Serial numbers and Mint coin values can only be spent once
  • Denominations: 1, 5, 10, 50, 100, 500, 1000, 5000
  • Spend fee: 1 NAV per transaction
  • Mint fee: per transaction weight

To do

  • Include obfuscation parameters in dumpwallet output
  • When a transaction size is too big, split it in different transactions containing the different spend proofs
  • Accommodate wallet-related RPC commands to the new private transactions functionality
  • Redesign/improve UX in the GUI
  • Remove critical log entries which could compromise user's privacy
  • Improve proof's verification time/general performance
  • Testing ;-)


  • Support Bulletproofs and transaction amount obfuscation

@skreener skreener force-pushed the skreener:zeroct1 branch from 8ccf45e to 408ae2f Feb 3, 2019

@aguycalled aguycalled force-pushed the skreener:zeroct1 branch from ea91725 to 408ae2f Feb 6, 2019

aguycalled added some commits Feb 7, 2019

not check if transaction is in chain when selecting zerocoin for staking
pcoinsTip could reflect something different than the current chainstate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment