比特派安卓下载|比特币挖矿挖谁的

作者: 比特派安卓下载
2024-03-16 06:31:35

详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎

详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎切换模式写文章登录/注册详解比特币挖矿— 应该是史上最通俗易懂的版本S-Maruko从入门到精通,看我就够了!​​ 比特币挖矿就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。  相信很多人都听说过比特币挖矿的说法,不知道有多少人真正理解这个概念。在矿产领域,挖矿的概念其实很容易理解,就是从富含某种矿物质的矿石中提炼出矿物质的过程,而所谓的矿工就是那些头戴安全头盔,从事提炼矿物质的工人,他们的形象在我们的脑海中恐怕一点也不陌生。  比特币世界的挖矿和矿产领域的挖矿还是有很多相似之处的,都是在挖掘有价值的资产,都需要花费一定的代价,都能给挖矿的人带来一定的收益。矿产领域的挖矿可以得到相对稀缺的矿产资源,同时要付出体力和承担安全风险的代价;而比特币的挖矿可以得到比特币奖励,同时要付出计算机算力的代价。  矿产领域的矿工是靠大型的机械设备,而比特币世界里的矿工是靠专业的计算机设备,伴随着激烈竞争,比特币的挖矿设备从最开始的普通计算机,到现在的越来越专业的挖矿设备。  不过比特币世界的挖矿和矿产领域的挖矿也还是有很多不同的,比特币世界的挖矿还是发行新比特币的唯一方式,同时也是在去中心化的网络中保证民主和竞争的重要手段,但是它也不是一点坏处都没有,比如浪费了大量的计算机算力和电力。至于为什么会这么说,看完接下来的文字我想你就会明白了。  文章导读:​  1.什么是挖矿​  2.如何证明谁的工作量最多​  3.什么是工作量证明(POW)​  4.挖矿是一场接力赛​  5.小结  1. 什么是挖矿  如果还不了解区块链的话,可以参考不懂技术?老司机带你轻松理解区块链知识,比特币的网络中传播着大量的交易信息,既然没有中心化的统一服务,那么谁来确认这些交易的合法性,以及达成统一的共识呢?我们可以想想中心化服务的支付宝是如何解决这两个问题的,支付宝其实是买卖双方的中间担保,它负责确认每一笔交易是否合法,并且等双方在线下的交易没有问题时,才将资金转给卖方,这就保证了不会出现某一方作弊或者不认账的问题。  但是比特币网络中没有像支付宝这样的担保角色,那么它是如何做到交易的正常进行的呢?其实答案也很简单,就是由网络中的所有全节点共同决定这份交易是否合法,通过共同维护同一份帐薄来确保交易不会违约和篡改。  这就如同有10个人共同见证了两个人的交易,并一起确认这笔交易的合法性,同时每个人都维护了一份账本,这笔交易会记录到每个人各自维护的同一套账本上,如果有人要违约或篡改交易数据,他需要同时改掉至少6个人的账本(少数服从多数)。否则如果只改自己的那一份账本,别人很容易就看出他的作弊行为,想想掩耳盗铃的故事应该就能明白了。  说回到比特币世界的挖矿,挖矿就是比特币世界里的矿工确认每一笔交易是否合法(关于如何确认交易合法,可以参考一文看懂比特币交易的全过程),并将合法的交易写入到统一的公共帐薄上,同时会获得一定的新比特币和交易费的奖励的过程。奖励是为了鼓励更多的矿工加入进来,确保不会出现某一个节点独断专权的情况,至于奖励给哪一个矿工,这就要看谁的工作量更多了,在比特币的世界里,是靠共同解决某一个数学问题来证明工作量的多少。  这就如同在竞争激励的市场经济中,每个公司都会拼尽全力提供更好的服务和产品才能生存下去,这样就不太容易产生垄断和腐败,而竞争的结果促进了资源的有效配置,社会的整体财富就会不断增长,最终所有人都会受益,当然受益最大的还是对社会贡献最大的企业家。  而在计划经济下,所有的生产安排和资源分配,都掌握在少数人手中,权力的过度集中必然会导致腐败,也不利于资源的合理配置,长远来看,只能是绝大大多数人普遍赤贫,而受益最大的往往是掌握更多资源的人。想想改革开放前后的中国,就能明白计划经济和市场经济的不同效果了。  总结一下,挖矿就是矿工为了得到新发行的比特币和交易费的奖励,主动去确认交易是否合法,并将合法的交易写入共同维护的帐薄中的过程。而奖励是为了确保矿工有更多的积极性,避免权力集中在少数人手中,同时奖励也是比特币发行的唯一方式。 2. 如何证明谁的工作量更多  刚才提到了挖矿的奖励会给工作量最多的那个人,那么如何证明谁的工作量最多呢。其实也很简单,就是大家共同去解同一道数学题,这道数学题需要一定的计算量才能做出来,而率先得到答案的矿工就是最终的胜出者,分享最终的奖励。  相信大家以前都玩过数独游戏(没玩过的同学请自行搜索游戏规则),简单来说就是每一行与每一列必须出现1~9的数字,每个小九宫格内也必须有1~9的数字,并且每个数字在每行、每列和每个小九宫格里出现且仅能出现一次。游戏刚开始只会给出有限的几个位置上的数字,其他的位置都需要计算分析才能得出来正确的数字。​  由这张游戏图可以看出,想要计算分析出每一个位置上的数字,还是需要花费不少力气的,但是填完之后来验证是否正确就简单很多,看一下横排、竖排以及小九宫格是否没有重复的数字即可。  而比特币挖矿的数学题也有这样的特性,就是计算起来很费事,但是验证起来却很简单。当然了,挖矿的数学题不是求解一道数独题目,而是计算一道概率题。  先举一个简单的掷骰子游戏,假如说有两个骰子,如果我说掷出一个骰子之和小于等于12的组合,你肯定会说这还不简单,随便掷,任一个组合都肯定小于等于12,一点难度都没有。好,那假如我把条件设为小于等于8呢,可能就不是每次都能掷出来了,它的概率是0.72;如果我再把条件设小呢,如果是4呢,那么掷出来的可能性就会进一步减小,概率为0.11。(这里默认大家都会计算概率,如果不懂的话,只需要知道概率在不断减小就可以,想想现实的场景,这点应该不难理解)3. 什么是工作量证明(POW)  理解了掷骰子游戏,再来介绍挖矿的工作量证明(POW Proof-Of-Work)算法就很简单了,在之前一篇介绍区块链的文章不懂技术?老司机带你轻松理解区块链知识中,曾经提到过区块的数据结构,当时提到了两个数据是和挖矿相关的,当时没有详细说明,现在就可以拿出来分析了。  这里的难度目标和Nonce就是和挖矿相关的参数,我们都知道比特币网络平均每10分钟产生新的比特币,也就是说挖矿的平均时间为10分钟,也许你会问怎么确保刚好是10分钟呢。其实答案很简单,就是控制数学题目的难度,假如某个人的解题速度在不断提升,那么我只要提高题目难度,就可以保证他解答的时间大致衡定。  在比特币世界中,解题速度和计算机的算力有直接的关系,想想今天的一台计算机和20年前的一台计算机去解同一道复杂的数学题,谁先计算出来,我想你肯定也认同是今天的计算机率先求出答案。如果我告诉你,谁先解出答案,就给谁丰厚的奖励,大家肯定会拼命提高计算机的性能,这也是全球各个矿工在不断提高算力的原因,因为大家都想快速解出答案,以获得奖励。  说回到难度目标和Nonce两个参数,挖矿的题目是这样的,每一个区块头都有唯一的哈希值,我现在要求你在这个哈希值后面添加一个随机数字(一般是从零开始递增),然后再去计算这个结果的哈希值,直到求出来的哈希值小于某一个数字,而这个数字是由一个常数除以上面的难度目标得出来的。  如果你理解了上面的掷骰子游戏应该能看懂这道题目,其实就是通过不同的数字不断地计算哈希值,直到答案小于某一个目标数字,这个目标数字越小,难度就越大,跟上面的骰子一样,结果越小,掷出来的概率就越小。而这个目标数字是由难度目标决定的,难度目标数字越大,除出来得到的目标数字就越小。  Nonce计数器主要是统计总共计算了多少次,就如同掷骰子一样,虽然可以一把掷出要求的数字,但是多次平均下来,肯定是符合概率统计的,这样别的矿工就可以根据Nonce数字大小再一次印证这个矿工是否有作弊。  至此你应该已经明白工作量证明算法的大致逻辑了吧,本质上就是在求一个概率题,谁先算出来就算谁赢,奖励就归谁。难度随着答题的速度会动态调整,而这个难度就是由上面的难度目标值决定,这样就能保证平均每10分钟完成一次挖矿。  4. 挖矿是一场接力赛  一旦一个矿工成功挖矿,根据数独游戏的逻辑,其他矿工很快就能验证是否成功,一旦验证通过就会将区块放入自己维护的区块链中,并赶紧投入到下一次的挖矿,不带有一丝一毫的犹豫。如此激烈的竞争伴随的结果,就是每个矿工都不断提升自己的计算机性能,结果就是大家的挖矿设备都不断升级,以至于现在的矿场都是紧挨发电厂,用最先进的专用挖矿芯片。  这里其实还有一个问题,就是假如说有两个矿工同时计算出结果怎么办?这个时候就会出现分叉,也就是说区块链的末端区块存在分歧了,其实这只会临时出现,并不会长久存在。原因是一旦其他矿工确认了本次挖矿成功,就会投入到下一次挖矿,如果其他矿工又挖矿成功了,这条区块链路就会比另一条区块链路多出一个区块,区块链中的原则就是只认最长的链路,所以另一个挖矿成功的矿工很快就会舍弃之前的区块,以最长的区块链为准。  而奖励也是要得到大多数的矿工认可后才会有效,毕竟账本是所有的人一起维护的,只有大多数人的账本上认可你的挖矿结果才有效。所以临时的分叉并不会影响最终的奖励,其实10分钟的挖矿时间也是比特币之父“中本聪”对效率和共识的一种平衡。  看到这里也许你就会明白,为什么会说挖矿浪费了很多算力和电力,因为胜出者往往只有一个,其他的矿工就相当于白忙活了,但是他们的计算机已经投入计算了,这笔算力和与之相对应的电力也就此浪费了。  这恐怕就是为了维护民主化的代价,如果让中心化的节点去统一确认交易,并写入公共帐薄,那么很容易滋生出腐败,这也不符合中本聪一开始的去中心化的设计理念,但是靠挖矿决定输赢又会导致资源浪费,只能说任何事情都是有成本和代价的,只要收益大于成本,这件事就有做的价值,比特币现在的价格相比用于计算的电费还是划算得多。5. 小结  关于比特币的挖矿到此就全部介绍完了,不知道你有没有看明白。总结一下就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。这种靠竞争来解决交易共识的问题,避免了单一节点垄断整个网络的风险,让整个网络形成了良性竞争的局面。  当然随着全网算力的提高,篡改的难度就越来越大了,因为你要改至少51%的全节点的账本,这就要求你的算力至少是其他51%全节点的总和,这个难度现在已经大到无法想象的程度,而且即便能做到,为此付出的电费代价也会让篡改者掂量一下这么做是否划算。关于比特币的挖矿到此就全部介绍完了,不知道你有没有看明白。总结一下就是矿工将一定数量的交易打包到同一个区块,然后共同去计算同一道数学题来决定以谁的区块链为准,并且决定谁赢得新发行的比特币和交易费。这种靠竞争来解决交易共识的问题,避免了单一节点垄断整个网络的风险,让整个网络形成了良性竞争的局面。  ——The End——『声明:本文转载于公众号“扬帆沧海”』发布于 2021-05-13 13:48比特币 (Bitcoin)btc挖矿挖矿​赞同 39​​4 条评论​分享​喜欢​收藏​申请

挖矿是如何产生比特币的? - 知乎

