Cuprate, an upcoming experimental, modern & secure monero node. Written in Rust https://cuprate.org
Find a file
2023-02-10 22:18:47 +01:00
blockchain_db rustfmt finally here 2023-02-10 22:18:47 +01:00
src rustfmt finally here 2023-02-10 22:18:47 +01:00
.gitignore added .gitignore 2023-02-08 14:19:37 +01:00
Cargo.toml removed unused fn + clippy deny + Cargo 2023-02-10 21:40:01 +01:00
clippy.toml removed unused fn + clippy deny + Cargo 2023-02-10 21:40:01 +01:00
LICENSE Create LICENSE 2023-02-08 19:30:15 +00:00
readme.md Update readme.md 2023-02-08 23:29:38 +01:00
rustfmt.toml rustfmt finally here 2023-02-10 22:18:47 +01:00

Cuprate

an upcoming experimental, modern & secure monero node. Written in Rust

(there is nothing working at the moment, stay tuned if you want to see some adventures)

 

Introduction

Why?

Monero is actively used across the world and gains more and more users through the years. Unfortunately, it is clearly targeted by numerous adversaries with different set of ressources. As of now we are targeted by media disinformation, other cryptocurrency communities & even governements. The life of the project depends now on our efforts to make Monero usable by anyone while also remaining resilient against an attack.

The current state of Monero developpement is encouraging. Farcaster & COMIT have successfuly developped XMR<>BTC Atomic Swap, ETH<>XMR bridge is on the way, and other are draft. Not only it is a great addition to the UX but it also give monero resilience by developping way for people to access it in case of ban. Seraphis is on the way to make Monero even more private. As of consensus security, p2pool is now mature and actively used.

We can clearly applaud all the efforts that have been done. But there is still works to do. For example, we still don't have developped traffic obfuscation to bypass DPI. Without, it'll be easy for governements to dramatically reduce the access to the monero network, and by that reduce the number of people that could escape the financial system.

Cuprate is an ongoing effort to release an alternative implementation of the Monero Node with new features. It is developped in Rust and therefore enjoy from many advantages in term of security and stability. It will also help developping new features with high-level, safe and maintained librairies available in the rust ecosystem.

Releasing an alternative node will reinforce the Monero Network if a security vulnerability is discovered in the current node maintained by the monero-core team. It will also encourage (i hope) more open-source developers to contribute to the project.

Status

The project is actually handle by single guy that never really started a big project of this scale nor understand completely the monero codebase. But he really wants to learn and code it.

I'm working on rewriting the blockchain_db part atm.

Contributions

Any help on rewriting other parts of the node while also aligning with the targeted improvements is appreciated.

I encourage anyone to review the work being done, discuss about it or propose agressive optimizations (at architectural level if needed, or even micro-optimizations in 'monolithic components').

For non-developers people, it is time for you to unleash your ideas.

Code, Repository & Dependencies

No unsafe code is permitted in the project, and the codebase will never contain .except() or panic!(). We discourage the use of .unwrap(), as it implied that all errors are correctly handled.

The organization of the repository is at the moment arbritrary. The blockchain database components can be found under the blockchain_db member.

Dependencies
Dependencies Reason
monero-rs Used to define monero's type and serialize/deserialize data.
serde serialize/deserialize support.
thiserror used to Derive(Error) in the codebase.

Improvements & Features

Traffic Obfuscation
Different protocol to bypass DPI will be available, such as with Levin protocol (TLS based, see https://github.com/monero-project/monero/issues/7078) and QUIC like Syncthing have done, but with offset and timing mitigations. Unless the monero-core team decide to implement these protocols, they'll only by available between cuprate peers.
Blockchain Storage
LMDB is replaced by RocksDB, a high-performance database designed for SSD, already used by the Parity ethereum's rust client. HSE is also going to be implemented, as a more dsitributed and scalable alternative.
Sandboxing & System
There will be maintained SELinux/Apparmor policy for this node. It will internally use seccomp/Landlock to limit syscalls being used in order to improve isolation of the node with rest of the OS & Wallet Software.
RPC
ZeroMQ as well as gRPC will be available to communicate with the node.
Terminal Interface
More accessible interface based on the excellent [tui](https://lib.rs/crates/tui) library. There will be Geolocation of peers on map, VPN Detection, Ressource usages, statistics etc...
Tor connections
arti_client library will be embedded to make possible connections to tor peers without a system daemon or proxy (for the moment arti_client can't handle onion services, but it'll certainly in the near future).

Regressions

  • No integrated miner planned
  • LMDB support removed (unless someone else want to work on it, or I've time). Which means that the blockchain synced by monerod is incompatible with cuprate