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