比特币如何防止双支付(区块链鼻祖比特币之8:分叉带来的双花支付、51%攻击与解决办法)

 更新时间 2024-12-16  阅读 8  评论 0

一、区块鼻祖比特币之8:分叉带来的双花支付、51%攻击与解决办法

分叉

前面讲到了比特币通过区块链+工作量证明的独特设计来解决了时间顺序,但是不能保证在同一时刻有两个节点算出了正确的解,虽然这种可能性很低很低。这就带来了区块的分叉。

虽然说几乎同时有两个节点计算出这一数学问题的可能性微乎其微,但是仍然存在这样的可能性,所以分叉就以为着同一个区块的后面可能会跟上两个不同的区块。

规则的打破一直要到下一个区块被人解开。则会立即转向最长的区块,而那些短的区块则会被抛弃。数学问题使得区块很难被同时拆解。要连续发生多次更是困难。最终区块链会稳定下来。也就是说所有人对最后几个区块顺序达成共识。分叉意味着,譬如,若你的交易出现在较短的支链,它就会失去进入区块链的位置。一般而言,只代表他会回到未确认交易池。然后被纳入到下一个区块。

比特币网络如何解决分叉带来的双花支付

可惜,交易失去区块位置的潜在可能,给了本来定序系统防范的重复支付攻击机会。考虑下面的一个攻击者A,其首先用自己的比特币交换B节点的货物,其立即又支付给自己。然后其通过努力的制造更长的链条来让自己的支付替代掉B节点的支付,从而实现了双重支付,B节点既得不到钱,还失去了货物。

这时交易会退回到未确认池中,因为A节点已经利用参照同样的input交易取而代之。节点就会认为Bob的交易无效。因为已使用掉。

你可能会猜测A节点会预先的计算出一支区块链,然后抓住时机发布到网络。但是每个区块的数学谜题阻挡了这个可能性。如前面所诉,解开区块是猜测出一个随机数的过程。一旦得出答案,解出的哈希值就会成为指纹一样的区块识别。只要区块内容有一丁点变化,下一个区块的参考值就会完全不同。此机制的结果就是无法在区块链中置换区块。在得到前一个区块之前,下位区块无法被解开。前一个区块的指纹也是杂凑函数的引数之一。

同时,该工作量证明机制还解决了在集体投票表决时,谁是大多数的问题。如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,则该机制就被破坏了。而工作量证明机制的本质则是一CPU一票。“大多数”的决定表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。如果想要对业已出现的区块进行修改,攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上和超越诚实节点的工作量。我们将证明,设想一个较慢的攻击者试图赶上随后的区块,那么其成功概率将呈指数化递减。另一个问题是,硬件的运算速度在高速增长,而节点参与网络的程度则会有所起伏。为了解决这个问题,工作量证明的难度(the proof-of-work difficulty)将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一个预定的平均数。如果区块生成的速度过快,那么难度就会提高。

如果有一台超级电脑,能够在区块解题中获胜?

即便是一台超级电脑,或者时几百上千台电脑也很难赢得解一个区块的胜利,因为竞争对手不是任一台电脑,而是整个比特币网络。你可以用买彩票来比拟。操作千百台电脑,如同买了千百张彩票一样。

51%攻击是指的什么

根据前面的例子,我们知道,要想有50%的概率领先其他人解题得到胜利,就需要掌握全网50%以上的算力。要连续领先他人解出区块,掌握的运算能力还需要高得多。所以区块链中的交易是受到数学竞赛所保护。恶意用户必须和整个网络较量。区块连接建立的结果,使得在支链越前方的交易越安全。恶意的用户必须在更长的时间赢过全网络,来达成重复支付,替换前面的区块链。所以,系统只有支端末尾易受到重复支付攻击。这也是为什么系统建议多等几个区块,才能确认收款成功。

个人博客:

二、比特币机制研究

