- Notifications
You must be signed in to change notification settings - Fork40
RGB node - the official server-side implementation
License
RGB-WG/rgb-node
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is source for daemon executables and library that can run RGB backend. Forwallet and exchange integration please check an interface to it and demoprojects fromRGB SDK.
This repository contains RGB node source code and SDK for wallet & server-sidedevelopment.
The node may run as a set of daemons (even in different docker containers);a multi-threaded single process or as a set of managed threads within awallet app.
For an easy test setup that allows to experience the node's capabilities, youcan check out thedemo.
The node (as other nodes maitained by LNP/BP Standards Association and PandoraCore company subsidiaries) consists of multiple microservices, communicatingwith each other via LNP ZMQ RPC interface.
The set of microservices representing node can run as either:
- single daemon process on desktop or a server;
- cloud of docker-based daemons, one per microservice, with instancescalability and in geo-distributed environment;
- inside a single mobile app as threads;
- and even different nodes can be combined in their services between themselvesinto a single executables/mobile apps;
- all P2P communications are end-to-end encrypted and work over Tor.
Other nodes, designed an maintained by LNP/BP Standards Association with thesame architecture include:
- LNP Node for running Lightning NetworkProtocol (LNP) and Generalized Lightning Channels (GLC).
- BP Node for indexing bitcoin blockchain(you may think of it as a more efficient Electrum server alternative)
- Bifrost – node for storing/passing client-side-validated data with watchtowerfunctionality and used for Storm/RGB/DEX infrastructure
Other third parties provide their own nodes designed with the same architecture,for instance:
- Keyring for managing private keyaccounts, storage and signatures with support for miniscript and PSBTs
src/api/
–LNP messages for all daemons used for message bussrc/bin/
–binaries for daemons & CLI launching main processsrc/cli/
–CLAP-based command line API talking to message bussrc/i8n/
–functions exposed to FFI talking to message bussrc/<name>/
– service/daemon-specific code:src/stash/
–daemon managing RGB stash data and its storage;you may configure it (with either config file, environment vars orcommand-line arguments) to use different forms of storage drivers;src/contracts
–daemons supporting high-level APIs forworking with different forms of RGB Schema: RGB-20 (fungible assets),RGB-21 (collectionables/NFTs) etc;src/rgbd
–daemon orchestrating bootstrapping of stash andcontracts daemons
Each daemon (more correctly "microservice", as it can run as a thread, notnecessary a process) or other binary (like CLI tool) follows the sameorganization concept for module/file names:
error.rs
– daemon-specific error types;config.rs
– CLAP arguments & daemon configuration data;runtime.rs
– singleton managing main daemon thread and keeping all ZMQ/P2Pconnections and sockets; receiving and processing messages through them;processor.rs
– business logic functions & internal state management whichdoes not depend on external communications/RPC;index/
,storage/
,cache/
– storage interfaces and engines;db/
– SQL-specific schema and code, if needed.
Minimum supported rust compiler version (MSRV): 1.45
To compile the node, please installcargo,then run the following commands:
sudo apt updatesudo apt install -y build-essential cmake libpq-dev libsqlite3-dev libssl-dev libzmq3-dev pkg-config
brew install cmake libpq sqlite pkg-config openssl zmq
git clone https://github.com/LNP-BP/rgb-node.gitcd rgb-nodecargo install --all-features --bins --path .
Now, to run the node you can execute
rgbd --data-dir ~/.rgb --bin-dir ~/.cargo/bin -vvvv --contract fungible
In order to build and run a docker image of the node, run:
docker build -t rgb-node.docker run --rm --name rgb_node rgb-node
First, you need to start daemons:rgbd -vvvv -d <data_dir> -b <bin_dir> --contract fungible
wherebin_dir
is a directory with all daemons binaries (usually~/.cargo/bin
from repo source aftercargo install --all-features --bins --path .
command).
Issuing token:rgb-cli -d <data_dir> -vvvv fungible issue TCKN "SomeToken" <supply>@<txid>:<vout>
Next, list your tokensrgb-cli -d <data_dir> -vvvv fungible list
Do an invoicergb-cli -d <data_dir> -vvvv fungible invoice <contract_id> <amount> <txid>:<vout>
,where<contract_id>
is id of your token returned by the last call, and<txid>:<vout>
must be a transaction output you are controlling.
Save the value of the binding factor you will receive: it will be required inthe future to accept the transfer. Do not share it!Send the invoice string to the payee.
Doing transfer: this requires preparation of PSBT; here we use ones from oursample directoryrgb-cli -d <data_dir> -vvvv fungible transfer "<invoice>" test/source_tx.psbt <consignment_file> test/dest_tx.psbt -i <input_utxo> [-a <amount>@<change_utxo>]
NB: input amount must be equal to the sum of invoice amount and change amounts.
This will produce consignment. Send it to the receiving party.
The receiving party must do the following:rgb-cli -d <data_dir> -vvvv fungible accept <consignment_file> <utxo>:<vout> <blinding>
,whereutxo
and theblinding
must be values used in invoice generation
In order to update the project dependencies, runcargo update
.If any dependency updates, theCargo.lock
file will be updated, keepingtrack of the exact package version.
After an update, run tests (cargo test
) and manually test the softwarein order to stimulate function calls from updated libraries.
Please checksoftware using RGB Node for integrationexamples.
If any problem arises, open an issue.
- Bitcoin Pro: tool forRGB asset issue & management for asset by the issuers
- MyCitadel Bitcoin, LN & RGBenabled wallet service with support for other LNP/BP protocols
About
RGB node - the official server-side implementation