区块链入门到实战之区块链–工作量证明(代码片段)

huanghanyu huanghanyu     2022-11-29     515

关键词:

目的:解决艰难的任务,获取记账能力。

区块链中,每个人手上都有账本,每个人都可以记账,但怎么能让这些账本的内容保持一致,让大家都认这个账,就需要共识机制。

人类社会中,通常的共识机制是,如果某个人能完成某项艰难的任务,他就可以做某些事。要推翻这个共识,就也要完成这些艰难的任务,所以共识不是那么容易被推翻。孙悟空当上美猴王,是因为做了难的事(穿过水帘洞)。

类似地,区块链中的共识机制使用同样原理,只有完成了某项艰难的任务,才有记账的权力,这就是工作量证明。区块链中,这项艰难任务是,计算一个数学难题。

现在,我们介绍工作量证明的具体过程。我们向每个块添加一个名为Nonce的项,如下图所示

技术图片

Nonce是使区块的哈希值满足一定条件的一个数字。例如,这个条件可能是,生成的哈希值前面4位必须为零。

因此,生成的哈希值看起来会像000010101010xxx。通常,矿工在计算Nonce值时,会从0开始,并不断增加,直到生成的哈希值满足指定条件。

注意,哈希生成是随机进行的,并且超出了你的控制范围 — 也就是说,你不能强制哈希函数生成特定的哈希值。

因此,可能需要多次迭代,直到生成满足条件的哈希值。在比特币系统中生成一个区块的预期时间为10分钟。一旦矿工成功地生成了Nonce值,即成功地开采了这个区块,他就会在系统中释放这个区块,使其加入链中,成为最顶端的一个区块。

注意,有多个矿工在竞争生成合法的区块。比特币系统通过给第一个成功的矿工特定的比特币来奖励他。

一般来说,计算能力更强的矿工是早期的赢家。这可能会导致拥有巨大处理能力的人攻击整个系统。本教程后续内容中,我们将讨论这些攻击以及如何减轻它的影响。

区块链入门到实战之区块链–链接区块

由不同矿工创建的区块被连接在一起,形成了所谓的真正分布式公共账本。链中的每个块包含多个消息(事务),如上图所示。链条上的一个区块可能来自任何矿工。在创建区块链时,可以看到会把前一个区块的哈希值添加到当前... 查看详情

区块链入门到实战之区块链–应用发展阶段

