导航:首页 > 比特币区 > 挖比特币采用的函数

挖比特币采用的函数

发布时间:2024-07-04 08:25:02

⑴ 详解比特币挖矿原理

可以将区块链看作一本记录所有交易的公开总帐簿(列表),比特币网络中的每个参与者都把它看作一本所有权的权威记录。

比特币没有中心机构,几乎所有的完整节点都有一份公共总帐的备份,这份总帐可以被视为认证过的记录。

至今为止,在主干区块链上,没有发生一起成功的攻击,一次都没有。

通过创造出新区块,比特币以一个确定的但不断减慢的速率被铸造出来。大约每十分钟产生一个新区块,每一个新区块都伴随着一定数量从无到有的全新比特币。每开采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分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。

⑵ 比特币之挖矿与共识(二)

比特币共识机制的第三步是通过网络中的每个节点独立校验每个新区块。当新区块在网络中传播时,每一个节点在将它 转发到其节点之前,会进行一系列的测试去验证它。这确保了只有有效的区块会在网络中传播。

独立校验还确保了诚实 的矿工生成的区块可以被纳入到区块链中,从而获得奖励。行为不诚实的矿工所产生的区块将被拒绝,这不但使他们失 去了奖励,而且也浪费了本来可以去寻找工作量证明解的机会,因而导致其电费亏损。

当一个节点接收到一个新的区块,它将对照一个长长的标准清单对该区块进行验证,若没有通过验证,这个区块将被拒 绝。这些标准可以在比特币核心客户端的CheckBlock函数和CheckBlockHead函数中获得

它包括:

为什么矿工不为他们自己记录一笔交易去获得数以千计的比特币?

这 是因为每一个节点根据相同的规则对区块进行校验。一个无效的coinbase交易将使整个区块无效,这将导致该区块被拒 绝,因此,该交易就不会成为总账的一部分。矿工们必须构建一个完美的区块,基于所有节点共享的规则,并且根据正 确工作量证明的解决方案进行挖矿,他们要花费大量的电力挖矿才能做到这一点。如果他们作弊,所有的电力和努力都 会浪费。这就是为什么独立校验是去中心化共识的重要组成部分。

比特币去中心化的共识机制的最后一步是将区块集合至有最大工作量证明的链中。一旦一个节点验证了一个新的区块, 它将尝试将新的区块连接到到现存的区块链,将它们组装起来。

节点维护三种区块:第一种是连接到主链上的,第二种是从主链上产生分支的(备用链),最后一种是在已知链中没有 找到已知父区块的。在验证过程中,一旦发现有不符合标准的地方,验证就会失败,这样区块会被节点拒绝,所以也不 会加入到任何一条链中。

任何时候,主链都是累计了最多难度的区块链。在一般情况下,主链也是包含最多区块的那个链,除非有两个等长的链 并且其中一个有更多的工作量证明。主链也会有一些分支,这些分支中的区块与主链上的区块互为“兄弟”区块。这些区 块是有效的,但不是主链的一部分。 保留这些分支的目的是如果在未来的某个时刻它们中的一个延长了并在难度值上超 过了主链,那么后续的区块就会引用它们。

如果节点收到了一个有效的区块,而在现有的区块链中却未找到它的父区块,那么这个区块被认为是“孤块”。孤块会被 保存在孤块池中,直到它们的父区块被节点收到。一旦收到了父区块并且将其连接到现有区块链上,节点就会将孤块从 孤块池中取出,并且连接到它的父区块,让它作为区块链的一部分。当两个区块在很短的时间间隔内被挖出来,节点有 可能会以相反的顺序接收到它们,这个时候孤块现象就会出现。

选择了最大难度的区块链后,所有的节点最终在全网范围内达成共识。随着更多的工作量证明被添加到链中,链的暂时性差异最终会得到解决。挖矿节点通过“投票”来选择它们想要延长的区块链,当它们挖出一个新块并且延长了一个链, 新块本身就代表它们的投票。

因为区块链是去中心化的数据结构,所以不同副本之间不能总是保持一致。区块有可能在不同时间到达不同节点,导致节点有不同的区块链全貌。

解决的办法是,每一个节点总是选择并尝试延长代表累计了最大工作量证明的区块链,也就 是最长的或最大累计工作的链(greatest cumulative work chain)。节点通过累加链上的每个区块的工作量,得到建立这个链所要付出的工作量证明的总量。只要所有的节点选择最长累计工作的区块链,整个比特币网络最终会收敛到一致的状态。分叉即在不同区块链间发生的临时差异,当更多的区块添加到了某个分叉中,这个问题便会迎刃而解。

提示由于全球网络中的传输延迟,本节中描述的区块链分叉自动会发生。

然而,倒三角形的区块不会被丢弃。它被链接到星形链的父区块,并形成备用链。虽然节点X认为自己已经正确选择了获胜链,但是它还会保存“丢失”链,使得“丢失”链如果可能最终“获胜”,它还具有重新打包的所需的信息。

这是一个链的重新共识,因为这些节点被迫修改他们对块链的立场,把自己纳入更长的链。任何从事延伸星形-倒三角形的矿工现在都将停止这项工作,因为他们的候选人是“孤儿”,因为他们的父母“倒三角形”不再是最长的连锁。

“倒三角形”内的交易重新插入到内存池中用来包含在下一个块中,因为它们所在的块不再位于主链中。

整个网络重新回到单一链状态,星形-三角形-菱形,“菱形”成为链中的最后一个块。所有矿工立即开始研究以“菱形”为父区块的候选块,以扩展这条星形-三角形-菱形链。

从理论上来说,两个区块的分叉是有可能的,这种情况发生在因先前分叉而相互对立起来的矿工,又几乎同时发现了两个不同区块的解。

然而,这种情况发生的几率是很低的。单区块分叉每周都会发生,而双块分叉则非常罕见。比特币将区块间隔设计为10分钟,是在更快速的交易确认和更低的分叉概率间作出的妥协。更短的区块产生间隔会让交易清算更快地完成,也会导致更加频繁地区块链分叉。与之相对地,更长的间隔会减少分叉数量,却会导致更长的清算时间。

2012年以来,比特币挖矿发展出一个解决区块头基本结构限制的方案。在比特币的早期,矿工可以通过遍历随机数 (Nonce)获得符合要求的hash来挖出一个块。

难度增长后,矿工经常在尝试了40亿个值后仍然没有出块。然而,这很容 易通过读取块的时间戳并计算经过的时间来解决。因为时间戳是区块头的一部分,它的变化可以让矿工用不同的随机值 再次遍历。当挖矿硬件的速度达到了4GH/秒,这种方法变得越来越困难,因为随机数的取值在一秒内就被用尽了。

当出现ASIC矿机并很快达到了TH/秒的hash速率后,挖矿软件为了找到有效的块, 需要更多的空间来储存nonce值 。可以把时间戳延后一点,但将来如果把它移动得太远,会导致区块变为无效。

区块头需要信息来源的一个新的“变革”。解决方案是使用coinbase交易作为额外的随机值来源,因为coinbase脚本可以储存2-100字节的数据,矿工们开始使用这个空间作为额外随机值的来源,允许他们去探索一个大得多的区块头值范围来找到有效的块。这个coinbase交易包含在merkle树中,这意味着任何coinbase脚本的变化将导致Merkle根的变化。

8个字节的额外随机数,加上4个字节的“标准”随机数,允许矿工每秒尝试2^96(8后面跟28个零)种可能性而无需修改时间戳。如果未来矿工穿过了以上所有的可能性,他们还可以通过修改时间戳来解决。同样,coinbase脚本中也有更多额外的空间可以为将来随机数的扩展做准备。

比特币的共识机制指的是,被矿工(或矿池)试图使用自己的算力实行欺骗或破坏的难度很大,至少理论上是这样。就像我们前面讲的,比特币的共识机制依赖于这样一个前提,那就是绝大多数的矿工,出于自己利益最大化的考虑,都会 通过诚实地挖矿来维持整个比特币系统。然而,当一个或者一群拥有了整个系统中大量算力的矿工出现之后,他们就可以通过攻击比特币的共识机制来达到破坏比特币网络的安全性和可靠性的目的。

值得注意的是,共识攻击只能影响整个区块链未来的共识,或者说,最多能影响不久的过去几个区块的共识(最多影响过去10个块)。而且随着时间的推移,整个比特币块链被篡改的可能性越来越低。

理论上,一个区块链分叉可以变得很长,但实际上,要想实现一个非常长的区块链分叉需要的算力非常非常大,随着整个比特币区块链逐渐增长,过去的区块基本可以认为是无法被分叉篡改的。

同时,共识攻击也不会影响用户的私钥以及加密算法(ECDSA)。

共识攻击也 不能从其他的钱包那里偷到比特币、不签名地支付比特币、重新分配比特币、改变过去的交易或者改变比特币持有纪录。共识攻击能够造成的唯一影响是影响最近的区块(最多10个)并且通过拒绝服务来影响未来区块的生成。

共识攻击的一个典型场景就是“51%攻击”。想象这么一个场景,一群矿工控制了整个比特币网络51%的算力,他们联合起来打算攻击整个比特币系统。由于这群矿工可以生成绝大多数的块,他们就可以通过故意制造块链分叉来实现“双重支 付”或者通过拒绝服务的方式来阻止特定的交易或者攻击特定的钱包地址。

区块链分叉/双重支付攻击指的是攻击者通过 不承认最近的某个交易,并在这个交易之前重构新的块,从而生成新的分叉,继而实现双重支付。有了充足算力的保证,一个攻击者可以一次性篡改最近的6个或者更多的区块,从而使得这些区块包含的本应无法篡改的交易消失。

值得注意的是,双重支付只能在攻击者拥有的钱包所发生的交易上进行,因为只有钱包的拥有者才能生成一个合法的签名用于双重支付交易。攻击者在自己的交易上进行双重支付攻击,如果可以通过使交易无效而实现对于不可逆转的购买行为不予付款, 这种攻击就是有利可图的。

攻击者Mallory在Carol的画廊买了描绘伟大的中本聪的三联组画(The Great Fire),Mallory通过转账价值25万美金的比特币 与Carol进行交易。在等到一个而不是六个交易确认之后,Carol放心地将这幅组画包好,交给了Mallory。这时,Mallory 的一个同伙,一个拥有大量算力的矿池的人Paul,在这笔交易写进区块链的时候,开始了51%攻击。

首先,Paul利用自己矿池的算力重新计算包含这笔交易的块,并且在新块里将原来的交易替换成了另外一笔交易(比如直接转给了Mallory 的另一个钱包而不是Carol的),从而实现了“双重支付”。这笔“双重支付”交易使用了跟原有交易一致的UTXO,但收款人被替换成了Mallory的钱包地址。

然后,Paul利用矿池在伪造的块的基础上,又计算出一个更新的块,这样,包含这 笔“双重支付”交易的块链比原有的块链高出了一个块。到此,高度更高的分叉区块链取代了原有的区块链,“双重支付”交 易取代了原来给Carol的交易,Carol既没有收到价值25万美金的比特币,原本拥有的三幅价值连城的画也被Mallory白白 拿走了。

在整个过程中,Paul矿池里的其他矿工可能自始至终都没有觉察到这笔“双重支付”交易有什么异样,因为挖矿程序都是自动在运行,并且不会时时监控每一个区块中的每一笔交易。

为了避免这类攻击,售卖大宗商品的商家应该在交易得到全网的6个确认之后再交付商品。或者,商家应该使用第三方 的多方签名的账户进行交易,并且也要等到交易账户获得全网多个确认之后再交付商品。一条交易的确认数越多,越难 被攻击者通过51%攻击篡改。

对于大宗商品的交易,即使在付款24小时之后再发货,对买卖双方来说使用比特币支付也 是方便并且有效率的。而24小时之后,这笔交易的全网确认数将达到至少144个(能有效降低被51%攻击的可能性)。

