Торговый робот для Bitshares. Часть 1 - знакомство с API.
Доброго времени суток. Это первый пост из серии. В итоге планируется серия постов посвященная написанию собственного торгового бота для биржи Bitshares. Алгоритм для бота раскрывать пока не планируем, но результаты работы и технический нюансы реализации обязательно. Думаем кому-нибудь будет полезно для реализации собственной идеи. Итак приступим.
Общее
В отличии от многих существующих централизованных систем, где API предоставляет методы для авторизации/регистрации, доступа к данным в Bitshares как P2P сети для доступа к данным цепочки нужна полная нода (full node/witness node). Развернуть ноду можно по доке http://docs.bitshares.org/bitshares/tutorials/full-node-usage.html. Развернуть можно локально для пробы пера. Потом на собственном сервере. API делится на две части: публичная (доступ к историческим данным) и приватная (позволяет дописывать данные в цепочку и смотреть приватные данные). Для доступа к публичной части нужная только развернутая полная нода. Для доступа к приватной части API помимо ноды нужен кошелек (cli_wallet) http://docs.bitshares.org/bitshares/tutorials/cli-wallet-usage.html.
Схема работы API:
Несколько кошельков могут смотреть на одну ноду. С точкой доступа к данным в цепочке мы разобрались, дальше вопросы которые у нас сразу появились.
Авторизация/Регистрация
Через кошелек.
Как получить список assets с сортировкой по объему?
Можно воспользоваться публичной частью API, если она предоставляет методы удовлетворяющие ваши потребности в данных. Если такого метода нет то просто нужно написать свой, т.к. все данные в цепочке хранятся в итоге в виде объектов http://docs.bitshares.org/development/blockchain/objects.html. У каждого объекта есть категория. У каждой категории есть уникальный id, в рамках одной категории всем объектам присвоен уникальный id. Например категория assets имеет id = 1.3.X и в нее входит BTS с id = 1.3.0 и CNY с id = 1.3.113. Запросим через Database API информацию по asset BTS для наглядности. http://docs.bitshares.org/api/database.html
Request:
{"id":1,"method":"call","params":[0,"get_assets",[["1.3.0"]]]}
Response:
{
"id": 1,
"jsonrpc": "2.0",
"result": [
{
"id": "1.3.0",
"symbol": "BTS",
"precision": 5,
"issuer": "1.2.3",
"options": {
"max_supply": "360057050210207",
"market_fee_percent": 0,
"max_market_fee": "1000000000000000",
"issuer_permissions": 0,
"flags": 0,
"core_exchange_rate": {
"base": {
"amount": 1,
"asset_id": "1.3.0"
},
"quote": {
"amount": 1,
"asset_id": "1.3.0"
}
},
"whitelist_authorities": [],
"blacklist_authorities": [],
"whitelist_markets": [],
"blacklist_markets": [],
"description": "",
"extensions": []
},
"dynamic_asset_data_id": "2.3.0"
}
]
}
Теперь объемы:
1.3.0 - BTS
1.3.121 - USD
Request:
{"id":1,"method":"get_24_volume","params":["1.3.0","1.3.121"]}
Response:
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"base": "1.3.0",
"quote": "1.3.121",
"base_volume": "717573.44807000108994544",
"quote_volume": "118442.56580000052053947"
}
}
https://www.reddit.com/r/altcoin/comments/57spwg/on_poloniex_whats_the_difference_between/
Полезные ссылки: