1. A账户曾在一笔编号为m的交易中收到25个比特币;
2. A支出20个比特币给B;支出5个比特币给回自己(如下图所示,“输入”即指明资金来源的那笔交易,“输出”表示本笔交易中资金将去往何方)。这样就实现了每一笔之前获得的资金都在下一笔交易中尽数消耗,不用记录结余。
上图中交易n具体的确认过程是,在比特币区块链上运行着某一个客户端节点的Alice向其他节点广播这笔交易信息并签名,所有在线听到这个交易信息的节点都有权对交易有效性进行验证和记录——验证Alice的签名、搜索确认交易m真实存在并且在这之前交易m没有被其他交易引用过;平均每个10分钟内通过了有效性确认的交易信息,会被记账节点打包记录进一个数据块(也就是区块),区块成功链入区块链中则代表着这个区块上记录的所有交易真正发生。
比特币区块链通过给每个区块加盖时间戳,准确记录区块生成先后时间——也就是所记录交易发生的先后时间,以此来避免重复支付。若打包交易信息的过程中先后接收到两个矛盾的交易广播(比如Alice在一笔交易广播中,称将交易m中收入的25个币中的20个转给Bob,另5个转给自己;在另一个广播中将同样来自交易m中的25个币转给了Mary),在记账的节点通常会默认选择记录先听到的那一笔。
但麻烦的是,网络通讯会有延迟性,处于不同位置的节点听到两个广播信息的顺序可能并不一样。
举例来讲,A要花20个比特币从B处买一个电子设备,便需要发出“A从之前第m笔交易中获得25个比特币,现将20个比特币支付给B,5个比特币支付给A”的广播指令,但可能A居心不良,稍后很快又发出了另一个广播,说这25个比特币要全部转移到M账户(可能是A自己的另一个账户)。有可能部分节点先听到了正确的向B支付的广播,于是记录下这一笔,后来再听到的另外一笔广播则因无法通过重复支付验证而被忽略,而部分节点则先听到并且记录了另一笔虚假信息。
那么有可能出现的一种情况是,首先记录了正确信息(A转给B 20个币)的区块并入区块链,B得知后以为交易生效便将电子设备交付给了A。
但是下一个区块记录者正好是一个先听到了虚假信息的节点,因而认为自己先听到的转给M账户25个币的交易才是正确的,前一个区块中记录的转给B 20个币的交易不成立,于是选择不延续上一个区块,而是把自己的新区块链接到上上一个区块后面,而之后的区块记录者也恰好认同新区块并选择在新区块链后延续。那么,再之后的区块记录者则会看到两条分叉的区块链,一条是记录着那笔真实交易的较短的区块链,一条是记录着虚假信息的较长区块链,在对交易信息的判断没有特别坚持的情况下,新的记录者往往会选择在更长的区块链上延续——更长的区块链往往代表了更完整的交易记录,于是,记录正确交易的那个区块则被抛弃,成为失效的孤块,那么B则不得不承担人财两空的损失。