Кошелек golos_wallet для Bittrex на платформе CyberWay


Примечание: предлагаем делегатам @vik, @arcange, @ropox, @primus, @on0tole, @anyx, @kuna, @xtar, @yudina-cat, @stihi-io, @kulturagolosa, @vvk, @denis-skripnik, @testz, @steepshot, @semasping, @dmilash, @xanoxt и всем пользователям, заинтересованным в поддержке Голоса, поделиться своими предложениями относительно кошелька в комментариях к данному посту.

Аннотация

Настоящее описание кошелька golos_wallet предназначено для разработчиков платформы CyberWay, приложений платформы CyberWay, а также пользователей блокчейна Golos, заинтересованных в поддержке и сопровождении приложения Golos на платформе CyberWay.

1. Функциональные возможности cli_wallet блокчейна Голос

Приложение cli_wallet, используемое в блокчейне Голос, представляет собой программный продукт — кошелек, работающий в интерактивном консольном режиме.

Приложение cli_wallet можно вызвать в режиме демона, задав в командной строке опцию –rpc-endpoint. При запуске в таком режиме cli_wallet обрабатывает json-rpc запросы. Ответы cli_wallet формирует также в формате JSON.

2. Необходимость в разработке нового кошелька для платформы CyberWay

Основное направление биржи криптовалют Bittrex — покупка и продажа криптовалют. Биржа Bittrex хранит данные аккаунтов и их балансов в своей собственной базе пользователей. Для взаимодействия с различными блокчейнами Bittrex адаптирует свое программное обеспечение. В частности, Bittrex взаимодействует с блокчейнами, созданными на базе логики Steemit, через приложение cli_wallet. Для поддержки интерфейса с приложением cli_wallet биржа Bittrex использует специальную оболочку, собственной разработки.

Приложение cli_wallet является оберткой вокруг библиотек блокчейна Голос. Адаптирование данного приложения под блокчейн другой архитектуры (например, по CyberWay) не представляется возможным.

Кошелек cleos, являющийся кошельком блокчейна CyberWay, архитектурно реализован по другому. Данный кошелек должен быть универсальным для всех приложений блокчейна CyberWay и встраивание в него протокола (аналогичного cli_wallet) для отдельного приложения может вызвать проблемы в будущем . Поэтому адаптирование кошелька cleos, в силу архитектуры самого блокчейна CyberWay, под протокол cli_wallet также является технически сложным решением.

Поэтому разработчиками CyberWay было принято решение о создании нового кошелька, аналогичного cli_wallet, но адаптированного к архитектуре CyberWay. Данный кошелек должен обеспечить взаимодействие Bittrex с приложением Голос на блокчейне CyberWay.

3. Требования к новому кошельку для платформы CyberWay

Новый кошелек (далее — golos_wallet), обеспечивающий взаимодействие биржи Bittrex с приложением Голос на платформе CyberWay, должен удовлетворять следующим требованиям:
— интерфейс кошелька golos_wallet с Bittrex должен соответствовать интерфейсу cli_wallet с Bittrex;

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

В первой версии блокчейна CyberWay приложение golos_wallet должно поддерживать перечень операций, приведенных в разделе 6 (поддержка остальных операций в первой версии CyberWay не предусмотрена).

4. Описание технического решения

Кошелек golos_wallet реализован в виде приложения, содержащего набор скриптов на nodejs. Логика приложения представляет собой эмуляцию кошелька cli_wallet. Также как и в cli_wallet запросы от Bittrex в формате JSON поступают на rpc-порт (англ. remote procedure call). Запрос содержит необходимый массив параметров для выполнения конкретной операции. Операции выполняются так, как если бы их выполнение было в консоли.
Кошелек cli_wallet можно использовать через отправление API-запроса на rpc-порт. Выполнение происходит в автоматизированном режиме.
Для хранения информации о транзакциях с трансферными операциями база данных Mongo дополнена таблицей истории транзакций.

Структурная схема взаимодействия Bittrex с приложениями cli_wallet и golos_wallet, а также взаимодействие golos_wallet с компонентами узлов блокчейна приведена на рис. 1.


Рис. 1 — Структурная схема взаимодействия Bittrex с кошельками cli_wallet и golos_wallet

В верхней части схемы (выделено красной пунктирной линией) показано взаимодействие cli_wallet с Bittrex и с демоном блокчейна Голоса (Golosd). Нижняя часть схемы представляет техническое решение реализации кошелька golos_wallet на блокчейне CyberWay. Выделенные части схемы в красном — новые компоненты CyberWay, реализующие кошелек.

Приложение golos_wallet принимает запрос и формирует транзакцию с трансферами. Сформированная транзакция передается на один из сервисов nodeos, где она проверяется на валидность. В сервисе nodeos размещается событийная модель (от англ. event engine), которая генерирует события. На его вход из сети поступают блоки и транзакции. Выполняется анализ их содержимого (от англ. parsing), формируются события и мета-блок, куда помещается вся результирующая информация.

Приложение golos_wallet получает от компонента nodeos сформированный мета-блок через порт ЕЕ — представляющий собой плагин узла (ноды) CyberWay, который формирует пакеты в формате JSON и рассылает их своим подписчикам. Логика golos_wallet выделяет из получаемого мета-блока только данные о трансферах и сохраняет их в БД в таблице истории транзакций. (Следует заметить, что сформированная транзакция с трансферной операцией сохраняется в истории не сразу, а только после того, как она отправится в сеть и появится в одном из блоков, подписанным блок-продюсером. Последнее будет означать, что данная транзакция валидная может быть сохранена в истории). Для Bittrex важна информация о транзакциях с трансферными операциями, включенными в конкретные блоки и сохраненными в истории транзакций. Bittrex через кошелек периодически обращается в историю транзакций для получения информации о выполненных трансферах.

5. Описание операции transfer с использованием golos_wallet

Биржа Bittrex предоставляет возможность пользователю обменять токены одного блокчейна на токены другого блокчейна, а также совершить обмен токенов блокчейна на другую криптовалюту (например, на биткоины). Для выполнения трансферной операции пользователь заходит на веб-сайт Bittrex и создает операцию на перевод средств со своего кошелька на кошелек Bittrex, указав в транзакции свой ключ. Логика bittrex формирует запрос вида transfer с указанием имени аккаунта, количества переводимых средств. Запрос поступает на rpc-порт кошелька golos_wallet. В кошельке формируется транзакция с операцией transfer, именем аккаунта и его подписью. Сформированная транзакция отправляется в компонент nodeos, где выполняется базовая проверка данных, в том числе проверка на существование аккаунта и на совпадение подписи. Необходимую информацию для выполнения проверки компонент nodeos получает из БД состояния системы.

Как только в порт ЕЕ компонента nodeos отправится сформированный мета-блок, содержащий транзакцию с операцией transfer, приложение golos_wallet выделит из него информацию о транзакции, блоке, в котором она находится, и сохранит полученные данные таблице истории транзакций.

Для контроля всех трансферных операций биржа Bittrex через golos_wallet периодически обращается в БД (mongo) для получения истории транзакций. По указанному ключу в транзакции биржа Bittrex в своей базе пользователей определяет имя аккаунта, от которого поступили средства на баланс биржи.

6. Операции, поддерживаемые кошельком golos_wallet в первом релизе CyberWay

6.1. Операция info

Операция info используется для получения информации о блоке. Сигнатура операции имеет вид:

variant wallet_api::info()const 

Операция info не имеет входных параметров. Перечень получаемой информации:

virtual_supply — виртуальный запас;

current_supply — текущий запас;

verage_block_size — средний размер блока;

maximum_block_size — максимальный размер блока;

last_irreversible_block_num — последний необратимый номер блока;

hardfork_version — версия блокчейна;

head_block_num — актуальный номер блока;

head_block_id — идентификатор блока;

head_block_age — время жизни блока (в секундах).

6.2. Операция transfer

Операция transfer используется для перевода средств с кошелька одного аккаунта в кошелек другого. Сигнатура операции имеет вид:

annotated_signed_transaction wallet_api::transfer(
string from,
string to,
asset amount,
string memo,
bool broadcast
)

Параметры:

from — имя аккаунта, с кошелька которого будут переводиться средства;

to — имя аккаунта, в кошелек которого будут переводиться средства;

amount — сумма переводимых средств;

memo — запись в транзакции, зашифрованная публичным ключом «memo»;

broadcast — «true», если транзакция пересылается на демон.

6.3. Операция list_accounts

Операция list_accounts используется для получения списка всех аккаунтов, зарегистрированных в блокчейне. Сигнатура операции имеет вид:

vector< account_name_type > wallet_api::list_accounts(
const string& lowerbound,
uint32_t limit
)

Параметры:

lowerbound — имя первого возвращаемого аккаунта. Если такое имя отсутствует, список будет начинаться с имени, непосредственно следующего за lowerbound;

limit — значение, ограничивающее количество выводимых на монитор имен аккаунтов. Максимальное значение — 1000.

Задание параметров lowerbound и limit позволяет формировать страницу в удобном для просмотра виде. Для просмотра всего списка имен аккаунтов рекомендуется вначале значение lowerbound устанавливать в виде пустой строки (“”). Затем на каждой итерации параметру lowerbound передавать последнее возвращаемое имя аккаунта для следующего вызова list_accaunt().
Возвращает список всех зарегистрированных в блокчейне имен аккаунтов с соответствующими им идентификаторами. Список отсортирован по именам в алфавитном порядке.

6.4. Операция list_my_accounts

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

vector< golos::api::account_api_object > wallet_api::list_my_accounts() 

6.5. Операция import_key

Операция import_key используется для импорта личного ключа в формате WIF в кошелек для его дальнейшего использования аккаунтом при подписании транзакций. Сигнатура операции имеет вид:

bool import_key(string wif_key) 

Параметр:

wif_key — личный ключ в формате WIF.

Пример использования операции:

import_key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3

6.6. Операция get_account_history()

Операция get_account_history используется для получения истории транзакций для аккаунта. Сигнатура операции имеет вид:

map< uint32_t, golos::plugins::operation_history::applied_operation >
wallet_api::get_account_history(
string account,
uint32_t from,
uint32_t limit
)

Параметры:

account — имя аккаунта, история которого запрашивается;

from — порядковый номер операции. Параметр является произвольным, по умолчанию принимает значение «-1» — последний номер операции;

limit — максимальное количество запрашиваемых операций. Принимает целочисленное значение от 0 до 1000. Параметр является произвольным, по умолчанию принимает значение «100».

Пример вызова операции get_account_history:

get_account_history cyberfounder -1 100

6.7. Операция filter_account_history

Операция filter_account_history используется для получения истории транзакций для аккаунта, отфильтрованной по определенным признакам. Сигнатура операции имеет вид:

history_operations filter_account_history(
string account,
uint32_t from,
uint32_t limit,
account_history_query query
)

Параметры:

account — имя аккаунта, история которого запрашивается;

from — порядковый номер запрашиваемых операций. Параметр является произвольным, по умолчанию принимает значение «-1» — последний номер операции;

limit — максимальное количество запрашиваемых операций. Принимает целочисленное значение от 0 до 1000. Параметр является произвольным, по умолчанию принимает значение «100»;

query — параметр в виде структуры, содержащей признаки, по которым выполняется фильтрация. Содержит следующие поля:

select_ops — перечень операций, которые необходимо получить. Значение может содержать имена операций (в том числе оканчивающие на «_operation»), а также ключевые слова:

  • ALL — все операции;
  • REAL — только операции явно заданные;
  • VIRTUAL — только виртуальные операции;

    filter_ops — перечень операций, которые следует исключить. Принимает те же значения, что и select_ops. Это поле является произвольным и по умолчанию принимает значение пусто;

    direction — «направление» операции относительно аккаунта (например, операция vote определяет двух аккаунтов: того, кто голосует и того, за чей пост голосуют). Это поле является произвольным и принимает следующие значения:
  • any — отсутствие направления фильтрации (значение по умолчанию);
  • sender — характеризует аккаунта как отправителя (например, creator или voter);
  • receiver— характеризует аккаунта как получателя (например, created или voted);
  • dual — характеризует аккаунта как отправителя и получателя одновременно (например, voting self post или операция неоднозначно определяющая аккаунта).

