怎样防止一个比特币被使用两次?比特币区块链作为一个去中心化的点对点电子现金系统,主要依靠UTXO和时间戳来应对"双花"问题。"双花"是指同一笔款项被重复支付了两次,也就是双重支付的情况。
比特币区块链作为一个去中心化的点对点电子现金系统,主要依靠UTXO (UnspentTransaction Output)和时间戳来应对"双花"的问题。 当某一笔比特币交易被创建一签名一广播到区块链网络之中后,每一个节点(比特币交易参与者)会对这笔交易进行验证,看交易的输出是否存在于UTX0 (Unspent Transaction Output ),即"未花费过的交易输出"中。
如果A拥有的1BTC被证实确实是"未花费过的交易输出",他要是将这1BTC同时转账给Bl、B2两人,挖矿节点会选择性地记录一笔交易,或许是最先收到的,或许是手续费更高的。
如果这两笔交易是先后被挖矿节点接收到的,那依据时间戳,先被接收到的交易会被验证成功,而后被接收到的交易则会因交易输入己经不存在于UTX0而验证失败。
如果两个挖矿节点分别同时记录了 "From A To B1"和"From A To B2"这两笔交易,并且这两笔交易被分别证明是合法的,此时这两个挖矿节点会将各自挖到的新区块广播到全网。
这时链就会分叉。其他参与挖矿的节点会随机选择一条链继续挖矿,哪条链先产生了新区块,哪条链就会成为当前最长的链,记录在最长链上的交易最终会被认证是成功的,而记录在另一条链上的交易则不会被认证。
一笔交易创建后若未被记录进区块中,为0确认;若被记录进区块中,则为1确认。为防止恶意制造最长链来进行"双花",建议等待6个新区块产生,也就是"6确认"之后再完成交易。