首页 web3.0 什么是区块链?用Go语言实现区块链技术 通过Golang秒懂区块链

什么是区块链?用Go语言实现区块链技术 通过Golang秒懂区块链

区块链技术并不是一个先进的概念。并不比量子力学、泡利不相容原理、哥德巴赫猜想更难理解,但也不是“时间就是金钱”这样简单的…

区块链是什么?用Go语言实现区块链技术,通过Golang秒懂区块链

区块链技术并不是一个先进的概念。并不比量子力学、泡利不相容原理、哥德巴赫猜想更难理解,但也不是“时间就是金钱”这样简单的道理。区块链实际上是一种协调组织记录的方法论,或者更准确地说,是一种去中心化的组织结构体系。

分权化众所周知,任何公司、组织或机构都遵循同一套组织结构原则,即“下属服从上级,少数服从多数”的原则。对于区块链科技来说,只遵循这个原则的后半部分,即“少数服从多数”,不存在“下级服从上级”。

此外,在区块链,根本没有所谓的“优越”概念。

什么是“优越”?

在大海航行的货船上,一定有一个船长在非洲大草原的狮子群中游荡,一定有一个狮子王。同样,狼群的头是头狼,猴子的头是孙悟空。在生活在地球上的群居动物中,很难找出一个没有“领袖”或“上级”的群体。

这是最简单的“集权”概念。绝对集权的制度负责制定制度规则,监督制度运行和制度的未来走向。集中式系统可以是个人,也可以是由多个个人组成的小组。中央集权制度之外的个人没有权力将自己中央化。

换句话说,绝对集权的体制往往会带来一种负面效应,即信息不对称。指集中的群体,集中的主体信息充足,往往处于有利地位,而其他信息贫乏的个体处于不利地位。

去中心化就是去掉绝对的中心化,所有的个体都是平等的,所有的行为都记录在数据块中,行为的合法性遵循“少数服从多数”的原则。

说白了,在一个班级里,没有“老师”这个概念,每个人都是学生,或者每个人都可以是“老师”,每个人都有能力主导个体行为,而行为的合法性需要所有个体“投票”来决定,这就是所谓的去中心化。

区块链区块链本质上是实现上述去中心化组织结构体系的容器,或者更准确地说,区块链是一种特殊的数据结构。

像其他基于数组的数据结构一样,区块链由一个接一个的块组成。它可以存储一个数据集和一些将块合并在一起的机制。

区块链有一个显著的特点,那就是秩序井然:

下标块

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。印刷网络(区块链)

}至此,一个完整的区块链实体结构完成。

结论通过戈朗实现具体的区块链结构,我们可以看到,所谓的“去中心化”并不是字面上的中心的去除,而是中心的多样化。任何节点都可以成为中心,任何中心都不是持久的。中心对每个节点没有强制作用,只需要达成“少数服从多数”的共识。

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: 大王不失守

为您推荐

杭州举行全国医保电子票据区块链应用启动仪式

来源:央视新闻客户端 今日(3月30日),全国医保电子票据区块链应用启动仪式在浙江省杭州市举行。医保电子票据区块链应用是...

工信部:到2025年进一步完善国家区块链和分布式记账技术标准体系

3月28日,工信部以《区块链和分布式记账技术标准体系建设指南(2023版)》(以下简称《指南》)公开征求意见。 《指南》...

解密区块链:从概念到应用的全面介绍

区块链是一种去中心化的分布式账本技术。其本质是一种数据结构,可以记录和验证交易信息,保证数据的安全性和可靠性。在区块链技...

赣州经济开发区“区块链”发展模式成效显著

来源:江西日报近日,工信部公示了2022年区块链典型应用案例名单。其中,赣州新联金融信息服务有限公司申报的“数字村链”入...

西班牙目前对区块链的态度如何?为区块链出台了哪些政策?

和西班牙在制定区块链政策方面落后于其他欧洲国家,但他们积极鼓励区块链技术的发展。 西班牙国家证券委员会和西班牙银行于20...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部