挖矿是如何产生比特币的? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册虚拟货币货币比特币 (Bitcoin)挖矿是如何产生比特币的?最近翻译了中本聪先生发明比特币的论文,在这篇论文中他说比特币的产生由挖矿者计算最优散列值计算得到,第一个计算得到这一散列值的也就是block的第一人将…显示全部 ​关注者4,106被浏览5,798,637关注问题​写回答​邀请回答​好问题 40​10 条评论​分享​273 个回答默认排序aibifu区块链扫地僧​ 关注在这篇文章中我会给出一个虚拟的村庄叫“比特村”,整个文章会以讲故事的方式,逐步告诉大家比特币提出的动机、解决了什么问题以及一些关键组件的目标和设计方案。问题的提出我们先从比特币产生的动机开始。以物易物的比特村话说在这个世界上,有一个叫比特村的小村庄,村庄共有几百户人家。这个村庄几乎与世隔绝,过着自给自足的生活。由于没有大规模贸易,比特村村民一直 过着以物易物的生活,也就是说村民之间并没有使用统一的货币,互相间的贸易基本上就是老张家拿一袋面粉换老李家一只羊,王大嫂拿一筐野果换刘大婶两尺布。 村民们一直就这么纯朴的生活着。实物货币终于有一天,村民觉得一直这样以物易物实在太不方便了,于是村子全员开会,讨论如何解决这个问题。有人提议,以便于分割且稀有的东西,例如黄金,作 为一般等价物,把其它物品和黄金的对应关系编成一张表格,例如一克黄金对应一只羊,一克黄金对应一袋面粉等等,此时老张再也不用扛着一袋面粉气喘吁吁的去 老李家换羊了,他只要从家里摸出一克金子,就可以去老李家牵回一只羊,而老李拿着这一克黄金可以从任何愿意出让面粉的人那里换回一袋面粉,当然也可以换取 任何和一克黄金等值的物品。此时比特村进入了实物货币时代。符号货币好景不长,过了一段时间,实物货币的弊端也出现了。因为比特村附近金矿并不多,开采和冶炼金子太费时费力了。而随着使用,金子总是不断会因为磨损、 丢失或有人故意囤积而发生损耗。全村人又一次坐在了一起,开始商讨对策。此时有人说,其实大家也不必一定要真的用黄金啊,随便找张纸,写上“一克黄金”, 只要全村人都认同这张纸就等于一克黄金,问题不就解决了。其他人纷纷表示认同,但同时也有了新的问题:真实的黄金是需要开采和冶炼的,金矿有限,开采和冶 炼也需要成本,所以没有人可以短期凭空制造大量的黄金,可写字就不同了,只要我纸够笔够,随便像写多少写多少,那这就变成拼谁家里纸多了,搞不好到时一万 张纸才能换一只羊(实际上这就发生了经济学上的通货膨胀)。大家一想也是啊。不过此时又有人提出了解决方案:这个纸不是谁写都有效,我们只认村里德高望重的老村长写得,大家都认识老村长的字。老村长写一些 纸,同时按照各家黄金存量发给大家等量的纸,例如老张家有二百克黄金,老村长就发给老张二百张写着“一克黄金”的纸,同时将老张家的黄金拿走作为抵押。就 这样,老村长将村里所有黄金收归到自己的家里,并按各家上交的黄金数量发给等值的写有字的纸。此时村民就可以拿着这些纸当黄金进行贸易了,而且大家都认得 老村长的字,其他人伪造不出来。另外,如果谁的纸磨损太严重,也可拿到老村长那里兑换新的等值的纸,另外老村长承诺任何人如果想要换成真黄金,只要拿纸回 来,老村长就会把等值的黄金还给那人。因为老村长写得纸的黄金量和真实放在家里的黄金量是一样的,所以只要严格按照销毁多少纸新写多少纸的原则,每一张有 效的纸总能换回相应的真黄金。此时,比特村进入了符号货币(纸币)时代。而老村长就承担了政府和银行的角色。中央系统虚拟货币又过了几年,老村长由于每天都要核对大量的旧纸币,写新的纸币,还要把各种账目仔细做好记录。一来二去,老村长操劳过度不幸驾鹤西去了。比特村再次召开全体大会,讨论应该怎么办。此时老村长的儿子二狗子自告奋勇接过了父亲的笔,承担起货币发行的责任。这个年轻的村长二狗子很聪明,他 做了几天,发现好像也不用真的写那么多纸。完全可以这样:村民把纸币都交上来,销毁,但是二狗子会记录下每户上交的纸币数量。以后如果要进行付钱,例如老 张要拿一克金子向老李换一只羊,就一起给二狗子打个电话,说明要将老张名下的一克金子划归老李名下,二狗子拿出账本,看看老张名下是否有一克金子,如果有 就在老账的名下减掉一克,在老李的名下加上一克,这样就完成了支付,此时老李在电话中听到二狗子确认转账完成,就可以放心让老张把羊牵走了。此时比特村进入了中央系统虚拟货币时代。每个村民都不需要用实物支付,支付过程变成了二狗子那边维护的账本上数字的变更。分布式虚拟货币这新上任的二狗子是聪明,不过这人有时候是聪明反被聪明误。有一天二狗子盯着这账本,心想这全村各户谁有多少钱就是我说的算,那我岂不是……。于是他头脑一热,私自从老张帐下划了十克金子到自己名下。本以为天衣无缝,但没想到老张也有记账的习惯,有一天他正要付钱却被二狗子告知账户没钱了。老账核对了一下自己的账本,命名还有十克啊,于是拿着账本去找二狗子理论,这一核对发现了那笔未经老张同意的转账。东窗事发!比特村炸开锅了。二狗子被弹劾是不可避免了,不过通过这件事,大家发现了账本集中在一个人手里的弊端:这个体系完全依赖于账本持有人的个人信用,如果这个人不守规矩,随意篡改账本,那么整个货币系统就会崩溃如果这个人家里失火或者账本失窃,同样也会为整个体系带来毁灭性的打击正当人们不知所措时,村里一个叫中本聪的宅男科学家走上了台,告诉大家他已经设计了一套不依赖任何中央处理人的叫比特币的虚拟货币系统,可以解决上述问题。然后他缓缓讲述了自己的方案。下面我们就来看看中本聪同学是如何设计这套系统的。基础设施搭建账簿公开机制中本聪首先说明,要对现有账簿进行如下改造:账簿上不再记载每户村民的余额,而只记载每一笔交易。即记载每一笔交易的付款人、收款人和付款金额。只要账簿的初始状态确定,每一笔交易记录可靠并有时序,当前每个人持有多少钱是可以推算出来的。账簿由私有改为公开,只要任何村民需要,都可以获得当前完整的账簿,账簿上记录了从账簿创建开始到当前所有的交易记录。此言一出,下面立刻炸锅了。第一条还无所谓,但是第二条简直无法接受,因为账簿可是记录了所有村民的交易,这样大家的隐私不全暴露了吗。中本聪倒是不慌不忙,拿出了一对奇怪的东西。身份与签名机制(公钥加密系统)中本聪说,大家不要慌。在他的这套机制下,任何人都不使用真实身份交易,而是使用一个唯一的代号交易。他展示了手里神奇的东西,说这两件东西分别叫保密印章和印章扫描器。后面他会给村里每一户发一个保密印章和一个印章扫描器。两者的作用如下:保密印章可以在纸上盖一个章,每个印章盖出的章都隐含了一个全村唯一的一串字符,但是凭肉眼是看不出来的。也无法通过观察来制造出相应的印章印章扫描器可以扫描某个已经盖好的章,读出隐含的信息,并在液晶屏上显示出一串字符有了这两个神奇的东西,大家就可以在不暴露真实身份的情况下进行交易了,而印章隐含的那一串字符就是这户人家的代号。具体如何巧妙利用保密印章和印章扫描器进行交易,会在下文详述。成立虚拟矿工组织(挖矿群体)下一步,中本聪面向全村招募虚拟矿工,招募要求如下:矿工以组为单位,一组可以是单独的一户,也可以是几户联合为一组成为矿工不影响正常使用货币矿工每天要花费一定时间从事比特币“挖矿”活动,但是不同于挖金矿,虚拟矿工不需要拿着工具去野外作业,在家里就可以完成工作矿工有一定可能性获得报酬,在挖矿活动中付出的努力越多,获得报酬的可能性越大矿工可以随时退出,也可以随时有新的矿工加进来很快,大约有五分之一的村民加入比特币矿工组织,共分成了7个组。建立初始账簿(创世块)下面,中本聪宣布,先根据二狗子手里的账簿,把抵押的所有黄金按账簿记录的余额退还给每位村民,然后彻底销毁这本账簿。然后,中本聪拿出一本新账簿,在账簿的第一页上记录了一些交易记录,特别的是,这些记录的付款人一栏全都是“系统”,而收款人分别是每个印章对应的 隐含字符,代表初始时刻,系统为每一户默认分配了一定数量比特币,但是数量非常少,都只有几枚,甚至有些不幸的村户没有获得比特币。接着中本聪说,由于目前市面上比特币非常少,大家可以先回到用黄金做货币的时代,由于我不是村长,我也没有权利强迫大家一定要承认比特币,大家可以自行决定要不要接受比特币。不过随着比特币的流动和矿工的活动,比特币会慢慢多起来。支付与交易做了这么多铺垫,终于说到重点了,下面说一下在这样一个体系下如何完成支付。以老张付给老李10个比特币为例。付款人签署交易单为了支付10个比特币,老张首先要询问老李的标识字符串,例如是“ABCDEFG”,同时老张也有一个标识字符串例如是“HIJKLMN”,然后老 张写一张单子,内容为“HILKLMN支付10比特币给ABCDEFG”,然后用自己的保密印章改一个章,将这张单子交给老李。另外为了便于追溯这笔钱的 来源,还要在单子里注明这笔钱的来源记在哪一页,例如这个单子里,老张的10比特币来自建立账簿时系统的赠送,记录在账簿第一页。收款人确认单据签署人老李拿到这个单子后,需要确认这个单子确实是来自“HIJKLMN”这个人(也就是老张)签署的,这个并不困难。因为单子上必须有保密章,老李拿出 印章扫描器,扫一下章,如果液晶屏显示出的字符和付款人字符是一致的(这里是“HIJKLMN”),就可以确认单子确实是付款人签署的。这是因为根据保密 印章的机制,没有其他人可以伪造印章,任何一个人只要扫描一下印章,都可以确认单子的付款人和盖章人是否一致。收款人确认付款人余额这个系统到目前还是很有问题。通过保密印章,收款人虽然可以确认付款人确实签署了这份单子,但是无法自行确认付款人是否有足够的余额支付。之前的中 央虚拟货币系统中,二狗子负责检查付款人的余额,并通知收款人交易是否有效,现在把二狗子开了,谁来负责记账和确认每笔交易的有效性呢?之前说过,中本聪设计的这个系统是分布式货币系统,不依赖任何中央人物,所以不会有一个或少数几个人负责这件事,最终承担这份工作的是之前所提到的矿工组织。老张、老李和全村其他任何使用比特币进行交易的村民都依赖矿工组织的工作才能完成交易。矿工的工作矿工的工作是整个系统的核心,也是最复杂性最高的地方。下面逐步介绍矿工的工作内容和目的。矿工的工具俗话说,工欲善其事,必先利其器。比特币矿工虽然不用铁撅、铁锨和探照灯等工具,不过也要有一些必备的东西。初始账簿。每个组首先自己复制一份初始账簿,初始账簿只有一页,记录了系统的第一次赠送 空账簿纸。每个小组有若干账簿纸,每一页纸上仅有账簿结构,没有填内容,具体内容的书写规则后面讲述。下面是一张空账簿纸的样子,各个字段的意义后面会说到。编码生成器(哈希函数)。中本聪又向矿工组织的每个组分发了若干编码生成器,这个东西很神奇,将一页账簿填好内容的账簿纸放入这个机器,机器会在账簿纸的“本账单编号”一栏自动打印一串由“0”和“1”组成的编号,共256个。最神奇的是,编号生成器有如下功能:生成的编号仅与账簿纸上填入的内容有关,与填写人、字体、填写时间等因素均无关内容相同的账簿纸生成的编号总是相同,但是如果内容哪怕只改一个字符,编号就会面目全非编码生成器在打印编码时还需要将所有填入账簿纸的交易单放入,机器会扫描交易单和填入交易单的一致性,尤其是保密印章,如果发现保密印章和付款人不一致,会拒绝打印编码将一张已打印的账簿纸放入,机器会判定编号是否是有效的机器打印,并且判定编号和内容是否一致,这个编号无法伪造交易单收件箱。每个矿工小组需要在门口挂一个箱子用于收集交易单。 公告板。每个矿工小组同样需要一个公告板公示一些信息。有了上面的工具,矿工组织就可以开工了!收集交易单中本聪规定,每笔交易的发起人,不但要将交易单给到收款人,还要同时复制若干份一模一样的交易单投递到每个矿工小组的收件箱里。矿工小组的人定期到自己的收件箱里把收集到的交易单一并取出来。填写账簿此时小组的人拿出一张空的账簿纸,把这些交易填写到“交易清单”一栏,同时找到当前账簿最后一页,将最后一页的编号抄写到“上一张账单编号一栏”。 注意还有个“幸运数字”,可以随便填上一个数字,如12345。然后,将这样账簿纸放入编号生成器,打印好编号,一张账簿就算完成了。如果你以为矿工的工作就这么简单,那就大错特错了,中本聪有个变态的规定:只有编号的前10个数均为0,这页账簿纸才算有效。根据之前对编号生成器的描述,要修改编号,只能修改账簿纸的内容,而“交易清单”和“上一张账簿纸编号”是不能随便改的,那么只能改幸运数字了。于 是为了生成有效的账簿纸,小组里的矿工就不断抄写账簿纸,但每张纸的幸运数字都不同,然后不断的重复将纸放入编码器,如果生成的编号不符合规定,这张纸就 算废了,重复这个过程直到生成一串有效的编号。我们知道,如果编号的每一个数字都是随机的,那么平均写1000多张幸运数字不同的纸才能获得一个有效的编号。这就奇怪了,这些矿工为什么要拼命干这看似无意义的事情呢?还记得之前说过矿工有报酬吧,这就是矿工的动力了。中本聪规定:每一张账簿纸的交易清单 第一条交易为“系统给这个小组支付50个比特币”。也就是说,如果你生成了一张有意义的账簿纸,并且被所有挖矿小组接受了,那么就意味着这条交易也被接受 了,你的挖矿小组获得了50个比特币。这就是矿工被叫做矿工的原因,也是为什么之前说随着交易和矿工的活动,比特币的数量会不断增多。例如下面是一个挖矿过程,这个小组的公共比特币帐号为“UVWXYZ”。在幸运数字尝试到“533”时,系统生成了一页有效账簿。确认账簿当某挖矿小组幸运的生成了一张有意义的账簿,为了得到奖励,必须立刻请其它小组确认自己的工作。前面说过,当前村里有7个挖矿组,所以这个小组必须将有效账簿纸誊抄6份快马加鞭送到其他6个小组请求确认。中本聪规定,当某个小组接到其他小组送来的账簿纸时,必须立即停下手里的挖矿工作进行账簿确认。需要确认的信息有三个:账簿的编号有效账簿的前一页账簿有效交易清单有效首先看第一个,这个确认比较简单。只要将送来的账簿纸放入编码生成器进行验证,如果验证通过,则编号有效。第二部分需要将账簿页上的“上一页账簿纸编号”和这个小组目前保存的有效账簿最后一页编号比对,如果相同则确认,如果不同,需要顺着已有账簿向前比对,直到找到这个编号的页。如果没有找到指定的“上一页账簿纸编号”对应的页,这个小组会将此页丢掉。不予确认。注意,由上面的机制可以保证,如果各个小组手里的账簿纸是相同的,那么他们都能按同样的顺序装订成相同的账簿。因为后面一张纸的编号总是依赖前面的 纸的编号,编码生成器的机制保证了所有合法账簿纸的相对先后顺序在每个小组那里都是相同的(可能会有分支,但不会出现环,后面细讲)。最后是如何确认交易清单有效,其实也就是要确认当前每笔交易的付款人有足够的余额支付这笔钱。由于交易信息里包含这笔钱是如何来的,还包含了记录来 源交易的账单编号。例如,HIJKLMN要给ABCDEFG10个比特币,并注明了这10个比特币来自之前OPQRST支付给HIJKLMN的一笔交易, 确认时首先要确认之前这笔交易是否存在,同时还要检查HIJKLMN在这之前没有将这10个比特币支付给别人。这一切确认后,这笔交易有效性就被确认了。其中第一笔是系统奖励给生成这页账簿的小组的50个,这笔交易大家都默认承认,后面的只要按照上述方法追溯,就可以确认HIJKLMN是否当前真有10个比特币支付给ABCDEFG。如果完成了所有了上述验证并全部通过,这个小组就认可了上述账簿纸有效,然后将这张账簿纸并入小组的主账簿,舍弃目前正在进行的工作,后面的挖矿工作会基于这本更新后的主账本进行。账簿确认反馈对于挖矿小组来说,当账簿纸送出去后,如果后面有收到其他小组送来的账簿纸,其“上一页账簿纸编号”为自己之前送出去的账簿纸,那么就表示他们的工作成功被其他小组认可了,因为已经有小组基于他们的账簿纸继续工作了。此时,可以粗略的说可以认为已经得到了50个比特币。另外,任何一个小组当新生成有效账簿纸或确认了别的小组的账簿纸时,就将最新被这个小组承认的交易写到公告牌上,那么收款人只要发现相关交易被各个小组认可了,基本就可以认为这笔钱已经到了自己的账上,后面他就可以在付款时将钱的来源指向这笔交易了。以上就是整个比特币的支付体系。下面我们来分析一下,这个体系为什么可以工作下去,以及这个体系可能面临的风险。工作机制分析虽然上面阐述了比特币的基本运作规则,但是村民们还是有不少疑问。所以中本聪同学专门开了个答疑会,解答常见问题。下面总结一下村民最集中关心的问题。核心问题答疑如果同时收到两份合法的账簿页怎么办?注意在上面的运行机制中,各个挖矿小组是并行工作的,因此完全可能出现这样的情况:某小组收到两份不一样的账簿页,它们都基于当前这个小组的主账簿的最后一页,并且内容也都完全合法,怎么办?关于这个问题,中本聪同学说,小组不应该以线性方式组织账簿,而应该以树状组织账簿,任何时刻,都以当前最长分支作为主账簿,但是保留其它分支。举个例子,某小组同时收到A、B两份账簿页,经核算都是合法的,此时小组应该将两页以分叉的形式组织起来,如下图所示:黑色表示当前账簿主干。此时,可以随便选择一个页作为当前主分支,例如选择A:此时如果有一个新的账簿页是基于A的,那么这个主干就延续下去:如果这个主干一直这么延续下去,表示大家基本都以A为主干,B就会被遗忘。但是也有可能忽然B变成更长了:那么我们就需要将B分支作为当前主干,基于这个分支进行后续工作。从局部来看,虽然在某一时刻各个小组的账簿主干可能存在不一致,但大方向是一致的,那些偶尔由于不同步产生的小分支,会很快被淹没在历史中。如果挖矿小组有人伪造账簿怎么办关于这个问题,中本聪同学说,只要挖矿组织中大多数人是诚实的,这个系统就可靠,具体分几个方面给予答复。首先,基于保密印章机制,没有人能伪造他人身份进行付款,因为编码生成器在打印编码时会核对所有交易单的保密印章,印章和付款人不一致会拒绝打印。而且诚实的矿工也不会承认不合法的交易(如某笔交易付款方余额不够)。所以只有一种可能的攻击行为,即在收款人确认收款后,从另一条分支上建立另外的交易单,取消之前的付款,而将同一笔钱再次付款给另一个人(即所谓的double-spending问题)。下面同样用一个例子说明这个问题。先假设有一个攻击者拥有10个比特币,他准备将这笔钱同时支付给两名受害者A和B,并都得到承认。第一步,攻击者准备从受害者A手里买10比特币的黄金,他签署交易单给受害者A,转10个比特币给受害者A。第二步,这笔交易在最新的账簿页中被确认,并被各个挖矿小组公告出来。受害人A看到公告,确认比特币到账,给了攻击者10个比特币等值的黄金。第三步,攻击者找到账簿,从包含刚才交易的账簿页的前一页做出一个分支,生成更多的账单页,超过刚才的分支。由于此时刚才攻击者制造的分支变成了主干分支,而包含受害者A得到钱的分支变成了旁支,因此挖矿组织不再承认刚才的转账,受害者A得到的10比特币被取消了。第四步,攻击者可以再次签署交易单,将同一笔钱支付给受害者B。受害者B确认钱到账后,支付给攻击者等值黄金。至此,攻击者将10个比特币花了两次,从两名受害者那里各购得等值黄金。攻击者还可以如法炮制,取消与受害者B的转账,将同一笔钱再支付给其他人。。。。。。关于这种攻击,中本聪给出的解决方案是,建议收款人不要在公告挂出时立即确认交易完成,而是应该再看一段时间,等待各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消,才确认钱已到账。中本聪解释道,之前设定变态的编号规则,正是为了防御这一点。根据前面所述,生成有效账簿页不是那么简单的,要花费大量的人力反复试不同的幸运数 字,而且过程完全是碰运气。如果某账簿页包含你收到钱的确认,并且在后面又延续了6个,那么攻击者想要在落后6页的情况下从另一个分支赶超当前主分支是非 常困难的,除非攻击者拥有非常多的人力,超过其他所有诚实矿工的人力之和。而且,如果攻击者有如此多人力,与其花这么大力气搞这种攻击,还不如做良民挖矿来的收益大。这就从动机上杜绝了攻击的形成。比特币会一直增加下去,岂不是会严重通货膨胀中本聪说,这一点我也想到了。前面忘了说了,我给矿工组织的操作细则手册会说明,刚开始我们协议每生成一页账簿,奖励小组50个比特币,后面,每当 账簿增加21,000页,奖励就减半,例如当达到210,000页后,每生成一页账簿奖励25个比特币,420,000页后,每生成一页奖励12.5个, 依次类推,等账簿达到6,930,000页后,新生成账簿页就没有奖励了。此时比特币全量约为21,000,000个,这就是比特币的总量,所以不会无限 增加下去。没有奖励后,就没人做矿工了,岂不是没人帮忙确认交易了到时,矿工的收益会由挖矿所得变为收取手续费。例如,你在转账时可以指定其中1%作为手续费支付给生成账簿页的小组,各个小组会挑选手续费高的交易单优先确认。矿工如果越来越多,比特币生成速度会变快吗不会。中本聪解释,虽然可以任意加入和退出矿工组织,导致矿工人数变化,每个矿工也会拿到一个编码生成器,不过我已经在编码生成器中加入了调控机制,当前工作的编码生成器越多,每个机器的效率就越低,保证新账簿页生成速率不变。虽然每个人的代号是匿名的,但如果泄露了某个人的代号,账簿又是公开的,岂不是他的所有账目都查出来了确实是这样的。例如你要和某人交易,必然要要到他的代号才能填写交易单。因为收款人一栏要填入那人的代号。不过中本聪说可以提供无限制的保密印章,建议每一次交易用不同的保密印章,这样查账簿就追查不到同一个人的所有账目了。答疑完毕。说明本文用通俗比喻的方式讲解了比特币的运行机制。有几点需要说明:为了便于理解,我做了很多简化,因此有些机制细节和实际的比特币可能不完全相同。但总体思想和关键原理是一致的。由于很多计算机世界的东西(如公钥体系、网络传输)在现实世界中并没有特别好的对等物,所以故事里难免有一些生硬和不合常理的细节。本文描述的是比特币网络本身的技术原理和运作机制,当在如Mtgox这种买卖市场中进行比特币交易时,市场做了中间代理,并不遵从上述机制。编辑于 2018-01-22 19:01​赞同 2605​​157 条评论​分享​收藏​喜欢收起​Leaf​ 关注秒懂比特币挖矿: 1.我手上现在有一张面值100元的人名币。(比特币)2.谁关注公众号我就给谁。3.但是需要在评论里面猜出这张钱的编号才行。(挖矿,随机填充数值求解)自己想尽办法猜,猜中得100元全款——个人挖矿出钱召集一些人来一起猜——矿场召集认识不认识的人一起来猜,通过猜测的次数,按比例分配这100元——矿池以上是一个简单的类比例子,当然,你们关注并猜出了我兜里100块钱的编号,我保证给你。那么,比特币挖矿到底是怎么回事呢?回顾张三李四转账过程 找出问题在之前,我们用在一个偏僻的小村张三和李四转账的例子简单解释了什么是比特币。没看过的可以看下:【白话币圈】什么是比特币?这可能是最通俗易懂的答案了我们来简单回顾一下:当张三想要通过A账号转账1000元给李四的B账号时:① 张三大吼一声:大家注意啦,我用A账号给李四的B账号转1000块钱。② 张三附近的村民听了确实是张三的声音,并且检查张三的A账号是否有足够余额。③ 检查通过后,村民往自己的账本上写:A账号向B账号转账1000元,并修改余额:A账号余额=3000-1000=2000元,B账号余额=2000+1000=3000元。④ 张三附近的村民把转账告诉较远村民,一传十十传百,直到所有人都知道这笔转账,以此保证所有人账本的一致性。聪明如你一定发现了,在步骤② 如果张三吼了一声,附近村民假装没听到,都不去核实记账,那么这个系统不就停止工作了吗?为解决这个问题,村里商讨后决定,谁第一个确认是张三的声音的会获得500元。于是大家都竖起耳朵,时刻监听村里的每一个动静,真可谓草木皆兵。评论区有人问,这500元是哪儿来的?我这里也简答讲一下。1.比特币平均差不多每10分钟产生一个区块,这个区块能打包的交易数量是有限的,我们就算800笔吧。但是呢,旷工不会平白无故给你打包交易到并广播,所以需要收取手续费。而且,由于交易的人很多,先打包谁的交易也取决于手续费的高低。所以你可以看到,现在比特币火热了,手续费水涨船高。2.我们都知道比特币总量2100万个,发币机制是逐年递减。当旷工第一个成功打包这个区块并广播,并且是最长的链的话,那么他还会获得奖励,目前只有12.5个比特币。最开始是50个,已经衰减2次了。这里当然还有小问题,比如为什么要最长链,怎么确定是最长链,哪些链会被抛弃?如果大家有兴趣再深入说说。以上就是旷工的奖励。2017/12/8更新。在比特币的世界里,大约平均每10分钟会产生一个区块。所有的挖矿计算机都在尝试打包这个区块并提交,而第一个成功生成这个数据块的人,就可以得到一笔比特币报酬。最初,大约每10分钟就可以产生50个比特币的比特币报酬。但是该报酬每4年减半,现在每10分钟比特币网络就可以产生25个比特币。好了,接着上面的故事讲,张三这一吼,惊动了全村的人,大家都纷纷表示自己是第一个听到张三声音的人。这500块钱该给谁呢?于是村里又商讨出新的规定,需要有证据证明这是张三的声音。张三在喊的这一声里带有特定的声波数据,谁先破解出来就给谁。在比特币世界里,这是就是一个新的概念,共识机制。比特币是通过工作量证明的共识机制来决定记账权的,通俗来讲,谁证明了自己的工作量最大,谁就负责记账。工作量大小是通过计算符合某一个标准的比特币区块头的哈希散列值来体现的。区块头通常包含前一个区块的哈希散列值、Merkle根、时间戳、难度目标、以及一个填充的随机值。试图争夺记账权的节点称为挖矿节点,挖矿过程就是求出一个能够填充本区块头的随机值,让区块头的哈希散列值符合某一个标准。咱们接着故事讲,海归村民王二麻子凭借高超的计算能力,成功第一个匹配了张三的声波数据,然后他笑嘻嘻地向全村人广播自己破解成功。村民验证后,王二麻子如愿拿到了500元奖励金,李四也成功收到了张三的转账。网络上的每一个矿机接收并验证了一批交易,然后就开始进行挖矿,矿机需要反复的试验随机填充值来进行求解,一般采用产生随机数,尝试把产生的随机数填充到区块头,然后计算哈希。如果计算成功,则挖矿成功,向全网广播挖矿所得,全网节点验证后,把这个区块连接到区块的最上端,并且在全网达成一致。故事还在继续,王二麻子拿到这500元后就想:一个人的计算能力有限,我下次也非常可能不是第一个计算出来。若我改进算法,制造专门匹配这种声波数据的机器,然后卖机器岂不是能大赚一笔?于是就哼哧哼哧的专研去了,并在不久后面世。(专业矿机)村民蜡笔小明买了一台专业机器,觉得不错。于是大量采购,并找到一个电费低廉的场地,也请了专人人员来维护。于是,蜡笔小明便每天便看着一笔笔的500元进账。(矿场)村民张小凡也采购了一些机器,可是机器不多,能破解并拿到这500奖励的几率并不大。于是他创建了一个平台,所有有计算能力的人都可以参与进来。若得到奖励,则按每个人的计算力高低分配奖金。(矿池)好了,村民的故事差不多就到这里结束了,现在回过头来看文章开始的例子是不是特别形象?你们可以猜猜谁可能挖矿的最大算力。风险与受益其实,最初的时候,我们用电脑CPU就可以挖到比特币,比特币的创始人中本聪就是用他的电脑CPU挖出了世界上第一个创世区块。当然,现在也可以用家用电脑的CPU、GPU挖矿,只是收益非常低了。CPU挖矿的时代早已过去,GPU挖矿也早已不是主流,现在的比特币挖矿是ASIC挖矿和大规模集群挖矿的时代。回顾挖矿历史,比特币挖矿总共经历了以下五个时代:CPU挖矿→GPU挖矿→FPGA挖矿→ASIC挖矿→大规模集群挖矿 挖矿芯片更新换代的同时,带来的挖矿速度的变化是:CPU(20MHash/s)→GPU(400MHash/s)→FPGA(25GHash/s)→ASIC(3.5THash/s)→大规模集群挖矿(3.5THash/s*X)算力就是计算机每秒产生哈希碰撞的能力,算力越高,挖到比特币的概率越大,挖得比特币也就越多,回报越高。然而挖矿的受益并不是稳定且有保障的,电费将成为持续挖矿最大的成本之一,所以,有廉价电力的地方便成了旷工的最爱。挖矿的风险不仅于此,16年7月开始,比特币网络发行比特币数量就减半了,即每10分钟,每个区块只包含12.5个比特币,意味着相同算力挖出的比特币也会相应减少。但另一方面,币价也有上升可能。同时还伴随着断电、机器维护折旧等风险。最后,给大加介绍一种0风险赚钱的方法:猜出我兜里100元人民币的编号。哈哈。/逃跑...简单回答评论中 @诺pro 的一些疑问,估计也是很多人的疑问:1.目前比特币全部账本信息能很好的保存在一台普通的电脑上,这也是Core他们坚持不扩容的原因之一。另外根据摩尔定律,就算小扩容其实影响不大。2.仅仅降低交易费那么旷工没有动力,交易将更拥堵。当然这里有目前比较认可的取代方案POS。上面说的是挖矿是工作量证明即POW(Proof of Work),而POS的全称Proof of Stake,即股权证明。简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,有利于刺激全部用户参与,更去中心化。3.比特币等加密货币是匿名的,虽然你能看到纪录,但是你不知道是谁,同样你可以有多个匿名账户,中心化的你确定你能保密部分信息?4.不知道你这数据哪里来的,确实现在交易量少,原因很多,有支付场景弱,币价太高,大多数人持币待涨等多种因素。突然想到另一个因素,目前大量的币集中在交易所,很多交易所实际上是虚拟交易,当你要提币的时候才是真实交易,这样也大幅降低了真实交易量。2017/12/20更新公众号“对韭当割”,欢迎关注和交流。部分资料参考至@徐晓聪 @小龟 在本问题中的回答编辑于 2018-06-26 10:59​赞同 1197​​378 条评论​分享​收藏​喜欢

