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

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

广告位

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

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

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

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

什么是“优越”?

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

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

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

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

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

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

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

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

下标block 0,第一个block 1,第二个block 2,第三个block,但是区块链本身是变量,所以多个block的逻辑连接成一个序列,通常以指针的形式,指向内存中前一个block和下一个block的网络地址:

下标block one下标next下标0第一个block -11第二个block 02此外,每个block还存储前一个block的Hash。不连续的和随机的离散散列非常适合检查数据的完整性,因为如果输入数据改变哪怕一个字符,它产生的散列就会明显不同。说白了就是通过哈希算法把具体的数据哈希成相应的字符串,这些字符串可以验证块的合法性:

下标上一块的Hash内容,下一块,下一块,创建块,第一块-11,第二块,第三块的Hash值。需要注意的是,第一个块没有前一个块的哈希值,也称为“创建块”。这个街区是独特的。所有通过合法验证的区块都可以追溯到创建区块的位置。

换句话说,回溯路线上的所有区块都是合法的,没有被篡改的区块。

具体实施根据跨链的特点,我们应该首先实现区块链中的区块:

type block struct { data string hash string prevblockhash string }这里定义了一个有三个字段的结构,分别存储块数据、当前块数据的hashed hash和前一块数据的hash。

然后定义加密算法函数:

func sha 256(src string)string { m:=sha 256 . new()m . write([]byte(src))RES:=hex . encode tostring(m . sum(nil))return RES }这个函数可以将特定的数据散列成hash。

然后定义创建块功能:

Func init block(数据字符串)* block {block:=block {data,sha256 (data),' } return block}创建块不存储前一个块的hash,因为它是第一个打开大气的块。

然后声明创建一个普通的块函数:

Func nodeblock (data string,prev hash string)* block { block:=block { data,sha256 (data),prevhash} return block}该函数负责生成genesis块之后的块,并将存储前一块的数据hash。

开始创建创建块:

Newblock :=InitBlock('创建块数据')。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.println(新块)Block chain:=[]* Block { } Block chain=Append(区块链,新块)fmt.println(区块链)程序返回:

{创建块数据62 a034 a 244 fbffbf FDA 75 FBE 9 c 0 ca 7 b 86 e 40 ce 5329 c 957 c 180847 ed 210 e 1225 a }[0x 14000114180]这样创建块就“绕”好了,然后再添加普通块:

Block 2:=nodelock('第二块数据'区块链[len(区块链)-1]。哈希)区块链=append(区块链,block2) block3:=nodelock('第三块数据'区块链[len(区块链)-1]。哈希)区块链=追加(区块链,块3) fmt。println(区块链)每个普通块都会存储前一个块的数据哈希,程序返回:

{创建块数据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 }[0x 14000006 e 180][0x 1400006 e 1800 x 1400006 E1 e 0006 e 10]完整流程:

package main import(' crypto/sha 256 ' ' encoding/hex ' ' fmt ')type Block struct { Data string hash stringPrevBlockHash string } func sha 256(src string)string { m:=sha 256。new()m . Write([]byte(src))RES:=hex。EncodeToString(m . Sum(nil))return RES } func init Block(数据字符串)*Block {block :=Block{data,Sha256(数据),' ' }return block}func NodeBlock(数据字符串,prevhash字符串)*Block {block :=Block{data,Sha256(数据),prev hash } return Block } func main(){ new Block:=init Block('创建块数据')fmt。println (new block)区块链:=[] * block {}区块链=append(区块链,Newblock) fmt.println(区块链)block2:=nodeblock('第二块数据'区块链[len(区块链)-1]。哈希)区块链=追加(区块链,块2)块3:=节点锁('第三块数据'区块链[len(区块链)-1]。哈希)区块链=追加(区块链,块3) fmt。println(区块链)}至此,一个完整的区块链实体结构完成了。

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

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/qkl/56517.html

作者: 小王聊区块

上一篇
下一篇

发表回复

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

返回顶部