Guides techniques

Intégration du portefeuille Dash

Cette documentation est également disponible au format PDF.

Dash Core est un « fork » de Bitcoin et la majorité des fonctionnalités proposées par le daemon Dash Core peuvent être intégrées de façon similaire. Les différences clés résident dans certaines modifications apportées aux commandes JSON-RPC existantes, de manière à assurer des fonctionnalités propres à Dash telles qu’InstantSend. Ces différences, ainsi que des informations plus générales, sont présentées ci-dessous.

  1. Informations générales : Dash est une blockchain de type « preuve de travail » avec des caractéristiques similaires à celles de Bitcoin.

    1. Durée de bloc : environ 2,6 minutes par bloc
    2. Confirmations de bloc : 6 confirmations (ou 1 dans le cas d’InstantSend)
    3. Code source GitHub : https://github.com/dashpay/dash
    4. Lien de publication : https://github.com/dashpay/dash/releases
  2. Interface JSON-RPC : la majorité des commandes JSON-RPC de Bitcoin sont inchangées, rendant assez simple l’intégration dans des systèmes existants. Pour une liste complète des commandes RPC, voir le guide développeur.

    Il convient de noter que plusieurs commandes clés JSON-RPC relatives aux transactions ont été modifiées pour être compatibles avec InstantSend, par l’ajout d’un champ « InstantLock ». Elles sont répertoriées ci-dessous :

    1. GetTransaction
    2. ListTransactions
    3. ListSinceBlock
  3. Algorithme de hachage de bloc : Dash utilise l’algorithme « X11 » à la place de SHA256 qu’utilise Bitcoin. Il est cependant important de noter que cela ne concerne que le hachage du bloc lui-même. Tous les autres composants internes utilisent des empreintes SHA256 (transactions, arbre Merkle, etc.), ce qui permet à la plupart des bibliothèques déjà existantes de fonctionner dans l’écosystème Dash.

  4. Bibliothèques compatibles : en raison des différences d’algorithme de hachage mentionnées ci-dessus, seuls des ajustements mineurs sont nécessaires pour utiliser des bibliothèques Bitcoin sur le réseau Dash. Les bibliothèques les plus connues ont déjà été portées vers Dash, qui est devenu compatible avec la plupart des langages de programmation les plus importants. Ces ressources sont répertoriées dans la section Ressources SDK de ce document.

v0.13.0 Integration Notes

This documentation is also available as a PDF.

Dash 0.13.0 implements DIP002 Special Transactions, which form a basis for new transaction types that will provide on-chain metadata to assist various consensus mechanisms. The following special transaction types exist:

Release Version Type Payload Size Payload Payload JSON Transaction Purpose
v0.13.0 3 0 n/a n/a n/a Standard Transaction
v0.13.0 3 1 <variable int> <hex> proRegTx Masternode Registration
v0.13.0 3 2 <variable int> <hex> proUpServTx Update Masternode Service
v0.13.0 3 3 <variable int> <hex> proUpRegTx Update Masternode Operator
v0.13.0 3 4 <variable int> <hex> proUpRevTx Masternode Revocation
v0.13.0 3 5 <variable int> <hex> cbTx Masternode List Merkle Proof
v0.13.0 3 6 <variable int> <hex> qcTx Quorum Commitment

Integration notes:

  1. DIP002 Special Transactions are a foundational component of Dash Core v0.13.0 and introduce a new Transaction Version and related “Payload” to the network.
  2. Integrated Systems must be able to serialize and deserialize these new Transaction Types in order to accurately encode and decode Raw Transaction data.
  3. From a backwards compatibility perspective, the 4 byte (32-bit) version field included in Legacy Transactions has been split into two fields: version and type (each consisting of 2 bytes).
  4. InstantSend status and Payload JSON (e.g. proRegTx) is included in the JSON-RPC response, please note that this data is not part of the calculated hash and is provided for convenience.

Legacy transaction structure:

{
  "txid": <string>,
  "size": <int>,
  "version": 2,
  "locktime": 0,
  "vin": [],
  "vout": [ … ]
}

Updated transaction structure:

{
  "txid": <string>,
  "size": <int>,
  "version": 3,
  "type": <int>,
  "locktime": 0,
  "vin": [ … ],
  "vout": [ … ],
  "extraPayloadSize": <variable int>,
  "extraPayload": …
}