挖矿原理 - 廖雪峰的官方网站

挖矿原理 - 廖雪峰的官方网站

Index

廖雪峰的官方网站

Blog

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

More

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

 

Profile

Passkey

Sign Out

Sign In

English

简体中文

Index

区块链教程

比特币

区块链原理

P2P交易原理

私钥

公钥和地址

签名

挖矿原理

可编程支付原理

多重签名

UTXO模型

Segwit地址

HD钱包

钱包层级

助记词

地址监控

以太坊

账户

区块结构

交易

智能合约

编写合约

部署合约

调用合约

编写Dapp

常用合约

ERC20

Wrapped Ether

关注公众号不定期领红包:

加入知识星球社群:

关注微博获取实时动态:

挖矿原理

Last updated: ...

/

Reads: 3281439

Edit

在比特币的P2P网络中,有一类节点,它们时刻不停地进行计算,试图把新的交易打包成新的区块并附加到区块链上,这类节点就是矿工。因为每打包一个新的区块,打包该区块的矿工就可以获得一笔比特币作为奖励。所以,打包新区块就被称为挖矿。

比特币的挖矿原理就是一种工作量证明机制。工作量证明POW是英文Proof of Work的缩写。

在讨论POW之前,我们先思考一个问题:在一个新区块中,凭什么是小明得到50个币的奖励,而不是小红或者小军?

当小明成功地打包了一个区块后,除了用户的交易,小明会在第一笔交易记录里写上一笔“挖矿”奖励的交易,从而给自己的地址添加50个比特币。为什么比特币的P2P网络会承认小明打包的区块,并且认可小明得到的区块奖励呢?

因为比特币的挖矿使用了工作量证明机制,小明的区块被认可,是因为他在打包区块的时候,做了一定的工作,而P2P网络的其他节点可以验证小明的工作量。

工作量证明

什么是工作量证明?工作量证明是指,证明自己做了一定的工作量。例如,在驾校学习了50个小时。而其他人可以简单地验证该工作量。例如,出示驾照,表示自己确实在驾校学习了一段时间:

比特币的工作量证明需要归结为计算机计算,也就是数学问题。如何构造一个数学问题来实现工作量证明?我们来看一个简单的例子。

假设某个学校的一个班里,只有一个女生叫小红,其他都是男生。每个男生都想约小红看电影,但是,能实现愿望的只能有一个男生。

到底选哪个男生呢?本着公平原则,小红需要考察每个男生的诚意,考察的方法是,出一道数学题,比如说解方程,谁第一个解出这个方程,谁就有资格陪小红看电影:

因为解高次方程没有固定的公式,需要进行大量的计算,才能算出正确的结果,这个计算过程就需要一定的工作量。假设小明率先计算出了结果x=2.5,小红可以简单地验证这个结果是否正确:

可以看出,解方程很困难,但是,验证结果却比较简单。所以,一个有效的工作量证明在于:计算过程非常复杂,需要消耗一定的时间,但是,验证过程相对简单,几乎可以瞬间完成。

现在出现了另一个问题:如果其他人偷看了小明的答案并且抢答了怎么办?

要解决这个问题也很容易,小红可以按照男生的编号,给不同的男生发送不同的方程,方程的第一项的系数就是编号。这样,每个人要解的方程都是不一样的。小明解出的x=2.5对于小军来说是无效的,因为小军的编号是3,用小明的结果验证小军的方程是无法通过验证的。

事实上如果某个方程被验证通过了,小红可以直接从方程的第一项系数得知是谁解出的方程。所以,窃取别人的工作量证明的结果是没有用的。

通过工作量证明,可以有效地验证每个人确实都必须花费一定时间做了计算。

在比特币网络中,矿工的挖矿也是一种工作量证明,但是,不能用解多项式方程来实现,因为解多项式方程对人来说很难计算,对计算机来说非常容易,可以在1秒钟以内完成。

要让计算机实现工作量证明,必须找到一种工作量算法,让计算机无法在短时间内算出来。这种算法就是哈希算法。

通过改变区块头部的一个nonce字段的值,计算机可以计算出不同的区块哈希值:

直到计算出某个特定的哈希值的时候,计算结束。这个哈希和其他的哈希相比,它的特点是前面有好几个0:

hash256(block data, nonce=0) = 291656f37cdcf493c4bb7b926e46fee5c14f9b76aff28f9d00f5cca0e54f376f

hash256(block data, nonce=1) = f7b2c15c4de7f482edee9e8db7287a6c5def1c99354108ef33947f34d891ea8d

hash256(block data, nonce=2) = b6eebc5faa4c44d9f5232631f39ddf4211443d819208da110229b644d2a99e12

hash256(block data, nonce=3) = 00aeaaf01166a93a2217fe01021395b066dd3a81daffcd16626c308c644c5246

hash256(block data, nonce=4) = 26d33671119c9180594a91a2f1f0eb08bdd0b595e3724050acb68703dc99f9b5

hash256(block data, nonce=5) = 4e8a3dcab619a7ce5c68e8f4abdc49f98de1a71e58f0ce9a0d95e024cce7c81a

hash256(block data, nonce=6) = 185f634d50b17eba93b260a911ba6dbe9427b72f74f8248774930c0d8588c193

hash256(block data, nonce=7) = 09b19f3d32e3e5771bddc5f0e1ee3c1bac1ba4a85e7b2cc30833a120e41272ed

...

hash256(block data, nonce=124709132) = 00000000fba7277ef31c8ecd1f3fef071cf993485fe5eab08e4f7647f47be95c

比特币挖矿的工作量证明原理就是,不断尝试计算区块的哈希,直到计算出一个特定的哈希值,它比难度值要小。

比特币使用的SHA-256算法可以看作对随机输入产生随机输出,例如,我们对字符串Hello再加上一个数字计算两次SHA-256,根据数字的不同,得到的哈希是完全无规律的256位随机数:

hash256("Hello?") = ????????????????????????????????????????????????????????????????

大约计算16次,我们可以在得到的哈希中找到首位是0的哈希值,因为首位是0出现的概率是1/16:

hash256("Hello1") = ffb7a43d629d363026b3309586233ab7ffc1054c4f56f43a92f0054870e7ddc9

hash256("Hello2") = e085bf19353eb3bd1021661a17cee97181b0b369d8e16c10ffb7b01287a77173

hash256("Hello3") = c5061965d37b8ed989529bf42eaf8a90c28fa00c3853c7eec586aa8b3922d404

hash256("Hello4") = 42c3104987afc18677179a4a1a984dbfc77e183b414bc6efb00c43b41b213537

hash256("Hello5") = 652dcd7b75d499bcdc61d0c4eda96012e3830557de01426da5b01e214b95cd7a

hash256("Hello6") = 4cc0fbe28abb820085f390d66880ece06297d74d13a6ddbbab3b664582a7a582

hash256("Hello7") = c3eef05b531b56e79ca38e5f46e6c04f21b0078212a1d8c3500aa38366d9786d

hash256("Hello8") = cf17d3f38036206cfce464cdcb44d9ccea3f005b7059cff1322c0dd8bf398830

hash256("Hello9") = 1f22981824c821d4e83246e71f207d0e49ad57755889874d43def42af693a077

hash256("Hello10") = 8a1e475d67cfbcea4bcf72d1eee65f15680515f65294c68b203725a9113fa6bf

hash256("Hello11") = 769987b3833f082e31476db0f645f60635fa774d2b92bf0bab00e0a539a2dede

hash256("Hello12") = c2acd1bb160b1d1e66d769a403e596b174ffab9a39aa7c44d1e670feaa67ab2d

hash256("Hello13") = dab8b9746f1c0bcf5750e0d878fc17940db446638a477070cf8dca8c3643618a

hash256("Hello14") = 51a575773fccbb5278929c08e788c1ce87e5f44ab356b8760776fd816357f6ff

hash256("Hello15") = 0442e1c38b810f5d3c022fc2820b1d7999149460b83dc680abdebc9c7bd65cae

如果我们要找出前两位是0的哈希值,理论上需要计算256次,因为00出现的概率是162=256,实际计算44次:

hash256("Hello44") = 00e477f95283a544ffac7a8efc7decb887f5c073e0f3b43b3797b5dafabb49b5

如果我们要找出前3位是0的哈希值,理论上需要计算163=4096次,实际计算6591次:

hash256("Hello6591") = 0008a883dacb7094d6da1a6cefc6e7cbc13635d024ac15152c4eadba7af8d11c

如果我们要找出前4位是0的哈希值,理论上需要计算164=6万5千多次,实际计算6万7千多次:

hash256("Hello67859") = 00002e4af0b80d706ae749d22247d91d9b1c2e91547d888e5e7a91bcc0982b87

如果我们要找出前5位是0的哈希值,理论上需要计算165=104万次,实际计算158万次:

hash256("Hello1580969") = 00000ca640d95329f965bde016b866e75a3e29e1971cf55ffd1344cdb457930e

如果我们要找出前6位是0的哈希值,理论上需要计算166=1677万次,实际计算1558万次:

hash256("Hello15583041") = 0000009becc5cf8c9e6ba81b1968575a1d15a93112d3bd67f4546f6172ef7e76

对于给定难度的SHA-256:假设我们用难度1表示必须算出首位1个0,难度2表示必须算出首位两个0,难度N表示必须算出首位N个0,那么,每增加一个难度,计算量将增加16倍。

对于比特币挖矿来说,就是先给定一个难度值,然后不断变换nonce,计算Block Hash,直到找到一个比给定难度值低的Block Hash,就算成功挖矿。

我们用简化的方法来说明难度,例如,必须计算出连续17个0开头的哈希值,矿工先确定Prev Hash,Merkle Hash,Timestamp,bits,然后,不断变化nonce来计算哈希,直到找出连续17个0开头的哈希值。我们可以大致推算一下,17个十六进制的0相当于计算了1617次,大约需要计算2.9万亿亿次。

17个0 = 1617 = 295147905179352825856 = 2.9万亿亿次

实际的难度是根据bits由一个公式计算出来,比特币协议要求计算出的区块的哈希值比难度值要小,这个区块才算有效:

Difficulty = 402937298

= 0x18 0455d2

= 0x0455d2 * 28 * (0x18 - 3)

= 106299667504289830835845558415962632664710558339861315584

= 0x00000000000000000455d2000000000000000000000000000000000000000000

注意,难度值的数值越小,说明哈希值前面的0越多,计算的难度越大。

比特币网络的难度是不断变化的,它的难度保证大约每10分钟产生一个区块,而难度值在每2015个区块调整一次:如果区块平均生成时间小于10分钟,说明全网算力增加,难度也会增加,如果区块平均生成时间大于10分钟,说明全网算力减少,难度也会减少。因此,难度随着全网算力的增减会动态调整。

比特币设计时本来打算每2016个区块调整一次难度,也就是两周一次,但是由于第一版代码的一个bug,实际调整周期是2015个区块。

根据比特币每个区块的难度值和产出时间,就可以推算出整个比特币网络的全网算力。

比特币网络的全网算力一直在迅速增加。目前,全网算力已经超过了100EH/每秒,也就是大约每秒钟计算1万亿亿次哈希:

所以比特币的工作量证明被通俗地称之为挖矿。在同一时间,所有矿工都在努力计算下一个区块的哈希。而挖矿难度取决于全网总算力的百分比。举个例子,假设小明拥有全网总算力的百分之一,那么他挖到下一个区块的可能性就是1%,或者说,每挖出100个区块,大约有1个就是小明挖的。

由于目前全网算力超过了100EH/s,而单机CPU算力不过几M,GPU算力也不过1G,所以,单机挖矿的成功率几乎等于0。比特币挖矿已经从早期的CPU、GPU发展到专用的ASIC芯片构建的矿池挖矿。

当某个矿工成功找到特定哈希的新区块后,他会立刻向全网广播该区块。其他矿工在收到新区块后,会对新区块进行验证,如果有效,就把它添加到区块链的尾部。同时说明,在本轮工作量证明的竞争中,这个矿工胜出,而其他矿工都失败了。失败的矿工会抛弃自己当前正在计算还没有算完的区块,转而开始计算下一个区块,进行下一轮工作量证明的竞争。

为什么区块可以安全广播?因为Merkle Hash锁定了该区块的所有交易,而该区块的第一个coinbase交易输出地址是该矿工地址。每个矿工在挖矿时产生的区块数据都是不同的,所以无法窃取别人的工作量。

比特币总量被限制为约2100万个比特币,初始挖矿奖励为每个区块50个比特币,以后每4年减半。

共识算法

如果两个矿工在同一时间各自找到了有效区块,注意,这两个区块是不同的,因为coinbase交易不同,所以Merkle Hash不同,区块哈希也不同。但它们只要符合难度值,就都是有效的。这个时候,网络上的其他矿工应该接收哪个区块并添加到区块链的末尾呢?答案是,都有可能。

通常,矿工接收先收到的有效区块,由于P2P网络广播的顺序是不确定的,不同的矿工先收到的区块是有可能的不同的。这个时候,我们说区块发生了分叉:

在分叉的情况下,有的矿工在绿色的分叉上继续挖矿,有的矿工在蓝色的分叉上继续挖矿:

但是最终,总有一个分叉首先挖到后续区块,这个时候,由于比特币网络采用最长分叉的共识算法,绿色分叉胜出,蓝色分叉被废弃,整个网络上的所有矿工又会继续在最长的链上继续挖矿。

由于区块链虽然最终会保持数据一致,但是,一个交易可能被打包到一个后续被孤立的区块中。所以,要确认一个交易被永久记录到区块链中,需要对交易进行确认。如果后续的区块被追加到区块链上,实际上就会对原有的交易进行确认,因为链越长,修改的难度越大。一般来说,经过6个区块确认的交易几乎是不可能被修改的。

小结

