双花是什么?
双重支付
双重支付又名“双花”,也就是双重花费的意思。
如果Alice钱包里面有10美元,她可以去购买等值的物品。如果Alice去商店后,发现台灯和桌子都是10美元,那么她只能买其中一样东西。
而我们所说的双花问题,正好与之相反,同样的10美元,你可以购买两样东西。
不过,双花问题在我们生活中其实不会发生,因为你在购买东西的同时,也同时进行了支付(也就是说,这是个中心化系统)。换句话说,如果Alice花费10美元购买台灯,那么这10美元就不属于她了。
但是在分布式系统中,问题会有些不同。
对于分布式系统来说,交易记录会广播给网络中所有节点(也就是说,Alice会在网络广播交易信息,从而网络中的每个节点都会知道“Alice已经花费10美元来购买台灯”)。
每个节点都会记录这个交易信息,然后将信息传输给网络中的下个节点,并且这个过程会持续直到网络中的所有节点已经记录了这条信息“Alice已经使用了10美元来购买台灯”。
但是,在信息通过庞大网络进行传输的时候,以下问题也会出现:
• 当信息在网络中传播的时候,路径不同,并且在不同时间到达不同节点。
• 由于节点会失效,有些节点也许不能将信息传递给下个节点,然后这个消息就会丢失。
因此,在某个时间会发生这种情况,某些节点知道Alice已经花费了10美元购买台灯,但是某些节点却不知道这一消息。
对于那些不知道Alice花费10美元购买台灯的节点来说,这条信息还没有传达给他们;他们仍然会认为,Alice还有闲置的10美元可以购买任何其他东西。
因此,对于Alice来说,很可能她会向网络中传播另一个消息“Alice已经花费了10美元来购买桌子”,并且如果这个信息在“Alice花费了10美元来购买台灯”这个消息之前达到节点,那么这个节点就会认为Alice已经花了10美元来买桌子。
这就有可能造成这种情况,Alice能够花费10美元买桌子,并且花费同样的10美元来买台灯;这是违背常理的,因为Alice只有10美元,并不是20美元。
这就是双花问题。