Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
scientistnik
6 лет назад

BTSDEX v0.3.1

BTSDEX.png

Вот и вышла новая версия

Рад сообщить Вам, что спустя две недели вышла новая версия 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.

Всем удачи и до новых встреч!

3
1.930 GOLOS
На Golos с July 2017
Комментарии (1)
Сортировать по:
Сначала старые