比特币挖矿是一种带经济激励的工作量证明机制;

工作量证明保证了修改区块链需要极高的成本,从而使得区块链的不可篡改特性得到保护;

比特币的网络安全实际上就是依靠强大的算力保障的。

Comments

Make a comment

Sign in to

make a comment

Index

区块链教程

比特币

区块链原理

P2P交易原理

私钥

公钥和地址

签名

挖矿原理

可编程支付原理

多重签名

UTXO模型

Segwit地址

HD钱包

钱包层级

助记词

地址监控

以太坊

账户

区块结构

交易

智能合约

编写合约

部署合约

调用合约

编写Dapp

常用合约

ERC20

Wrapped Ether

廖雪峰的官方网站

©Copyright 2019-2021

Powered by iTranswarp

Feedback

License

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Error 403 Forbidden - This request is blocked.

For security reasons you can't connect to the server for this app or website at this time.

It maybe that you have too many requests or the illegal request payload is identified as an attack.

Please try again later.

比特币挖矿的过程 - 知乎

比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了PoW(Proof of Work)共识机制,通过挖矿的方式,来竞争新区块的记账权。谁拿到新区块的记账权,它创建的新区块就合法。挖矿的目的就是赢取记账权,确认新区块和交易。那么挖矿节点和矿工是如何配合工作,完成挖矿的呢?矿工破解挖矿任务挖矿节点创建好预备区块后,将预备区块的区块头数据发送给矿工。矿工收到挖矿任务后,会递增区块头中地随机数。每调整一次,就会按照比特币协议规定,用SHA256算法计算区块头的哈希值。如果区块头的哈希值大于目标哈希,就继续变更随机数,直到区块头的哈希值小于或者等于目标哈希为止(或者挖矿节点发现新区块已经由其他节点挖到,此时就会放弃原来挖矿任务,构造新的预备区块,重新开始挖矿)。挖矿节点验证区块,延长本地区块链当矿工找到可以使预备区块头哈希值小于目标哈希的随机数时,会立即向挖矿节点上报挖矿结果。挖矿节点接收到信息后,立刻按照矿工上报信息重组区块,并验证区块。验证无误后,挖矿节点将新区块保存到节点本地数据库,并添加到节点本地区块链上。区块的验证信息包括:区块头是否合法(区块头哈希≤TargetHash);区块头的MerkleRoot哈希跟区块中交易数据的MerkleRoot哈希是否一致(验证交易是否被篡改);交易数据中第一笔是否为Coinbase交易;区块中每一笔交易是否合法等等。向全网广播新区块挖矿节点将新区块在本地保存后,同步向比特币网络广播挖矿结果。由于整个区块的区块体积较大,一般会先广播新区块的区块头。其他节点在接到广播后,先验证区块头信息,验证通过后,节点会先在其本地的区块索引库中创建新区块的索引。在接收到新区块的全部信息后,节点验证交易信息和区块头的MerkleRoot哈希,验证通过后,节点将这些交易信息录入新区块,并延长本地区块链。至此,新区块的广播和验证完毕,挖矿节点开始下一个区块的挖矿工作。当前挖矿的一些特点集群挖矿-矿池:比特币挖矿这件事情,理论上任何人都可以自建比特币挖矿节点,参与挖矿,甚至可以通过手工验证区块头哈希,破解挖矿任务,竞争记账权。但博主在上一文中提到,按照当前的挖矿难度,即便使用现在的主流矿机,要找到一个符合比特币网络要求的新区块,理论上需要42年时间,而如果使用普通PC或者是手工计算,则需要上万年甚至上百万年。因此,普通矿工单独挖矿的经济效益太低,可能挖到机器报废,还挣不到一分钱。矿池就是在这种情况下应运而生的,大量矿工将自己的矿机接入矿池,从矿池的挖矿节点获取挖矿任务,集体挖矿。这样就可以在较短时间内挖到新区块,获得区块奖励,矿池按照挖矿过程中每个矿工的贡献情况,分配挖矿收益,所有矿工都可以实时获取挖矿收益,进行回本或者二次投资。矿机实际收到的挖矿任务中,TargetHash远大于比特币网络要求的TargetHash:矿池和矿工一起挖矿的流程,一样遵循上述过程。矿机通过网络跟矿池通讯,请求挖矿任务,矿池将挖矿任务(包含区块头等数据)发送给矿机,矿机变更区块头的随机数,并验证区块哈希。符合挖矿任务TargetHash要求的随机数,将按照挖矿协议的格式提交给矿池,矿池给矿机提交的挖矿结果计算收益。需要注意的是,如果给矿机下发的挖矿任务中,TargetHash是此时比特币网络的TargetHash,那么这个TargetHash太小,矿机基本不可能找到符合要求的随机数,提交挖矿结果,也就不可能获得挖矿收益。因此,矿池给矿机下发的挖矿任务中,有一个单独的信息:初始挖矿难度。这是一个远低于全网挖矿难度的数值,对应更大的TargetHash,在这个难度下,矿机可以在较短时间内找到符合要求的随机数,向矿池提交更多挖矿结果。矿池算力不同于矿机本地算力:谈及挖矿,总有一个绕不开的名词:算力。到底什么是算力呢?算力,其实就是矿工验证区块头哈希值的速度。矿机在获得挖矿任务后,会按照挖矿任务的信息,递增区块头的随机数,随机数每调整一次,就验证一次区块头的哈希值。可以看到,限制矿机挖矿快慢的唯一一个因素就是它验证区块头哈希值的快慢,因此有了“算力”这个指标。目前,常规比特币矿机的算力单位是TH/s,它的意思,每秒钟可以验证1T次哈希,1T=1×10^3G=1×10^6M=1×10^9K=1×10^12次。有过挖矿经历的朋友,都会发现,矿机本地显示的算力跟矿池显示的算力总是有差异。这是因为,矿机本地显示的算力,是矿机验证哈希的速度,它只跟矿机的性能有关,不管有没有找到符合挖矿任务要求的随机数,矿机本地算力都一直存在。而矿机在矿池显示的算力则不同,它是矿池按照矿机实际提交的挖矿结果计算出来的,如果矿机的运气较差,在较长时间内都没有找到符合挖矿任务要求的随机数,无法向矿池提交挖矿结果,矿机在矿池的算力就会降低。但时间拉长后,运气对矿机破解挖矿任务的影响会降低,矿机较长时间的矿池平均算力,跟矿机本地算力相差不大。以上是比特币挖矿的基础知识,如果能读懂这三篇文章,相信读者朋友对比特币挖矿会有一个初步的认识。如果想要跟博主交流探讨更多挖矿方面的问题,欢迎关注“闲话挖矿”微信公众号,同时也能更及时的了解博主更新的挖矿知识。文中涉及的几个知识点:区块高度:又叫Block Height,相当于区块的编号,它的值等于区块链中这个区块之前所有区块的数量。区块链的第一个区块是创世区块,区块高度为0,第二个区块的区块高度为1,第三个区块的区块高度为2,以此类推。区块链中区块的总数,即为最新区块的区块高度+1。PoW:全称为Proof of Work,中文名称为工作量证明。是比特币网络使用的一种用于解决比特币新区块确权问题的方法。在比特币网络中,人人都可以参与新区块的创建工作,PoW机制规定,谁能够在最短时间内找到一个区块头哈希值小于比特币网络指定的TargetHash的预备新区块,谁就拥有正式新区块的记账权。记账权:比特币的区块链,实质上是一个链式的大账本,链上的每一个区块,都是一本账,上边记录了发生在区块链上的比特币交易信息。因此,我们把创建新区块的过程看作记账的过程。记账权,顾名思义为记录交易账本的权利,也即在比特币区块链上创建正式新区块的权利。参考资料:编辑于 2020-07-12 20:45比特币 (Bitcoin)区块链(Blockchain)btc挖矿​赞同 3​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎

比特币挖矿算法详解 - 知乎

比特币挖矿算法详解 - 知乎首发于清源的区块链实验室切换模式写文章登录/注册比特币挖矿算法详解清源区块链工程师比特币网络中,源源不断的收到交易,需要节点不断的打包这些交易,而网络中的所有节点都是对等的,如何判断谁可以打包这些交易,如何避免重复打包这些交易呢?这个时候就需要用到工作量证明(PoW,Proof-of-Work)的方式决定记账权。网络中的任何全节点,都可以试图创建区块,但区块只有在至少满足下列条件时创建的区块才会被其他节点认可和接受。 区块中包含的交易都是合法的; 区块哈希要小于等于一个目标值;要满足第一个条件很简单,节点只要将每笔交易都验证一遍,丢弃掉不合法的交易即可。但要满足第二个条件就需要挖矿。挖矿比特币挖矿就是找到一个随机数(Nonce)参与哈希运算Hash(Block Header),使得最后得到的哈希值符合难度要求,用公式表示就是Hash(Block Header)<= target 比特币采用的哈希算法是 SHA-256 ,也就是说最后会产生256位的输出,一共2^256种可能的取值。 最后得到的哈希值小于target的意思是把哈希后得到的bytes转换成数字后小于target转换成的数字。举个例子,直观的感受一下挖矿的难度;SHA-256计算123的值

a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3

下面这段字符是比特币第1000个区块的哈希(2009年1月产生);

00000000c937983704a73af28acdec37b049d214adbda81d7e2a3dd146f6ed09

可以看到前面有8个0,虽然哈希值的生成是随机的,但是生成前面有8个0的值对计算机穷举来说也并不算太难。

再看一下这段字符,是比特币第560000个区块的哈希(2019年1月产生);

0000000000000000002c7b276daf6efb2b6aa68e2ce3be67ef925b3264ae7122

可以看到前面有18个0,要生成满足这个条件的哈希对于普通电脑来说几乎是不可能完成的任务了。简单来看挖矿难度的高低就是生成区块头的哈希值有多少0。挖矿难度在比特币系统中出块时间被设置为一个常数10分钟,但是挖出区块的速度并不是固定的,而是随着挖矿难度的变化在10分钟上下浮动, 挖矿难度越大,出块时间就越长,为了得到相对平均的出块时间,需要动态调整挖矿难度。 比特币每产生2016个区块调整一次挖矿难度,一个块10分钟,2016个块大概是两周的时间,而调整挖矿难度的这些逻辑都在代码中,当大多数诚实节点采用这个策略的时候整个网络就会自动遵循这个策略。挖矿难度的计算公式如下:diffculty = difficulty_1_target / target此处的 difficulty_1_target 为一个常数,非常大的一个数字( 2^(256-32)−1 )。表示挖矿的初始难度,目标值越小,区块生成难度越大。 2^(256-32)−1 是比特币的初始难度,是前2016个块的难度。 这个难度被存储在比特币的区块头nBits字段中,当有恶意节点篡改这个策略时,挖矿产生的区块头的哈希值就会和诚实节点产生冲突,不会被接收,白白浪费了算力。 因为策略不同,也就是nBits不同,恶意节点产生的区块哈希无法被诚实节点验证。 调整出块时间比特币系统中区块的生产速度是根据之前产生区块速度调整的,之前出块速度大于10分钟,则认为需要降低难度,则需要提高第一个公式中target的值,而target则通过如下公式计算;target = current_target * ( actual time / excepted time )current_target是当前系统中的难度值,target是调整后的难度值,actual time是实际产生区块的时间,excepted time是期望出块时间(2016块*10分钟),actual time有上下限,actual time最多8周,最小二分之一周。挖矿算法比特币中nBits标识了挖矿的难度,也就是说这个区块头进行SHA-256哈希算法后得到的bytes转换成数字后要小于这个难度,而SHA-256计算后的结果有256位,如果直接存储需要32个字节比较占用空间,所以采用了一种压缩算法。压缩算法nBits有4个字节32位,将SHA-256计算得到的值经过如下算法压缩到32位;将数字转换为 256 进制。如果第一位数字大于 127(0x7f),则前面添加 0。压缩结果中的第一位存放该256进制数的位数。后面三个数存放该256进制数的前三位,如果不足三位,从后补零。举个例子,将十进制1000压缩;1. 1000转换256进制数,1000 = 3 * 256 + 232 = 3*256^(2-1) + 232*256^(1-1)

2. 3小于127,不需要补0,跳过

3. 从第一部看到1000转换成256位数有2位,压缩结果第一位应该存放2

4. 因为只有两位,所以最后一位补0,得到存放的值为 [2, 3, 232, 0]十进制,转换十六进制 [0x02, 0x03, 0xe8, 0x00] 合并存储到nbits为 0x0203e800难度计算在第一个公式中difficulty_1_target的值为 2^(256-32)-1,转换成256进制为;FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF第一位大于0x7f,前面补0,变为00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF其长度等于 28+1=29 (0x1d),且长度超过三位,无需补零,则压缩结果为:0x1d00FFFF,因为压缩存储容量只有才4个字节,前两字节已经被长度和添加的 00 所占用,只剩下2个字节来存储数字,这样后面的26个 FF 值被丢弃。T=0x00FFFF * 256^(0x1b-3) = 0x00000000FFFF0000000000000000000000000000000000000000000000000000比特币中的difficulty就是0x1d00FFFF,如果区块中的nBits为0x1d00FFFF则说明这个区块挖矿难度为最小挖矿难度1.实际上专业的矿池程序会保留被截断的FF:00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF我们算一下比特币101799号区块的挖矿难度,通过区块链浏览器可以看到101799号区块的nBits为0x1b0404cbD = 0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF / 0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.669773817162 (pdiFF)pdiFF也被称为矿池难度。算力为了找到符合条件的值在挖矿的时候需要不断的调整区块头中Nonce的值,但是又会有一个问题,在比特币中Nonce的值是32位的,如果挖矿难度太大,就算穷尽Nonce的所有可能还是不能算出符合条件的值。铸币交易在一个区块产生的时候,会有一个铸币交易(coinbase),也就是矿工为自己铸币,产生新的比特币。铸币交易没有UTXO输入,只有输出指向自己的比特币地址,当挖矿成功,这个区块被网络接收的时候,新产生的币就转移到这个矿工地址了。看一下铸币交易包含的字段; transaction hash:“交易哈希”字段32个字节全部填充0(因为其没有UTXO输入);ouput index:“交易输出索引”字段全部填充0xFF(十进制的255); coinbase data:coinbase数据长度最小2字节,最大100字节。除了开始的几个字节外,矿工可以任意使用coinbase的其他部分,随意填充任何数据。以创世块为例,中本聪在coinbase中填入了这样的数据“The Times 03/Jan/ 2009 -Chancellor on brink of second bailout for banks“; - coinbase data size:coinbase数据大小; sequence number:现在未使用,设置为0xffffffff可以看到铸币交易的coinbase data字段是我们可以控制的,当Nonce不能满足挖矿难度的时候,我们可以通过调整coinbase data字段,从而影响区块头的默克尔树根的值,提供更多的可能来满足挖矿难度的要求。算力单位通过上面的流程,进行一次可能的挖矿尝试被称为H。 1 H/s = 每秒可执行一次哈希运算。 1 KH/s = 每秒1,000哈希(一千次)。 1 MH/s = 每秒1,000,000次哈希(百万次)。 1 GH/s = 每秒1,000,000,000次哈希(十亿次)。 1 TH/s = 每秒1,000,000,000,000次哈希(万亿次)。 1 PH/s = 每秒1,000,000,000,000,000次哈希。 1 EH/s = 每秒1,000,000,000,000,000,000次哈希。挖矿收益矿机挖矿的时候就会出现很长的时间找不到符合条件的哈希值,如果找不到哈希值不能打包区块就没有收益,显然对矿工十分不友好,但是如果挖到就像中彩票一样获得非常丰厚的回报。矿池为了避免单个矿工挖矿收益的不稳定性,就出现了矿池,矿池集合了大量的矿工,平均挖矿的收益,避免了挖矿收益的不稳定性。 矿池组织大量的矿工挖矿面临很重要的一个问题就是如何把高难度计算哈希的任务拆解成相对简单的任务,发送给单个矿工,回顾之前挖矿难度的计算,可以简单的认为前面0的多少表明了挖矿的难易。 0越多,挖矿难度越高,为了降低挖矿难度我们就要增加挖矿哈希0的数量,举个例子假设挖矿目标值 0x000abc,只要满足这个值就可以打包区块获得挖矿收益;

降低挖矿难度为 0x001abc,发送给矿工,矿工只要计算区块头满足这个相对低一点的难度就可以得到一个分片(shared),但是单个矿工挖到这个简单难度的块是无法发布到整个网络中的,但是矿池可以把这个分片记录下来,作为以后给这个矿工奖励的凭证。

0x001abc是0x000abc的子集,只要子集足够多总有一个会满足目标值。

当有一个矿工挖出一个满足目标值之后就可以获得挖矿收益,而挖矿就可以根据矿工分片多少来获得收益。

矿工收益 = 挖矿收益 / 挖到的分片数量但是现在还有一个问题没有解决,单个矿工挖到目标值以后如果私吞收益,私自广播区块怎么办?矿池有集中托管式的,也有分布式的。 集中托管式矿池,矿工可以把挖矿的机器托管给矿池,由矿池统一操作维护,只需要支付一些电费管理费即可,这样就避免了私自广播。 分布式矿池,矿工将机器自行管理,通过矿池协议从网络连接矿池即可,这样就会出现私自广播的可能。回顾一下铸币交易coinbase,可以看到有output字段,UTXO模型中币的来源都是上一个交易的output,所以可以把铸币交易的output字段设置为矿池的地址,然后随机生成一些coinbase data的填充后生成区块头的默克尔树,最后发由矿工去尝试目标值。通过这样的方式,即使矿工找到满足条件的哈希值,铸币交易的地址也是矿池的地址,私自广播区块没有任何收益,如果调整铸币交易的地址,这样又回到了独立挖矿的场景。全网算力如果要获知全网算力,可以通过出块时间,挖矿难度大致反推出全网算力。区块确认当一个区块产生之后,它不是立即可信的,网络上的节点总是相信最长的区块链,当一条交易记录被打包进一个区块之后,就有了一个确认,而这个区块所在的链后面被再加入一个区块,就是第二个确认,如此下去,一个交易有了6个确认,我们就认为这个交易已经确定了,会被永远记录在区块链中。 为什么是6个确认呢?因为每一个确认就是一个挖矿过程,需要大量的工作量证明,因此,这6个区块被同一个矿工创建的可能性微乎其微(可以说是不可能),因此矿工伪造交易也基本不可能。由于比特币的区块平均产生时间是10分钟,所以一个交易要1小时左右才能保证成功(最快),不过也不是所有的系统都这样认为,有些网站在接受比特币支付时,认为4个确认就可以给客户发货了,区块确认越多则越难被逆转。区块广播在区块链中,为了尽快收到其他节点的信息,节点间并不是直接传递区块信息的。 节点向附近节点发送一个Inv消息,Inv消息中包含已经被发送者(sender)接收并验证过的“交易记录的哈希”、以及“区块哈希”。接收者(receiver)收到Inv消息后,如果他还尚未从其他节点收到过相同的信息,他会发送一个getdata消息给发送者,要求得到交易记录及区块哈希包含的具体信息。此时,区块和交易记录的信息才会进行整体传递。 其中Inv消息结构如下;type MsgInv struct {

InvList []*InvVect

}

