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

В этом гайде вы узнаете:1. Как разработать Go проект на своем компьютере без опыта работы с Golang.2. Как создать и распределить блокчейн токены.3. Как разработать базу данных CLI на языке Golang с нуля.4. Как сделать свою базу данных неизменной при помощи криптографической хеш функции.5. Как мало прав есть у пользователей самых популярных приложений.Начнем с истории разработки распределенного реестра. Нашего главного героя зовут Андрей. Днем он владелец бара, а ночью – разработчик ПО. Он живет в небольшом городе на востоке Словакии под названием Ба́рдеёв.Андрей устал:1. Программировать старомодные PHP/Java/Javascript приложения.2. Забывать сколько клиенты должны за неоплаченные шоты.3. Тратить время на пересчет монет, купюр и выдачу сдачи.4. Выдавать пластиковые монетки, по которым посетители могут играть в настольный футбол и прочие игры.Андрей хотел бы:1. Иметь понятную и прозрачную финансовую историю активности бара и продаж, благодаря которой он бы мог легко соблюдать все регулирующие нормы.2. Превратить свой бар в автономную, децентрализованную и безопасную среду, которая бы приносила прибыль и ему и его клиентам.Его цель – написать простую программу, которая бы следила за балансами его клиентов в виртуальной форме. Андрей пишет:Он продолжает:Теперь, когда мы знаем цель Андрея, можем приступать к разбору.Для полного понимания рекомендуется 2+ года опыта программирования на Java/PHP/Javascript или на другом языке, похожем на Golang. Посоветуем также пройти официальный курс A Tour Of Go, чтобы ознакомиться с синтаксисом языка и основными концепциями (это займет около 20 минут).Андрей занимался базами данных SQL в 90х. Он знает как сделать и оптимизировать продвинутое решение. Для создания базы он выбрал простой но надежный файл JSON. Разберем процесс создания блокчейна пошагово.Андрей генерирует 1 миллион токенов. У каждого блокчейна есть генезис-блок, который распределяет первые токены ранним участникам. Начинается все просто – с обыкновенного genesis.json.Андрей создает файл ./database/genesis.json, в котором определяет что на его блокчейне будет 1 миллион токенов и все они будут принадлежать ему. Дальше он занимается ценообразованием – присуждает каждому токену стоимость в евро, долларах или другой валюте. 
Он также решает, что должен получать 100 токенов в день за поддержание базы данных.Наш герой готов принимать токены в своем баре. К сожалению, никто к нему не заходит, поэтому он заказывает три рюмки водки для себя и записывает эту сделку в бумажную базу данных:
Для того, чтобы постоянно не пересчитывать балансы клиентов, андрей создаёт файл ./database/state.json.База данных выглядит следующим образом:Чтобы привлечь новых клиентов Андрей объявляет об акции – он предоставит 100% бонус на покупку токенов TBB в следующие 24 часа. Маркетинговый ход сработал. Его первый клиент под ником BabaYaga купил TBB на €1000 и, чтобы отметить событие, потратил один токен на рюмку водки.Транзакция, записанная на бумаге:
База данных выглядит следующим образом:Андрей решил немного отдохнуть, поиграть в видеоигры и почистить свой жесткий диск от старых фотографий. К несчастью, он случайно нажал Enter когда вводил команду удаления в терминале sudo rm -rf /Все его файлы, в том числе Genesis.json и State.json его бара исчезли. Поскольку наш герой имеет опыт в разработке, он не растерялся. Хотя у него не было бэкапа, у него было кое-что получше – листик бумаги, на котором записаны все транзакции в его базе данных. Теперь ему нужно только заново провести все транзакции и база данных восстановится.Он решает улучшить свою базу данных MVP архитектурой, построенной на событиях. (Event-based architecture). Каждое действие а баре, вроде единичной покупки напитка, должно быть записано в базу данных блокчейна.Каждый клиент будет представлен в базе данных при помощи структуры Account.Каждая транзакция будет иметь четыре характеристики: откуда, куда, размер и данные. Генезисная база данных останется файлом JSON:Все транзакции, ранее записанные на куске бумаги, будут хранится в локальной текстовой базе данных tx.db:Ключевым компонентом базы данных, отвечающим за бизнес-логику будет структура State:Структура State будет знать балансы всех пользователей, а также адресата, отправителя, и сумму транзакций. State считывает начальные балансы пользователей с файла genesis.json.После этого изначальные балансы обновляются, заново проигрывая все события из базы данных tx.db.Компонент State отвечает за:Добавление транзакций в мемпул:Подтверждение транзакций:

Сохранение транзакций на диск:
Продолжение следует. В следующих частях мы рассмотрим процесс создания интерфейса командной строки, основные свойства хэш функции и как работает неизменность блокчейна на практике.Подписывайтесь на ForkNews в Telegram, чтобы быть в курсе новостей из мира криптовалют По материалам www.freecodecamp.org

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

Источник

iMag.one - Самые важные новости достойные вашего внимания из более чем 300 изданий!