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

Дополняю список операций в блокчейне Голос + отчет: 28.06.2017

Приветствую! Начнем с отчета, а после - продолжение списка операций (прошлый пост). Я завершил загрузку всех блоков на данный момент. Данные успешно складируются в виде транзакций и анализируются (в виде суммы операций в транзакции). И вот какая получается ситуация по количеству и весу.

Сбор данных

Блоков получено: 7259985
Последняя полученная транзакция имеет дату создания: 28.06.2017 03:38:57 

Транзакции и их количество + вес

account_create - количество: 42984, вес: 35.34Мб

account_update - количество: 84603, вес: 68.83Мб

account_witness_proxy - количество: 565, вес: 63.93Кб

account_witness_vote - количество: 20894, вес: 2.69Мб

cancel_transfer_from_savings - количество: 41, вес: 4.89Кб

change_recovery_account - количество: 3, вес: 0.49Кб

comment - количество: 882690, вес: 906.97Мб

comment, comment_options - количество: 5202, вес: 19.46Мб

comment, comment_options, vote - количество: 6174, вес: 25.12Мб

comment, vote - количество: 48861, вес: 198.36Мб

comment, vote, comment_options - количество: 3234, вес: 14.65Мб

comment_options - количество: 3477, вес: 1.11Мб

convert - количество: 2528, вес: 320.4Кб

custom - количество: 3, вес: 1.22Кб

custom_json - количество: 213588, вес: 51.05Мб

delete_comment - количество: 6184, вес: 989Кб

escrow_approve - количество: 89, вес: 16.9Кб

escrow_dispute - количество: 14, вес: 2.41Кб

escrow_release - количество: 28, вес: 7.6Кб

escrow_transfer - количество: 75, вес: 29.82Кб

feed_publish - количество: 315966, вес: 49.81Мб

limit_order_cancel - количество: 34541, вес: 3.51Мб

limit_order_create - количество: 51757, вес: 12.86Мб

limit_order_create2 - количество: 131, вес: 38.56Кб

pow2 - количество: 351936, вес: 324.55Мб

recover_account - количество: 1, вес: 0.5Кб

request_account_recovery - количество: 3, вес: 1.05Кб

set_withdraw_vesting_route - количество: 587, вес: 99.83Кб

transfer - количество: 411569, вес: 98.74Мб

transfer_from_savings - количество: 375, вес: 69.37Кб

transfer_to_savings - количество: 612, вес: 93.75Кб

transfer_to_vesting - количество: 43959, вес: 5.91Мб

vote - количество: 2852067, вес: 498.72Мб

vote, vote - количество: 28, вес: 10.51Кб

vote, vote, vote - количество: 220, вес: 120.75Кб

vote, vote, vote, vote - количество: 1285, вес: 915.44Кб

vote, vote, vote, vote, vote - количество: 1564, вес: 1.33Мб

vote, vote, vote, vote, vote, vote - количество: 2374, вес: 2.44Мб

withdraw_vesting - количество: 12579, вес: 1.61Мб

witness_update - количество: 1579, вес: 619.65Кб

Суммарно - количество: 5404370, вес: 2326.39Мб

Всего блоков 7259985, операций 5404370. На 10 блоков в среднем приходится 7.4 операции.

Также стоит отметить суммарный вес - всего 2.3 Гб! Да, сам блокчейн весит около 8-9 Гигабайт, но если убрать служебные данные - то вся информация довольно сильно и компактно сжимается. И это еще сырые данные в виде сериализованных массивов. Что будет, если перевести эти данные в правильную архитектуру? Вот этим и займемся! :)

В планах написать обработку для каждой операции. Надо достать важные данные, поместить в базу данных, правильно расставить все на свои места. После этого можно уже будет избавляться от "сырых" данных транзакций.

Вопрос - что делать с измененными постами? Как известно - все изменения постов записываются в блокчейн как UniDIFF (он же xdiff), я уже разработал патчер для данных, поэтому есть возможность брать не просто "слепок" актуальной версии, а проследить за всеми изменениями контента.

Естественно, хранить в актуальной БД нужно актуальные данные. Думаю, создать таблицу для истории - в которую будут записываться старые версии контента + дата, когда его изменили. База раздувается таким образом, так как придется хранить все слепки контента. Но в тот же момент, можно пропускать слепок через base64 + gzip и хранить в базе как поле BLOB. При необходимости заглянуть в "историю", всегда можно будет сделать распаковку и привести в читаемый вид.

Частота транзакций

Транзакции за последние 90 дней по базе
Количество транзакций: 3051202, за 7775970 секунд.
Скорость появления новых транзакций: 1 транзакция за 2.55 секунд.

Транзакции за последние 30 дней по базе
Количество транзакций: 1504301 за 2591997 секунд.
Скорость появления новых транзакций: 1 транзакция за 1.72 секунд.

