Try   HackMD

一個node的DAG(Directed Acyclic Graph)成長

從最簡單的例子開始(一個node的不算)







graphname



1

1



2

2



1--2




網路拓樸如上圖

這邊有兩個node( \(1\) , \(2\) )

這邊假設兩個node初始的DAG是一樣的 , 來玩一次模擬

假設 \(1\)\(2\) 初始的DAG如下







init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





假設 \(1\) 發起一筆交易 , \(2\) 收到 \(1\) 發的交易前也發起一筆交易

來看中間DAG變化的情況

  • node1






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





d

d



d->a





d->b





\(1\) 發起新的交易 , 驗證 \(b\)\(c\)

來看 \(2\)

  • node2






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





\(2\) 發起的交易 , 跟 \(1\) 的驗證是一樣的

所以最終 \(1\)\(2\) 收到交易會變成

  • node1






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





  • node2






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





假設接下來 , \(1\) 發起一筆交易 , 等\(2\) 收到後 , \(2\) 再發一筆交易

來看中間DAG的變化

  • node1






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





f

f



f->e





f->e





\(1\) 新發起的交易 \(\color{green}{f}\)\(e\)

\(2\) 收到後 , 選交易的情況

  • node2






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





f

f



f->e





f->e





g

g



g->d





g->f





\(2\) 發起的交易 \(\color{green}{g}\)\(f\)\(d\)

最終 , \(1\)\(2\) 的DAG如下

  • node1






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





f

f



f->e





f->e





g

g



g->d





g->f





  • node2






init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





f

f



f->e





f->e





g

g



g->d





g->f





從上面的模擬 , 就可以來討論下面兩個問題

node發起交易 , 選取交易的DAG

上面的模擬 , 都是選當下DAG的tip

於是有個疑問

如果不是依據最新收到交易所組成的DAG選取 , 那會發生什麼情況?

對權重的影響

假設某個node目前收到交易所組成的DAG如下







init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





f

f



f->e





f->e





g

g



g->d





g->f





發起交易選tip的DAG如下







init



a

c



c

a



a->c





a->c





b

b



b->c





b->c





e

e



e->a





e->b





d

d



d->a





d->b





如果只從上圖的 \(e\) , \(d\) 選的話

\(f\)\(g\) 就不會累積權重

所以可以得到結論

選被驗證的交易 , 要從最新交易所組成的DAG選取

對確認度的影響

一筆交易最終的權重增長

IRI發起交易選取驗證交易的現況

目前發起一次的買賣

是一個 \(bundle\)

\(bundle\) 內有多個交易

同個 \(bundle\) 內的交易 , 是由iota.lib.xxx之類的lib決定的

所以不是MCMC算法決定的

但是 , \(bundle\) 內會有一筆交易

選取驗證交易是由node決定(command:getTransactionsToApprove)

那就是MCMC算法決定的

所以目前交易所選的驗證交易 , 是都有

不完全是MCMC算法決定

tags: IOTA