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.
General Information: Dash is a “Proof of Work” blockchain with attributes similar to that of Bitcoin.
- Block Time: ~2.6 Minutes per Block
- Blockchain Confirmations: 6 Confirmations (or 1 in the case of InstantSend)
- Github Source: https://github.com/dashpay/dash
- Release Link: https://github.com/dashpay/dash/releases
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:
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.
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:
- 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.
- Integrated Systems must be able to serialize and deserialize these new Transaction Types in order to accurately encode and decode Raw Transaction data.
- From a backwards compatibility
perspective, the 4 byte (32-bit)
version
field included in Legacy Transactions has been split into two fields:version
andtype
(each consisting of 2 bytes). - 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¶
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.
- Características: Transmisión de transacciones, notificaciones de WebSocket.
- Modelo de precios: Gratis / Fuente abierta
- Documentación: https://github.com/dashevo/insight-api
BlockCypher¶
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.
- Características: Transmisión de transacción, Billetera HD / Generación de direcciones, Retono de llamadas de WebSocket y WebHook, así como el reenvío de pagos. BlockCypher no maneja llaves privadas.
- Modelo de precios: Por llamada API, 5000 Solicitudes -> $85.00 por mes (https://accounts.blockcypher.com/plans)
- Documentación: https://www.blockcypher.com/dev/dash/
ChainRider¶
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¶
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¶
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¶
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.
- Documentación: https://dash-docs.github.io/en/developer-guide
NodeJS/JavaScript: Bitcore (Dashcore)¶
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.
- Plataforma: NodeJS / Javascript
- Documentación: https://bitcore.io/api/lib
- Libreria de repositorio: https://github.com/dashevo/dashcore-lib
- Nodo de repositorio: https://github.com/dashevo/dashcore-node
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.
- Platform: PHP
- Documentation: https://github.com/Bit-Wasp/bitcoin-php/blob/master/doc/Introduction.md
- Repository: https://github.com/Bit-Wasp/bitcoin-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.
- Platform: Python
- Documentation: https://pycoin.readthedocs.io/en/latest/
- Repository: https://github.com/richardkiss/pycoin
Java: DashJ¶
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
- Plataforma: Java
- Documentación: https://bitcoinj.github.io/getting-started
- Aplicación de ejemplo: https://github.com/tomasz-ludek/pocket-of-dash
.NET: NBitcoin¶
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.
- Plataforma: .NET
- Documentación: https://programmingblockchain.gitbooks.io/programmingblockchain/content/
- Repositorio: https://github.com/MetacoSA/NBitcoin
BlockCypher¶
BlockCypher también ofrece clientes SDK.
- Plataforma: Ruby, Python, Java, PHP, Go, NodeJS
- Repositorios: https://www.blockcypher.com/dev/dash/#blockcypher-supported-language-sdks
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.
- Estructura de comisiones: InstantSend utiliza una comisión “por-entrada” de 0.0001 DASH por entrada.
- 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.
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.
- Obtener transacción: https://dash-docs.github.io/en/developer-reference#gettransaction
- Enlistar transacciones: https://dash-docs.github.io/en/developer-reference#listtransactions
- ListSinceBlock: https://dash-docs.github.io/en/developer-reference#listsinceblock
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.
- Web Socket: https://github.com/dashevo/insight-api#web-socket-api
- Transaction API: https://github.com/dashevo/insight-api#instantsend-transactions
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.
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
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.