使用GO语言构建区块链 - 第1部分:基本原型

2019/07/29 栏目:行业资讯
原文标题:使用GO语言构建区块链 - 第1部分:基本原型

鸟 前言

     区块链是21世纪最具革命性的一项性技术尚未成熟,潜力尚未完全实现。实质上,区块链只是一个分布式记录数据库。但它的独特之处在于它不是私有数据库,而是公共数据库,也就是说,拥有它的每个人都有完整或部分副本。只有在数据库的其他管理员同意的情况下才能添加新记录。此外,区块链使加密货币和智能合约成为可能。

     在本系列文章中, 我们将实施区块链的简化版本。在此基础上建立一个si加密货币的简化版本。


[123 ]

        123]

     让我们从“区块链”的“块”部分开始。在区块链中,存储有价值信息的块是块。例如,比特币块存储事务,这是任何加密货币的本质。除此之外,该块还包含一些技术信息,例如版本,当前时间戳和前一个块的哈希值。 鸟     在本文中,我们不打算实现比特币规范中描述的区块链,b相反,我们将使用区块链的简化版本。它只包含重要信息。这就是它的样子:


      Timestamp

是当前时间戳,即创建块的时间。

     数据

是块存储的实际有价值信息。

      PrevBlockHash

存储前一个块的哈希


       我们的

  TimestampPrevBlockHash,  Hash ,它属于块头,比特币规范中的块头是一个单独的数据结构。该事务(此处为Data)是另一个单独的数据一个结构。为了简单起见,我将两者混合在一起。

鸟     那么我们如何计算哈希?哈希是区块链中非常重要的一部分。正是这一特性使区块链变得安全。计算哈希值是一项计算难度较大的操作,即使在高速计算机上也需要花费大量时间(这就是人们购买功能强大的GPU来挖掘比特币的原因)。这是一种有意的架构设计,难以添加新块,防止它们在添加后再次修改。我们将在以后的文章中讨论并实现这种机制。

       现在,我们只获取块字段,连接它们,并连接SHA-256哈希值的计算结果。我们在SetHash方法中这样做:



       接下来,根据Golang惯例,我们将实现简化的块创建功能:



     这是块!


        区块链

     现在让我们实现一个区块链。从本质上讲,区块链只是一个具有特定结构的数据库:它是反向链接的有序列表。这意味着块按插入顺序存储,每个块链接到前一个块。这个结构e允许快速获取链中最近的块并且通过该块获得(有效地)块。   

     在Golang中,这个结构可以使用数组和map实现:array将维护一个有序的hash(数组有Go in Go)Order sort),map将保持hash→block对(map是无序的)。对于我们的区块链原型,我们只使用数组,因为我们现在不需要通过哈希来获取哈希。



     这是我们的第一个区块链!我从没想过会这么容易。

鸟   现在让我们添加块:


       完成! ?

 与国家统计局磷;    将来要添加新块,我们需要一个现有块,但我们的区块链中没有块!因此,在任何区块链中,必须至少有一个块,并且链中的第一个块称为创建块。让我们实现一种方法来创建一个创建块:



     现在,我们可以实现一个函数来创建一个带有创建块的区块链:



]鸟     让我们检查区块链是否正常工作:



       产出:


      KnotOn

&nbSP;    我们构建了一个非常简单的区块链原型:它只是一个块数组,每个块都连接到前一个块,实际区域区块链比这复杂得多。向区块链添加新块很容易且快速,但在实践中向区块链添加新块需要一些工作:在获得添加块的许可之前必须执行一些繁重的计算(此机制称为就业证明)。此外,区块链是一个没有单一决策者的分布式数据库。因此,必须由网络中的其他参与者确认和批准新块(此机制称为共识)。我们的区块链中没有交易!

     在下一篇文章中我们将介绍其他功能。

      鸟1。完整源代码: https // github.com/Jeiwan/blockchain_go/tree/part_1 [

      2.块散列算法: https // en .bitcoin.it / wiki / Block_hashing_algorithm [

      编辑:但原作