BTSDEX v0.3.1
Вот и вышла новая версия
Рад сообщить Вам, что спустя две недели вышла новая версия js-пакета BTSDEX. Она вобрала в себя ряд изменений, которые я опишу далее. Если вы еще не в курсе что это за BTSDEX, то советую почитать первый пост или заглянуть в документацию.
Что нового
Комиссии транзакций
Расчет затрат очень важен. Чтобы это было сделать легко, добавил вспомогательный класс BitShares.fees
:
const BitShares = require("btsdex");
BitShares.init("wss://bitshares.openledger.info/ws");
start();
async function start() {
await BitShares.connect();
let fees = BitShares.fees;
console.log(fees); // Fees { transfer: 0.1042, limit_order_create: 0.00578, ...}
console.log(fees.account_update); // 0.00578
}
Комиссии доступны после установления соединения.
Т.к. комиссии могут меняться, в объекте класса Fees есть метод update()
. Это может понадобиться, если ваше ПО должно работать достаточно долго.
BitShares.fees.update();
console.log(BitShares.fees); // Fees с обновленными значениями
Система событий
Очень часто приходится ожидать, когда случится какое-то действие в блокчейне, на которое наше ПО должно реагировать. Идея считывать каждый блок и просматривать все операции в нем, мне показалось неэффективной. Поэтому в этом обновлении добавилось система событий.
Типы событий
На данный момент в BTSDEX введены три типа событий:
connected
- срабатывает единожды, сразу после подключения к блокчейну;block
- срабатывает, когда в блокчейне создается новый блок;account
- срабатывает, когда происходят изменения с заданным аккаунтом (изменение баланса).
К примеру:
const BitShares = require("btsdex");
BitShares.init("wss://bitshares.openledger.info/ws");
BitShares.subscribe('connected', startAfterConnected);
BitShares.subscribe('block', callEachBlock);
BitShares.subscribe('account', changeAccount, 'trade-bot');
async function startAfterConnected() {/* вызовется единожды после подключения к блокчейну */}
async function callEachBlock(obj) {/* вызывается при каждом созданном блоке */}
async function changeAccount(array) {/* вызывается при изменении в аккаунте 'trade-bot' */}
Событие connected
Данное событие срабатывает единожды, после подключения к блокчейну. Подписаться на это событие может произвольное количество функций и все они будут вызваны после подключения.
BitShares.subscribe('connected', firstFunction);
BitShares.subscribe('connected', secondFunction);
Еще одна особенность события заключается в том, что при первом подписании происходит вызов метода BitShares.connect()
, т.е. первая подписка на событие вызовет подключение. Если к этому времени подключение к блокчейну уже было совершено, то произойдет просто вызов функции.
Теперь не обязательно явно вызывать BitShares.connect()
, достаточно подписаться на событие connected
.
const BitShares = require("btsdex");
BitShares.init("wss://bitshares.openledger.info/ws");
BitShares.subscribe('connected', start);
async function start() {
// тут что-то происходит
}
Событие block
Событие block
срабатывает когда в блокчейне создается новый блок. Первая подписка на событие, автоматически создает подписку на событие connected
, и если это первая подписка на это событие то оно вызовет подключение к блокчейну.
const BitShares = require("btsdex");
BitShares.init("wss://bitshares.openledger.info/ws");
BitShares.subscribe('block', newBlock);
// необходимо подождать ~10-15 секунд
async function newBlock(obj) {
console.log(obj); // [{ id: '2.1.0', head_block_number: 17171083, time: ... }]
}
Как видно из примера, во все подписавшиеся функции передается объект с полями блока.
Событие account
Событие account
срабатывает, когда происходит определенные изменения (изменения баланса). К ним относятся:
- Аккаунт послал кому-то один из своих активов
- Аккаунту прислали какой-то актив
- Аккаунт создал ордер
- Ордер аккаунта выполнился (частично или полностью), или был отменен.
Первый подписавшийся на account
, вызовет подписку на block
, что в конечном итоге вызовет подключение к блокчейну.
Пример кода:
const BitShares = require("btsdex");
BitShares.init("wss://bitshares.openledger.info/ws");
BitShares.subscribe('account', changeAccount, 'trade-bot');
async function changeAccount(array) {
console.log(array); // [{ id: '1.11.37843675', block_num: 17171423, op: ... }, {...}]
}
Во все подписавшиеся функции передается массив объектов истории аккаунта, которые произошли с момента последнего события.
Документация
Я понимаю, что весьма сложно с ходу все это понять и использовать. Поэтому решил начать собирать всю информацию в одном месте. Постараюсь наполнить ее большими и подробными примерами. С другой стороны я ожидаю вопросы, предложения и помощь в написании кода на github.
Всем удачи и до новых встреч!