当前位置:首页 > 行业资讯 > 用GO语言构建区块链 - 第2部分:工作量证明

用GO语言构建区块链 - 第2部分:工作量证明

admin 7个月前 232 0
原文标题:用GO语言构建区块链 - 第2部分:工作量证明

鸟 前言

     在 上一篇文章 中我们构建了一个非常简单的数据结构,这是区块链数据库的本质。我们可以通过它们之间的类链关系为它添加块:每个块都链接到前一个块。但是,我们的区块链实现有一个主要缺点:向链中添加块很容易且成本低廉。区块链和比特币的关键是添加新区块是一项艰巨的任务。今天我们将解决这个缺陷。


    鸟工作量证明

     区块链的一个关键思想是必须完成一些艰难的工作才能将数据输入i吨。正是这项艰苦的工作使区块链变得安全和一致。此外,这项艰巨的工作也取得了成效(这就是人们通过采矿赚钱的原因)。

     这种机制与现实生活机制非常相似:人们必须努力工作以获得继续生活的报酬。在区块链中,网络的一些参与者(矿工)很难维护网络并为他们添加新的区块以获得适当的奖励。由于它们的工作,块以安全的方式集成到区块链中,这保持了整个区块链数据库的稳定性。值得注意的是,完成工作的人必须能够证明这一点。

     整个“努力工作和证明”的机制我称为工作证明。这项工作需要大量的计算能力:即使是高性能的计算机也无法快速完成。另外,这项工作的难度不时增加,每次小的时候会增加6个街区。在比特币中,这项工作的目标是找到一个块的哈希值,这个哈希值可以用作证明。因此,找到具体需要的证据就是实际工作。

       最后要注意的是,工作负载证明算法必须满足要求,很难完成工作,并且验证很容易。证明通常会移交给其他人,验证不需要花费太多时间。


     哈希算法(哈希方法)

        在本段中,我们将讨论哈希算法。如果您已熟悉此概念,则可以跳过此部分。

       哈希是获取指定数据哈希的过程。哈希值是计算数据的唯一表示。散列函数是一种函数,它接收任意大小的数据并生成固定大小的散列。以下是哈希的一些主要特征:

        1, 无法从哈希中恢复原始数据。因此,散列未加密。

        2,某些数据只能有一个哈希值,哈希值是唯一的。

鸟      3, 更改输入数据中的一个字节将导致完全不同的哈希值。




       散列函数广泛用于检查数据一致性。除软件包外,一些软件供应商还发布校验和。下载文件后,您可以将其提供给散列函数,并将生成的散列与软件开发人员提供的散列进行比较。

       在区块链中,散列用于确保块的一致性。散列算法的输入数据包含前一个块的散列,因此不可能(或至少很难)修改链中的块,这必须重新生成culate其哈希值和所有后续块的哈希值。

      Hashcash

       比特币使用 Hashcash ,这是一种最初用于防止垃圾邮件的算法。它可以分为以下步骤:

        1.提供一些公共数据(如果是电子邮件,则是收件人的电子邮件地址)对于比特币,它是块头。

        2.添加一个计数器。该计数器从0开始。

        3.获取数据(数据)+计数器(计算器)组合的哈希值。

        4.检查哈希以满足特定要求。

鸟             如果是,请完成。

               如果没有,请增加计数器并重复步骤3和4.

       因此,这是一个强大的算法:修改计数器,计算新的哈希并检查,增加计数器以进行检查,等等。这就是它的计算成本很高的原因。

       现在让我们仔细看看哈希值必须满足的要求:在原始的Hashcash实现中,需求听起来像“20个数字之前的哈希值必须为零”。在比特币中,需求会不时调整,因此随着时间的推移,计算能力会随着时间的推移而增加e矿工加入网络,设计必须每10分钟生成一个块。

       为了演示这个算法,我得到了前一个例子中的数据(我喜欢甜甜圈“我喜欢甜甜圈”)并发现一个以3个零字节开头的哈希:

[123 ]鸟      ca07ca 是计数器的十六进制值,十进制系统中间是13240266.

     履行

       我们已经完成了理论,让我们编写代码!首先,让我们来定义采矿的难度:



       在比特币中,“目标位”是难度的块头内存块被挖掘。目前我们不会实现目标调整算法,因此我们可以将难度定义为全局常量。

        24是任意数,我们的目标是在内存中占用少于256个目标。我们希望差异足够大,但不要太大,因为差异越大,找到正确的哈希越难。


       创建一个ProofOfWork结构,其中包含指向块的指针和指向目标值的A指针。 “目标”是前一段中描述的要求的另一个名称。我们使用golang的大包 ,因为我们将哈希值与目标进行比较:我们将哈希值转换为大整数并检查它是否小于目标值。

       在NewProofOfWork函数中,big.Int的值为1,初始化为 并将其向左移动256 - targetBits。 256是SHA-256散列的长度(以位为单位),是我们将使用的SHA-256散列算法。十六进制表示目标是:



       它在内存中占用29个字节。这是与前一个例子中的哈希的视觉比较:



