双重支付是什么?区块链最核心问题
数字货币和现实货币有一个很大的区别就是现实货币是看得见摸得着的,而数字货币没有实体是可以被复制的,这就带来了一个很让人担心的问题就是同一笔钱会不会被花两次,这是整个系统能不能成立的关键,如果控制不好所有交易都会变得不可信,价值也就站不住脚。

双重支付到底是什么
可以把它理解成一份钱被复制使用,比如一笔资产同时转给两个人,在现实世界里这种事做不到,因为钱一旦交出去所有权就变了,但在虚拟世界数据可以复制,这就带来了风险。
同一份数字资产被重复花掉,这会直接影响系统里的数量、信任,还有交易本身的可靠性。
为什么这个问题这么关键
货币本质是靠信任撑起来的,如果收钱的人不能确定这笔钱是不是真的属于自己,交易就会变得很尴尬。
① 收款方不敢立刻放货,因为不知道交易会不会被撤回。
② 交易确认时间被拉长,效率变低。
③ 用户开始怀疑资产是不是可以被复制。
④ 整个系统的价值感会被削弱。
一旦这种不确定性变多,使用的人自然会减少,网络也就很难发展起来。
传统金融是怎么避免的
银行这套体系其实很好理解,就是一个中心在记账。
你刷卡的时候,银行会做几件事:
1、检查账户余额够不够。
2、确认这笔交易有效。
3、立刻更新账户数据。
所有记录都在银行手里,同一笔钱不可能被重复用。
加密货币为什么更难处理
区块链没有一个总账本管理员,而是很多节点一起维护数据。
• 数据是公开的
• 资产是数字形式
• 理论上可以被复制
如果没有额外机制,一个人完全可以在网络确认前,把同一笔钱发给多个地址。
中本聪是怎么解决的
区块链这个设计
核心思路就是做一个公开账本,把所有交易打包进区块,再按照顺序连接起来,每一笔交易都要经过全网确认。
一旦写进区块链,想改就非常困难。
为什么这个方案有效
重点不在不能作恶,而是作恶成本极高。
1、想改交易,需要控制大量算力。
2、需要重做历史区块。
3、成本远大于收益。
这样一来大多数人就没有动力去攻击系统。
常见的双重支付攻击方式
51%攻击
当某个组织控制了超过一半的算力或质押资产,就可以影响区块的生成顺序。
能做到的事情包括:
①重写最近的区块
②撤销已经发生的交易
③实现重复花费
这种情况更容易出现在参与人数少、算力分散不够的网络里。
交易竞速攻击
利用的是时间差,攻击方式大概是:
①同时发出两笔冲突交易。
②一笔给商户,一笔给自己。
③争取让对自己有利的交易先被确认。
如果商户没有等确认就放货,就可能吃亏。
芬尼攻击
这个更偏内部操作,流程是:
1、矿工提前挖出一个区块,里面是把钱转回自己。
2、还没广播这个区块。
3、先用同一笔钱去支付。
4、等商户接受后,再把区块放出来。
如果网络接受这个区块,商户那笔交易就会失效。
RBF替换交易
也叫手续费替换,操作方式是:
1、先发一笔低手续费交易给商户。
2、再发一笔高手续费交易,把钱转回自己。
3、矿工优先打包手续费高的那一笔。
如果商户没等确认,就可能被替换掉。
真实发生过的案例
比特币黄金
这个网络曾被控制算力,攻击者重写区块历史,把已经完成的交易推翻,相当于把钱拿回去再花一次,损失不小也暴露出算力不够分散的风险。
以太坊经典
这个链多次被攻击,原因很类似:
1、网络规模不够大。
2、算力集中度较高。
攻击者通过链重组让已确认交易失效,交易所也提高了确认要求。
比特币早期分叉事件
一次软件问题导致链分成两条。
部分商户在还没统一共识前就接受交易,后面链被回滚,那些交易被撤销,相当于发生了双重支付。
这个案例更像是系统层面的问题,而不是人为攻击。
区块链是怎么防住这些问题的
工作量证明PoW
核心就是算力换安全,机制大致是:
• 矿工要算题才能出块
• 每个区块都连接前一个
• 修改历史需要重算全部
想攻击就得付出巨大的计算成本。
交易确认次数越多,被推翻的难度就越大。
权益证明PoS
换了一种思路,用钱做担保。
• 验证者要先质押资产。
• 做正确的事可以获得奖励。
• 作恶会被罚没资产。
这样一来攻击等于自己赔钱。
其他辅助机制
交易唯一标识(Nonce)
每一笔交易都有唯一编号,保证不会被重复处理。
时间顺序
区块按顺序排列,保证交易有先后关系。
多次确认
交易不是一写入就算完成,通常要等多个区块叠加,安全性才更高。
现在的状态
双重支付这个问题并没有消失,只是被压到了很难发生的程度,一些风险还在。
1、小型链更容易被攻击。
2、不等确认就收款风险较高。
3、跨链、合约也可能成为漏洞点。
系统本身已经做了很多防护,但使用方式也很重要,比如是否等待确认、选择什么网络,这些都会影响安全性。






