В этой серии статей мы создадим упрощенную криптовалюту, основанную на простой реализации блокчейна в Golang, менее чем за 5 минут. вам нужно сначала установить golang, чтобы создать этот проект. для текстового редактора вы можете использовать что угодно, здесь я использую код Visual Studio.
Вы установили его? Хорошо, давайте сделаем это!
если вы создали проект, создайте файл mайн.гоу. Хорошо, давайте напишем код, сначала мы начнем с main.go. Давайте начнем со структуры Block, которая является частью «блокчейна». В блокчейне это блоки, в которых хранится ценная информация. Например, биткойн блокирует транзакции хранилища, что составляет суть любой криптовалюты. Помимо этого, блок содержит некоторую техническую информацию, такую как его версия, текущая временная метка и хэш предыдущего блока. В этой статье мы не собираемся реализовывать блок так, как он описан в спецификациях блокчейна или Биткойна, вместо этого мы будем использовать его упрощенную версию, которая содержит только важную информацию. Вот как это выглядит. здесь у нас есть структурный блок:
тип Блоковая структура {временная метка time.Timeтранзакции []строкапредварительный хэш []байтХэш []байт}
Timestamp
текущая временная метка (когда блок создан), transactions
— это реальная ценная информация, содержащаяся в блоке, prevhas
сохраняет хэш предыдущего блока и Hash
это хеш блока. В спецификации Биткойн Timestamp
, prevhash
и Hash
— это заголовки блоков, образующие отдельную структуру данных, и транзакции (transaction
в нашем случае) — это отдельная структура данных. Поэтому мы смешиваем их здесь для простоты.
Итак, как нам рассчитать хэши? Способ расчета хешей — очень важная особенность блокчейна, и именно эта функция делает блокчейн безопасным. Дело в том, что вычисление хеша — это вычислительно сложная операция, она занимает некоторое время даже на быстрых компьютерах (именно поэтому люди покупают мощные графические процессоры для майнинга биткойнов). Это преднамеренный архитектурный дизайн, который затрудняет добавление новых блоков и предотвращает их модификацию после добавления. Мы обсудим и реализуем этот механизм в следующей статье.
На данный момент мы просто возьмем поля блоков, объединим их и вычислим хэш SHA-256 для объединенной комбинации. Давайте сделаем это в Newhash
Метод:
func NewHash(время time.Time, транзакции []строка, предварительный хеш []байт) []байт {ввод: = добавление(prevhash, time.String()...)для транзакции := диапазон транзакций {ввод = добавление (ввод, строка (руна (транзакция))...)}хеш:= sha256.Sum256(вход)вернуть хэш[:]}
Далее, следуя соглашению Golang, мы реализуем функцию, которая упростит создание блока и завершит работу:
func Blocks(транзакции []строка, предварительный хэш []байт) *Block {текущееВремя:= время.Сейчас()вернуть &Заблокировать{временная метка: время.Время{},транзакции: транзакции,превхэш: превхэш,Хэш: NewHash(currentTime, транзакции, предварительный хеш),}}
продолжаем создавать функцию печати. функция печати полезна для печати содержимого каждого блока, выполняющего транзакцию. вот код:
func Print(блок *Блок) {fmt.Printf("время: %sn", block.timestamp.String())fmt.Printf("tprevhash: %xn", block.prevhash)fmt.Printf("thash: %xn", block.Hash)}
И функция транзакции для транзакции печати:
func Transaction(block *Block) {fmt.Println("tTransactions:")для i транзакция := range block.transactions {fmt.Printf("tt%v: %qn", i, транзакция)}}
после того, как все необходимые функции будут выполнены, мы будем использовать его в основной функции:
func main () {ryan := []string{"Рьянди отправил Резе 50 BTC"}блок_1 := Блоки(райан, []байт{})fmt.Println("Это наш первый блок")Печать(блок_1)Транзакция(блок_1)jack := []string{"Джек, отправь 20 BTC Рейнольдсу"}блок_2 := Блоки(джек, блок_1.Хеш)fmt.Println("Это наш второй блок")Печать(блок_2)Транзакция(блок_2)}
окей, весь код мы закончили писать. давайте запустим его, набрав go run main.go в терминале. Выход :
Заключение
Мы создали очень простой прототип блокчейна: это просто массив блоков, каждый из которых связан с предыдущим. Однако реальный блокчейн гораздо сложнее. В нашем блокчейне добавление новых блоков происходит легко и быстро, но в реальном блокчейне добавление новых блоков требует некоторой работы: необходимо выполнить некоторые тяжелые вычисления, прежде чем получить разрешение на добавление блоков (этот механизм называется Proof-of-Work). Кроме того, блокчейн — это распределенная база данных, в которой нет единого лица, принимающего решения. Таким образом, новый блок должен быть подтвержден и одобрен другими участниками сети (этот механизм называется консенсусом). А в нашем блокчейне пока нет транзакций!
- "
- Все
- гайд
- статьи
- Bitcoin
- блокчейн
- BTC
- строить
- купить
- код
- компьютеры
- связи
- Консенсус
- содержание
- продолжать
- криптовалюта
- Текущий
- данным
- База данных
- Проект
- редактор
- БЫСТРО
- Особенность
- Поля
- Во-первых,
- следовать
- форма
- функция
- будущее
- GV
- хэш
- здесь
- Как
- hr
- HTTPS
- ia
- информация
- IP
- IT
- средний
- сеть
- Другое
- Люди
- предупреждение
- Проект
- Доказательство-оф-работы
- ассортимент
- Run
- Серии
- просто
- So
- Начало
- магазин
- магазины
- Технический
- время
- сделка
- Сделки
- W
- Работа
- письмо