哈希值比特币打款
比特币是一种P2P形式的虚拟加密数字货币。点对点传输意味着去中心化的支付系统。比特币是一种虚拟的数字货币,是通过特定程序进行大量计算而产生的。此过程称为“采矿”,而进行采矿的人员称为“矿工”。实际上,使用计算机来解决复杂的数学问题,以确保比特币网络的分布式记帐系统的一致性。比特币网络将自动调整数学问题的难度,以便整个网络大约每10分钟获得一个合格的答案。然后,比特币网络将产生一定数量的比特币作为奖励,以奖励那些得到答案的人。用外行的话说,比特币不依赖特定的货币机构发行,而是通过基于特定算法的大量计算生成的。
最多可以将256个0或1s组合为2到256的不同数字的幂。这个庞大的集合可以满足任何与比特币相关的代币。哈希的另一个重要特征是。如果要生成特殊的输出编号,则只能通过随机尝试一个接一个地进行正向计算,并且不能从输出结果中反转输入信息。此功能是比特币平稳运行的重要基础。挖掘是通过更改随机数直到满足要求来生成不同的哈希值。随着整个网络计算能力的提高,查找哈希值的难度将增加,从而保持每10分钟查找一次哈希值的频率。
2. 小白如何了解比特币
多去比特币新闻网看比特币新闻,以及行情,技术
比特币的诞生
比特币的诞生应该算在2008年的11月1号的那一天,一个化名为“中本聪”的人在网上发表了一篇论文。 在这篇论文里,他详细的描述了一种崭新的货币体系,他将之命名为“比特币”。
随后,次年的1月3日,首个比特币程序在中本聪的手里诞生,与之一起诞生的是最早挖矿所得的50个比特币。在那之后他开始逐渐淡出,直到彻底的消失。
人们至今也没找出这个叫中本聪的人的真实身份,即使如今的运营商、互联网巨头与政府已将人们在网络上的行迹牢牢掌握在了手里。
他在发言时会经常切换美式和英式英语,他随机在全天不同的时间上线,以隐瞒自己的国籍和时区;他隐藏自己的ip地址,加密自己的邮件,故意伪造一些写作和发言风格来混淆视听;此外他还是一名造诣颇深的密码学专家,对了,他发表论文的地方就叫做 "密码学邮件列表"。
所以比特币从诞生时起就带上了一种黑客精神:对抗任何势力所强加的审查。
当然我们也可以这么看: 如果一个发明了匿名货币系统的黑客,却连自我身份都不能匿名的话,那整件事会变成一个笑话。
但是所幸,中本聪没让我们失望。
1. 什么是货币
我发现要讲清楚什么是比特币,这一节是无论如何也跑不了的了。我不是什么经济领域的专家,我只能很粗浅且只能在很直观的意义上讲述这个问题。(不过就标题所表达出来的本文主旨而言,似乎也足够了)
高中的课本里有讲过(还记得吗?) , 货币是储存价值的媒介,一种东西要成为货币,最重要的,他必须满足:
1) 稀缺性。
这就是为什么黄金可以而沙子不能被当作货币的原因。稀缺性可以理解为获得它的难度,越是稀缺要获得它就越难。 一个直观的认识是这样的:假设你一个月的薪水是5000元,它意味着人民币的稀缺程度恰好到了这样一个度,即你要付出一个月的劳动才能获得5000个一元。 你不会同意以5000粒沙子来支付你的薪水,是因为与其通过劳动一个月来获得它,你大可以去沙滩走一圈就轻轻松松地得到了。
那么现在的金融系统是如何保证货币的稀缺性的呢?控制发行。货币的发行是被牢牢掌握在中央银行手中的,这样货币的发行量才能做到可控(所以你现在知道了,私自印钞是违法的)。回到刚刚那个例子, 你同意以5000元来支付你一个月的薪水,是因为人民币发行量刚好到了这个度。如果此时的人民币发行量翻倍了,稀缺度相应降低, 这时候你就应该要求以1万元来支付你的薪水了(但市场的响应往往不会这么快,在这期间你的财富其实是被剥夺了--你的劳动本该获得一万元却只得到5000元的回报)。
2)交易性
货币存在的目的当然是为了交易。就像很多人告诉你的那样,钱是用来花的,不是用来带进棺材的。所以除了满足稀缺性以外,一种东西它越是方便交易,那么他就越符合理想货币的标准。所以在货币史上,银元代替了贝壳,纸币代替了银元,数字货币正逐渐取代纸币。
这里所说的“交易”,是指财产从一方转移到另一方,即一方的财产减少相应的另一方增多。对实物货币来说,它发生得非常自然,甲要给100元乙,当100元钞票从甲的手里转移到乙的手里的那一瞬间,交易完成了,甲的财产减去了100元而乙的财产增加了100元,这个过程中没有第三方的参与,完全是甲和乙之间的私密行为;然而当交易发生在数字货币层面上时,就没这么简单了,甲要给100元给乙,如何确保交易完成了呢?假设甲和乙在各自的电脑上记录了自己的财富数额的话,那么如何确保乙在给自己增加了100元的时候甲如实地给自己减去了100元呢?这个时候我们不得不要引入第三方了--我们称之为“银行”的那个家伙。 当甲要转移100元给乙时,他不是直接给乙而是给银行, “请把我的100元转给乙” ,于是银行在甲的帐目上扣掉100元,再在乙的帐目上加上这100元。(我们假设它慷慨地不收取任何交易费)
以上所说的就是现代货币系统的一个粗廓模型,这个模型最大的弊端在于:人们不得不去信任一个中心系统。
数字货币的交易必须依赖银行,而一个人的银行账号可能会被审查、限制甚至是剥夺。当一方想要给另一方转移自己的财富时,银行可以收取高昂的费用或者直接拒绝(比如你试试汇一笔钱给美国的亲戚)。
货币的发行必须依赖中央银行。好吧,这已经是一个广为人知的秘密了:货币一直在贬值,或者说货币一直在超额发行(想想20年前的100块跟现在的100块)。 我引用两段话, 一段是凯恩斯说的, “通过连续的通货膨胀过程,政府可以秘密地、不为人知地没收公民财富的一部分。用这种办法可以任意剥夺人民的财富,在使多数人贫穷的过程中,却使少数人暴富。”, 另一段,出自哈耶克, “政府无法克制滥发货币的冲动”。
那么有没有可能设计出一套货币系统,在这个系统里我们不需要一个中心机构,不用被迫去信任任何的第三方, 使货币的发行透明可控,货币的交易私密而安全呢?
你猜?
2. 什么是比特币
所以我们现在可以回答到了,比特币是一个发行去中心化和交易去中心化的电子货币系统。在这个系统里,货币的发行量是透明且可预期的,货币的交易利用整个网络的协同合作来保证交易的安全。
下面我将逐步拆解比特币的原理。需要注意的是,比特币作为一个已经实际在使用的产品,它本身有着非常丰富的细节。本篇目的是向没有技术背景的读者讲述比特币的基本原理,因此并不会涉及到这些细节。比如说钱包的地址其实并不是公钥,而是公钥的二次哈希值; 区块链的难度要求并不是简单的把所有区块链的内容做一次哈希运算;等等。但是为了叙述的简洁性,在不影响对基本原理的讲解下这些都做了简化处理,希望大家能够理解。
2.0. 比特币网络 -- 由众多运行着比特币程序的节点组成
比特币是一个由众多平等的节点组成的网络。
一个节点就是一个比特币程序,任何能够连上网和具有一定计算能力的机器都能运行这个程序 -- 所以你家里的电脑也可以作为比特币网络里的节点:)
节点之间是可以互相通讯的,同时比特币有一套机制可以让一个节点向其他所有节点发出消息,这个行为被称为“广播”。
2.1. 区块链 -- 一个公共的账簿
我们先回到银行的例子。银行最基本的功能,无非是维护一个账簿,而这个账簿只需如实记录每一笔交易而已。比如X年X月X日,王小明转了30块钱给张大毛;Y年Y月Y日,张大毛转了12块钱给李小豆,诸如此类。 根据这个账簿我们可以查到一个人的所有交易记录,因而也就能推算出这个人此刻的账户余额为多少。比如李小豆从建银行帐号开始,转进的交易合计500元,转出的交易合计300元,那么可以算出此时李小豆账户余额一定是200元。
维护好这个账簿,并且作为唯一的维护者(只有银行才有权力查看和修改), 银行作为一个交易中心的职责就完成了。
比特币也有账簿,但是与银行不同的是,这个账簿是公开的,任何人可以去查看和审核它。
这个账簿被称为"区块链"。你可以把区块链想象成一个小册子,册子的每一页写满了交易信息,并且不断有新的页加入进来。
2.2 钱包 ---由一对公钥和私钥构成的的账户
上面一小节,解释了什么是比特币的账簿。这一小节将解释这个账簿里资金的归属权问题,亦即比特币的帐户系统。
比特币里的帐户跟银行的帐户有本质的区别。
在银行账户下,银行记录下了该账户所有者的身份信息(回想一下你去银行开户时提交的资料:照片、身份证、电话号码、家庭住址....),因而只要你能向银行证明你的身份,你也就获得了你名下财产的所有权。在这种模型下,银行扮演了一个全知全能的上帝角色:他知晓现实人们的财富信息。我们除了祈祷上帝不要把我们的信息泄露出去或者利用它干坏事以外,别无他法。
在比特币的世界里,并没有银行这样一个机构,它不会强制人们暴露自己的身份以换取资金的安全。比特币的帐户只是简单的由两串数字构成,分别被称为“公钥”和“私钥”,除此之外再无其他。
这个两个数字所具有的数学特性 -一个被私钥加密过的数据只能通过公钥来解开,所谓的非对称加密-使它们能够完美的实现一个帐户(比特币世界里被称为钱包)需要的功能。
我们把公钥作为帐户地址 --在比特币世界里也称钱包地址 --它类似于银行系统里的帐号,就是当你告诉别人“请给我的帐号打300块钱”时,需要告诉别人的那一串数字。对银行来说,它是“招商银行6214850200251100”,对比特币而言,它是“ ”。
私钥,是证明钱包所有权的*唯一*凭证,你通过证明你是该钱包的私钥持有者来获得该钱包的所有权。注意,和银行账号的密码不同的是,你丢失了密码还可以通过证实自己的身份来找回,但你一旦丢失了密钥那这个钱包里的资金就再也找不回了。
因为公钥和私钥所具备的非对称加密的美妙特性,钱包的所有者并不需要通过出示私钥来证明自己持有它。他只需要出示一段用私钥加密过的文字,验证者能用公钥(即钱包地址)解开这段文字即能证明。
那么怎么生成一对这样的数字呢?
相比于银行开户的繁琐手续,你唯一需要的只是一个实现了该功能的数学软件。
感谢数学。
2.3 区块 --- 有难度要求的账簿页
前面提到,区块链就是一个账簿,一个区块就是这个账簿里固定大小的一页。(比特币规定区块大小不超过1M,而一笔交易大约250字节大小,因此一个区块平均能写下4000笔左右交易。)
区块链是公共的,每个人都可以下载,验算和查看区块链里的交易信息。同时每个人也都可以向区块链增加区块,只是我们需要一种机制来防止坏人们通过提交大量的区块来拖垮整个网络。这个机制的核心在于我们要使区块的构造变得有代价,代价大到不可能在短时间内构造出大量的区块。
比特币要求,新的区块必须使区块链具有某种特征的哈希值才能被允许加入。 哈希值是一种数学运算(感谢数学!),你可以简单理解为对数据的摘要,不同的数据有不同的哈希值,即使两个数据只相差一个字节,他们对应的哈希值也会截然不同。
比特币通过“要求区块链的哈希值具有某种特征”来控制构造区块的难度,这个特征其实就是要求哈希值开头的几位数字为0. 比方说当前比特币要求哈希值前4位必须位0,我们用P表示当前的区块链,用B表示当前构造的区块,那么P+B的哈希值前4位必须为0该区块B才能被允许加入区块链中。 这里要注意三点, 1. 要构造出这样一个区块没有捷径,必须通过大量的计算,一遍一遍的往B里放随机数直到P+B的哈希值满足要求为止。2. 哈希值前面为0的位数越多,要构造出这个区块的难度就越大。
好了,我们现在有了控制区块构造难度的工具了,那么比特币通过什么样的规则来控制难度呢?
比特币规定区块链应保持在平均每两周时间增加2016个区块(也就是平均10分钟一个)的速度上。 也就是说,每增加2016个区块,系统就会算出产生这2016个区块的时间,如果它小于两周那么就提高接下来2016个区块的难度(比如从要求哈希值前3个必须为0提高到前4个为0), 如果它大于两周就降低难度(比如从要求4个0降低到3个0), 这样从长远来看,就使区块链平均以每10分钟一个的速度增加了。
也因此可以推论,区块链的难度要求与全网构造区块的算力成正相关关系。也就是说,参与构造区块的算力增加那么难度要求就会提高,相反则会降低,这样才能使区块链以固定的速度增加。
上面提到,让构造区块变得有难度,是为了防止被坏人攻击。同时,它还有一个作用是防止坏人们将一笔钱花两次(所谓双花问题)。 我们看如下一个比特币的应用场景:
小张要用比特币在小李那里网购一个商品,
1) 小李用数学软件生成好一个比特币钱包,并将该钱包地址(公钥)告诉小张。
2) 小张选取了自己一个有足够余额的钱包,并用这个钱包的私钥签发了一笔交易(该交易把一部分比特币发到小李的钱包地址上),然后把交易广播给全网络。
3)网络中的一些节点把该交易收纳到当前正在构造的区块中。 第一个成功构造出合法区块的节点把该区块广播给全网络,得到全网络的认可被加到区块链上。
4) 小李发现区块链上已经有一个区块包含了指向自己钱包地址的交易,并且交易金额正确。 小李随即给小张发货。
5)小张发现小李已经发货,这时他开始重新构造一笔交易,试图把刚刚发给小李的钱发到自己另外的一个钱包里。这个时候他不能再把这笔交易广播出去了,因为网络中的其它节点会发现该交易是不合法(花掉一笔已经花掉的钱)而直接拒绝掉, 小李只能自己构造一个包含了该交易的区块,并且试图说服网络中的其它节点他的这个节点才是合法而刚刚那个(包含发给小李交易的区块)是不合法的, 这样就能实现他一笔钱花两次的目的。
比特币规定当区块链发生分叉时(即出现了两个或以上互斥的合法区块)时,应该追随最长的那条。 那意味着小张要实现自己双花目的,他必须在产生了小李那个区块后,马上构造出两个区块来,才能说服其他节点跟随自己的这条链。 要达到这个目的,当前时间内他必须拥有(或者接近拥有了)全网51%的算力, 才能抢在其他所有节点之前构造出两个区块出来。
2.4 矿工 --- 通过挖矿来争夺记账权的区块链维护者们
前一节我们讲到,区块链的难度实际上是对区块链的保护,这个难度要求越高区块链就越免于被坏人攻击。换个方式表述就是,全网构造区块的算力保障了区块链的安全,全网的算力越高,那么坏人们获得全网51%算力的难度就越大,因此越不容易被攻击。
那么我们如何激励节点们贡献出自己的cpu跟电力来提高全网的算力呢? 答案是区块奖励。
比特币规定,成功构造出合法区块的节点会获得一部分比特币作为奖励,这部分比特币是系统生成的,他类似于淘金业里的挖矿,通过辛勤的劳动增加了黄金(比特币)的流通总量,因此构造区块的过程被称为“挖矿”,企图通过挖矿来获得区块奖励的节点被称为“矿工”。
挖矿的意义:
1) 它激励节点们贡献出算力来保护网络
2) 它实现了一种公平的方式发行比特币,因为不存在一个中央发行机构。
除了区块奖励外,交易者还可以通过额外支付一笔交易费给矿工们来鼓励他们将自己的交易收纳到它的区块里。这样当区块奖励趋于0时(比特币总量2100万枚,意味着越到后面区块奖励会越少), 因为有交易费的存在,矿工们也会继续维护整个网络。值得注意的是这里的交易费跟银行转账费有所不同,银行的转账费是由银行自上而下规定的,比特币的交易费是由使用者自由设置自下而上竞争的结果(如果当前交易数量很多而你给的交易费太低的话,可能不会被矿工们收取。)
亦即,矿工成功挖到区块时,他将获得 1)区块奖励 2)该区块内所有交易的交易费。
2.5 总结
比特币的核心是一个公共的账簿--区块链,每个人都可以核算查看这个账簿里的交易信息。这个账簿里不会记录任何真实世界里的个人信息,比特币保护了使用者的隐私。
通过非对称加密,用户可以不用出示密钥就可以证实自己是该密钥的持有者。因此提供了一个安全的不用信赖任何第三方(对比银行,你必须信赖它不把你的账号密码泄漏出去)的方式发起一笔交易。
因为比特币是开放的,意味着任何人都可以攻击比特币网络。通过控制区块的难度,使比特币网络免疫于大部分的攻击除非攻击者获取了接近全网51%的算力。而矿工们是比特币网络的保护者,比特币通过区块奖励和交易费的方式激励他们贡献出自己的cpu,组成巨大的算力屏障,使得任何组织或个人想要发起51%算力攻击都成为不可能。
3. 区块链技术中的哈希算法是什么
1.1. 简介
计算机行业从业者对哈希这个词应该非常熟悉,哈希能够实现数据从一个维度向另一个维度的映射,通常使用哈希函数实现这种映射。通常业界使用y = hash(x)的方式进行表示,该哈希函数实现对x进行运算计算出一个哈希值y。
区块链中哈希函数特性:
函数参数为string类型;
固定大小输出;
计算高效;
collision-free 即冲突概率小:x != y => hash(x) != hash(y)
隐藏原始信息:例如区块链中各个节点之间对交易的验证只需要验证交易的信息熵,而不需要对原始信息进行比对,节点间不需要传输交易的原始数据只传输交易的哈希即可,常见算法有SHA系列和MD5等算法
1.2. 哈希的用法
哈希在区块链中用处广泛,其一我们称之为哈希指针(Hash Pointer)
哈希指针是指该变量的值是通过实际数据计算出来的且指向实际的数据所在位置,即其既可以表示实际数据内容又可以表示实际数据的存储位置。下图为Hash Pointer的示意图
4. 关于比特币的谜题(完结)
你可曾想过: 为什么矿机算力越大越好?(既然是解数学题那为什么不是拼谁的算法厉害啊喂!) 比特币的数量总和为什么是2100万? 比特币盗窃是怎么回事? 我不玩比特币,就真的与比特币无关了吗…… 🤔️
关于大众不再感到陌生的比特币,背后还有许多巧妙之处。本文介绍了比特币的基本原理和主要原则,并结合对部分技术细节的剖析,来对上述的一些疑问作出解答。全文较长,约7000字,阅读时间约为22分钟,建议收藏后阅读😁
文章可以分成以下几个部分:
* 比特币先验知识
-- 密码学相关
-- 比特币重要概念
* 交易的生命周期
* 区块链的构成
* 区块链的生长
-- “挖矿”的数学本质
-- “矿工”的收益
* 比特币的共识机制
-- 比特币的去中心化共识
-- “最长链优先”原则
* 比特币安全性
比特币作为第一个去中心化的数字货币,其设计中运用了不少的密码学相关知识,主要包括非对称加密技术、哈希函数等等。理解这些密码学知识,能帮助我们更好地理解比特币中的一些概念及规则。
以下是比特币的一些定义及概念解说,了解过的小伙伴们可以直接跳过~
在比特币这个创新的支付网络中,一个交易的生命周期大概可以分为几个阶段:创建、传播和被验证交织、被打包进区块记录到区块链中、获得更多的确认。图1对这几个阶段做出了示意。
注:
1⃣️一个支付方A在发起一个比特币交易时,会使用自己的私钥对交易信息的哈希值进行签名。因此A向全网广播的内容除了交易信息之外,还有自己的公钥信息、对消息的签名。其他矿工只要利用A的公钥即可对这个交易进行验证,判断是否真的由A创建。
2⃣️”交易传播和交易验证“交替意味着 各个节点基于一定的规则独立验证每个交易(共识基础1) , 一个节点只有认为这个交易有效才会把它继续传播出去。
比特币的底层技术是区块链。区块链系统是一种分布式共识系统,区块链网络中所有的参与节点将就交易的状态达成一致。
区块链到底是什么呢?你可以把它理解成一种分布式的交易的共享账本,以区块为基本单位链接在一起。交易信息将被整理并打包记录在区块中。每一个区块,包含区块头,以及紧跟其后的交易列表。区块头包含3个区块元数据集合:前序区块哈希(严格来说是前序区块头哈希,因为只有区块头被用于哈希运算)、元数据集(包括难度、时间戳、随机数等)、一个基于加密哈希来高效概括区块中所有交易的默克尔树(merkle tree)。了解这个结构,将帮助我们更好地理解挖矿的数学本质。
你可能听说过“挖矿”这个词,或者听说众人争相购买挖矿机器来发家致富。但让人疑惑的是:都说打包区块的本质是解数学难题,但单凭那些看似简陋的机器嗡嗡嗡疯狂耗费电力,就能确保自己解出比特币难题的胜率高了吗?比特币技术原理中,矿工们解决的数学题,难道是一个暴力破解题?
看了一圈,发现矿工们解决的题,还真有点暴力破解的意思,每次尝试解题的过程几乎都是茫茫然、去碰运气的。拼的是谁足够幸运,也拼谁算的足够快;算的快了么,试错次数多,自然胜算也就大了。
解题的背景是这样的—— 挖矿节点通过基于工作量证明算法(Proof-of-Work,POW)的证明运算,独立将交易汇聚到新区块中(共识基础2)。 当矿工从网络中接收到一个新的区块的时候,他发现自己已经在上一轮竞争中失败了,所以立即开始新区块的挖矿过程。为了创建一个新的区块,他从内存池中选择交易来填充区块(加入区块的第一笔交易是一个“铸币交易”,3.2节会给出详相关细节)。接下来是填充字段来创建区块头(包括前序区块的区块头哈希、交易的默克尔树(Merkel树)、时间戳、难度目标值、随机数),然后开始计算这个新区块的工作量证明。
这个计算的过程简单来说是对区块头部进行两次sha256运算,得到一个RESULT,如果这个RESULT满足特定要求,这个人才能算是算对了、才有权利去记账。满足要求的RESULT被称为“工作量证明”(中本聪论文中称为“proof of work”)。
关于这个计算过程,强调以下几点:
第一,区块头部,包含了前序区块头部的哈希、本区块交易信息的默克尔树、时间戳、难度目标值、随机数等信息(见图2)。
第二,哈希运算具有“知道y,无法推出使得h(x)=y成立的x”、“即使输入只改变一点点,输出也会差很多”、“利用任意长度的数据作为输入,生成一个固定长度的确定结果”的特性。所以大家也不知道什么样子的输入才能产生自己想要的结果,矿工只能不断尝试。
第三,前面说到,区块头哈希值需要满足一个特定要求才能成为工作量证明——小于某一阈值,或者说哈希值含有给定前缀。阈值的大小求和挖矿难度有关:挖矿难度是一个动态参数,其值越大,则阈值越小,说明哈希值符合要求的概率更小,矿工每次计算能成为工作量证明的概率越小。比特币有一个自我调节过程——通过对现有的挖矿算力情况进行估算,来对应调整挖矿难度,可以保证区块链每十分钟出一个块,达到控制发行速度的目的。(这个过程的基本思想类似产品笔试的数据估算题,根据“一个提供、一个需要“的思路去构造一个等式,然后求解等式一边的一个因子;想了解挖矿难度系统和调整方式的同学可以进一步查阅~)
综合以上三点来看,为了产生工作量证明,用户基本上会通过调整随机数来碰运气(因为其他字段基本不变)、进行多次运算直至符合要求,别无他法。如此一看,随机数就具有“幸运数字”的意味了。因此,平均来讲,谁计算的能力越强(尝试的次数越多),就更有希望打包块。
你可能会想,矿工这么心甘情愿地消耗算力去维护区块链,是受到怎样的利益驱使呢?简单来说,矿工的收益来源有二:1、计算出工作量证明,创造一个新区块所获得的新币奖励;2、记账矿工费。
当矿工找到工作量证明、打包一个新区块,并把区块传送给他的所有对等节点。 每一个挖矿节点都独立验证新区块、把合格的新区块整合进区块链(共识基础3) ,并把这个区块继续传给自己的对等节点。结果是,只有经过验证的区块才会在网络当中广泛传播,保证了诚实矿工挖出的新区块能被区块链所接纳。挖矿成功的个体节点或集体节点,可以同时获得新币奖励和记账矿工费。
新币奖励类似于货币的发行,其遵循规则是,第一个四年每一个新区块产生50btc,第二个四年每一个新区块产生25btc,第三个四年每个新区块产生12.5btc,如此周期指数递减。按照等比数列求和可知,到2140年,比特币产生的总和约为21000000(所以说比特币数量有限,天生紧缩)。届时,不再随区块的产生增加新的比特币,矿工不再拥有第一项收益。但现实中,由于挖矿成本高昂,挖矿成功的往往是是一个矿池的所有参与者。收益被分给矿池地址,矿池按照组内算力贡献比例来分摊收益的。
记账矿工费又称交易费用,以交易输入和交易输出之间的差值的形式存在;一个区块的总交易费用是对加入区块的所有交易的(交易输入-交易输出)求和。一般来说,矿工费越高的交易,会越快被处理。而矿工费在这里起到两个作用,一个是奖励矿工,另一个是防止主链滥用(防止大家发送交易垃圾信息,因为提出交易是有一定代价的)。
矿工的收益以什么样的形式被验证呢?这里不得不提到 “铸币交易” 。每个计算机节点在进行工作量证明计算之前加入区块的第一笔交易,正是“铸币交易”。这个交易从无到有生成比特币,其金额是新币奖励与记账矿工费的总和,被支付到挖矿矿工自己的比特币地址。如果矿工找到了一个工作量证明使区块有效,他就赢得了这个奖励,因为他构造的“铸币交易”生效了。
关于铸币交易和“新币奖励”,之前有一个读者问我:一个矿工把自己挖到新区块的消息公布出去,他的工作量证明 不会被别人剽窃 吗?
个人认为,至少“铸币交易”能防止这件事情发生。让我们来重申一下计算工作量证明的过程——一个矿工E在新区块里加入了奖赏自己的“铸币交易”,并利用时间戳、前序区块头哈希、随机数、本区块交易的merkle树等信息计算出一个符合要求的工作量证明。
在这个过程中,merkle树啥样子,取决于包括“铸币交易”在内的本区块所有交易信息。因此可以把铸币交易视为工作量证明的间接变量之一。那么,即使其他人拿到了E的工作量证明,这个工作量证明也是带有E的印记的、与奖赏E的铸币交易相关的,别人根本无法纳为己用。
你还可以通过设想以下的场景来加深对共识基础2“挖矿节点通过基于工作量证明算法的证明运算,独立将交易汇聚到新区块中”的理解。
为什么一个挖出新区块的矿工不悄悄使个心眼,在创建区块之初就把铸币交易的金额设成1000BTC呢?原因在于每个节点都是基于相同的规则来独立验证区块的。矿工必须创建完美的、符合公共规则的、正确依据工作量证明方法的区块;而一个无效的铸币交易会导致整个区块无效,并被其他节点拒绝,永远无法成为账本的一部分。可以预想,为了生成这个工作量证明,矿工们已经投入了巨大的算力和电量去挖矿,如果涉嫌欺诈而被否决,其为挖矿付出成本都付诸东流。
综上所述,矿工不能冒领他人的奖励,而拿到奖励的矿工也必须只能拿取符合规定的数额。
比特币的卓越之处,在于建立了一种去中心化的自发共识。这种共识是自发产生的,是成千上万在网络中遵循着共同规则的节点,在异步交互中形成的,不依赖于任何中央机构的调解和干涉。
关于比特币的4项主要共识基础,本文在讲解对应细节时有提及,下面做一个整合:
这四个过程相辅相成、互相作用,形成了自发的全网共识,促使全网节点组合出可信、公开、权威的总账。
你可能会想,比特币是一个去中心化的、基于大众信任的、依靠众人力量运转的一个东西。万一有一部分矿工被坏人收买了咋办呢?“51%攻击”指的又是什么?比特币交易所要求的“6个确认”又是怎么回事?
这里首先要提到比特币的一个规则“ 最长链优先 ”。意思是, 比特币的账单链在出现分叉的时候,每个矿工会独立选择长(累积了最多工作量证明)的链条,在上面继续挖矿工作(共识基础4) 。
这个原则主要涉及到两个问题:
当有两个矿工A和B同时挖矿成功(算出符合要求的数学答案)时,他们分别把自己计算出来的工作量证明作为下一个块的前序区块哈希,生成一个块衔接到原有的链后面,由此出现了两个分支。
这个时候,这两个成功的矿工广播了自己打包成功的消息。由于区块链是一个去中心化的数据结构,区块消息到达不同节点的时间点不一致,故不同的节点可能拥有不完全一样的区块链视图——有的矿工会先收到A的消息,有的则先收到B的消息。为了解决这个问题,收到消息的矿工们遵循一个原则:选择并尝试延长最长的链。
因此,这两条分支会各自成长一小段时间,直到他们的长度出现差异(不可能长度一直相同),比如说其中一条链的矿工们,更快地打包在支链后面又加上一块。按照“最长链优先“的规则,较短的链会被抛弃,原本工作在短链上的矿工们都回到长链上工作。
换言之,分叉只是不同节点暂时的不一致现象,当新区块被加入到其中某一分支时,最终收敛将解决这一个问题。[读者可以思考一下,为什么区块链被设置成每十分钟挖出来一个块:如果时间短了,是不是就增加了分支产生的次数?如果时间长了,是不是交易结算的效率就太低了?]
双重支付的本质其实也是区块链的分叉,但这种分叉却是“非自然恶意蓄谋”的产物。
我们假设小敏是密谋双重支付的一方,她把自己仅有的10BTC先给小强、交换一块黄金,待这条交易信息P被打包进区块Q后,她从小强手中拿到了黄金。这时,小敏使了个心眼,她想偷偷抹去、篡改区块Q上的交易信息P,“白嫖”这块黄金。为了实现这样的目的,根据“最长链优先”法则,小敏必须剔除该笔交易P后、重新进行结算工作,集中算力来形成分叉,并让分叉以更快的增速超过并取代Q所在的主链。如果小敏确实能让分叉更长,分叉就成为了主链,其他节点也会转向新主链上继续工作。这样,小强付出了黄金,却没有收到这10个比特币,“赔了夫人又折兵”。
在这个过程中,小敏需要和原链进行“抗争”,使新分叉成为最长的主链,这被称为“共识攻击”。“共识攻击”本质上是对下一区块的争夺,攻击方越“强壮”、哈希算力越大,就越容易成功。
“共识攻击“成功的可能性有多大呢?
大多数比特币交易所规定,一个交易传送到区块链上后需要6个「确认」来完成验证该笔交易。这一规定的根据是,假设意图造假的矿工拥有10%的算力(挖矿成功概率0.1),那么造假矿工要构造另一条伪链实施长度超越,必须至少成功挖矿6次。那么原链被取代、被抛弃的概率约为0.1的6次方,趋近于0。你可以把比特币理解为地质构造层,表层可能因为季节变换而有所改变,甚至可能被风刮走,但一旦深入到地下,地质层就能更加稳定、不受干扰。
而假设有一群拥有了51%算力的矿工,他们控制了一半以上的全网哈希算力,可以故意在区块链中制造分叉、进行双重支付交易 。但事实是,全网哈希算力的大量增加,个体矿工几乎不可能控制哪怕1%的哈希算力了(但矿池带来的算力集中化控制,存在一定的风险)。更何况,如果真有拥有如此强大算力的组织,他完全可以凭借自己强大的算力投入到挖矿中去获取开发新区块所获的的比特币奖励,诚实挖矿比双花更有利可图。
尽管实际上并未出现51%攻击的问题,但不可否认的是,算力的集中违背了比特币去中心化这一初衷,并成为其继续发展的一大隐患。
一个系统的安全性,往往取决于系统安全的最薄弱环节,这也就是所谓的“木桶原理“。与区块链系统相关的安全性问题包括但不限于以下几项:
(1)在区块链上被广泛使用的公钥系统基本上是安全的,但量子算法在理论上能够破解公钥系统;因此,区块链的算法安全性是相对的。
(2)区块链协议本身存在逻辑缺陷,例如受到黑客攻击的区块链系统共识机制。
(3)所有数字货币系统高度依赖私钥,私钥在存储、使用方面的安全性成为区块链系统安全性中至关紧要的一环。
尽管区块链是去中心化系统,但目前绝大多数数字交易所却是中心化的,存在着人为安全漏洞及技术安全漏洞。这些数字交易所拥有存放大量加密货币的私钥,这对于黑客来说无疑是最瞩目的目标;只要黑客偷走了这些私钥,就可以获取到这些加密货币。
作者会继续阅读相关资料、不断完善本文,目标是完成一篇通俗易懂的比特币科普文章。:)
**本文系网上信息与个人理解的结合,如有偏差及误读,欢迎读者指出。也欢迎给出关于文章结构上的指导~
5. 比特币 哈希值
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上来说基本上是不可能的。
消息身份验证代码 (MAC) 哈希函数通常与数字签名一起用于对数据进行签名,而消息检测代码 (MDC) 哈希函数则用于数据完整性。
比特币全网的基本信息如下:
所有需要挖矿的数字货币都是存在哈希值的,例如莱特币、瑞泰币、狗狗币、微盟币、点点币、元宝币等等。
6. 钱包提币到交易所,哈希值有吗如何查
哈希函数指将哈希表中元素的关键键值映射为元素存储位置的函数。哈希表中元素是由哈希函数确定的。将数据元素的关键字K作为自变量,通过一定的函数关系(称为哈希函数),计算出的值,即为该元素的存储地址。表示为:Addr = H(key)。
应答时间:2021-07-05,最新业务变化请以平安银行官网公布为准。
[平安银行我知道]想要知道更多?快来看“平安银行我知道”吧~
https://b.pingan.com.cn/paim/iknow/index.html
7. 什么是比特币挖矿
比特币挖矿是一种获得比特币的方式,简单来讲就是全网矿工一起来做一道题目,谁先做出来,谁就会得到比特币奖励,“矿工”需要在区块努力工作,就是消耗计算资源来处理交易,挖矿对于设备的配置要求相当高,提高设备配置,可以加强运算能力,也能更快的获得比特币。 比特币是一种电子货币,由开源的P2P软件产生,可以用来交易,也可以通过交易来获利,比特币挖矿运用的是哈希算法,在比特币系统里面,需要进行大量哈希运算,计算的值需要符合规定,谁运算的快,谁能挖到的比特币就越多。
拓展资料
比特币挖矿,是一种利用电脑硬件计算出比特币的位置并获取的过程。 挖矿是在比特币系统中进行记录数据的一个激励过程,在比特币系统个人用户通过利用CPU或者GPU进行哈希运算,当计算出特定的哈希值之后便拥有了打包区块的权利。 而为了奖励这个用户进行打包区块,系统就给予一定的比特币作为报酬。因为这个过程很像现实生活中“挖矿”所以大多数人就把这个过程叫做挖矿。除了比特币外,其他的电子虚拟货币也可以通过挖矿奖励获取,如以太坊、门罗币等等
挖矿风险:
1,货币安全
比特币的支取需要多达数百位的密钥,而多数人会将这一长串的数字记录于电脑上,但经常发生的如硬盘损坏等问题,会让密钥永久丢失,这也导致了比特币的丢失。
2,系统风险
系统风险在比特币这个里面非常常见,最常见的当属于分叉。分叉会导致币价下跌,挖矿收益锐减。不过很多情况表明,分叉反而让矿工收益,分叉出来的竞争币也需要矿工的算力来完成铸币和交易的过程,为了争取更多的矿工,竞争币会提供更多的区块奖励及手续费来吸引矿工。风险反而成就了矿工。
8. 详解比特币挖矿原理
可以将区块链看作一本记录所有交易的公开总帐簿(列表),比特币网络中的每个参与者都把它看作一本所有权的权威记录。
比特币没有中心机构,几乎所有的完整节点都有一份公共总帐的备份,这份总帐可以被视为认证过的记录。
至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。
通过创造出新区块,比特币以一个确定的但不断减慢的速率被铸造出来。大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币。每开采210,000个块,大约耗时4年,货币发行速率降低50%。
在2016年的某个时刻,在第420,000个区块被“挖掘”出来之后降低到12.5比特币/区块。在第13,230,000个区块(大概在2137年被挖出)之前,新币的发行速度会以指数形式进行64次“二等分”。到那时每区块发行比特币数量变为比特币的最小货币单位——1聪。最终,在经过1,344万个区块之后,所有的共20,999,999.9769亿聪比特币将全部发行完毕。换句话说, 到2140年左右,会存在接近2,100万比特币。在那之后,新的区块不再包含比特币奖励,矿工的收益全部来自交易费。
在收到交易后,每一个节点都会在全网广播前对这些交易进行校验,并以接收时的相应顺序,为有效的新交易建立一个池(交易池)。
每一个节点在校验每一笔交易时,都需要对照一个长长的标准列表:
交易的语法和数据结构必须正确。
输入与输出列表都不能为空。
交易的字节大小是小于MAX_BLOCK_SIZE的。
每一个输出值,以及总量,必须在规定值的范围内 (小于2,100万个币,大于0)。
没有哈希等于0,N等于-1的输入(coinbase交易不应当被中继)。
nLockTime是小于或等于INT_MAX的。
交易的字节大小是大于或等于100的。
交易中的签名数量应小于签名操作数量上限。
解锁脚本(Sig)只能够将数字压入栈中,并且锁定脚本(Pubkey)必须要符合isStandard的格式 (该格式将会拒绝非标准交易)。
池中或位于主分支区块中的一个匹配交易必须是存在的。
对于每一个输入,如果引用的输出存在于池中任何的交易,该交易将被拒绝。
对于每一个输入,在主分支和交易池中寻找引用的输出交易。如果输出交易缺少任何一个输入,该交易将成为一个孤立的交易。如果与其匹配的交易还没有出现在池中,那么将被加入到孤立交易池中。
对于每一个输入,如果引用的输出交易是一个coinbase输出,该输入必须至少获得COINBASE_MATURITY (100)个确认。
对于每一个输入,引用的输出是必须存在的,并且没有被花费。
使用引用的输出交易获得输入值,并检查每一个输入值和总值是否在规定值的范围内 (小于2100万个币,大于0)。
如果输入值的总和小于输出值的总和,交易将被中止。
如果交易费用太低以至于无法进入一个空的区块,交易将被拒绝。
每一个输入的解锁脚本必须依据相应输出的锁定脚本来验证。
以下挖矿节点取名为 A挖矿节点
挖矿节点时刻监听着传播到比特币网络的新区块。而这些新加入的区块对挖矿节点有着特殊的意义。矿工间的竞争以新区块的传播而结束,如同宣布谁是最后的赢家。对于矿工们来说,获得一个新区块意味着某个参与者赢了,而他们则输了这场竞争。然而,一轮竞争的结束也代表着下一轮竞争的开始。
验证交易后,比特币节点会将这些交易添加到自己的内存池中。内存池也称作交易池,用来暂存尚未被加入到区块的交易记录。
A节点需要为内存池中的每笔交易分配一个优先级,并选择较高优先级的交易记录来构建候选区块。
一个交易想要成为“较高优先级”,需满足的条件:优先值大于57,600,000,这个值的生成依赖于3个参数:一个比特币(即1亿聪),年龄为一天(144个区块),交易的大小为250个字节:
High Priority > 100,000,000 satoshis * 144 blocks / 250 bytes = 57,600,000
区块中用来存储交易的前50K字节是保留给较高优先级交易的。 节点在填充这50K字节的时候,会优先考虑这些最高优先级的交易,不管它们是否包含了矿工费。这种机制使得高优先级交易即便是零矿工费,也可以优先被处理。
然后,A挖矿节点会选出那些包含最小矿工费的交易,并按照“每千字节矿工费”进行排序,优先选择矿工费高的交易来填充剩下的区块。
如区块中仍有剩余空间,A挖矿节点可以选择那些不含矿工费的交易。有些矿工会竭尽全力将那些不含矿工费的交易整合到区块中,而其他矿工也许会选择忽略这些交易。
在区块被填满后,内存池中的剩余交易会成为下一个区块的候选交易。因为这些交易还留在内存池中,所以随着新的区块被加到链上,这些交易输入时所引用UTXO的深度(即交易“块龄”)也会随着变大。由于交易的优先值取决于它交易输入的“块龄”,所以这个交易的优先值也就随之增长了。最后,一个零矿工费交易的优先值就有可能会满足高优先级的门槛,被免费地打包进区块。
UTXO(Unspent Transaction Output) : 每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费过的交易输出”,也就是 UTXO。
块龄:UTXO的“块龄”是自该UTXO被记录到区块链为止所经历过的区块数,即这个UTXO在区块链中的深度。
区块中的第一笔交易是笔特殊交易,称为创币交易或者coinbase交易。这个交易是由挖矿节点构造并用来奖励矿工们所做的贡献的。假设此时一个区块的奖励是25比特币,A挖矿的节点会创建“向A的地址支付25.1个比特币(包含矿工费0.1个比特币)”这样一个交易,把生成交易的奖励发送到自己的钱包。A挖出区块获得的奖励金额是coinbase奖励(25个全新的比特币)和区块中全部交易矿工费的总和。
A节点已经构建了一个候选区块,那么就轮到A的矿机对这个新区块进行“挖掘”,求解工作量证明算法以使这个区块有效。比特币挖矿过程使用的是SHA256哈希函数。
用最简单的术语来说, 挖矿节点不断重复进行尝试,直到它找到的随机调整数使得产生的哈希值低于某个特定的目标。 哈希函数的结果无法提前得知,也没有能得到一个特定哈希值的模式。举个例子,你一个人在屋里打台球,白球从A点到达B点,但是一个人推门进来看到白球在B点,却无论如何是不知道如何从A到B的。哈希函数的这个特性意味着:得到哈希值的唯一方法是不断的尝试,每次随机修改输入,直到出现适当的哈希值。
需要以下参数
• block的版本 version
• 上一个block的hash值: prev_hash
• 需要写入的交易记录的hash树的值: merkle_root
• 更新时间: ntime
• 当前难度: nbits
挖矿的过程就是找到x使得
SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
上式的x的范围是0~2^32, TARGET可以根据当前难度求出的。
简单打个比方,想象人们不断扔一对色子以得到小于一个特定点数的游戏。第一局,目标是12。只要你不扔出两个6,你就会赢。然后下一局目标为11。玩家只能扔10或更小的点数才能赢,不过也很简单。假如几局之后目标降低为了5。现在有一半机率以上扔出来的色子加起来点数会超过5,因此无效。随着目标越来越小,要想赢的话,扔色子的次数会指数级的上升。最终当目标为2时(最小可能点数),只有一个人平均扔36次或2%扔的次数中,他才能赢。
如前所述,目标决定了难度,进而影响求解工作量证明算法所需要的时间。那么问题来了:为什么这个难度值是可调整的?由谁来调整?如何调整?
比特币的区块平均每10分钟生成一个。这就是比特币的心跳,是货币发行速率和交易达成速度的基础。不仅是在短期内,而是在几十年内它都必须要保持恒定。在此期间,计算机性能将飞速提升。此外,参与挖矿的人和计算机也会不断变化。为了能让新区块的保持10分钟一个的产生速率,挖矿的难度必须根据这些变化进行调整。事实上,难度是一个动态的参数,会定期调整以达到每10分钟一个新区块的目标。简单地说,难度被设定在,无论挖矿能力如何,新区块产生速率都保持在10分钟一个。
那么,在一个完全去中心化的网络中,这样的调整是如何做到的呢?难度的调整是在每个完整节点中独立自动发生的。每2,016个区块(2周产生的区块)中的所有节点都会调整难度。难度的调整公式是由最新2,016个区块的花费时长与20,160分钟(两周,即这些区块以10分钟一个速率所期望花费的时长)比较得出的。难度是根据实际时长与期望时长的比值进行相应调整的(或变难或变易)。简单来说,如果网络发现区块产生速率比10分钟要快时会增加难度。如果发现比10分钟慢时则降低难度。
为了防止难度的变化过快,每个周期的调整幅度必须小于一个因子(值为4)。如果要调整的幅度大于4倍,则按4倍调整。由于在下一个2,016区块的周期不平衡的情况会继续存在,所以进一步的难度调整会在下一周期进行。因此平衡哈希计算能力和难度的巨大差异有可能需要花费几个2,016区块周期才会完成。
举个例子,当前A节点在挖277,316个区块,A挖矿节点一旦完成计算,立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为第277,316个区块(父区块为277,315)加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。
比特币共识机制的第三步是通过网络中的每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。
每一个节点对每一个新区块的独立校验,确保了矿工无法欺诈。在前面的章节中,我们看到了矿工们如何去记录一笔交易,以获得在此区块中创造的新比特币和交易费。为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?这是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒绝,因此,该交易就不会成为总账的一部分。
比特币去中心化的共识机制的最后一步是将区块集合至有最大工作量证明的链中。一旦一个节点验证了一个新的区块,它将尝试将新的区块连接到到现存的区块链,将它们组装起来。
节点维护三种区块:
· 第一种是连接到主链上的,
· 第二种是从主链上产生分支的(备用链),
· 第三种是在已知链中没有找到已知父区块的。
有时候,新区块所延长的区块链并不是主链,这一点我们将在下面“ 区块链分叉”中看到。
如果节点收到了一个有效的区块,而在现有的区块链中却未找到它的父区块,那么这个区块被认为是“孤块”。孤块会被保存在孤块池中,直到它们的父区块被节点收到。一旦收到了父区块并且将其连接到现有区块链上,节点就会将孤块从孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。当两个区块在很短的时间间隔内被挖出来,节点有可能会以相反的顺序接收到它们,这个时候孤块现象就会出现。
选择了最大难度的区块链后,所有的节点最终在全网范围内达成共识。随着更多的工作量证明被添加到链中,链的暂时性差异最终会得到解决。挖矿节点通过“投票”来选择它们想要延长的区块链,当它们挖出一个新块并且延长了一个链,新块本身就代表它们的投票。
因为区块链是去中心化的数据结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链视角。解决的办法是, 每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就是最长的或最大累计难度的链。
当有两个候选区块同时想要延长最长区块链时,分叉事件就会发生。正常情况下,分叉发生在两名矿工在较短的时间内,各自都算得了工作量证明解的时候。两个矿工在各自的候选区块一发现解,便立即传播自己的“获胜”区块到网络中,先是传播给邻近的节点而后传播到整个网络。每个收到有效区块的节点都会将其并入并延长区块链。如果该节点在随后又收到了另一个候选区块,而这个区块又拥有同样父区块,那么节点会将这个区块连接到候选链上。其结果是,一些节点收到了一个候选区块,而另一些节点收到了另一个候选区块,这时两个不同版本的区块链就出现了。
分叉之前
分叉开始
我们看到两个矿工几乎同时挖到了两个不同的区块。为了便于跟踪这个分叉事件,我们设定有一个被标记为红色的、来自加拿大的区块,还有一个被标记为绿色的、来自澳大利亚的区块。
假设有这样一种情况,一个在加拿大的矿工发现了“红色”区块的工作量证明解,在“蓝色”的父区块上延长了块链。几乎同一时刻,一个澳大利亚的矿工找到了“绿色”区块的解,也延长了“蓝色”区块。那么现在我们就有了两个区块:一个是源于加拿大的“红色”区块;另一个是源于澳大利亚的“绿色”。这两个区块都是有效的,均包含有效的工作量证明解并延长同一个父区块。这个两个区块可能包含了几乎相同的交易,只是在交易的排序上有些许不同。
比特币网络中邻近(网络拓扑上的邻近,而非地理上的)加拿大的节点会首先收到“红色”区块,并建立一个最大累计难度的区块,“红色”区块为这个链的最后一个区块(蓝色-红色),同时忽略晚一些到达的“绿色”区块。相比之下,离澳大利亚更近的节点会判定“绿色”区块胜出,并以它为最后一个区块来延长区块链(蓝色-绿色),忽略晚几秒到达的“红色”区块。那些首先收到“红色”区块的节点,会即刻以这个区块为父区块来产生新的候选区块,并尝试寻找这个候选区块的工作量证明解。同样地,接受“绿色”区块的节点会以这个区块为链的顶点开始生成新块,延长这个链。
分叉问题几乎总是在一个区块内就被解决了。网络中的一部分算力专注于“红色”区块为父区块,在其之上建立新的区块;另一部分算力则专注在“绿色”区块上。即便算力在这两个阵营中平均分配,也总有一个阵营抢在另一个阵营前发现工作量证明解并将其传播出去。在这个例子中我们可以打个比方,假如工作在“绿色”区块上的矿工找到了一个“粉色”区块延长了区块链(蓝色-绿色-粉色),他们会立刻传播这个新区块,整个网络会都会认为这个区块是有效的,如上图所示。
所有在上一轮选择“绿色”区块为胜出者的节点会直接将这条链延长一个区块。然而,那些选择“红色”区块为胜出者的节点现在会看到两个链: “蓝色-绿色-粉色”和“蓝色-红色”。 如上图所示,这些节点会根据结果将 “蓝色-绿色-粉色” 这条链设置为主链,将 “蓝色-红色” 这条链设置为备用链。 这些节点接纳了新的更长的链,被迫改变了原有对区块链的观点,这就叫做链的重新共识 。因为“红”区块做为父区块已经不在最长链上,导致了他们的候选区块已经成为了“孤块”,所以现在任何原本想要在“蓝色-红色”链上延长区块链的矿工都会停下来。全网将 “蓝色-绿色-粉色” 这条链识别为主链,“粉色”区块为这条链的最后一个区块。全部矿工立刻将他们产生的候选区块的父区块切换为“粉色”,来延长“蓝色-绿色-粉色”这条链。
从理论上来说,两个区块的分叉是有可能的,这种情况发生在因先前分叉而相互对立起来的矿工,又几乎同时发现了两个不同区块的解。然而,这种情况发生的几率是很低的。单区块分叉每周都会发生,而双块分叉则非常罕见。
比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。
9. 比特币使用哪种算法来生成比特币钱包的地址
首先生成私钥,再由私钥算出公钥,再由公钥经过一系列哈希算出钱包地址。