Что такое API для автоматической торговли на криптовалютных биржах и как это работает?

Знали ли вы, что у каждой биткойн-ноды есть встроенное API, которым можно пользоваться как локально, так и через Web?

А нет, стойте, начну с другой стороны.

Своя биткойн-нода – что это и зачем

Давным-давно я писал статью, в которой перечислял способы завести свой биткойн кошелек. Одним из способов была установка своей полной ноды. Пришло время добавить подробностей и понять, чем нода может быть полезной.

Хранение денег – вопрос очень сложный, и многогранный, а хранение биткойнов еще и технически усложнен. Если обычные деньги можно хранить дома (где их могут украсть) или в банке (который может обанкротиться), то биткойны можно потерять, доверив их бирже (которую могут взломать), сайту-сервису по хранению (аналогично), можно потерять флешку с приватными ключами, может сдохнуть жесткий диск, а еще могут нагрянуть хакеры.

Нода не решит этих проблем (но все равно изучите эту и эту ссылки), но зато позволит распоряжаться своими средствами так, как вам это нужно, не доверяя никому. Нода – это ваш личный банк, где никакое должностное лицо не будет решать, куда вам тратить деньги и откуда принимать.

Нода – это программа, которая запущена и работает на компьютере или сервере, и обменивается данными с такими же нодами по всему миру. Принцип работы сравним с битторентом – есть огромная база транзакций, есть программы у участников на компе. Каждая такая программа – это как филиал банка, где можно выставлять счета, оплачивать счета, переводить деньги из одного филиала в другой на тот или иной счет. На своей установленной ноде вы создаете адреса для получения денег (например 15u2exuYtMbvaDyVNYWgThFidZP7KHyjmM), с неё же отправляете на другие адреса, можно отправлять в рамках своей ноды, что бы запутать/размазать и т.п.

Каждый раз, когда вы делаете транзакцию (перевод средств) в своей ноде, ваша нода пишет в вашу локальную копию блокчейна эти данные, подписанные вашей уникальной цифровой подписью, и эта ваша копия блокчейна синхронизируется с другими нодами, а те с другими и т.п. – и это быстрый процесс. Стоит вам перевести деньги у себя локально с одного адреса на другой, об этом узнают в течении минуты-двух на другом конце планеты. Другой вопрос, что эту сделку не посчитают окончательно завершенной, пока майнеры не добавят её в нужное кол-во блоков в свои копии блокчейна, пока эти копии тоже не синхронизируются и не разойдутся.. Но это другой вопрос.

Итак, для себя я вижу применение полезным применение ноды в двух случаях:

  1. Когда хочу иметь полный, надежный и бесконтрольный доступ к своим же средствам
  2. Когда хочу иметь надежный и быстрый платежный интерфейс

С первым пунктом всё понятно – паранойя и жажда контроля. Что насчет второго?

Реклама

Нода как платежный интерфейс

Давайте предположим, что нам нужен сайт, на котором можно вводить и выводить BTC. Комиссий, помимо общих комиссий сети, быть не должно, должен поддерживаться ввод и вывод любого объема валюты.

Чужое API

И тут начинаются пляски с бубнами. Самое очевидное, на первый взгляд решение, это использование стороннего API. Многие сайты предоставляют такие решения, например вот решение от blockchain.info. Я его пользовал несколько лет назад, и вот что мне не понравилось (это было давно, сейчас ситуация могла измениться):

Проблема 1. Задержки в трансфере

Для получения платежа нужно сначала обратиться (через API) на сайт blockchain.info, получить новый адрес для получения платежа, дать адрес клиенту, клиент на этот адрес отправляет средства – это всё еще кошелек blockhain.info (далее – BI). Через какое-то время по шедулеру деньги переводятся на с кошелька, который перевел клиент, на кошель, который указал ты.. Но не сразу. В некоторых случаях BI ждет подтверждений, в некоторых ждет, когда мелкие платежи в сумме составят какую-то сумму, и только потом BI вызывает callback на твоем сайте, сообщая о том, что средства пришли.

Я сбился со счета, когда злые клиенты писали мне лично, с вопросом – я перевел бабки, уже 10 подтверждений, почему не пополнился баланс?!?!?! В таких случаях, иногда пришлось клиента упрашивать подождать, иногда писать в саппорт BI, и, в особо запущенных случаях, перевод мог идти до ТРЕХ ДНЕЙ. Это многовато даже по меркам биткоина. Понятное дело, что второй раз люди не отправляли средства.

Кроме того, люди не отправляют неизвестно куда средства, дураков нет. Очень распространенный паттерн – отправить небольшую сумму, рублей на 30, проверить, пришло или нет, потом вывести её, проверить вернулось ли, сколько по факту списалось комиссии и т.п. Очевидно, если с 30 рублями такая история на несколько дней, сколько нервов потребуется при вводе/выводе крупной суммы?

Проблема 2. Технические ограничения

Для каждого пользователя я создавал свой адрес, но первая ласточка прозвучала, когда кол-во юзеров перевалило за 1000. Банально перестал работать интерфейс – в то время никто не ожидал, что кому-то может понабиться такое кол-во, и после 999 кошелька JavaScript просто падал с ошибкой на сайте.

Ладно, не беда, я продолжил получение нужных мне данных через API, и через какое-то время столкнулся с тем, что меня начали отвергать – размер моих данных, с учетом кол-ва адресов и переводов превысил допустимые для них нормы. Об этом мне сообщили и пообещали жуткие кары, после чего я переделал механизм – стал по другому генерировать, стал заново использовать адреса..  Но это не круто, когда не можешь делать так, как нужно тебе.

Проблема 3. Фатальная

Все деньги, все переводы и вообще вся история хранится где-то там. Оно конечно понятно, что вся история и так и так хранится в блокчейне, но когда нода у меня только я знаю, какой адрес мой а какой не мой.. И что вот эти 10 000 адресов все мои, хотя их внешне ничего не объединяет. И все эти переводы были сделаны мне или мной.. Не хочу, что бы какой-то сайт это логировал, в общем.

Хочу сразу отметить, у меня нет претензий к BlockChain.Info, у них отличное и бесплатное API, для каких-то ненагруженных проектов я бы выбрал именно их.

В те дни я пробовал работу разных API, неплохое было у https://developers.xapo.com/, какой-то платный сервис обещал все, что мне было нужно, но не смог принять (и увидеть!) платеж от меня, какой-то отдавал ошибки при запросах к API и т.п. В общем на рынке было не так много интеграционных решений для проведения платежей. Не уверен, что и сейчас есть, но должны же быть.

Своё API

А теперь о своём. Биткойн нода, как я писал вначале, имеет встроенное API. Иными словами, если залезть в конфиг и выставить нужные настройки, на компе/сервере с нодой поднимется Web-сервис, на него можно отправлять запросы – создания адресов, получения денег, отправки денег, получать информацию о блокчейне, валидировать адреса и т.п. В простейшей схеме это выглядит так – у вас есть какой-то своей сервер, которым пользуются пользователи, и есть биткоин-нода, которая (в идеале) видна только вашему серверу. Ваш сервер обращается к ноде, для того, что бы удовлетворить запросы пользователей.

Давайте установим и проверим.

Реклама

Установка.

Говорю сразу, для ноды важно место. Сейчас она занимает больше 200Гб и будет дальше расти, т.к. содержит весь блокчейн. Дисковое место по какой-то иронии сейчас дорогое, так что сервер дешевле брать с HDD, или вообще установить её на ноутбуке дома и пробросить порт. Я расскажу на примере установки на ноутбук, на который установлен Ubuntu Server LTS.

Порядок действий:

Стать рутом

 sudo bash (ввести свой пароль) 

Добавить ppa

 add-apt-repository ppa:bitcoin/bitcoin apt-get update 

Выполнить

 apt-get install bitcoind 

Отредактировать файл  /etc/bitcoin/bitcoin.conf

 server=1 rpcuser=SomeUser rpcpassword=SomeStrongVeryStrongReallyStrongPassword rpcport=8332 

Пароль и пользователь должны быть очень надежными, символов по 100 каждый! Это все же деньги.

Создать директорию для хранения блокчейна (200Гб на сегодня). По умолчанию будет всё падать в /home

 mkdir /mnt/btc_blockchain 

Добавить запуск ноды в кронтаб после перезагрузки

 @reboot bitcoind -daemon -datadir=/mnt/btc_blockchain -conf=/etc/bitcoin/bitcoin.conf 

Перезагрузить

Добавить алиас, что бы каждый раз не указывать конфиг

 touch ~/.bash_aliases source ./.bash_aliases 

Для проверки выполнить

 bitcoin-cli getbalance 

image

Самая полезная команда поначалу – выводит список доступных команд

 bitcoin-cli help 

С её помощью так же можно узнать как пользоваться любой из представленных команд. Например:

 bitcoin-cli help getbalance 

image 

Разумеется, на ноде можно не только проверять балансы, но и генерировать новые адреса для получения денег

 bitcoin-cli getnewaddress 

Отправлять деньги получателю

 bitcoin-cli sendtoaddress 

Или списку получателей (каждому свою сумму)

 bitcoin-cli sendmany 

Ну и т.п.

Что более приятно, обращаться к ноде через веб (если явно разрешить это в конфиге). Разумеется, о безопасности забывать нельзя, поэтому нужно, в идеале, работать через VPN каналы, ну, или хотя бы ограничить доступ к ноде по IP.

Реклама

Запуск API

Давайте изменим конфиг и посмотрим, что получится

Нода развернута на машине с адресом 192.168.88.244, а адрес компа, с которого я работаю, 192.168.88.248. На ноде я разрешаю подключаться только с него (ну и локально с самой ноды, конечно).

Ноду нужно перезапустить (в простейшем случае перезагрузите убунту, или убейте процесс bitcoind и запустите заново, скопировав команду из crontab)

Теперь можно проверить работу – откроем для начала в браузере

Ура, хост доступен, апи подняли, но тупо через браузер работать нельзя, давайте напишем небольшой скрипт для работы с ней.

Если всё сделано правильно, результат будет таким:

Еще пару методов – запросим инфу о текущем состоянии блокчейна и попробуем осуществить перевод

Вывод будет выглядеть так

Вот, собственно, код:

 import requests from requests.auth import HTTPBasicAuth # Указать rpc логин и пароль, который задавали в bitcoin.conf node_login = "SomeUser" node_password = "SomeStrongVeryStrongReallyStrongPassword" # IP адрес ноды node_address = "http://192.168.88.244:8332" # Запросим баланс payload = { "jsonrpc": "1.0", "id":"", "method": "getbalance", } balance = requests.post(node_address, json=payload, auth=HTTPBasicAuth(node_login, node_password)) print("Balance", balance,balance.text) print("-"*80) # Запросим информацию о блокчейне payload = { "jsonrpc": "1.0", "id":"", "method": "getblockchaininfo", } b_info = requests.post(node_address, json=payload, auth=HTTPBasicAuth(node_login, node_password)) print("BlockChainInfo", b_info, b_info.json()) print("-"*80) # Отправить 0.01 BTC автору статьи payload = { "jsonrpc": "1.0", "id":"", "method": "sendtoaddress", "params": ["15u2exuYtMbvaDyVNYWgThFidZP7KHyjmM", "0.001", "donation"] } send_money = requests.post(node_address, json=payload, auth=HTTPBasicAuth(node_login, node_password)) print("Send Money", send_money, send_money.json()) 

Готово, получилось – нода работает и скрипт отправляет и получает с неё данные. Считайте, платежный шлюз или что-то такое в кармане. Из полезного еще можно упомянуть такой параметр, как walletnotify. Можете вписать его в конфиг. Вот так:

 walletnotify=/home/scripts/transaction.sh %s 

Каждый раз, когда в вашу ноду прилетает информация о транзакции (кто-то отправил вам деньги или вы отправили кому-то), будет вызываться скрипт /home/scripts/transaction.sh (его надо написать, конечно).

Этому скрипту входящим параметром будет передаваться транзакция. Что с ней делать – ваш выбор. Я использовал так – как только приходила транзакция, срабатывал скрипт, писал этот переданный хеш транзации в файл, как наиболее надежное средство. Серверный демон мониторил файл, и, если находил там свежую запись, уже переносил в базу и проверял – т.е. вызывал метод ноды, который запрашивал информацию о транзакции. Если это была входящая транзакция, и это первое её упоминание, смотрел на какой адрес она пришла, по адресу находил в базе юзера с этим платежным адресом (адреса я выдавал) и сообщала ему, что платеж поступил и ждет подтверждений.

Еще из той же серии параметр blocknotify=/home/bitcoin/blocknotify.sh %s. Каждый раз, когда обновляется информация о блоках, он вызывает скрипт и передает ему номер блока. Это удобно использовать для обновления инфы о подтверждениях. Т.е. если блок изменился, значит поработали майнеры, можно проверить что там есть по нашим транзакциям.

Более подробно о командах можно узнать тут (на английском языке)

Реклама

Заключение

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

Удачи!

Приветствуем в специальной рубрике Python Проекты для новичков!

В данной статье мы будем создавать сервис уведомлений о ценах на биткоин. В ходе этого проекта, вы узнаете больше о запросах HTTP и о том, как их рассылать при помощи (как удобно) пакета requests на примерах.

Содержание:

Вы узнаете побольше о webhook, и как их использовать для подключения вашего приложения Python к внешним сервисам, таким как уведомления в телефоне или сообщения Telegram.

С относительно коротким кодом (около 50 строк), вы запустите рабочий сервис уведомлений о цене на биткоин, который легко можно расширить для других криптовалют и возможностей.

Приступим!

Уведомления о цене на биткоин при помощи Python

Как мы знаем, курс биткоина – вещь непостоянная. Нельзя с уверенностью сказать, какой курс будет к концу дня. Так что вместо того, чтобы постоянно мониторить различные ресурсы, чтобы узнать последние обновления, мы создадим приложение Python, которое будет выполнять всю работу за вас!

Для этого мы используем популярный сайт автоматизации IFTTT. IFTTT (с анг. if this, then that. Букв. Перевод – если это, значит то) – это веб сервис, который соединяет разрыв между различными приложениями и устройствами.

Мы создадим два апплета IFTTT:

  • Один для срочных уведомлений, когда курс биткоина упадет ниже определенной отметки;
  • Второй для регулярных уведомлений в Telegram о курсе биткоина.

Оба апплета будут инициированы нашим приложением Python, которое будет использовать данные из Coinmarketcap.

Апплет IFTTT состоит из двух частей: триггер и действие.

В нашем случае, триггером будет сервис webhook (далее – вебхук), предоставляемый IFTTT. Вы можете расценивать webhook как «пользовательские обратные вызовы HTTP», с которыми вы можете поближе ознакомиться в интернете.

Наше приложение Python будет создавать HTTP запрос для URL вебхука, который вызовет действие. Сейчас веселая часть – этим действием может быть практически все, что придет в голову. IFTTT предоставляет множество действий, таких как отправка email, обновление таблиц Google, даже звонок на ваш телефон.

Настройка проекта

Начнем с настройки виртуальной среды. Запустите эту команду, чтобы получить новую виртуальную среду Python 3:

Перед тем, как продолжить, вам нужно активировать виртуальную среду и установить необходимые зависимости:

Вы можете деактивировать виртуальное пространство, запустив команду оболочки deactivate.

Получаем цену на биткоин

Теперь немного грязной работы. Мы можем начать с получения последней цены на биткоин из интерфейса Coinmarketcap в консоли Python:

Для начала, нам нужно импортировать модуль requests и определить переменную bitcoin_api_url, которая содержит URL интерфейса Coinmarketcap для биткоина.

Далее, мы отсылаем запрос HTTP GET по ссылке, используя функцию requests.get() и сохраняем ответ. Так как интерфейс (API) выдает ответ в формате json, мы можем конвертировать его в объект Python, вызвав функцию .json() в ответе. Как вы видите, интерфейс выдал список с одним элементом, содержащим данные о курсе биткоина:

Результат:

Вещь, которая нас интересует больше всего – это ‘price_usd‘ — цена на биткоин в долларах США.

Отправка тестового уведомления IFTTT

Теперь мы можем перейти к части IFTTT. Чтобы использовать IFTTT, вам, в первую очередь, нужно завести новый аккаунт и установить их мобильное приложение (если вы хотите получать уведомления от вашего приложения Python именно на телефон). После того, как вы сделаете это, мы перейдем к созданию нового апплета IFTTT для тестовых нужд.

Для создания нового тестового апплета, нужно выполнить следующее:

  1. нажать на большую кнопку “this”;
  2. найти сервис “webhooks” и выбрать триггер “Receive a web request”;
  3. назовем событие test_event;
  4. теперь жмем на большую кнопку “that”;
  5. ищем сервис уведомлений “notifications” и выбираем “Send a notification from the IFTTT app” (отправить уведомление с приложения IFTTT);
  6. Меняем сообщение на «I just triggered my first IFTTT action!» ( с анг. я только что тригернул мое первое действие в IFTTT!) и жмем на “Create action”;
  7. Нажимаем на кнопку “Finish”. Это все.

Рекомендуем ознакомиться с документацией об использовании вебхуков IFTTT. Документация содержит URL вебхука, который выглядит вот так:

Далее, нам нужно заменить часть {event} любым названием, которое вы дали в третьем шаге, создавая апплет. Часть {your-IFTTT-key} уже заполнена вашим ключом IFTTT.

Теперь копируем URL вебхука и запускаем еще одну консоль Python. Мы снова импортируем модуль requests и определяем переменную URL вебхука. Теперь нам остается только запрос HTTP POST URL-у вебхука IFTTT используя функцию requests.post():

После запуска последней строки, вы должны увидеть уведомление в вашем телефоне:

Создание апплетов IFTTT

Теперь мы наконец готовы к тому, чтобы приступить к главной части. Перед тем как перейти к коду, нам нужно создать два новых апплета IFTTT: один для срочных уведомлений о курсе биткоина, второй – для регулярных обновлений.

Апплет для срочных уведомлений о курсе биткоина:

  1. Выбираем сервис “webhooks”, после этого выбираем триггер “Receive a web request” (получить веб запрос);
  2. Называем событие bitcoin_price_emergency
  3. Для действия выбираем сервис “Notifications” и выбираем действие “Send a rich notification from the IFTTT app” (прислать подробное уведомление от приложение IFTTT);
  4. Выбираем заголовок, например «Курс биткоина, срочно!»
  5. Прописываем сообщение, например: «Курс биткоина в долларах США {{Value1}} Покупайте или продавайте сейчас!» (мы вернемся к {{Value1}} попозже);
  6. На свой вкус вы можете добавить линк URL-а страницы биткоина Coinmarketcap.
  7. Создаем действие и заканчиваем настройку апплета.

Апплет для регулярных уведомлений:

  1. Снова выбираем сервис “webhooks” и выбираем триггер “Receive a web request”;
  2. Называем событие bitcoin_price_update;
  3. Для действия выбираем сервис “Telegram” и выбираем действие “Send message”;
  4. Прописываем текст сообщение, например: «Актуальная цена на биткоин: {{Value1}}»
  5. Создаем действие и заканчиваем с апплетом.

Обратите внимание: При создании апплета вам нужно провести авторизацию бота IFTTT в Telegram.

Собираем все это вместе

Теперь, когда у нас есть IFTTT, приступим к написанию кода! Вам нужно будет начать с создания стандартного командного скелета приложения Python, показанного ниже. Используйте этот код и сохраните файл под названием bitcoin_notifications.py:

Далее, нам нужно перенести две предыдущие сессии консоли Python в две функции, которые будут выдавать последние данные о курсе биткоина и постить в вебхук IFTTT соответственно. Добавьте следующие функции над основными функциями:

get_latest_bitcoin_price, в целом, выполняется таким же образом, за одним исключением: часть где нам нужно конвертировать цену из строки в число с плавающей запятой. post_ifttt_webhook принимает два параметра: событие и значение.

Параметр event соответствует любому названию, которое мы дали нашему триггеру при настройке апплета IFTTT. Кстати, вебхуки IFTTT позволяют нам отправлять дополнительные данные вместе с запросом в качестве данных в формате JSON.

Поэтому нам нужен параметр value: При настройке наших апплетов мы оставили тег {{Value1}} в поле сообщения. Это тег был заменен на текст ‘value1‘ из данных JSON. Функция requests.post() позволяет нам отправлять дополнительные данные JSON, просто добавив ключевое слово json.

Теперь мы можем перейти к ядру нашего приложения в функции main. Она будет состоять из вечного цикла while True, поскольку мы хотим, чтобы наше приложение работало всегда. В цикле мы можем вызвать интерфейс Coinmarketcap для получения последних данных о курсе биткоина и записать актуальные дату и время.

На основании нынешнего курса, мы будем решать, нужно ли отправлять срочное уведомление. Для регулярных обновлений в Telegram мы добавим нынешний курс и дату в список bitcoin_history. После того, как содержимое списка достигнет определенного количества (к примеру, 5), мы отформатируем содержимое, отправим обновление в Telegram и сбросим историю для будущих обновлений.

Фух! Как видите, в этом приложении происходит много всякого. Если вы испытываете сложности в понимании происходящего, сделайте небольшой перерыв и перечитайте предыдущий раздел еще раз, внимательно. Это не самая простая затея, так что уделите время и не переживайте из-за того, что с первого раза все выйдет не совсем гладко.

Важный момент: старайтесь не рассылать запросы слишком часто. На это есть две причины:

  • В Coinmarketcap утверждают, что они обновляют свои данные каждые 5 минут, так что нет смысла в обновлении данных о курсе на биткоин чаще этого интервала;
  • Если ваше приложение отправляет слишком много запросов Coinmarketcap, ваш IP могут отправить в бан, или временно заблокировать.

По этой причине нам нужно «пойти отдохнуть» (остановить выполнение цикла) как минимум на 5 минут, перед получением новых данных. Написанный ниже код выполняет все необходимые функции, которые только что были упомянуты:

Мы почти закончили! Единственное, чего не хватает – это функции format_bitcoin_history. Она принимает bitcoin_history в качестве аргумента и форматирует его, используя несколько базовых HTML тегов, принимаемых в Telegram, таких как , ,  и т.д. Скопируйте эту функцию над главной функцией:

Результат в вашем телефоне должен выглядеть следующим образом:

Чтобы запустить ваше приложение для уведомлений о курсе биткоина, выполните следующее в терминале вашей командной строки:

Ву а ля! Вложившись в 50 строк кода Python, вы создали собственное приложение для уведомлений о курсе биткоина. Поздравляем! Ниже будет изложен целый код, чтобы вы могли сравнить его со своим:

Закрепляем и идем дальше

В данной статье мы создали собственное приложение, которое мониторит и уведомляет о курсе биткоина. Вы узнали, как рассылать запросы HTTP GET и POST при помощи пакета requests. Вы увидели, как легко подключить ваше приложение Python к внешним сервисам при помощи вебхуков и IFTTT.

Что же теперь? С Python и IFTTT – море по колено. Однако, существует несколько интересных предложений, которые помогут вам начать:

  • Любите таблицы? Используйте действие IFTTT, которое будет добавлять цены на биткоин в таблицы Google;
  • Вы можете улучшить условие if price < BITCOIN_PRICE_THRESHOLD для получения уведомлений только раз в день (в противном случае, это будет раздражать, если биткоин будет постоянно на низкой позиции);
  • Предпочитаете Ethereum/Litecoin/Dogecoin? Поменяйте get_latest_bitcoin_price на get_latest_cryptocurrency_price, которая выберет любую криптовалюту в качестве параметра и выдаст её курс;
  • Хотите видеть курс в другой валюте? Проверьте Coinmarketcap параметр конвертации Coinmarketcap;

Желаем удачи в работе с Python! Дайте знать, что за приложение вы лично построили при помощи Python и IFTTT в коментарях!

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: vasile.buldumac@ati.utm.md

Образование Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

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

Позже покупка и продажа ценных бумаг переместилась в интернет, и этот процесс стал гораздо эффективнее — в самых разных аспектах. В частности, повсеместное развитие получили торговые программные интерфейсы или API.

Что такое API?

API — это прикладной программный интерфейс, то есть программа, позволяющая приложениям взаимодействовать между собой. Можно представить, что API — это мессенджер, который принимает запрос и сообщает о нем системе, а затем возвращает вам ответ.

Представьте, что вы бронируете билет на самолет на каком-нибудь сервисе, позволяющем сравнивать цены разных авиакомпаний, например, Expedia. Как только вы вводите города отправления и назначения, дату перелета и число пассажиров, сервис просматривает все доступные базы данных авиакомпаний и предлагает подходящие варианты — это делается с помощью API, предоставляемых авиакомпаниями.

То же самое происходит на сайтах сравнения цен на отели. В этом случае платформа запрашивает и предоставляет информацию о стоимости номеров из всех доступных баз данных отелей через их API.

API для трейдеров

Торговый API, как следует из названия, позволяет взаимодействовать с торговой системой, или, точнее, выполнять сделки непосредственно на криптовалютной бирже. Это особенно полезно трейдерам, использующим в своих торговых системах алгоритмические модели — им необходимы цены, обновляемые в реальном времени, а также возможность выполнять сделки (вручную или автоматически) как только их модель выдает соответствующий сигнал.

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

Большинство ведущих криптовалютных бирж, в том числе Bitfinex, Bittrex и Coinbase Pro, предлагают своим клиентам API для трейдинга, позволяющие поддерживать прямые тарифные фиды, а также осуществлять прямую торговлю.

История с Binance

Недавно произошел инцидент с недобросовестным использованием API биржи Binance, вызвавший резкий взлет объемов торгов токеном Syscoin, а также его цены.

Binance заявила, что предприняла ряд действий для защиты пользователей. В первую очередь были отменены результаты необычных сделок и удаление всех существующих API-ключей, что сопровождалось просьбой создать ключи заново. Кроме того, Binance предупредила пользователей API о необходимости задуматься о защите своих ключей и попросила пользоваться белым списком, чтобы ключи были доступны только авторизованным пользователям.

Кроме того, компания опубликовала результаты расследования инцидента.

API и криптовалютный трейдинг

История с API Binance, конечно, на некоторое время выставила такого рода интерфейсы в дурном свете, но они уже стали неотъемлемой частью арсенала профессиональных криптовалютных трейдеров, а их появление свидетельствует об эволюции экосистемы.

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

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

Полезные практические материалы по криптотредингу