Операция может быть вызвана с одним заданным параметром (например, filter_account_history(account)) для получения 100 последних операций аккаунта.

Примеры вызова filter_account_history():

filter_account_history cyberfounder -1 100 {"select_ops":["REAL","interest"], "filter_ops":["transfer"]}

filter_account_history cyberfounder -1 100 {"direction":"receiver","filter_ops":["producer_reward"]}

7. Заключение

Результаты прогона golos_wallet в тестовом режиме на операциях, изложенными в разделе 6, показали, что реализованное техническое решение обеспечивает функционирование golos_wallet в соответствии с требованиями раздела 3.

Каналы коммуникации с Golos•Core

  • https://t.me/goloscoretc (решение технических вопросов, связанных с работой блокчейн, нод, api и др.)
  • https://t.me/joinchat/BLwf_A118xQ57nsM1Q4MPA (канал для вноса предложений от комьюнити, обсуждение перехода на кодовую базу EOS)
  • https://t.me/golos_tools (решение вопросов по различным интерфейсам и дополнительным инструментам, создаваемым Golos•Core)
  • https://t.me/goloscore_analytics (решение вопросов по работе экономики блокчейн, статистическим экономическим данным, аналитике данных)
  • https://t.me/goloscoretech (новостной канал, с актуальной информацией от Golos•Core)

Мы будем очень рады, если вы поддержите делегата @goloscore. Заходите на страничку /~witnesses голосуйте за делегата Golos•Core!
Спасибо за внимание и хорошего дня!

С уважением,

Команда Golos•Core: @andreypf, @korpusenko, @maslenitsa, @muhazokotuha, @zxcat, @annaeq, @anazarov79, @kaynarov, @s-medvedev, @eugin, @dedbaraded, @jimak.


Comments 40


А какого сматрконтракта будут токены перегоняться? Системного или голоса? Хотя наверное и не важно. Сам то я rpc никогда не использовал.

Интересно, зачем битрексу

virtual_supply — виртуальный запас;
current_supply — текущий запас;

25.02.2019 11:10
0

Данный кошелек должен обеспечить взаимодействие Bittrex с приложением Голос на блокчейне CyberWay.

Так речь же вроде именно о токенах приложения Голос, т.е. план оставить "как есть" токен Golos на Bittrex с помощью эмуляцию кошелька cli_wallet для них.

25.02.2019 12:07
0

@lex не обязательно. Это просто способ облегчить работу айтишникам биржи. У них пока нету интерфейса к EOS подобным блокчейнам, а это способ повысить вероятность, что новый блокчейн будет принят.

25.02.2019 13:42
0

Они переодически опрашивают чейн и смотрят на его стату.
Это одни из полей, которые они проверяют.

28.02.2019 04:19
0

Скажите просто русским языком: я смогу обмениваться криптой прямо из платформы Голос, как на Стимите?

25.02.2019 11:19
0

@mikhailal, да. И даже Биттрекс не должен почувствовать разницу))

25.02.2019 13:32
0

@now вау!

25.02.2019 13:33
0

@mikhailal смысл в том, что для пользователей Голоса все должно остаться без видимых изменений. Просто в ближайшее время бюджет на разработку Голоса будет полностью освоен. И главари Голоса, явно осознав перспективу своего творения под собственным чутким руководством, решили на последние деньги сделать такую штуку, глядя на которую, разработчики, пораженные ее великолепием, забросят все денежные дела и перестанут клепать приложения для буржуинских блокчейнов, веб серверов, СКьюЭлей и прочих штук, а начнут строчить их на родном Киберэвее задаром. Естественно биржи, тоже не останутся равнодушными и начнут на халяву листить наше восьмое чудо света.

