1. Cuprate Architecture
  2. 🟡 Foreword
  3. 1. 🟠 Intro
    1. 1.1. 🟡 Who this book is for
    2. 1.2. 🔴 Required knowledge
    3. 1.3. 🔴 How to use this book
  4. 2. ⚪️ Bird's eye view
    1. 2.1. ⚪️ Map
    2. 2.2. ⚪️ Components
  5. 3. ⚪️ Formats, protocols, types
    1. 3.1. ⚪️ monero_serai
    2. 3.2. ⚪️ cuprate_types
    3. 3.3. ⚪️ cuprate_helper
    4. 3.4. ⚪️ Epee
    5. 3.5. ⚪️ Levin
  6. 4. 🟢 Storage
    1. 4.1. 🟢 Database abstraction
      1. 4.1.1. 🟢 Abstraction
        1. 4.1.1.1. 🟢 Backend
        2. 4.1.1.2. 🟢 ConcreteEnv
        3. 4.1.1.3. 🟢 Trait
      2. 4.1.2. 🟢 Syncing
      3. 4.1.3. 🟢 Resizing
      4. 4.1.4. 🟢 (De)serialization
      5. 4.1.5. 🟢 Known issues and tradeoffs
        1. 4.1.5.1. 🟢 Abstracting backends
        2. 4.1.5.2. 🟢 Hot-swap
        3. 4.1.5.3. 🟢 Unaligned bytes
        4. 4.1.5.4. 🟢 Endianness
        5. 4.1.5.5. 🟢 Multimap
    2. 4.2. 🟢 Common behavior
      1. 4.2.1. 🟢 Types
      2. 4.2.2. 🟢 ops
      3. 4.2.3. 🟢 tower::Service
        1. 4.2.3.1. 🟢 Initialization
        2. 4.2.3.2. 🟢 Requests
        3. 4.2.3.3. 🟢 Responses
        4. 4.2.3.4. 🟢 Resizing
        5. 4.2.3.5. 🟢 Thread model
        6. 4.2.3.6. 🟢 Shutdown
    3. 4.3. 🟢 Blockchain
      1. 4.3.1. 🟢 Schema
        1. 4.3.1.1. 🟢 Tables
        2. 4.3.1.2. 🟢 Multimap tables
    4. 4.4. ⚪️ Transaction pool
    5. 4.5. ⚪️ Pruning
  7. 5. 🟢 RPC
    1. 5.1. 🟡 JSON-RPC 2.0
    2. 5.2. 🟢 The types
      1. 5.2.1. 🟢 Misc types
      2. 5.2.2. 🟢 Base RPC types
      3. 5.2.3. 🟢 The type generator macro
      4. 5.2.4. 🟢 Metadata
      5. 5.2.5. 🟡 (De)serialization
    3. 5.3. 🟢 The interface
    4. 5.4. 🔴 The handler
    5. 5.5. 🔴 The server
    6. 5.6. 🟢 Differences with monerod
      1. 5.6.1. 🟢 JSON field ordering
      2. 5.6.2. 🟢 JSON formatting
      3. 5.6.3. 🟢 JSON strictness
      4. 5.6.4. 🟡 JSON-RPC strictness
      5. 5.6.5. 🟡 HTTP methods
      6. 5.6.6. 🟡 RPC payment
      7. 5.6.7. 🟢 Custom strings
      8. 5.6.8. 🔴 Unsupported RPC calls
      9. 5.6.9. 🔴 RPC calls with different behavior
  8. 6. ⚪️ ZMQ
    1. 6.1. ⚪️ TODO
  9. 7. ⚪️ Consensus
    1. 7.1. ⚪️ Verifier
    2. 7.2. ⚪️ TODO
  10. 8. ⚪️ Networking
    1. 8.1. ⚪️ P2P
    2. 8.2. ⚪️ Dandelion++
    3. 8.3. ⚪️ Proxy
    4. 8.4. ⚪️ Tor
    5. 8.5. ⚪️ i2p
    6. 8.6. ⚪️ IPv4/IPv6
  11. 9. 🔴 Instrumentation
    1. 9.1. ⚪️ Logging
    2. 9.2. ⚪️ Data collection
  12. 10. ⚪️ Binary
    1. 10.1. ⚪️ CLI
    2. 10.2. ⚪️ Config
    3. 10.3. ⚪️ Logging
  13. 11. ⚪️ Resources
    1. 11.1. ⚪️ File system
      1. 11.1.1. 🟡 Index of PATHs
    2. 11.2. ⚪️ Sockets
      1. 11.2.1. 🔴 Index of ports
    3. 11.3. ⚪️ Memory
    4. 11.4. 🟡 Concurrency and parallelism
      1. 11.4.1. ⚪️ Map
      2. 11.4.2. ⚪️ The RPC server
      3. 11.4.3. ⚪️ The database
      4. 11.4.4. ⚪️ The block downloader
      5. 11.4.5. ⚪️ The verifier
      6. 11.4.6. ⚪️ Thread exit
      7. 11.4.7. 🔴 Index of threads
  14. 12. ⚪️ External Monero libraries
    1. 12.1. ⚪️ Cryptonight
    2. 12.2. 🔴 RandomX
    3. 12.3. 🔴 monero_serai
  15. 13. 🟢 Benchmarking
    1. 13.1. 🟢 Criterion
      1. 13.1.1. 🟢 Creating
      2. 13.1.2. 🟢 Running
    2. 13.2. 🟢 cuprate-benchmark
      1. 13.2.1. 🟢 Creating
      2. 13.2.2. 🟢 Running
  16. 14. ⚪️ Testing
    1. 14.1. ⚪️ Monero data
    2. 14.2. ⚪️ RPC client
    3. 14.3. ⚪️ Spawning monerod
  17. 15. ⚪️ Known issues and tradeoffs
    1. 15.1. ⚪️ Networking
    2. 15.2. ⚪️ RPC
    3. 15.3. ⚪️ Storage
  18. 16. 🟢 Monero oddities
    1. 16.1. 🟡 Little-endian IPv4 addresses
  19. 17. ⚪️ Appendix
    1. 17.1. 🟢 Crates
    2. 17.2. 🔴 Contributing
    3. 17.3. 🔴 Build targets
    4. 17.4. 🔴 Protocol book
    5. 17.5. ⚪️ User book

Cuprate Architecture

How to use this book

Maintainers

Contributors

Researchers

Last change: 2024-11-28, commit: 38541db