Говоря офутболя должен упомянуть об этомвозврат денег!
В 2019 году мой старый стол выиграл первую европейскую Национальную лигу, чтобы забить короля трофей! Вы смотрите на мой старый стол!
На недавно проведенном европейской чашке мы также можем увидеть тело блочной цепочки.Хотя это реклама
1. Кубок Европы и блокчейн
10 июня УЕФА объявил на своем официальном сайте, что Ant Chain, дочерняя компания Ant Group, стала глобальным партнером Кубка Европы 2020 года. УЕФА и Ant Chain подписали пятилетнее соглашение о сотрудничестве, в котором говорится, что они будут совместно изучать возможности применения блокчейна и других технологий, чтобы ускорить цифровую трансформацию футбольной индустрии и предоставить болельщикам по всему миру более качественные и насыщенные впечатления от просмотра.
Чжоу Ран, дизайнер наградного трофея, представил «Футбол — это универсальный язык мира, а блокчейн — это также «язык консенсуса», который укрепляет доверие между людьми. Они идеально подходят друг другу».
2. Введение в блокчейн
2.1 Концепция
В узком смысле
Блокчейн — это связанная структура данных, которая последовательно объединяет блоки данных в соответствии с временной последовательностью и представляет собой криптографически гарантированный неподдающийся изменению и подделке распределенный реестр.
Говоря в широком смысле
Технология блокчейна заключается в использовании структуры данных цепочки блоков для проверки и хранения данных, использовании алгоритма консенсуса распределенного узла для генерации и обновления данных, использовании криптографии для обеспечения безопасности передачи и доступа к данным, а также использовании интеллектуальных функций, состоящих из автоматизированных кодов сценариев. инфраструктура и вычислительная парадигма, использующая контракты для программирования и управления данными
2.2 Базовая технология
2.2.1 Хэш-операция
Данные реестра блокчейна в основном передаются через родительский блок.
哈希值
Структура цепочки формируется для обеспечения неизменности.
Алгоритм хеширования (алгоритм хеширования)
Основная функция: генерировать строку фиксированной длины, выполняя определенные вычисления на входе любой длины, а выходная строка называется хэш-значением входа.
пример:
Найдите его на Baidu在线Hash算法
Существует множество алгоритмов хеширования! Давайте использовать SHA-256 в качестве примера!Реализация кода языка Go:
MD5
package main
import(
"fmt"
"crypto/md5"
"encoding/hex"
)
func main(){
//方法一
data:=[]byte("hello world")
s:=fmt.Sprintf("%x",md5.Sum(data))
fmt.Println(s)
//方法二
h:=md5.New()
h.Write(data)
s= hex.EncodeToString(h.Sum(nil))
fmt.Println(s)
}
SHA-256
package main
import(
"fmt"
"github.com/nebulasio/go-nebulas/crypto/hash"
"encoding/hex"
"crypto/sha256"
)
func main(){
//方法一 一个方法直接输出
data:=[]byte("hello world")
hash:=hash.Sha256(data)
fmt.Println(hex.EncodeToString(hash))
sha256.New()
//方法二 按照步骤一步一步输出
h:= sha256.New() //创建sha256算法
h.Write(data) //用sha256算法对参数a进行加密,得到8个变量
hashTemp := h.Sum(nil)//将8个变量相加得到最终hash
fmt.Println(hex.EncodeToString(hashTemp))
}
Функции:
- вперед быстро
По данным можно
极短
Получите хеш-значение быстро и вовремя. - чувствительный к вводу
Если входная информация немного изменится, восстановленное значение хеш-функции будет таким же, как исходное значение хэш-функции.
天壤之别
. - обратная сложность
无法
существует短时间
Рассчитывается на основе хеш-значения原始
Входная информация, эта функция также является основой безопасности алгоритма хэширования и поэтому является важным компонентом современной криптографии. - Усилить столкновение
Другой ввод
很难
может производить相同
вывод хеша.
Кроме того:
-
Цепная структура блокчейна, построенная с помощью хэша, обеспечивает защиту от несанкционированного доступа.
-
Дерево Меркла, построенное с помощью хэша, позволяет быстро обнаруживать изменения содержимого.
2.2.2 Цифровая подпись
Цифровые подписи имеют важное применение в информационной безопасности, включая аутентификацию личности, целостность данных, неотказуемость и анонимность, и являются важной отраслью криптографии. Подписи относятся к криптографии с открытым ключом.
Процесс подписания:
Отправитель выполняет так называемую операцию шифрования отправленной информации с помощью собственного закрытого ключа и получает хеш-значение, которое является подписью. При использовании подпись и информация должны быть отправлены получателю. Получатель использует открытый ключ отправителя и полученную информацию для проверки подписи и ретроградной проверки.Если проверка пройдена, это означает, что полученная информация является полной и точной.В противном случае источник сообщения неверен.
Конкретный процесс цифровой подписи:
- Отправитель А вычисляет цифровую сводку исходных данных с помощью алгоритма хеширования и использует закрытый ключ в паре асимметричных ключей для шифрования цифровой сводки.Зашифрованные данные представляют собой цифровую подпись.
- Цифровая подпись отправляется вместе с исходными данными А любой стороне, которая проверяет подпись.
Процесс проверки цифровой подписи:
- Во-первых, сторона проверки подписи, обязательно удерживайте отправителя и превратимся в не открытую пару ключей
- После получения цифровой подписи и исходных данных A сначала используйте открытый ключ для расшифровки цифровой подписи, чтобы получить исходное значение дайджеста.
- Затем вычислите значение дайджеста исходных данных A с помощью того же алгоритма хеширования, а затем сравните, совпадает ли значение дайджеста, полученное при расшифровке, со значением дайджеста, полученным при пересчете.Если они совпадают, подпись передается.
2.2.3 Сеть P2P
одноранговая сеть, называемая p2p, одноранговая сеть. Все узлы в сети p2p равны, и сеть не зависит от центра.
2.2.4 Алгоритм консенсуса
концепция
Из-за высокой сетевой задержки в одноранговой сети последовательность транзакций, наблюдаемая каждым узлом, не может быть полностью согласованной. Следовательно, в системе блокчейна необходимо настроить механизм для достижения соглашения о порядке транзакций, которые происходят примерно в одно и то же время. Этот алгоритм достижения консенсуса по порядку транзакций во временном окне называется механизмом консенсуса.
- Алгоритм консенсуса: вычислительный алгоритм, в котором узлы достигают консенсуса в соответствии с правилами консенсуса.
- Правила консенсуса: в каждой цепочке блоков есть хорошо разработанные регулярные протоколы, и эти протоколы используют алгоритмы консенсуса для обеспечения правильной реализации правил консенсуса.
закон жизни
Существуют в основном следующие алгоритмы консенсуса:
- Доказательство работы PoW: Биткойн BTC, Ethereum ETH, Ethereum Classic и т. д.
- Proof of Stake PoS: ADA, Peercoin
- Делегированное доказательство работы DPoS: EOS, Asch, Steem
- Византийский отказоустойчивый BFT: практический византийский отказоустойчивый PBFT, производный BFT
- Алгоритм RAFT: ETCD
Сравнение нескольких алгоритмов
PoW | PoS | DPoS | Raft | PBFT | |
---|---|---|---|---|---|
Сцены | публичная сеть | Публичная сеть, сеть альянсов | Публичная сеть, сеть альянсов | Сеть Альянса | Сеть Альянса |
децентрализация | полностью | полностью | полностью | полунейтральный | полунейтральный |
учетный узел | вся сеть | вся сеть | избирать представителей | Выберите лидера | Динамическое решение |
Время отклика | 10 минут | 1 минута | около 3 секунд | секунды | секунды |
эффективность хранения | полная бухгалтерская книга | полная бухгалтерская книга | полная бухгалтерская книга | полная бухгалтерская книга | Полная книга + часть книги |
пропускная способность | О 7TPS | Около 15TPS | Около 300TPS или выше | тысячи или даже десятки тысяч | Около 10000TPS или выше |
Отказоустойчивость | 50% | 50% | 50% | 50% | 33% |
2.2.5 Смарт-контракт
определение:
Проще говоря, смарт-контракт — это компьютерная программа, которая автоматически запускается при выполнении определенных условий. Например, торговый автомат можно рассматривать как систему смарт-контрактов. Покупателям необходимо выбрать товар и заполнить
Функции:
- компьютерная программа оператор if-then
- Автоматическое исполнение при достижении соглашения
- цифровой контракт
- Вычислительная система автоматически применяет условия
особенность:
- Прозрачность данных: данные в блокчейне открыты и прозрачны для участников, а обработка данных также открыта и прозрачна.
- Immutable: все данные самой блокировки не могут быть подделаны, и код Smart Contract на Blockchain и выходные данные, сгенерированные операцией, также являются неизменными.
- Постоянная работа: количество узлов, поддерживающих сеть блокчейн, часто достигает сотен и даже тысяч, выход из строя некоторых узлов не приведет к остановке смарт-контракта, а его надежность теоретически близка к постоянной работе.
составляют:
- Участники: люди или организации, участвующие в транзакциях с цифровыми активами.
- Активы: вещи, которые имеют определенную ценность и приобретаются в качестве целей транзакций, которые могут быть конкретными или абстрактными.
- Транзакция: процесс, в котором участники запрашивают и передают активы.
- Леджер: база данных, которая фиксирует атрибуцию активов и факты их транзакций.
2.3 Особенности
2.3.1 прозрачный и заслуживающий доверия
- Бухгалтерия каждого гарантирует, что каждый имеет полную информацию, чтобы достичь прозрачности информации.
- В процессе принятия решений между узлами участвуют вместе, а консенсус гарантирует доверие
2.3.2 Прослеживаемость с защитой от несанкционированного доступа
Защита от несанкционированного доступа: после того, как транзакция проверена по всей сети и добавлена в блокчейн, ее трудно изменить или стереть.
Отслеживаемость: означает, что любая транзакция, которая происходит в блокчейне, полностью записывается, и мы можем отслеживать все исторические транзакции, связанные с ней в блокчейне для определенного состояния.
2.3.3 Гарантия конфиденциальности и безопасности
Поскольку любой узел в системе блокчейн содержит полную логику проверки блоков, любому узлу не нужно полагаться на другие узлы для завершения процесса подтверждения транзакций в блокчейне, то есть нет необходимости дополнительно доверять другим узлам.
2.3.4 Высокая надежность системы
- Каждый узел ведет одноранговую книгу и участвует в консенсусе всей системы.Если узел выходит из строя, вся система может работать нормально.
- Система блокчейна поддерживает византийскую отказоустойчивость. Хотя традиционная распределенная система также обладает высокой надежностью, она обычно может допустить только крах узлов в системе или проблему разделения сети. Система не будет работать должным образом.
3. Простой код для реализации блокчейна
Поля, необходимые для блока блокчейна
байт | поле | инструкция |
---|---|---|
4 | Версия | Номер версии блока, указывающий правила проверки, которым соответствует этот блок |
32 | хэш заголовка родительского блока | Хэш-значение корня дерева Меркла предыдущего блока также вычисляется с помощью SHA256. |
32 | Корень Меркла | Хаш-ценность корневой транзакции дерева Merkle в блоке также использует расчет SHA256. |
4 | отметка времени | Приблизительное время, генерируемое этим блоком, временная метка UNIX с точностью до секунды, должно быть строго больше, чем медиана времени первых 11 блоков.В то же время полный узел также отклонит те блоки, чья временная метка превышает его собственные два часа. . |
4 | Цель сложности | Целевая сложность алгоритма проверки работоспособности для этого блока, который был закодирован с использованием определенного алгоритма. |
4 | Nonce | В будущем мы найдем случайное число, соответствующее цели сложности.Чтобы решить проблему, что 32 случайных чисел недостаточно, когда вычислительная мощность растет, указанная отметка времени и информация о транзакции coinbase изменены, чтобы расширить число одноразовых цифр. |
**Примечание:** Блок не хранит хеш-значение, и узел самостоятельно вычисляет и сохраняет его локально после принятия блока.
3.1 Связанные с блоком:
-
Определение структуры блока Блок
Заголовок блока: 6 полей Тело блока: строка, представляющая данные
/*
1.定义一个区块的结构Block
a.区块头:6个字段
b.区块体:字符串表示data
*/
//区块
type Block struct {
Version int64 //版本
PerBlockHash []byte //前一个区块的hash值
Hash []byte //当前区块的hash值,是为了简化代码
MerKelRoot []byte //梅克尔根
TimeStamp int64 //时间抽
Bits int64 //难度值
Nonce int64 //随机值
//区块体
Data []byte //交易信息
}
- Предоставляет метод для создания блоков НовыйБлок(параметр)
提供一个创建区块的方法
NewBlock(参数)
*/
func NewBlock(data string ,prevBlockHash []byte) *Block {
var block Block
block = Block{
Version: 2,
PerBlockHash: prevBlockHash,
//Hash: []byte{}, //区块不存储hash值,节点接受区块后独立计算并存储在本地。
MerKelRoot: []byte{},
TimeStamp: time.Now().Unix(),
Bits: targetBits,
Nonce: 0,
Data: []byte(data),
}
// block.SetHash() //填充Hash
PoW:= NewProofOfWork(&block)
nonce , hash :=PoW.Run()
block.Nonce=nonce
block.Hash=hash
return &block
}
Также не забудьте блок генезиса
func NewGensisBlock() *Block{
return NewBlock("Genesis Block!",[]byte{})
}
- Определение структуры доказательства работы ProofOfWork блок | целевое значение
/*
3. 定义一个工作量证明的结构ProofOfWork
block
目标值
*/
type ProofOfWork struct {
block *Block
target *big.Int //目标值
}
-
Предоставьте способ создания PoW
NewProofWork (параметр)
/*
4. 提供一个创造PoW的方法
NewProofOfWork(参数)
*/
const targetBits = 24
func NewProofOfWork(block *Block) *ProofOfWork { //工作量证明
target := big.NewInt(1) //000....001
target.Lsh(target,uint(256-targetBits)) //将1向左移动 //ox00000010000000..00
pow:=ProofOfWork{
block: block,
target: target,
}
return &pow
}
func (pow *ProofOfWork) PrepareData(nonce int64) []byte {
// 源码里面是要传二维切片 func Join(s [][]byte, sep []byte) []byte
block := pow.block
tmp :=[][]byte{
IntToByte(block.Version),
block.PerBlockHash,
block.MerKelRoot,
IntToByte(block.TimeStamp),
IntToByte(block.Bits),
IntToByte(block.Nonce),
}
data:=bytes.Join(tmp,[]byte{}) //之后再计算hash
return data
}
-
Предоставьте метод вычисления хэш-значения
Run()
/*
5. 提供一个计算哈希值的方法
Run()
*/
func (pow *ProofOfWork)Run() (int64,[]byte) {
//1.凭借数据
//2.哈希值转成big.Int类型
var hash [32]byte
var nonce int64 = 0
var hashInt big.Int
fmt.Println("开始挖矿了!")
fmt.Printf("难度 target hash : %x\n" ,pow.target.Bytes())
for nonce < math.MaxInt64 {
data:=pow.PrepareData(nonce)
hash = sha256.Sum256(data)
// Cmp compares x and y and returns:
//
// -1 if x < y
// 0 if x == y
// +1 if x > y
//
hashInt.SetBytes(hash[:])
if hashInt.Cmp(pow.target) == -1 {
fmt.Printf("Found ,nonce :%d ,hash :%x \n",nonce,hash)
}else {
//fmt.Printf("Not Found ,current nonce :%d ,hash :%x \n",nonce,hash)
nonce++
}
}
return nonce,hash[:]
}
-
предоставить функцию проверки
IsValid()
/*
6. 提供一个校验函数
IsValid()
*/
func (pow *ProofOfWork)IsValid() bool{
var hashInt big.Int
data := pow.PrepareData(pow.block.Nonce)
hash:=sha256.Sum256(data)
hashInt.SetBytes(hash[:])
return hashInt.Cmp(pow.target) == -1 //如果是-1就是找到了就是
}
3.2 Блокчейн
-
Определить структуру блокчейна BlockChain
Блочный массив
/*
1. 定义一个区块链结构BlockChain
Block数组
*/
type BlockChain struct {
blocks []*Block
}
-
Предоставьте метод для создания BlockChain()
Новая цепочка блоков ()
/*
2. 提供一个创建BlockChain()的方法
NewBlockChain()
*/
func NewBlockChain() *BlockChain {
block := NewGensisBlock()
return &BlockChain{blocks:[]*Block{block}} //创建只有一个元素的区块链,初始化
}
-
Предоставляет метод для добавления блоков
AddBlock(параметр)
/*
3. 提供一个添加区块的方法
AddBlock(参数)
*/
func (bc *BlockChain)AddBlock(data string) {
PerBlockHash := bc.blocks[len(bc.blocks)-1].Hash //这一个区块的哈希是前一块的哈希值
block := NewBlock(data,PerBlockHash)
bc.blocks = append(bc.blocks,block)
}
Простой блокчейн делает это возможным!
Наконец
Сяошэн Фаньи, с нетерпением жду вашего внимания.