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

Как я делал кошелек EOS

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

Когда зашла речь о кошельке для EOS, то тут прямым аналогом выглядел Scatter. И я его поставил. А он у меня не заработал. Я менял identity, ключи, ноды. Не работает и все тут. Нода с которой он работает заблокирована Роскомнадзором. Ни одного приличного прокси, через который можно работать я не нашел. Плюнул и поставил EOS Voter. Не смотря на название, это тоже кошелек. Он умеет голосовать, стекать и анстекать токены и делать переводы. И все.

Для начала, может и хватит, но вот создать аккаунт, например, уже отдельная задача, ради которой нужно писать код. А код-то я уменю писать, вот какое счастливое совпадение.

Поэтому я решил написать свой кошелек. Про блэкджек и шлюх всем уже надоело? Тогда не буду об этом говорить.

Для самых нетерпеливых. Установить кошелек можно тут:
Owl EOS Wallet
Но это подойдет только для Хрома. Если будут желающие пользоваться, портирую на Файрфокс.

Отталкиваться решил от того же Метамаска и библиотеки eosjs. Забрался в гугл и он мне рассказал, что для того, чтобы сделать расширение, нужно всего лишь пара файлов - манифест в формате json и html. Ну и туда еще добавлились js и css файл. Ну да это ищется на раз-два.

Так же мне понадобились библиотеки для связи с EOS, работе с ключами и криптографией. Все это можно посмотреть вот тут в репозитории: https://github.com/HomeRobot/owleos Я сразу один раз попрошу прощения за свой английский и не буду к этому больше возвращаться.

Написано все на чистом JS без лишних библиотек и фреймворков.

Архитектуры там особой нет, описывать много не буду. Каркас это html файл с div контейнерами. В зависимости от действий пользователя там открываются те или иные закладки, показываются те или иные формы ввода и т.п. Этим я вас утомлять не буду. Постараюсь рассказать о специфике.

Точка входа это

document.addEventListener('DOMContentLoaded'

Тут мы описываем реакцию на все остальные события - нажатия кнопок, ссылок, выбор элементов.

Регистрация

Тут все просто. Мы берем у пользователя приватный ключ и пароль. Шифруем ключ паролем и кладем в localStorage. Потом, когда пользователю нужно что-то подписать, мы запрашиваем у него пароль, извлекаем ключ, подписываем и пароль с ключом забываем.
При регистрации у нас получается вот какая цепочка:
Проверяем валидность ключа:

eosjs_ecc.isValidPrivate(key)

Формируем из него публичный ключ:

let public_key = eosjs_ecc.privateToPublic(key)

Извлекаем аккаунт, привязаный к ключу:

Eoswallet.eos.getKeyAccounts(public_key)

Формируем профиль пользователя, куда добавляем его аккаунт, публичный ключ и зашифрованный приватный ключ. Сохраняем в localStorage. Это надежное хранилище, никто извне не имеет к нему доступа, только наше приложение.
Так как аккаунтов у нас может быть несколько, то я сразу сделал систему мультиаккаунтов, поэтому добавляю в localStorage так же информацию, что у нас появился ноывый аккаунт. При запуске расширения, мы эту информацию прочитаем и добавим в выпадающий список, чтобы пользователь мог выбрать аккаунт.

На сегодня пока все. Если интересно как там все устроено, то я готов сделать серию статей. Жду отклика.

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