Généralités sur l’intégration

Cette documentation est aussi disponible au format PDF.

Dash Core is a fork of Bitcoin Core and shares many common functionalities. Key differences are found in existing JSON-RPC commands which have been customized to support unique functionalities such as InstantSend.

The Basics

Dash is a Proof of Work network, and similar to Bitcoin, Dash has a mining network but uses a different block hashing algorithm. Dash serves as an improvement of Bitcoin’s shortcomings by offering a robust solution for instant transactions, enhancing user privacy, and offering a self-sustainable decentralized governance model.

JSON-RPC Interface

The majority of commands are unchanged from Bitcoin making integration into existing systems relatively straightforward. Note that the following commands have been modified to support InstantSend:

Block Hashing Algorithm

Dash uses the X11 algorithm in place of SHA256 used in Bitcoin. It’s important to note, however, that this only affects the hashing of the block itself. All other internals utilize SHA256 hashes (transactions, merkle root, etc.), which allows for most existing libraries to work in the Dash ecosystem.

Transactions spéciales

Dash Core v0.13.x introduced the concept of “Special Transactions”. Please see the Transaction Type Integration Guide for more information.

Transactions spéciales

Cette documentation est également disponible au format PDF.

Dash, dans sa version 0.13.0 et ultérieure, implémente les transactions spéciales DIP002, qui forment la base de nouveaux types de transactions fournissant des métadonnées sur chaîne, pour rendre possibles différents mécanismes de consensus. Les types de transactions spéciales sont les suivants :

Publication

Version

Type

Volume de charge

Charge

Charge JSON

But de la transaction

v0.13.0

3

0

n/d

n/d

n/d

Transaction standard

v0.13.0

3

1

<variable int>

<hex>

proRegTx

Enregistrement de masternode

v0.13.0

3

2

<variable int>

<hex>

proUpServTx

Mise à jour du service de masternode

v0.13.0

3

3

<variable int>

<hex>

proUpRegTx

Mise à jour de l’opérateur de masternode

v0.13.0

3

4

<variable int>

<hex>

proUpRevTx

Révocation de masternode

v0.13.0

3

5

<variable int>

<hex>

cbTx

Preuve Merkel de la liste de masternodes

v0.13.0

3

6

<variable int>

<hex>

qcTx

Engagement de quorum

Notes sur l’intégration :

  1. Les transactions spéciales DIP002 sont un composant de base de Dash Core version 0.13.0 et inaugurent pour le réseau une nouvelle version de transaction et sa “charge » liée.

  2. Integrated Systems must be able to serialize and deserialize these new Transaction Types to accurately encode and decode Raw Transaction data.

  3. Du point de vue de la rétro-compatibilité, le champ 4 octets (32 bits) version inclus dans les transactions antérieures a été divisé en deux champs : version et type (chacun de 2 octets).

  4. Veuillez consulter la section Transactions spéciales du guide de référence des développeurs Dash pour obtenir plus de détail sur ces types de données, par ex. <variable int>.

  5. L »état InstantSend et la charge JSON (par exemple proRegTx) sont inclus dans la réponse JSON-RPC. Veuillez noter que ces données ne sont pas incluses dans la signature de hachage calculée, et sont fournies par commodité.

Veuillez vous référer au Guide d’intégration des types de transaction pour obtenir des exemples fonctionnels de chaque type de transaction.

InstantSend

Cette documentation est aussi disponible au format PDF.

InstantSend est une fonctionnalité fournie par le réseau Dash qui permet aux transactions à 0 confirmation d’être acceptées et aussitôt dépensées à nouveau, en toute sécurité. Le réseau tâche de verrouiller les entrées de chaque transaction valide lorsqu’elle est diffusée au réseau. Chaque transaction sécurisée est incluse dans un bloc suivant, conformément aux principes standard de la blockchain.

InstantSend is enabled by the Masternode Network which comprises approximately 5,000 masternode servers. These nodes are differentiated from standard nodes by having proven ownership of 1,000 Dash, making the network highly resistant to Sybil attacks. Masternodes form Long-Living Masternode Quorums (LLMQs), which are responsible for providing near-instant certainty to the transaction participants that the transaction inputs cannot be respent, and that the transaction will be included in a following block instead of a conflicting transaction.

Ce concept constitue une extension du consensus Nakamoto. InstantSend permet aux fonds de la transaction d’être immédiatement retransmis par le destinataire en toute sécurité, avant même que la transaction ne soit incluse dans un bloc.

Réception de transactions InstantSend

Recevoir une transaction InstantSend suppose deux obligations :

  1. La capacité à déterminer l’état InstantSend d’une transaction donnée.

  2. La capacité à ajuster l’état de confirmation indépendamment de la confirmation de bloc.

L’état InstantSend est typiquement déterminé par une connexion directe au « daemon » Dash, ZMQ notification, ou bien par l’utilisation du script de notification d’un portefeuille externe.

Connexion directe : l’état InstantSend peut être identifié par une connexion directe au « daemon » Dash au moyen du protocole JSON-RPC. L’attribut « instantlock » de la réponse JSON reflète l’état de la transaction et il est inclus dans les commandes suivantes :

Notification ZMQ : dès qu’une transaction est incluse ou verrouillée dans le tampon mémoire, les notifications ZMQ peuvent être diffusées par le nœud. Une liste des notifications ZMQ possibles peut être consultée ici.

Les notifications suivantes sont utiles pour reconnaître les transactions et leurs verrouillages instantanés correspondants :

  • zmqpubhashtx

  • zmqpubhashtxlock

  • zmqpubrawtx

  • zmqpubrawtxlock

Notification de portefeuille : le « daemon » Dash Core peut être configuré pour exécuter un script externe dès qu’une transaction InstantSend relative à ce portefeuille est détectée. On le configure en ajourant la ligne suivante au fichier dash.conf :

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

