Теперь чтобы понять каким образом работает указатель на предыдущий блок необходимо ввести понятие hash функции. Она из себя представляет некий алгоритм который создает фиксированный набор байт из массива данных, причем данные могут быть практически любой длинны(ну кроме 0 длинны), при этом очень важно, что при изменении хотябы от 1 бита, вся hash строка меняется кардинально.
Как пример можно привести hash строку по алгоритму sha256 от фразы "Что такое blockchain?"
035635810455fc2750564fcad63bbda080ec551540dc008df51ad2aa73b5df1c
Теперь если изменить хотябы 1 символ в фразе, например вместо вопросительного знака поставить восклицательный, то hash строка изменится кардинально, как пример для фразы "Что такое blockchain!" она будет по тому же алгоритму sha256 следующей:
1bd67c6ed1db4303ccc0ed469dcbff453e2f875bfd81b8cea5cd3a8017652b76
Теперь как работает сам blockchain и зачем ему нужна hash функция? Каждый блок(кроме первого) что бы попасть в цепочку блоков, должен получить свой hash который при помощи алгоритма получается из hash предыдущего блока плюс некоторые данные из самого блока, например времени создания блоков, длинны блока и прочего. Тем самым если блок уже внесен в цепочку и за ним следуют другие блоки то изменение хотябы 1 бита информации в какой либо части цепочки(кроме последнего блока) изменят хэш суммы всех последующих блоков в цепочке, тем самым можно пройдя по всей цепочке легко понять были ли какие изменения.
Как пример возмем теже фразы что были описаны выше.
Допустим нудевой блок с фразой "Что такое blockchain?" имеет хэш:
035635810455fc2750564fcad63bbda080ec551540dc008df51ad2aa73b5df1c
и данные в нем Что такое blockchain?
Что бы высчитать следующий блок в котором есть фраза "Blockchain это цепочка блоков" нам необходимо сложить hash от первого блока в примере и фразу "Blockchain это цепочка блоков" а потом получать от этого hash при помощи алогоритма sha256
Строка из которой будет вычисляться следующий hash будет следующей: 035635810455fc2750564fcad63bbda080ec551540dc008df51ad2aa73b5df1cBlockchain это цепочка блоков
Получается hash следующего блока:
1f000e0bf4db70c63f38fa62eb33d87cca77f10687ca092c326922cc1b16709c
и данные в нем Blockchain это цепочка блоков
Теперь третий блок будет с хешем для фразы "Блок - минимальная единица", делаем также
прибавляем к предыдущему hash строчку в текущем блоке:
1f000e0bf4db70c63f38fa62eb33d87cca77f10687ca092c326922cc1b16709cБлок - минимальная единица
И получаем третий хеш для третьего блока:
bcac4934673f09a8aca2078d8a3ba789edf8884e91fd5c15ef9dc7859cc9825f
с данными Блок - минимальная единица
Итого у нас 3 блока на текущий момент:
Нулевой блок в цепочке с которой начинается цепочка:
Hash: 035635810455fc2750564fcad63bbda080ec551540dc008df51ad2aa73b5df1c
Data: Что такое blockchain?
Первый блок в цепочке
Hash: 1f000e0bf4db70c63f38fa62eb33d87cca77f10687ca092c326922cc1b16709c
Data: Blockchain это цепочка блоков
Второй блок в цепочке:
Hash: bcac4934673f09a8aca2078d8a3ba789edf8884e91fd5c15ef9dc7859cc9825f
Data: Блок - минимальная единица
А теперь если например кто то попытается изменить данные в одном из блоков, то вся цепочка изменится, например в изначальном блоке изменят опять знак вопроса на восклицательный и посмотрим как изменится цепочка:
Нулевой блок теперь выглядит следующим образом:
Hash: 1bd67c6ed1db4303ccc0ed469dcbff453e2f875bfd81b8cea5cd3a8017652b76
Data: Что такое blockchain!
Первый блок в цепочке:
Hash: 93ee1e9e0be6bd8f42bc0011c7bc92da3a370cb8523550dda98b2b027e67dfe7
Data: Blockchain это цепочка блоков
Второй блок в цепочке:
Hash: 55958a1b4f7b8a080eb4c6969858ca851c3a7e9b41ed034ab67a240fb9e4341a
Data: Блок - минимальная единица
Тоесть если сравнить с предыдущей цепочкой, то она координально поменялась и такие изменения будут до конца цепочки. Именно так работает технология blockchain.
А теперь в псевдокоде как бы это выглядело?(будет java подобный псевдокод)
Для начала нам нужно сделать минимальную еденицу - блок
Пусть он выглядит следующим образом:
class Block { byte[] hash; String data; }
Теперь создадим функцию которая будет считать хеш для текущего блока, на вход которой мы будем давать 2 параметра, hash от предыдущего блока и собственно строку которая будет в текущем блоке, внутри функции мы будем склеивать хеш предыдущего и данных, после чего при помощи функции sha256 считать текущий hash и возвращать его:
byte[] CreateHash(byte [] hashblockbefore, String currentblockdata) { byte[] hashforcurrentblock = sha256(hashblockbefore + currentblockdata.toByteArray); // считаем хеш для текущего блока из хеша предыдущего и данных переведенных в массив байт
return hashforcurrentblock;
}
Ну а теперь функция создания блока и добавление его в blockchain, собственно создаем массив блоков под названием blockchain, вызываем функцию CreateHash с параметрами предыдущего хеша и строкой данных, которая возвращает массив байтов с посчитанным хешем для текущего блока. После чего записываем в блок посчитанный хеш и данные и добавляем этот блок в цепочку.
var BlockchainExampleMain() { Array<Block> blockchain; // создаем блокчеин в массиве блоков Block currentblock; // инициируем блок String data = "Что такое blockchain?"; // данные которые будут помещенны в блок currentblock.hash = CreateHash("123123123...123".toByteArray, data ); // заполняем поле hash currentblock.data = data; // заполняем поле data blockchain.add(currentblock); //добавляем блок в цепочку }
В прицнципе все, базовый blockchain готов. Дальше будет рассказ уже про применение блокчейна к цифровой валюте.
Комментариев нет:
Отправить комментарий