drimwai的博客

区块链基本概念详解 -- 带你了解完整的区块链

##前言:这篇post,博主会介绍区块链的所有基本概念,包括区块链的定义、结构、挖矿机制和过程。所有的相关内容都是博主通过查找中文文献、英文survey和实验代码总结而出,希望能对您有所帮助。

 

##参考文献:

https://wiki.mbalib.com/wiki/区块链

https://learnku.com/python/t/22970/build-your-own-block-chain-step-by-step-with-python

https://www.youtube.com/watch?v=g_fSistU3MQ

**特别推荐李永乐老师的视频讲解

//英文Survey

[1] Li, Xiaoqi, Peng Jiang, Ting Chen, Xiapu Luo, and Qiaoyan Wen. "A survey on the security of blockchain systems." Future Generation Computer Systems (2017).

[2] Salman, Tara, Maede Zolanvari, Aiman Erbad, Raj Jain, and Mohammed Samaka. "Security services using blockchains: A state of the art survey." IEEE Communications Surveys & Tutorials 21, no. 1 (2018): 858-880.

[3] Yang, Ruizhe, F. Richard Yu, Pengbo Si, Zhaoxin Yang, and Yanhua Zhang. "Integrated blockchain and edge computing systems: A survey, some research issues and challenges." IEEE Communications Surveys & Tutorials 21, no. 2 (2019): 1508-1532.

 

##1. 区块链的定义:什么是区块链?

区块链的本质是一个去中心化和去信任方式维护的数据库。该数据库是由一个又一个前后相关联的块组成的,并被所有的用户共同保存。任何人在任何时间都能通过相同的技术标准加入自己的信息,从而满足各种需求带来的数据录入的需要。这些交易数据会在一个固定的时间段内被加入一个块中,并以哈希的方式与前一个块连接在一起。至于,谁负责录入这个块进数据库并通知其他用户,这里就要通过解决一个哈希问题来竞争上岗了。每当这个胜出的用户录入块进去区块链后,会获得一定的比特币作为奖励 --- 我们也称这个过程为挖矿。

 

##2.区块链的结构

1573040619142833.png

1节点角色:区块链的结构如上所示,我们从上到下进行讲解。首先,在区块链中有两种节点角色,矿机和普通的交易户口。矿机就是主要维护区块链的角色,在挖矿获得报酬的同时,也记录着不同时间段内的交易信息。交易户口就是一般人进行比特币投资的户口,这种户口只进行着比特币的点对点交易。

2区块链结构:一个区块链的块主要由块头和块内容组成。块内容用于记录比特币的交易信息。块头主要用于记录连接信息,前一个块的哈希值(Pre_Hash)和哈希难问题的答案(Nonce)

3区块的连接

A. 哈希函数:想要了解区块链连接方法,我们必须先了解什么是哈希函数。哈希函数是一种映射函数。SHA256就是一种最常用的哈希函数,用于把输入值映射为一个256 bits、唯一且不可逆推的值。

B. 区块的连接:

Pre_Hash = SHA256(SHA256(Pre_Block, Timestamp, Nonce))

通过上面的公式,我们可以把两个连续的块连接起来。连接方式为:将前一个块的值和本块答案被影射入同一个哈希值Pre_Hash中。

** 根据这种连接方式,区块链具有可追溯性和不可修改性。如果要修改某一个块,那么必须也修改这个块的后面所有块的哈希值,以保证块间的一致性。

 

##3. 区块链的运作过程

###3.1注册过程:

在区块链中,每个节点都保存着一份完整的节点目录。当有新用户加入成为节点时,这个用户需要向其他用户(通常为seed SDN)请求一份完成的节点目录和区块链。

 

###3.2挖矿过程:挖矿其实是一个暴力求解Nonce的过程。其伪代码如下:

Nonce=0, Ans=false
while Ans==false then
  Pre_Hash = SHA256(SHA256(Pre_Block, Timestamp, Nonce))
  Nonce = Nonce + 1
  if Pre_Hash < difficulty
    Ans=true
  end if
end while

第一个能够求得小于预设难度(difficulty)Nonce值的节点,便成功挖矿,并获得一定的比特币作为奖励。其他的节点首先对该挖矿得出的块进行检查,通过带入Nonce,看是否得出相同的Pre_Hash。如果正确无误,他们便会转向下一个块的竞争。通常,difficulty是要求Pre_Hash前面有连续的n个零。n越大,则求得Nonce越困难。凭借difficulty,区块链便可以把区块创建的速度控制在一定范围内。

 

###3.3 同步过程:

当我们需要采用竞争的手段(挖矿)进行区块链的操作时,便会出现一种多分枝现象(Blockchain Forks)。这种现象是由于两个或者多个节点在近似的时间内都求得Nonce导致的,如下:

1573040059376134.png

此时,为了保证区块链的一致性。我们需要采用最长链原则。即所有的节点都会以当前最长的那条区块链为准。同步过程即把当前链同步为保存在所有节点中最长的那条链。

** 有了最长链原则,黑客若要伪造一条假链进行交易信息的更改(赖账、多重支付等),他便需要与全网的其他矿机节点进行对抗。

 


drimwai的博客
drimwai的博客
使用条款和私隐条款。版权所有,保留一切权利。
Copyright by drimwai Liang (2018-2020). All Right Reserved.