C’est typiquement utilisé avec un portefeuille qui a été doté d’adresses en lecture seule.

Diffusion des transactions InstantSend

Depuis que la version 0.14.0 de Dash a lancé les LLMQ sur le réseau Dash, les quorums tentent par défaut de verrouiller chaque transaction valide, sans frais supplémentaires ni action à effectuer par le portefeuille d’envoi ou l’utilisateur. Une transaction est éligible pour InstantSend quand chacune de ses entrées est considérée comme confirmée. Cela est le cas dès qu’une des conditions suivantes est vraie :

  • la transaction précédente à laquelle l’entrée fait référence est confirmée par 6 blocs

  • la transaction précédente est confirmée par un verrouillage InstantSend antérieur

  • le bloc contenant la transaction précédente est verrouillé sur chaîne

When checking the previous transaction for an InstantSend lock, it is important to do this on mempool (non-mined) transactions. This allows chained InstantSend locking.

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.

Services API

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

L’API REST open source Insight est un moyen simple, pratique et puissant de lire des données sur le réseau Dash et de bâtir vos propres services à partir d’elles. Un guide pratique pour s’initier à l’API Insight et à son explorateur de blocs est disponible ici.

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.

  • Fonctionnalités : diffusion de transaction, portefeuille HD et génération d’adresses, appels WebSocket et WebHook mais aussi transfert de paiement. BlockCypher ne manipule pas de clés privées.

  • Grille tarifaire : par appel API, 5000 requêtes -> $85 mensuels (https://accounts.blockcypher.com)

  • Documentation : https://www.blockcypher.com/dev/dash/

BitGo

../_images/bitgo.png

https://www.bitgo.com

BitGo fournit une API REST simple et robuste et un SDK client, permettant d’intégrer des portefeuilles de monnaie numérique dans votre application. La compatibilité avec InstantSend est assurée.

  • Fonctionnalités : portefeuilles HD à multi-signature, opérations sur portefeuille, notifications WebSocket et WebHook, solutions de garde.

  • Modèle tarifaire : par appel API

  • Documentation : https://app.bitgo.com/docs/

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/

Blockmove

../_images/blockmove.png

https://blockmove.io

Portefeuille cryptomonétaire, services pour vendeurs et fournisseur d’API. Blockmove est une manière simple et rapide d’accepter des paiements en cryptomonnaie.

  • Fonctionnalités : portefeuilles sans garde, portefeuille HD, anonymat élevé, frais bas. Les clés privées ne sont pas stockées et ne sont accessibles que par l’utilisateur.

  • Gamme tarifaire — API : 0,3% pour les transactions de retrait ; vendeurs : première année gratuite, puis 49 dollars par mois.

  • Documentation : https://docs.blockmove.io

NOWNodes

../_images/nownodes.png

https://nownodes.io/

NOWNodes provides simple, fast, and secure RPC access to Dash-based full nodes. The low latency and high performance is of great use to researchers and businesses such as crypto miners or hardware wallet providers.

  • Fonctionnalités : toutes les commandes RPC Dash.

  • Gamme tarifaire : gratuit jusqu’à 20 000 requêtes, puis seuils tarifaires.

  • Documentation : https://nownodes.io/documentation

CoinPayments

../_images/coinpayments.png

https://www.coinpayments.net

CoinPayments is an integrated payment gateway for cryptocurrencies such as Dash. Shopping cart plugins are available for all popular webcarts used today. CoinPayments can help you set up a new checkout or integrate with your pre-existing checkout.

  • Features: Invoicing, Exchange Rates, WebHook Callbacks. CoinPayments holds Private Keys on their server allowing merchants to withdraw funds in Cryptocurrency or convert to fiat.

  • 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

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://dashcore.readme.io/

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, il vous est conseillé d’installer la version la plus récente du portefeuille logiciel Dash Core et de Dash Platform, soit depuis le code source, soit en tant qu’exécutable pré-compilé, soit depuis Docker Hub.

NodeJS/JavaScript : 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.

NodeJS/JavaScript : DashJS

DashJS vous permet d’opérer des transactions sur L1 ou d’obtenir/d’enregistrer des documents sur L2 depuis une seule et unique bibliothèque, incluant la gestion et la signature de vos documents.

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/dashevo/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.

Objective-C: Dash-Sync

../_images/dash-logo.png

https://github.com/dashevo/dashsync-iOS

Dash-Sync est une architecture de la blockchain Dash pour iOS, en Objective-C. Elle implémente les propositions d’améliorations de Bitcoin (BIP) les plus pertinentes, ainsi que les propositions d’amélioration de Dash (DIP).

.NET : NBitcoin

../_images/dash-logo.png

https://github.com/MetacoSA/NBitcoin

NBitcoin is the most complete Bitcoin library for the .NET platform and has been patched to include support for Dash. It implements all most relevant Bitcoin Improvement Proposals (BIPs) and Dash Improvement Proposals (DIPs). It also provides low level access to Dash primitives so you can easily build your application on top of it.

BlockCypher

../_images/blockcypher.png

https://www.blockcypher.com

BlockCypher propose aussi des SDK client.

Distributeurs automatiques

Community member moocowmoo has released code to help merchants build their own vending machine and set it up to receive Dash InstantSend payments. The Dashvend software can also be used to create any sort of payment system, including point-of-sale systems that can accept InstantSend payments.

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

Many wallets can generate QR codes that are scannable to simplify entry of the Dash address. Printing these codes or posting the on your website makes it easy to receive payment and tips in Dash, both online and offline.

  • In Dash Core, go to the Receive tab, generate an address if necessary, and double-click it to display a QR code. Right-click on the QR code and select Save Image to save a PNG file.

  • 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.