区块链的应用发展,大致可分为3个阶段:区块链1.0:虚拟币区块链2.0:智能合约区块链3.0:DApp下面将简要描述区块链应用发展的3个阶段。区块链1.0:虚拟币通过解决计算数学难题,来创造虚拟货币的想法,最初是由哈尔•芬尼(... 查看详情

区块链入门到实战之区块链–介绍

什么是区块链?区块链是一个分布式账本。银行系统可以理解为一个中心化的账本,账本中记录了每个人有多少钱,但每个人手上是没有这个账本的,只有银行有。区块链也是一个账本,账本中记录了每个人拥有什么,但每个人... 查看详情

区块链入门到实战(13)之区块链–付款确认

作为收款方,会想确认一笔交易有没有被写入区块链。由于本地节点(钱包)的区块链,只包含了区块链头,没有交易信息,这笔交易在本地是找不到的。但是,区块链是一个网络,你可以向包含全部区块信息的节点(例如矿工节点... 查看详情

区块链入门到实战之区块链–发展历史

区块链的提出区块链技术是最早由计算机科学家斯图尔特·哈伯(StuartHaber)和w·斯科特·斯托内塔(W.ScottStornetta)于1991年提出。他们介绍了一种方案,用于在数字文档上加盖时间戳,防止文档被篡改。他们开发了一个系... 查看详情

区块链入门到实战之区块链–挖矿

区块链中,当Bob付款给Alice时,创建了一个转账交易,但他不会将其单独发送给Alice。相反,交易消息将在他所连接的整个网络上广播。Bob的网络如图所示。消息传递到所有连接的节点(机器),图中的一些节点被标记为矿工。这些... 查看详情

区块链入门到实战(12)之区块链–默克尔树(merkletree)

目的:解决由于区块链过长,导致节点硬盘存不下的问题。方法:只需保留交易的哈希值。区块链作为分布式账本,原则上网络中的每个节点都应包含整个区块链中全部区块,随着区块链越来越长,节点的硬盘有可能放不下。区... 查看详情

区块链入门到实战之区块链–比特币

中本聪在2008年推出了比特币。比特币是一种加密货币(虚拟货币),或者说是数字货币,使用加密技术来管理和生成货币单位。比特币目前是加密币中最有价值的一种。比特币是一种数字资产,可以通过互联网,在交易双方之间安... 查看详情

区块链入门到实战之区块链–哈希(hash)

密码学中,最重要的函数之一是哈希函数。哈希函数将任意大小的数据(内容)映射到固定大小的数据(哈希值)。哈希函数是单向的,从内容生成哈希值很容易,但从哈希值映射到内容很难。比特币使用SHA-256哈希函数,该函数生成... 查看详情

区块链入门到实战之区块链–非对称加密

非对称加密技术也被称为公钥密码技术(简称PKI)。它使用2个成对的密钥:公钥 对外公开私钥 必须严格保密,保管好不能弄丢密钥本质上是一个数值,使用数学算法产生。可以用公钥加密消息,然后使用私钥解密;反过来... 查看详情

区块链入门到实战(10)之区块链–交易流程与挖矿

我们总结一下前面章节介绍的交易步骤:区块链网络中,任何想支付的人,需创建一个交易,里面的内容大致是,买家付给卖家多少钱。在一定时间内,网络中可能会发生多笔交易。所有交易,都会通过网络广播,但交易不一定... 查看详情

区块链之工作量证明

区块链之工作量证明在整个区块链中的作用新的区块依赖工作量证明算法(PoW)|ProofOfWork来构造理解PoW的目标是找出一个符合特定条件的数字,这个数字很难计算出来,但容易验证。这就是工作量证明的核心思想。示例代码fromha... 查看详情

区块链原理入门(代码片段)

...saction>transactions;//区块上面记录的交易privateIntegernonce;//工作量证明,计算正确哈希值的次数privateStringprevHash;//前一个区块的hash值@TestpublicvoidtestNewBlock()//区块链List<Block>blockChain=newLinkedList<>();//先生成个创世区... 查看详情

区块链原理入门(代码片段)

...saction>transactions;//区块上面记录的交易privateIntegernonce;//工作量证明,计算正确哈希值的次数privateStringprevHash;//前一个区块的hash值@TestpublicvoidtestNewBlock()//区块链List<Block>blockChain=newLinkedList<>();//先生成个创世区... 查看详情

区块链实现之pow分析(代码片段)

...在github上面同步开源,项目地址:linkPoW算法介绍工作量证明(ProofOfWork,简称POW),简单理解就是一份证明,用来确认你做过一定量的工作。监测工作的整个过程通常是极为低效的,而通过对工作的结果进行... 查看详情

[易学易懂系列|rustlang语言|零基础|快速入门|(27)|实战4:从零实现btc区块链](代码片段)

...|rustlang语言|零基础|快速入门|(27)|实战4:从零实现BTC区块链]项目实战实战4:从零实现BTC区块链我们今天来开发我们的BTC区块链系统。简单来说,从数据结构的角度上来说,区块链,就是区块组成的链。以下就是BTC区块链典型... 查看详情

区块链技术——工作量证明(代码片段)

什么是工作量证明ProofOfWork,简称POW,即对工作量的证明。为什么要做工作量证明**挖矿(计算or工作)**的结果会作为数据加入区块链成为一个区块,完成这个**工作**的人也会获得奖励(即挖矿获得比特币... 查看详情

使用javascript实现简单的区块链(签名+工作量证明机制)(代码片段)

//区块链blockchain//data之前区块的哈希值当前区块的哈希值:是由存储在区块里的信息算出来的(data+之前区块的哈希值)constsha256=require('./crypto-js/sha256')//区块classBlockconstructor(data)this.data=datathi 查看详情