Транзакции за последние 7 дней по базе
Количество транзакций: 395722 за 604797 секунд.
Скорость появления новых транзакций: 1 транзакция за 1.53 секунд.

Транзакции за последние 2 дня по базе
Количество транзакций: 121913 за 172788 секунд.
Скорость появления новых транзакций: 1 транзакция за 1.42 секунд.

Как видно - транзакции появляются все быстрее и быстрее. Чтобы поддерживать актуальность и "свежесть" данных, нужно опрашивать API уже каждые 1-2 секунды. Хочу привлечь к этому внимание @arcange, так как он содержит GolosSQL (данные там, судя по посту, добираются каждые 10 секунд).

Список операций, часть 2

Теперь пройдемся по обновленному списку операций (прошлый список) . Меня удивило, что есть транзакции, которые содержат сразу 6(!) операций vote. Проанализировав сами транзакции прослеживается одна связь. Такие транзакции получаются, когда бот "последователь" ставит лайки за "куратором".

change_recovery_account - операция изменения логина аккаунта new_recovery_account на который возможно восстановление account_to_recover.

convert - судя по всему это запрос на конвертацию GBG  в Голоса, содержит поля: owner, requestid, amount.

custom - всего 3 операции во всем блокчейне с этим названием. Содержит поля required_auths, id, data. В required_auths упоминается 3 аккаунта: @orator, @alcotester, @hipster - может быть они смогут прояснить для чего данная операция (передача зашифрованных данных анонимно для получателя, личные сообщения - не похоже, так как отсутствует поля отправителя)?

custom_json - возможность записать в блокчейн любой json, подробнее ниже.

escrow_transfer - Переводы на market (она же биржа). Поля: from, to, sbd_amount, steem_amount, escrow_id, agent, fee. Не совсем понимаю, какая роль agent в переводе? Делегат отвечающий за проверку транзакций? Часто встречаются такие логины, как: @on0tole, @kosmos, @escrows, @xtar - очень сложно анализировать эти операции, будет гораздо проще, если проанализировать код самой биржи.

escrow_approve - Подтверждений операций агентом/делегатом.

escrow_dispute - Заявки на сделку.

escrow_release - Судя по данным тут записаны комиссии, отправленные за успешную обработку сделки агенту/делегату.

limit_order_create - Опять биржа. Только тут конкретика - owner (кто создал ордер), orderid, amount_to_sell (количество токенов Голос на продажу), min_to_receive (желаемое количество Золотых), expiration (дата окончания ордера), fill_or_kill (везде пустует, скорее всего обозначает желание полного покрытия ордера, запрет частичного покрытия).

limit_order_create2 - Все тоже самое под другим соусом: amount_to_sell (количество Золотых/GBG), exchange_rate - состоит из конкретных сумм: base (GBG) и quote (GOLOS).

limit_order_cancel - Запись об отмене ордера, содержит owner и orderid.

request_account_recovery - Запись запросов на восстановление доступа к аккаунту (account_to_recover) от доверенного лица (recovery_account).

recover_account - Запись смены доступа к аккаунту (account_to_recover), старый публичный ключ владельца (recent_owner_authority[key_auths][0]) и новый (new_owner_authority[key_auths][0]).

transfer_from_savings - Операция с Сейфом. Запись запроса вывода денег с Сейфа, поля: from, request_id, to, amount (пример: 10.750 GBG), memo (комментарий перевода).

transfer_to_savings - Отправка токенов GBG в сейф, поля: from, to, amount (можно передавать как токены GOLOS, так и GBG).

cancel_transfer_from_savings - Отмена операции вывода токенов с Сейфа, поля: from, request_id.

Как видно из примеров выше - если приложение в Голосе использует в операциях данные, связанные с своей базой посредством id, понять в чем заключается смысл операции довольно сложно. Если кто знает ссылку на github того же Маркета - прошу написать в комментариях. Может быть вместе сможем разобраться в его структуре (а может и нет в этом смысла - Приложения должны сами у себя вести учет данных, просто исторически записывать все в Голос).

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

Отдельно про custom_json - похоже придется анализировать его отдельно и писать новый пост. Повторно прошу скинуть линк на описание custom_json, какие там есть данные. Может подскажет @hipster или @serejandmyself, было бы здорово получить помощь/фидбек из первых рук или линк на исходники для самостоятельного анализа.

Подписывайтесь, пишите комментарии, буду рад новоприбывшим. Если вы с региона и собираетесь посетить Голос Фест, рекомендую для чтения: Большой пост помощи гостям с регионов для Голос Фест.

0
21.863 GOLOS
На Golos с May 2017
Комментарии (13)
Сортировать по:
Сначала старые