2022GO创建区块链,使用教程GO实现一个简单的区块链-

当前位置:首页 > 币圈百科 > 2022GO创建区块链,使用教程GO实现一个简单的区块链-

2022GO创建区块链,使用教程GO实现一个简单的区块链-

2022-09-29币圈百科250

自互联网以来,链技术被一些人称为最有影响力的发明。尽管公众将区块链解释为投机性加密货币的同义词,但区块链实际上在现代世界有着令人难以置信的广泛应用。实际上,加密货币只是区块链领域的一小部分,许多生产中的解决方案都是由私人组织领导的。

GO创建区块链,怎么用GO实现一个简单的区块链?

随着区块链技术的飞速发展,技术领域的专业人士越来越需要了解区块链的基本知识及其技术影响力。

毕竟,实现自己的区块链实际上并没有听起来那么复杂。在本文中,我们将使用2021年最流行的编程语言之一GoLang来实现基本的区块链。那么,我们开始吧!

了解区块链

区块链是为数不多的名副其实的技术。我们可以把区块链想象成通过哈希相互连接的信息块,哈希是从输入数据生成的加密固定输出。因为每个块通过散列相互引用,所以不可能在不彻底改变链的其余部分的情况下改变链的任何部分。

区块链中的每个块可以包含几乎任何内容的数据。一个基本框架将包括每个区块过去交易的所有记录。比特币的工作方式类似,这就是为什么你可以一直跟踪比特币交易,直到Satoshi第一次进行加密货币交易。

下面我们有三个块来创建区块链。首先是创作区块。因为之前什么都没有,所以之前的哈希字段是空的。我们仍然使用时间戳属性和初始事务作为哈希算法的输入。算法会吐出一堆数字和字母,代表Genesis块的哈希值。

转到块2,我们使用创建块的散列值作为块2的先前散列值。这个动作连接了创建块和第二个块!接下来,我们使用时间戳、事务列表和先前的散列值作为我们的散列算法的输入。该算法将为我们提供一个新的散列值来表示块2。

我们将继续重复该过程任意次,除了块的有效性和存储区块链的能力(比特币的区块链约为330 2022蓑衣网小编 GB)之外,没有任何其他限制。

在Go中创建一个简单的区块链

创建我们的区块链的第一步是定义什么是块。Go让我们的生活更容易创建自定义类型。我们可以使用下面的代码在块中定义类型。这里,块结构有四个字段来匹配上面的图表。

type block struct { timestamp time . time transactions[]string prev hash[]byte hash[]byte }

下一步是创建构造函数的Go版本,以创建新的块。这个函数的输入2022蓑衣网小编将使用一个字符串数组来表示事务,使用一个字节数组来表示对应于先前生成的块的先前散列值。下一个要研究的NewHash()函数是我们接下来要实现的。

func new Block(transactions[]string,prev hash[]byte)* Block { current time:=time。Now()返回块{ timestamp: currentTime,Transactions: transactions,prevhash: prevhash,hash: NewHash(当前时间,Transactions,prevhash),} }

new hash()函数以时间,事务列表和之前的hash作为我们的输入参数,返回一个字节数组来表示新生成的hash值。在这个函数中,我们基本上只是将所有输入混合到一个名为input的字节数组中。我们通过使用append()函数的附加时间参数来实现这一点,并且通过将时间转换为字符串,prevHash使用.追加prevHash片作为后缀时间片。

然后,我们遍历事务并将每个个体附加到输入数据blob。有趣的语法字符串(rune(transactions)).只是一个方法输入,用于将每个元素转换成一个可以在Go中附加的切片。就是输入垃圾内容,如果真的想要,请深入研究。