Хотя некоторые злые языки утверждают, что никто, кроме @eee, ну, и может быть еще парочки фантазеров, увлекающиеся блокчейнами в свободное от основной работы время, никто и ничего кодить не будет. А пользователи имеющие честь лицезреть деятельность КиберФонда, начиная с героического "спасения" Голоса товарищем @litvintech от тлетворного влияния Бизнесмолодости, путем похищения ключей от проданных аккаунтов; на радостях массово сольют свои токены на бирже при первом же удобном случае. Хотя, последнее под вопросом. Не факт, что Киберэвэю хватит денег для листинга на чем - нибудь вменяемом.

25.02.2019 13:54
0

@now критика- великое дело. Без критического мнения невозможен прогресс, поэтому беру ручку, записываю... :..

25.02.2019 13:57
0

@mikhailal это скорее сарказм, чем критика.

Если серьезно, то Киберфонд полностью признал, что сделать что - то из нынешнего Голоса они не в состоянии. Поэтому на последние деньги они решили форкнуть EOS в надежде, что их ставка ва-банк сыграет.

С таким же успехом они могли в казино "Сочи" все оставшиеся деньги поставить на какое нибудь число. Шанс тоже есть.

Покажи мне сейчас хоть одного человека, который бы при нормальной стоимости актива вкладывал в проекты управляемые КФ, вместо того, чтобы превратить их в реальное бабло?!

25.02.2019 14:10
0

Вы имеете ввиду интерфейс на сайте.
Команда ГолосКор не занимается сайтом.
Это вопрос к команде ГолосИо.

28.02.2019 04:21
0

@andreypf  о как! Спасибо.

28.02.2019 05:32
0

@andreypf ты кто? Можешь объяснить свои флаги моему контенту?

06.03.2019 05:11
0

Да тут дополнить нечего. Обрадовало очень наличие возможности фильтрации истории аккаунта и получение списка пользователей. А transfer будет поддерживать переводы только в токене Cyberway или в создаваемых смартконтрактами токенах тоже?
Благодарю, и удачи в развитии Кибервея.

25.02.2019 11:23
0

Выглядит как костылик чтобы сохранить тикер GOLOS. Интересно, а что будет если bittrex поймёт что на самом деле происходит не обновление протокола, а переход на новый EOS-подобный чейн? Планируется им сообщать об этом?

25.02.2019 13:07
0

я думаю, что все это делается в тесном контакте с Биттрексом. По всем приблизительным характеристикам токен находится на грани делистинга с биржи. Поэтому Биттрекс должен быть заинтересован в любом шансе оживить торги без собственных трудозатрат.

25.02.2019 14:25
0

Наконец - то получен ответ на один важный вопрос: "Что будет с токенами Голос на Биттрексе"?

Соизвольте ответить еще на один. На какой площадке планируется листинг токенов Киберэвэя?

25.02.2019 13:34
0

@now да не было никакого ответа. Мне лично до сих пор не ясно, какой токен будут двигать на биржу. Во превых нету золотого в смартконтракте голоса, только "GLS" токен. Даже не "GOLOS". А во вторых это может и "CYBER" новый токен быть.

25.02.2019 13:56
0

@ropox насколько я понял в планах простая подмена токена, которая не заметна для клиента Биттрекса. Само собой, если последний не пошлет их со своими гениальными идеями.

Поэтому я делаю простой вывод. Если Биттрекс схавает их фокусы, тогда будет на Биттрексе. Если нет, тогда нигде))

25.02.2019 14:00
0

@now ну может быть, но незамеченным вряд ли пройдет. Там архитектура другая будет. Будет отдельно нода, и отдельно база данных. Сейчас это вместе все. Как минимум придется бирже свою базу данных поднимать. Короче много изменений.

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

25.02.2019 14:09
0

@ropox я думаю, что все это делается в тесном контакте с Биттрексом. По всем приблизительным характеристикам токен находится на грани делистинга с биржи. Поэтому Биттрекс должен быть заинтересован в любом шансе оживить торги без собственных трудозатрат.

25.02.2019 14:15
0

