当前位置:首页 > 知识知道 > 详情

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

2024-05-17 12:30:39 阅读(22) 悠嘻资讯网

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

2022GO创建区块链,使用教程(cheng)GO实现一个简单的区块链--悠嘻资讯网

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

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

了解区块链

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

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

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

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

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

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

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

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

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

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

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

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

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(输入)返回散列[:]}

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

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

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,事务:=范围块。交易(yi)记录{ fmt .Printf(' %v: %q ',I,transaction) }}

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

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

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

包主导入(' crypto/sha 256 ' ' fmt ' ' time ')类型块结构{时间戳时(shi)间.time transactions[]string prev Hash[]byte Hash[]byte } func main(){ genesistractions:=[]string { '伊西送了威(wei)尔50比特币','威尔送(song)了伊西30比特币} genesis block:=new block(genesis tractions,[]byte{}) fmt .println('-第一个块-')打(da)印块信息(genesisBlock)块2事务:=[]string { '约翰给伊(yi)西发了30个比特(te)币} Block 2:=new Block(Block 2 transactions,genesis Block .哈希)fmt .println('-第二块-')打印(yin)块信息(块2)块3事(shi)务:=[]string { '将向伊西发送45比(bi)特币','伊西发送将(jiang)10比特币}块3:=新块(块3交(jiao)易,块2 .哈希(xi))fmt .Println(' -第三块-')打印块信息(块3)} func new Block(transactions[]string,prev hash[]byte)* Block {当(dang)前时间:=时间.现在(zai)()返回块{ 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,事务:=范围块。交易(yi)记录{ fmt .Printf(' %v: %q ',I,transaction) }}

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

$ 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比特币过程可能会很粗糙,但这是(shi)创建自己的区块(kuai)链的基础!以上就是(shi)去创建区块链,怎么用去实现一(yi)个简单的区块链?的(de)详细内容,更多关于去(qu)创建区块链的资料(liao)请关注尚力财经(jing)其它相关文章!

上一篇:地铁能带酒(jiu)吗(地铁带酒规定2022)

下一篇:戴平安扣(kou)的好处和禁忌(玉不能一带一摘)

  • BTC中国(btc中国下(xia)载)

    BTC中国(btc中国下(xia)载)

    比特币中国btccnyltc什么意思btc是指比特币(bitcoin),ltc指的是莱特币(litecoin),cny指的(de)是人本民币。btccnyltc的意思是比特币和莱特(te)币的人民币交易,支持比特币、莱特币和人民(min)币之间自由的兑换。比特币是一…
    2023-06-09 阅读(23)
  • 大林寺桃花(hua)古诗的意思翻译(大林寺桃花古诗原文及翻译)

    大林寺桃花(hua)古诗的意思翻译(大林寺桃花古诗原文及翻译)

    藤爸带你背古诗,妙招提升(sheng)记忆力《大林(lin)寺桃花》唐·白居易人间四月芳(fang)菲尽,山寺桃花始盛开。长恨春归无觅处,不知转入此中来。如何记忆?诗名:大林寺桃花。大林寺(si),庐山三大名寺之一(yi)。这首诗写的是山…
    2023-06-09 阅读(25)
  • 摄像头怎么(me)连接另一部手机(摄像头怎么连接另一部手机使用)

    摄像头怎么(me)连接另一部手机(摄像头怎么连接另一部手机使用)

    家用摄像头在(zai)手机配置实现远程监控,这个(ge)操作的步骤是非(fei)常简单的。而且就市面上的安(an)防监控产品,操(cao)作大抵相同,就算(suan)有所出入无非是摄像机UID不同而(er)已。在手机配置本地路由器WiFi,将摄像机…
    2023-06-09 阅读(29)
  • 炒币app叫什么软(ruan)件(炒币软件下载大全)

    炒币app叫什么软(ruan)件(炒币软件下载大全)

    中国炒币用什么平台有以下平台:1.币安。An.com是一(yi)个专注于区块链资产的(de)交易平台,由前okcoin联合创(chuang)始人赵昌鹏(CZ)领导的一群数字(zi)资产爱好者创建(jian)。创始人赵昌鹏与老东家Okcoin争执不断。一…
    2023-06-09 阅读(29)
  • qq音乐桌面(mian)歌词怎么打开(平板qq音乐桌面歌词怎么打开)

    qq音乐桌面(mian)歌词怎么打开(平板qq音乐桌面歌词怎么打开)

    说到桌面歌词,用(yong)安卓的机友们,肯定不觉得有(you)什么新鲜的地方。但对于iPhone用户来说(shuo),这就是一个挥(hui)之不去的痛点……因为苹果一(yi)直没有开放桌面浮窗的权限,所以(yi)音乐App们也没辙。但是,机哥要说…
    2023-06-09 阅读(21)