Просто о блокчейне
Автор: @ropox
Многие наверное знают, что блокчейн это последовательная цепочка связанных блоков.
Каждый новый пост записывается в свой блок, каждый ваш лайк, перевод монет, добавление друзей, блокировка недругов. Все записывается последовательно.
Последующий блок включает в себя эссенцию содержимого предыдущего блока. Так называемый хэш. В следующем блоке будет тоже включен хэш этого блока. И так далее. Таким образом, если кто нибудь захочет поменять содержимого блока где-то в середине цепочки, ему придется поменять хэши каждого последующего блока, а это получается совсем другая цепочка. Можно сказать другая последовательность событий.
А теперь кто чуть-чуть постарше, вспомните ранешние компьютеры, игрушки в которых записывались на магнитофонной ленте. Чтобы запустить игру, надо было проиграть ленту с определенного момента. Компьютер считает байт за байтом с магнитной ленты в память компьютера. Посчитает все переменные и можно начинать играть.
Так и с блокчейном. Что бы узнать, сколько у вас монеток на счету, надо пройти всю цепочку блоков, начиная с самого первого и последовательно до самого последнего. Если, например, в блоке 1014 переводили вам монетки, то прибавить к вашему балансу, если в блоке 1102 встретился перевод от вас кому-то, то надо отнять с вашего баланса монеток. В итоге мы знаем, сколько у вас на счету. Так же с вашими подписчиками или вашими подписками. Чтобы узнать, кто на вас подписался, надо просмотреть всю цепочку блоков.
Сейчас (середина июня 2017 г.) уже в цепочке Голоса примерно 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.
По материалам статьи (автор @ropox)