※ 引述《kugwa (kugwa)》之铭言:
: ※ 引述《grapherd (NULL)》之铭言:
: : 这个问题已经回应过了,不会发生这样的问题。
: : 这种超久的 valid transaction V.S. 新出的爆干 weight transaction
: : 因为超久以前的 valid transaction 已经改变整个帐本的状况
: : (地址总额,对方地址总额等)
: : 因此根本不会有收到货然后又被盖掉的问题。
: 怎么不会有呢
: 就是会有这样的问题啊
: 比特币的短链追上长链造成blockchain reorganization
: 以及我们一直在讨论的IOTA攻击手段(B的累积权重超越A的累积权重)
: 都是这个状况呀(虽然说落后很多的情况下追上通常都是恶意去追的)
: 你所谓的“整个帐本的状况”
: 本来就是根据blockchain或Tangle的样子在解读的
: blockchain的情况中 帐本的状况就是最长链中所有交易一起套用的样子
: blockchain reorganization时 因为长链换了一条 帐本会整个被大改动
: 而Tangle的情况中 A的累积权重比B的还大时 帐本只采计A而忽略B
: 但是当B的累积权重超越A时 帐本就会改为采计B而忽略A
: 这种帐本改动一发生 你看到的各种总额就会跟着发生变动 很严重的
: 总之 根本没有所谓的“某个交易生效一段时间之后就绝对不会被撤销”的情况
: (这应该叫freezed或是finalized)
: 只要另一方算力够强 就有办法撤销任意的交易
: (比特币拒收落后超过12个高度的block 这个情形先不讨论)
: finalize之所以难以实现
: 就是因为很多种方式(例如你规定一个交易t时间后就坚决不再撤销)
: 最终都会造成全网失去共识
: 就像我前一篇说的那种案例
几点说明一下:
1. IOTA 为“固定”数值的区块链 (区块链不正确,反正就先当区块链吧)
也就是说先不管整体网络如何,一个符合 valid transaction 规则的 double spending transaction,
制作上变得有点困难。
举例而言,整个 IOTA 网络假设只有 1i,并且有三个 address A (1i), B(0i), C(0i), SUM(1i)
今天正常的交易 A 给 B 1i 的话,会变成:
A(0i), B(1i), C(0i), SUM(1i)
预想中发起 double spending 的话 (A->B, A->C),会变成:
A(0i), B(1i), C(1i), SUM(2i)
整体帐本的总数就不对了,这时候没被共识到的那个交易,其他节点在收到的时候,就会列为拒绝户而不使用它。
2. 交易共识改写
有了固定数值的概念,我们再来看交易共识改写的状况。
2.1 正常节点舍弃 double spending transaction:
我之所前面说到,第一个交易已经成立后,第二个 double spending 交易就不会被其他人所接受的原因,
就是基于前面所提到的固定数值概念,都已经知道他是烂掉的交易,正常节点就不会选择他了。
基于这个基础,假设目前有 A, B, C 三个节点,B, C 节点已经认同第一笔交易,
这时候 A 节点发起 double spending transaction,B, C 节点收到之后会发现与帐本状况不符合,
因此在 MCMC 的时候屏弃不用。
2.2. 超强算力让 double spending transaction 的 weight 盖掉原本的交易:
前面所提到的一种攻击方式是,A交易成立后,B交易以超强算力盖出一条超高 weight 的交易,
来盖掉前面 A 的交易。
第一个要考虑的是节点,因为如同前面说的,节点会直接看到此交易造成帐本不符合后舍弃不用。
第二个是,有能力造出超高 weight 的交易吗?
交易的发起流程,可以参考此文:https://goo.gl/pckfc2
可以清楚地发现,tips 就是一个 81 chars 的 tx hash,而 tx hash 产生的时机点是算完 nonce 之后才会产生。
意思就是说,如果我们要盖出一个超长 weight transaciton,我们是没有办法 parallel 去做的:
| A |<