&nbsp ;    第一个哈希(根据“我喜欢甜甜圈”计算)大于目标值,因此它不是有效的工作证明。第二个哈希(计算在“我喜欢&nt; donutsca07ca“)小于目标值,因此它是一个有效的证据。

   您可以将目标视为上限范围:如果数字(散列)低于边界,则有效,反之亦然。降低边界将导致有效数量减少,因此找到有效数字所需的工作更加困难。[123 ]

    现在,我们需要哈希数据。让我们准备:



    这篇文章很简单:我们只是将块字段与目标和随机数合并.Nonce在这里是Hashcash描述的计数器以上,这是一个加密术语。

    好的,所有准备工作都已完成,让我们实施PoW算法的核心:



鸟     首先,我们初始化变量:hashInt表示哈希的哈希标识符; Nb; nonce是计数器。接下来,我们运行一个“无限”循环:它仅限于maxNonce,等于math.MaxInt64; 这样做是为了避免nonce的溢出。虽然我们实现的PoW算法的难度非常低,但为了以防万一,我们最好检查它。

       在我们需要的循环中:

        1,准备数据。

        2,使用SHA-256哈希。

        3,将哈希值转换为大整数。

        4,将整数与目标值进行比较。


       就像前面解释的那样简单。现在我们可以删除 Block 中的 SetHash 方法并修改它 ] NewBlock 功能:


[ 123]


鸟     在这里,您可以看到其nonce被保存为BlockAttributes。这是必要的,因为现时需要验证证明。 Block结构现在看起来像这样:



       好!让我们运行该程序,看看是否每一个事情还可以:



       大!您可以看到每个哈希现在以3 0字节开始,并且需要一些时间来获取这些哈希值。

       还有一件事要做:让我们验证一下这项工作的证明。



       这就是我们需要保存的随机数字的位置。

       让我们再检查一下:



         产出:


   结论

     我们的区块链更接近实际体系结构:现在添加块需要一系列复杂的任务,因此需要进行挖掘。但它仍然缺乏一些关键特征:区块链数据库不是持久的,没有钱包,地址,交易,也没有共识机制。所有这些都将在未来的文章中实现,现在让我们开心吧!

        编辑:但原作

相关文章

深圳成为全国第一个区块链电子发票试点城市

深圳成为全国第一个区块链电子发票试点城市

据媒体报道,今日深圳国家扶轮餐厅开业第一家国家张区块链电子发票,宣布深圳已成为全国第一个区块链电子发票试点城市。深圳市税务局和腾讯引进的区块链电子发票提供了基础技术和能力,并经国...

高盛准备与新任首席执行官一起登上BTC巴士

高盛准备与新任首席执行官一起登上BTC巴士

随着高盛任命新首席执行官,比特币将继续走向主流金融。众所周知,高盛在加密货币方面更为活跃。 高盛本周宣布,大卫·所罗门将接替劳埃德·布兰克费恩担任首席执行官。布兰克费恩于2...

币安比特币交易或变暗

币安比特币交易或变暗

央行对币安比特币的风险监控继续发酵。 央行在12月17日发布“关于防范币安比特币风险的通知”之后,有消息说央行曾谈到第三方支付机构并要求他们不提供支付清算服务用于币安比特币交换。企...

专家们谈到中国在拉斯维加斯举行的币安比特币会议上的影响力

专家们谈到中国在拉斯维加斯举行的币安比特币会议上的影响力

币安比特币初创公司和币安比特币的相关监管是12月10日拉斯维加斯内部币安比特币会谈的焦点。会议的第一个主题是早期币安比特币投资者,Tradehill首席执行官Jerker Kenna...

通过币安比特币节点操作查看问题

通过币安比特币节点操作查看问题

我已经运行了一个多比一年的比特币全节点,但我只想弄出几个问题:比特币节点操作是什么,可以维护多少连接,以及使用了什么带宽。为了更好地理解比特币网络,几周前,我加入了一个比特币Gith...

比较两个数字:币安比特币和非交换货币的真正区别

比较两个数字:币安比特币和非交换货币的真正区别

今天,我们生活在一个激动人心的时代,金融技术可以完全颠覆系统消费基金的长期控制。 电子货币以及越来越多的 altcoin ( altcoin )以比特币的形式使技术公司能够更好地...

1币安比特币价值约759元,金矿或陷阱

1币安比特币价值约759元,金矿或陷阱

在过去的四月,币安比特币像过山车这样的大起大落使它成为媒体中的一个热门话题,它也让它从极客圈子进入公众视线。 热 到目前为止,1币安比特币的价值约为759元 虚拟货币并不陌...

人民日报“区块链 - 领导干部读者”开幕式:从互联网思维到区块链思维

人民日报“区块链 - 领导干部读者”开幕式:从互联网思维到区块链思维

人民日报出版社最近出版了“区块链 - 领导干部读者”一书,重点关注区块链的起源,特征,未来可能的应用场景,以及对商业和法律的挑战。从一个角度来看,区块链已被系统地解释和解释。 “人民日报”网络...