GOLOS
RU
EN
UA
puding
2 года назад

Блокчейн простыми словами

Если вы не понимаете блокчейн, я попробую рассказать о нем простыми словами. Что такое блок? Блок - это структура данных. Поскольку биткоин написан на языке С++, то блок в нем - это класс (class). Если бы биткоин был написан на С, то блоком бы выступала структура (struct), похожая на класс, но не имеющая преимуществ, которые дают классы С++. Класс выглядит примерно так:

class Block {

public:

    string hash_predyduschego_bloka;
    string hash_dereva_tranzakciy;
    int vremya_sozdaniya_bloka;

}

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

Откуда берутся эти блоки? В коде биткоина всегда есть один блок нулевой высоты, который называется генезис блок, то есть начальный блок, от него идет вся дальнейшая цепочка блоков. Его хеш уже записан в коде. Так же в коде биткоина существует куча функций, проверяющих что-то, что делающих и прочие. Так вот, блоки берутся в процессе майнинга. С этим процессом связан такие параметры, как сложность и нонсе (nNonce). Этот процесс состоит в следующем, компьютеры, на которых стоит биткоин начинают подбирать такой хеш нового блока, который при таком-то нонсе меньше определенного параметра, определяющего сложность. Ставится определенный nonce, вычисляется хеш, если он больше, чем нужно, то нонсе меняется на другой и процесс повторяется, пока хеш не будет найдет. Если блоки долго ищутся, то через некоторое время или на следующем блоке (зависит от реализации) сеть с помощью консенсуса изменит параметр, определяющий сложность. Если же блоки ищутся слишком быстро, например при увеличении вычислительной мощности сети, то параметр соответственно изменяется в сторону усложнения вычислений. Блоки могут искаться слишком быстро также, если ищущему просто везет. На майнинг пулах зачастую случается такая ситуация, когда за короткий промежуток времени находится сразу множество блоков, и существует такое понятие, как удача пула (luck) и удача нахождения блока, выражающиеся в процентах.

Хеш блока - это результат выполнения хеш-функции, которая принимает некий набор данных, тот же нонсе (и обязательно хеш предыдущего блока (исключение для генезис блока)), например, и обрабатывает по определенному алгоритму. Майнить может и один компьютер из цепочки, не обязательно все. После нахождения хеша создается блок и в него записывается хеш дерева транзакций. Транзакции - это тоже классы, при создании хеша дерева транзакций (дерева Меркла) берутся транзакции, генерируются их хеши, затем хеши объединяются в пары и генерируются хеши из пар, пока не доберемся до вершины, последний оставшийся хеш и является хешем дерева транзакций, который также записывается в блок при его создании. После формирования блока он проверяется функциями на "правильность" и записывается в базу данных, которая представляется собой набор файлов со структурированными данными. В отличие от баз данных банков, эта база является неизменяемой, ее части и копируют друг другу клиенты биткоин.

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

Итак, одна из основных фишек блокчейна - неизменяемость, откуда она берется? Предположим я купил лексус за пять биткоинов. По пути домой мне стало грусто от того, что я потратил целых пять битков и мне захотелось все вернуть назад, но оставить лексус себе. Я прихожу домой, скачиваю цепочку ровно до того блока, в который положилась транзакция за лексус. Затем начинаю майнить новый блоки без этой транзакции. Получается, что в новой версии блокчейна я ничего не тратил! Но, естественно, мне не удастся обогнать блокчейн биткоина с его текущей мощность сети. Если бы у меня было более половины мощности сети, то я бы мог ее обогнать, это называется атакой 51%.

Хеш-функция, которая используется в биткоине - это SHA-256. Она очень простая и реализуется с помощью микросхем. На железе хеши считаются быстрее, чем на компьютере с помощью центрального процессора и программ. Если взять много микросхем, то можно получить очень быстрый майнер (ASIC), таковым является знаменитый Antminer. Хеш-функцию можно заменить на другую, например на Equihash, и получить форк - ответвление в коде. Так, например, Bitcoin Gold является ответвлением биткоина, в котором используется Equihash. Конечно, можно изменять не только хеш-функции, но и другие части, тем самым добавляя новые возможности. Известный Ethereum включает в себя Тьюринг полный язык программирования, то есть внутри сети в теории могут выполняться программы любой сложности. На приктике применяются простые программы, именуемые смарт-контрактам, которые в отличие от обычных конктрактов в реальной жизни имеют такую фишку как самозаключаемость. То есть то, что заложено в программе, например обмен одних токенов на другие, будет выполнятся само, без участия посторонних лиц. Для этого даже была придумана специальная виртуальная машина, которая является прослойкой, облегчающей написание программ - смарт-контрактов. Для того, чтобы усложнить майнинг на асиках, можно создать такую хеш-функцию, которая будет потреблять много памяти, которой у асиков маловато, зато многовато у компьютеров (ОЗУ и память на видеокартах).

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

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

1
0.007 GOLOS
На Golos с September 2017
Комментарии (6)
Сортировать по:
Сначала старые