衝突交易是需要被紀錄與驗證時檢查出來的
紀錄衝突交易是紀錄
這種一定不能作為 trunk 與 branch
因為會有 address 餘額是負的
依照簡介所說的 , 選最大權重相關的 tips
例子是這樣的:
有衝突交易 bundle A 與 bundle B
A 的 output address 是 a
B 的 output address 是 b
假設 address "a" 花錢了 , 花錢的 bundle tip 是 c
新issue的交易 "d" , 可不可以指向 "c" ?
兩個情況
假設bundle B最終是確認 , bundle A 不是確認 , 交易 c 指向(驗證) bundle B
bundle A 不是確認 , 自然 address a 所有的錢就少一筆 , 所以交易 c 的 bundle是無效的(相關交易value和不是0)
示意圖:
新交易 d 應該要避免驗證交易 c
可是如果 bundle B 確認的門檻低(例如40%) , 容易 node 檢查 bundle B 的確認是有分歧的 , 這樣可能會讓交易 c 對應的bundle是確認的
假設 bundle A 與 bundle B 都還沒確認
這時交易 c 對應的 bundle 加入到 Tangle
那交易 d 要不要驗證交易 c ?
一樣是要避免 bundle B 確認 , 交易 c 的 bundle 也確認
由 IOTA Consensus Algorithm Introduction 中 , Trunk 與 Branch 要滿足的兩條性質
所有被指向的交易 , 全部的 address , 餘額不是負的
所有被指向的交易 , 全部的 address , 餘額加起來是最初的發行量
交易 d 如果選擇交易 c 作為 trunk 或 branch
因為交易 c 沒有指向 bundle A , 所以 address a 的餘額是負的
所以交易 c 是不可以選的
如下圖:
紅色的 , 和 是三組不同的衝突交易
IOTA