Guías técnicas

Dash Wallet Integration

This documentation is also available as a PDF.

Dash Core is a fork of Bitcoin and the majority of functionality included in the Dash Core Daemon can be integrated in a similar manner. Key differences relate to customizations to existing JSON-RPC commands to support unique functionalities such as InstantSend. These differences, as well as more general information, are summarized below.

  1. General Information: Dash is a “Proof of Work” blockchain with attributes similar to that of Bitcoin.

    1. Block Time: ~2.6 Minutes per Block
    2. Blockchain Confirmations: 6 Confirmations (or 1 in the case of InstantSend)
    3. Github Source: https://github.com/dashpay/dash
    4. Release Link: https://github.com/dashpay/dash/releases
  2. JSON-RPC Interface: The majority of Bitcoin JSON-RPC commands are unchanged making integration into existing systems relatively straightforward. For a complete listing of RPC commands see the Developer Guide.

    It’s worth noting that several key Transaction-related JSON-RPC commands have been modified to support InstantSend through the addition of an “InstantLock” field and are listed below:

    1. GetTransaction
    2. ListTransactions
    3. ListSinceBlock
  3. 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.

  4. Supporting Libraries: Due to the aforementioned differences in Hashing Algorithm only minor adjustments are required before using Bitcoin libraries on the Dash network. The most popular libraries have already been ported to Dash which has enabled support for most major programming languages. These resources are outlined in the SDK Resources section of this 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.

Servicios API

Esta documentación también está disponible como un PDF.

Existen varios servicios API para facilitar la integración rápida y sencilla con la red Dash para servicios que incluyen:

  • Transmisión de transacciones
  • Tipo de cambio
  • Conversión de monedas
  • Generación de facturas

Los servicios de API generalmente se aprovechan para eliminar ese requisito de ejecutar tu propia infraestructura para admitir las interacciones de cadena de bloques. Esto incluye mecanismos tales como:

  • Formar y transmitir una transacción a la red.
  • Generación de direcciones usando Billeteras HD.
  • Procesamiento de pagos usando WebHooks.

Hay una variedad de opciones para respaldar estos métodos, con el diferenciador clave como el modelo de fijación de precios y las funciones compatibles. La siguiente lista de proveedores de API intenta delinear estas características/diferenciadores claves y también incluye un enlace a la documentación relacionada.

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 es un simple RESTful JSON API para interactuar con cadenas de bloques, que puede ser accedido a través de HTTP o HTTPS desde el dominio api.blockcypher.com.

ChainRider

../_images/chainrider.png

https://www.chainrider.io

ChainRider es un servicio en la nube que provee un conjunto de REST API para el manejo y exploración de monedas digitales

  • Características: Consultas a la Cadena de Bloques, Notificaciones de Eventos, Transmisión de Transacciones, Procesamiento de Pago, etc.
  • Modelo de Precios: Prueba gratis, pago por llamada de API
  • Documentación: https://www.chainrider.io/docs/dash

GoCoin

../_images/gocoin.png

https://gocoin.com

