RsNano is a Rust port of the original Nano node.
docker run -p 7075:7075 -v ~/Nano:/root/Nano simpago/rsnano:V2.0 --network=live node run
docker build -f scripts/docker/node/Dockerfile -t rsnano-node https://github.com/simpago/rsnano-node.git#releases/v2
docker run -p 7075:7075 -v ~/Nano:/root/Nano rsnano-node:latest --network=live node run
Currently you can only build RsNano on Linux and on Mac.
To just build and run the rsnano_node:
git clone https://github.com/simpago/rsnano-node.git
git switch releases/v2
cd rsnano-node/main
cargo build --release
cargo run --release -- --network=live node run
To install and run the rsnano_node executable:
git clone https://github.com/simpago/rsnano-node.git
git switch releases/v2
cd rsnano-node
cargo install --path main
rsnano_node --network=live node run
You can even run an RsNano node with a GUI that looks like this:
Run these commands:
cd rsnano-node/tools/insight
cargo run --release
We want to hear about any trouble, success, delight, or pain you experience when using RsNano. Let us know by filing an issue, or joining us on Discord.
Have a look at the AI generated documentation of the codebase.
The Rust code is structured according to A-frame architecture and is built with nullable infrastructure. This design and testing approach is extensively documented on James Shore's website
Watch James Shore's presentation of nullables on YouTube: Testing Without Mocks - James Shore | Craft Conference 2024
The following diagram shows how the crates are organized. The crates will be split up more when the codebase grows.
main
: The node executable.daemon
: Starts the node and optionally the RPC server.node
:The node implementation.rpc_server
: Implemenation of the RPC server.ledger
: Ledger implementation. It is responsible for the consinstency of the data stores.store_lmdb
: LMDB implementation of the data stores.messages
: Message types that nodes use for communication.network
: Manage outbound/inbound TCP channels to/from other nodes.work
: Proof of work generation via CPU or GPUcore
: Contains the basic types likeBlockHash
,Account
,KeyPair
,...nullables
: Nullable wrappers for infrastructure libraries.