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.