区块链技术并不是一个先进的概念。并不比量子力学、泡利不相容原理、哥德巴赫猜想更难理解,但也不是“时间就是金钱”这样简单的道理。区块链实际上是一种协调组织记录的方法论,或者更准确地说,是一种去中心化的组织结构体系。
分权化众所周知,任何公司、组织或机构都遵循同一套组织结构原则,即“下属服从上级,少数服从多数”的原则。对于区块链科技来说,只遵循这个原则的后半部分,即“少数服从多数”,不存在“下级服从上级”。
此外,在区块链,根本没有所谓的“优越”概念。
什么是“优越”?
在大海航行的货船上,一定有一个船长在非洲大草原的狮子群中游荡,一定有一个狮子王。同样,狼群的头是头狼,猴子的头是孙悟空。在生活在地球上的群居动物中,很难找出一个没有“领袖”或“上级”的群体。
这是最简单的“集权”概念。绝对集权的制度负责制定制度规则,监督制度运行和制度的未来走向。集中式系统可以是个人,也可以是由多个个人组成的小组。中央集权制度之外的个人没有权力将自己中央化。
换句话说,绝对集权的体制往往会带来一种负面效应,即信息不对称。指集中的群体,集中的主体信息充足,往往处于有利地位,而其他信息贫乏的个体处于不利地位。
去中心化就是去掉绝对的中心化,所有的个体都是平等的,所有的行为都记录在数据块中,行为的合法性遵循“少数服从多数”的原则。
说白了,在一个班级里,没有“老师”这个概念,每个人都是学生,或者每个人都可以是“老师”,每个人都有能力主导个体行为,而行为的合法性需要所有个体“投票”来决定,这就是所谓的去中心化。
区块链区块链本质上是实现上述去中心化组织结构体系的容器,或者更准确地说,区块链是一种特殊的数据结构。
像其他基于数组的数据结构一样,区块链由一个接一个的块组成。它可以存储一个数据集和一些将块合并在一起的机制。
区块链有一个显著的特点,那就是秩序井然:
下标块
0第一块
1第二块
2第三个块,但是区块链本身是可变的,所以多个块的逻辑连接成一个序列,通常以指针的形式,指向内存中上一个块和下一个块的网络地址:
下标块,一个下标和下一个下标。
0第一个块-1
1秒块02另外,每个块还存储前一个块的Hash。不连续的和随机的离散散列非常适合检查数据的完整性,因为如果输入数据改变哪怕一个字符,它产生的散列就会明显不同。说白了就是通过哈希算法把具体的数据哈希成相应的字符串,这些字符串可以验证块的合法性:
将前一个块的哈希内容下标到前一个块和下一个块。
0创建块第一个块-1
1哈希第二个块0 2
2哈希第三块2 3需要注意的是,第一块没有前一块的哈希值,也叫“创世块”。这个街区是独一无二的,所有通过合法验证的街区都可以追溯到创世街区所在地。
换句话说,回溯路线上的所有区块都是合法的,没有被篡改的区块。
具体实施根据跨链的特点,我们应该首先实现区块链中的区块:
类型块结构{
数据串
哈希字符串
PrevBlockHash字符串
}这里定义了一个结构,有三个字段,分别存储块数据、当前块数据的hash和前一块数据的hash。
然后定义加密算法函数:
func Sha256(src字符串)字符串{
m :=sha256。新()
米(meter的缩写))写入([]字节(src))
res :=十六进制。编码字符串(m.Sum(零))
返回资源
}这个函数可以将特定的数据散列成一个散列。
然后定义创建块功能:
func InitBlock(数据字符串)*Block {
block :=Block{data,Sha256(data),' ' }
导回滑轮
} Genesis块不存储前一个块的hash,因为它是第一个打开大气层的块。
然后声明创建一个普通的块函数:
func NodeBlock(数据字符串,prevhash字符串)*Block {
block :=Block{data,Sha256(data),prevhash}
导回滑轮
}该函数负责生成创建块之后的块,并将存储前一个块的数据哈希。
开始创建创建块:
Newblock :=InitBlock('创建块数据')
Fmt。Println(newblock)数据返回:
{创建块数据62 a034 a 244 fbffbffda 75 FBE 9 c 0 ca 7 b 86 e 40 ce 5329 c 957 c 180847 ed 210 e 1225 a }然后声明区块链对象:
区块链:=[]*Block{}这里我们用slice,slice的每个元素都是指向区块结构的指针。
将创建块添加到区块链:
Newblock :=InitBlock('创建块数据')
fmt。新块
区块链:=[]*Block{}
区块链=追加(区块链,新块)
fmt。Println(区块链)程序返回:
{创建块数据62 a034 a 244 ffbffbffda 75 Fe 9 c 0 ca 7 b 86 e 40ce 5329 c 957 c 180847 ed 210 e 1225 a }
[0x14000114180]这样把创世块“绕”起来,再加上普通块:
Block2 :=NodeBlock('第二块数据'区块链[len(区块链)-1]。哈希)
区块链=追加(区块链,块2)
Block3 :=NodeBlock('第三块数据'区块链[len(区块链)-1]。哈希)
区块链=追加(区块链,块3)
Fmt。Println(区块链)每个普通块都会存储前一个块的数据哈希,程序返回:
{创建块数据62 a034 a 244 ffbffbffda 75 Fe 9 c 0 ca 7 b 86 e 40ce 5329 c 957 c 180847 ed 210 e 1225 a }
[0x1400006e180]
[0x 1400006 e 1800 x 1400006 E1 e 00x 1400006 e 210]完整流程:
主包装
导入(
加密/sha256 '
'编码/十六进制'
' fmt '
)
类型块结构{
数据串
哈希字符串
PrevBlockHash字符串
}
func Sha256(src字符串)字符串{
m :=sha256。新()
米(meter的缩写))写入([]字节(src))
res :=十六进制。编码字符串(m.Sum(零))
返回资源
}
func InitBlock(数据字符串)*Block {
block :=Block{data,Sha256(data),' ' }
导回滑轮
}
func NodeBlock(数据字符串,prevhash字符串)*Block {
block :=Block{data,Sha256(data),prevhash}
导回滑轮
}
func main() {
Newblock :=InitBlock('创建块数据')
fmt。新块
区块链:=[]*Block{}
区块链=追加(区块链,新块)
fmt。印刷网络(区块链)
Block2 :=NodeBlock('第二块数据'区块链[len(区块链)-1]。哈希)
区块链=追加(区块链,块2)
Block3 :=NodeBlock('第三块数据'区块链[len(区块链)-1]。哈希)
区块链=追加(区块链,块3)
fmt。印刷网络(区块链)
}至此,一个完整的区块链实体结构完成。
结论通过戈朗实现具体的区块链结构,我们可以看到,所谓的“去中心化”并不是字面上的中心的去除,而是中心的多样化。任何节点都可以成为中心,任何中心都不是持久的。中心对每个节点没有强制作用,只需要达成“少数服从多数”的共识。