func NewHash(time time .Time,transactions []string,prev hash[]byte)[byte { input:=append(prev hash,time .字符串().)for transaction:=range transactions { input=append(input,string(rune(transaction)).)}哈希:=sha256 .Sum256(输入)返回散列[:]}

最后,我们使用秘密党员包转到电话sha256 .Sum256()与投入作为它的参数。这将为我们的所有数据输入提供新的哈希表示。我们返回时哈希[:]使用的[:]语法将混杂在返回时切成适当的长度

这实际上是我们开始链接我们的区块链所需的全部。当然,我们希望在程序中看到某种输出,以便在打印时可以使用一些辅助方法:

func打印块信息(Block * Block){ fmt .Printf(' time: %s ',block.timestamp.String()) fmt .Printf(' prevHash: %x ',block.prevHash) fmt .printf(' \ t哈希:%x ',块hash)print transactions(Block)} func print transactions(Block * Block){ fmt .对于I,事务:=范围块。交易记录{ fmt .Printf(' %v: %q ',I,transaction) }}

现在剩下的就是创建新的事务,块和哈希。我们可以通过我们的主要方法来做到这一点。我们定义了一个字符串数组来记录我们的区块链中的交易。另请注意,我们如何传递一个空字节数组NewBlock()来生成名为的第一个块基因区块。

func main(){ genesistractions:=[]string { '伊西送了威尔50比特币','威尔送了伊西30比特币} genesis block:=new block(genesis tractions,[]byte{}) fmt .println('-第一个块-')打印块信息(genesisBlock)块2事务:=[]string { '约翰给伊西发了30个比特币} Block 2:=new Block(Block 2 transactions,genesis Block .哈希)fmt .println('-第二块-')打印块信息(块2)块3事务:=[]string { '将向伊西发送45比特币','伊西发送将10比特币}块3:=新块(块3交易,块2 .哈希)fmt .Println(' -第三个块-')打印块信息(块3)}

为了创建新的区块,我们将前一个区块的哈希值NewBlock()与对应的交易历史记录一起传递。 如果您想在一个地方查看整个程序,则为:

包主导入(' crypto/sha 256 ' ' fmt ' ' time ')类型块结构{时间戳时间.time transactions[]string prev Hash[]byte Hash[]byte } func main(){ genesistractions:=[]string { '伊西送了威尔50比特币','威尔送了伊西30比特币} genesis block:=new block(genesis tractions,[]byte{}) fmt .println('-第一个块-')打印块信息(genesisBlock)块2事务:=[]string { '约翰给伊西发了30个比特币} Block 2:=new Block(Block 2 transactions,genesis Block .哈希)fmt .println('-第二块-')打印块信息(块2)块3事务:=[]string { '将向伊西发送45比特币','伊西发送将10比特币}块3:=新块(块3交易,块2 .哈希)fmt .Println(' -第三块-')打印块信息(块3)} func new Block(transactions[]string,prev hash[]byte)* Block {当前时间:=时间.现在()返回块{ timestamp: currentTime,transactions: transactions,prevHash: prevHash,Hash: NewHash(currentTime,transactions,prevHash),}}func NewHash(time time .Time,transactions []string,prev hash[]byte)[byte { input:=append(prev hash,time .字符串().)for transaction:=range transactions { input=append(input,string(rune(transaction)).)}哈希:=sha256 .Sum256(输入)返回hash[:]} func打印块信息(Block * Block){ fmt .Printf(' time: %s ',block.timestamp.String()) fmt .Printf(' prevHash: %x ',block.prevHash) fmt .printf(' \ t哈希:%x ',块hash)print transactions(Block)} func print transactions(Block * Block){ fmt .对于I,事务:=范围块。交易记录{ fmt .Printf(' %v: %q ',I,transaction) }}

如果要运行此程序,将得到以下输出:

$ go运行示例。go-First Block-time:2021-04-05 15:12:18.813294-0600 MDT m=0.000074939 prev哈希:43 EC 51 c 50d 2 b 9565 f 221155 a 29d 8 b 72307247 b 08 EAF 6731 CCA交易:0:'伊西送将50比特币' 1:'将送伊西30比特币过程可能会很粗糙,但这是创建自己的区块链的基础!

以上就是去创建区块链,怎么用去实现一个简单的区块链?的详细内容,更多关于去创建区块链的资料请关注蓑衣网其它相关文章!

2022GO创建区块链,使用教程GO实现一个简单的区块链- | 分享给朋友: