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

Почему блокчейн называется блокчейном.

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

Все операции производимые пользователями группируются в эти самые блоки и записываются каждые три секунды на диск.

Блок 1

Вася перевел Пете 100 GBG
Коля написал пост с заголовком "В чем смысл жизни?"
Женя проголосовал за пост Коли "В чем смысл жизни?"

Блок 2

Вася проголосовал за пост Коли "В чем смысл жизни?"
Лена написала комментарий "Ни в чем" к посту Коли "В чем смысл жизни?"

И так далее. Все блоки пронумерованы, все операции записаны в строго определенном порядке. Замечательно.

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

В сети Голоса все то же самое. Во первых операции с монетами GOLOS и GBG должны быть задокументированы, а во вторых надо исключить возможность манипуляции со стороны кого бы то ни было. Будь это сам пользователь или администратор сайта или сервера, где работает нода. Если этого не будет, не будет доверия к монетам. Их просто напросто никто не купит. Это монеты, а помимо монет есть еще посты, апвоты к постам, комментарии. Все это производимая работа, за которую мы получаем монеты. Потому она равноценна самим монетам и так же должна быть надежно задокументирована.

Мы разобрались, что все операции выполняемые пользователями документируются в блокчейне. В отдельных блоках, но нет гарантии, что кто нибудь не возьмет, да не поменяет цифру в в одном из блоков. К примеру отредактирует перевод монет от Коли к Биттрексу. Поменяет 100000 GBG, к примеру, на 1 GBG. Тогда нода при считывании протокола будет думать, что у Коли все еще 99999 GBG на балансе и хитрый и счастливый Коля сможет еще раз вывести много GBG на биржу и продать. Что можно сделать, как подписать операцию? Вот лет двадцать назад и предложили способ, как можно гарантировать, что блоки действительны и не были поправлены. Сейчас начнутся умные слова с упоминанием математики, но не бойтесь, я постараюсь все упростить.

Хэши

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

Математикам давно были известны так называемые хэш-функции. Хэш-функцию можно представить в виде мясорубки. Если взять текст и скормить его такой функции, то на выходе мы получим фарш из чисел и знаков. Так называемый хэш. Причем результат необратим. Из этого фарша чисел и знаков невозможно составить исходный текст. Как в песне, - "Фарш невозможно прокрутить назад". Это одно из важных свойств хэш-функции.

Второе важное свойство хэш-функции заключается в том, что объем получаемого "фарша" из чисел и знаков или просто хэш, может быть много меньше от первоначального объема. К примеру хэш может быть длинной ровно 64 знакоместа. Что бы мы не подали на вход функции, на выходе мы получим всегда 64 знака, но каждый раз разные. Подадим ли мы одну букву "А" или поэму "Евгений Онегин", на выходе получим заданные 64 знака и они будут разительно отличаться. Даже если мы хотя бы одну единственную точку уберем из поэмы Евгения Онегина мы получим совершенно другой хэш.

Вот пара примеров

Исходный текстХэш
ropoxe41f9be42642a1c699d4d114038b9c358f5c0f4a75c3ced9bf90794ed4997606
bopox8a8e748a6bf749b8b986b1628447278d90cd1c996039ed55386d09679e51dfe4
в лесу родилась ёлочка65a2261d97a2e1c9fbedb7b23438d1a844b13fc3bc3b06935d620939ce1f5acd

Пытливый читатель может спросить, как может получится каждый раз разный хэш, если текст на входе много больше хэша? А он на самом дели и не уникальный, но чем больше хэш, тем меньше вероятность, что два разных текста на выходе получат одинаковый хэш. В настоящее время популярна функция sha256. Эта функция гарантирует уникальность хэша поистине в галактических масштабах. Я специально не следил, но по мойму еще не было обнаружино ни одной коллизи. То-есть до сих пор еще не нашли два разных текста с одинаковым хэшем.

Поэтому хэш можно считать уникальным отпечатком текста.

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

Воспользуемся примером из начала статьи. Сначала посчитаем хэш первого блока подав на вход хэш-функции все три операции из первого блока.

> Вася перевел Пете 100 GBG
> Коля написал пост с заголовком "В чем смысл жизни?"
> Женя проголосовал за пост Коли "В чем смысл жизни?"

3eb927b9f9ae3e1e3567803b5a6c081c426a62cee1825a5ec567c457d9809a4e

А теперь возьмем полученный хэш из первого блока и поместим его в начало второго блока

> 3eb927b9f9ae3e1e3567803b5a6c081c426a62cee1825a5ec567c457d9809a4e
> Вася проголосовал за пост Коли "В чем смысл жизни?"
> Лена написала комментарий "Ни в чем" к посту Коли "В чем смысл жизни?"

И посчитаем хэш всего блока включая хэш первого блока.

01253469b5c3d74cd2c433a5d00a6e168afd4f81f0322daab7dfce8a73388611

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

Я поменял 100 GBG на 10 GBG в первом блоке и получил совершенно другой хэш!

> Вася перевел Пете 10 GBG
> Коля написал пост с заголовком "В чем смысл жизни?"
> Женя проголосовал за пост Коли "В чем смысл жизни?"

934ac32785c834f837e53a9aaf74022a91927d76bde53dbac7c954dcaf6f685d

Вот и получается, что злоумышленник поменяет хотя бы один знак в одном из блоков, ему придется поменять каждый блок в цепочке, а это уже будет совершенно другая цепочка. Если бы я был писатель фантаст, я бы сказал, что возникла параллельная вселенная, где Вася перевел Пете 10 GBG вместо 100. Вроде бы изменение незначительное, но в результате влияние может сказаться на многих пользователях. Петя в свою очередь расстроился, что получил мало монеток. Плюнул и ушел с голоса. И не не написал больше замечательного текста, за который проголосовал Кит и уже никогда не получил много золотых и не перевел их на Биржу.

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

Вот почему блокчейн (blockchain англ. цепочка блоков) так называется. Блоки сцеплены друг с другом хэшем предыдущего блока в включенным в следующий. Так как хэш достаточно уникален, то и изменить текст в блоке, так что бы получился хэш записанный в следующем блоке не получится. Вернее теоретически можно конечно подобрать такой текст. Но лишь теоретически. Для этого понадобится перебрать как минимум 10^38 (10 в степени 38) вариантов. А при существующих вычислительных мощностях это займет тысячелетия. Для сравнения, в нашей галактике содержится по грубым оценкам 10^56 атомов.

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

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