驗證交易的選擇
===
衝突交易是需要被紀錄與驗證時檢查出來的
紀錄衝突交易是紀錄 $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`