@ropox Кстати, я вполне допускаю, что это могла быть инициатива Биттрекса в стиле: "Ребята или что - то делайте с токеном или досвидос!"

25.02.2019 14:20
0

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

Я вот тоже всвязи с недавным сбоем в работе блокчейна и последующим восстановлением его работы задумался над похожим вопросом.
В ситуации, если goloscore запустил новую цепочку, а параллельно работает старая, какова будет позиция Биттрех ?
И вот мне кажется, что даже в ситуации если большинство топ-делегатов поддержит старую версию и не поддержит новую, Биттрекс не будет разбираться, "чья цепь главнее", для них "Голосом" будет та версия, до которой они обновятся из того же самого репозитория.
Как вариант, в случае скандальной ситуации они могут и делистнуть обеих, разумеется.

25.02.2019 16:37
0

GLS - это для теснета. Для мейннета будет GOLOS

28.02.2019 04:17
0

@goloscore, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующей категории:

  • комментарии - 7 позицию - 19 комментарии
26.02.2019 06:34
0

@now, ваше воображение восхищает и соизменимо с вашими другими умениям. Флаг поставила за информацию, не соответствующую реальности.

28.02.2019 12:32
0

@marina так я же совсем не против обойтись без фантазий и услышать четкий ответ на основной вопрос: "Где будет листиться токен Киберэвея"?

По бюджету еще проще. Если ваши отчеты не фальшивка, то средний расход на в месяц 13 битков, а в наличии всего 120. При нынешнем курсе биткоина хватит менее чем на 10 месяцев. А еще затраты на листинг. А с "Голосу 3 года" - и того меньше. К тому же естественно, что никто из топовых бирж бесплатно ваш Киберэвей не будет листить. К тому же его сообщество на 95% будет состоять из "честных авторов", которые кроме составления предложений и подсчета токенов соседа ничего не умеют.

В сухом остатке у вас один цейтнот и куча проблем. Я, конечно, понимаю, что у возможно существует какая - то тайная многоходовочка, но шансы на это минимальны. Вы потратили 300 биткоинов и абсолютно ничего не произошло, поэтому скорее всего и последние 120 уйдут следом,.

28.02.2019 18:04
0

@now, по планам там, где сейчас листиться Голос

01.03.2019 21:09
0

@marina спасибо, это хорошая новость.

02.03.2019 13:14
0

Флаг поставила за

@marina "наздаровья!" Мне не жалко. Можешь еще несколько поставить. Всяко лучше чем апать дюжину унылых до ужаса авторов, которые имеют по три аккаунта и еще по 3 сообщества и продолжают писать статьи, которые просто никто и никогда не будет читать.

28.02.2019 18:08
0

@now, не вы их читаете, не вы их апаете ...

01.03.2019 21:08
0

@marina, кстати, тебе удобно каждый раз удалять символ и ставить запятую после обращения? Мне нет! А уже полгода прошло как лично мне член команды обещал это исправить...

02.03.2019 13:18
0

@now а зачем нужна запятая?

08.03.2019 10:44
0

@kwaskoff, если ты этого не понял по предыдущему комментарию, то у меня для тебя плохие новости.

08.03.2019 10:45
0

@now она не пишет про запятые - про них пишешь ты. А потом стрелки переводишь, когда вопрос задают тебе. Странно это как-то Оо

08.03.2019 10:47
0

@kwaskoff, зато она их ставит вручную..

08.03.2019 10:48
0

@now и ты ставишь.. но зачем - так и осталось загадкой

08.03.2019 10:49
0

@kwaskoff, ничего. Если у тебя будут дети, делай с ними домашние задания по русскому языку. Если ни одного не пропустить, тогда сможешь разгадать загадку.

08.03.2019 10:51
0

@now гораздо важнее то, что мне всплал ответ на мой комментарий - я перешёл по нему, но мне не перемоталась страничка - а когда перемотал сам - нового комментария не оказалось, пока не обновил страницу и снова не перемотал. И это всё в 21ом веке =)

08.03.2019 10:48
0