確認(Confirmation)
===
# 討論確認相關的文件
之前提過 , 確認的交易可以拿來算帳
也就代表賣家可以交付數據 , 商品或服務的最低條件
先看最近的[文件](https://blog.iota.org/the-tangle-an-illustrated-introduction-79f537b0a455)的圖

這段相關的原文
:::info
In the tangle above, transaction 9 is approved by two out of the four tips. If we were using uniform random tip selection, it would have a confidence of exactly 50%. However, the tips that approve it are apparently more likely than the tips that do not, which raises the confidence a bit.
:::
$9$ 那筆交易在模擬的圖上 , 確認度是 $0.54$
這張圖來說 , $11$ , $12$ , $13$ , $7$ 都是 $tip$
而 $7$ 跟 $lazy \space tip$ 比較接近
$lazy \space tip$ 對於確認度的增加是比較低的
$13$ 與 $12$ 指向了 $9$
由於 $7$ 對確認度的增加是比較低的
所以 $9$ 的確認度應該超過 $0.5$
接著就是算講確認度很完整的[文件](https://github.com/NONEYMOUS/IOTA-CONSENSUS-PRESENTATION)了
直接來看文件上的圖

$\color{yellow}{1}$ , $\color{yellow}{2}$ 是 $tip$
$\color{green}{Fully \space Confirmed}$ 指的是確認度為 $1$
綠色的交易 , 都有被 $\color{yellow}{1}$ 與 $\color{yellow}{2}$ 間接指向到
藍色的交易 , 則是 $\color{yellow}{1}$ 或 $\color{yellow}{2}$ 其中一筆間接或直接指向到
接下來看 $\color{yellow}{1}$ 剛加入 $DAG$ 的情況

$tip$ 有三個 , 分別是 $\color{gray}{z}$ , $\color{gray}{y}$ 和 $\color{yellow}{1}$
注意到 $\color{yellow}{1}$ 還沒加到 $DAG$ 時 , $\color{blue}{n}$ 還不是綠色($\color{green}{Fully \space Confirmed}$)
$\color{yellow}{1}$ 還沒加到 $DAG$
$tip$ 是 $\color{blue}{w}$ , $\color{blue}{x}$ , $\color{gray}{z}$ 和 $\color{gray}{y}$
這時直接或間接指向 $\color{blue}{n}$ 的 $tip$ 是 $\color{blue}{x}$ , $\color{gray}{z}$ 與 $\color{gray}{y}$
少了個 $\color{blue}{w}$ , 所以還是藍色的
$\color{yellow}{1}$ 加入 $DAG$ 後 , 會全部的 $tip$ 都直接或間接指向 $\color{blue}{n}$
所以 $\color{blue}{n}$ 會變成綠色($\color{green}{Fully \space Confirmed}$)
接下來的 $DAG$ 變成這樣

接著來看不是指向 $tip$ 的交易如何影響確認度

$\color{yellow}{5}$ 是新來的 $tip$ , 不過沒有指向舊有的 $tip$ ($\color{yellow}{1}$ , $\color{yellow}{2}$ , $\color{yellow}{3}$ , $\color{yellow}{4}$)
可以注意到 $\color{blue}{n}$ 不是 $\color{green}{Fully \space Confirmed}$ 了
因為 $\color{yellow}{5}$ 並沒有直接或間接指向 $\color{blue}{n}$
可以看到 , 確認度不是一直增加的 , 是可能會減少的
接下來看有衝突交易的情況

這邊就跟白皮書有關了 , 有關的如下
:::info
節點間並不需要達成共識,因為合法的交易有權繼續在 tangle 中; 但要是出現衝突的交易,便需要決定哪筆交易要被孤立 (orphaned),也就是這筆交易不會再被新進的交易間接驗證。決定哪筆交易是要被孤立的主要準則如下:一個節點進行多次的 tip 選擇演算法,接著觀察哪筆交易較可能被選到的 tip(間接)驗證。舉例來說:假設跑了 100 次 tip 選擇演算法,有一筆交易被選到 97 次,我們便說它有 97% 的信心被驗證到。
:::
實在看不懂白皮書在說什麼 , 不過沒關係
文件會說明
注意到 $\color{red}{5}$ 這筆交易在驗證先前的交易 , 預計是指向 $\color{yellow}{1}$ 與 $\color{yellow}{2}$
$\color{red}{w}$ 與 $\color{red}{y}$ 是衝突交易
$\color{red}{5}$ 還沒選好指向的交易 , 所以還不算是 $tip$
這時的 $tip$ 是 $\color{yellow}{1}$ , $\color{yellow}{2}$ , $\color{yellow}{3}$ 與 $\color{yellow}{4}$
$\color{red}{w}$ 只有被 $\color{yellow}{1}$ 指向
$\color{red}{y}$ 只有被 $\color{yellow}{2}$ 指向
如果$\color{red}{5}$ 指向 $\color{yellow}{1}$ 與 $\color{yellow}{2}$
這時 $tip$ 是 $\color{red}{5}$ , $\color{yellow}{3}$ 與 $\color{yellow}{4}$
而 $\color{red}{w}$ 和 $\color{red}{y}$ 確認度都會增加 (從四分之一變成三分之一)
這樣是不行的 , 衝突交易內只能有一筆能增加確認度
選擇的判斷條件是衝突交易內的累積權重($cumulative \space weight$)
選衝突內最大累積權重那筆交易
如果累積權重相同 , 那就隨機選一個

$\color{yellow}{5}$ 指向了 $\color{blue}{1}$ 和 $\color{blue}{4}$
這樣選並沒有讓 $\color{red}{w}$ 和 $\color{red}{y}$ 都增加確認度 , 所以不用重選
可以看到 $\color{red}{w}$ 的確認度是比 $\color{red}{y}$ 高的
只要一直持續下去 , $\color{red}{w}$ 會過確認度的門檻 , 而 $\color{red}{y}$ 的確認度將越來越小 (因為 $\color{yellow}{7}$ 逐漸變成 $lazy \space tip$)
這樣就達到效果:
:::success
衝突交易只能一筆是確認
:::
# 基金會的確認度算法
[文章](https://blog.iota.org/the-tangle-an-illustrated-introduction-79f537b0a455)
算法:
:::success
The confirmation confidence of a transaction is computed as follows:
1. Run the tip selection algorithm 100 times.
2. Count how many of those 100 tips approve our transaction, and call it A.
3. The confirmation confidence of our transaction is “A percent”.
In other words, the confidence of a transaction is the percentage of tips which approve it.
:::
放一下與基金會成員討論的一段內容:
:::success
proof.K - 上星期二晚上9點13分
If tangle has two tips "a" and "b".
A transaction "c" is referenced by "a"."b" doesn't reference "c".
Run the tip selection algorithm 100 times . If all selects "b" , confirmation confidence of "c" is 0. If all selects "a" , confirmation confidence of "c" is 1. Right?
If yes , consistent result is impossible in every node.
alongal - 上星期二晚上11點51分
@proof.K What your wrote is correct. I didn't understand your last statement
:::
不要懷疑 , 確認度每次查詢的數值都不一樣
而且是 0%~100% 內的整數都有可能
講講確認度是隨機值會有的結果
## 低機率 , 衝突交易皆確認
這裡假設確認的門檻是 $1$
考慮一個 $DAG$ 如下:
```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]
41[label="41" color=blue, fontcolor=blue, fontsize=24, shape=box]
31[label="31" color=blue, fontcolor=blue, fontsize=24, shape=box]
42[label="42" color=blue, fontcolor=blue, fontsize=24, shape=box]
21[label="21" color=blue, fontcolor=blue, fontsize=24, shape=box]
32[label="32" color=red, fontcolor=red, fontsize=24, shape=box]
43[label="43" color=blue, fontcolor=blue, fontsize=24, shape=box]
33[label="33" color=blue, fontcolor=blue, fontsize=24, shape=box]
22[label="22" color=blue, fontcolor=blue, fontsize=24, shape=box]
11[label="11" color=blue, fontcolor=blue, fontsize=24, shape=box]
f[label="f" color=red, fontcolor=red, fontsize=24, shape=box]
a -> c;
b -> c;
a -> c;
b -> c;
e -> a;
e -> b;
d -> a;
d -> b;
41->e;
41->d;
31->d;
31->d;
42->41;
42->31;
21->e;
21->d;
32->21;
32->31;
43->42;
43->32;
11->e;
11->f;
22->21;
22->31;
33->22;
33->42;
f->a;
f->a;
}
```
$\color{red}{f}$ 與 $\color{red}{32}$ 是衝突交易
跑100次tip的選取算法(MCMC) , 看裡面有幾次直接或間接指向要算確認度的交易
這意謂著 , 有可能100次都是 $\color{blue}{11}$
那 $\color{red}{f}$ 就是確認
或100次都是$\color{blue}{43}$ , 那$\color{red}{32}$ 就是確認的
而這兩種情況機率都不是0
## nodes最終一致的機率很大 , 但是在一致前有低機率其他的交易是確認
nodes最終一致的機率很大 , 原因在[一筆交易最終的權重增長](https://hackmd.io/s/Bk1vw3B8z)
當很大機率接任何 $tip$ 都會增加權重 , 也意謂直接或間接指向的 $tips$ 比例是很高的
所以最終一致的機率會很大
可是問題在於 , 由上小節的說明 , 在還沒達到最終一致前
衝突交易內的數筆交易就可能是確認的
## 大量 $tip$ 指向兩筆衝突交易
這種情況是下列的圖:
```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=red, fontcolor=red, fontsize=24, shape=box]
41[label="41" color=blue, fontcolor=blue, fontsize=24, shape=box]
31[label="31" color=blue, fontcolor=blue, fontsize=24, shape=box]
42[label="42" color=blue, fontcolor=blue, fontsize=24, shape=box]
21[label="21" color=blue, fontcolor=blue, fontsize=24, shape=box]
32[label="32" color=blue, fontcolor=blue, fontsize=24, shape=box]
43[label="43" color=gray, fontcolor=gray, fontsize=24, shape=box]
33[label="33" color=gray, fontcolor=gray, fontsize=24, shape=box]
53[label="53" color=gray, fontcolor=gray, fontsize=24, shape=box]
22[label="22" color=blue, fontcolor=blue, fontsize=24, shape=box]
11[label="11" color=red, fontcolor=red, fontsize=24, shape=box]
f[label="f" color=blue, fontcolor=blue, fontsize=24, shape=box]
a -> c;
b -> c;
a -> c;
b -> c;
e -> a;
e -> b;
d -> a;
d -> b;
41->e;
41->d;
31->d;
31->d;
42->41;
42->31;
21->e;
21->d;
32->21;
32->31;
43->32;
43->11;
11->e;
11->f;
22->21;
22->31;
33->11;
33->42;
53->22;
53->11;
f->a;
f->a;
}
```
$\color{red}{d}$ 和 $\color{red}{11}$ 是衝突交易
灰色的交易是攻擊者發的
這種情況會讓 $\color{red}{d}$ 與 $\color{red}{11}$ 都能增加確認度
要避免這種情況 , node不能收直接或間接指向兩筆衝突交易的交易
# 指向一筆交易的 $tip$ 比例
```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="11" color=blue, fontcolor=blue, fontsize=24, shape=box]
31[label="31" color=blue, fontcolor=blue, fontsize=24, shape=box]
22[label="22" color=blue, fontcolor=blue, 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="13" color=blue, fontcolor=blue, fontsize=24, shape=box]
42[label="42" color=blue, fontcolor=blue, fontsize=24, shape=box]
33[label="33" color=blue, fontcolor=blue, 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;
}
```
由上面的 $DAG$ , 考慮 $\color{blue}{21}$ 與 $\color{blue}{42}$ 這兩筆交易
指向 $\color{blue}{21}$ 有 $\color{blue}{13}$ , $\color{blue}{23}$ 和 $\color{blue}{33}$
指向 $\color{blue}{42}$ 只有 $\color{blue}{33}$
依照基金會的確認度算法
$\color{blue}{21}$ 會是 $1$ , 因為所有 $tip$ 都有指向 $\color{blue}{21}$
$\color{blue}{42}$ 不會是 $1$ , 因為只有一個 $tip$ 指向 $\color{blue}{42}$
可以看到 , 越多 $tip$ 指向交易 , 越高機率確認度是高的
得到結論
:::success
越高的 $tip$ 比例指向交易a , 交易a的確認度更高機率接近 $1$
:::
###### tags: `IOTA`