在多台PC同时用一个钱包(wallet.dat)与他人进行转账交易会发生冲突么?冲突解决的原则是什么?

2011-05-26 17:43:40 +08:00
 lsd2004
我们都知道,备份wallet.dat就保存了自己的钱包;那么,显然可以在多台PC上同时使用一个钱包。

问题是,如果在大致相同的时间内,都发生了交易,会冲突么?

打个过分一点的比喻,我只有1BTC,我在A机转帐给路人甲1BTC,同时在B机转帐给路人乙1BTC,这样显然是不符合规则的。

网络会认可哪一个帐单,或者均不认可呢?
3331 次点击
所在节点    Bitcoin
3 条回复
chenshaoju
2011-05-26 17:55:47 +08:00
用户A用哈希为123的1BTC交易给了用户B。

用户C也用哈希为123的1BTC交易给了用户D。

用户A会将这个哈希为123的1BTC交易给用户B的过程广播到整个Bitcoin网络。

用户C也会执行这个操作。

假设有10个节点,6个节点接受了A的请求,剩下的4个节点接受了B的请求。

当这六个节点和四个节点会产生碰撞,6个节点的内容会覆盖掉4个节点的。

也就是说,大部分的节点承认A的请求,而拒绝了B。

当然,这得看A计算机的网络速度。如果网很慢,Block的广播速度不够快,一样会被B盖掉。
chenshaoju
2011-05-26 17:56:59 +08:00
修正:

假设有10个节点,6个节点接受了A的请求,剩下的4个节点接受了C的请求。

当这六个节点和四个节点会产生碰撞,6个节点的内容会覆盖掉4个节点的。

也就是说,大部分的节点承认A的请求,而拒绝了C。

当然,这得看A计算机的网络速度。如果网很慢,Block的广播速度不够快,一样会被C盖掉。
zhuang
2011-05-26 20:08:04 +08:00
@chenshaoju
事实上btc 只存在于交易链之中,包括生成50 个也是以一笔交易(transaction)的形式存在的,不存在说某个btc 就有一个hash 值,一个账户有多少btc 是通过历史交易“算”出来的。
另外用户这个概念严格说也不存在,存在的是地址,或者说账户,用户可以看作很多地址的集合。两个用户不可能拥有同一笔btc。
@lsd2004
你说的这个问题叫做double spending。生成一个有效的block 很慢(一个block 当中包含若干笔交易),但是广播一笔交易很快。成功做出的block 是证实某一笔交易发生的唯一证据。
目前版本的实现是,最长链胜出,即先被写入block 那笔交易会使没有进入block 的那笔交易作废,永远停留在0 confirmation。事实上block 广播速度非常快,基本一个block 生成就会迅速被绝大多数节点确认,而否决这条链的条件是与之冲突的block 得到超过6 次确认。
目前btc 网络的计算能力是30 PB hash/s 应对目前的交易量平均的block 生成时间是5min 以内。想要完成double spending 可能需要超过50% 的计算能力,或者超过50% 的节点控制。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/13562

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX