※ 引述《MRjk ()》之铭言:
: 做为一个和您一开始就有同样问题的人 说真的我还是没办法被说服
: 或许您能用比较相近的语言在帮我解释一次
: 我看了您在FB的讨论
: 您觉得最大的收获是tangle网络在拓朴的两端可以容纳两笔互为冲突的交易(双花)
: 但我觉得这改变并不会影响我们原先讨论的本质
: 因为当网络拓朴的两端合并以后 势必会取权重的一笔生存 另一笔则被孤立
: 这确实跟Bitcoin的主链不同
: 但ETH即有这uncle block(叔块)的概念
: uncle block仍然是主链的一部分 但uncle block里的交易是不被承认的
: 先复习一下原先的题目
: =================================
: "在IOTA网络中 没有coordinator的状态下
: 恶意攻击者从一个IoT装置所发出的交易A (经过PoW验证了前两笔交易)
: 如何能不被恶意攻击者手上的另一个超强硬件所建构出来的双花交易B(也经过了PoW验证
: 了前两笔交易 且还附加了更多交易在其后增加权重)盖过去?"
: =================================
: 这题以ETH来说明 就会变成
: 恶意攻击者发送了一个交易A 被主链X区块所确认
: 但攻击者构建了一个双花交易B 用更高的算力包装成X'->Y'->Z'等3个区块
: 原先的X区块变成Y'的uncle block, 资料仍在链上 但A交易是无效的 大家只会承认B
: 但BTC/ETH等为什么不会需要Cordinator来对抗这种51%攻击
: 因为block chain的奖励机制让大家会让主链上的算力高到攻击者很难独自去发起
: 回归到IOTA的问题上来 纵使IOTA网络能让两种双花交易存在拓朴的两端
: 但一当他们接轨之后 权重的选择下还是只会留下一边
: 权重的本质还是POW (我知道是很多交易互相累积啦 不过还是POW)
: 所以上述问题变成了 只靠诚实的IOT装置
: 所累积的POW是不足以让合流后的权重高于另一边刻意所构筑的
: 无论IOTA再流行 全球IoT装置都加入恐怕也很难保证安全
: (原因前面讨论文章有讲过 贫弱的硬件 只计算交易时少少的运算时间...)
: 当然您说的(2)POW改交由代理节点运算 或许可以拉近上面的鸿沟
: 但这样整个网络交易本体就变成是代理节点了而非是IOT装置
: IOTA主打的IoT交易特性就不见了
: (感觉就像是味增汤都不放味增与豆腐改放菜头排骨酥用肉燥提味)
: 既然都必须连上代理节点了 那代理节点要run区块链还是tangle网络差别就不大了吧?
我之所以推测IOTA会走代理节点的模式
是因为类似的说法被多次提及
grapherd大大在这篇(#1QNrXVf_)提到“IOTA 没打算让 IoT devices 运行 PoW”
另有一位大大在这则留言提及PoW可由full node来做
https://www.facebook.com/groups/897485720426082/permalink/926697757504878/?comment_id=926828070825180&reply_comment_id=926833580824629
(社团里的成员告诉我这两位大大都颇有来头XD)
回去翻了您的整理文(#1QNXdgqk)发现您的D选项似乎与这些说法相吻合
且底下leftc大大的推文为此方案提出了更具体的运作模式
重新思考了一下觉得似乎可行(各大厂商站出来有种联盟链的味道?)
因此才做出此推断
在这里真的要再次感谢MRjk大大先前的讨论与整理
至于您对此选项提出的质疑
我认为IoT装置本来就无法独自发交易
就算IoT装置亲自做PoW
由于IoT装置不太可能作为full node(需要大量空间储存整个Tangle)
因此还是需要找个full node进行连线
才能进行选tip与发交易的动作
接着回答您关于双花的问题
您的原文误会我收获的部份了
您所述的攻击流程完全就是我们一开始的认知
先确认您是否了解一些实作上的观念
不论是Blockchain或是Tangle
full node必须保存的资料并不只有整条Blockchain tree或是Tangle DAG
还会包括帐本状态
例如比特币Blockchain的帐本状态一般称为UTXO (Unspent Transaction Outputs)
新的区块一接上主链时 UTXO会根据此区块进行一次state transition
Blockchain reorganization发生时(短链超越长链)整个UTXO会被大翻新
可以想像若没有UTXO的话
每次想检查“于哪些地址有多少钱”都必须重新爬过整条主链
显然在实作上完全不切实际
Tangle帐本状态也是差不多概念
(Tangle的帐本状态应该也是记录哪些地址有多少钱)
但运作方式有一处根本差异
新的交易被接到Tangle时 这笔交易并不会马上使帐本更新
而是要等累积权重到达一定的量才会被帐本采用
也就是交易有confirmed的概念
(我之前是用finalized这个字 这两个字我当一样意思来用)
交易confirmed之后就再也不会被撤销了
这与Blockchain的“最长链的交易才被帐本采用 新区块一接上最长链就立即更新帐本”
有着截然不同的性质
来看看Tangle如何防止双花
其实有了上述概念之后应该不难理解
用互斥交易A跟B的例子来说明
假设大家走A的sub-tangle
当A的累积权重到达一定量被视为confirmed 才会被帐本采计
这时候再拿B后面跟一大串交易接到Tangle上是没有意义的
因为B跟A互斥 而A已经confirmed 所以B不可能被帐本采计
比较一下区块链双花的情形
帐本采计最长链里的所有交易
假设目前最长链里有A交易
现在有一条短链 里面有B交易
短链借由超高算力变成新的最长链
这时A就被从帐本里撤销了 而B进入帐本
所以其实区块链里的交易 并不像Tangle里的交易一样会confirmed
因为只要有足够的算力 是可以撤销任何交易的
只是要达到这个足够的算力超难而已
事实上
我能往新的方向思考
是因为grapherd大大发了这篇文(#1QOqgSY5)
他再次强调
1. 一笔交易被认同并导致帐本状态转变后 这笔交易就不会再被撤销了
2. 正常节点的数量很重要
这两点显然完全与区块链不符
第二点似乎跟网络拓朴有关暂时不管
光第一点就非常让我想不通了
因为区块链不可能有不会被撤销的交易
因此我试着接受第一点
并且试着寻找新的出路
就看到一线曙光
最后连为何要扯到网络拓朴也明朗了
先前我之所以一直不相信Tangle会采用confirm交易的做法
是因为我认为confirm交易会导致非常难以收拾的后果
亦即全网帐本将分裂好几派 如同这篇我想表达的(#1QNh7H5m)
但IOTA却大方接受了全网帐本会分裂这件事 硬是往这个方向下手
如此疯狂的做法是我完全没有预料到的
(其实我后来发现grapherd大大在这篇 #1QNrXVf_ 就有解释全网帐本的确会分裂)
总结
我认为Tangle与Blockchain的关键差异
就在于交易是否会真的confirmed
这个根本的差异导致Tangle与Blockchain的性质有以下区别
Tangle的帐本是可以分裂为不同势力的
而节点究竟受到哪个势力的帐本影响较大
取决于节点的邻居属于哪派势力 也就是必须考虑网络拓朴
Blockchain的帐本则是统一的
所以不必考虑网络拓朴
若您仍有不解之处
我很乐意继续与您讨论