type InvVect struct {

Type InvType // Type of data

Hash chainhash.Hash // Hash of the data

}欢迎关注我的博客(qyuan.top),不定期分享一些区块链底层技术文章,博客排版要比知乎好一点(ㄟ( ▔, ▔ )ㄏ)。编辑于 2020-05-12 11:18挖矿区块链(Blockchain)比特币 (Bitcoin)​赞同 83​​11 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录清源的区块链

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Error 403 Forbidden - This request is blocked.

For security reasons you can't connect to the server for this app or website at this time.

It maybe that you have too many requests or the illegal request payload is identified as an attack.

Please try again later.

什么是比特币挖矿? | 了解关于BTC的一切 | 比特币入门

特币挖矿? | 了解关于BTC的一切 | 比特币入门开始什么是比特币挖矿?比特币的新铸造过程在某些方面类似于从地球中提取贵金属的过程。因此,这个过程被称为“比特币挖矿”。正如比特币白皮书中所述: 不断增加固定数量的新币类似于金矿工人耗费资源将黄金加入流通。在我们的案例中,耗费的是CPU时间和电力。 比特币挖矿的简化概述如下:人们通过应用计算能力参与一种称为“工作量证明”(PoW)的过程,以竞争获得比特币奖励。之所以这样命名,是因为只有那些证明自己已经投入了足够资源(工作)的参与者(矿工)才有机会赢得奖励。大约每10分钟,奖励会分发给一个胜出的“矿工”。奖励有两部分 -> (1) “区块奖励”,即新铸造的比特币。在写作本文时,区块奖励设定为6.25比特币(但从2024年5月初开始,奖励将减半,之后每四年再减半,依此类推)。(2) 当前区块内所有交易相关的费用。希望进行交易的终端用户必须为拟议的交易附加一笔费用,以激励矿工将其包含在下一个区块中。目录为什么需要比特币挖矿?什么是工作证明,为什么它是必要的?比特币挖矿是如何工作的?什么是比特币的哈希算法?比特币挖矿中的难度调整是什么,为什么需要它?比特币挖矿合法吗?比特币挖矿对环境有害吗?比特币挖矿盈利吗?比特币挖矿如何影响比特币的价格?仅需 30 美元就能起步购买从比特币、比特币现金、以太坊等中选择相关文章从此处开始 →比特币快速入门指南了解比特币及其重要性的简明介绍。查看 →比特币快速入门指南了解比特币及其重要性的简明介绍。我如何创建比特币钱包?学习如何快速轻松地创建比特币钱包。了解不同的钱包类型及其各自的优缺点。查看 →我如何创建比特币钱包?学习如何快速轻松地创建比特币钱包。了解不同的钱包类型及其各自的优缺点。比特币术语查看 →比特币术语阅读我们的常见问题解答快速找到常见问题的答案。查看 →阅读我们的常见问题解答快速找到常见问题的答案。我怎样购买比特币?了解如何在几分钟内获得您的第一比特币。查看 →我怎样购买比特币?了解如何在几分钟内获得您的第一比特币。如何出售比特币?了解如何安全地将比特币兑换成本地货币。查看 →如何出售比特币?了解如何安全地将比特币兑换成本地货币。如何保障我的加密资产安全?确保您的加密资产安全,请遵循这些简单的建议。查看 →如何保障我的加密资产安全?确保您的加密资产安全,请遵循这些简单的建议。你收件箱中的 Bitcoin.com每周的重要新闻提要,加上为经济自由提供支持的教育资源和产品及服务更新注册使用 Bitcoin.com 钱包,开始安全投资已生成超过个钱包安全买卖、交易和投资比特币及其他加密货币所需要的一切立即创建您自己的钱包

比特币挖矿 - 所需的计算能力 + 工作原理 - HashDork

比特币挖矿 - 所需的计算能力 + 工作原理 - HashDork

跳到主要内容 跳到标题右侧导航 跳到网站页脚哈希多克万物未来科技标题搜索站内搜索提交搜索菜单文章

未来科技

元宇宙

浏览

采访系列

应用开发

人工智能

全面、

编码

蟒蛇

系统总线

网络安全

深度学习

未来科技

元宇宙

更多 →

时间

DevOps的

电子

游戏

机器人

机器学习

代码编程

使用Javascript

社交媒体

软件与应用

系统设计

UI / UX

网站制作

服务器

HashDork 讲座

搜索、站内搜索提交搜索

挖掘比特币所需的计算能力以及它的工作原理

比特币挖矿 – 所需的计算能力 + 工作原理

2021 年 10 月 29 日 by 松鸦 分类: 全面、目录[隐藏][展示]如何Bitcoin的工作?什么是比特币采矿?需要了解的重要概念比特币挖矿如何工作?+ - 比特币交易的基本要素SHA-256 算法和默克尔树区块头解决哈希难题挖比特币的先决条件 开采比特币对环境的影响专业人士 的利弊 结论第一个加密货币, 比特币

,于 2009 年首次亮相。它与一种称为区块链的技术一起工作,该技术将一系列加密的数字块连接成一条链,因此得名。 比特币交易存储在每个区块中。 由于使用了区块链和加密,交易非常安全。

中本聪,或一群自称中本聪的人,发明了这种加密货币。 直到现在,没人知道这个中本聪是谁。 比特币的主要优势在于它是去中心化的,这意味着它不能被团体或政府控制。

网络上的任何人,无论身在何处,都可以将比特币发送给网络上的任何其他人; 您需要做的就是建立一个比特币账户并存入一些比特币,然后才能发送这些比特币。 您可以通过购买或开采它们来获得它们。

这是故意的:比特币没有得到政府或任何其他发行机构的支持,除了嵌入系统核心的证明来确保其价值外,别无其他。

如何Bitcoin的工作?

区块链是一种去中心化的数字账本,是比特币的基础。 顾名思义,区块链是由块组成的链接数据体,其中包括有关每笔交易的信息,例如日期和时间、总价值、买卖双方以及每笔交易的唯一标识号。 为了构建数字区块链,条目按时间顺序连接。

一个交易区块必须经过大多数比特币持有者的验证才能包含在比特币区块链中,并且用于识别用户钱包和交易的唯一代码必须匹配正确的加密模式。

这些代码是极难伪造的冗长的随机整数。 事实上,知道您比特币钱包密钥的欺诈者与连续九次赢得强力球大奖的几率大致相同。 每笔交易都需要区块链验证码中的这种统计不可预测性,大大降低了任何人进行欺诈性比特币交易的机会。

什么是比特币采矿?

政府印刷法定货币,但比特币允许用户挖掘新硬币并获得奖励。 任何人都可以使用专门的硬件来挖掘比特币,并且每挖出一个区块,他们都会获得一定的奖励(目前为 6.25 BTC)。

但是,收益是每四年减半,或者当已经开采了 210,000 个区块时。 挖矿不仅会生成新的比特币区块,还有助于验证网络交易。 矿工每 1MB 的确认交易区块都会获得奖励。

比特币区块包括存储先前区块的哈希值以及交易信息的哈希值。 哈希是由指定数量的随机数字组成的一组整数和字母。 每个散列都是独一无二的,没有人可以仅仅通过查看它来猜测它包含什么数据。

即使矿工已经确认了一笔交易,他们也可能得不到任何补偿。 挖矿的工作方式是,如果你想通过验证一个交易块获得奖励,你必须是第一个这样做的矿工。 这就是工作量证明系统的工作原理。

在比特币网络上对比特币交易进行数字验证并将其添加到区块链记录中的过程称为比特币挖掘。 它是通过解决复杂的加密哈希问题来验证去中心化区块链分类账上的交易块来完成的。

要解开这些谜语,您将需要大量的处理能力和大量昂贵的设备。 矿工获得比特币以换取他们的努力,最终被释放到流通中,因此被称为比特币挖矿。

需要了解的重要概念

要全面理解比特币挖矿,首先要理解区块链的三大基本思想。

工作证明 – 矿工通过解决称为工作证明的具有挑战性的数学挑战来验证区块链挖掘中的交易。 为此,矿工的主要目标是发现 nonce 值,这是矿工必须解决的数学问题,以便创建小于网络对某个区块的目标的哈希值。

分布式帐簿 – 分布式账本是许多人可以访问的数据库,并且通过共识在多个站点、公司或国家之间共享和同步。 它允许公众在交易过程中作为“证人”出现。 分布式账本是跟踪所有区块链网络交易的全球账本。 比特币的用户是验证网络交易的人。

SHA-256 – 区块链通过使用称为 SHA-256 的哈希算法来禁止不必要的访问,以确保块的安全性。 他们已经过数字签名。 一旦创建,它们的哈希值就不能改变。 SHA-256 接受任何长度的输入字符串并提供固定的 256 位输出; 它是一种单向函数; 您无法从输出(您生成的内容)中完全推断出输入反向的反向。

比特币挖矿如何工作?

区块链是一种点对点网络,因其非常安全和透明而受到称赞,因此值得信赖。 这是因为区块链网络中的记录是使用时间戳和加密哈希函数保护的,因此在将交易记录到分类帐后更改交易几乎是困难和禁止的。 缺乏集中控制是区块链安全的基础。

这是开始比特币挖矿所需的全部知识。

比特币交易的基本要素

在比特币网络中启动交易时涉及三个组件:

交易的输入

交易的结果

交易金额

比特币挖掘程序会为每个难以破译的交易输入产生一个新的加密哈希问题。 然后,该程序根据制作区块所需的交易数量创建一棵 Merkle 树。

SHA-256 算法和默克尔树

哈希树,也称为默克尔树,是一棵树,其中数据块的哈希算法在每个叶子节点上都被标记,其子节点的哈希算法在每个非叶子节点上都被标记。 Merkle 树是一种数据结构,用作块内所有交易的摘要。

单个事务哈希也称为事务 ID,使用 SHA-256 技术在 Merkle 树中重复链接,直到只有一个哈希标识整个树。 这个哈希被称为 Merkle 根或根哈希。 Merkle 树允许比特币网络快速验证交易。

哈希函数属性包括:

唯一:对输入的任何修改总是会导致完全不同的哈希(不可预测)。 换句话说,两个不同的数据集不能产生相同的散列。

确定性: 相同的输入每次都会产生相同的哈希值。

不可逆: 哈希只在一个方向产生,这意味着不能从哈希中推导出原始字符串。

恒定输出大小:不管源数据的大小,相同的方法总是会创建相同长度的哈希。

区块头

区块头存储 Merkle 根,它是 Merkle 树的标识符。 区块头提供区块信息,包含以下组件:

比特币软件的版本号

前一个块的哈希

Merkle 根(根哈希)

特定时间的加密随机数

矿工将使用这些数据来解决哈希问题并添加一个块交易。

解决哈希难题

矿工必须通过在满足复杂性要求的同时将哈希定位在指定目标之下来解决哈希问题。 标头中包含的目标是一个 67 位数字,该数字根据尝试解决哈希函数的矿工数量确定挖矿难度。

重要的是要记住,这个难度在每个 2016 区块之后都会有所不同,具体取决于矿工在之前的 2016 区块中求解方程所花费的时间。 这也有助于将区块链中的交易附加率保持在 10 分钟。

矿工将尝试通过不断向区块头添加随机数来解决哈希问题,直到生成的哈希值小于目标值。 当矿机解决问题时,当节点达成共识时,一个新块在比特币网络上成功生成和验证。 当一个块被验证时,它包含的交易被验证,并且该块被添加到链中。 如前所述,这每 10 分钟发生一次。

挖比特币的先决条件 

比特币矿工将首先选择并设置他们的交易工具。 

GPU(图形处理单元)硬件、用于加密挖掘的 SSD 或 ASIC(专用集成电路)

用来存放的钱包 

挖矿软件

最喜欢的矿池(如果选择矿池挖矿选项而不是单独挖矿)

当所有这些都到位并且系统打开时,它开始自行挖掘。 只有在系统或网络故障、停电或日常系统维护的情况下,才会发生任何其他人机交互。

让我们详细讨论所有要求。

成为比特币矿工需要一个挖矿系统。 您可以购买预先构建的设置。 然而,它们可能比定制的采矿设备更昂贵。 整个采矿系统可能非常嘈杂,产生大量热量,并且必须每周 24 天、每天 XNUMX 小时运行。 在比特币挖矿业务中工作是一种非常紧张的氛围。

开发采矿设置类似于构建游戏计算机。 如果您自己构建它,您可能熟悉在出现问题时如何维护和维修硬件。 如果你没有时间做一个,你可能总是买一个已经建成的。

预建 采矿钻机 最多可能有两个 GPU,但定制的装备可能有更多的 GPU。 一个采矿设备,无论是新的还是二手的,都需要几千美元。 购买二手矿机将为您提供已经磨损且使用寿命有限的 GPU。

首先,该钻机只需要一个基本的 Windows 操作系统和一些采矿软件。 在您决定了适合您的采矿设置的情况后,您可以开始购买主板。 对于您的采矿设备,您不需要高端主板。 主要目标是能够支持尽可能多的 GPU。

这些 MOBO 也应该可以定制。 你看看华硕、微星和技嘉主板。 找到这些组件后,就该选择 CPU。 一个当代 具有 4-8 GB RAM 的多核 CPU 是必须的。 您不必为了获得更高的性能而牺牲稳定性而对 CPU 进行超频。 英特尔的入门级 CPU,例如 Celeron 或 Pentium,就足够了。

挖矿设置需要 至少1000W的电源 和 可靠的互联网连接. 由于这些采矿系统每周 24 天、每天 XNUMX 小时在高负载下运行,因此需要黄金级采矿电源。 这有可能显着提高电力成本! 您可以连接两个电源来创建一个更大的采矿系统。

在所有昂贵的 GPU 和高功率电源之后,您可以节省存储和 RAM 的费用。 对于 Windows PC,建议使用 8GB RAM; 尽管如此,一个 4GB 的 RAM 就可以了。 请记住,如果您的电费或备用组件较低,您可以简单地以很少或没有额外成本建立一个采矿系统,而不会破坏银行。

您还应该考虑在当今环境中挖掘比特币区块的难度。 如果一切按计划进行,您可能会在 7-8 个月后开始赚钱。 如果您周围有任何硬件,您可以尝试一下!

开采比特币对环境的影响

比特币挖矿每年需要大约 91 太瓦时的电力。 这也是谷歌所有全球业务所用能源的七倍多。

在全球范围内,比特币的电力消耗对气候变化和实现《巴黎协定》的目标产生了可怕的影响,因为它转化为每年估计 22 至 22.9 万公吨的二氧化碳排放量——相当于 2 至 2 亿户家庭能源使用产生的二氧化碳排放量一年内。

根据一项分析,比特币可能导致全球变暖超过 2°C。 根据另一项估计,到 130 年,仅中国的比特币采矿业就可能排放 2 亿公吨二氧化碳。但是,如果更多的采矿业转移到美国和其他国家,除非使用更多的可再生能源,否则这个数字可能会更高。

专业人士 

交易在任何时候都是私密和安全的,可能的费用更少。 一旦你拥有比特币,你就可以随时随地将它们发送给任何人,从而减少每笔交易的时间和可能的成本。 交易中不包含姓名或信用卡号等个人信息,这降低了客户信息被用于欺诈性购买或身份盗用的危险。 (但请记住,为了在交易所购买比特币,您通常需要先关联您的银行账户。)

规避传统金融机构或政府中间人的能力。 在金融危机和大衰退之后,一些投资者渴望采用另一种去中心化的货币——一种传统银行、管理机构或其他第三方几乎无法控制的货币。

有很大的扩展空间。 一些购买并持有这笔钱的投资者认为,随着比特币的发展,更大的信心和更广泛的用途将会随之而来,从而增加货币的价值。

的利弊 

对黑客的担忧 虽然支持者声称比特币底层的区块链技术比传统的电子汇款更安全,但事实证明,比特币热钱包是黑客的诱人目标。 发生了许多引人注目的违规行为,例如 2019 年 40 月的报告称,超过 XNUMX 万美元的比特币从加密货币交易所 Binance 的多个高净值账户中被盗(该公司承担了损失)。

比特币目前只被少数互联网零售商接受。 这使得仅仅依靠比特币作为一种货币是不可能的。 政府甚至可能会强制零售商不接受比特币,以确保用户的交易可以被追踪。

结论

比特币挖掘是一个复杂的过程,需要解决复杂的算法。 如果你想开始挖掘比特币,你需要投资一些广泛的硬件和电源要求。 您可能需要几个月的时间才能开始赚钱。 然而,后来的回报可能令人难以置信。

我希望这篇文章能够回答您关于比特币挖矿的所有问题。 在评论区分享你的观点。

分享到:

关于我们 松鸦

我是计算机科学工程师,对 AI 感兴趣,曾在初创公司从事研究项目。 我提供有关未来技术的总部内容。

更多关于 HashDork 的文章:

加密流动性池——你需要知道的一切

如何在浏览器上安装和使用 MetaMask - 一步一步

Tranchess:初学者指南

分散标识符

读者互动

发表评论 取消回复

您的电邮地址不会被公开。 必填带 *评论 * 名字 *

邮箱地址 *

您的网站

下次留言时,保存我的姓名,电邮。

Δ

边栏

人工智能与设计的结合。

使用 Figma 的免代码交互工具将您的原型从静态屏幕提升为动态 AI 游乐场。

探索Figma

什么是新的

渲染与 Digitalocean

7 个最佳数据版本控制工具

15 个最佳在线 Python 编译器

15 款最适合设计师的 AI 工具

十大 AI 10D 模型生成工具

十大人工智能求职工具

市场上最强大的无代码平台

探索泡泡

浏览 一切 你可以用 Bubble.io 创建

关于哈希多克

HashDork 是一个专注于人工智能和未来技术的博客,我们在其中分享见解并涵盖人工智能、机器学习和深度学习领域的进展。

在推特上关注 hashdork

邮箱:

            ↳ 订阅 HashDork 周刊!

关于我们 – 刊登广告 – 工作机会 – 联系我们 – 免责声明 – 隐私政策 – 使用条款 – 网站地图

© HashDork — Squeeze Growth® LLP 的一部分| 2020 – 2024

Back to top

 

 

您目前处于离线状态

随时了解未来科技订阅 HashDork 周刊。 将我们最好的内容直接发送到您的收件箱。订阅

这份未来的科技通讯不烂每周一,星期一。 包含人工智能、Web 开发和未来技术领域的最新成果。立即订阅 随时退订。 没有垃圾邮件,没有营销,没有销售。

Facebook

Twitter

LinkedIn

Reddit

WhatsApp

Telegram

邮箱地址

复制链接

复制复制

专利所有者 社交快照

普通电脑挖比特币,要多久才能挖到1个?_澎湃号·政务_澎湃新闻-The Paper

