Как создать свой блокчейн с нуля при помощи Go? Часть 3

первой и второй частях мы пошагово разобрали процесс создания генезис блока и интерфейса командной строки. В последней части мы расскажем как сделать базу данных неизменной и для чего это нужно.Клиент бара BabaYaga слишком увлекся инвестированием. Он забыла, что подходит срок оплаты аренды, и у нее не осталось свободных средств. Баба Яга звонит хозяину квартиры Цезарю.Баба Яга: Привет, Цезарь. Мне очень жаль, но у меня нет денег заплатить за квартиру в этом месяце.Цезарь: Это еще почему?Баба Яга: Ну, ICO Blockchain Bar предлагали огромные бонусы и я купил токенов на $2000 всего за $1000. Это была отличная сделка!Цезарь: Что за дичь? Что за ICO? Что за токены? Заплати мне нормальными деньгами.Баба Яга: Давай так – я дам тебе 1000 TBB токенов, которые стоят $1000. Ты можешь потратить их в баре и расплачиваться за выпивку! Я позвоню владельцу бара, и он быстренько переведет тебе токены.Цезарь: Ну ладно, я их приму.Андрей проводит транзакцию, но решает снять 50 TBB комиссии за потраченное время. Ему-то самому этого, конечно, не хочется, но акционеры бара требуют приносить прибыль как можно быстрее. “Баба Яга все равно не заметит крошечной комиссии”, – подумал Андрей. В конце-концов, доступ к базе данных есть только у него.Баба Яга заходит в бар отмечать свой день рождения.Баба Яга: Привет, Андрей! Сегодня мой день рождения! Давай свою самую дорогую бутылку!Андрей: С днем рождения! Вот, прошу – водка Crystal Head. Но тебе нужно докупить еще один TBB токен. Бутылка стоит 950 TBB, а у тебя на балансе всего 949.Баба Яга: В смысле?? У меня на балансе должно быть 999 TBB!Андрей: Перевод денег Цезарю стоил тебе 50 токенов.Баба Яга: Это недопустимо! Я бы никогда не согласился на такую комиссию. Так нельзя делать, Андрей. Я доверил твоей системе, а ты меня кинул. Так не пойдет.Андрей: Ладно, послушай. Ты мой самый частый клиент, и я не хотел с тебя стягивать деньги, но меня заставили акционеры. Давай я перепишу систему и сделаю ее полностью прозрачной и децентрализованной. Если все смогут взаимодействовать с баром без моего посредничества, это должно повысить уровень доверия!1. Заказ напитков будет занимать секунды, а не минуты2. Пользователи, которые забыли кошельки дома, могут одалживать токены друг у друга.3. Если у всех есть копия базы данных, владелец не может ее потерять.4. База данных будет неизменна, никто не сможет внести правки в нее.5. Если акционеры захотят поднять комиссии или представить новые механизмы, все участники будут в курсе и смогут согласиться или отказаться от изменений. Баба Яга: Звучит, конечно, хорошо. Ты уверен, что это выполнимо?Андрей: Думаю да.Баба Яга: Ну тогда иди и занимайся своими блокчейнами.Если Андрей хочет выяснить как создать неизменную базу данных, сначала ему нужно узнать почему остальные базы данных изначально изменяемы. Он решил изучить базу данных MySQL:В MySQL DB любой, у кого есть доступ, может внести изменение в таблицу:В таблице можно изменять значения разных строчек, так как каждая строчка не зависит от других. Но если бы строчки и состояние таблицы были связаны друг с другом (например, изменение строчки генерирует совершенно новую таблицу), то Андрей смог бы достичь желаемой неизменности.Процесс хэширования – это преобразование данных произвольного размера в короткую строку определенного размера. Любое изменение изначальных данных приведет к созданию нового хэша.Блокчейну также необходим определенный уровень безопасности, поэтому Андрей добавляет криптографическую хэш функцию со следующими свойствами:1. Детерминированная – одинаковое сообщение всегда будет иметь одинаковый хэш2. Небольшое изменение в сообщении полностью изменяет хэш3. Имея в наличии хэш невозможно сгенерировать изначальное сообщение, только перепробовав все возможные варианты4. Невозможно найти два разных сообщения с одинаковым хэшем.Андрей модифицирует функцию Persist(), что бы она делала Snapshot хэша каждый раз, когда сохраняется новая транзакция.Snapshot производится новой функцией sha256 secure hashing
Когда новая транзакция записывается в файл tx.db , Persist() хэширует весь файл и возвращает 32-байтный хэш-отпечаток.
С этого момента каждый клиент может 100% конфиденциально и безопасно получить нужный набор данных при помощи нужного снимка.1. Запустите команду tbb balances list и проверьте совпадают ли балансы.2. Уберите две последние строчки из ./database/tx.db и проверьте балансы заново.3. Выплатим награду Андрею за два дня работы:Транзакция 1Транзакция 24. Запустите команду tbb balances list и убедитесь, что все снимки хэшей совпадают с изначальными.
Готово!Так как криптографическая хэш функция sha256 производит одинаковую строку при одинаковых входных данных вы можете повторить эти шаги на своем компьютере и сгенерировать такую же базу данных и такие же хэши!Блокчейн – это неизменная база данных. Общее количество токенов, начальные балансы пользователя и общие настройки блокчейна задаются в генезис файле. Балансы в генезис файле отображают изначальное состояние блокчейна и никогда не изменяются.
Изменения в базе данных называются транзакциями. Транзакции – это события внутри системы, которые записываются на блокчейн.Информация в базе данных управляется криптографической хэш функцией. Участники блокчейна используют хэш для того, чтобы указать на определенное состояние базы данных.Подписывайтесь на ForkNews в Telegram, чтобы быть в курсе новостей из мира криптовалют

Это также будет Вам интересно:

Источник

Интересное по теме
06.04.21
Пара заключила брак в блокчейне Эфириума и использовала кольца в виде NFT-токенов. Во сколько это обошлось?
30.08.21
Standard Chartered запускает блокчейн торговую платформу
21.12.20
Мишустин поручил проверить выплаты медработникам в Нижегородской области
22.12.20
Полиция снова сможет доставлять граждан в вытрезвители
25.04.21
Глава ЦБ Турции отрицает полный запрет криптовалюты
iMag.one - Самые важные новости достойные вашего внимания из более чем 300 изданий!