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

Блоки цепочки
Инициализация цепочки
Для начала, первый блок цепочки называется «первичным блоком» (или «блоком генезиса»). Это просто исходный блок, с которого начинается вся цепочка. В моей реализации, когда создаётся BlockChain, то первичный блок создаётся автоматически.Добавление блока
Чтобы добавить новый блок в цепочку, вам необходимо получить хэш предыдущего блока, а далее вычислить хэш нового. Поскольку хэш предыдущего блока — это данные, передающиеся в хэш-функцию, вычисление хэша нового блока должно быть выполнено после получения предыдущего хэша. Функция «getLastestBlock» используется только для получения последнего блока в цепочке, поэтому, когда вы добавляете блок, он автоматически становится предыдущим.Защита цепочки
Технология BlockChain устойчива к изменениям конструкции. Одна часть, отвечающая за безопасность, гарантирует, что ссылки между блоками не были подделаны, поэтому, предыдущий хэш в блоке #3 фактически эквивалентен хэшу в блоке #2. Это то, что я проверяю в функции «isChainValid». Другая часть, также отвечающая за безопасность, гарантирует, что данные в блоке не были подвергнуты изменениям с момента создания блока. Например, если кто-то попытается изменить внутри блока имя того, кто сделал транзакцию, операция будет предотвращена для обеспечения безопасности. Если данные в блоке были подделаны, то хэш блока также поменяется, поскольку данные передаются в хэш-функцию. Изменение значение хэша также учитывается в функции «isChainValid», чтобы проверить, изменились ли данные с момента создания блока.
Тестируем написанный BlockChain с Anna Coin
Ниже вы увидите код, который создаёт объект BlockChain под названием annaCoin и добавляет в него блоки. Я доказываю безопасность annaCoin, проверяя валидность цепочки блоков перед любым вмешательством, а также после атаки на блок.

Полный скрипт здесь: https://github.com/annamcabee/Block-Chain Перевод статьи Anna McAbee: Learning about Block Chain with PythonЗамечание: я добавила функции вывода в код BlockChain и в класс Block, чтобы результат тестирования был более читабельным. Я не включала функции вывода в код, вставленный в статью, чтобы он был более понятен.
Мы в Telegram — подписывайтесь