挖比特币,要多久才能挖到1个?_澎湃号·政务_澎湃新闻-The Paper下载客户端登录无障碍+1普通电脑挖比特币,要多久才能挖到1个?2021-01-30 19:20来源:澎湃新闻·澎湃号·政务字号昨日马斯克将其Twitter的简介改为比特币之后比特币在不到30分钟内涨超15%价格高于37000美元/枚不过英国IT工程师詹姆斯·豪威尔斯对于这一切却开心不起来。据媒体报道,豪威尔斯曾不小心将藏有7500枚比特币私钥的硬盘当垃圾扔掉,按照现价,这些比特币价值超过2.6亿美元(约16.8亿元人民币)。有小伙伴问了:比特币那么值钱我能不能用家里的电脑来挖矿?今天科科和大家说说挖矿的事比特币从哪来的?科科给大家一个通俗易懂的解释比特币就是某人给你做一道数学题目这个题目有100个答案比特软件的作用就是通过电脑计算出这100个答案假如你计算出来一个答案你就得到一个比特币这个答案是存在你的硬盘里的也就是说如果你把硬盘丢了或是把硬盘格式化了你的比特币就没了这个答案具有唯一性而且答案的总数是固定的假如你计算出这个答案别人就只能计算出其他答案如果有人愿意花钱买这些比特币最后就产生了交易比特币好挖吗?那么有小伙伴肯定要问如果用一台笔记本电脑去挖比特币的话大致多久能挖到1个呢?比特币的产生是通过不断碰撞的哈希值来计算的。通俗地讲,就是电脑计算出正确答案的次数。现在一款普通笔记本电脑的CPU每秒钟大概可以碰撞800多次哈希值,而一块中端显卡则可以碰撞2000多次。由于比特币算法的特性影响,所以相对于做复制逻辑运算的CPU来说,只做简单重复算法的GPU会更适合来挖矿。为了表示现在比特币挖矿有多难,我们用一款GTX1080Ti来做做实验。一块GTX1080Ti售价为2000-3000元,这可以说是显卡界的中高端品种!就是这样一台输出爆炸的显卡它的算力是多少呢?大约是1.8GH/S也就是0.0018TH/S得出收益是每天0.00000021个比特币这是一个什么概念呢?按目前一个比特币大约23万人民币的价格算,这台配置上万的主机每天能挖出价值4分8厘的比特币。而且按照这个速度,我们大概需要——1.3万年才能挖出一个比特币……所以想用自己电脑挖比特币的盆友们还是洗洗睡吧~那么问题来了别人究竟是如何挖矿的?发展到现在为止,所有的比特币基本上都是由比特币矿场用专用的比特币矿机挖出来的。一台专业矿机蚂蚁s9矿机的算力目前大致为13.5TH/S,这相当于7500块1080ti显卡算力的总和,而一个中型矿场就拥有几百上千台这样的矿机,所以个人电脑即便再牛逼,碰到这样的专业选手还是被甩得连车尾灯都看不到啊。原标题:《普通电脑挖比特币,要多久才能挖到1个?》阅读原文特别声明本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问http://renzheng.thepaper.cn。+1收藏我要举报查看更多查看更多开始答题扫码下载澎湃新闻客户端Android版iPhone版iPad版关于澎湃加入澎湃联系我们广告合作法律声明隐私政策澎湃矩阵澎湃新闻微博澎湃新闻公众号澎湃新闻抖音号IP SHANGHAISIXTH TONE新闻报料报料热线: 021-962866报料邮箱: news@thepaper.cn沪ICP备14003370号沪公网安备31010602000299号互联网新闻信息服务许可证:31120170006增值电信业务经营许可证:沪B2-2017116© 2014-2024 上海东方报业有限公

挖矿原理 - 廖雪峰的官方网站

挖矿原理 - 廖雪峰的官方网站

Index

廖雪峰的官方网站

Blog

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

More

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

Java教程

手写Spring

手写Tomcat

Makefile教程

Python教程

JavaScript教程

区块链教程

SQL教程

Git教程

文章

问答

 

Profile

Passkey

Sign Out

Sign In

English

简体中文

Index

区块链教程

比特币

区块链原理

P2P交易原理

私钥

公钥和地址

签名

挖矿原理

可编程支付原理

多重签名

UTXO模型

Segwit地址

HD钱包

钱包层级

助记词

地址监控

以太坊

账户

区块结构

交易

智能合约

编写合约

部署合约

调用合约

编写Dapp

常用合约

ERC20

Wrapped Ether

关注公众号不定期领红包:

加入知识星球社群:

关注微博获取实时动态:

挖矿原理

Last updated: ...

/

Reads: 3281440

Edit

在比特币的P2P网络中,有一类节点,它们时刻不停地进行计算,试图把新的交易打包成新的区块并附加到区块链上,这类节点就是矿工。因为每打包一个新的区块,打包该区块的矿工就可以获得一笔比特币作为奖励。所以,打包新区块就被称为挖矿。

比特币的挖矿原理就是一种工作量证明机制。工作量证明POW是英文Proof of Work的缩写。

在讨论POW之前,我们先思考一个问题:在一个新区块中,凭什么是小明得到50个币的奖励,而不是小红或者小军?

当小明成功地打包了一个区块后,除了用户的交易,小明会在第一笔交易记录里写上一笔“挖矿”奖励的交易,从而给自己的地址添加50个比特币。为什么比特币的P2P网络会承认小明打包的区块,并且认可小明得到的区块奖励呢?

因为比特币的挖矿使用了工作量证明机制,小明的区块被认可,是因为他在打包区块的时候,做了一定的工作,而P2P网络的其他节点可以验证小明的工作量。

工作量证明

什么是工作量证明?工作量证明是指,证明自己做了一定的工作量。例如,在驾校学习了50个小时。而其他人可以简单地验证该工作量。例如,出示驾照,表示自己确实在驾校学习了一段时间:

比特币的工作量证明需要归结为计算机计算,也就是数学问题。如何构造一个数学问题来实现工作量证明?我们来看一个简单的例子。

假设某个学校的一个班里,只有一个女生叫小红,其他都是男生。每个男生都想约小红看电影,但是,能实现愿望的只能有一个男生。

到底选哪个男生呢?本着公平原则,小红需要考察每个男生的诚意,考察的方法是,出一道数学题,比如说解方程,谁第一个解出这个方程,谁就有资格陪小红看电影:

因为解高次方程没有固定的公式,需要进行大量的计算,才能算出正确的结果,这个计算过程就需要一定的工作量。假设小明率先计算出了结果x=2.5,小红可以简单地验证这个结果是否正确:

可以看出,解方程很困难,但是,验证结果却比较简单。所以,一个有效的工作量证明在于:计算过程非常复杂,需要消耗一定的时间,但是,验证过程相对简单,几乎可以瞬间完成。

现在出现了另一个问题:如果其他人偷看了小明的答案并且抢答了怎么办?

要解决这个问题也很容易,小红可以按照男生的编号,给不同的男生发送不同的方程,方程的第一项的系数就是编号。这样,每个人要解的方程都是不一样的。小明解出的x=2.5对于小军来说是无效的,因为小军的编号是3,用小明的结果验证小军的方程是无法通过验证的。

事实上如果某个方程被验证通过了,小红可以直接从方程的第一项系数得知是谁解出的方程。所以,窃取别人的工作量证明的结果是没有用的。

通过工作量证明,可以有效地验证每个人确实都必须花费一定时间做了计算。

在比特币网络中,矿工的挖矿也是一种工作量证明,但是,不能用解多项式方程来实现,因为解多项式方程对人来说很难计算,对计算机来说非常容易,可以在1秒钟以内完成。

要让计算机实现工作量证明,必须找到一种工作量算法,让计算机无法在短时间内算出来。这种算法就是哈希算法。

通过改变区块头部的一个nonce字段的值,计算机可以计算出不同的区块哈希值:

直到计算出某个特定的哈希值的时候,计算结束。这个哈希和其他的哈希相比,它的特点是前面有好几个0:

hash256(block data, nonce=0) = 291656f37cdcf493c4bb7b926e46fee5c14f9b76aff28f9d00f5cca0e54f376f

hash256(block data, nonce=1) = f7b2c15c4de7f482edee9e8db7287a6c5def1c99354108ef33947f34d891ea8d

hash256(block data, nonce=2) = b6eebc5faa4c44d9f5232631f39ddf4211443d819208da110229b644d2a99e12

hash256(block data, nonce=3) = 00aeaaf01166a93a2217fe01021395b066dd3a81daffcd16626c308c644c5246

hash256(block data, nonce=4) = 26d33671119c9180594a91a2f1f0eb08bdd0b595e3724050acb68703dc99f9b5

hash256(block data, nonce=5) = 4e8a3dcab619a7ce5c68e8f4abdc49f98de1a71e58f0ce9a0d95e024cce7c81a

hash256(block data, nonce=6) = 185f634d50b17eba93b260a911ba6dbe9427b72f74f8248774930c0d8588c193

hash256(block data, nonce=7) = 09b19f3d32e3e5771bddc5f0e1ee3c1bac1ba4a85e7b2cc30833a120e41272ed

...

hash256(block data, nonce=124709132) = 00000000fba7277ef31c8ecd1f3fef071cf993485fe5eab08e4f7647f47be95c

比特币挖矿的工作量证明原理就是,不断尝试计算区块的哈希,直到计算出一个特定的哈希值,它比难度值要小。

比特币使用的SHA-256算法可以看作对随机输入产生随机输出,例如,我们对字符串Hello再加上一个数字计算两次SHA-256,根据数字的不同,得到的哈希是完全无规律的256位随机数:

hash256("Hello?") = ????????????????????????????????????????????????????????????????

大约计算16次,我们可以在得到的哈希中找到首位是0的哈希值,因为首位是0出现的概率是1/16:

hash256("Hello1") = ffb7a43d629d363026b3309586233ab7ffc1054c4f56f43a92f0054870e7ddc9

hash256("Hello2") = e085bf19353eb3bd1021661a17cee97181b0b369d8e16c10ffb7b01287a77173

hash256("Hello3") = c5061965d37b8ed989529bf42eaf8a90c28fa00c3853c7eec586aa8b3922d404

hash256("Hello4") = 42c3104987afc18677179a4a1a984dbfc77e183b414bc6efb00c43b41b213537

hash256("Hello5") = 652dcd7b75d499bcdc61d0c4eda96012e3830557de01426da5b01e214b95cd7a

hash256("Hello6") = 4cc0fbe28abb820085f390d66880ece06297d74d13a6ddbbab3b664582a7a582

hash256("Hello7") = c3eef05b531b56e79ca38e5f46e6c04f21b0078212a1d8c3500aa38366d9786d

hash256("Hello8") = cf17d3f38036206cfce464cdcb44d9ccea3f005b7059cff1322c0dd8bf398830

hash256("Hello9") = 1f22981824c821d4e83246e71f207d0e49ad57755889874d43def42af693a077

hash256("Hello10") = 8a1e475d67cfbcea4bcf72d1eee65f15680515f65294c68b203725a9113fa6bf

hash256("Hello11") = 769987b3833f082e31476db0f645f60635fa774d2b92bf0bab00e0a539a2dede

hash256("Hello12") = c2acd1bb160b1d1e66d769a403e596b174ffab9a39aa7c44d1e670feaa67ab2d

hash256("Hello13") = dab8b9746f1c0bcf5750e0d878fc17940db446638a477070cf8dca8c3643618a

hash256("Hello14") = 51a575773fccbb5278929c08e788c1ce87e5f44ab356b8760776fd816357f6ff

hash256("Hello15") = 0442e1c38b810f5d3c022fc2820b1d7999149460b83dc680abdebc9c7bd65cae

如果我们要找出前两位是0的哈希值,理论上需要计算256次,因为00出现的概率是162=256,实际计算44次:

hash256("Hello44") = 00e477f95283a544ffac7a8efc7decb887f5c073e0f3b43b3797b5dafabb49b5

如果我们要找出前3位是0的哈希值,理论上需要计算163=4096次,实际计算6591次:

hash256("Hello6591") = 0008a883dacb7094d6da1a6cefc6e7cbc13635d024ac15152c4eadba7af8d11c

如果我们要找出前4位是0的哈希值,理论上需要计算164=6万5千多次,实际计算6万7千多次:

hash256("Hello67859") = 00002e4af0b80d706ae749d22247d91d9b1c2e91547d888e5e7a91bcc0982b87

如果我们要找出前5位是0的哈希值,理论上需要计算165=104万次,实际计算158万次:

hash256("Hello1580969") = 00000ca640d95329f965bde016b866e75a3e29e1971cf55ffd1344cdb457930e

如果我们要找出前6位是0的哈希值,理论上需要计算166=1677万次,实际计算1558万次:

hash256("Hello15583041") = 0000009becc5cf8c9e6ba81b1968575a1d15a93112d3bd67f4546f6172ef7e76

对于给定难度的SHA-256:假设我们用难度1表示必须算出首位1个0,难度2表示必须算出首位两个0,难度N表示必须算出首位N个0,那么,每增加一个难度,计算量将增加16倍。

对于比特币挖矿来说,就是先给定一个难度值,然后不断变换nonce,计算Block Hash,直到找到一个比给定难度值低的Block Hash,就算成功挖矿。

我们用简化的方法来说明难度,例如,必须计算出连续17个0开头的哈希值,矿工先确定Prev Hash,Merkle Hash,Timestamp,bits,然后,不断变化nonce来计算哈希,直到找出连续17个0开头的哈希值。我们可以大致推算一下,17个十六进制的0相当于计算了1617次,大约需要计算2.9万亿亿次。

17个0 = 1617 = 295147905179352825856 = 2.9万亿亿次

实际的难度是根据bits由一个公式计算出来,比特币协议要求计算出的区块的哈希值比难度值要小,这个区块才算有效:

Difficulty = 402937298

= 0x18 0455d2

= 0x0455d2 * 28 * (0x18 - 3)

= 106299667504289830835845558415962632664710558339861315584

= 0x00000000000000000455d2000000000000000000000000000000000000000000

注意,难度值的数值越小,说明哈希值前面的0越多,计算的难度越大。

比特币网络的难度是不断变化的,它的难度保证大约每10分钟产生一个区块,而难度值在每2015个区块调整一次:如果区块平均生成时间小于10分钟,说明全网算力增加,难度也会增加,如果区块平均生成时间大于10分钟,说明全网算力减少,难度也会减少。因此,难度随着全网算力的增减会动态调整。

比特币设计时本来打算每2016个区块调整一次难度,也就是两周一次,但是由于第一版代码的一个bug,实际调整周期是2015个区块。

根据比特币每个区块的难度值和产出时间,就可以推算出整个比特币网络的全网算力。

比特币网络的全网算力一直在迅速增加。目前,全网算力已经超过了100EH/每秒,也就是大约每秒钟计算1万亿亿次哈希:

所以比特币的工作量证明被通俗地称之为挖矿。在同一时间,所有矿工都在努力计算下一个区块的哈希。而挖矿难度取决于全网总算力的百分比。举个例子,假设小明拥有全网总算力的百分之一,那么他挖到下一个区块的可能性就是1%,或者说,每挖出100个区块,大约有1个就是小明挖的。

由于目前全网算力超过了100EH/s,而单机CPU算力不过几M,GPU算力也不过1G,所以,单机挖矿的成功率几乎等于0。比特币挖矿已经从早期的CPU、GPU发展到专用的ASIC芯片构建的矿池挖矿。

当某个矿工成功找到特定哈希的新区块后,他会立刻向全网广播该区块。其他矿工在收到新区块后,会对新区块进行验证,如果有效,就把它添加到区块链的尾部。同时说明,在本轮工作量证明的竞争中,这个矿工胜出,而其他矿工都失败了。失败的矿工会抛弃自己当前正在计算还没有算完的区块,转而开始计算下一个区块,进行下一轮工作量证明的竞争。

为什么区块可以安全广播?因为Merkle Hash锁定了该区块的所有交易,而该区块的第一个coinbase交易输出地址是该矿工地址。每个矿工在挖矿时产生的区块数据都是不同的,所以无法窃取别人的工作量。

比特币总量被限制为约2100万个比特币,初始挖矿奖励为每个区块50个比特币,以后每4年减半。

共识算法

如果两个矿工在同一时间各自找到了有效区块,注意,这两个区块是不同的,因为coinbase交易不同,所以Merkle Hash不同,区块哈希也不同。但它们只要符合难度值,就都是有效的。这个时候,网络上的其他矿工应该接收哪个区块并添加到区块链的末尾呢?答案是,都有可能。

通常,矿工接收先收到的有效区块,由于P2P网络广播的顺序是不确定的,不同的矿工先收到的区块是有可能的不同的。这个时候,我们说区块发生了分叉:

在分叉的情况下,有的矿工在绿色的分叉上继续挖矿,有的矿工在蓝色的分叉上继续挖矿:

但是最终,总有一个分叉首先挖到后续区块,这个时候,由于比特币网络采用最长分叉的共识算法,绿色分叉胜出,蓝色分叉被废弃,整个网络上的所有矿工又会继续在最长的链上继续挖矿。

由于区块链虽然最终会保持数据一致,但是,一个交易可能被打包到一个后续被孤立的区块中。所以,要确认一个交易被永久记录到区块链中,需要对交易进行确认。如果后续的区块被追加到区块链上,实际上就会对原有的交易进行确认,因为链越长,修改的难度越大。一般来说,经过6个区块确认的交易几乎是不可能被修改的。

小结

比特币挖矿是一种带经济激励的工作量证明机制;

工作量证明保证了修改区块链需要极高的成本,从而使得区块链的不可篡改特性得到保护;

比特币的网络安全实际上就是依靠强大的算力保障的。

Comments

Make a comment

Sign in to

make a comment

Index

区块链教程

比特币

区块链原理

P2P交易原理

私钥

公钥和地址

签名

挖矿原理

可编程支付原理

多重签名

UTXO模型

Segwit地址

HD钱包

钱包层级

助记词

地址监控

以太坊

账户

区块结构

交易

智能合约

编写合约

部署合约

调用合约

编写Dapp

常用合约

ERC20

Wrapped Ether

廖雪峰的官方网站

©Copyright 2019-2021

Powered by iTranswarp

Feedback

License

挖矿是如何产生比特币的? - 知乎

挖矿是如何产生比特币的? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册虚拟货币货币比特币 (Bitcoin)挖矿是如何产生比特币的?最近翻译了中本聪先生发明比特币的论文,在这篇论文中他说比特币的产生由挖矿者计算最优散列值计算得到,第一个计算得到这一散列值的也就是block的第一人将…显示全部 ​关注者4,106被浏览5,798,637关注问题​写回答​邀请回答​好问题 40​10 条评论​分享​273 个回答默认排序aibifu区块链扫地僧​ 关注在这篇文章中我会给出一个虚拟的村庄叫“比特村”,整个文章会以讲故事的方式,逐步告诉大家比特币提出的动机、解决了什么问题以及一些关键组件的目标和设计方案。问题的提出我们先从比特币产生的动机开始。以物易物的比特村话说在这个世界上,有一个叫比特村的小村庄,村庄共有几百户人家。这个村庄几乎与世隔绝,过着自给自足的生活。由于没有大规模贸易,比特村村民一直 过着以物易物的生活,也就是说村民之间并没有使用统一的货币,互相间的贸易基本上就是老张家拿一袋面粉换老李家一只羊,王大嫂拿一筐野果换刘大婶两尺布。 村民们一直就这么纯朴的生活着。实物货币终于有一天,村民觉得一直这样以物易物实在太不方便了,于是村子全员开会,讨论如何解决这个问题。有人提议,以便于分割且稀有的东西,例如黄金,作 为一般等价物,把其它物品和黄金的对应关系编成一张表格,例如一克黄金对应一只羊,一克黄金对应一袋面粉等等,此时老张再也不用扛着一袋面粉气喘吁吁的去 老李家换羊了,他只要从家里摸出一克金子,就可以去老李家牵回一只羊,而老李拿着这一克黄金可以从任何愿意出让面粉的人那里换回一袋面粉,当然也可以换取 任何和一克黄金等值的物品。此时比特村进入了实物货币时代。符号货币好景不长,过了一段时间,实物货币的弊端也出现了。因为比特村附近金矿并不多,开采和冶炼金子太费时费力了。而随着使用,金子总是不断会因为磨损、 丢失或有人故意囤积而发生损耗。全村人又一次坐在了一起,开始商讨对策。此时有人说,其实大家也不必一定要真的用黄金啊,随便找张纸,写上“一克黄金”, 只要全村人都认同这张纸就等于一克黄金,问题不就解决了。其他人纷纷表示认同,但同时也有了新的问题:真实的黄金是需要开采和冶炼的,金矿有限,开采和冶 炼也需要成本,所以没有人可以短期凭空制造大量的黄金,可写字就不同了,只要我纸够笔够,随便像写多少写多少,那这就变成拼谁家里纸多了,搞不好到时一万 张纸才能换一只羊(实际上这就发生了经济学上的通货膨胀)。大家一想也是啊。不过此时又有人提出了解决方案:这个纸不是谁写都有效,我们只认村里德高望重的老村长写得,大家都认识老村长的字。老村长写一些 纸,同时按照各家黄金存量发给大家等量的纸,例如老张家有二百克黄金,老村长就发给老张二百张写着“一克黄金”的纸,同时将老张家的黄金拿走作为抵押。就 这样,老村长将村里所有黄金收归到自己的家里,并按各家上交的黄金数量发给等值的写有字的纸。此时村民就可以拿着这些纸当黄金进行贸易了,而且大家都认得 老村长的字,其他人伪造不出来。另外,如果谁的纸磨损太严重,也可拿到老村长那里兑换新的等值的纸,另外老村长承诺任何人如果想要换成真黄金,只要拿纸回 来,老村长就会把等值的黄金还给那人。因为老村长写得纸的黄金量和真实放在家里的黄金量是一样的,所以只要严格按照销毁多少纸新写多少纸的原则,每一张有 效的纸总能换回相应的真黄金。此时,比特村进入了符号货币(纸币)时代。而老村长就承担了政府和银行的角色。中央系统虚拟货币又过了几年,老村长由于每天都要核对大量的旧纸币,写新的纸币,还要把各种账目仔细做好记录。一来二去,老村长操劳过度不幸驾鹤西去了。比特村再次召开全体大会,讨论应该怎么办。此时老村长的儿子二狗子自告奋勇接过了父亲的笔,承担起货币发行的责任。这个年轻的村长二狗子很聪明,他 做了几天,发现好像也不用真的写那么多纸。完全可以这样:村民把纸币都交上来,销毁,但是二狗子会记录下每户上交的纸币数量。以后如果要进行付钱,例如老 张要拿一克金子向老李换一只羊,就一起给二狗子打个电话,说明要将老张名下的一克金子划归老李名下,二狗子拿出账本,看看老张名下是否有一克金子,如果有 就在老账的名下减掉一克,在老李的名下加上一克,这样就完成了支付,此时老李在电话中听到二狗子确认转账完成,就可以放心让老张把羊牵走了。此时比特村进入了中央系统虚拟货币时代。每个村民都不需要用实物支付,支付过程变成了二狗子那边维护的账本上数字的变更。分布式虚拟货币这新上任的二狗子是聪明,不过这人有时候是聪明反被聪明误。有一天二狗子盯着这账本,心想这全村各户谁有多少钱就是我说的算,那我岂不是……。于是他头脑一热,私自从老张帐下划了十克金子到自己名下。本以为天衣无缝,但没想到老张也有记账的习惯,有一天他正要付钱却被二狗子告知账户没钱了。老账核对了一下自己的账本,命名还有十克啊,于是拿着账本去找二狗子理论,这一核对发现了那笔未经老张同意的转账。东窗事发!比特村炸开锅了。二狗子被弹劾是不可避免了,不过通过这件事,大家发现了账本集中在一个人手里的弊端:这个体系完全依赖于账本持有人的个人信用,如果这个人不守规矩,随意篡改账本,那么整个货币系统就会崩溃如果这个人家里失火或者账本失窃,同样也会为整个体系带来毁灭性的打击正当人们不知所措时,村里一个叫中本聪的宅男科学家走上了台,告诉大家他已经设计了一套不依赖任何中央处理人的叫比特币的虚拟货币系统,可以解决上述问题。然后他缓缓讲述了自己的方案。下面我们就来看看中本聪同学是如何设计这套系统的。基础设施搭建账簿公开机制中本聪首先说明,要对现有账簿进行如下改造:账簿上不再记载每户村民的余额,而只记载每一笔交易。即记载每一笔交易的付款人、收款人和付款金额。只要账簿的初始状态确定,每一笔交易记录可靠并有时序,当前每个人持有多少钱是可以推算出来的。账簿由私有改为公开,只要任何村民需要,都可以获得当前完整的账簿,账簿上记录了从账簿创建开始到当前所有的交易记录。此言一出,下面立刻炸锅了。第一条还无所谓,但是第二条简直无法接受,因为账簿可是记录了所有村民的交易,这样大家的隐私不全暴露了吗。中本聪倒是不慌不忙,拿出了一对奇怪的东西。身份与签名机制(公钥加密系统)中本聪说,大家不要慌。在他的这套机制下,任何人都不使用真实身份交易,而是使用一个唯一的代号交易。他展示了手里神奇的东西,说这两件东西分别叫保密印章和印章扫描器。后面他会给村里每一户发一个保密印章和一个印章扫描器。两者的作用如下:保密印章可以在纸上盖一个章,每个印章盖出的章都隐含了一个全村唯一的一串字符,但是凭肉眼是看不出来的。也无法通过观察来制造出相应的印章印章扫描器可以扫描某个已经盖好的章,读出隐含的信息,并在液晶屏上显示出一串字符有了这两个神奇的东西,大家就可以在不暴露真实身份的情况下进行交易了,而印章隐含的那一串字符就是这户人家的代号。具体如何巧妙利用保密印章和印章扫描器进行交易,会在下文详述。成立虚拟矿工组织(挖矿群体)下一步,中本聪面向全村招募虚拟矿工,招募要求如下:矿工以组为单位,一组可以是单独的一户,也可以是几户联合为一组成为矿工不影响正常使用货币矿工每天要花费一定时间从事比特币“挖矿”活动,但是不同于挖金矿,虚拟矿工不需要拿着工具去野外作业,在家里就可以完成工作矿工有一定可能性获得报酬,在挖矿活动中付出的努力越多,获得报酬的可能性越大矿工可以随时退出,也可以随时有新的矿工加进来很快,大约有五分之一的村民加入比特币矿工组织,共分成了7个组。建立初始账簿(创世块)下面,中本聪宣布,先根据二狗子手里的账簿,把抵押的所有黄金按账簿记录的余额退还给每位村民,然后彻底销毁这本账簿。然后,中本聪拿出一本新账簿,在账簿的第一页上记录了一些交易记录,特别的是,这些记录的付款人一栏全都是“系统”,而收款人分别是每个印章对应的 隐含字符,代表初始时刻,系统为每一户默认分配了一定数量比特币,但是数量非常少,都只有几枚,甚至有些不幸的村户没有获得比特币。接着中本聪说,由于目前市面上比特币非常少,大家可以先回到用黄金做货币的时代,由于我不是村长,我也没有权利强迫大家一定要承认比特币,大家可以自行决定要不要接受比特币。不过随着比特币的流动和矿工的活动,比特币会慢慢多起来。支付与交易做了这么多铺垫,终于说到重点了,下面说一下在这样一个体系下如何完成支付。以老张付给老李10个比特币为例。付款人签署交易单为了支付10个比特币,老张首先要询问老李的标识字符串,例如是“ABCDEFG”,同时老张也有一个标识字符串例如是“HIJKLMN”,然后老 张写一张单子,内容为“HILKLMN支付10比特币给ABCDEFG”,然后用自己的保密印章改一个章,将这张单子交给老李。另外为了便于追溯这笔钱的 来源,还要在单子里注明这笔钱的来源记在哪一页,例如这个单子里,老张的10比特币来自建立账簿时系统的赠送,记录在账簿第一页。收款人确认单据签署人老李拿到这个单子后,需要确认这个单子确实是来自“HIJKLMN”这个人(也就是老张)签署的,这个并不困难。因为单子上必须有保密章,老李拿出 印章扫描器,扫一下章,如果液晶屏显示出的字符和付款人字符是一致的(这里是“HIJKLMN”),就可以确认单子确实是付款人签署的。这是因为根据保密 印章的机制,没有其他人可以伪造印章,任何一个人只要扫描一下印章,都可以确认单子的付款人和盖章人是否一致。收款人确认付款人余额这个系统到目前还是很有问题。通过保密印章,收款人虽然可以确认付款人确实签署了这份单子,但是无法自行确认付款人是否有足够的余额支付。之前的中 央虚拟货币系统中,二狗子负责检查付款人的余额,并通知收款人交易是否有效,现在把二狗子开了,谁来负责记账和确认每笔交易的有效性呢?之前说过,中本聪设计的这个系统是分布式货币系统,不依赖任何中央人物,所以不会有一个或少数几个人负责这件事,最终承担这份工作的是之前所提到的矿工组织。老张、老李和全村其他任何使用比特币进行交易的村民都依赖矿工组织的工作才能完成交易。矿工的工作矿工的工作是整个系统的核心,也是最复杂性最高的地方。下面逐步介绍矿工的工作内容和目的。矿工的工具俗话说,工欲善其事,必先利其器。比特币矿工虽然不用铁撅、铁锨和探照灯等工具,不过也要有一些必备的东西。初始账簿。每个组首先自己复制一份初始账簿,初始账簿只有一页,记录了系统的第一次赠送 空账簿纸。每个小组有若干账簿纸,每一页纸上仅有账簿结构,没有填内容,具体内容的书写规则后面讲述。下面是一张空账簿纸的样子,各个字段的意义后面会说到。编码生成器(哈希函数)。中本聪又向矿工组织的每个组分发了若干编码生成器,这个东西很神奇,将一页账簿填好内容的账簿纸放入这个机器,机器会在账簿纸的“本账单编号”一栏自动打印一串由“0”和“1”组成的编号,共256个。最神奇的是,编号生成器有如下功能:生成的编号仅与账簿纸上填入的内容有关,与填写人、字体、填写时间等因素均无关内容相同的账簿纸生成的编号总是相同,但是如果内容哪怕只改一个字符,编号就会面目全非编码生成器在打印编码时还需要将所有填入账簿纸的交易单放入,机器会扫描交易单和填入交易单的一致性,尤其是保密印章,如果发现保密印章和付款人不一致,会拒绝打印编码将一张已打印的账簿纸放入,机器会判定编号是否是有效的机器打印,并且判定编号和内容是否一致,这个编号无法伪造交易单收件箱。每个矿工小组需要在门口挂一个箱子用于收集交易单。 公告板。每个矿工小组同样需要一个公告板公示一些信息。有了上面的工具,矿工组织就可以开工了!收集交易单中本聪规定,每笔交易的发起人,不但要将交易单给到收款人,还要同时复制若干份一模一样的交易单投递到每个矿工小组的收件箱里。矿工小组的人定期到自己的收件箱里把收集到的交易单一并取出来。填写账簿此时小组的人拿出一张空的账簿纸,把这些交易填写到“交易清单”一栏,同时找到当前账簿最后一页,将最后一页的编号抄写到“上一张账单编号一栏”。 注意还有个“幸运数字”,可以随便填上一个数字,如12345。然后,将这样账簿纸放入编号生成器,打印好编号,一张账簿就算完成了。如果你以为矿工的工作就这么简单,那就大错特错了,中本聪有个变态的规定:只有编号的前10个数均为0,这页账簿纸才算有效。根据之前对编号生成器的描述,要修改编号,只能修改账簿纸的内容,而“交易清单”和“上一张账簿纸编号”是不能随便改的,那么只能改幸运数字了。于 是为了生成有效的账簿纸,小组里的矿工就不断抄写账簿纸,但每张纸的幸运数字都不同,然后不断的重复将纸放入编码器,如果生成的编号不符合规定,这张纸就 算废了,重复这个过程直到生成一串有效的编号。我们知道,如果编号的每一个数字都是随机的,那么平均写1000多张幸运数字不同的纸才能获得一个有效的编号。这就奇怪了,这些矿工为什么要拼命干这看似无意义的事情呢?还记得之前说过矿工有报酬吧,这就是矿工的动力了。中本聪规定:每一张账簿纸的交易清单 第一条交易为“系统给这个小组支付50个比特币”。也就是说,如果你生成了一张有意义的账簿纸,并且被所有挖矿小组接受了,那么就意味着这条交易也被接受 了,你的挖矿小组获得了50个比特币。这就是矿工被叫做矿工的原因,也是为什么之前说随着交易和矿工的活动,比特币的数量会不断增多。例如下面是一个挖矿过程,这个小组的公共比特币帐号为“UVWXYZ”。在幸运数字尝试到“533”时,系统生成了一页有效账簿。确认账簿当某挖矿小组幸运的生成了一张有意义的账簿,为了得到奖励,必须立刻请其它小组确认自己的工作。前面说过,当前村里有7个挖矿组,所以这个小组必须将有效账簿纸誊抄6份快马加鞭送到其他6个小组请求确认。中本聪规定,当某个小组接到其他小组送来的账簿纸时,必须立即停下手里的挖矿工作进行账簿确认。需要确认的信息有三个:账簿的编号有效账簿的前一页账簿有效交易清单有效首先看第一个,这个确认比较简单。只要将送来的账簿纸放入编码生成器进行验证,如果验证通过,则编号有效。第二部分需要将账簿页上的“上一页账簿纸编号”和这个小组目前保存的有效账簿最后一页编号比对,如果相同则确认,如果不同,需要顺着已有账簿向前比对,直到找到这个编号的页。如果没有找到指定的“上一页账簿纸编号”对应的页,这个小组会将此页丢掉。不予确认。注意,由上面的机制可以保证,如果各个小组手里的账簿纸是相同的,那么他们都能按同样的顺序装订成相同的账簿。因为后面一张纸的编号总是依赖前面的 纸的编号,编码生成器的机制保证了所有合法账簿纸的相对先后顺序在每个小组那里都是相同的(可能会有分支,但不会出现环,后面细讲)。最后是如何确认交易清单有效,其实也就是要确认当前每笔交易的付款人有足够的余额支付这笔钱。由于交易信息里包含这笔钱是如何来的,还包含了记录来 源交易的账单编号。例如,HIJKLMN要给ABCDEFG10个比特币,并注明了这10个比特币来自之前OPQRST支付给HIJKLMN的一笔交易, 确认时首先要确认之前这笔交易是否存在,同时还要检查HIJKLMN在这之前没有将这10个比特币支付给别人。这一切确认后,这笔交易有效性就被确认了。其中第一笔是系统奖励给生成这页账簿的小组的50个,这笔交易大家都默认承认,后面的只要按照上述方法追溯,就可以确认HIJKLMN是否当前真有10个比特币支付给ABCDEFG。如果完成了所有了上述验证并全部通过,这个小组就认可了上述账簿纸有效,然后将这张账簿纸并入小组的主账簿,舍弃目前正在进行的工作,后面的挖矿工作会基于这本更新后的主账本进行。账簿确认反馈对于挖矿小组来说,当账簿纸送出去后,如果后面有收到其他小组送来的账簿纸,其“上一页账簿纸编号”为自己之前送出去的账簿纸,那么就表示他们的工作成功被其他小组认可了,因为已经有小组基于他们的账簿纸继续工作了。此时,可以粗略的说可以认为已经得到了50个比特币。另外,任何一个小组当新生成有效账簿纸或确认了别的小组的账簿纸时,就将最新被这个小组承认的交易写到公告牌上,那么收款人只要发现相关交易被各个小组认可了,基本就可以认为这笔钱已经到了自己的账上,后面他就可以在付款时将钱的来源指向这笔交易了。以上就是整个比特币的支付体系。下面我们来分析一下,这个体系为什么可以工作下去,以及这个体系可能面临的风险。工作机制分析虽然上面阐述了比特币的基本运作规则,但是村民们还是有不少疑问。所以中本聪同学专门开了个答疑会,解答常见问题。下面总结一下村民最集中关心的问题。核心问题答疑如果同时收到两份合法的账簿页怎么办?注意在上面的运行机制中,各个挖矿小组是并行工作的,因此完全可能出现这样的情况:某小组收到两份不一样的账簿页,它们都基于当前这个小组的主账簿的最后一页,并且内容也都完全合法,怎么办?关于这个问题,中本聪同学说,小组不应该以线性方式组织账簿,而应该以树状组织账簿,任何时刻,都以当前最长分支作为主账簿,但是保留其它分支。举个例子,某小组同时收到A、B两份账簿页,经核算都是合法的,此时小组应该将两页以分叉的形式组织起来,如下图所示:黑色表示当前账簿主干。此时,可以随便选择一个页作为当前主分支,例如选择A:此时如果有一个新的账簿页是基于A的,那么这个主干就延续下去:如果这个主干一直这么延续下去,表示大家基本都以A为主干,B就会被遗忘。但是也有可能忽然B变成更长了:那么我们就需要将B分支作为当前主干,基于这个分支进行后续工作。从局部来看,虽然在某一时刻各个小组的账簿主干可能存在不一致,但大方向是一致的,那些偶尔由于不同步产生的小分支,会很快被淹没在历史中。如果挖矿小组有人伪造账簿怎么办关于这个问题,中本聪同学说,只要挖矿组织中大多数人是诚实的,这个系统就可靠,具体分几个方面给予答复。首先,基于保密印章机制,没有人能伪造他人身份进行付款,因为编码生成器在打印编码时会核对所有交易单的保密印章,印章和付款人不一致会拒绝打印。而且诚实的矿工也不会承认不合法的交易(如某笔交易付款方余额不够)。所以只有一种可能的攻击行为,即在收款人确认收款后,从另一条分支上建立另外的交易单,取消之前的付款,而将同一笔钱再次付款给另一个人(即所谓的double-spending问题)。下面同样用一个例子说明这个问题。先假设有一个攻击者拥有10个比特币,他准备将这笔钱同时支付给两名受害者A和B,并都得到承认。第一步,攻击者准备从受害者A手里买10比特币的黄金,他签署交易单给受害者A,转10个比特币给受害者A。第二步,这笔交易在最新的账簿页中被确认,并被各个挖矿小组公告出来。受害人A看到公告,确认比特币到账,给了攻击者10个比特币等值的黄金。第三步,攻击者找到账簿,从包含刚才交易的账簿页的前一页做出一个分支,生成更多的账单页,超过刚才的分支。由于此时刚才攻击者制造的分支变成了主干分支,而包含受害者A得到钱的分支变成了旁支,因此挖矿组织不再承认刚才的转账,受害者A得到的10比特币被取消了。第四步,攻击者可以再次签署交易单,将同一笔钱支付给受害者B。受害者B确认钱到账后,支付给攻击者等值黄金。至此,攻击者将10个比特币花了两次,从两名受害者那里各购得等值黄金。攻击者还可以如法炮制,取消与受害者B的转账,将同一笔钱再支付给其他人。。。。。。关于这种攻击,中本聪给出的解决方案是,建议收款人不要在公告挂出时立即确认交易完成,而是应该再看一段时间,等待各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消,才确认钱已到账。中本聪解释道,之前设定变态的编号规则,正是为了防御这一点。根据前面所述,生成有效账簿页不是那么简单的,要花费大量的人力反复试不同的幸运数 字,而且过程完全是碰运气。如果某账簿页包含你收到钱的确认,并且在后面又延续了6个,那么攻击者想要在落后6页的情况下从另一个分支赶超当前主分支是非 常困难的,除非攻击者拥有非常多的人力,超过其他所有诚实矿工的人力之和。而且,如果攻击者有如此多人力,与其花这么大力气搞这种攻击,还不如做良民挖矿来的收益大。这就从动机上杜绝了攻击的形成。比特币会一直增加下去,岂不是会严重通货膨胀中本聪说,这一点我也想到了。前面忘了说了,我给矿工组织的操作细则手册会说明,刚开始我们协议每生成一页账簿,奖励小组50个比特币,后面,每当 账簿增加21,000页,奖励就减半,例如当达到210,000页后,每生成一页账簿奖励25个比特币,420,000页后,每生成一页奖励12.5个, 依次类推,等账簿达到6,930,000页后,新生成账簿页就没有奖励了。此时比特币全量约为21,000,000个,这就是比特币的总量,所以不会无限 增加下去。没有奖励后,就没人做矿工了,岂不是没人帮忙确认交易了到时,矿工的收益会由挖矿所得变为收取手续费。例如,你在转账时可以指定其中1%作为手续费支付给生成账簿页的小组,各个小组会挑选手续费高的交易单优先确认。矿工如果越来越多,比特币生成速度会变快吗不会。中本聪解释,虽然可以任意加入和退出矿工组织,导致矿工人数变化,每个矿工也会拿到一个编码生成器,不过我已经在编码生成器中加入了调控机制,当前工作的编码生成器越多,每个机器的效率就越低,保证新账簿页生成速率不变。虽然每个人的代号是匿名的,但如果泄露了某个人的代号,账簿又是公开的,岂不是他的所有账目都查出来了确实是这样的。例如你要和某人交易,必然要要到他的代号才能填写交易单。因为收款人一栏要填入那人的代号。不过中本聪说可以提供无限制的保密印章,建议每一次交易用不同的保密印章,这样查账簿就追查不到同一个人的所有账目了。答疑完毕。说明本文用通俗比喻的方式讲解了比特币的运行机制。有几点需要说明:为了便于理解,我做了很多简化,因此有些机制细节和实际的比特币可能不完全相同。但总体思想和关键原理是一致的。由于很多计算机世界的东西(如公钥体系、网络传输)在现实世界中并没有特别好的对等物,所以故事里难免有一些生硬和不合常理的细节。本文描述的是比特币网络本身的技术原理和运作机制,当在如Mtgox这种买卖市场中进行比特币交易时,市场做了中间代理,并不遵从上述机制。编辑于 2018-01-22 19:01​赞同 2605​​157 条评论​分享​收藏​喜欢收起​Leaf​ 关注秒懂比特币挖矿: 1.我手上现在有一张面值100元的人名币。(比特币)2.谁关注公众号我就给谁。3.但是需要在评论里面猜出这张钱的编号才行。(挖矿,随机填充数值求解)自己想尽办法猜,猜中得100元全款——个人挖矿出钱召集一些人来一起猜——矿场召集认识不认识的人一起来猜,通过猜测的次数,按比例分配这100元——矿池以上是一个简单的类比例子,当然,你们关注并猜出了我兜里100块钱的编号,我保证给你。那么,比特币挖矿到底是怎么回事呢?回顾张三李四转账过程 找出问题在之前,我们用在一个偏僻的小村张三和李四转账的例子简单解释了什么是比特币。没看过的可以看下:【白话币圈】什么是比特币?这可能是最通俗易懂的答案了我们来简单回顾一下:当张三想要通过A账号转账1000元给李四的B账号时:① 张三大吼一声:大家注意啦,我用A账号给李四的B账号转1000块钱。② 张三附近的村民听了确实是张三的声音,并且检查张三的A账号是否有足够余额。③ 检查通过后,村民往自己的账本上写:A账号向B账号转账1000元,并修改余额:A账号余额=3000-1000=2000元,B账号余额=2000+1000=3000元。④ 张三附近的村民把转账告诉较远村民,一传十十传百,直到所有人都知道这笔转账,以此保证所有人账本的一致性。聪明如你一定发现了,在步骤② 如果张三吼了一声,附近村民假装没听到,都不去核实记账,那么这个系统不就停止工作了吗?为解决这个问题,村里商讨后决定,谁第一个确认是张三的声音的会获得500元。于是大家都竖起耳朵,时刻监听村里的每一个动静,真可谓草木皆兵。评论区有人问,这500元是哪儿来的?我这里也简答讲一下。1.比特币平均差不多每10分钟产生一个区块,这个区块能打包的交易数量是有限的,我们就算800笔吧。但是呢,旷工不会平白无故给你打包交易到并广播,所以需要收取手续费。而且,由于交易的人很多,先打包谁的交易也取决于手续费的高低。所以你可以看到,现在比特币火热了,手续费水涨船高。2.我们都知道比特币总量2100万个,发币机制是逐年递减。当旷工第一个成功打包这个区块并广播,并且是最长的链的话,那么他还会获得奖励,目前只有12.5个比特币。最开始是50个,已经衰减2次了。这里当然还有小问题,比如为什么要最长链,怎么确定是最长链,哪些链会被抛弃?如果大家有兴趣再深入说说。以上就是旷工的奖励。2017/12/8更新。在比特币的世界里,大约平均每10分钟会产生一个区块。所有的挖矿计算机都在尝试打包这个区块并提交,而第一个成功生成这个数据块的人,就可以得到一笔比特币报酬。最初,大约每10分钟就可以产生50个比特币的比特币报酬。但是该报酬每4年减半,现在每10分钟比特币网络就可以产生25个比特币。好了,接着上面的故事讲,张三这一吼,惊动了全村的人,大家都纷纷表示自己是第一个听到张三声音的人。这500块钱该给谁呢?于是村里又商讨出新的规定,需要有证据证明这是张三的声音。张三在喊的这一声里带有特定的声波数据,谁先破解出来就给谁。在比特币世界里,这是就是一个新的概念,共识机制。比特币是通过工作量证明的共识机制来决定记账权的,通俗来讲,谁证明了自己的工作量最大,谁就负责记账。工作量大小是通过计算符合某一个标准的比特币区块头的哈希散列值来体现的。区块头通常包含前一个区块的哈希散列值、Merkle根、时间戳、难度目标、以及一个填充的随机值。试图争夺记账权的节点称为挖矿节点,挖矿过程就是求出一个能够填充本区块头的随机值,让区块头的哈希散列值符合某一个标准。咱们接着故事讲,海归村民王二麻子凭借高超的计算能力,成功第一个匹配了张三的声波数据,然后他笑嘻嘻地向全村人广播自己破解成功。村民验证后,王二麻子如愿拿到了500元奖励金,李四也成功收到了张三的转账。网络上的每一个矿机接收并验证了一批交易,然后就开始进行挖矿,矿机需要反复的试验随机填充值来进行求解,一般采用产生随机数,尝试把产生的随机数填充到区块头,然后计算哈希。如果计算成功,则挖矿成功,向全网广播挖矿所得,全网节点验证后,把这个区块连接到区块的最上端,并且在全网达成一致。故事还在继续,王二麻子拿到这500元后就想:一个人的计算能力有限,我下次也非常可能不是第一个计算出来。若我改进算法,制造专门匹配这种声波数据的机器,然后卖机器岂不是能大赚一笔?于是就哼哧哼哧的专研去了,并在不久后面世。(专业矿机)村民蜡笔小明买了一台专业机器,觉得不错。于是大量采购,并找到一个电费低廉的场地,也请了专人人员来维护。于是,蜡笔小明便每天便看着一笔笔的500元进账。(矿场)村民张小凡也采购了一些机器,可是机器不多,能破解并拿到这500奖励的几率并不大。于是他创建了一个平台,所有有计算能力的人都可以参与进来。若得到奖励,则按每个人的计算力高低分配奖金。(矿池)好了,村民的故事差不多就到这里结束了,现在回过头来看文章开始的例子是不是特别形象?你们可以猜猜谁可能挖矿的最大算力。风险与受益其实,最初的时候,我们用电脑CPU就可以挖到比特币,比特币的创始人中本聪就是用他的电脑CPU挖出了世界上第一个创世区块。当然,现在也可以用家用电脑的CPU、GPU挖矿,只是收益非常低了。CPU挖矿的时代早已过去,GPU挖矿也早已不是主流,现在的比特币挖矿是ASIC挖矿和大规模集群挖矿的时代。回顾挖矿历史,比特币挖矿总共经历了以下五个时代:CPU挖矿→GPU挖矿→FPGA挖矿→ASIC挖矿→大规模集群挖矿 挖矿芯片更新换代的同时,带来的挖矿速度的变化是:CPU(20MHash/s)→GPU(400MHash/s)→FPGA(25GHash/s)→ASIC(3.5THash/s)→大规模集群挖矿(3.5THash/s*X)算力就是计算机每秒产生哈希碰撞的能力,算力越高,挖到比特币的概率越大,挖得比特币也就越多,回报越高。然而挖矿的受益并不是稳定且有保障的,电费将成为持续挖矿最大的成本之一,所以,有廉价电力的地方便成了旷工的最爱。挖矿的风险不仅于此,16年7月开始,比特币网络发行比特币数量就减半了,即每10分钟,每个区块只包含12.5个比特币,意味着相同算力挖出的比特币也会相应减少。但另一方面,币价也有上升可能。同时还伴随着断电、机器维护折旧等风险。最后,给大加介绍一种0风险赚钱的方法:猜出我兜里100元人民币的编号。哈哈。/逃跑...简单回答评论中 @诺pro 的一些疑问,估计也是很多人的疑问:1.目前比特币全部账本信息能很好的保存在一台普通的电脑上,这也是Core他们坚持不扩容的原因之一。另外根据摩尔定律,就算小扩容其实影响不大。2.仅仅降低交易费那么旷工没有动力,交易将更拥堵。当然这里有目前比较认可的取代方案POS。上面说的是挖矿是工作量证明即POW(Proof of Work),而POS的全称Proof of Stake,即股权证明。简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,有利于刺激全部用户参与,更去中心化。3.比特币等加密货币是匿名的,虽然你能看到纪录,但是你不知道是谁,同样你可以有多个匿名账户,中心化的你确定你能保密部分信息?4.不知道你这数据哪里来的,确实现在交易量少,原因很多,有支付场景弱,币价太高,大多数人持币待涨等多种因素。突然想到另一个因素,目前大量的币集中在交易所,很多交易所实际上是虚拟交易,当你要提币的时候才是真实交易,这样也大幅降低了真实交易量。2017/12/20更新公众号“对韭当割”,欢迎关注和交流。部分资料参考至@徐晓聪 @小龟 在本问题中的回答编辑于 2018-06-26 10:59​赞同 1197​​378 条评论​分享​收藏​喜欢