See the Special Transactions developer documentation for additional detail on these data types, e.g. <variable int>. See the v0.13.0 transaction types integration documentation (PDF) for worked examples of each transaction type.

Services API

Cette documentation est également disponible au format PDF.

Plusieurs services d’API existent pour faciliter l’intégration rapide et simple de services au réseau Dash, parmi lesquels :

  • Diffusion de transaction
  • Taux de conversion
  • Change entre monnaies
  • Génération de facture

Les services d’API sont en général employés dans le but de vous épargner de faire tourner votre propre infrastructure pour interagir avec la blockchain. Cela comprend des mécanismes tels que :

  • Former une transaction et la diffuser au réseau.
  • Générer des adresses avec des portefeuilles HD.
  • Traiter le paiement avec des WebHooks.

Il existe plusieurs moyens d’accomplir cela, leur facteur principal de différenciation étant la grille tarifaire et les fonctionnalités fournies. La liste suivante de fournisseurs d’API essaie de souligner ces différences et fonctions clés, et inclut également un lien vers la documentation pertinente.

Insight

../_images/insight.png

https://github.com/dashevo/insight-api

The open-source Insight REST API provides you with a convenient, powerful and simple way to read data from the Dash network and build your own services with it. A practical guide to getting started with the Insight API and Insight UI block explorer is available here.

BlockCypher

../_images/blockcypher.png

https://www.blockcypher.com

BlockCypher est une API JSON simple, principalement RESTful, pour interagir avec des blockchains consultées via HTTP ou HTTPS depuis le domaine api.blockcypher.com.

ChainRider

../_images/chainrider.png

https://www.chainrider.io

ChainRider est un service dans le nuage qui fournit un jeu d’API REST pour la gestion et l’exploration des monnaies numériques.

  • Fonctionnalités : requêtes sur blockchain, notifications d’événement, diffusion de transaction, processeur de paiement, etc.
  • Grille tarifaire : essai gratuit, paiement par appel API
  • Documentation : https://www.chainrider.io/docs/dash

GoCoin

../_images/gocoin.png

https://gocoin.com