La plataforma GoCoin hace que tomar Dash sea tan fácil como instalar un complemento. El procesamiento de pagos ya está implementado para todas las principales plataformas de compras. GoCoin se centra en ayudar a los comerciantes en nichos relacionados con la privacidad e industrias específicas, y maneja todos los riesgos de transacción para todos los pagos de tus clientes.

  • Características: Facturación, Tipos de cambio, Retorno de llamadas de WebHook. GoCoin posee llaves privadas en su servidor, lo que permite al comerciante retirar fondos en criptomonedas o convertir a Fiat.
  • Integraciones: WooCommerce, Magento, Prestashop, VirtueMart, ZenCart, OpenCart, OSCommerce, UberCart, nopCommerce, WHMCS, NATS4, Shopify.
  • Modelo de precios: 1% comisión de procesamiento (https://gocoin.com/fees)
  • Documentación: https://gocoin.com/docs

CoinPayments

../_images/coinpayments.png

https://www.coinpayments.net

CoinPayments es una pasarela de pago integrada para las criptomonedas, como Dash. Los complementos del carrito de compras están disponibles para todos los webcarts populares que se usan hoy en día. CoinPayments puede ayudarte a configurar un nuevo sistema de pagos o integrarse con tu sistema de pago preexistente.

  • Características: Facturación, Tipos de cambio, Retorno de llamadas de WebHook. CoinPayments tiene llaves privadas en su servidor, lo que permite al comerciante retirar fondos en criptomonedas o convertir a Fiat.
  • Integraciones: aMember Pro, Arastta, Blesta, BoxBilling, Drupal, Ecwid, Hikashop, Magento, OpenCart, OSCommerce, PrestaShop, Tomato Cart, WooCommerce, Ubercart, XCart, ZenCart
  • Modelo de precios: 0.5% comisión de preocesamiento (https://www.coinpayments.net/help-fees)
  • Documentación: https://www.coinpayments.net/apidoc

Recursos SDK

Esta documentación también está disponible en un PDF.

SDKs (Software Development Kits) are used to accelerate the design and development of a product for the Dash Network. These resources can either be used to interface with an API provider or for the creation of standalone applications by forming transactions and/or performing various wallet services.

Guía de desarrollador de Dash

../_images/dash-logo.png

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

La Guía de desarrollador de Dash tiene como objetivo proporcionar la información que se necesita para comprender Dash y comenzar a crear aplicaciones basadas en Dash. Para hacer el mejor uso de esta documentación, es mejor que instales la versión actual de Dash Core, ya sea desde el origen o desde un ejecutable precompilado.

NodeJS/JavaScript: Bitcore (Dashcore)

../_images/bitcore.png

https://bitcore.io

Dashcore is a fork of Bitcore and operates as a full Dash node — your apps run directly on the peer-to-peer network. For wallet application development, additional indexes have been added into Dash for querying address balances, transaction history, and unspent outputs.

PHP: Bitcoin-PHP

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

Bitcoin-PHP is an implementation of Bitcoin with support for Dash using mostly pure PHP.

Python: PyCoin

https://github.com/richardkiss/pycoin

PyCoin is an implementation of a bunch of utility routines that may be useful when dealing with Bitcoin and Dash. It has been tested with Python 2.7, 3.6 and 3.7.

Java: DashJ

../_images/bitcoinj.png

https://github.com/HashEngineering/dashj

DashJ es una librería para trabajar con el protocolo Dash. Puede mantener una billetera, enviar/recibir transacciones (incluye InstantSend) sin necesidad de una copia local de Dash Core, y tiene muchas otras características avanzadas. Esta implementado en Java pero puede ser usado desde cualquier

.NET: NBitcoin

../_images/dash-logo.png

https://github.com/MetacoSA/NBitcoin

NBitcoin es la biblioteca más completa de Bitcoin para la plataforma .NET, y se ha modificado para incluir soporte para Dash. Implementa todas las propuestas de mejora más relevantes para Bitcoin (PIF) y para Dash (DIP). También proporciona acceso de bajo nivel a los primitivos de Dash para que puedas construir fácilmente tu aplicación sobre ella.

BlockCypher

../_images/blockcypher.png

https://www.blockcypher.com

BlockCypher también ofrece clientes SDK.

GoCoin

../_images/gocoin.png

https://gocoin.com

InstantSend

Esta documentación también está disponible en un PDF.

InstantSend es una función proporcionada por la red Dash que permite que las transacciones de con 0 confirmaciones sean aceptadas de forma segura por los comerciantes y otros proveedores de servicios. Asegurado por la red de masternodes, este mecanismo elimina el riesgo de un «gasto doble» al bloquear las entradas de transacción para una transacción determinada en un nivel de protocolo.

Transacciones InstantSend vs. Transacciones estándares

Desde una perspectiva de integración, solo existen pequeñas diferencias entre una Transacción InstantSend y una Transacción Estándar. Ambos tipos de transacciones se forman de la misma manera y se firman usando el mismo proceso; la diferencia clave es la estructura de comisiones y los requisitos de entrada para InstantSend.

  1. Estructura de comisiones: InstantSend utiliza una comisión “por-entrada” de 0.0001 DASH por entrada.
  2. Requisitos de entrada: todas las entradas para una transacción de InstantSend deben tener al menos 6 confirmaciones.

En el caso de que una transacción determinada no cumpla con ambos criterios, se revertirá a una transacción estándar.

Recibir transacciones InstantSend

Las transacciones de InstantSend se manejan de la misma manera que una transacción estándar, generalmente a través de JSON-RPC, Insight API o un script/servicio de notificación interno que está configurado a nivel de servidor.

  1. JSON-RPC: los siguientes comandos RPC incluirán información relacionada con InstantSend. Dentro de la respuesta encontrarás un campo «InstantLock» el estado de una transacción determinada. Este valor verdadero/falso (booleano) indicará si se ha observado una InstantSend.

    1. Obtener transacción: https://dash-docs.github.io/en/developer-reference#gettransaction
    2. Enlistar transacciones: https://dash-docs.github.io/en/developer-reference#listtransactions
    3. ListSinceBlock: https://dash-docs.github.io/en/developer-reference#listsinceblock
  2. Insight API: la Insight API se puede utilizar para detectar transacciones de InstantSend y enviar notificaciones a los clientes que usan WebSockets. La API también se puede sondear manualmente para recuperar información de la transacción, incluido el estado de 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. Notificación de script: Dash Core Daemon se puede configurar para ejecutar un script externo siempre que se observe una transacción de InstantSend relacionada con esa billetera. Esto se configura agregando la siguiente línea al archivo dash.conf:

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

    Ten en cuenta que solo las direcciones importadas a la billetera serán monitoreadas para transacciones InstantSend.

Transmitir Transacciones InstantSend

Las Transacciones InstantSend se pueden construir y difundir utilizando un enfoque similar a las Transacciones Estándar. Siempre que se cumplan la Estructura de comisiones de InstantSend y los Requisitos de entrada, se puede transmitir una InstantSend usando JSON-RPC o Insight API como una Transacción sin procesar.

  1. JSON-RPC: El comando RPC «SendRawTransaction» se puede utilizar para transmitir una transacción sin procesar con InstantSend. Al utilizar este comando, asegúrate de establecer ambos parámetros opcionales como «verdadero»

    sendrawtransaction "hexstring" ( permite comisiones altas instantsend ) sendrawtransaction "hexstring" true true

    Más información: https://dash-docs.github.io/en/developer-reference#sendrawtransaction

  2. Insight API: las transacciones sin procesar también se pueden transmitir como InstantSend utilizando Insight API. En este caso, todo lo que se requiere es PUBLICAR la transacción sin procesar con la ruta /tx/sendix.

    Más información: https://github.com/dashevo/insight-api#instantsend-transaction

Recursos adicionales

Los siguientes recursos proporcionan información adicional sobre InstantSend y están destinados a ayudar a proporcionar una comprensión más completa de las tecnologías subyacentes.

Maquina expendedora

El miembro de la moocowmoo ha liberado codigo para ayudar a los comercios a contruir su propia mauina expendedora y configurarla para recibir pagos de InstantSend de Dash. El software Dashvend tambien puede ser utilizado para crear cualquir tipo de sistema de pago, incluyendo sistemas de punto de venta, que puedan aceptar pagos con InstantSend.

Precio de tickers

Puedes agregar un widget de ticket de precio simple a tu sitio web usando el simple generador de fragmentos de código de CoinGecko.

Widgets similares con diferentes diseños estan disponibles en CoinLib, WorldCoinIndex y Cryptonator, mientras una API que provee información similar esta disponible en DashCentral.

Códigos R

Muchas billeteras son capaces de generar codigos QR los cuales pueden ser escaneados para simplificar la entrada de la dirección Dash. Imprimiendo estos codigos o publicandolos en su pagina web se hace mas facil recibir pagos y propinas en Dash, tanto en linea como fuera de linea.

  • En la Dash Core, vaya a la pestaña Recibir, genere una dirección si es necesario y haga doble clic para mostrar un codigo QR. Haga clic derecho en el codigo QR y seleccione Guardar Imagen para guardar en un archivo PNG.
  • En Dash para Android, toque Solicitar Monedas luego toque el codigo QR para mostrar la imagen mas grande. Puede hacer captura de pantalla para guardar una imagen.
  • En Dash para iOS, deslice a la izquierda para mostrar la pantalla Recibir Dash. Un codigo QR y dirección aparecera. Puedes hacer una captura de pantalla para guardar una imagen.
  • Para generar un código QR de cualquier dirección, visita CWA QR Code Generator y simplemente pegue su dirección Dash para generar una imagen.