需要注意的是,51%攻击并不是像它的命名里说的那样,攻击者需要至少51%的算力才能发起,实际上,即使其拥有不 到51%的系统算力,依然可以尝试发起这种攻击。之所以命名为51%攻击,只是因为在攻击者的算力达到51%这个阈值 的时候,其发起的攻击尝试几乎肯定会成功。

本质上来看,共识攻击,就像是系统中所有矿工的算力被分成了两组,一 组为诚实算力,一组为攻击者算力,两组人都在争先恐后地计算块链上的新块,只是攻击者算力算出来的是精心构造 的、包含或者剔除了某些交易的块。因此,攻击者拥有的算力越少,在这场决逐中获胜的可能性就越小。

从另一个角度 讲,一个攻击者拥有的算力越多,其故意创造的分叉块链就可能越长,可能被篡改的最近的块或者或者受其控制的未来 的块就会越多。一些安全研究组织利用统计模型得出的结论是,算力达到全网的30%就足以发动51%攻击了。全网算力的急剧增长已经使得比特币系统不再可能被某一个矿工攻击,因为一个矿工已经不可能占据全网哪怕的1%算 力。

待补充

待补充

⑶ 比特币价值将归零谷歌计划2029年前量子计算商用化

(思进注: 1994年,数学家Peter Shor公布了一种量子算法,该算法可以打破最常见的非对称密码算法的安全性假设。这意味着拥有足够大量子计算机的任何人,都可以使用此算法通过公钥反算出私钥,从而伪造任何数字签名。这是否意味着比特币将会被量子计算机crack down…… 事实上,中心化的密钥体系PKI,确实会有这个风险,因为大多数应用是CA+10的6次方。海量反编译,是可以推算出中心密码本的!也就是说,伪造PKI数字签名是有可能的, 拭目以待吧……再转发下文,和大家分享……)

谷歌计划2029年前量子计算商用化,比特币价值将归零?

作者 | 新浪 财经

来源 | 华尔街见闻

量子计算何以对比特币构成威胁?

在解释这个问题前,需要先了解以下几个知识点。

经典计算机采用二进制,用0和1构建了底层代码的一切。量子计算机可以同时储存和表示0和1叠加态。比特币挖矿基于计算一种名为SHA-256的哈希函数(一种函数算法,把任意一个字符串输入SHA-256函数,都会输出一个256位的二进制数)的正确值。每一个比特币用户在注册的时候,系统都会生成一个随机数,再对这个随机数进行SHA256再进行hash160,产生一个叫做私钥的字符串。作为数字签名。私钥可以对一串字符进行加密。而公钥可以把私钥加密之后的数据进行和解密。加密和解密的钥匙不一样的这种加密方式,称之为非对称加密。通过公钥反算不出私钥。如果私钥遗失,那么拥有者的比特币就无法取出。

基于上述原因,由于SHA-256的正确值十分难计算,数量有限的比特币才会变得极为稀缺和珍贵。同时由于经典计算机无法通过公钥反算出私钥,私人拥有的比特币才无法被他人获得。

但在1994年,数学家Peter Shor公布了一种量子算法,该算法可以打破最常见的非对称密码算法的安全性假设。这意味着拥有足够大量子计算机的任何人,都可以使用此算法通过公钥反算出私钥,从而伪造任何数字签名。

故而,在量子计算面前,比特币的挖矿将变得轻而易举,通过公钥也能反算出私钥。这令比特币变得不再稀缺,也不再安全。

同时意味着比特币的共识将产生崩塌,比特币的价值也将趋零。

关于量子力学,广为人知的还有光的波粒二象性、观测者效应,和一个著名的思想试验——薛定谔的猫。

量子世界是如此不合常理,以至于它曾令说出“上帝不会掷骰子“爱因斯坦,都感到困惑不解。

无论如何,量子计算机的出现,对经典计算机形成了巨大挑战。而随着量子计算研究进程的递进,比特币的破解,或许在2029年前就将成为可能。

谷歌的量子计算进程如何?

早在2019年,谷歌发表在《自然》杂志上的论文称,其开发的54比特(其中53个量子比特可用)超导量子芯片“Sycamore”,对53比特、20深度的电路采样一百万次仅需200秒,最强的经典超级计算机Summit要得到类似的结果,则需要一万年。基于这一突破,谷歌宣称实现了“量子霸权“。

而近日在 Google I/O 大会上,领导谷歌 Quantum AI(量子 人工智能)团队的的科学家Hartmut Neven表示,谷歌计划在2029年前建造数十亿美元的量子计算机并将其正式商用。

谷歌的目标是建造有着100万个量子比特的计算机。不过,谷歌同时表示,首先需要减少量子比特产生的错误,然后才能考虑将1000个量子比特一起构建为一个逻辑量子比特。这将为“量子晶体管”打下基础,“量子晶体管”是未来量子计算机的基础。目前谷歌的量子计算机只有不到100个量子比特。但要知道,互联网诞生至今不过52年,第一台通用计算机诞生至今不过75年.

谷歌目前正在加利福尼亚州扩建一个新园区,用以专注于量子计算方面的研究工作,扩建工程将于2020年底正式完工。

在量子计算领域大举投资和押注的公司,除了谷歌,还有IBM、D-Wave Systems、霍尼韦尔(Honeywell)。

IBM Research总监Dario Gil曾表示,2023年将是量子计算大面积使用的转折点,届时将能通过软件实时查看和更新量子计算的状态,而不再是通过以往的硬件调整。

高德纳咨询公司 (Gartner)副总裁Chirag Dekate表示,过去五年中,量子计算的创新速度超过了此前的30年,他还预计到2025年,将有近40%的大公司制定量子计算计划。

关于对抗量子计算,目前已出现量子密码学的相关研究。一个名为The Open Quantum Safe (OQS)的开源项目已于2016年启动,目标为开发抗量子的密码形式。

⑷ 为什么挖比特币靠显卡而不是cpu

1、 CPU 主要为串行指令而优化,而GPU则是为大规模并行运算而优化。
2 、现代的多核 CPU 针对的是指令集并行(ILP)和任务并行(TLP),而 GPU 则是数据并行(DLP)。
3 、GPU 往往拥有更大带宽的 Memory,也就是所谓的显存,因此在大吞吐量的应用中也会有很好的性能。
4、CPU是通用运算简单说就是无脑算、暴力算不管是100个小朋友分苹果还是模拟地球都能分解成 1+1=2这类最基本的给暴力算出来。GPU 就是专门来处理高阶数学算法的,比如算出、光源、物体、视点、阴影的相对位置,这就要三角函数给堆出来。而比特币挖掘器采用的是SHA-256,这是由美国国家安全局发明的一种安全散列函数,一般用于密码加密与解密。这种算法会进行大量32位整数循环右移运算(Right-Rotate),很适合擅长大规模并发计算,破解密码的 GPU来运算。

⑸ 天天说挖矿,比特币挖矿流程概述。

通俗易懂的大概流程

如果你之前对挖矿根本没有了解,这段介绍就适合你阅读,进入状态后再进行更深层次的学习。

其实通俗来讲原理很简单,比特币作为一种点对点的电子货币体系,挖矿的过程就是一个纪录数据的过程,因为整个系统是开放的,人人可参与的,所以人人都可以进行挖矿,虽然理论上人人都可以参与,但无利不起早没有人会平白无故的参与到网络的建设中,中本聪就利用Hash函数设计了一种激励和竞争方式。

大家都进行数据的处理工作,谁处理的又快又准确,谁就获得记账权,同时获得该区块的奖励。既有奖励又有竞争才使得比特币网络得以正常运转。

想要竞争成功就要经历几个基本的流程。

一、首先你要将没有被记录的交易信息检查并归集到一个数据块中。

二、数据块打包好后,进行哈希运算,算出哈希值,哈希值这个概念在昨天文章中已经详细的介绍过。

三、算出哈希值后进行全网广播,其他矿工接收到后进行验证,验证没有问题就会将这一个数据块连接到整个区块链上,就可以获得这个区块的奖励了。

大致过程了解后就可以开始详细的了解整个过程了。

开始挖矿前的准备工作

这里所说的准备,可不是让你准备买矿机或者给矿机通电,说的是在进行POW工作量证明之前记账节点所作的准备工作。也就是前面流程的第一步的具体解释。

想要收集齐全交易信息,第一步就是收集广播中还没有被记录账本的原始交易信息。收集完成后就要自己先进行验证,主要验证两个方面,1.每个交易信息中的付款地址有没有足够付款的余额。2.验证交易是否有正确的签名。这两项必不可少,通俗一点就是你给别人打钱银行需要确认的就是两点,你账号里到底有没有那么多钱,是不是你本人或本人同意的行为。

这两项验证完后就可以将验证好的数据进行打包,打包完成后当然没有完,因为还有对于矿工来说最最重要的 一 步,添加一个奖励交易,写一个给自己地址增加6.25枚比特币的交易。

如果你竞争成功,那么你的账户地址内就会增加6.25枚比特币,在这里也顺便提一下减半,最开始一个区块的记账奖励是50个比特币,比特币大概每4年奖励就进行减半,前一段时间的减半过后比特币一个区块的奖励已经变成了6.25枚。

值得一提的是前两次减半后都伴随着牛市的来临,现在第三次减半已过,在之后会有什么样的变化呢?

准备工作完成后就要正式的争夺了

因为10分钟左右就一个记账的名额,在这个阶段全世界的矿工,都进行着一场没有硝烟的战争。

那这场仗怎么打呢?其实就是计算Hash函数,矿工算力的比拼,所以说在比特币网络哪里都离不开Hash函数。为了保证在10分钟只有一个人能够成功,这个哈希函数的难度必须适当。直接哈希难度过低,所以规定Hash出的结果必须以若干个0构成。

可能直接这么说开头若干个0还没有什么难度概念,那就简单分析一下,进行这样的计算有多难 , 也就顺便可以解释为什么单打独斗的矿工已经不吃香了。

Hash值跟平常我们设置的密码要求相似,是由数字、字母组成,其中字母区分大小写。也就是说每一位都有62种可能,哈希运算本质就是试错,相当于给你一个不限出错次数的手机让你开锁一样 。 而比特币的哈希值是以18个0开头的,理论上需要进行62的18次方,这个数字在普通计算器上都是以科学计数法显示的,结果为1.832527122*10的32次方。

指数爆炸式的运算次数增长保证了其挖矿的难度。同时也因为难度大带来了一些争议,有人就会说耗费那么大却不产生价值,之前挖矿还在一份意见征集稿中放到了落后产能里。可以说对于挖矿行业的争议是一直存在的。

最后一步验证

找到哈希值后,进行广播打包区块,网络节点就会进行验证。

情况无非就是两种,一种是验证通过,那么表明这个区块成功挖出,其他矿工就不再竞争,选择接受这个区块,将这个区块进行记录,挖出这个区块的矿工就获得了该区块的奖励,并且进入下一个区块的竞争。

另外一种就是不通过,那么前面的那些工作都白费了,投入的成本就没有办法收回,所以矿工们都自觉的遵守着打包和验证的规则,因为作恶成本较高,也就维护了比特币网络的安全。

相信你读完文章已经大致了解了比特币挖矿的整个流程,不过挖矿实际操作起来又是另一个概念了,其中什么时候适合进场挖矿、入手什么样的矿机进行挖矿、通过什么样的方式参与挖矿都是有一定学问的。

挖矿有风险投资需谨慎呀,搞懂再行动,没搞懂之前就要多学习。

⑹ 鎸栫熆绠楀姏濡備綍璁$畻

甯佹槸濡備綍鈥滄寲鈥濆嚭鏉ョ殑
姹瀵块槼琛ㄧず锛岃繎骞存潵锛屾瘮鐗瑰竵鍥犲叾楂樺埄娑︼紝鍚稿紩鐫瓒婃潵瓒婂氱殑鈥滅熆宸モ濆幓鈥滄寲鐭库濄傝屸滄寲鐭库濋渶瑕佷娇鐢ㄨ$畻鏈轰綔涓衡滅熆鏈衡濇潵鎵ц岀壒瀹氱畻娉曡繘琛岃$畻锛屽苟绔炰簤鍖哄潡鎾鎶ユ潈銆傝幏寰楁挱鎶ユ潈鐨勭熆宸ュ彲浠ヨ幏寰楁瘮鐗瑰竵浣滀负濂栧姳銆傚湪璁$畻鐨勮繃绋嬩腑锛屾瘮鐗瑰竵鍏ㄧ綉浼氭秷鑰楀ぇ閲忕殑鐢靛姏鑳芥簮鍜岀畻鍔涖
姝︽眽澶у︾數鍣ㄥ﹂櫌鏁欐巿寮犱繆鎸囧嚭锛屾瘮鐗瑰竵鐨勭畻娉曟槸姹傝В鍝堝笇鍑芥暟锛屽氨鏄浣犵粰涓涓蹭唬鐮侊紝瀹冧細鐢熸垚鍙︿竴涓查殢鏈轰唬鐮併備簰鑱旂綉涓鐨勬墍鏈夎$畻鏈洪兘鍙浠ュ幓瀵绘壘姝や唬鐮侊紝璋佹壘鍒版や唬鐮侊紝灏变細浜х敓涓涓鍖哄潡锛岄殢鍗冲緱鍒颁竴涓姣旂壒甯侊紝杩欎釜杩囩▼灏辨槸浜轰滑甯歌寸殑鈥滄寲鐭库濄
鈥滄瘮鐗瑰竵缃戠粶姣10鍒嗛挓浼氫骇鐢熶竴閬撴暟瀛﹂棶棰橈紝浜ょ粰鍙備笌澶勭悊鍖哄潡鐨勮$畻鏈(鍗斥樼熆鏈衡)鏉ユ眰瑙c傛渶鏃╄В鍑虹瓟妗堢殑鈥樼熆鏈衡欏皢鑾峰緱涓瀹氭暟閲忕殑姣旂壒甯佷綔涓哄栧姳銆傗濆紶淇婁妇渚嬭达紝1鍙扮數鑴戝拰100鍙扮數鑴戝垎鍒鈥滄寲鐭库濓紝鍓嶈呬竴娆$畻涓涓闅忔満浠g爜锛屽悗鑰呬竴娆$畻100涓闅忔満浠g爜锛岄偅鑲瀹氭槸骞惰岀殑閲忚秺澶氭寲鍒扮殑姣旂壒甯佽秺澶氥傛姇鏈鸿呬负浜嗗埄鐩婏紝灏变細璐涔板ぇ閲忕殑鐭挎満杩涜屽ぇ瑙勬ā鐨勨滄寲鐭库濓紝鑷鐒朵細浜х敓鑳芥簮鐨勫法澶ф氮璐广
鍏跺疄涓嶅厜涓鍥斤紝姣旂壒甯佺殑楂樿楄兘鐗规у凡缁忓紩璧蜂笘鐣屽悇鍥界殑娉ㄦ剰銆傛ф床澶琛岀О锛屽姞瀵嗚祫浜р滆繃楂樼殑纰宠冻杩逛护浜烘媴蹇р濄傛瘮灏斅风洊鑼ㄦゅ墠鍦ㄨ闊崇ぞ浜ゅ钩鍙癈lubhouse鍋氬㈡椂琛ㄧず锛屾瘮鐗瑰竵鍦ㄦ瘡绗斾氦鏄撹繃绋嬩腑娑堣楃殑鐢甸噺锛岃秴杩囦汉绫诲凡鐭ョ殑浠讳綍涓绉嶆敮浠樻柟寮忋
鈥滄寲鐭库濆奖鍝嶁滅⒊涓鍜屸濈殑瀹炵幇
鍥介檯鑳芥簮缃(IEA)鏁版嵁鏄剧ず锛2019骞存瘮鐗瑰竵鈥滄寲鐭库濇秷鑰50鑷70鍏嗙摝鏃讹紝澶ц嚧鐩稿綋浜庡傜憺澹鑸浣撻噺鍥藉剁殑娑堣楅噺(姣忓勾娑堣63澶鐡︽椂)銆侰ambridge Bitcoin Electricity Consumption Index(鍓戞ˉ姣旂壒甯佺數鍔涙秷璐规寚鏁)瀹炴椂鏁版嵁鍒欐洿浣夸汉蹇у績锛屾埅鑷冲寳浜鏃堕棿5鏈17鏃ワ紝姣旂壒甯佹昏兘婧愭秷鑰43.89-482.43鍏嗙摝鏃(TWh)涔嬮棿锛屽潎缁熻$害涓140.25鍏嗙摝鏃讹紝杩欎釜鏁板瓧瓒呰繃浜嗙憺鍏2019骞村叏骞寸殑鑰楃數閲(131.8澶鐡︽椂)銆
姹瀵块槼鐮旂┒鍥㈤槦鍒╃敤姣旂壒甯佸尯鍧楅摼纰虫帓鏀炬ā鍨嬶紝杩借釜浜嗕腑鍥芥瘮鐗瑰竵鍖哄潡閾捐繍钀ョ殑纰虫帓鏀炬祦閲忋傛牴鎹褰撳墠鐨勬瘮鐗瑰竵鈥滄寲鐭库濇疆娴侊紝浠栦滑棰勬祴姣旂壒甯佸尯鍧楅摼杩愯惀鐨勮兘鑰椾細鍦2024骞磋揪鍒扮害297涓囦嚎鐡︽椂鐨勫嘲鍊硷紝骞跺皢浜х敓绾1.305浜垮叕鍚ㄧ殑纰虫帓鏀俱傝繖涓鏁板艰秴杩囦簡鎹峰厠銆佸崱濉斿皵绛夊浗鐨勫叏骞存俯瀹ゆ皵浣撴帓鏀炬婚噺銆
鈥滄瘮鐗瑰竵鏄鈥橀珮纰斥欎骇涓氥傝繖涓庢垜鍥藉姏浜2030骞村墠瀹炵幇纰宠揪宄般2060骞村墠瀹炵幇纰充腑鍜岃繖涓鐩鏍囨樉鐒舵牸鏍间笉鍏ャ傗濇豹瀵块槼琛ㄧず锛屽幓骞村湪涓鍥解樻寲鐭库欎骇鐢熶簡6900涓囧惃浜屾哀鍖栫⒊锛屽崰鍏ㄧ悆浜屾哀鍖栫⒊鎺掓斁閲忕殑1%銆
鎵撳嚮鈥滄寲鐭库濊屼负锛屼腑鍥藉湪琛屽姩
鏄剧劧锛屼竴浜涘湴鏂瑰凡缁忔敞鎰忓埌鈥滄寲鐭库濈粰褰撳湴鐜澧冨拰鐢熸佸甫鏉ョ殑涓ラ噸鐮村潖锛屽紑濮嬪氭帾骞朵妇鍏ㄩ潰娓呯悊鍏冲仠铏氭嫙鈥滄寲鐭库濋」鐩銆
鍐呰挋鍙よ嚜娌诲尯缁т粖骞3鏈10鏃ユ槑纭鈥滃叏闈㈡竻鐞嗗叧鍋滆櫄鎷熻揣甯佹寲鐭块」鐩锛2021骞4鏈堝簳鍓嶅叏閮ㄩ鍑衡濅箣鍚庯紝5鏈18鏃ヨ嚜娌诲尯鑳借楀弻鎺у簲鎬ユ寚鎸ラ儴鍔炲叕瀹ゅ彂甯冦婂叧浜庤剧珛铏氭嫙璐у竵鈥滄寲鐭库濅紒涓氫妇鎶ュ钩鍙扮殑鍏鍛娿嬶紝鍏ㄩ潰鍙楃悊鍏充簬铏氭嫙璐у竵鈥滄寲鐭库濅紒涓氶棶棰樹俊璁夸妇鎶ャ5鏈25鏃ワ紝鑷娌诲尯鍙戞敼濮斿張璧疯崏浜嗐婂唴钂欏彜鑷娌诲尯鍙戝睍鍜屾敼闈╁斿憳浼氬叧浜庡潥鍐虫墦鍑绘儵鎴掕櫄鎷熻揣甯佲滄寲鐭库濊屼负鍏椤规帾鏂(寰佹眰鎰忚佺)銆嬶紝鍖呮嫭瀵瑰瓨鍦ㄨ櫄鎷熻揣甯佲滄寲鐭库濊屼负鐨勭浉鍏充紒涓氬強鏈夊叧浜哄憳锛屾寜鏈夊叧瑙勫畾绾冲叆澶变俊榛戝悕鍗曠瓑銆
姝ゅ栵紝閽堝硅繎鏈熻櫄鎷熻揣甯佷氦鏄撶倰浣滄椿鍔ㄦ湁鎵鍙嶅脊鐨勭幇璞★紝涓鍥戒簰鑱旂綉閲戣瀺鍗忎細绛夌浉鍏冲崗浼氳仈鍚堝彂甯冨叕鍛婏紝寮灞曟硶瀹氳揣甯佷笌铏氭嫙璐у竵鍏戞崲鍙婅櫄鎷熻揣甯佷箣闂寸殑鍏戞崲涓氬姟锛岃繚鍙嶆湁鍏虫硶寰嬫硶瑙勫苟娑夊珜鐘缃銆5鏈21鏃ワ紝鍥藉姟闄㈤噾铻嶅斿彫寮鐨勭浜斿崄涓娆′細璁鏄庣‘鎻愬嚭锛屾墦鍑绘瘮鐗瑰竵鈥滄寲鐭库濆拰浜ゆ槗琛屼负銆
涓鍥界ぞ浼氱戝﹂櫌娉曞︾爺绌舵墍鍓鐮旂┒鍛樿档纾婂缓璁锛屼竴鏂归潰锛屽湴鏂规斂搴滃彲閫氳繃鎺у埗鐢ㄧ數銆佹彁楂樼◣鏀躲侀檺鍒剁敤鍦扮瓑鎵嬫垫帹鍔ㄥ瓨閲忊滄寲鐭库濅紒涓氬敖蹇閫鍑猴紱鍙︿竴鏂归潰锛屽姞澶у硅櫄鎷熻揣甯侀潪娉曚氦鏄撴椿鍔ㄧ殑鎵撳嚮鍔涘害锛屾彁楂橀潪娉曞弬涓庤櫄鎷熻揣甯佷氦鏄撱佺倰浣滄垨涓轰箣鎻愪緵鏀鎸佹湇鍔$殑鏈烘瀯銆佸钩鍙扮殑杩濇硶鎴愭湰锛屽炲姞鐩戠$殑濞佹厬鍔涖傚悓鏃讹紝搴旇繘涓姝ョ户缁鎺ㄥ姩铏氭嫙璐у竵鐐掍綔鐨勯庨櫓鎻愮ず涓庨庨櫓闃茶寖瀹d紶宸ヤ綔銆
鈥滃洓闂姣旂壒甯佲濅箣涓锛氱洃绠′负浣曟帴韪佃岃嚦 鐐掑竵椋庨櫓鏈夊氬ぇ锛

⑺ 区块链技术

背景:比特币诞生之后,发现该技术很先进,才发现了区块链技术。比特币和区块链技术同时被发现。

1.1 比特币诞生的目的:

①货币交易就有记录,即账本;

②中心化机构记账弊端——可篡改;易超发

比特币解决第一个问题:防篡改——hash函数

1.2 hash函数(加密方式)

①作用:将任意长度的字符串,转换成固定长度(sha256)的输出。输出也被称为hash值。

②特点:很难找到两个不同的x和y,使得h(x)=h(y)。

③应用:md5文件加密

1.3 区块链

①定义

区块:将总账本拆分成区块存储

区块链:在每个区块上,增加区块头。其中记录父区块的hash值。通过每个区块存储父区块的hash值,将所有的区块按照顺序连接起来,形成区块链。

②区块链如何防止交易记录被篡改

形成区块链后,篡改任一交易,会导致该交易区块hash值和其子区块中不同,发现篡改。

即使继续篡改子区块头中hash值,会导致子区块hash值和孙区块中不同,发现篡改。


1.4 区块链本质

①比特币和区块链本质:一个人人可见的大账本,只记录交易。

②核心技术:通过密码学hash函数+数据结构,保证账本记录不可篡改。

③核心功能:创造信任。法币依靠政府公信力,比特币依靠技术。

1.5如何交易

①进行交易,需要有账号和密码,对应公钥和私钥

私钥:一串256位的二进制数字,获取不需要申请,甚至不需要电脑,自己抛硬币256次就生成了私钥

地址由私钥转化而成。地址不能反推私钥。

地址即身份,代表了在比特币世界的ID。

一个地址产生之后,只有进入区块链账本,才能被大家知道。

②数字签名技术

签名函数sign(张三的私钥,转账信息:张三转10元给李四) = 本次转账签名

验证韩式verify(张三的地址,转账信息:张三转10元给李四,本次转账签名) = True

张三通过签名函数sign(),使用自己的私钥对本次交易进行签名。

任何人可以通过验证韩式vertify(),来验证此次签名是否有由持有张三私钥的张三本人发出。是返回true,反之为false。

sign()和verify()由密码学保证不被破解。·

③完成交易

张三将转账信息和签名在全网供内部。在账户有余额的前提下,验证签名是true后,即会记录到区块链账本中。一旦记录,张三的账户减少10元,李四增加10元。

支持一对一,一对多,多对已,多对多的交易方式。


比特币世界中,私钥就是一切!!!

1.6中心化记账

①中心化记账优点:

a.不管哪个中心记账,都不用太担心

b.中心化记账,效率高

②中心化记账缺点:

a 拒绝服务攻击

b 厌倦后停止服务

c 中心机构易被攻击。比如破坏服务器、网络,监守自盗、法律终止、政府干预等

历史 上所有有中心化机构的机密货币尝试都失败了。


比特币解决第二个问题:如何去中心化

1.7 去中心化记账

①去中心化:人人都可以记账。每个人都可以保留完整的账本。

任何人都可以下载开源程序,参与P2P网络,监听全世界发送的交易,成为记账节点,参与记账。

②去中心化记账流程

某人发起一笔交易后,向全网广播。

每个记账节点,持续监听、持续全网交易。收到一笔新交易,验证准确性后,将其放入交易池并继续向其它节点传播。

因为网络传播,同一时间不同记账节点的交一次不一定相同。

每隔10分钟,从所有记账节点当中,按照某种方式抽取1名,将其交易池作为下一个区块,并向全网广播。

其它节点根据最新的区块中的交易,删除自己交易池中已经被记录的交易,继续记账,等待下一次被选中。

③去中心化记账特点

每隔10分钟产生一个区块,但不是所有在这10分钟之内的交易都能记录。

获得记账权的记账节点,将得到50个比特币的奖励。每21万个区块(约4年)后,奖励减半。总量约2100万枚,预计2040年开采完。

记录一个区块的奖励,也是比特币唯一的发行方式。

④如何分配记账权:POW(proof of work) 方式

记账几点通过计算一下数学题,来争夺记账权。

找到某随即数,使得一下不等式成立:

除了从0开始遍历随机数碰运气之外,没有其它解法,解题的过程,又叫做挖矿。

谁先解对,谁就得到记账权。

某记账节点率先找到解,即向全网公布。其他节点验证无误之后,在新区块之后重新开始新一轮的计算。这个方式被称为POW。

⑤难度调整

每个区块产生的时间并不是正好10分钟

随着比特币发展,全网算力不算提升。

为了应对算力的变化,每隔2016个区块(大约2周),会加大或者减少难度,使得每个区块产生的平均时间是10分钟。

#欧易OKEx# #比特币[超话]# #数字货币#

⑻ 什么是哈希

散列是指从可变大小的输入生成固定大小的输出的过程。这是通过使用称为散列函数(作为散列算法实现)的数学公式来完成的。

尽管并非所有哈希函数都涉及密码学的使用 ,但所谓的密码哈希函数是加密货币的核心。多亏了它们,区块链和其他分布式系统能够实现显着水平的 数据完整性和安全性。

传统和加密散列函数都是确定性的。确定性意味着只要输入不变,散列算法将始终产生相同的输出(也称为摘要或散列)。

通常,加密货币的散列算法被设计为单向函数,这意味着如果没有大量的计算时间和资源,它们就无法轻易恢复。换句话说,从输入创建输出非常容易,但在相反的方向(仅从输出生成输入)相对困难。一般来说,越难找到输入,哈希算法被认为越安全。

不同的散列函数将产生不同大小的输出,但每种散列算法可能的输出大小始终是恒定的。例如,SHA-256 算法只能生成 256 位的输出,而 SHA-1 将始终生成 160 位的摘要。

为了说明这一点,让我们通过 SHA-256 哈希算法(比特币中使用的算法)运行“Bitcoin”和“bitcoin”这两个词。

请注意,微小的更改(第一个字母的大小写)会导致完全不同的哈希值。但由于我们使用 SHA-256,输出将始终具有 256 位(或 64 个字符)的固定大小 - 无论输入大小如何。此外,无论我们通过算法运行这两个单词多少次,两个输出都将保持不变。

相反,如果我们通过 SHA-1 哈希算法运行相同的输入,我们将得到以下结果:

值得注意的是,首字母缩略词 SHA 代表安全哈希算法。它指的是一组加密哈希函数,包括 SHA-0 和 SHA-1 算法以及 SHA-2 和 SHA-3 组。SHA-256 是 SHA-2 组的一部分,还有 SHA-512 和其他变体。目前,只有 SHA-2 和 SHA-3 组被认为是安全的。

传统的哈希函数具有广泛的用例,包括数据库查找、大文件分析和数据管理。另一方面,加密散列函数广泛用于信息安全应用,例如消息认证和数字指纹。就比特币而言,加密哈希函数是挖矿过程的重要组成部分, 也在新地址和密钥的生成中发挥作用。

散列的真正威力在于处理大量信息时。例如,可以通过哈希函数运行一个大文件或数据集,然后使用其输出来快速验证数据的准确性和完整性。由于散列函数的确定性,这是可能的:输入将始终产生简化的、压缩的输出(散列)。这种技术消除了存储和“记住”大量数据的需要。

散列在区块链技术的背景下特别有用。比特币区块链有几个涉及散列的操作,其中大部分在挖掘过程中。事实上,几乎所有的加密货币协议都依赖散列来将交易组链接和压缩成块,并在每个块之间产生加密链接,从而有效地创建区块链。

同样,部署密码技术的散列函数可以定义为密码散列函数。一般来说,破解密码哈希函数需要无数次的蛮力尝试。对于“还原”加密哈希函数的人来说,他们需要通过反复试验来猜测输入是什么,直到产生相应的输出。然而,也有可能不同的输入产生完全相同的输出,在这种情况下会发生“冲突”。

从技术上讲,加密哈希函数需要遵循三个属性才能被视为有效安全。我们可以将这些描述为抗碰撞性、抗原像性和抗二次原像性。

在讨论每个属性之前,让我们用三个简短的句子总结它们的逻辑。

如前所述,当不同的输入产生完全相同的散列时,就会发生冲突。因此,哈希函数被认为是抗冲突的,直到有人发现冲突为止。请注意,任何散列函数都将始终存在冲突,因为可能的输入是无限的,而可能的输出是有限的。

换句话说,当发现碰撞的可能性非常低以至于需要数百万年的计算时,哈希函数是抗碰撞的。因此,尽管没有无冲突的哈希函数,但其 中一些函数足够强大,可以被视为具有抵抗力(例如,SHA-256)。

在各种 SHA 算法中,SHA-0 和 SHA-1 组不再安全,因为已经发现冲突。目前,SHA-2 和 SHA-3组被认为是抗冲突的。

原像电阻的特性与单向函数的概念有关。当有人找到生成特定输出的输入的可能性非常低时,哈希函数被认为是抗原像的。

请注意,此属性与前一个属性不同,因为攻击者会试图通过查看给定的输出来猜测输入是什么。另一方面,当有人发现产生相同输出的两个不同输入时,就会发生冲突,但使用哪个输入并不重要。

原像抗性的特性对于保护数据很有价值,因为消息的简单散列可以证明其真实性,而无需披露信息。在实践中,许多服务提供商和 Web 应用程序存储和使用从密码生成的哈希值,而不是明文密码。

为简化起见,我们可以说第二原像电阻介于其他两个属性之间。当有人能够找到一个特定的输入,该输入生成与他们已经知道的另一个输入相同的输出时,就会发生二次原像攻击。

换句话说,第二原像攻击涉及寻找碰撞,但不是搜索生成相同散列的两个随机输入,而是搜索生成由另一个特定输入生成的相同散列的输入。

因此,任何抗碰撞的哈希函数也能抗第二原像攻击,因为后者总是意味着碰撞。然而,人们仍然可以对抗碰撞函数执行原像攻击,因为它意味着从单个输出中找到单个输入。

比特币挖矿有很多步骤 涉及哈希函数,例如检查余额、链接交易输入和输出,以及对区块内的交易进行哈希处理以形成 默克尔树。但比特币区块链安全的主要原因之一 是矿工需要执行无数的散列操作,以便最终为下一个区块找到有效的解决方案。

具体来说,矿工在为其候选块创建哈希值时必须尝试几种不同的输入。本质上,如果他们生成以一定数量的零开头的输出哈希,他们将只能验证他们的块。零的数量决定了挖矿难度,它根据网络的哈希率而变化。

在这种情况下,哈希率表示在比特币挖矿中投入了多少计算机能力。如果网络的哈希率增加,比特币协议会自动调整挖矿难度,使挖出一个区块所需的平均时间保持在接近 10 分钟。相反,如果几个矿工决定停止挖矿,导致算力大幅下降,则会调整挖矿难度,使其更容易挖矿(直到平均出块时间回到10分钟)。

请注意,矿工不必发现冲突,因为他们可以生成多个散列作为有效输出(从一定数量的零开始)。所以对于某个区块有几种可能的解决方案,矿工只需要找到其中一种——根据挖矿难度确定的阈值。

由于比特币挖矿是一项成本密集型任务,矿工没有理由欺骗系统,因为这会导致重大的经济损失。加入区块链的矿工越多,它就变得越大越强大。(国内禁止参与挖矿)

毫无疑问,哈希函数是计算机科学中必不可少的工具,尤其是在处理大量数据时。当与密码学结合时,散列算法可以非常通用,以多种不同的方式提供安全性和身份验证。因此,加密哈希函数对几乎所有加密货币网络都至关重要,因此了解它们的属性和工作机制对于任何对区块链技术感兴趣的人肯定会有所帮助。

阅读全文

与挖比特币采用的函数相关的资料

热点内容
比特币每秒交易多少次 浏览:355
虚拟货币高风险 浏览:733
2019比特币合法吗 浏览:196
数字货币预计什么时候上架 浏览:860
港股的区块链概念股 浏览:167
ace币区块链 浏览:536
数字货币超过巴菲特是谁 浏览:70
gucs数字货币今日价格 浏览:305
PS42k18虚拟货币到账 浏览:857
虎尔比特币 浏览:390
红牛矿池怎么激活 浏览:535
btc合约如何套利 浏览:491
以太坊打开端口 浏览:250
数字货币纸质货币还能用吗 浏览:334
中国禁止比特币的影响 浏览:606
如何发起比特币交易 浏览:674
在哪下比特币勒索补丁 浏览:885
蚂蚁矿机额定算力什么意思 浏览:909
通过知道创宇审核的虚拟货币 浏览:83
gcc虚拟货币是什么软件 浏览:546