比特币挖矿的过程 - 知乎

比特币挖矿的过程 - 知乎首发于密码学货币切换模式写文章登录/注册比特币挖矿的过程闲话挖矿区块链爱好者,挖矿科普作者比特币挖矿科普专辑到这里就要收尾了,经过前两篇文章铺垫,相信读者朋友已经对比特币交易和区块产生的过程有一定的认识。那么它们跟“挖矿”有什么关系呢?我们知道,在比特币网络中,有很多挖矿节点和矿工参与创建比特币新区块。如果多个挖矿节点都创建了同一个高度的区块,该判定谁的区块更合法呢?比特币引入了PoW(Proof of Work)共识机制,通过挖矿的方式,来竞争新区块的记账权。谁拿到新区块的记账权,它创建的新区块就合法。挖矿的目的就是赢取记账权,确认新区块和交易。那么挖矿节点和矿工是如何配合工作,完成挖矿的呢?矿工破解挖矿任务挖矿节点创建好预备区块后,将预备区块的区块头数据发送给矿工。矿工收到挖矿任务后,会递增区块头中地随机数。每调整一次,就会按照比特币协议规定,用SHA256算法计算区块头的哈希值。如果区块头的哈希值大于目标哈希,就继续变更随机数,直到区块头的哈希值小于或者等于目标哈希为止(或者挖矿节点发现新区块已经由其他节点挖到,此时就会放弃原来挖矿任务,构造新的预备区块,重新开始挖矿)。挖矿节点验证区块,延长本地区块链当矿工找到可以使预备区块头哈希值小于目标哈希的随机数时,会立即向挖矿节点上报挖矿结果。挖矿节点接收到信息后,立刻按照矿工上报信息重组区块,并验证区块。验证无误后,挖矿节点将新区块保存到节点本地数据库,并添加到节点本地区块链上。区块的验证信息包括:区块头是否合法(区块头哈希≤TargetHash);区块头的MerkleRoot哈希跟区块中交易数据的MerkleRoot哈希是否一致(验证交易是否被篡改);交易数据中第一笔是否为Coinbase交易;区块中每一笔交易是否合法等等。向全网广播新区块挖矿节点将新区块在本地保存后,同步向比特币网络广播挖矿结果。由于整个区块的区块体积较大,一般会先广播新区块的区块头。其他节点在接到广播后,先验证区块头信息,验证通过后,节点会先在其本地的区块索引库中创建新区块的索引。在接收到新区块的全部信息后,节点验证交易信息和区块头的MerkleRoot哈希,验证通过后,节点将这些交易信息录入新区块,并延长本地区块链。至此,新区块的广播和验证完毕,挖矿节点开始下一个区块的挖矿工作。当前挖矿的一些特点集群挖矿-矿池:比特币挖矿这件事情,理论上任何人都可以自建比特币挖矿节点,参与挖矿,甚至可以通过手工验证区块头哈希,破解挖矿任务,竞争记账权。但博主在上一文中提到,按照当前的挖矿难度,即便使用现在的主流矿机,要找到一个符合比特币网络要求的新区块,理论上需要42年时间,而如果使用普通PC或者是手工计算,则需要上万年甚至上百万年。因此,普通矿工单独挖矿的经济效益太低,可能挖到机器报废,还挣不到一分钱。矿池就是在这种情况下应运而生的,大量矿工将自己的矿机接入矿池,从矿池的挖矿节点获取挖矿任务,集体挖矿。这样就可以在较短时间内挖到新区块,获得区块奖励,矿池按照挖矿过程中每个矿工的贡献情况,分配挖矿收益,所有矿工都可以实时获取挖矿收益,进行回本或者二次投资。矿机实际收到的挖矿任务中,TargetHash远大于比特币网络要求的TargetHash:矿池和矿工一起挖矿的流程,一样遵循上述过程。矿机通过网络跟矿池通讯,请求挖矿任务,矿池将挖矿任务(包含区块头等数据)发送给矿机,矿机变更区块头的随机数,并验证区块哈希。符合挖矿任务TargetHash要求的随机数,将按照挖矿协议的格式提交给矿池,矿池给矿机提交的挖矿结果计算收益。需要注意的是,如果给矿机下发的挖矿任务中,TargetHash是此时比特币网络的TargetHash,那么这个TargetHash太小,矿机基本不可能找到符合要求的随机数,提交挖矿结果,也就不可能获得挖矿收益。因此,矿池给矿机下发的挖矿任务中,有一个单独的信息:初始挖矿难度。这是一个远低于全网挖矿难度的数值,对应更大的TargetHash,在这个难度下,矿机可以在较短时间内找到符合要求的随机数,向矿池提交更多挖矿结果。矿池算力不同于矿机本地算力:谈及挖矿,总有一个绕不开的名词:算力。到底什么是算力呢?算力,其实就是矿工验证区块头哈希值的速度。矿机在获得挖矿任务后,会按照挖矿任务的信息,递增区块头的随机数,随机数每调整一次,就验证一次区块头的哈希值。可以看到,限制矿机挖矿快慢的唯一一个因素就是它验证区块头哈希值的快慢,因此有了“算力”这个指标。目前,常规比特币矿机的算力单位是TH/s,它的意思,每秒钟可以验证1T次哈希,1T=1×10^3G=1×10^6M=1×10^9K=1×10^12次。有过挖矿经历的朋友,都会发现,矿机本地显示的算力跟矿池显示的算力总是有差异。这是因为,矿机本地显示的算力,是矿机验证哈希的速度,它只跟矿机的性能有关,不管有没有找到符合挖矿任务要求的随机数,矿机本地算力都一直存在。而矿机在矿池显示的算力则不同,它是矿池按照矿机实际提交的挖矿结果计算出来的,如果矿机的运气较差,在较长时间内都没有找到符合挖矿任务要求的随机数,无法向矿池提交挖矿结果,矿机在矿池的算力就会降低。但时间拉长后,运气对矿机破解挖矿任务的影响会降低,矿机较长时间的矿池平均算力,跟矿机本地算力相差不大。以上是比特币挖矿的基础知识,如果能读懂这三篇文章,相信读者朋友对比特币挖矿会有一个初步的认识。如果想要跟博主交流探讨更多挖矿方面的问题,欢迎关注“闲话挖矿”微信公众号,同时也能更及时的了解博主更新的挖矿知识。文中涉及的几个知识点:区块高度:又叫Block Height,相当于区块的编号,它的值等于区块链中这个区块之前所有区块的数量。区块链的第一个区块是创世区块,区块高度为0,第二个区块的区块高度为1,第三个区块的区块高度为2,以此类推。区块链中区块的总数,即为最新区块的区块高度+1。PoW:全称为Proof of Work,中文名称为工作量证明。是比特币网络使用的一种用于解决比特币新区块确权问题的方法。在比特币网络中,人人都可以参与新区块的创建工作,PoW机制规定,谁能够在最短时间内找到一个区块头哈希值小于比特币网络指定的TargetHash的预备新区块,谁就拥有正式新区块的记账权。记账权:比特币的区块链,实质上是一个链式的大账本,链上的每一个区块,都是一本账,上边记录了发生在区块链上的比特币交易信息。因此,我们把创建新区块的过程看作记账的过程。记账权,顾名思义为记录交易账本的权利,也即在比特币区块链上创建正式新区块的权利。参考资料:编辑于 2020-07-12 20:45比特币 (Bitcoin)区块链(Blockchain)btc挖矿​赞同 3​​1 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录密码学货币区块链,比特币,挖矿,有啥聊啥,欢迎

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Buy/Sell Bitcoin, Ether and Altcoins | Cryptocurrency Exchange | Binance

Error 403 Forbidden - This request is blocked.

For security reasons you can't connect to the server for this app or website at this time.

It maybe that you have too many requests or the illegal request payload is identified as an attack.

Please try again later.