Acquérir les compétences nécessaires pour comprendre et utiliser RGB
Le projet RLN
rgb-lightning-node (RLN). C'est un daemon en Rust qui s’appuie sur un fork de rust-lightning (LDK) modifié pour prendre en compte l’existence d’assets RGB dans un canal. Lors de l’ouverture d’un canal, on peut ainsi préciser la présence de tokens RGB, et lors de chaque mise à jour de l’état du canal, une transition d'état est créée, qui reflète la répartition deu token dans les outputs Lightning. Cela permet :- D’ouvrir des canaux Lightning en USDT par exemple ;
- D’acheminer ces tokens à travers le réseau, à condition que les chemins de routage disposent de suffisamment de liquidités ;
- D’exploiter la logique de punition et de timelock Lightning sans modification : on ancre simplement la transition RGB dans une sortie supplémentaire de la transaction d'engagement.
Rappels sur le protocole RGB
Installation du nœud Lightning compatible RGB
rgb-lightning-node, on commence par cloner le dépôt et ses sous-modules, puis on va lancer la compilation :git clone https://github.com/RGB-Tools/rgb-lightning-node --recurse-submodules --shallow-submodules
- L’option
--recurse-submodulespermet de cloner également les sous-dépôts nécessaires (dont la version modifiée derust-lightning) ; - L’option
--shallow-submodulesrestreint la profondeur du clone pour accélérer le téléchargement, tout en ayant accès aux commits indispensables.
cargo install --locked --debug --path .
--lockedassure que la version des dépendances est respectée ;--debugn’est pas obligatoire, mais peut faciliter la mise au point (vous pouvez utiliser--releasesi vous préférez) ;--path .indique àcargo installd’installer depuis le répertoire courant.
rgb-lightning-node sera disponible dans votre $CARGO_HOME/bin/. Assurez-vous que ce chemin est dans votre $PATH pour pouvoir invoquer la commande depuis n’importe quel répertoire.Prérequis
rgb-lightning-node a besoin de la présence et de la configuration de :- Un nœud
bitcoind
bitcoind pour diffuser et surveiller ses transactions on-chain. L’authentification (login/password) et l’URL (host/port) devront être fournis au daemon.- Un indexeur (Electrum ou Esplora)
- Un proxy RGB
Lancement en Regtest
regtest.sh qui démarre automatiquement, via Docker, un ensemble de services : bitcoind, electrs (indexer), rgb-proxy-server../regtest.sh start
- Créer un répertoire
docker/pour stocker les données ; - Lancer
bitcoinden regtest, ainsi que l’indexerelectrset lergb-proxy-server; - Attendre que tout soit prêt à l’emploi.
# 1st shell rgb-lightning-node dataldk0/ --daemon-listening-port 3001 \ --ldk-peer-listening-port 9735 --network regtest # 2nd shell rgb-lightning-node dataldk1/ --daemon-listening-port 3002 \ --ldk-peer-listening-port 9736 --network regtest # 3rd shell rgb-lightning-node dataldk2/ --daemon-listening-port 3003 \ --ldk-peer-listening-port 9737 --network regtest
- Le paramètre
--network regtestindique l’usage de la configuration regtest ; --daemon-listening-portindique sur quel port REST le nœud Lightning écoutera pour les appels API (JSON) ;--ldk-peer-listening-portspécifie sur quel port Lightning p2p écouter ;dataldk0/,dataldk1/sont les chemins vers les répertoires de stockage (chaque nœud stocke ses infos séparément).
https:/rgb-lightning-node/
curl -X POST http://localhost:3001/address
bitcoind Regtest, on va miner quelques bitcoins. Exécutez :./regtest.sh mine 101
./regtest.sh sendtoaddress <address> <amount>
./regtest.sh mine 1
Lancement en Testnet (sans Docker)
rgb-lightning-node dataldk0/ --daemon-listening-port 3001 \ --ldk-peer-listening-port 9735 --network testnet rgb-lightning-node dataldk1/ --daemon-listening-port 3002 \ --ldk-peer-listening-port 9736 --network testnet rgb-lightning-node dataldk2/ --daemon-listening-port 3003 \ --ldk-peer-listening-port 9737 --network testnet
bitcoind_rpc_host:electrum.iriswallet.combitcoind_rpc_port:18332indexer_url:ssl://electrum.iriswallet.com:50013proxy_endpoint:rpcs://proxy.iriswallet.com/0.2/json-rpc
bitcoind_rpc_username:userbitcoind_rpc_username:password
init/unlock.Émission d'un token RGB
curl -X POST -H "Content-Type: application/json" \ -d '{ "up_to": false, "num": 4, "size": 2000000, "fee_rate": 4.2, "skip_sync": false }' \ http://localhost:3001/createutxos
./regtest.sh mine 1
precision permet de définir la divisibilité des unités.curl -X POST -H "Content-Type: application/json" \ -d '{ "amounts": [ 1000 ], "ticker": "Plan ₿ Academy", "name": "Plan ₿ Academy", "precision": 0 }' \ http://localhost:3001/issueassetnia
rgb:fc7fMj5S-8yz!vIl-260BEhU-Hj1skvM-ZHcjfyz-RTcWc10
Ouverture de canal et transfert d’un actif RGB
/connectpeer. Dans mon exemple, je contrôle les deux nœuds. Je vais donc récupérer la clé publique de mon second nœud Lightning avec cette commande :curl -X 'GET' \ 'http://localhost:3002/nodeinfo' \ -H 'accept: application/json'
031e81e4c5c6b6a50cbf5d85b15dad720fec92c62e84bafb34088f0488e00a8e94
Plan ₿ Academy). La commande /openchannel vous permet de définir la taille du canal en satoshis et d'opter pour l'inclusion de l'asset RGB. Cela dépend de ce que vous souhaitez créer, mais dans mon cas, la commande est :curl -X POST -H "Content-Type: application/json" \ -d '{ "peer_pubkey_and_opt_addr": "031e81e4c5c6b6a50cbf5d85b15dad720fec92c62e84bafb34088f0488e00a8e94@localhost:9736", "capacity_sat": 1000000, "push_msat": 10000000, "asset_amount": 500, "asset_id": "rgb:fc7fMj5S-8yz!vIl-260BEhU-Hj1skvM-ZHcjfyz-RTcWc10", "public": true, "with_anchors": true, "fee_base_msat": 1000, "fee_proportional_millionths": 0, "temporary_channel_id": "a8b60c8ce3067b5fc881d4831323e24751daec3b64353c8df3205ec5d838f1c5" }' \ http://localhost:3001/openchannel
peer_pubkey_and_opt_addr: Identifiant du pair auquel on souhaite se connecter (la clé publique que nous avons trouvée précédemment) ;capacity_sat: Capacité totale du canal en satoshis ;push_msat: Montant en millisatoshis initialement transféré au pair lors de l'ouverture du canal (ici je lui transfère immédiatement 10 000 sats pour qu'il puisse faire un transfert RGB par la suite) ;asset_amount: Quantité d'actifs RGB à engager dans le canal ;asset_id: Identifiant unique de l'actif RGB engagé dans le canal ;public: Indique si le canal doit être rendu public pour le routage sur le réseau.
./regtest.sh mine 6
Plan ₿ Academy du côté du nœud n°1. Si le nœud n°2 souhaite recevoir des tokens Plan ₿ Academy, il devra générer une invoice. Voici comment procéder :curl -X POST -H "Content-Type: application/json" \ -d '{ "amt_msat": 3000000, "expiry_sec": 420, "asset_id": "rgb:fc7fMj5S-8yz!vIl-260BEhU-Hj1skvM-ZHcjfyz-RTcWc10", "asset_amount": 100 }' \ http://localhost:3002/lninvoice
amt_msat: Montant de l'invoice en millisatoshis (minimum 3000 sats) ;expiry_sec: Délai d'expiration de l'invoice en secondes ;asset_id: Identifiant de l'actif RGB associé à l'invoice ;asset_amount: Quantité de l'actif RGB à transférer avec cette invoice.
lnbcrt30u1pncgd4rdqud3jxktt5w46x7unfv9kz6mn0v3jsnp4qv0grex9c6m22r9ltkzmzhddwg87eykx96zt47e5pz8sfz8qp28fgpp5jksvqtleryhvwr299qdz96qxzm24augy5agkdhltudk463lt9dassp5d6n0sqgl0c4gx52fdmutrdtqamt0y4xuz2rcgel4hpjwne08gmls9qyysgqcqpcxqzdylz5wfnkywnxvvmkvnt2x4fj6wre0gshvjtv95ervvzzg4592t2gdgchx6mkf5k45jrrdfn8j73d2f2xx4mrxycq7qzry4v4jan6uxhhacyqa4gn6plggwpq9j74tu74f2zsamtz6ymt600p8su4c4ap9g9d8ku2x3wdh6fuc8fd8pff2yzpjrf24ys3cltca9fgqut6gzj
Plan ₿ Academy :curl -X POST -H "Content-Type: application/json" \ -d '{ "invoice": "lnbcrt30u1pncgd4rdqud3jxktt5w46x7unfv9kz6mn0v3jsnp4qv0grex9c6m22r9ltkzmzhddwg87eykx96zt47e5pz8sfz8qp28fgpp5jksvqtleryhvwr299qdz96qxzm24augy5agkdhltudk463lt9dassp5d6n0sqgl0c4gx52fdmutrdtqamt0y4xuz2rcgel4hpjwne08gmls9qyysgqcqpcxqzdylz5wfnkywnxvvmkvnt2x4fj6wre0gshvjtv95ervvzzg4592t2gdgchx6mkf5k45jrrdfn8j73d2f2xx4mrxycq7qzry4v4jan6uxhhacyqa4gn6plggwpq9j74tu74f2zsamtz6ymt600p8su4c4ap9g9d8ku2x3wdh6fuc8fd8pff2yzpjrf24ys3cltca9fgqut6gzj" }' \ http://localhost:3001/sendpayment
curl -X 'GET' \ 'http://localhost:3001/listpayments' \ -H 'accept: application/json'
- Un environnement regtest (via
./regtest.sh) ou testnet ; - Un nœud Lightning (
rgb-lightning-node) s’appuyant sur unbitcoind, un indexer et unrgb-proxy-server; - Une série d’APIs JSON REST pour ouvrir/fermer des canaux, émettre des tokens, transférer des assets via Lightning, etc.
- Les transactions d'engagement Lightning embarquent une sortie supplémentaire (OP_RETURN ou Taproot) avec l’ancrage d’une transition RGB ;
- Les transferts s’effectuent exactement comme des paiements Lightning traditionnels, mais en transportant un token RGB en plus ;
- On peut relier plusieurs nœuds RLN pour router et expérimenter des paiements sur plusieurs nœuds, à condition d'avoir suffisamment de liquidités à la fois en bitcoins et en asset RGB sur le chemin.
Auteur
Ce tutoriel a été écrit par Loïc Morel
Vous pouvez dire merci en donnant un pourboire au professeur.
J'écris des contenus pédagogiques sur Bitcoin.
Crédits
Ce tutoriel a été relu par LoicPandul & JosephQuaye
Même si cette page est dans sa langue d'origine, une relecture humaine est toujours nécessaire pour garantir son exactitude.
LoicPandulJosephQuaye0 satsChaque élément de contenu sur la plateforme est le produit d'un effort collaboratif : chaque leçon, traduction et révision est rendue possible grâce au travail des contributeurs. C'est pour cette raison que nous sommes toujours à la recherche de correcteurs qui peuvent examiner notre contenu dans un grand nombre de langues. Si vous souhaitez participer au processus de relecture, veuillez nous rejoindre dans notre groupe Telegram et consulter notre tutoriel. Nous vous rappelons que ce contenu est open-source - sous licence CC BY-SA - et peut donc être partagé et utilisé librement, à condition que la source originale soit reconnue.


