Wownero
source
Manual code review
Basics
C++, fork of monero
uses:
- Cmake
- Libsodium
- ZeroMQ
P2P Protocol structure
WOWnero uses Levin Protocol (from Monero & Cryptonote)
P2P message structure:
- header: protocol signature id / body length / excpect response bool / command id / return code / flags bit field / version
- message body
flags = message types Q = request S = resonse B = beginning of a fragmened message E = end of a fragmented message
Protocol commands: standard and admin commands
Blockchain structure
- TxPool: transactions which are not yet in a block. When the transaction pool hits 50, a new block is calculated.
- TX: transactions.
- Blocks: blocks grouping validated transactions
- Chain: contains blocks
- Outputs: part of the transaction (1 input (amount), multiple outputs)
basic info:
- Block id is called "height"
- Sync() operation syncs the DB to disk (RAM by default)
specific info:
- ID are stored in the DB, not hashes! Using a table to convert from ID to hash.
- in tx outputs , stealth addresses are provided, not real address! You must use the viewkey to know if your address is in the payout.
- one-time transaction private keys are created!
- Ring Confidential Transactions (RCT): transactions are signed by a group, the "real" signer is harder to find; In Wownero, the ring size is 22 (instead of 11 for Monero)
Fluffy Block?
RCT Output
User wallet
Privacy first: Opaque blockchain.
To see if a public address is in a tx output (ie "DO I HAVE A PAYOUT????"): provide public address + private viewkey
To see if a public address sent something (ie "signature plzzz": provide recipient public address + tx private key
An user has:
- public address
- private BIP-39 seed
- private view key
- public view key
- private spend key
- public spend key