现今世界的电子支付系统已经十分发达,我们平时的各种消费基本上在支付宝和微信上都可以轻松解决。但是无论是支付宝、微信,其实本质上都依赖于一个中心化的金融系统,即使在大多数情况这个系统运行得很好,但是由于信任模型的存在,还是会存在着仲裁纠纷,有仲裁纠纷就意味着不存在不可撤销的交易,这样对于不可撤销的服务来说,一定比例的欺诈是不可避免的。在比特币出来之前,不存在一个不引入中心化的可信任方就能解决在通信通道上支付的方案。

比特币的强大之处就在于:它是一个基于密码学原理而不是依赖于中心化机构的电子支付系统,它能够允许任何有交易意愿的双方能直接交易而不需要一个可信任的第三方。交易在数学计算上的不可撤销将保护提供不可撤销服务的商家不被欺诈,而用来保护买家的程序化合约机制也比较容易实现。

假设网络中有A, B,C三个人。

A付给B 1比特币,B付给C 2比特币,C付给A 3比特币。

如下图所示:

为了刺激比特币系统中的用户进行记账,记账是有奖励的。奖励来源主要有两方面:

比特币中每一笔交易都会有手续费,手续费会给记账者

记账会有打包区块的奖励,中本聪在08年设计的方案是:每10分钟打一个包,每打一个包奖励50个比特币,每4年单次打包的奖励数减半,即4年后每打一个包奖励25个比特币,再过四年后就奖励12.5个比特币...这样我们其实可以算出比特币的总量:

要说明打包的记录以谁为准的问题,我们需要引入一个知名的拜占庭将军问题(Byzantine failures)。拜占庭将军问题是由莱斯利·兰伯特提出的点对点通信中的基本问题。含义是在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。

假设有9个互相远离的将军包围了拜占庭帝国,除非有5个及以上的将军一起攻打,拜占庭帝国才能被打下来。而这9个将军之间是互不信任的,他们并不知道这其中是否有叛徒,那么如何通过远距离协商来让他们赢取战斗呢?

口头协议有3个默认规则:

1.每个信息都能够被准确接收

2.接收者知道是谁发送给他的

3.谁没有发送消息大家都知道

4.接受者不知道转发信息的转发者是谁

将军们遵循口头规则的话,那就是下面的场景:将军1对其他8个将军发送了信息,然后将军2~9将消息进行转达(广播),每个将军都是消息的接受者和转发者,这样一轮下来,总共就会有9×8=72次发送。这样将军就可以根据自己手中的信息,选择多数人的投票结果行动即可,这个时候即便有间谍,因为少数服从多数的原则,只要大部分将军同意攻打拜占庭,自己就去行动。

这个方案有很多缺点:

1.首先是发送量大,9个将军之间要发送72次,随着节点数的增加,工作量呈现几何增长。

2.再者是无法找出谁是叛徒,因为是口头协议,接受者不知道转发信息的转发者是谁,每个将军手里的数据仅仅只是一个数量的对比:

这里我们假设有3个叛徒,在一种最极端的情况下即叛徒转发信息时总是篡改为“不进攻”,那么我们最坏的结果就如上图所示。将军1根据手里的信息可以推出要进攻的结论,却无法获知将军里面谁是叛徒。

这样我们就有了方案二:书面协议。

书面协议即将军在接受到信息后可以进行签字,并且大家都能够识别出这个签字是否是本人,换种说法就是如果有人篡改签字大家可以知道。书面协议相对比口头协议就是增加了一个认证机制,所有的消息都有记录。一旦发现有人所给出的信息不一致,就是追查间谍。

有了书面协议,那么将军1手里的信息就是这样的:

可以很明显得看出,在最坏的一种情况——叛徒总是转发“不进攻”的消息之下,将军7、8、9是团队里的叛徒。

这个方案解决了口头协议里历史信息不可追溯的问题,但是在发送量方面并没有做到任何改进。

在我们的示例中,比特币系统里的每个用户发起了一笔交易,都会通过自己的私钥进行签名,用数学公式表示就是:

所以之前的区块就变成了这样:

这样每一笔交易都由交易发起者通过私钥进行数字签名,由于私钥是不公开的,所以交易信息也就无法被伪造了。

如书面协议末尾所说的那样,书面协议未能解决信息交流过多的问题。当比特币系统中存在上千万节点的时候,如果要互相广播验证,请求响应的次数那将是一个非常庞大的数字,显然势必会造成网络拥堵、节点处理变慢。为了解决这个问题,中本聪干脆让整个10分钟出一个区块,这个区块由谁来打包发出呢?这里就采用了工作量证明机制(PoW)。工作量证明,说白了就是解一个数学题,谁先解出来数学题,谁就能有打包区块的权力。换在拜占庭将军的例子中就是,谁先做出数学题,谁就成为将军们里面的总司令,其他将军听从他发号的命令。

首先,矿工会将区块头所占用的128字节的字符串进行两次sha256求值,即:

这样求得一个值Hash,将其与目标值相比对,如果符合条件,则视为工作量证明成功。

工作量证明成功的条件写在了区块链头部的难度数字段,它要求了最后进行两次sha256运算的Hash值必须小于定下的目标值;如果不是的话,那就改变区块头的随机数(nonce),通过一次次地重复计算检验,直到符合条件为止。

此外,比特币有自己的一套难度控制系统,使得比特币系统要在全网不同的算力条件下,都保持10分钟生成一个区块的速率。这也就意味着:难度值必须根据全网算力的变化进行调整。难度调整的策略是由最新2016个区块的花费时长与期望时长(期望时长为20160分钟即两周,是按每10分钟一个区块的产生速率计算出的总时长)比较得出的,根据实际时长与期望时长的比值,进行相应调整(或变难或变易)。也就是说,如果区块产生的速率比10分钟快则增加难度,比10分钟慢则降低难度。

PoW其实在比特币中是做了以下的三件事情。

这样可以防止一台高性能机器同时跑上万个节点,因为每完成一个工作都要有足够的算力。

有经济奖励就会加速整个系统的去中心化,也鼓励大家不要去作恶,要积极地按照协议本来的执行方式去执行。(所以说,无币区块链其实是不可行的,无币区块链一定导致中心化。)

也就是说,每个节点都不能以自身硬件条件去控制出快速度。现在的比特币上平均10分钟出一个块,性能再好的机器也无法打破这个规则,这就能够保证区块链是可以收敛到共同的主链上的,也就是我们所说的共识。

综上,共识只是PoW三个作用中的一点,事实上PoW设计的作用有点至少有这么三种。

默克尔树的概念其实很简单,如图所示

这样,我们区块的结构就大致完整了,这里分成了区块头和区块体两部分。

区块链的每个节点,都保存着区块链从创世到现在的每一区块,即每一笔交易都被保存在节点上,现在已经有几百个GB了。

每当比特币系统中有一笔新的交易生成,就会将新交易广播到所有的节点。每个节点都把新交易收集起来,并生成对应的默克尔根,拼接完区块头后,就开始调整区块头里的随机数值,然后就开始算数学题

将算出的result和网络中的目标值进行比对,如果是结果是小于的话,就全网广播答案。其他矿工收到了这个信息后,就会立马放下手里的运算,开始下一个区块的计算。

举个例子,当前A节点在挖38936个区块,A挖矿节点一旦完成计算,立刻将这个区块发给它的所有相邻节点。这些节点在接收并验证这个新区块后,也会继续传播此区块。当这个新区块在网络中扩散时,每个节点都会将它作为第38936个区块(前一个区块为38935)加到自身节点的区块链副本中。当挖矿节点收到并验证了这个新区块后,它们会放弃之前对构建这个相同高度区块的计算,并立即开始计算区块链中下一个区块的工作。

整个流程就像下一张图所展示的这样:

简单来说,双花问题是一笔钱重复花了两次。具体来讲,双花问题可分为两种情况:

1.同一笔钱被多次使用;

2.一笔钱只被使用过一次,但是通过黑客攻击或造假等方式,将这笔钱复制了一份,再次使用。

在我们生活的数字系统中,由于数据的可复制性,使得系统可能存在同一笔数字资产因不当操作被重复使用的情况,为了解决双花问题,日常生活中是依赖于第三方的信任机构的。这类机构对数据进行中心化管理,并通过实时修改账户余额的方法来防止双重支付的出现。而作为去中心化的点对点价值传输系统,比特币通过UTXO、时间戳等技术的整合来解决双花问题。

UTXO的英文全称是 unspent transaction outputs,意为未使用的交易输出。UTXO是一种有别于传统记账方式的新的记账模型。

银行里传统的记账方式是基于账户的,主要是记录某个用户的账户余额。而UTXO的交易方式,是基于交易本身的,甚至没有账户的概念。在UTXO的记账机制里,除了货币发行外,所有的资金来源都必须来自于前面某一个或几个交易。任何一笔的交易总量必须等于交易输出总量。UTXO的记账机制使得比特币网络中的每一笔转账,都能够追溯到它前面一笔交易。

比特币的挖矿节点获得新区块的挖矿奖励,比如 12.5个比特币,这时,它的钱包地址得到的就是一个 UTXO,即这个新区块的币基交易(也称创币交易)的输出。币基交易是一个特殊的交易,它没有输入,只有输出。

当甲要把一笔比特币转给乙时,这个过程是把甲的钱包地址中之前的一个 UTXO,用私钥进行签名,发送到乙的地址。这个过程是一个新的交易,而乙得到的是一个新的 UTXO。

这就是为什么有人说在这个世界上根本没有比特币,只有 UTXO,你的地址中的比特币是指没花掉的交易输出。

以Alice向Bob进行转账的过程举例的话:

UTXO与我们熟悉的账户概念的差别很大。我们日常接触最多的是账户,比如,我在银行开设一个账户,账户里的余额就是我的钱。

但在比特币网络中没有账户的概念,你可以有多个钱包地址,每个钱包地址中都有着多个 UTXO,你的钱是所有这些地址中的 UTXO加起来的总和。

中本聪发明比特币的目标是创建一个点对点的电子现金,UTXO的设计正可以看成是借鉴了现金的思路:我们可能在这个口袋里装点现金,在那个柜子角落里放点现金,在这种情况下不存在一个账户,你放在各处的现金加起来就是你所有的钱。

采用 UTXO设计还有一个技术上的理由,这种特别的数据结构可以让双重花费更容易验证。对比一下:

三、区块链双重支付是什么意思(区块链双重支付是什么意思呀)

DoubleSpend双重支付是什么?

说白了就是这笔钱被多次重复支付,例如A将被销毁的银行卡通过支付宝将5000块钱转到自己另外一个支付宝账户,同时A将这5000通过微信转账给自己另外一个微信账户(注意这里说的是同时,不是从支付宝转回到银行卡后再转微信),这就出现了双重支付问题,不过中心化数据库不存在这个问题,因为你将卡里面的钱转到自己另外一个支付宝账户的时候,银行卡余额会被修改,从而避免了同时转到自己另外一个微信账户的可能。

DoubleSpend双重支付的定义是什么?

如果一个恶意用户试图将同一笔比特币同时支付给两个不同的收款人,这就是双重支付。比特币挖矿和区块链就是用来在网络上共同工作,来确定哪个交易将会被确认

什么是去中心化系统开发,区块链去中心化应用有哪些

区块链,具有去中心化,不可篡改,透明开放等特点,其中区块链技术的去中心化特征,一直被称为区块链技术最典型的一个特点。DAPP区块链去中心化系统开发,DAPP去中心化模式开发,DAPP区块链应用开发,DAPP区块链去中心化模式定制开发,DAPP区块链系统开发,DAPP系统源码搭建开发

什么是去中心化系统?

去中心化,是互联网发展过程中形成的社会关系形态和内容产生形态,是相对于“中心化”而言的新型网络内容生产过程。在一个分布有众多节点的系统中,每个节点都具有高度自治的特征。节点之间彼此可以自由连接,形成新的连接单元。任何一个节点都可能成为阶段性的中心,但不具备强制性的中心控制功能。节点与节点之间的影响,会通过网络而形成非线性因果关系。这种开放式、扁平化、平等性的系统现象或结构,我们称之为去中心化。

作为区块链诸多特性中的重要的一个特点,其使用分布式储存与算力,使得整个网络节点的权利与义务相同,系统中数据本质为全网节点共同维护,从而区块链不再依靠于中央处理节点,实现数据的分布式存储、记录与更新。而每个区块链都遵循统一规则,该规则基于密码算法而不是信用证书,且数据更新过程都需用户批准,由此奠定区块链不需要中介与信任机构背书。

去中心化的分布式系统虽然有很多好处,但设计并运行这样的系统是很难的,因为和中心化系统相比,它运行在一个不可信任的环境中,要保持系统的一致性、完整性、安全性是非常困难的。往往中心化系统很容易做到的事,在去中心化系统中会非常困难。

那么,在去中心化的比特币系统中具体有哪些需要解决的问题呢?总结起来,主要有以下几点。

(1)去中心化系统中成千上万个节点都拥有记账和存储账本数据的权力,节点的加入和退出都是完全自由的,没有人来管控和认证,这样难免就会出现心怀不轨的破坏分子。那么怎样防止有人恶意篡改数据或者伪造账本呢?

(2)比特币系统的节点分布在全球各地,在网络中同时会产生成千上万个交易数据需要记账,各地的网络有快有慢,有时部分网络还有可能断线,要全网所有的节点保持所记录的交易账目都是一模一样的,即保持全网的一致性,也是非常困难的。

(3)双重支付防不胜防。通俗地讲,双重支付是指把一份资产使用两次,也称其为“双花”。例如地球村里有3位村民在进行商品交换,他们是二黑、翠花和小明。当前全网的区块链账本上都记录着二黑有1个比特币,他把这个币发送给了翠花,并向全网进行广播。于是,大家记下这笔交易,把二黑的比特币从他的账目记录中除去,在翠花的账目记录中增加1个比特币。现在二黑没有比特币了,但是由于网络传输不同步,二黑广播这次交易后小明并没有及时收到信息,小明的账本上仍然记录着二黑有1个比特币。于是,二黑又向小明发送这个比特币,用来交换某些物品。二黑把自己的1个比特币同时交换给2个人的行为就是双花攻击,这构成了交易欺诈。

在中本聪出现之前,密码朋克中的这么多IT精英,也是屡试屡败。但是,中本聪总结了前人的经验,并设计了一个非常巧妙的运行机制,成功解决了这些问题,使得比特币系统在无中心节点运维管理的情况下,稳定运行。

什么是双重支付

即重复支付费用,用两倍的价格购买某一件产品,或用双倍的钱款支付某一笔物流费用。

1出轨业务

这种类型是物流服务中间商,或者人们通常称之为货运代理的"出轨业务"行为,在欧美国家曾经盛行于一时,通常被法律认定为操作误差行径的这种问题尤其容易发生在物流服务即将终结的最后几个月,甚至最后几周内,货运代理还在继续以承运人的货运代理的名义接受来自托运人的订舱申请,收取托运人缴纳的货运费用,当然其中还包括货运代理应该收取的佣金,但是货运代理却没有按照合同规范把款额全部交付给承运人。对此全然不知的托运人、货主或买方直至接到来自承运人的提货单和尚未支付货运费用的催款单的时候,才大吃一惊地知道与其原来的货运代理已经中断,办公室人去楼空,不知去向。为了最终提取到已经走完物流服务全程的货物,这时候已经变成提货人的托运人不得不再次向承运人支付物流费用,从而构成双重支付。

2双重中间商承运人

第二种类型是"双重中间商承运人",这种情况往往出现于托运人把某票货物交付给某承运人,作为当事人的托运人、货主或买方在签署运输合同的时候十分简单地认定该承运人将具体实施货运运输,而事实是,其货物所托付的承运人自己并不直接搞货物运输,而是通过其货运代理把货物转交给另外一家承运人承担实施货物实际运输服务,再由其把货物转手托付给其他承运人。本来操作程序十分简单的货物托运和承运模式因为双重转手而变得复杂起来。托运人直至收到来自第二家,也就是具体实施完成货运任务的承运人的物流费用催款单的时候才知道自己上了收了物流费用却没有做具体物流服务项目的第二承运人的当。作为具体实施物流服务的第二家承运人当然依法扣住货物直至收到物流费用,如果货主逾期不缴纳物流费用,前者有权依法在规定时间内拍卖处理货物。

3经纪人信誉

物流市场中经常遇到的还有一种情况是,发货人或收货人在十分轻信的情况下把运费支付给如货运代理那样的某经纪人,如果确实有证据表明该中间商确实是承运人所信托的真正中间商,可是该中间商或经纪人发生与其信誉有关的问题,例如该中间商或经纪人没有把发货人或收货人支付的预收运费转交给托运人,那么这个风险应该由被其经纪人欺诈的承运人自己来承担,而不是已经支付预售运费的发货人或收货人,照例这是最公正的判决。通常情况下,托运人、货主或买方等客户不幸遭遇上述类型双重支付物流费用,仅仅采用协商或洽谈等近似于求乞方式是不会有什么好结果的,最好的办法就是法院审判解决,由法官断案。因为托运人、货主或者买方所称的所谓"双重支付问题"。在承运人看来是"费用没有支付问题",这个时候的承运人观点就是"一手交钱,一手交货",凡是货物运输经营人必须要支付燃料费、运输工具折旧费、船舶和车辆等等,因此托运人或货主要想在目的港提取货物,其首要条件就是把运费付清。

区块链鼻祖比特币之8:分叉带来的双花支付、51%攻击与解决办法

分叉

前面讲到了比特币通过区块链+工作量证明的独特设计来解决了时间顺序,但是不能保证在同一时刻有两个节点算出了正确的解,虽然这种可能性很低很低。这就带来了区块的分叉。

虽然说几乎同时有两个节点计算出这一数学问题的可能性微乎其微,但是仍然存在这样的可能性,所以分叉就以为着同一个区块的后面可能会跟上两个不同的区块。

规则的打破一直要到下一个区块被人解开。则会立即转向最长的区块,而那些短的区块则会被抛弃。数学问题使得区块很难被同时拆解。要连续发生多次更是困难。最终区块链会稳定下来。也就是说所有人对最后几个区块顺序达成共识。分叉意味着,譬如,若你的交易出现在较短的支链,它就会失去进入区块链的位置。一般而言,只代表他会回到未确认交易池。然后被纳入到下一个区块。

比特币网络如何解决分叉带来的双花支付

可惜,交易失去区块位置的潜在可能,给了本来定序系统防范的重复支付攻击机会。考虑下面的一个攻击者A,其首先用自己的比特币交换B节点的货物,其立即又支付给自己。然后其通过努力的制造更长的链条来让自己的支付替代掉B节点的支付,从而实现了双重支付,B节点既得不到钱,还失去了货物。

这时交易会退回到未确认池中,因为A节点已经利用参照同样的input交易取而代之。节点就会认为Bob的交易无效。因为已使用掉。

你可能会猜测A节点会预先的计算出一支区块链,然后抓住时机发布到网络。但是每个区块的数学谜题阻挡了这个可能性。如前面所诉,解开区块是猜测出一个随机数的过程。一旦得出答案,解出的哈希值就会成为指纹一样的区块识别。只要区块内容有一丁点变化,下一个区块的参考值就会完全不同。此机制的结果就是无法在区块链中置换区块。在得到前一个区块之前,下位区块无法被解开。前一个区块的指纹也是杂凑函数的引数之一。

同时,该工作量证明机制还解决了在集体投票表决时,谁是大多数的问题。如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,则该机制就被破坏了。而工作量证明机制的本质则是一CPU一票。“大多数”的决定表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。如果想要对业已出现的区块进行修改,攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上和超越诚实节点的工作量。我们将证明,设想一个较慢的攻击者试图赶上随后的区块,那么其成功概率将呈指数化递减。另一个问题是,硬件的运算速度在高速增长,而节点参与网络的程度则会有所起伏。为了解决这个问题,工作量证明的难度(theproof-of-workdifficulty)将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一个预定的平均数。如果区块生成的速度过快,那么难度就会提高。

如果有一台超级电脑,能够在区块解题中获胜?

即便是一台超级电脑,或者时几百上千台电脑也很难赢得解一个区块的胜利,因为竞争对手不是任一台电脑,而是整个比特币网络。你可以用买彩票来比拟。操作千百台电脑,如同买了千百张彩票一样。

51%攻击是指的什么

根据前面的例子,我们知道,要想有50%的概率领先其他人解题得到胜利,就需要掌握全网50%以上的算力。要连续领先他人解出区块,掌握的运算能力还需要高得多。所以区块链中的交易是受到数学竞赛所保护。恶意用户必须和整个网络较量。区块连接建立的结果,使得在支链越前方的交易越安全。恶意的用户必须在更长的时间赢过全网络,来达成重复支付,替换前面的区块链。所以,系统只有支端末尾易受到重复支付攻击。这也是为什么系统建议多等几个区块,才能确认收款成功。

个人博客:

双花理论是什么概念

在学习区块链的过程中,大家一定对会听到“双花”这个词,意思就是双重支付,或者更直白点就是一笔资金被花费了两次。这篇文章我们来简单的分析一下为什么会有双花,比特币是如何避免双花的。

在传统的交易中,因为有银行这样的中心化机构,所以是不会存在双花问题的:每一笔支付都将从你的银行账户中扣除相应的资金,所有的明细在银行都有记录。但是在比特币中,因为没有账户的概念,而是引入了UTXO即未花费交易输出。因为没有银行这样的中心化机构的保证,当发生一笔交易时就可能存在着双花的危险:比方说A有一个比特币,然后他同时构造两笔交易T1和T2来花费这1个比特币,其中一个给了B,从B那里买件衣服,一个给了C,从C那里买双鞋。如果不引入某种机制来避免这种情况,那作为数字货币的比特币将没有任何存在的意义。接下来就来分析一下比特币是如何做到防止这种“双花”攻击的。

(1)正常情况

首先我们来看看正常情况,说白了就是绝大多数时候,区块链的共识机制就能将双花消灭在萌芽状态。我们还是以上面提到的例子来做说明:

假设A构造了两笔交易T1和T2,将自己价值1btc的UTXO分别转给了B和C,妄图同时从B和C那里获得好处。然后A几乎在同一时间将构造好的这两笔交易广播至网络。

假设网络中的矿工节点先收到了交易T1,发现这笔交易的资金来源确实没有被花费过,于是将T1加入到自己的内存交易池中等待打包进区块。

大部分情况下,这个矿工节点会在不久后又收到交易T2,此时因为T2所指向的交易输入与已经加入交易池的T1相同,于是矿工节点会拒绝处理该交易。网络中其他的矿工节点都类似,因此A试图双花的尝试胎死腹中。

(2)分叉情况

上面说的是正常的情况,但是也有非正常的情况要考虑:假设矿工节点M1和M2几乎在同一时间挖出了区块,并且很不幸M1挖到区块时只收到了交易T1,而M2挖到的区块时只收到了交易T2,这样交易T1和T2被分别打包进两个区块。因为这两个区块是差不多同一时间被挖出,于是造成了区块链的分叉:

网络中某些节点(可能是离M1近的)先收到了M1打包的区块BLK1,于是用该区块延长自己的区块链,而另外一些节点(邻近M2的)则先收到M2打包的区块BLK2,用该区块延长自己的区块链,于是整个区块链网络

◆比特◆相关内容推荐

货币汇率换算