Техническое руководство

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.

Сервисы API

Эта документация также доступна в формате PDF.

Существует несколько сервисов API, которые облегчают быструю и простую интеграцию с сетью Dash для таких сервисов как:

  • Трансляция транзакций
  • Валютные курсы
  • Конвертация валюты
  • Генерация счетов

API-сервисы обычно используются для устранения этого требования при запуске вашей собственной инфраструктуры для поддержки взаимодействия с блокчейном. Сюда входят такие механизмы, как:

  • Формирование и трансляция транзакций в сеть.
  • Генерация адресов с использованием HD кошельков.
  • Обработка платежей с использованием WebHooks.

Существует множество вариантов поддержки этих методов, ключевым отличием которых является включённая модель ценообразования и поддерживаемые функции. В следующем списке провайдеров API выполнена попытка описать эти ключевые функции/дифференциаторы, также в него включена ссылка на соответствующую документацию.

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.

  • Функции: трансляция транзакций, уведомления WebSocket.
  • Модель ценообразования: бесплатный / открытый источник
  • Документация: https://github.com/dashevo/insight-api

BlockCypher

../_images/blockcypher.png

https://www.blockcypher.com

BlockCypher представляет собой простой, в основном RESTful JSON API для взаимодействия с блокчейнами, доступ к которому осуществляется через HTTP или HTTPS из домена api.blockcypher.com.

  • Функции: трансляция транзакций, кошелёк HD / генерация адресов, обратные вызовы WebSocket и WebHook, а также экспедирование платежей. BlockCypher не обрабатывает приватные ключи.
  • Модель ценообразования: за API звонок, 5000 запросов -> $85.00 в месяц (https://accounts.blockcypher.com/plans)
  • Документация: https://www.blockcypher.com/dev/dash/

ChainRider

../_images/chainrider.png

https://www.chainrider.io

ChainRider - облачный сервис, обеспечивающий набор из нескольких REST API для цифрового управления валютой и исследований.

  • Функции: блокчейн-запросы, уведомления о событиях, трансляция транзакций, обработка платежей и т.п.
  • Модель ценообразования: бесплатно в течение пробного периода, оплата за API-звонок
  • Документация: https://www.chainrider.io/docs/dash

GoCoin

../_images/gocoin.png

https://gocoin.com

С помощью платформы GoCoin управлять Dash так же просто, как и с помощью установленного плагина. Для каждой крупной торговой платформы уже реализован обработчик платежей. GoCoin ориентирована на то, чтобы помочь продавцам в нишах, связанных с частной деятельностью и в специфических индустриях, а также для урегилирования рисков по транзакциям для всех клиентских платежей.

  • Функции: выставление счетов, курсы валют, обратные вызовы WebHook. GoCoin хранит приватные ключи на своём сервере, что позволяет продавцу извлекать средства в криптовалюте или конвертировать их в фиатную валюту.
  • Интеграция с: WooCommerce, Magento, Prestashop, VirtueMart, ZenCart, OpenCart, OSCommerce, UberCart, nopCommerce, WHMCS, NATS4, Shopify.
  • Модель ценообразования: разовая комиссия в размере 1% (https://gocoin.com/fees)
  • Документация: https://gocoin.com/docs

CoinPayments

../_images/coinpayments.png

https://www.coinpayments.net

CoinPayments - это интегрированный платёжный шлюз для криптовалют, таких как Dash. Плагины покупочных карт доступны для всех популярных, используемых сегодня веб-карт. CoinPayments может помочь вам оформить новый или интегрироваться с уже существующим заказом.

  • Функции: выставление счетов, курсы валют, обратные вызовы WebHook. CoinPayments хранит приватные ключи на своём сервере, что позволяет продавцу извлекать средства в криптовалюте или конвертировать их в фиатную валюту.
  • Интеграция с: aMember Pro, Arastta, Blesta, BoxBilling, Drupal, Ecwid, Hikashop, Magento, OpenCart, OSCommerce, PrestaShop, Tomato Cart, WooCommerce, Ubercart, XCart, ZenCart
  • Модель ценообразования: разовая комиссия в размере 0,5% (https://www.coinpayments.net/help-fees)
  • Документация: https://www.coinpayments.net/apidoc

Ресурсы SDK

Эта документация также доступна в формате 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.

Руководство для разработчиков Dash

../_images/dash-logo.png

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

Руководство разработчика Dash предназначено для предоставления информации, необходимой для понимания Dash и создания приложений на основе Dash. Чтобы наилучшим образом использовать эту документацию, вы можете установить текущую версию Dash Core либо из исходного, либо из предварительно скомпилированного исполняемого файла.

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 - это библиотека для работы с протоколом Dash. В ней реализована поддержка кошелька, с её помощью можно отправлять/получать транзакции (включая InstantSend), не нуждаясь в локальной копии Dash Core, также она имеет много других дополнительных функций. Реализована на Java, но может использоваться с любым совместимым с JVM языком: присутствуют примеры в Python и JavaScript.

.NET: NBitcoin

../_images/dash-logo.png

https://github.com/MetacoSA/NBitcoin

NBitcoin - самая полная Биткойн-библиотека для платформы .NET, в которую были внесены изменения с целью добавления поддержки Dash. В ней реализованы все наиболее подходящие предложения по улучшению сети Биткойн (BIPs) и предложения по улучшению сети Dash (DIPs). Она также обеспечивает доступ на нижний уровень к примитивам Dash, поэтому вы можете легко создавать приложения поверх них.

BlockCypher

../_images/blockcypher.png

https://www.blockcypher.com

BlockCypher также предлагает клиентские SDK.

GoCoin

../_images/gocoin.png

https://gocoin.com

InstantSend

Эта документация также доступна в формате PDF.

InstantSend - это функция, предоставляемая сетью Dash, которая позволяет продавцам и другим поставщиками услуг безопасно принимать транзакции с нулевым подтверждением. Этот механизм, защищённый сетью мастернод, устраняет риск «двойных трат», блокируя транзакционные входы для данной транзакции на уровне протокола.

Транзакции InstantSend и стандартные транзакции

С точки зрения интеграции существуют только незначительные различия между транзакцией InstantSend и стандартной транзакцией. Оба типа транзакций формируются одинаково и подписываются с использованием одного и того же процесса; ключевым отличием является структура комиссий и требования по вводу для InstantSend.

  1. Структура комиссий: InstantSend использует комиссию “за ввод” в размере 0.0001 DASH за каждый ввод.
  2. Требования для ввода: все вводы средств по транзакциям InstantSend должны иметь как минимум 6 подтверждений.

В случае, если данная транзакция не соответствует обоим критериям, произойдёт возврат к стандартной транзакции.

Получение транзакций InstantSend

Операции InstantSend обрабатываются так же, как и стандартная транзакция, как правило, через JSON-RPC, Insight API или внутренний скрипт/службу уведомлений, которые настроены на уровне сервера.

  1. JSON-RPC: Следующие команды RPC будут включать информацию, связанную с InstantSend. В ответном окне вы найдете поле «InstantLock», в котором будет указан статус данной транзакции. True/false значение (булевого типа) в нём будет указывать на то, выполняется ли InstantSend.

    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. Insight API: Insight API может использоваться для обнаружения транзакций InstantSend и для отправки уведомлений клиентам с использованием WebSocket’ов. Также можно вручную опросить API, чтобы получить информацию о транзакции, включая статус 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. Уведомление скрипта: Dash Core Daemon можно настроить для выполнения внешнего скрипта всякий раз, когда выполняется транзакция InstantSend, связанная с конкретным кошельком. Настройка производится путём добавления следующей строки в файл dash.conf:

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

    Обратите внимание, что только импортированные в кошелёк адреса могут быть промониторены для транзакций InstantSend

Трансляция транзакций InstantSend

Транзакции InstantSend можно создавать и транслировать с использованием подхода, аналогичного стандартным транзакциям. При условии соблюдения структуры формирования комиссий InstantSend и требований для ввода, InstantSend может транслироваться с использованием JSON-RPC или Insight API как необработанная транзакция.

  1. JSON-RPC: команда RPC «SendRawTransaction» может использоваться для трансляции исходной транзакции с использованием InstantSend. При использовании этой команды обязательно задайте обоим дополнительным параметрам значение «true»

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

    Детальная информация: https://dash-docs.github.io/en/developer-reference#sendrawtransaction

  2. Insight API: Необработанные транзакции также можно транслировать как InstantSend с помощью API Insight. В этом случае всё, что требуется, - это выполнить запрос POST необработанной транзакции с использованием маршрута /tx/sendix.

    Детальная информация: https://github.com/dashevo/insight-api#instantsend-transaction

Дополнительные ресурсы

Следующие ресурсы предоставляют дополнительную информацию о функции InstantSend и предназначены для обеспечения более полного понимания базовых технологий.

Торговые автоматы

Участник сообщества moocowmoo написал код, который призван помочь продавцам разрабатывать свои собственные торговые автоматы и настраивать их для получения платежей Dash InstantSend. Программное обеспечение Dashvend также может использоваться для создания любой платёжной системы, включая системы продаж, которые могут принимать платежи InstantSend.

Ценовые тикеры

Вы можете добавить простой виджет с ценовым тикером на ваш сайт, используя простой фрагмент из генератора кода CoinGecko.

Аналогичные виджеты с различным дизайном доступны на CoinLibWorldCoinIndex и Cryptonator, в то время как API, предоставляющий аналогичную информацию, доступен из DashCentral.

QR-коды

Многие кошельки способны генерировать QR-коды, которые затем можно сканировать для упрощения ввода адреса Dash. Печать этих кодов или размещение на вашем сайте позволяет легко получать платежи и чаевые в DASH, находясь как онлайн, так и оффлайн.

  • В кошельке Dash Core откройте вкладку Получить, при необходимости сгенерируйте адрес и дважды кликните на нём, чтобы отобразить QR-код. Кликните правой кнопкой на QR-коде и выберите Сохранить изображение, чтобы сохранить его в файл PNG.
  • В кошельке Dash для Android нажмите Запросить средства, а затем нажмите на QR-код, чтобы отобразить его увеличенное изображение. Для сохранения этого изображения вы можете сделать его скриншот.
  • В кошельке Dash для iOS протяните влево, чтобы отобразить экран Запросить средства. Появятся QR-код и адрес. Для сохранения этого изображения вы можете сделать его скриншот.
  • Чтобы сгенерировать QR-код из любого адреса Dash, посетите CWA QR Code Generator и просто вставьте свой адрес Dash для генерации изображения.