Мониторинги предназначены только для одного блокчейна. Например, в обозревателе сети Bitcoin не удастся узнать данные о сети Ethereum и т.д.

Список обозревателей для криптовалют

Рассмотрим обозреватели блоков топовых криптовалют:

Криптовалюта Обозреватели
Bitcoin https://blockchain.com/
Ethereum и токенов ERC-20 etherscan.io/
Ripple xrpcharts.ripple.com/#/graph/
Litecoin hexplorer.litecoin.net/chain/Litecoin
Bitcoin Cash blockdozer.com/
EOS bloks.io/
Binance Coin etherscan.io/token/0xB8c77482e45F1F44dE1745F52C74426C631bDD52
Stellar dashboard.stellar.org/
Cardano cardanoexplorer.com/
Tether www.omniexplorer.info/asset/31
Tron tronscan.org/#/
Monero moneroblocks.info/
DASH explorer.dash.org/
IOTA iotasear.ch/
NEO neotracker.io/
Ontology explorer.ont.io/
Maker etherscan.io/token/Maker
Tezos tzscan.io/
NEM nembex.nem.ninja/
Ethereum Classic gastracker.io/
Zcash explorer.zcha.in/
Dogecoin dogechain.info/chain/Dogecoin
Waves wavesexplorer.com/

Блокчейн обозреватели, которые предоставляют информацию о нескольких криптовалютах одновременно (агрегаторы):

  1. blockchair.com/ru/. Проводник блоков криптовалют: Bitcoin, Ethereum, Bitcoin Cash, Litecoin, Bitcoin SV, Dash и Dogecoin. Поиск по идентификатору транзакции, адресу, блоку и даже по текстовому комментарию.
  2. tokenview.com/ru/. Сайт предоставляет информацию о криптовалютах: Bitcoin, Ethereum, Litecoin, Bitcoin cash, Tether, TRON, Bitcoin SV, Monero, Dash, Neo, Ontology, Ethereum Classic, Zcash, Dogecoin, Bitcoin Gold, IOST, Ravencoin, DigiByte, Verge, GRIN и т.д.
  3. blockchain.com. Самый известный блокчейн-мониторинг: Bitcoin, Ethereum, Bitcoin Cash. Также, можно открыть онлайн-кошелёк указанных криптовалют. Доступна большое количество информации: хэшрейт, сложность, комиссия, стоимость, количество неподтвержденных транзакций, последние блоки и другие характеристики блокчейна.
  4. blockexplorer.com. Обозреватель блокчейна: BTC, ZCASH, Bitcoin Cash.

Обозреватель блокчейн Биткоина

Рассмотрим популярный обозреватель блоков — blockchain.com. Сайт имеет русскоязычный интерфейс и понятную структуру. Узнать информацию можно не только о криптовалюте Биткоин, но и Эфириум и одного из форков — Биткоин кэш.

Перейдите в обозреватель можно через раздел “Данные проводник” или нажать на окошко поиска:

Указываем информацию которую нужно узнать:

  1. Aдрес Биткоина.
  2. Txid транзакции.
  3. Высота (номер) блока.

Например, получим сведения об Bitcoin адресе1PfGzi59sW7eDtHuRBKaFV7QyuRkdY3pA2:

Копируем и вставляем его в окно поиска, выбираем криптовалюту Bitcoin и нажимаем “Поиск”.

Появится страница с полной информацией:

  • Текущий баланс.
  • Число транзакций, Txid и суммы.
  • Адрес отправителя или получателя транзакции.

Информация об транзакции

При переводе криптовалюты с кошельков, криптобирж, при обмене между людьми и в других случаях предоставляется TXID (TxHash). Это и есть идентификатор транзакции, по которому можно отследить был ли совершен перевод, подтверждена или нет операция, узнать адрес отправителя и точную сумму перевода. Это очень важная информация и необходимо знать, где посмотреть статус Биткоин транзакции.

Указываем TXID в окне обозревателя:

Появится информация: время включения в блок и поступления в очередь; размер в байтах; номер блока, в который включена транзакция; количество подтверждений; количество входов и выходов; комиссия; адреса получателя и отправителя.

На примере ниже, транзакция имеет одно подтверждение (нужно как минимум 6):

Информация о блоках

Для просмотра сведений о блоке, нужно указать в блокчейн-обозревателе его высоту (номер).

Доступны данные: хэш блока; хэши предыдущего и следующего блоков; время включения в блокчейн; сложность; общее количество транзакций; размер; комиссия; награда майнерам; объём; пул и другие параметры.

