Skip to content
This repository was archived by the owner on Nov 16, 2018. It is now read-only.
Vladimir Evgrafov edited this page Aug 1, 2018 · 16 revisions

EOS

EOS Create Wallet Flow

Проблемы с которыми столкнулись

Testnet & Mainnet

Очень тяжело найти публичный тестнет. По какой-то причине, все закрывают доступ в свои сети, никуда не подключиться. Возможно это связано с потенциальными дырками в протоколе и реализации. Единственное что смог найти - jungle.cryptolions.io Нигде не найдёшь инфы по мейннету! Ни адресов нод, ни конфигов ничего! Cryptolions в этом смысле сильно помогли и сделали нормальный конфиг и инструкцию

Mainnet Explorer

Block producer node

Пытался поднять block producer ноду для тестнета Jungle, но она постоянно ловила херню и падала. При этом приходится делать hard resync. Выключение block producer фич спасает.

Debug

При неуспешной посылке транзакций ответ супер неинформативен. Нормальные адекватные сообщения о том что произошло можно читать в логах ноды. Если убрать вывод о новых блоках и высеры о невозможности подключения

docker-compose logs -f --tail 0 nodeos | grep -v "Received block" | grep -v "net_plugin.cpp"

То можно читать информативный вывод.

Одна из проблем с созданием акков была в том что мы пытались сделать премиум имя и не могли это понять потому что в ответах ничего не было.

Premium accounts

Премиум имена - что-то типа top level domains (.com .by .ru) в интернете. То есть если у нас будет куплено имя .multy, то можно будет делать vadimicus.multy Обычные имена состоят из 12 символов из словаря 12345abcdefghijklmnopqrstuvwxyz (ещё точка но вроде только для премиум) Имена получают на аукционе. Актуальные ставки

Статья на тему имён

NewAccount

При создании аккаунта тратится некоторое количество RAM и стейкается непоторое количество CPU и NET (вроде бы при удалении аккаунта RAM возвращают, а CPU и NET освобождается через несколько дней). При этом тратится этот ресурс с создаваемого акка. То есть надо покупать RAM для акка который создаёшь. То есть пушится сразу две операции:

  • создание акка aaaabbbbcccc.
  • покупка для акка aaaabbbbcccc 1337 RAM.
  • (cleos ещё добавляет delegatebw в акк aaaabbbbcccc 228 CPU и 228 NET, пока не понятно обязательно ли это)

stackoverflow вопрос про создание акков там в ответе есть несколько сервисов которые предоставляют такую услугу, но цены конские

Pub/Sub

Не нашёл никаких упоминаний того что подпись на разные штуки существует. Пытался сделать через p2p протокол, там можно получить информацию о propagated blocks. Оказалось не стабильно и не информативно. Можно получить только блок. Написал мейнтейнеру eos-go, говорит только через p2p. В итоге придходится делать бесконечный цикл, с проверкой блоков.

Transaction Parsing.

Почти все данные, которые нам нужны, хранятся в сложном специфичном для каждой операции формате. На пример действии transfer в открытом виде содержится только информация о том кто отправляет токены. Информация о том сколько переведоно, каких токенов и кому содержится в бинарном формате, который надо парсить

RAM price.

Не понятно как вычисляется цена за которую покупают/продают RAM в основных токенах. Задал вопрос в чатике - скинули whitepaper Bancor Protocol

Статья Ларимера про RAM

Также вот что нашёл:

   /**
    *  When buying ram the payer irreversiblly transfers quant to system contract and only
    *  the receiver may reclaim the tokens via the sellram action. The receiver pays for the
    *  storage of all database records associated with this action.
    *
    *  RAM is a scarce resource whose supply is defined by global properties max_ram_size. RAM is
    *  priced using the bancor algorithm such that price-per-byte with a constant reserve ratio of 100:1.
    */

То есть цена за байт всегда 100:1. Но цена в чём? Было бы круто иметь данные о текущей цене. Написал issue по этому поводу

Кусок кода с вычислением цен В коде оперируют странными данными из connecor'а, доступа к которым нет. Пытался покрутить, повертеть - цены не те выходят. Данные о текущем supply можно получить с эндпоинта /v1/chain/get_table_rows. При этом в issue отвечают, что можно просто поделить quote / supply и получить цену за байт. Получается цена чуть ниже (вычисленная 888 RAM за 0.1 EOS, реальная 883 за 0.1 EOS). Добавил расчёт fee - всё сошлось.

Concerns

  • Не понятно как считается количество RAM которое нужно для операции/транзакции. Проверка осуществляется где-то здесь, но затем ускользает в веренице спагетти-кода. На девелоперских ресурсах говорят что захардкожены но сколько не понятно.
  • Цена за создание аккаунта будет крайне плавающей. При этом надо умудриться не продешевить в любой данный момент времени.
  • CPU и NET - также участвуют в создании аккаунта, их тоже надо учитываь в ценах.
  • Купить крутое премиум имя типа .multy
  • Есть history_plugin, который умеет хранить историю транзакций в mongo. Возможно нам стоит это использовать
  • block.one планирует выпускать iOS кошелёк и бесплатно создавать аккаунты. proof (Step 3)

Additional links (from previous page revision)

Multisig

Мультисиг на EOS-е есть, вот статья на тему использования мультисига

Serialize to packed transaction

Для отправки транзакции в сеть клиентам необходимо отправить на сервер транзакцию в hex формате и подпись в формате BASE-58.

Вот пример отправки транзакции:

{
  "compression" : "none",
  "packed_context_free_data" : "",
  "packed_trx" : "4dde3b5b0719f4f71c61000000000100a6823403ea3055000000572d3ccdcd01000050d2ccabb00600000000a8ed32322f10b0db269d43917990d45dd351042fe5640000000000000004454f53000000000e746573742066726f6d206c796e78",
  "signatures" : [
    "SIG_K1_Kc9HXdE49MxBHWqQYopbUJzRN74uZjyBX1fLyvSAEwdQbgoFscEUFA2sxgmaeFt8kmi5N5mVv29CEXsKYX3bp7uGiKjmN9"
  ]
}

вот gist в котором парень на swift пытается реализовать сериализацию, но у его при отправке пишет ошибка сериализации.

Тут еще есть вариант работы с транзакциями на С++.

Для подписи используется предыдущий вариант сериализации, но в начале добавляется id сети и в конце добавляется массив из 32 нулевых байт.

Clone this wiki locally