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

Блокчейн

Решил коротко чиркнуть, про устройство блокчейна. Многие жалуются на спонтанные ошибки вроде check_max_block_age(_max_block_age). Так вот, это все издержки технологии блокчейн.

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

Каждый новый пост записывается в свой блок, каждый ваш лайк, перевод монет, добавление друзей, блокировка недругов. Все записывается последовательно.

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

Так и с блокчейном. Что бы узнать, сколько у вас монеток на счету, надо пройти всю цепочку блоков начиная с самого первого и последовательно до самого последнего. Если на пример в блоке 1014 переводили вам, то прибавить к вашему балансу, если в блоке 1102 встретился перевод от вас кому то, то надо отнять с вашего баланса монеток. В итоге мы знаем, сколько у вас на счету. Так же с вашими подписчиками или вашими подписками. Что бы узнать, кто на вас подписался, надо просмотреть всю цепочку блоков.

Сейчас уже в цепочке голоса примерно 6800000 блоков. Каждые 3 секунды добавляется новый блок, в который записывается совершенные вами действия за последние три секунды. Такое количество блоков просматривать каждый раз было бы расточительно и очень медленно. Все таки это на данный момент уже около 2 гигабайт данных. По этому разработчики пристроили базу данных к блокчейну. Нода, - узел в сети блокчейна, - при запуске скачивает все блоки, один за другим и заполняет базу данных. Складывает в базу данных суммы, ваш баланс, последние версии постов. Многие называют это синхронизацией. Когда нода полностью синхронизируется с блокчейном, простым запросом в базе данных, обновляемой нодой, можно узнать сколько у вас монет на балансе, сколько у вас друзей или сколько у вас постов, сколько проголосовало за ваш пост пользователей блокчейна.

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

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

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

Таким образом golos.io по вашему запросу может попасть на такую вот ноду, со старыми данными. Что бы избежать ошибок, golos.io проверяет какой у ноды последний блок и когда он был создан. Если он был создан больше 3 секунд назад, то что-то тут не так и поэтому мы видим ошибку.
check_max_block_age(_max_block_age).

По этому надо набраться терпения и подождать, когда все станет на свои места. Если увидели такую ошибку, перезагрузите страницу, скорее всего golos.io загрузит данные с полностью синхронизированной ноды. Если вы в этот момент пишите пост, то сохраните текст, и перезагрузите страницу. Вообще рекомендую писать текст в файле, в google docs и уже готовый отправлять на golos.io.

Успехов

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