從最簡單的例子開始(一個node的不算)
網路拓樸如上圖
這邊有兩個node( \(1\) , \(2\) )
這邊假設兩個node初始的DAG是一樣的 , 來玩一次模擬
假設 \(1\) 與 \(2\) 初始的DAG如下
假設 \(1\) 發起一筆交易 , \(2\) 收到 \(1\) 發的交易前也發起一筆交易
來看中間DAG變化的情況
\(1\) 發起新的交易 , 驗證 \(b\) 與 \(c\)
來看 \(2\)
\(2\) 發起的交易 , 跟 \(1\) 的驗證是一樣的
所以最終 \(1\) 和 \(2\) 收到交易會變成
假設接下來 , \(1\) 發起一筆交易 , 等\(2\) 收到後 , \(2\) 再發一筆交易
來看中間DAG的變化
\(1\) 新發起的交易 \(\color{green}{f}\) 選 \(e\)
看 \(2\) 收到後 , 選交易的情況
\(2\) 發起的交易 \(\color{green}{g}\) 選 \(f\) 和 \(d\)
最終 , \(1\) 和 \(2\) 的DAG如下
從上面的模擬 , 就可以來討論下面兩個問題
上面的模擬 , 都是選當下DAG的tip
於是有個疑問
如果不是依據最新收到交易所組成的DAG選取 , 那會發生什麼情況?
假設某個node目前收到交易所組成的DAG如下
發起交易選tip的DAG如下
如果只從上圖的 \(e\) , \(d\) 選的話
\(f\) 和 \(g\) 就不會累積權重
所以可以得到結論
選被驗證的交易 , 要從最新交易所組成的DAG選取
目前發起一次的買賣
是一個 \(bundle\)
\(bundle\) 內有多個交易
同個 \(bundle\) 內的交易 , 是由iota.lib.xxx之類的lib決定的
所以不是MCMC算法決定的
但是 , \(bundle\) 內會有一筆交易
選取驗證交易是由node決定(command:getTransactionsToApprove)
那就是MCMC算法決定的
所以目前交易所選的驗證交易 , 是都有
不完全是MCMC算法決定
IOTA