Приветствую! Начнем с отчета, а после - продолжение списка операций (прошлый пост). Я завершил загрузку всех блоков на данный момент. Данные успешно складируются в виде транзакций и анализируются (в виде суммы операций в транзакции). И вот какая получается ситуация по количеству и весу.
Сбор данных
Блоков получено: 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, было бы здорово получить помощь/фидбек из первых рук или линк на исходники для самостоятельного анализа.
Подписывайтесь, пишите комментарии, буду рад новоприбывшим. Если вы с региона и собираетесь посетить Голос Фест, рекомендую для чтения: Большой пост помощи гостям с регионов для Голос Фест.
Приветствую.
Затронутый вопрос конечно интересен. Так как сам над этим голову ломаю и не все понятно. Сам в основном ищу данные либо GolosChain/golos (тут можно встретить даже описание для некоторых команд), либо еще ищу steemjs-lib. Ну и соответственно сам сайт STEEM там тоже можно поиска.
Для меня же сейчас есть затруднение как раз с работой с этими операциями, а именно момент подписания. Т.е. какой подписью и какую операцию подписывать. Вот тоже хотел бы уточнить у @hipster или @serejandmyself могут ли они раскрыть завесу тайны по этому вопросу. Просто все что удалось нарыть steemjs-lib не совсем соответствует действительности.
Да забыл дополнительно упомянуть. В блокчейне есть еще один тип операций, так называемые виртуальные операции:
fill_convert_request_operation, author_reward_operation, curation_reward_operation, comment_reward_operation, liquidity_reward_operation, interest_operation, fill_vesting_withdraw_operation, fill_order_operation, shutdown_witness_operation, fill_transfer_from_savings_operation, hardfork_operation, comment_payout_update_operation
А сигнатура операций есть? какие поля и тд?
У меня все данные преобразованы уже, я могу сказать номера блоков, где вы можете все посмотреть по комментарию выше.
comment, comment_options, vote: блоки с примерами 1466449, 3857123, 3859175
comment, comment_options: блоки с примерами 122262, 454253, 463787
Посмотреть данные блока вы можете по ссылке: пример.
спасибо
Только одно приходит на ум. Однажды попробовал через cli_wallet отправить сообщение методом send_private_message(string from, string to, string subject, string body, bool broadcast). Отправить то отправилось, но как его получить -- сам не знаю.
Спасибо за ответ! Многие несправедливо проходят мимо поста. Теперь понятно, custom - по потенциалу, тот же custom_json, только зашифрованный.
Думаю получение сообщения - это нахождение операции в блоке и его расшифровка. А есть ли для этого методы - другой вопрос. В принципе поле required_auths можно расценивать как проверку с открытым memo ключом получателя.
Дополняю комментом, все escrow_* операции идут отсюда (автор @xtar).
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
losos, t3ran13, vasilisapor2, ropox, renat242, vict0r, gryph0n, asuleymanov, igor-golos, yuriks2000, on1x, newodin, vika-teplo, myhardmoney, amelina.elena, ogion, mixtura, sareon, mrramych, bospo, sergiusduke
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!
@on1x, я так понимаю, чтобы сделать новый пост, проголосовать за него и указать, что выплаты должны быть в силе нужно:
в одну транзакцию запихать 3 операции
comment, comment_options, vote?
Если нужно просто создать пост и указать выплаты в силе то:
comment, comment_options?
Очень интересно, хоть для меня и непонятно..)
@on1x Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Голосуя за это уведомление, вы помогаете всем пользователям Голоса. Узнайте, как здесь.