Библиотека для работы с BitShares: BTSDEX.js v.0.2.0
Что это и зачем?!
Хочу представить вам свою библиотеку для работы с блокчейном BitShares написанная на JavaScript. На самом деле можно сказать, что это некая обертка над официальным bitshares.js (bitshares.js присутствует в зависимостях).
Почему же я решил написать что-то поверх bitshares.js? Он не так юзабелен для моих проектов, как мне бы хотелось. Решая свои приватные задачи, спустя какое-то время пришло понимание, что код разрастается и не очень удобен. Решил для унификации нескольких повторяющихся частей в разных проектах свести все в один пакет. А по мере написания этого пакета и появилось желание сделать ее более универсальным и удобным. Так и появился BTSDEX.
Реализация
Основной класс в пакете - BitShares. Все что нужно находится в нем. Есть еще парочка вспомогательных классов, но они не очень предназначены для использования во вне класса BitShares. Возможно на каком-то этапе это изменится.
Класс BitShares состоит из статических методов предназначенных для работы с публичным API блокчейна BitShares. Используя класс BitShares можно создать объект, методы которого предоставляют доступ к приватной части API блокчейна BitShares.
Пакет распространяется под MIT лицензией. Ссылка на github!
Для установки пакета:
$ npm install btsdex
Использование в своем проекте:
const BitShares = require("btsdex");
Немного примеров
Чтобы подключиться к сети BitShares необходимо проинициализировать и подключиться:
BitShares.init("wss://bitshares.openledger.info/ws")
await BitShares.connect();
Публичный API
После соединения, можно воспользоваться любым публичным методом из официальной документации (если метод еще актуален!).
Database API
Для доступа к Database API можно воспользоваться объектом BitShares.db.
Пример методов из Database API:
get_objects(const vector<object_id_type> &ids) const
list_assets(const string &lower_bound_symbol, uint32_t limit) const
Чтобы ими воспользоваться:
let obj = await BitShares.db.get_objects(["1.3.0"])
let bts = await BitShares.db.list_assets("BTS",100)
History API
Для доступа к Account History API, можно воспользоваться объектом BitShares.history.
Пример метода из Account History API:
get_account_history(account_id_type account, operation_history_id_type stop = operation_history_id_type (), unsigned limit = 100, operation_history_id_type start = operation_history_id_type ()) const
Чтобы им воспользоваться:
let ops = await BitShares.history.get_account_history("1.2.849826","1.11.0",10,"1.11.0")
Приватный API
Если вы хотите иметь доступ к операциям аккаунта, то необходимо создать объект класса BitShares:
let bot = new BitShares("accountName","privateActiveKey")
Пока данный объект может не много: покупать, продавать, отправлять, отменять ордера.
Сигнатуры методов:
bot.buy(buySymbol, baseSymbol, amount, price, fill_or_kill = false, expire = "2020-02-02T02:02:02")
bot.sell(sellSymbol, baseSymbol, amount, price, fill_or_kill = false, expire = "2020-02-02T02:02:02")
bot.cancelOrder(id)
bot.transfer(toName, assetSymbol, amount, memo)
Примеры использования:
await bot.buy("OPEN.BTC","BTS", 0.002, 140000)
await bot.sell("BTS", "USD", 187, 0.24)
await bot.transfer("scientistnik", "BTS", 10)
Если хотите произвести отправку токенов с memo, то перед этим необходимо установить приватный memo-ключ:
bot.setMemoKey("privateMemoKey")
await bot.transfer("scientistnik", "USD", 10, "Thank you for BTSDEX!")
Вспомогательные классы
Есть еще парочку вспомогательных классов, таких как BitShares.assets и BitShares.accounts:
let usd = await BitShares.assets.usd;
let btc = await BitShares.assets["OPEN.BTS"];
let bts = await BitShares.assets["bts"];
let iam = await BitShares.accounts.scientistnik;
let tradebot = await BitShares.accounts["trade-bot"];
Возвращаемые объекты содержат все поля, которые возвращает блокчейн при запросе данного имени актива или аккаунта.
Что дальше
В текущей версии лично мне не хватает удобного механизма запроса стоимости различных транзакций и подписки на различные изменения в блокчейне. В официальном bitshares.js есть реализация этого, но она не очень удобна как по мне. Скорее всего буду использовать ее, но написав какую-то обертку поверх.
Если у Вас есть еще какие-то пожелания или предложения, можете написать! Всегда открыт для диалога!
Спасибо за внимание и до скорых встреч!