驗證交易的選擇 === 衝突交易是需要被紀錄與驗證時檢查出來的 紀錄衝突交易是紀錄 $bundle \space hash$ # 不可指向兩筆以上的衝突交易 ## 第一種衝突交易 ```graphviz digraph tangle{ rankdir=RL; b[label="b" color=red, fontcolor=Red, fontsize=24, shape=box]; a[label="a" color=red, fontcolor=red, fontsize=24, shape=box]; a -> init; b -> d; c -> a; d -> a; e -> d; f -> b; } ``` 這種一定不能作為 trunk 與 branch 因為會有 address 餘額是負的 ## 第二種衝突交易 ```graphviz digraph tangle{ rankdir=RL; a[ label="c" color=red, fontcolor=red, fontsize=24, shape=box]; b[label="b" color=red, fontcolor=Red, fontsize=24, shape=box]; c[label="a" color=blue, fontcolor=blue, fontsize=24, shape=box] a -> c; b -> c; a -> c; b -> c; } ``` 依照[簡介](https://hackmd.io/s/SJRDHEoz7#%E6%9C%89%E8%A1%9D%E7%AA%81%E4%BA%A4%E6%98%93--%E9%81%B8%E7%B4%AF%E7%A9%8D%E6%AC%8A%E9%87%8D%E5%A4%A7%E7%9A%84)所說的 , 選最大權重相關的 tips # 有疑慮的指向 例子是這樣的: :::info 有衝突交易 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) 示意圖: ```graphviz digraph init{ rankdir=RL; a[ label="f" color=blue, fontcolor=blue, fontsize=24, shape=box]; b[label="b" color=blue, fontcolor=blue, fontsize=24, shape=box]; c[label="a" color=blue, fontcolor=blue, fontsize=24, shape=box] e[label="bundle B"color=red, fontcolor=red, fontsize=24, shape=box] d[label="g" color=blue, fontcolor=blue, fontsize=24, shape=box] 31[label="bundle A" color=red, fontcolor=red, fontsize=24, shape=box] 21[label="21" color=blue, fontcolor=blue, fontsize=24, shape=box] 41[label="41" color=blue, fontcolor=blue, fontsize=24, shape=box] 32[label="32" color=blue, fontcolor=blue, fontsize=24, shape=box] 11[label="11" color=blue, fontcolor=blue, fontsize=24, shape=box] 22[label="22" color=blue, fontcolor=blue, fontsize=24, shape=box] 42[label="42" color=blue, fontcolor=blue, fontsize=24, shape=box] 12[label="c" color=green, fontcolor=green, fontsize=24, shape=box] 78[label="d" color=black, fontcolor=black, fontsize=24, shape=box] a -> c; b -> c; a -> c; b -> c; e -> a; e -> b; d -> a; d -> b; 31->d; 31->d; 21->e; 21->d; 41->e; 41->d; 32->11; 32->21; 11->e; 11->e; 22->21; 22->11; 42->31; 42->31; 12->11; 12->21; } ``` 新交易 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](https://hackmd.io/s/SJRDHEoz7) 中 , Trunk 與 Branch 要滿足的兩條性質 :::info 1. 所有被指向的交易 , 全部的 address , 餘額不是負的 2. 所有被指向的交易 , 全部的 address , 餘額加起來是最初的發行量 ::: 交易 d 如果選擇交易 c 作為 trunk 或 branch 因為交易 c 沒有指向 bundle A , 所以 address a 的餘額是負的 所以交易 c 是不可以選的 # 多組衝突交易 如下圖: ```graphviz digraph init{ rankdir=RL; a[ label="c" color=blue, fontcolor=blue, fontsize=24, shape=box]; b[label="b" color=blue, fontcolor=blue, fontsize=24, shape=box]; c[label="a" color=blue, fontcolor=blue, fontsize=24, shape=box] e[label="e" color=blue, fontcolor=blue, fontsize=24, shape=box] d[label="d" color=blue, fontcolor=blue, fontsize=24, shape=box] 21[label="21" color=blue, fontcolor=blue, fontsize=24, shape=box] 11[label="C1" color=red, fontcolor=red, fontsize=24, shape=box] 31[label="C1" color=red, fontcolor=red, fontsize=24, shape=box] 22[label="C2" color=red, fontcolor=red, fontsize=24, shape=box] 12[label="12" color=blue, fontcolor=blue, fontsize=24, shape=box] 32[label="32" color=blue, fontcolor=blue, fontsize=24, shape=box] 41[label="41" color=blue, fontcolor=blue, fontsize=24, shape=box] 23[label="23" color=blue, fontcolor=blue, fontsize=24, shape=box] 13[label="C3" color=red, fontcolor=red, fontsize=24, shape=box] 42[label="C2" color=red, fontcolor=red, fontsize=24, shape=box] 33[label="C3" color=red, fontcolor=red, fontsize=24, shape=box] a -> c; b -> c; a -> c; b -> c; e -> a; e -> b; d -> a; d -> b; 21->e; 21->d; 11->e; 11->e; 31->d; 31->d; 22->21; 22->31; 41->e; 41->d; 12->11; 12->21; 32->21; 32->31; 23->22; 23->32; 42->41; 42->31; 13->12; 13->22; 33->22; 33->42; } ``` 紅色的 $\color{red}{C1}$ , $\color{red}{C2}$ 和 $\color{red}{C3}$ 是三組不同的衝突交易 ###### tags: `IOTA`