La plateforme GoCoin rend l’acceptation de Dash aussi simple que d’installer un plug-in. Le processeur de paiement est déjà implémenté pour chaque plateforme commerciale majeure. GoCoin se dédie particulièrement à aider les vendeurs de secteurs nécessitant une grande confidentialité et ceux de secteurs spécifiques. GoCoin assume tous les risques de transaction de tous les paiements de vos clients.

  • Fonctionnalités : facturation, taux de change, appels WebHook. GoCoin détient les clés privées sur son serveur, permettant au vendeur de retirer les fonds en cryptomonnaie ou de les convertir en monnaie fiduciaire.
  • Intégrations : WooCommerce, Magento, Prestashop, VirtueMart, ZenCart, OpenCart, OSCommerce, UberCart, nopCommerce, WHMCS, NATS4, Shopify.
  • Grille tarifaire : 1% de frais de traitement (https://gocoin.com/fees)
  • Documentation : https://gocoin.com/docs

CoinPayments

../_images/coinpayments.png

https://www.coinpayments.net

CoinPayments est une passerelle intégrée de paiement pour les cryptomonnaies telles que Dash. Des plug-ins de panier d’achat sont disponibles pour toutes les applications de commerce populaires. CoinPayments peut vous aider à installer un nouveau système de caisse, ou s’intégrer à votre système existant.

  • Fonctionnalités : facturation, taux de change, appels WebHook. CoinPayments détient les clés privées sur son serveur, permettant au vendeur de retirer les fonds en cryptomonnaie ou de les convertir en monnaie fiduciaire.
  • Intégrations : aMember Pro, Arastta, Blesta, BoxBilling, Drupal, Ecwid, Hikashop, Magento, OpenCart, OSCommerce, PrestaShop, Tomato Cart, WooCommerce, Ubercart, XCart, ZenCart
  • Grille tarifaire : 0,5% de frais de traitement (https://www.coinpayments.net/help-fees)
  • Documentation : https://www.coinpayments.net/apidoc

Ressources SDK

Cette documentation est également disponible au format PDF.

Des SDK (kits de développement logiciel) sont utilisés pour accélérer la conception et le développement d’un produit destiné au réseau Dash. Ces ressources peuvent être utilisées soit pour communiquer avec un fournisseur d’API, soit pour la création d’applications autonomes, par formation de transactions et/ou exécution de divers services de portefeuille.

Guide développeur Dash

../_images/dash-logo.png

https://dash-docs.github.io/en/developer-guide

Le guide développeur Dash a pour but de fournir l’information dont vous avez besoin pour comprendre Dash et commencer à créer des applications basées sur Dash. Pour utiliser au mieux cette documentation, vous pourrez souhaiter installer la version la plus récente du portefeuille logiciel Dash Core, soit depuis le code source, soit en tant qu’exécutable pré-compilé.

NodeJS/JavaScript : Bitcore (Dashcore)

../_images/bitcore.png

https://bitcore.io

Dash Core est un « fork » de Bitcoin et tourne en tant que nœud complet Dash — vos applications tournent directement sur le réseau pair à pair. Pour le développement d’applications portefeuille, des index supplémentaires ont été ajoutés dans Dash, permettant de demander les soldes d’adresses, les historiques de transactions et les sorties non dépensées.

PHP : Bitcoin-PHP

https://github.com/Bit-Wasp/bitcoin-php

Bitcoin-PHP est une implémentation de Bitcoin compatible avec Dash, conçue presque exclusivement en PHP.

Python : PyCoin

https://github.com/richardkiss/pycoin

PyCoin est l’implémentation de toute une série de routines utilitaires, qui peuvent être utiles pour manipuler Bitcoin ou Dash. Elle a été testée avec Python 2.7, 3.6 et 3.7.

Java : DashJ

../_images/bitcoinj.png

https://github.com/HashEngineering/dashj

DashJ est une bibliothèque permettant de travailler avec le protocole Dash. Elle peut gérer un portefeuille, envoyer ou recevoir des transactions (y compris InstantSend) sans besoin de disposer d’une copie locale de Dash Core, et a beaucoup d’autres fonctions avancées. Elle est conçue en Java mais peut être utilisée depuis tout langage compatible JVM : des exemples en Python et JavaScript sont inclus.

.NET : NBitcoin

../_images/dash-logo.png

https://github.com/MetacoSA/NBitcoin

NBitcoin est la bibliothèque Bitcoin la plus complète pour la plateforme .NET, et elle a été modifiée pour devenir compatible avec Dash. Elle implémente les propositions d’amélioration de Bitcoin (BIP) et celles de Dash (DIP) les plus pertinentes. Elle permet aussi un accès bas niveau aux composants de Dash, pour vous permettre de bâtir vos applications au-dessus.

BlockCypher

../_images/blockcypher.png

https://www.blockcypher.com

BlockCypher propose aussi des SDK client.

GoCoin

../_images/gocoin.png

https://gocoin.com

InstantSend

Cette documentation est également disponible au format PDF.

InstantSend est une fonctionnalité fournie par le réseau Dash qui permet aux transactions à 0 confirmation d’être acceptées en toute sécurité par les vendeurs ou d’autres fournisseurs de service. Assuré par le réseau des masternodes, ce mécanisme élimine le risque d’une « double dépense » en verrouillant les entrées de transaction pour une transaction donnée, au niveau du protocole.

Transactions InstantSend contre transactions normales

Du point de vue d’une intégration, il n’y a que des différences mineures entre une transaction InstantSend et une transaction normale. Les deux types de transaction sont formés de la même façon et signés selon la même procédure ; la différence clé est la structure de frais et les exigences d’entrées pour InstantSend.

  1. Structure de frais : InstantSend demande des frais « par entrée » de 0,0001 dash/entrée.
  2. Exigences d’entrées : toutes les entrées d’une transaction InstantSend doivent avoir au moins 6 confirmations.

Dans le cas où une transaction donnée ne remplit pas ces deux critères, elle sera rétrogradée en transaction normale.

Réception de transactions InstantSend

Les transactions InstantSend sont opérées de la même façon qu’une transaction standard, en général via une API Insight JSON-RPC ou un script ou service interne de notification configuré au niveau du serveur.

  1. JSON-RPC : les commandes RPC suivantes incluront les informations propres à InstantSend. Dans la réponse, on trouvera un champ « InstantLock » sur l’état d’une transaction donnée. Cette valeur booléenne (vrai/faux) indiquera si un envoi InstantSend a été constaté.

    1. GetTransaction : https://dash-docs.github.io/en/developer-reference#gettransaction
    2. ListTransactions : https://dash-docs.github.io/en/developer-reference#listtransactions
    3. ListSinceBlock : https://dash-docs.github.io/en/developer-reference#listsinceblock
  2. API insight : elle peut être utilisée pour détecter les transactions InstantSend et pour délivrer des notifications aux clients utilisant les WebSockets. L’API peut aussi être consultée manuellement pour récupérer les informations de transaction, dont l’état InstantSend.

    1. Web Socket: https://github.com/dashevo/insight-api#web-socket-api
    2. Transaction API: https://github.com/dashevo/insight-api#instantsend-transactions
  3. Script de notification : le daemon Dash Core peut être configuré pour exécuter un script externe dès qu’une transaction InstantSend relative au portefeuille a été repérée. Cela se configure par l’ajout de la ligne suivante au fichier « dash.conf » :

    instantsendnotify=/path/to/concurrent/safe/handler %s

    Veuillez noter que seules les adresses importées dans le portefeuille seront surveillées pour leurs transactions InstantSend.

Diffusion des transactions InstantSend

Les transactions InstantSend sont formées et diffusées selon une méthode similaire aux transactions normales. Du moment que la structure de frais InstantSend et les exigences d’entrées sont suivies, une transaction InstantSend peut être diffusée avec JSON-RPC ou l’API Insight en tant que transaction brute.

  1. JSON-RPC : la commande RPC « SendRawTransaction » peut être utilisée pour diffuser une transaction brute avec InstantSend. En utilisant cette commande, assurez-vous de définir les deux paramètres facultatifs sur « true ».

    sendrawtransaction "hexstring" ( allowhighfees instantsend ) sendrawtransaction "hexstring" true true

    Pour en savoir plus : https://dash-docs.github.io/en/developer-reference#sendrawtransaction

  2. API Insight : les transactions brutes peuvent aussi être diffusées en tant que transactions InstantSend avec l’API Insight. Dans ce cas, il suffit d’envoyer par POST la transaction brute en utilisant le chemin /tx/sendix.

    Pour en savoir plus : https://github.com/dashevo/insight-api#instantsend-transaction

Ressources supplémentaires

Les ressources suivantes fournissent des informations supplémentaires sur InstantSend et sont destinées à fournir une compréhension plus complète des technologies sous-jacentes.

Distributeurs automatiques

Moocowmoo, membre de la communauté, a publié un code pour aider les vendeurs à concevoir leur propre distributeur automatique et à leur permettre d’y accepter les paiements InstantSend Dash. Le logiciel Dashvend peut aussi être utilisé pour créer toutes sortes de systèmes de paiement, y compris des systèmes sur point de vente, compatibles avec les paiements InstantSend.

Afficheurs de cours

Vous pouvez ajouter à votre site web un afficheur de cours simple en utilisant le générateur de code de CoinGecko.

Des widgets similaires avec des apparences différentes sont disponibles sur CoinLibWorldCoinIndex et Cryptonator, tandis qu’une API fournissant des informations analogues est disponible sur DashCentral.

QR-codes

Beaucoup de portefeuilles logiciels peuvent générer des QR-codes destinés à être scannés, pour simplifier la saisie d’une adresse Dash. Imprimer ces codes ou les publier sur votre site web facilite la réception de paiements ou de dons en dashs, à la fois en ligne ou hors ligne.

  • Dans le portefeuille logiciel Dash Core, allez sur l’onglet Recevoir, générez si nécessaire une adresse et double-cliquez-la pour afficher un QR-code. Faites un clic-droit sur le QR-code et choisissez Enregistrer l’image pour l’enregistrer comme fichier PNG.
  • Dans le portefeuille logiciel Dash pour Android, touchez Demander un paiement puis touchez le QR-code pour en afficher une version plus grande. Vous pouvez en faire une capture d’écran pour la conserver.
  • Dans le portefeuille logiciel Dash pour iOS, balayez vers la gauche pour accéder à l’écran Recevoir. Un QR-code et une adresse seront affichés. Vous pouvez en faire une capture d’écran pour le conserver.
  • Pour générer un QR-code depuis n’importe quelle adresse Dash, allez sur le générateur de QR-code CWA et collez simplement votre adresse Dash pour générer une image.