Mettre en place un environnement de developpement sur Monero
Ce premier tutoriel est technique.
Si vous êtes développeur il va vous aider à créer des applications sur la base du réseau Monero.
Exchange, swap, DEFI ou autre, les possibilités d'applications sont illimitées.
Voilà de quoi voilà de quoi vous allez vous équiper : l'application en ligne de commande disponible sur le site officiel, un client HTTP comme Insomnia ou Postman (j'ai une préférence pour Insomnia) et surtout de la patience.
Télécharger les CLI
Téléchargez l'application en CLI.
Ensuite extrayez l'archive quelque part dans un répertoire au choix et regardez le contenu.
- monero-blockchain-ancestry
- monero-blockchain-ancestry
- monero-blockchain-ancestry
- monero-blockchain-import
- monero-blockchain-mark-spent-outputs
- monero-blockchain-prune
- monero-blockchain-prune-known-spent-data
- monero-blockchain-stats
- monero-blockchain-usage
- monerod
- monero-gen-ssl-cert
- monero-gen-trusted-multisig
- monero-wallet-cli
- monero-wallet-rpc
Lancer le daemon
Pour ce premier tutoriel, on va faire simple et utiliser seulement le daemon et les wallet en cli et rpc.
Et comme on ne veut pas faire de betise sur le réseau principal avec du token qui a une vraie valeur sur le marché, on va utiliser un réseau de test, en l'occurrence pas le testnet qui est trop lourd mais le stagenet.
$ cd path/to/folder
$ monerod --stagenet
Après quelques minutes ou heures de téléchargement, vous avez l'intégralité de la blockchain en local.
Vous pouvez interagir avec un réseau mondial et n'êtes plus dépendant du bon vouloir d'un service externe. C'est déjà un début.
Le wallet en ligne de commande
Deuxième outil en ligne de commande, le wallet. Toutes les fonctionnalités en interface graphique sont disponibles dans cet outil.
$ cd path/to/folder
$ monero-wallet-cli --stagenet
Une suite d'instructions apparait pour donner un nom au wallet, lui définir un mot de passe et la langue pour la phrase de récupération.
Le wallet vous pouvez l'appeler comme vous voulez, mais dans ce tutorial il sera nommé "sn-client" ( pour représenter un client sur le client stagenet).
Pour la langue, je suggère l'anglais. Par la suite, ça sera plus facile d'importer un wallet d'une application à une autre.
Votre phrase de récupération apparait. Gardez-la bien au chaud quelque part dans un bloc-note.
Pour ensuite ouvrir le wallet, vous faites la commande qui suit.
$ monero-wallet-cli --stagenet --wallet-file=sn-client
Une fois connecté au wallet, tapez la commande suivante : help
Important commands:
"welcome" - Show welcome message.
"help all" - Show the list of all available commands.
"help <command>" - Show a command's documentation.
"apropos <keyword>" - Show commands related to a keyword.
"wallet_info" - Show wallet main address and other info.
"balance" - Show balance.
"address all" - Show all addresses.
"address new" - Create new subaddress.
"transfer <address> <amount>" - Send XMR to an address.
"show_transfers [in|out|pending|failed|pool]" - Show transactions.
"sweep_all <address>" - Send whole balance to another wallet.
"seed" - Show secret 25 words that can be used to recover this wallet.
"refresh" - Synchronize wallet with the Monero network.
"status" - Check current status of wallet.
"version" - Check software version.
"exit" - Exit wallet.
"donate <amount>" - Donate XMR to the development team.
En tapant help all, encore plus de commande apparaissent. Elles concernent tous les aspects du wallet, à savoir la gestion de multisignatures, les clés de vue et d'envoi (on y reviendra dans un prochain tutoriel), l'ajout d'adresse et de sous-adresse, le payment_id, le status du réseau et encore plein d'autres choses qui feront l'objet d'un tutoriel.
Concentrons nous sur les commandes de base.
Remplir ce premier wallet
Plusieurs options existent. La première est d'utiliser un faucet, en gros un service en ligne qui envoie des tokens à l'adresse indiquée.
La seconde est de faire du minage quelques minutes. Je précise que sur un réseau de test les récompenses arrivent beaucoup plus vite.
Et il y aura un tutoriel sur le minage
Le faucet
Dans l'onglet wallet tapez "address" votre adresse.
$ address
0 59idQWbPYfgbQrJsBSZqp1Ufw6g4UsgfVgYJxUq8CJxD926MKMpdQtL6RkSkkGYD5Gjan5DvT5PjgVHUXu3EBz8USh1wbYD Primary address
C'est ce à quoi devrait ressembler votre adresse principale. Il y aura un tutoriel sur les adresses et les sous-adresses.
Rendez-vous ensuite sur un service de faucet pour le réseau stagenet.
Dans le premier champ de formulaire indiquez votre adresse et validez.
Après un court instant, il y a du nouveau sur le wallet. Tapez "refresh" et votre wallet est moins vide.
10 monero sont disponibles.
Le minage
Un peu plus long, mais tout aussi efficace, le minage permet de sécuriser le réseau et avoir des récompenses.
$ start_mining
$ stop_mining
2022-10-08 11:58:02.171 I Miner thread was started [0]
2022-10-08 12:02:09.773 I Found block <17bcdc52c85487a765b8768578a24f32e7fcf8033d31c76d56eef8effb7f9658> at height 1196661 for difficulty: 261141
s2022-10-08 12:02:34.044 I Miner thread stopped [0]
Le Remote Procedure Call - RPC
Dans un troisième onglet vous allez créer un nouveau wallet, toujours sur le stagenet, et l'appellerez "sn-server".
$ cd path/to/folder
$ monero-wallet-cli --stagenet
Vous avez le daemon qui tourne et qui se charge de se connecter au réseau, vous avez un wallet client et un wallet serveur destiné à se brancher à votre application.
Maintenant il faut connecter le dernier wallet pour interagir avec un client HTTP ou votre application.
$ monero-wallet-rpc.exe --stagenet --wallet-file=sn-server --rpc-bind-ip=127.0.0.1 --rpc-bind-port=38018 --disable-rpc-login --prompt-for-password
Fichier de configuration
En réalité retenir tous ces paramètres est quasiment impossible. On va donc faire un fichier de configuration.
Appelez le stagenet-env.conf
stagenet=1
wallet-file=sn-server
rpc-bind-ip=127.0.0.1
rpc-bind-port=38018
disable-rpc-login=1
prompt-for-password=1
Puis lancer le rpc avec le fichier de configuration comme ça.
$ monero-wallet-rpc --config-file=stagenet-env.conf
Petite précision pour ce tutoriel je suis sur Windows et il semblerait que l'option rpc-login ne marche pas correctement.
Si vous êtes sur Mac ou Linux il ne devrait pas y avoir de souci.
Les premiers appels HTTP
Tous les languages serveur ont leur librairie pour lancer des requêtes HTTP. Axios pour
Nodejs, Guzzle pour
PHP, Request pour
Python etc...
Pour cette introduction dans l'écosystème Monero, un client HTTP comme Insomnia ou Postman est recommandé.
POST: http://127.0.0.1:38018/json_rpc
{
"jsonrpc": "2.0",
"method": "get_balance"
}
// Response
{
"id": 0,
"jsonrpc": "2.0",
"result": {
"balance": 0,
"blocks_to_unlock": 0,
"multisig_import_needed": false,
"time_to_unlock": 0,
"unlocked_balance": 0
}
}
POST: http://127.0.0.1:38018/json_rpc
{
"jsonrpc": "2.0",
"method": "get_address"
}
// Response
{
"id": 0,
"jsonrpc": "2.0",
"result": {
"address": "57kz1RLqDaQ68NHXiohu7uEx8wM6Gq7wP2EgPdnU58ee7HzpJJpo1F33mpVmFuRw9oUw9eSo42rvYbVsDwPUWKPc9nZnT33",
"addresses": [
{
"address": "57kz1RLqDaQ68NHXiohu7uEx8wM6Gq7wP2EgPdnU58ee7HzpJJpo1F33mpVmFuRw9oUw9eSo42rvYbVsDwPUWKPc9nZnT33",
"address_index": 0,
"label": "Primary account",
"used": false
}
]
}
}
Toute la liste des commandes est disponible sur la documentation du site.
Précision pour l'envoie de monero, il se fait en unité atomique et pas en unité tout court.
C'est tout pour ce tutoriel, vous avez de quoi vous amuser.