Другие мониторинги сети Bitcoin

  1. localbitcoinschain.com — обозреватель блоков в сети Биткоин от биржи LocalBitcoins. Поддерживаются Segwit и Bech32 адреса.
  2. live.blockcypher.com. Принцип получения данных не отличается от других ресурсов: вводим адрес, идентификатор транзакции, блок и получаем показатели блокчейн-сети. Например:

Обозреватели блокчейн Ethereum и токенов ERC-20

Для получения показателей сети Эфириум и токенов, использующих его платформу, предлагаются ресурсы:

  1. etherscan.io.
  2. ethplorer.io.

Рассмотрим первый вариант. Указываем в строке поиска: адрес, ID транзакции (Thash), блок, название (тикен) токена, Ethereum Name Service (ENS)

Например, адрес 0xf3F7236A40Ba62be795a3A5a6b8589A64870e167:

Можно узнать: баланс, транзакции и их Txhash, высоту блока и т.д.

Информация о токене, например, BNB (Binance Coin):

Заключение

Блокчейн обозреватели — нужный инструмент для анализа сети любой криптовалюты. Наибольшее число таких ресурсов создано для Bitcoin, ввиду его популярности. Разобраться в принципе работы мониторингов необходимо каждому владельцу криптовалют.

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

1) Coinbase

Coinbase является криптовалютной биржей с очень мощным API, который имеет 6 основных функций:  Wallet API, Coinbase Connect или Oauth2, Wallet Notifications, Merchant Checkouts, Coinbase Exchange API и Toshi.

Веб-сайт: https://developers.coinbase.com/

2) Bitpay

API Bitay больше всего подходит разработчикам, которым необходимо создать интернет-магазин и использовать готовую систему оформления заказа для приёма Bitcoin.

Веб-сайт: https://bitpay.com/api

3) Block.io

Этот сервис предлагает API для работы с кошельками Bitcoin, Litecoin и Dogecoin. Позволяет получать уведомления в реальном времени и создавать адреса для пересылки в любой пункт назначения по вашему выбору.

Веб-сайт: https://block.io/docs

4) Kraken

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

Веб-сайт: https://www.kraken.com/help/api#general-usage

5) CryptoAPIs

CryptoAPIs разработан на протоколах REST и JSON API для взаимодействия с блокчейнами. Этот API позволяет создавать децентрализованный распределенный рынок хранения данных в облаке.

Веб-сайт: https://cryptoapis.io/

6) Global Bitcoin Price Index (GBX API)

GBX API построен по BitcoinAverage.com, одном из первых индексов цен в криптовалютной и блокчейн-индустрии. Этот API не имеет интеграции с кошельками и поддержки транзакций. Использование бесплатно до 5000 ежемесячный запрос.

Тем не менее, есть некоторые платные функции, включающие в себя 1-секундные обновления курсов для более чем 165 валют. Есть также доступ к историческим данным начиная с 2010 года. Кроме того, API поддерживает форматы JSON и CSV.

Веб-сайт: https://bitcoinaverage.com/en/bitcoin-price/btc-to-usd

7) CoinMarketCap

Это популярный сервис для отслеживания текущей рыночной капитализации, цены за единицу, недавнего объема, циркулирующего предложения и ежедневных колебаний более чем для 1600 различных криптовалют. API предлагает простое и надежное подключение, не имеет интеграции с кошельками и не поддерживает транзакции.

Веб-сайт: https://coinmarketcap.com/

8) CoinCap

API CoinCap предлагает данные по ценообразованию и рыночной активности в режиме реального времени для более чем 1000 криптовалют. Он собирает информацию с множества бирж для получения прозрачных и точных данных о цене и доступности активов. Составляет прямую конкуренцию для Coinmarketcap.

Веб-сайт: https://coincap.io/

9) Bitcointy

Bitcointy API предоставляет среднее значение цены биткоина, основанной на данных из нескольких источников. API также поддерживает такие фиатные валюты как EUR, GBP, CAD, JPY и CNY. Кроме того, API является бесплатным с неограниченным количеством запросов. Некоторые из дополнительных функций API — это четкое обновление данных, прямая конвертация определенного количества биткоинов в любую валюту и возможность получения курсов конвертации для всех источников или из одного источника.

Веб-сайт: https://bitcoinity.org/markets

Криптоинвестор. Аналитик блокчейн- проектов.

Bithumb DEX обманывает пользов..

SFC опубликовала правила регул..

Оцените статью
Рейтинг автора
4,8
Материал подготовил
Егор Новиков
Наш эксперт
Написано статей
127
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий