摘要
一种完全的点对点电子货币应当允许在线支付从一方直接发送到另一方,而不需要通过一个金融机构。数字签名提供了部分解决方案,但如果仍需一个可信任的第三方来防止双重支付,那就失去了电子货币的主要优点。我们提出一种使用点对点网络解决双重支付问题的方案。该网络通过将交易哈希进一条持续增长的基于哈希的工作量证明链来给交易打上时间戳,形成一条除非重做工作量证明否则不能更改的记录。最长的链不仅是被见证事件序列的证据,而且也是它本身是由最大CPU算力池产生的证据。只要多数的CPU算力被不打算联合攻击网络的节点控制,这些节点就将生成最长的链并超过攻击者。这种网络本身只需极简的架构。信息将被尽力广播,节点可以随时离开和重新加入网络,只需接受最长的工作量证明链作为它们离开时发生事件的证据。
批注(是什么/为什么/如何)
-
是什么:核心是提出无第三方介入的点对点电子货币方案——以哈希加密、工作量证明(PoW)构建不可篡改的交易时间戳链,以“最长链”作为交易有效性核心依据,实现去信任的价值转移。
-
为什么:
-
传统电子支付依赖金融机构(信任第三方),存在交易不可撤销、仲裁成本高、小额交易不划算等固有缺陷;
-
单纯数字签名仅能验证所有权,无法解决“双重支付”(同一笔货币重复使用)痛点,保留第三方则丧失电子货币去中心化核心优势;
-
需构建“去信任”机制,让交易有效性依赖全网算力共识,而非单一机构。
- 如何:
-
交易通过哈希算法融入区块链,每个区块包含前一区块哈希,形成时间戳链条;
-
工作量证明要求区块哈希满足特定条件(如以多个0比特开头),确保修改区块需重做海量计算;
-
以“最长链”为共识结果,诚实节点控制多数算力时,攻击者无法追平最长链;
-
网络架构极简:信息全网广播,节点自由进出,回归时以最长链同步历史交易。
1. 简介
互联网贸易已经变得几乎完全依赖金融机构作为可信任的第三方来处理电子支付。尽管对于大部分交易这种系统运行得足够好,但仍需忍受基于信任模型这个固有缺点。由于金融机构不可避免的需要仲裁纠纷,完全不可撤销的交易实际是做不到的。仲裁成本增加了交易成本,限制了最小实际交易额度从而杜绝了日常小额交易的可能性,而且由于不支持不可撤销支付,对不可撤销服务进行支付将需要更大的成本。由于存在交易被撤销的可能性,对于信任的需求将更广泛。商家必须警惕他们的客户,麻烦他们提供更多他本不需要的信息。一定比例的欺诈被认为是不可避免的。虽可通过当面使用实物货币来避免这些成本及支付的不确定性,但不存在一个无可信任方而能在通信通道上进行支付的机制。
我们需要的是一个基于密码学原理而不是信任的电子支付系统,该系统允许任何有交易意愿的双方能直接交易而不需要一个可信任的第三方。交易在计算上的不可撤销将保护卖家不被欺诈,用来保护买家的程序化合约机制也应该较容易实现。在这篇论文中,我们提出一种使用点对点分布式时间戳服务器为基于时间的交易序列生成计算上的证据来解决双重支付问题的方案。只要诚实节点集体控制的CPU算力大于任何一个合作攻击节点群的CPU算力,这个系统就是安全的。
批注(是什么/为什么/如何)
-
是什么:先批判传统电子支付“信任第三方”模型的缺陷,再明确核心诉求——构建基于密码学的去信任、点对点电子支付系统,核心安全前提是“诚实节点算力占优”。
-
为什么:
-
传统模型的本质问题是“信任依赖”:金融机构作为中介需仲裁纠纷,导致交易不可撤销、成本高、小额交易不成立、欺诈风险不可避免;
-
实物货币可当面规避信任问题,但无法适配线上场景,线上缺乏无中介支付机制;
-
市场需要“计算上不可篡改”的交易模式:用密码学替代信任,既保护卖家(防欺诈),也为买家保护(可编程合约)预留空间。
- 如何:
-
核心思路:通过点对点网络构建分布式时间戳服务器,为交易序列生成不可篡改的计算证据,解决双重支付;
-
安全逻辑:不追求绝对无攻击,而是通过“算力门槛”提高攻击成本——诚实节点算力总和超过攻击节点群,系统即安全。
2. 交易
我们将一枚电子货币定义为一条数字签名链。每个拥有者都通过将上一次交易和下一个拥有者的公钥的哈希值的数字签名添加到此货币末尾的方式将这枚货币转移给下一个拥有者。收款人可以通过验证数字签名来证实其为该链的所有者。
这里的问题是收款人不能证实某个拥有者没有对此货币进行双重支付。通常的做法是引入一个可信任的中央机构或铸币厂来检查每笔交易是否存在双重支付。每笔交易之后,都需要将这枚货币退回铸币厂以换取发行一枚新的货币,只有由铸币厂直接发行的货币才能被确认没有被双重支付。这个方案的问题在于整个货币系统的命运都依赖于运营铸币厂的公司,每笔交易都需要经过它们,就像银行一样。
我们需要一种能让收款人知道上一个货币拥有者没有对任何更早的交易签名的方法。对我们来说,最早的那次交易是唯一有效的,所以我们不需要关心本次交易后面的双重支付尝试。唯一能确认一笔交易不存在的方法是知晓所有之前的交易。在铸币厂模型中,铸币厂知晓所有交易并能确定哪笔交易最先到达。在不引入一个可信任方的前提下要达到这个目的,所有交易就必须公开发布[1],而且需要一个能让所有参与者对交易收到顺序的单一历史达成共识的系统。收款人在每笔交易时,都需要多数节点认同此交易是最先收到的证据。
批注(是什么/为什么/如何)
-
是什么:明确比特币核心定义(数字签名链),点出传统电子货币“双重支付”痛点及中央铸币厂方案的缺陷,提出“交易公开+全网共识交易顺序”的去信任解决方案。
-
为什么:
-
数字签名链能解决“所有权验证”,但无法解决“双重支付”——收款人无法知晓该货币是否已被原所有者用于更早交易;
-
中央铸币厂方案虽能防双重支付,但存在“单点依赖”风险:货币系统命运绑定铸币厂,效率低且易被控制;
-
去信任场景下,“交易顺序”是核心:只有确定某笔交易是“最早有效交易”,才能杜绝双重支付,需全网对交易历史达成共识。
- 如何:
-
货币本质:每枚比特币是“上一交易+下一所有者公钥哈希+当前所有者签名”构成的链式结构,签名由私钥生成,确保所有权转移合法性;
-
双重支付解决方案:
-
交易全网公开:所有节点获取全部交易历史,避免信息不对称;
-
共识机制:设计系统让所有参与者对交易接收顺序达成统一历史记录,收款人通过“多数节点认同”确认交易“最早有效”。
3. 时间戳服务器
我们提出的方案从时间戳服务器开始。时间戳服务器计算包含多个需要被打时间戳的数据项的区块的哈希值并广泛地发布这个哈希值,就像在报纸或新闻组帖子里[2-5]。时间戳能证明要得到这个哈希值,显然这些数据当时一定是存在的。每个时间戳的哈希值都纳入了上一个时间戳,形成一条链,后面的时间戳进一步增强前一个时间戳。
批注(是什么/为什么/如何)
-
是什么:时间戳服务器是比特币交易历史不可篡改的基础组件——将多个交易打包成区块,计算区块哈希并全网发布,区块哈希包含前一区块哈希,形成链式结构,以哈希加密实现“交易存在性”和“历史连续性”证明。
-
为什么:
-
需解决“交易时间顺序可验证”问题:证明某笔交易在特定时间点已存在,为共识交易顺序提供依据;
-
哈希加密特性适配需求:哈希值是数据的唯一“数字指纹”,数据修改则哈希值巨变;前一区块哈希纳入当前区块,使历史形成“牵一发而动全身”的链条,确保不可篡改。
- 如何:
-
打包交易:将多个待验证交易整合为一个“区块”;
-
生成哈希:计算区块哈希(如SHA-256),哈希值包含区块内交易数据和上一区块哈希;
-
全网发布:将区块哈希广泛广播,所有节点均可获取;
-
链式增强:新区块哈希基于前一区块,形成持续增长的链,越靠后的区块越能强化前面区块的时间戳有效性。
4. 工作量证明
为了实现一个基于点对点的时间戳服务器,我们需要使用一个类似Adam Back提出的哈希货币[6]的工作量证明系统,而不是报纸或新闻组帖子那样。工作量证明采取搜索一个数,使得被哈希时(如使用SHA-256)得到的哈希值以数个0比特开始。平均所需工作量将随所需0比特呈指数级增长而验证却只需执行一次哈希。
对于我们的时间戳网络。我们通过在区块中加入一个随机数,直到使得区块的哈希值满足所需0比特的数被找到的方式实现工作量证明。一旦消耗了CPU算力使区块满足了工作量证明,那么除非重做这个工作否则就无法更改区块。由于后面的区块是链接在这个区块后面的,改变这个区块将需要重做所有后面的区块的工作量证明。
工作量证明同时解决了在多数决定中确定投票方式的问题。如果多数是按IP地址投票来决定,那么它将可能被能分配大量IP地址的人破坏。工作量证明本质上是按CPU投票。最长的链代表了多数决定,因为有最大的计算工作量证明的算力投入到这条链上。如果多数的CPU算力被诚实节点控制,诚实的链就会增长得最快并超过其他的竞争链。要修改过去的某区块,攻击者必须重做这个区块以及其后的所有区块的工作量证明,从而赶上并超过诚实节点的工作。我们后面会证明随着后续的区块被添加一个更慢的攻击者赶上诚实节点的概率将呈指数级递减。
为了抵消硬件运算速度的增加及平衡不同时期运行节点的利益,工作量证明的难度将由移动平均数法来确定每小时生成区块的平均数。如果区块生成得过快,那么生成的难度就会增加。
批注(是什么/为什么/如何)
-
是什么:工作量证明(PoW)是比特币网络的“算力共识机制”——通过要求节点消耗CPU算力寻找满足特定哈希条件的随机数,实现区块生成的“成本门槛”,以“最长链”为全网共识,解决投票公平性和历史不可篡改性问题,难度动态调整以稳定区块生成速度。
-
为什么:
-
点对点网络需公平投票机制:按IP投票易被多IP伪造攻击,需“难以伪造且成本可控”的投票方式;
-
时间戳链需“防篡改成本”:仅靠哈希链式结构不够,需增加修改历史的难度;
-
硬件算力提升会导致区块生成过快,需动态调整难度以平衡节点利益。
- 如何:
- 工作量证明实现:
-
规则:区块需包含随机数(Nonce),节点不断尝试随机数,直到区块哈希以指定数量0比特开头;
-
特性:寻找随机数的工作量随0比特数量指数增长,验证仅需一次哈希计算;
- 共识与防篡改:
-
投票逻辑:PoW本质是“CPU算力投票”,最长链代表投入算力最多,成为合法历史;
-
防篡改:修改某区块需重做该区块及后续所有区块的PoW,攻击者需超全网诚实节点算力,且追赶概率随后续区块增加指数级下降;
- 难度调整:通过移动平均数法监控区块生成速度,过快则提高难度(增加0比特数量),反之降低。
5. 网络
运行网络的步骤如下:
新交易向所有节点广播。
每个节点将新交易收集到一个区块。
每个节点为它的区块寻找工作量证明。
当一个节点找到了工作量证明,就向所有节点广播这个区块。
节点只有在区块内所有交易都是有效的且之前没有被支付的情况下接收这个区块。
节点通过使用这个区块的哈希值作为上一个哈希值,在链中创建下一个区块的方式表示对这个区块的接受。
节点总是认为最长的链为正确的并持续致力于延长它。如果两个节点同时广播了不同的下一个区块,有些节点可能先收到其中一个而其他节点先收到另一个。这种情况,节点基于他们收到的第一个区块工作,但是也保存另一个分支以防它变为更长的链。当下一个工作量证明被找到后僵局就会被打破,从而其中一个分支变得更长;在另一个分支上工作的节点将切换到更长的链上来。
新交易的广播不必到达所有的节点。只要到达一些节点,不久就会进入到一个区块。区块广播也是能容忍消息丢失的。如果一个节点没有收到某个区块,它将在收到下一个区块时发现它丢失了一个区块然后去请求这个区块。
批注(是什么/为什么/如何)
-
是什么:明确比特币点对点网络的运行流程、共识冲突解决机制和容错特性——以“广播-打包-PoW-验证-上链”为核心流程,以“最长链优先”解决分叉冲突,支持交易/区块广播部分丢失,确保网络鲁棒性。
-
为什么:
-
点对点网络无中心协调机构,需统一运行规则确保节点自发协作;
-
多节点同时生成有效区块(“分叉”)是必然,需设计冲突解决机制避免网络分裂;
-
全网节点分布广泛,消息广播不可能100%覆盖,需具备容错能力。
- 如何:
- 核心运行流程(6步闭环):
-
交易广播:用户发起交易后向全网节点广播;
-
区块打包:各节点独立收集新交易整合为待生成区块;
-
PoW竞争:所有节点同时为自己的区块寻找随机数(算力竞争);
-
区块广播:完成PoW的节点向全网广播该区块;
-
区块验证:其他节点验证区块内交易有效性(无双重支付、签名合法),通过则接收;
-
链扩展:接收区块的节点将其哈希作为下一个区块的“上一哈希”,继续打包新交易;
- 分叉冲突解决:
-
临时分叉:两节点同时广播有效区块,部分节点接收A、部分接收B,形成两条分支;
-
解决逻辑:节点保存两条分支,在先收到的分支上工作;某一分支先产生下一个有效区块(更长),所有节点切换到最长链,另一分支废弃(“孤块”);
- 容错机制:
-
交易广播容错:交易无需到达所有节点,部分节点接收即可被打包;
-
区块丢失容错:节点未收到某区块时,通过后续区块的“上一哈希”发现缺失,主动请求该区块。
6. 激励
我们约定,区块中的第一笔交易是区块创建者开创一枚属于他的新货币的特殊的交易。这就增加了对支持网络的节点的激励,并提供了一种初始分发货币到流通领域的方法,因为这里没有中央机构来发行货币。新货币按固定量稳定地增加就像金矿矿工消耗资源并增加黄金到流通领域一样。对我们而言,消耗的是CPU时间和电力。
激励也可以由交易费充当。如果交易的输出值小于其输入值,差价就作为交易费被加到包含此交易的区块的激励中。一旦预定量的货币进入了流通领域,激励将变为只含有交易费,这样可以完全避免通货膨胀。
激励会有助于鼓励节点保持诚实。如果一个贪心的攻击者有能力聚集比所有诚实节点更多的CPU算力,他将面临是以骗回已付款的方式欺诈别人还是使用这些算力生成新货币的抉择。他将发现遵守规则比破坏系统和他自己财产的有效性更有利,因为这些规则准许他获得比所有其他人都多的新货币。
批注(是什么/为什么/如何)
-
是什么:设计比特币网络的激励机制——核心是“区块奖励(新币发行)+交易费”,既实现货币初始分发,又通过经济利益引导节点诚实挖矿,最终以交易费替代区块奖励,避免通货膨胀。
-
为什么:
-
节点参与PoW需消耗CPU算力和电力(沉没成本),若无激励,节点无动力维护网络;
-
无中央机构发行货币,需通过区块奖励实现货币初始分发,且固定发行量可避免滥发;
-
需通过激励引导节点诚实行为:恶意节点若算力占优,经济上“挖矿获利”比“攻击网络”更划算。
- 如何:
- 激励构成:
-
区块奖励:成功生成有效区块的节点,可在区块第一笔交易中创建新货币(“挖矿奖励”),按固定规则发行(如每四年减半);
-
交易费:用户发起交易时,输入值>输出值的差价作为交易费,由打包该交易的节点获得;
-
激励演进:初始以区块奖励为主,货币发行量达预定上限后,仅保留交易费激励,避免通货膨胀;
-
诚实激励逻辑:
-
攻击代价:攻击网络会导致比特币信任崩塌,攻击者持有的比特币价值归零;
-
诚实收益:诚实挖矿可获得区块奖励和交易费,算力占优时获利远超其他节点;
-
经济理性下,攻击者会选择遵守规则。
7. 回收磁盘空间
一旦某个货币的最新交易已经被足够多的区块覆盖,这之前的支付交易就可以被丢弃以节省磁盘空间。为便于此而又不破坏区块的哈希值,交易将被哈希进默克尔树[7][2][5],只有根节点被纳入到区块的哈希值。老的区块可通过剪除树枝的方式被压缩。树枝内部的哈希不需要被保存。
每个不包含交易的区块头大约是80 bytes。如果每10分钟生成一个区块,每年生成80 bytes 624*365=4.2 MB,2008年在售的典型计算机有2GB内存,并且摩尔定律预测目前每年内存增加1.2 GB,所以就算区块头一定要存在内存里,存储也不是问题。
批注(是什么/为什么/如何)
-
是什么:提出区块存储优化方案——利用默克尔树(Merkle Tree)结构,将交易数据哈希聚合为根节点,区块头仅存储根节点哈希,老区块可删除历史交易数据(剪除树枝),仅保留区块头,实现磁盘空间回收。
-
为什么:
-
比特币交易持续增长,完整存储所有历史交易会导致节点磁盘空间占用过大,抬高参与门槛,影响去中心化;
-
区块哈希的核心是验证交易有效性和链的连续性,无需存储完整交易数据,只需保留交易存在的哈希路径;
-
需平衡“空间优化”和“哈希有效性”:删除历史交易不能破坏区块链的哈希完整性。
- 如何:
- 默克尔树应用:
-
交易哈希聚合:将区块内所有交易分别哈希,相邻哈希两两配对哈希,层层向上聚合形成“默克尔根”;
-
区块头存储:区块头仅存储默克尔根、上一区块哈希、随机数等核心信息(80字节),不存储完整交易数据;
-
空间回收:某笔交易被后续足够多区块确认后,可删除该交易具体数据(剪除树枝),仅保留区块头和默克尔根;
-
存储可行性:每10分钟生成一个区块,每年区块头仅占用4.2MB,符合硬件存储发展(摩尔定律),降低节点参与门槛。
8. 简化的支付验证
不运行一个完整的网络节点也是可以进行支付验证的。用户只需拥有一个最长工作量证明链的区块头副本,他可以通过向其他网络节点查询以确认他拥有了最长的链,并获取链接交易到给交易打时间戳区块的默克尔分支。虽然他自己不能核实这个交易,但如果交易已经链接到链中的某个位置,就说明一个网络节点已经接受了此交易,而其后追加的区块进一步确认网络已经接受了它。
同样地,只要诚实节点控制着网络,这种简化验证就是可靠的;如果网络被攻击者控制,简化验证会变得比较脆弱。虽然网络节点可以验证他们自己的交易,但只要攻击者持续控制网络,那么这种简化的方法就可能被攻击者的伪造交易欺骗。一种对策是接受其他网络节点发现一个无效区块时发出的警告,提醒用户软件下载整个区块和被警告的交易来检查一致性。为了更加独立的安全性以及更快的支付确认,收款频繁的公司可能仍需运行他们自己的节点。
批注(是什么/为什么/如何)
-
是什么:提出“简化支付验证(SPV)”机制——普通用户无需运行完整节点(存储全量区块数据),仅通过区块头副本和默克尔分支即可验证交易有效性,降低用户参与门槛,同时明确其安全性边界和优化方案。
-
为什么:
-
完整节点需存储全量区块数据,硬件门槛过高,不利于网络普及;
-
多数用户仅需验证“自己的交易是否有效”,无需参与区块生成和全网共识,需轻量化验证方案;
-
需平衡“轻量化”和“安全性”:SPV依赖其他节点的验证结果,需明确适用场景和风险应对方式。
- 如何:
- SPV验证流程:
-
用户存储:仅保存最长链的区块头副本;
-
链有效性确认:向网络节点查询,确认自己的区块头副本是当前最长链;
-
交易验证:向节点请求目标交易的“默克尔分支”(交易哈希到默克尔根的哈希路径),验证分支与区块头默克尔根一致,确认交易已打包;
-
有效性背书:交易所在区块后续追加的区块越多,网络认可度越高;
- 安全性边界:
-
安全前提:诚实节点控制网络时,SPV可靠;
-
风险场景:网络被攻击者控制时,可能被伪造交易欺骗;
- 风险对策:
-
警告机制:接收其他节点“无效区块警告”,下载完整区块和交易数据手动验证;
-
特殊场景建议:收款频繁的商家建议运行完整节点,保障安全性和支付确认速度。