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

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

admin 5个月前 171 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字节开始,并且需要一些时间来获取这些哈希值。

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



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

       让我们再检查一下:



         产出:


   结论

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

        编辑:但原作

相关文章

尽管加密货币价格在挣扎中,但区块链工作在亚洲仍在蓬勃发展

尽管加密货币价格在挣扎中,但区块链工作在亚洲仍在蓬勃发展

区块链和加密货币工作越来越吸引来自亚洲较传统行业的求职者,尽管这项技术最著名的案例在价格方面苦苦挣扎。 区块链技术是比特币等加密货币的基础,是一种无法改变...

天涯社区在线区块链令牌功能,能否实现逆风推翻?

天涯社区在线区块链令牌功能,能否实现逆风推翻?

你还记得曾经辉煌但现在感到沮丧的天涯社区吗?谈到天涯社区,每个人都可能非常熟悉,但你有多久没有去过这个世界?你还记得你的天涯账号密码吗?回答这些问题,我可以解释为什么世界末日没有下降......

干货| 2018年大部分区块链术语汇总

干货| 2018年大部分区块链术语汇总

初步接触区块链,很多人无法弄清楚,因为有这么多专业术语让人晕倒。 令牌, Dapp , KYC ...... 您听说过这些条款吗?如果你不明白它并不重要,让我们整理...

广泛的应用场景Blockchain手机APP哪个更好?

广泛的应用场景Blockchain手机APP哪个更好?

2018年,区块链的“连锁火”席卷全球。许多人说区块链带来了思想和技术的革命,它比技术本身带来了更多的价值。创新的价值是时代所需要的。越来越多的科技公司正在推出区块链应用,手机区块链的赚钱模式也在...

新加坡第一台币安比特币ATM计划于3月中旬首次亮相

新加坡第一台币安比特币ATM计划于3月中旬首次亮相

根据币安比特币交易公司币安比特币交易所37岁新加坡业主Zann Kwan的说法,新加坡首个币安比特币自动柜员机(ATM)将于3月中旬亮相。币安比特币交易所是一家新公司,计划通过币安比...

终于知道区块链项目为什么要发币了

终于知道区块链项目为什么要发币了

如果说2017年是数字货币(币圈)的天下,那么2018年一定是区块链(链圈)的王国。当前,数字货币交易市场已进入漫漫熊市。外部环境中,国家对加密数字货币持续施压,更有甚者,在许多圈外人看来,加密数字货...

Coinbase首席执行官:数十亿人将在5年内使用加密货币

Coinbase首席执行官:数十亿人将在5年内使用加密货币

金钱世界正在我们眼前彻底改变。加密货币正在为替代支付系统和分散式银行业务创造新的范例。毫无疑问,用户对各种加密货币的采用正在迅速增加。随着它与主流金融之间的界限继续模糊,加密货币...

虽然币安比特币是一种虚拟货币,但它可以用来购物。

虽然币安比特币是一种虚拟货币,但它可以用来购物。

制图:宋伟,5月6日,22:00币安比特币汇率和近期走势数据来源:币安比特币中国 币安比特币 □是开源代码电子货币生成通过P2P软件 □不是由任何机构发布的,由特定算法生成...