比特派安卓下载|链克挖矿规则
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.
详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎
详解比特币挖矿— 应该是史上最通俗易懂的版本 - 知乎切换模式写文章登录/注册详解比特币挖矿— 应该是史上最通俗易懂的版本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挖矿挖矿赞同 394 条评论分享喜欢收藏申请
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.
玩客币(链克)挖矿分配规则说明 - 币界网
玩客币(链克)挖矿分配规则说明 - 币界网
登录
手机号码
+86
验证码
获取验证码
我已阅读并同意用户协议和隐私政策
登录
首页
行情
快讯
资讯
专题
问答
百科
人物
联系我们
免责声明
币种
交易所
比特币
区块链
WEB3
以太坊
NFT
元宇宙
正在加载
玩客币(链克)挖矿分配规则说明
互联网 · 2020-07-22 14:21:47
1.玩客币概述玩客币是玩客云共享计算生态下的虚拟数字资产。它的产生过程与玩客云智能硬件、共享CDN的经济应用有较强关联,必须通过玩客云智能硬件分享网络带宽、存储空间等资源获得。玩客币在玩客云共享计算生态系统中,将成为用户可共享计算资源的交换媒介,保证用户的权益和义务对等;随着应用市场规模的提升,玩客币有广阔的市场前景;而随着挖矿难度的增加,玩客云智能硬件销量的增长,越早参与的用户获币越多。2.玩客币的挖矿算法玩客币是基于矿机硬件能力、上行带宽、可共享存储大小、有效在线时长等贡献进行的激励。矿机分数是代表其在当天的贡献,按照分数权重向全网矿机分配当日产生的币。计算方式示意:·矿机分数M=(硬件能力*硬件因子+带宽*带宽因子+存储值*存储因子)*(在线时长/24小时);当天发币总量=Ct;例如:硬件能力:矿机的CPU效率和内存大小。目前玩客云一代硬件能力一致,能力值均为1,CPU因子权重20,内存因子权重10;带宽:可信节点测得的上行带宽。为鼓励分布式节点的参与,带宽因子在1-8M时为10,在9-20M时衰减为5,在21-100M时衰减为1;100M以上按照100M进行计算;采用阶梯累进算法(详见下文举例);存储:可信节点测得的可用于挖矿的存储空间,为鼓励用户多分享自己的闲置存储资源,设定存储值在小于200G时为0,200G-1000G时为1,大于1000G为2;存储因子为5;在线时长:可信节点每日会对前一天有效在线时长进行总计,并进行全网分数的计算以及玩客币的分发。矿机分数算法的举例说明:(1)当带宽为1M,存储为100G,在线时长为12小时;矿机分数=[1*(20+10)+1*10+0*5]*(12/24)=20(2)当带宽为8M,存储为300G,在线时长为24小时;矿机分数=[1*(20+10)+8*10+1*5]*(24/24)=115(3)当带宽为9M,存储为300G,在线时长为24小时;矿机分数={1*(20+10)+[8*10+(9-8)*5]+1*5}*(24/24)=120(4)当带宽为20M,存储为500G,在线时长为24小时;矿机分数={1*(20+10)+[8*10+(20-8)*5]+1*5}*(24/24)=175(5)当带宽为21M,存储为500G,在线时长为24小时;矿机分数={1*(20+10)+[8*10+(20-8)*5+(21-20)*1]+1*5}*(24/24)=176(6)当带宽为100M,存储为500G,在线时长为24小时;矿机分数={1*(20+10)+[8*10+(20-8)*5+(100-20)*1]+1*5}*(24/24)=2553.玩客币的分发模式玩客币总量设计为15亿个,其中挖矿约12亿个,运营开支约3亿个。设定以下常数(1)衰减周期 t :每次产量减少的周期设置t=1年(365天)(2)衰减因子 d :每次产量减少的比例采用最常见的减半法,设置d=50%(3)初始发币量 c :开始挖矿时每单位时间奖励的币个数根据总量等综合计算,设计C≈164w/天则挖矿产生的总币量=t*C + t*C*d + t*C*d² + …… +t*C*d^∞每个区块产生的玩客币产量每365天减半一次,则挖矿产生的总币量无限趋近于约12亿。4.玩客币的分配方案序号数量比例用途112亿80%全网矿机挖矿激励23亿20%用于运营活动中的支出玩客币不做ICO,不做预挖,挖矿产生的比例高达80%。用于运营活动支出的比例仅占20%,充分保障矿工的权益,营造良好的市场氛围。5.获得玩客币的方式1.用户可通过购买玩客云智能硬件设备,并激活玩客奖励计划,共享带宽、存储等资源获得玩客币;为防止为避免售卖前期矿机量少从而导致发币过于集中的情况发生,系统将于10月12日统一开始挖矿。2.用户或机构,可在后续应用场景中,通过共享计算资源和内容服务等,获得相应的玩客币。3.用户可以参与迅雷官方活动,根据活动规则,获得相应的玩客币。
免责声明:
本网站所提供的所有信息仅供参考,不构成任何投资建议。用户在使用本网站的信息时应自行判断和承担风险。币界网不对用户因使用本网站信息而导致的任何损失负责。用户在进行任何投资活动前应自行进行调查和研究,并谨慎决策。币界网不对用户基于本网站信息做出的任何投资决策负责。用户在本网站发布的任何内容均由其个人负责,与币界网无关。
相关资讯
以太币与非同质化代币(NFT)的兴起
互联网 · 2023-11-27 09:53
ORDI币在全球贸易和商业中的应用潜力
互联网 · 2023-11-27 09:37
XRP作为长期投资的可能性
互联网 · 2023-11-27 09:37
Solana的开发者社区与生态建设
互联网 · 2023-11-24 16:17
KAS币的全球化进程与法律合规性
互联网 · 2023-11-24 16:01
AWG是什么币种,AWG币怎么样?
互联网 · 2023-11-24 15:45
KAS币在供应链管理中的潜在应用
互联网 · 2023-11-24 15:29
Solana的技术路线图与未来发展
互联网 · 2023-11-24 15:14
免责声明:本网站、超链接、相关应用程序、论坛、博客等媒体账户以及其他平台和用户发布的所有内容均来源于第三方平台及平台用户。币界网对于网站及其内容不作任何类型的保证,网站所有区块链相关数据以及其他内容资料仅供用户学习及研究之用,不构成任何投资、法律等其他领域的建议和依据。币界网用户以及其他第三方平台在本网站发布的任何内容均由其个人负责,与币界网无关。币界网不对任何因使用本网站信息而导致的任何损失负责。您需谨慎使用相关数据及内容,并自行承担所带来的一切风险。强烈建议您独自对内容进行研究、审查、分析和验证。
App内打开
比特币挖矿算法详解 - 知乎
比特币挖矿算法详解 - 知乎首发于清源的区块链实验室切换模式写文章登录/注册比特币挖矿算法详解清源区块链工程师比特币网络中,源源不断的收到交易,需要节点不断的打包这些交易,而网络中的所有节点都是对等的,如何判断谁可以打包这些交易,如何避免重复打包这些交易呢?这个时候就需要用到工作量证明(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)赞同 8211 条评论分享喜欢收藏申请转载文章被以下专栏收录清源的区块链
挖矿与共识 · Blockchain 学习笔记
挖矿与共识 · Blockchain 学习笔记
胡伟煌的博客
Kubernetes 学习笔记
Golang 学习笔记
Linux 学习笔记
数据结构学习笔记
Python 学习笔记
Blockchain 学习笔记
前言
1.1.
序言
区块链
2.1.
密钥和地址
2.2.
比特币钱包
2.3.
比特币交易
2.4.
区块链介绍
2.5.
挖矿与共识
2.6.
共识算法
以太坊
3.1.
以太坊介绍
3.2.
账户管理
本书使用 GitBook 发布
挖矿与共识
区块链系列(九)之挖矿与共识
1. 简介
挖矿的过程是产生比特币的过程,即发行比特币的过程(类似中央银行的货币发行)。挖矿同时还保护着比特币系统的安全,防止欺诈交易,避免“双重支付”,双重支付是指多次花费同一笔比特币。
挖矿的过程:
每十分钟产生一个新区块。
矿工们争相完成一道基于加密哈希算法的数学难题[工作量证明]。
算出的矿工有权在区块链上记录交易(确认交易)[去中心化结算]。
交易经确认后,新的拥有者才能在之后花费这些比特币。
挖矿的激励机制:
创建新区块的新币奖励
区块链中所含的交易费
挖矿机制特点:
发行速度为指数递减模式:新区块得到的比特币数量每210,000个块(大约四年)减少一半。
起始时间为2009年1月每个区块奖励50个比特币。
2016年每个新区块奖励12.5个比特币。
2140年所有比特币(20,999,999.98)全部发行完毕,不会再有新的比特币产生,矿工收益则主要为交易费。
挖矿的目的:
挖矿是一种去中心化结算(形成共识)的过程,每个结算所对处理的交易进行验证和结算。挖矿保护了比特币系统的安全,实现了在没有中心机构的情况下,也能使整个比特币网络达成共识。
而挖矿产生的比特币作为激励方式是手段,并不是目的,即挖矿不是为了产生比特币而是为了达成共识,形成去中心化结算。
1.1. 比特币经济学和货币创造
通过创造出新区块,比特币以一个确定的但不断减慢的速率被发行出来。大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币。总量有限并且发行速度递减创造了一种抗通胀的货币供应模式。法币可被中央银行无限制地印刷出来,而比特币永远不会因超额印发而出现通胀。
比特币发行总量的计算脚本[max_money.py]
# 初始的块奖励为50BTC
start_block_reward = 50
# 以10分钟为一个区块的间隔,210000个块共约4年时间
reward_interval = 210000
def max_money():
# 50 BTC = 50 0000 0000 Satoshis
current_reward = 50 * 10**8
total = 0
while current_reward > 0:
total += reward_interval * current_reward
current_reward /= 2
return total
print "Total BTC to ever be created:", max_money(), "Satoshis"
运行 max_money.py 脚本
$ python max_money.py
Total BTC to ever be created: 2099999997690000 Satoshis
比特币货币供应量曲线图
图片 - bitcoin-supply
通货紧缩货币
通缩是一种由于货币的供应和需求不匹配导致的货币增值的现象。它与通胀相反,价格通缩意味着货币随着时间有越来越强的购买力。
比特币最重要并且最有争议的一个结论是一种事先确定的发行速率递减的货币发行模式会导致货币通货紧缩(简称通缩)。
2. 去中心化共识
比特币没有中心化的机构,几乎所有节点都有一份公共总账的副本,由所有节点按照某种规则共同维护该账簿。
比特币的主要特点就是去中心化的自发共识机制,自发即没有明确的选举和固定的达成共识的时间,由所有节点按照某种规则异步交互形成。
去中心化共识主要由4种独立过程相互作用产生:
独立验证:每个全节点依据综合标准对每个交易独立验证
独立打包:通过完成工作量证明算法的验算,挖矿节点将交易记录独立打包进新区块
独立装块:每个节点独立对新区块进行校验并组装进区块链
独立选链:每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链(最长链原则)
3. 交易的独立校验
钱包软件通过收集UTXO、提供正确的解锁脚本、构造支付给接收者的输出这一系列的方式来创建交易。产生的交易随后将被发送到比特币网络临近的节点,从而使得该交易能够在整个比特币网络中传播。
在交易传递到临近的节点前,每一个收到交易的比特币节点将会首先验证该交易,只有有效的交易才会在网络中传播,而无效的交易将会在第一个节点处被废弃,并以接收时的相应顺序,为有效的新交易建立一个池(交易池)。
校验标准:
交易的语法和数据结构必须正确。
输入与输出列表都不能为空。
交易的字节大小是小于MAX_BLOCK_SIZE的。
每一个输出值,以及总量,必须在规定值的范围内 (小于2,100万个币,大于0)。
没有哈希等于0,N等于-1的输入(coinbase交易不应当被中继)。
nLockTime是小于或等于INT_MAX的。
交易的字节大小是大于或等于100的。
交易中的签名数量应小于签名操作数量上限。
解锁脚本(scriptSig)只能够将数字压入栈中,并且锁定脚本(scriptPubkey)必须要符合isStandard的格式 (该格式将会拒绝非标准交易)。
池中或位于主分支区块中的一个匹配交易必须是存在的。
对于每一个输入,如果引用的输出存在于池中任何的交易,该交易将被拒绝。
对于每一个输入,在主分支和交易池中寻找引用的输出交易。如果输出交易缺少任何一个输入,该交易将成为一个孤立的交易。如果与其匹配的交易还没有出现在池中,那么将被加入到孤立交易池中。
对于每一个输入,如果引用的输出交易是一个coinbase输出,该输入必须至少获得COINBASE_MATURITY (100)个确认。
对于每一个输入,引用的输出是必须存在的,并且没有被花费。
使用引用的输出交易获得输入值,并检查每一个输入值和总值是否在规定值的范围内 (小于2100万个币,大于0)。
如果输入值的总和小于输出值的总和,交易将被中止。
如果交易费用太低以至于无法进入一个空的区块,交易将被拒绝。
每一个输入的解锁脚本必须依据相应输出的锁定脚本来验证。
4. 挖矿节点
在比特币网络中,一些节点被称为专业节点矿工。对于新区块,挖矿节点竞争挖矿,如果竞争获胜则立即参与下一个新区块的挖矿中,以此循环。
5. 整合交易至区块
验证交易后,比特币节点会将这些交易添加到自己的内存池中。内存池也称作交易池,用来暂存尚未被加入到区块的交易记录。之后会将交易整合到一个候选区块中。
5.1. 交易块龄、矿工费和优先级
比特币节点需要为内存池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块。交易的优先级是由交易输入所花费的UTXO的块龄决定,交易输入值高、“块龄”大的交易比那些新的、输入值小的交易拥有更高的优先级。如果区块中有足够的空间,高优先级的交易行为将不需要矿工费。
交易的优先级是通过输入值和输入的“块龄”乘积之和除以交易的总长度得到的:
Priority = Sum (Value of input * Input Age) / Transaction Size
其中:
交易输入的值是由比特币单位“聪”(1亿分之1个比特币)来表示的。
UTXO的块龄是自该UTXO被记录到区块链为止所经历过的区块数,即这个UTXO在区块链中的深度。
交易记录的大小由字节来表示。
区块中存储交易的规则:
区块中用来存储交易的前50K字节是保留给较高优先级交易的。
然后优先选择矿工费高的交易来填充剩下的区块,区块大小上限为MAX_BLOCK_SIZE。
如区块中仍有剩余空间,挖矿节点可以选择那些不含矿工费的交易,也可能忽略这些交易。
在区块被填满后,内存池中的剩余交易会成为下一个区块的候选交易,这些交易由于块龄增大,下次打块的优先级也会增大。
比特币交易中没有过期、超时的概念,一笔交易现在有效,那么它就永远有效。
5.2. 创币交易
区块中的第一笔交易是笔特殊交易,称为创币交易或者coinbase交易。与常规交易不同,创币交易没有输入,不消耗UTXO。它只包含一个被称作coinbase的输入,仅仅用来创建新的比特币。创币交易有一个输出,支付到这个矿工的比特币地址。
例如:
$ bitcoin-cli getrawtransaction
d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f 1
创币交易
{
"hex" :
"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0f03443b0403858402062f503253482fffffffff0110c08d9500000000232102aa970c592640d19de03ff6f329d6fd2eecb023263b9ba5d1b81c29b523da8b21ac00000000",
"txid" : "d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f",
"version" : 1,
"locktime" : 0,
"vin" : [
{
"coinbase" : "03443b0403858402062f503253482f", "sequence" : 4294967295
}
],
"vout" : [
{
"value" : 25.09094928,
"n":0, "
scriptPubKey" : {
"asm" : "02aa970c592640d19de03ff6f329d6fd2eecb023263b9ba5d1b81c29b523da8b21OP_CHECKSIG",
"hex" : "2102aa970c592640d19de03ff6f329d6fd2eecb023263b9ba5d1b81c29b523da8b21ac",
"reqSigs" : 1,
"type" : "pubkey",
"addresses" : [
"1MxTkeEP2PmHSMze5tUZ1hAV3YTKu2Gh1N"
]
}
}
],
"blockhash" :
"0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4",
"confirmations" : 35566,
"time" : 1388185914,
"blocktime" : 1388185914
}
5.3. Coinbase奖励与矿工费
为了构造创币交易,节点需要计算矿工费的总额,将已添加到区块交易的输入和输出分别进行加总,然后用输入总额减去输出总额得到矿工费总额,公式如下:
Total Fees = Sum(Inputs) - Sum(Outputs)
5.4. 创币交易的结构
创币交易的结构比较特殊,与一般交易输入需要指定一个先前的UTXO不同,它包含一个“coinbase“输入。在创币交易中,“交易哈希”字段32个字节全部填充0,“交易输出索引”字段全部填充0xFF(十进制的255),这两个字段的值表示不引用UTXO。“解锁脚本”由coinbase数据代替,数据可以由矿工自定义。
“普通交易“输入的结构
长度
字段
描述
32 字节
交易哈希
指向包含有将要被花费UTXO的交易
4 字节
交易输出索引
UTXO在交易中的索引,0 从0开始计数
1-9 字节
解锁脚本长度
解锁脚本的长度
(VarInt) 可变长度
Unlocking-Script
一段脚本,用来解锁UTXO锁定脚本中的条件
4 bytes
顺序号
当前未启用的TX替换功能,设置为0xFFFFFFFF
“创世交易”输入的结构
长度
字段
描述
32 字节
交易哈希
不引用任何一个交易,值全部为0
4 字节
交易输出索引
值全部为1
1-9 字节
Coinbase数据长度
coinbase数据长度
(VarInt) 可变长度
Coinbase数据
在v2版本的区块中,除了需要以区块高度开始外,其他数据可以任意填写,用于extra nonce和挖矿标签
4 bytes
顺序号
值全部为1,0xFFFFFFFF
5.5. Coinbase数据
创币交易不包含“解锁脚本“(又称作 scriptSig)字段,这个字段被coinbase数据替代,长度最小2字节,最大100字节。除了开始的几个字节外,矿工可以任意使用coinbase的其他部分,随意填充任何数据。
6. 构造区块头
为了构造区块头,挖矿节点需要填充六个字段
区块头的结构
长度
字段
描述
4 字节
版本
版本号,用来跟踪软件或协议的升级
32 字节
前区块哈希
链中前一个区块(父区块)的哈希值
32 字节
Merkle根
一个哈希值,表示这个区块中全部交易构成的merkle树的根
4 字节
时间戳
以Unix纪元开始到当下秒数记录的区块生成的时刻
4 bytes
难度目标
该区块的工作量证明算法难度目标
4 bytes
Nonce
一个用于工作量证明算法的计数器
区块头中的merkle根字段,需要将全部的交易组成一个merkle树,创币交易作为区块的首个交易,其他交易在其后,如果是奇数个交易则复制最后一个交易组成偶数个交易,最后生成merkle根的值。
挖矿的目标是找到一个使区块头哈希值小于难度目标的nonce。挖矿节点通常需要尝试数十亿甚至数万亿个不同的nonce取值,直到找到一个满足条件的nonce值。
7. 构建区块
挖矿就是重复计算区块头的哈希值,不断修改该参数,直到与哈希值匹配的一个过程。哈希函数的结果无法提前得知,也没有能得到一个特定哈希值的模式。哈希函数的这个特性意味着:得到哈希值的唯一方法是不断的尝试,每次随机修改输入,直到出现适当的哈希值。
7.1. 工作量证明算法
哈希函数的特点:
输入的数据可以是任意长度
输出的数据为固定长度
不同输入得到不同输出,相同输入得到相同输出
几乎不可能通过输出来反推出输入(不同哈希函数安全性可能不同)
比特币一般采用的哈希函数为SHA256函数(输出总是256位的长度),工作量证明过程可简化为如下数学问题:
找出一个 $x$ 使得满足 $f(x,x_0) < y_0$,其中 $x $ 为Nonce值,$x_0$ 为其他已知的常量值,$y_0$为目标值(target值)。
由于$f(x,x_0)$ 是一个单向哈希函数,即无法通过 $y_0$ 反向求出 $x$,所以需要不断地尝试 $x$ 从而得出 $f(x,x_0)$与目标值 $y_0$ 比较来判断该 $x_0$ 是否为所要找的Nonce值。
例如:
假设$x_0$为I am Satoshi Nakamoto,$x$为某个数字(即Nonce值),通过不断更改$x$ 的值,将$x$添加到$x_0$末尾并计算其哈希值,直到找到一个$x$使得得出的哈希值的十六进制表示以0开头(即target值)。
$ python hash_example.py
I am Satoshi Nakamoto0 => a80a81401765c8eddee25df36728d732...
I am Satoshi Nakamoto1 => f7bc9a6304a4647bb41241a677b5345f...
I am Satoshi Nakamoto2 => ea758a8134b115298a1583ffb80ae629...
I am Satoshi Nakamoto3 => bfa9779618ff072c903d773de30c99bd...
I am Satoshi Nakamoto4 => bce8564de9a83c18c31944a66bde992f...
I am Satoshi Nakamoto5 => eb362c3cf3479be0a97a20163589038e...
I am Satoshi Nakamoto6 => 4a2fd48e3be420d0d28e202360cfbaba...
I am Satoshi Nakamoto7 => 790b5a1349a5f2b909bf74d0d166b17a...
I am Satoshi Nakamoto8 => 702c45e5b15aa54b625d68dd947f1597...
I am Satoshi Nakamoto9 => 7007cf7dd40f5e933cd89fff5b791ff0...
I am Satoshi Nakamoto10 => c2f38c81992f4614206a21537bd634a...
I am Satoshi Nakamoto11 => 7045da6ed8a914690f087690e1e8d66...
I am Satoshi Nakamoto12 => 60f01db30c1a0d4cbce2b4b22e88b9b...
I am Satoshi Nakamoto13 => 0ebc56d59a34f5082aaef3d66b37a66... # 得出的哈希值以0开头
I am Satoshi Nakamoto14 => 27ead1ca85da66981fd9da01a8c6816...
通过以上例子可以看出,其中$x$为13得出的哈希值为0ebc56d59a34f5082aaef3d66b37a66...是满足要求的,即13就是一个满足条件的Nonce值。
同理当target值不断减小,即以0开头的位数增加,则找到该Nonce值的难度也随之增大。
7.2. 难度表示
难度值查询网址:https://bitcoinwisdom.com/bitcoin/difficulty
7.3. 难度目标与难度调整
比特币的区块平均每10分钟生成一个。是货币发行速率和交易达成速度的基础。
计算机性能会不断增长,即挖矿能力会不断提升,难度的调整可以确保新区块产生速度始终稳定在10分钟1个。难度值的调整是自动发生的,依据以下公式。
New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes)
难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以10分钟一个速率所期望花费的时长)比较得出的。如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。目标难度与交易的数量和金额无关。
8. 成功构建区块
当某个挖矿节点找到满足条件的Nonce值后,会立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为区块277,316加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。
9. 校验新区块
每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。独立校验还确保了诚实的矿工生成的区块可以被纳入到区块链中,从而获得奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失去了奖励,而且也浪费了本来可以去寻找工作量证明解的机会,因而导致其电费亏损。
验证区块的内容:
区块的数据结构语法上有效
区块头的哈希值小于目标难度(确认包含足够的工作量证明)
区块时间戳早于验证时刻未来两个小时(允许时间错误)
区块大小在长度限制之内
第一个交易(且只有第一个)是coinbase交易
使用检查清单验证区块内的交易并确保它们的有效性
“交易的独立校验”一节已经讨论过这个清单。
10. 区块链的组装与选择
比特币去中心化共识的最后一步是将区块合到最长链中(即有最大工作量证明的链),如果某个节点验证了新的区块,它将尝试将新的区块连接到现有的区块链中,如果验证过程失败,则该区块会被节点拒绝,不会加入链中。
节点维护三种区块:
连接到主链的
从主链上产生分叉的备用链
在已知链中未找到已知父区块的
10.1. 区块链分叉
分叉的发生:
分叉发生在两名矿工在较短的时间内,各自都算得了工作量证明解的时候。两个矿工在各自的候选区块一发现解,便立即传播自己的“获胜”区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链。如果该节点在随后又收到了另一个候选区块,而这个区块又拥有同样父区块,那么节点会将这个区块连接到候选链上。其结果是,一些节点收到了一个候选区块,而另一些节点收到了另一个候选区块,这时两个不同版本的区块链就出现了。
分叉的解决:
解决的办法是,每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就是最长的或最大累计难度的链。节点通过将记录在每个区块中的难度加总起来,得到建立这个链所要付出的工作量证明的总量。只要所有的节点选择最长累计难度的区块链,整个比特币网络最终会收敛到一致的状态。
11. 共识攻击
待完成
文章参考:
Mastering Bitcoin
https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch10.asciidoc
Copyright © www.huweihuang.com 2017-2018 all right reserved,powered by GitbookUpdated at
2022-05-16 12:51:52
results matching ""
No results matching ""
玩客云监工
玩客云监工
当前线路:未知服务器B
链海邮箱
你好,请登录
免费注册
链海云监工
首页
网心云
网心云云监工
网心云统计
京东无线宝
京东无线宝云监工
京东无线宝统计
玩客云
玩客云监工
共享玩客云
玩客云统计
玩客云介绍
个人中心
玩客云
参加玩客奖励计划,获得数字资产 链克
管理我的玩客云
玩客云挖矿收益计算器
设备能力值=1,CPU因子权重=20,内存因子权重=10,存储因子权重=5
0
设备分数
0
预计得币数
0
预计收益CNY/天
NaN
即时币价
1
100
上行带宽
15 Mbps
0
2000
存储空间
200 GB
0
24
在线时长
24 小时
数据统计日期:----
链克区块链累计情况
0
链克产量
0
区块高度
资源共享人均表现
0小时
人均有效在线时长
0Mbps
人均贡献上行带宽
0GB
人均贡献存储
链克榜Top5
暂无数据
贡献上行带宽榜Top5
暂无数据
贡献存储榜Top5
暂无数据
购玩客云 享『链克』奖励
什么是链克?
链克(英文名LinkToken)是指在玩客云共享计算生态中基于迅雷区块链技术生成的共享资源的工作量证明。
如何获得链克?
用户可通过购买玩客云智能硬件设备并激活玩客奖励计划,通过共享带宽、存储等计算资源,按照链克产生规则获得链克奖励。
丰富的链克应用场景
可使用链克兑换共享计算相关的产品和服务,如视频网站会员特权服务、网络加速服务、云存储服务、共享内容服务、游戏内容服务等。
链克商城
为所有链克用户提供的可兑换优质商品(服务)的平台
迅雷旗下产品
链克应用于迅雷直播、迅雷U享版、迅雷PC影评、 迅雷会员等 迅雷旗下多种产品服务
星域云服务
可用链克兑换边缘计算、 函数计算、共享版CDN等云计算产品
迅雷链开放平台
第三方开发者及商户加入 提供更多应用服务
随着搭载迅雷区块链技术的共享计算生态中加入的商户企业增多,链克会陆续呈现更多的应用场景。
链海云监工
玩客云
网心云
京东无线宝
平台介绍
玩客云
联系我们
邮箱:service@hai.cn
QQ群:279555
电报群:链海
微信号:fsketop
QQ群:279555
电报群:链海
安卓app(下载)
Copyright © 2018 by 链海云监工(hai.cn) . All rights reserved.粤ICP备15050271号
挖矿原理及区块链交易处理的七个步骤 - 知乎
挖矿原理及区块链交易处理的七个步骤 - 知乎首发于程序员叨逼叨切换模式写文章登录/注册挖矿原理及区块链交易处理的七个步骤大荒星陨注:本文为翻译,略微改动,原文:https://blog.goodaudience.com/how-a-miner-adds-transactions-to-the-blockchain-in-seven-steps-856053271476你曾经好奇在挖矿在区块链上是怎样进行的吗?想知道一笔交易是如何确认并且添加到区块链上的吗?我也有过这样的疑问。我找了没有找到对这些过程的处理一步步清晰的描述,所以我决定自己把这些理解写出来。下面我将分为七个步骤来讲述在区块链上一个交易如何被处理并记录上链的。一、交易者用钱包客户端对一笔交易进行签名,目的是发送特定的数字货币或者 token 令牌给其他的交易者二、这笔交易由钱包客户端广播给区块链上正在挖矿的矿工,在没有矿工记录这笔交易前,交易被保存在 “待确认交易池” 中。”待确认交易池“ 是保留在网络上等待被处理交易的集合。这种池子通常不是一个巨大的池子,而是以小的细分的本地池的形式存在。三、网络上的矿工(通常被称为是节点,但并不十分准确)在这些 ”待确认交易池“ 中选取一部分交易形成一个区块。区块通常是多个交易的集合(这时交易还未被确认),再加上一些额外的元数据。每个矿工生成自己的区块。其他的矿工也可以把这些相同的交易写进他们自己的区块中。举个例子:矿工 A 和矿工 B 可以同时把交易 X 记录到他们的区块当中。每一个区块都有它的最大容量。在比特币中,一个区块的最大容量是 1MB 的数据。在把交易记录进他们的区块之前,矿工需要根据区块链上记录的历史交易来确定当前交易是否合法。如果比特币的拥有者,想要让他的交易更快的被确认,他可以选择提供更高的支付奖励。矿工想获取更高的报酬,所以会优先选择记录 ”待确认交易池“ 中奖励更高的交易。四、选择好了待确认的交易,矿工们各自创建一个区块,把交易记录在区块上。接下来就是是把这个区块添加到区块链上(这意味着区块链上的所有节点都记录这个区块),为了达到这个目的,这个区块首先需要一个签名(通常被称为是工作量证明)。对于一个区块来说,签名是由进行唯一的(不与其他区块相同)同等难度的非常复杂的数学计算来产生。每个区块进行的数学计算是不同的,所以每个矿工需要针对他们的区块进行一个唯一的不同于其他区块的数学计算。这些数学计算都是同等难度的。解决这个数学计算的问题,需要大量的计算能力(也就意味着需要大量的电力消耗)。对比在计算器上计算来说,这些计算量要大的多,所以通常需要在计算机上进行。这个大量算力消耗进行计算的过程被称为 ”挖矿“ 。如果您想进一步了解这些数学计算的工作原理(实际上并不那么复杂),请继续阅读以下内容;否则,想保持一个更简单的理解,请直接跳至步骤5。挖矿又叫做 hash 计算(工作量证明的共识算法)每个矿工想要在区块链上添加一个区块,需要解决的数学计算问题就是:给该区块中的数据计算出一个 以确定的 0 的个数开头的 hashcode(又称签名)。这听起来很复杂?但实际上并不是很复杂。简单来说,首先,了解 hash 函数是什么很重要(译者说:这里直接描述 hash 函数是不准确的,hash 函数有很多种,原作者这里描述的应该是特指比特币区块计算的 hash 函数,下面不再强调说明)。这个 hash 函数需要是一种计算非常难,但是验证起来很简单的 hash 函数。hash 函数是一种接收任意长度的字符串和数字组合,然后输出一个 32 个字符(比特币的 hash 算法用的是双重的 SHA256,输出应该是 256bit 的数据即 32 个字节,一般处理为 16 进制字符来输出,应该是有 64 个字符,这里原作者用 32 个字符不恰当)的数字和字母的随机组合字符串。如果输入中有任何字符改动,输出也将产生随机的改动,但是相同的输入经过 hash 函数计算出的结果总是相同的。(关于 hash 函数想要有更多的了解可以参考我的那篇 《白话讲 hash》)现在想这样一个问题,一个区块上记录的交易数据是确定的, hash 函数对于相同的输入计算出的输出总是相同的,而且要想记录在比特币的区块链上,又要求这个 hash 输出的前面确定的位数是 0 。这时候如果区块记录的交易数据计算出的 hash 输出不满足要求怎么办?比特币的做法是,矿工可以在区块中数据中添加一个随机数,然后再进行 hash 计算 。每次计算都改变这个随机数,由于随机数改变,hash 计算输出也会改变。矿工无限期的重复改变随机数计算 hash,直到撞上满足输出结果前面是指定数量的 0,比如说 7 个 0。实际上前面 0 的数量取决于区块链的计算难度。区块的结构稍微复杂一些,下面是区块结构图:这就是矿工要记录一个区块需要大量算力计算出数学问题的原因。猜测许多不同的随机数会耗费大量的算力。当大量的算力加入到区块链计算中,数学计算的难度也会增加(要求 hashcode 前面 0 的位数增多),同时将导致更多的电力消耗。关于计算难度和电力消耗更多的信息请参考:https://blog.goodaudience.com/blockchain-the-mystery-of-mining-difficulty-and-block-time-f07f0ee64fd0注意:这个处理过程实际上不应该定位为数学问题,而是一件确定性的事情-计算机对数字执行预定的操作,以查看输出是否满足要求五、矿工找到一个合法的签名(上过程计算出的 hashcode),将签名和区块一起广播给所有其他矿工六、其他矿工检测收到广播的区块和签名的合法性,计算这个区块上的交易数据和随机数是否满足输出的hashcode 前面有指定数量的 0(还记得前面说的吗?计算十分困难,验证比较简单)。如果它是合法的,其他矿工将承认该区块的合法性,并将这个区块添加到区块链上(他们达成共识,基于共同的共识算法)。这就是工作量证明定义的由来。这个签名就是工作量的保证(计算出符合规则的签名消耗了大量算力)。这个区块现在可以被添加到区块链上,并且广播给网络上的每一个矿工。只要区块内的交易根据之前区块的历史记录计算出来是合法的,其他的节点就会接受并且保存这个区块。七、当一个区块被添加到链上,在它后面添加的区块都将被看做是它的确认。例如,我在编号为 502 的区块记录了一笔交易,当前区块链长度为 507 ,这就意味着,我 502 记录的这笔交易被确认了 5 次(507-502 = 5)。之所以称之为确认,是因为,在当前添加区块后面添加的区块,都将确认对整个交易和记录交易的区块达成共识。你可以说你的交易被区块链确认了 5 次。越多的确认次数(也就是说 区块嵌入区块链内越深)区块越难被攻击(如果你想了解确认次数和被攻击相关的知识,可以参考:https://medium.com/coinmonks/what-is-a-51-attack-or-double-spend-attack-aa108db63474)。当区块被添加到区块链中之后,矿工又开始重复步骤三中的工作:创建一个新的区块。矿工在解决以下两个问题前不能继续挖矿(其实可以,不再本文讨论范围之内)如果这个区块中与当前区块链上最后一个区块有相同的交易(所有矿工都在挖矿,选择交易记录),则这个区块的所有交易被认为是不合法的。因为,交易者的钱可能已经不够支付。每个区块需要添加前一个区块的签名到自己的元数据里。这是区块组成区块链的必要条件。如果一个矿工对已经在区块链上的区块进行挖矿,其它矿工将会注意到它的元数据和区块链上的最后一个区块签名不一致,将拒接添加该区块到区块链上。发布于 2019-11-15 04:59比特币矿池挖矿区块链(Blockchain)赞同 3添加评论分享喜欢收藏申请转载文章被以下专栏收录程序员
干货:资深矿工教你如何挖矿 - 知乎
干货:资深矿工教你如何挖矿 - 知乎首发于区块链应用技术切换模式写文章登录/注册干货:资深矿工教你如何挖矿头等仓专业服务价值投资者新闻内容:本文来源于Rolf,由头等仓 Mavis进行翻译自从我开始撰写此博客以来,已经完成了一些关于挖矿的帖子和视频,并收到了很多提问!以下是对FAQ的一些介绍和回答——这些FAQ没有深入研究所有细节,为新进或有想法的矿工提供一个很好的概述。为什么要挖矿?如果理解加密货币的基础知识,拥有一点技术技能,且能够获得相对便宜的电力(<0.10美元/千瓦时),那么挖矿是一种获取收益的好方式 ,每天都可以攒一点。自2015年底到现在,我的经验是,购买的现有挖矿设备在挖矿约10个月内可以收回成本。在更小的半导体技术实现之前,可以一直使用这种挖矿设备。用什么挖矿设备?这取决于加密货币使用的哈希算法。任何新的哈希的一般过程是,它可以首先由CPU(像Intel这样的处理器)解决,然后是GPU(图形卡),然后是ASIC(专用集成电路)。CPU可以做任何事情,GPU的功能有限,而ASIC通常只用于一种类型的哈希算法。每种算法通常都有一个主要的加密货币来启动它,然后其他许多使用该算法的加密货币再来启动它。通常最好从挖取大型的代币开始。之后,随着获得的经验增加,可以挖取小型代币,并将其换成大型代币。SHA-256 – Bitcoin——BTCScrypt – Litecoin——LTCX11 – Dash——DASHCryptonight – Monero——XMREthash – Ethereum——ETHEquihash – Zcash——ZEC最佳的入门方式是什么?购买一个ASIC矿机和电源,就可以开始挖矿了。不要进行太多研究,因为我们无法做出完美的决定,就这么开始吧。如果收益不错,那就多买些矿机,继续挖。如果收益不好,则停止。这是我的第一次挖矿的照片。这是一个Antminer S-7:如打算购买多个矿机,最好直接从制造商那里购买。如果只想购买一台机器,请从亚马逊购买。如果直接从工厂购买,需支付的费用会更多,但可以使用信用卡付款;如果从Prime卖家购买,可以在30天内全额退款。ASIC矿机没有配备电源,需要另外购买。以下是亚马逊上不同ASIC矿工和电源的链接。请不要只看黄金铺铺位的商品,记得货比三家。只在有库存的商家处购买——不要买预售商品!Bitcoin——Bitmain Antminer S9 13.5 THLitecoin——Bitmain Antminer L3+ 504 MHDash——Bitmain Antminer D3 19.3 GHS9和D3的电源供应——Bitmain APW-3++ with 10 connectors一至二个L3++的电源供应—— Bitmain APW-3++ with 18 connectors电源在208伏或更高电压下会运行得更好,就像电动干衣机的插座一样。可能需要电工的帮助。Antminer S9很棒!D3也是!L3 ++可能在隔壁房间运行比较好。从GPU挖矿开始是否会更好?使用GPU矿机有一些很好的理由。初始的投资较少,且更灵活。如果已经拥有带有显卡的计算机,可以开始对山寨币进行GPU挖矿。另一种入门方法是构建GPU矿机。从一个GPU开始,并在获得收益时添加更多GPU。以下是购买和搭建GPU矿机的完整指南。挖矿设备是什么样的?我开始是在地下室挖矿,然后租了一个小仓库,然后是一个更大的仓库。现在我有大约450个矿机。以下是我在挖矿方面能做的三件事:1.撰写关于挖矿及运营的博文2.制作有关挖矿的视频,并将其发布到Crypto Mining YouTube频道上3.当我有时间时,会回复文章和视频下的评论如何计算不同矿机的盈利能力?查看矿机的规格,然后将其插入加密货币挖矿计算器(如Whattomine和Coinwarz)的字段中。这些网站已经为每个加密货币的算力和价格提供了很好的价值,可以执行计算,并根据目前的收益大小对它们进行排名。有一些事情需要考虑。首先,是否会在挖矿后立挖将矿奖励转换为比特币,再兑换成美元等法定货币?如果是这样,那么Whattomine计算器很适合。如不是,可能需要考虑其他因素。加密货币应该放在哪?我喜欢使用加密货币交易所,但我放在交易所的钱不多。对于任何我打算保存超过几周的加密货币,我都会把它们放在钱包里。对于任何加密货币,我都会在计算机上使用钱包应用程序,一个有价值的代币都有一个适用于Linux或Windows的钱包。将挖取的代币放在钱包、备份钱包文件和私钥,这样就不会面临资金丢失的风险。从长远来看,我尽可能多地将加密货币保存在硬件钱包上。最值得购买的是Ledger Blue和Trezor Model T。我喜欢直接在制造商的网站上进行购买。不要使用纸钱包。它们容易丢失,很难正确使用。如果没有保管好加密货币私钥,则无法保管好资金。让资金远离交易所,除非你正在积极地进行交易。如何建立和运营更大规模的挖矿设备?在向大型设备过渡时,需要考虑几个不同的事情。为了保持连续性,我将挖矿作业分为三种不同的规模:小型——拥有1到50个矿机,在办公室进行操作的人——这是属于爱好。中等——50到500个矿机。运行它们需要全职工作或厉害的兼职人员。这通常属于家族企业或私营企业。大型——大于500个矿机。这属于完整的业务,包括员工、投资者、流程、规模和盈利能力优化。不同规模的重点不同。小矿工倾向于优化他们的矿机的每个方面,并可以维护矿机,确保正常工作。中型矿工通常希望保持尽可能多的运行,同时保持小型操作的独立性。这篇文章是一个规划比特币挖矿操作的很好的开始。挖矿业有时非常有利可图,但近几年来的收益并不乐观,只有运营成本最低的矿工才能继续。本篇文章面向中型矿商,他们可以部署比小型矿商更多的机器,并且比大型矿工具有更大的操作灵活性。如何以优惠的价格购买大量矿机?直接从制造商处购买。在2017年底,在钱包中有加密货币的人可缴费。我从比特大陆购买了大部分矿机。还有其他优秀的挖矿制造商,但比特大陆Antminers具有最优惠的价格和性能。一般来说,可以从比特大陆那个购买多达50或200个矿机。有时,甚至可以使用法定货币进行电汇付款。问题是,比特大陆网站上的大多数矿机都卖光了。但还是有买到的可能的。在推特和脸书上关注比特大陆,因为他们会提前12-24小时宣布出售矿机的消息。当矿机上架时,尽可能将矿机放入购物车并在两小时内检查好。之后,它们通常会再次售罄。其他可以购买矿机的好公司包括:Innosilicon、Baikal Miner、Ibelink。偶尔会有其他公司声称拥有最好的矿机。除非你认识某个拥有他们矿机的人,否则不要从他们那里订购,因为可能是诈骗网站。如何兑换挖矿利润?我的建议是尽可能多地保留获得的代币。在美国,可以通过持有加密货币一年以上来减少税收,因为任何价值的增加的物品都会作为长期资本收益被征税。在某些时候,需要支付一些账单,或者还房贷。你会怎么做?主要有两种类型的交易所——一种是仅加密货币,另一种是与法币挂钩的加密货币。首先,在与法币挂钩的交易所创建一个账户。举一些例子:Coinbase、Kraken、Bitstamp。为了处理任何重要的数量,需要提供身份证明,以满足KYC/AML(了解客户/反洗钱)规则。进行法定货币的交易所就和银行运作一样。注册并提供身份证明后,将交易所帐户连接到银行帐户。再对美元等法定货币进行小规模的双向转账测试。当要出售(或购买)加密货币时,请使用交易所的交易功能。对于Kraken来说,这是他们主页的一部分。Coinbase交易功能GDAX上,它与Coinbase共享一个登录名。设置限价销售或购买,然后将资金转入银行帐户。在进行销售和转移时,请注意每日、每周和每月的交易限制。如果正在挖规模较小的山寨币,需要将它们转换成比特币、以太坊或莱特币,以便在交易所进行出售。众所周知的中心化交易所是:Bittrex、Poloniex、Cryptopia、Livecoin。也有去中心化交易所,但那些更难使用。将山寨币转换成BTC、ETH或LTC后,将其提取到Coinbase、Kraken或Bitstamp的存款地址,然后在交易所使用限价订单将其卖出。原文来源:Rolf 由头等仓 Mavis进行翻译。欢迎在下方留言一起讨论!想要获取更多项目资讯跟踪分析报告,欢迎私信或是添加微信号go-first-one 发布于 2019-01-14 13:47币圈挖矿区块链(Blockchain)赞同 12添加评论分享喜欢收藏申请转载文章被以下专栏收录区块链应