Try   HackMD

node如何處理不合作的鄰居node

node如何發現不合作的鄰居node

權重得到的結論:

選交易的算法 , 要選tip且要盡可能不選lazy tip

從這結論可以來判斷怎樣的

node 要繼續連結 , 怎樣的
node
要處罰或是斷線

node 來說 , 好的鄰居
node
行為應該是盡量增加非
lazy tip
tip
權重

先來看

lazy tip 所模擬的例子

  • 3






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





31

31



31->d





31->d





21

21



21->e





21->d





41

41



41->e





41->d





32

32



32->31





32->21





11

11



11->e





11->e





22

22



22->31





22->21





42

42



42->31





42->41





33

33



33->22





33->42





12

12



12->21





12->11





23

23



23->32





23->22





43

43



43->32





43->42





  • 4






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





41

41



41->e





41->d





31

31



31->d





31->d





42

42



42->41





42->31





21

21



21->e





21->d





32

32



32->31





32->21





43

43



43->42





43->32





33

33



33->42





22

22



33->22





22->31





22->21





11

11



11->e





11->e





這裡舉的是

3 ,
4
node的DAG

注意到

11 ,
12
23

都是
4
沒有的交易

然後看

1 ,
4
node的DAG

  • 1






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





11

11



11->e





11->e





21

21



21->e





21->d





12

12



12->11





12->21





22

22



22->21





31

31



22->31





31->d





31->d





13

13



13->12





13->22





41

41



41->e





41->d





32

32



32->21





32->31





23

23



23->22





23->32





  • 4






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





41

41



41->e





41->d





31

31



31->d





31->d





42

42



42->41





42->31





21

21



21->e





21->d





32

32



32->31





32->21





43

43



43->42





43->32





33

33



33->42





22

22



33->22





22->31





22->21





11

11



11->e





11->e





1 ,
4
不是鄰居

1 node缺
42
,
33
,
43

4 node缺
12
,
13
,
23

會發現

1
4
DAG差異比較大 ,
3
4
DAG差異比較小

但更重要的是

tips (不考慮
lazy tip
)

1 node的
tips
13
,
23

3 node的
tips
12
,
23
,
33
,
43

4 node的
tips
33
,
43

會發現

1
4
tips
沒有交集

1
3
tips
有交集

從這可以有一個猜測:

相連的

node
tips
的交集 , 交集元素數量在
node
tips
比例比較高

那就可以推出下面不肯定的結論:

正常鄰居

node 所發起的交易 , 選取的被驗證交易 , 很大機率是自己
tips
內非
lazy tip
的交易

這是要實驗看看的

不過先假設對 , 來看進一步推論

猜測:

間隔較遠的

node
tips
的交集在 node的
tips
比例較少

這猜測有點難懂 , 繼續以

lazy tip
node
為例子

上面有了

1 ,
3
,
4
tips

來看

2 node的DAG

  • 2






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





21

21



21->e





21->d





11

11



11->e





11->e





31

31



31->d





31->d





22

22



22->21





22->31





12

12



12->21





12->11





32

32



32->21





32->31





41

41



41->e





41->d





23

23



23->22





23->32





13

13



13->22





13->12





42

42



42->31





42->41





33

33



33->22





33->42





2 node的
tips
13
,
23
,
33

1 ,
2
,
3
,
4
tips
一起看:

1 :
13
,
23

2 :
13
,
23
,
33

3 :
12
,
23
,
33
,
43

4 :
33
,
43

再看一下

lazy tip 的網路拓樸







graphname



1

1



2

2



1--2




3

3



2--3




4

4



3--4




發現跟

4
tips
沒有交集的
1
是間隔比較遠的
node

然後

4
2
tips
交集是
33

最近的

3
tips
交集是
33
,
43

確實就這模擬 , 間隔較遠的

node ,
tips
交集的交易也較少

既然鄰居node的

tips 與自己node有很高的重疊

那就可以開始討論與鄰居node保持連線的條件

與鄰居node保持連線的條件

鄰居node發的交易會有許多情況

因為

node 是靠 鄰居node 收全部網路上
node
發起的交易

所以會有沒選取DAG上的交易 , 選

lazy tip 的交易 , 選不是
tip
的交易

這樣的情況 , 就不能要求 鄰居node
大部份送的交易都指到非

lazy tip
tip

所以只能用最低的要求來當標準

而這邊就跟白皮書提到

node 會不會認真工作的描述有關了

白皮書描述:

是甚麼動機促使節點們產生、傳播 (propagate) 交易? 事實上,我們佈署的節點並沒有理由不產生及傳播交易。每個節點會計算一些數據,其中之一是計算會從鄰居接收多少新的交易。如果某個特定節點「太懶惰」,便會被它的鄰居捨棄。所以即使節點並沒有發布任何的交易(也因此沒有分享新的交易來驗證自己交易的動力),他仍然有動機努力工作。

如果某個特定節點「太懶惰」,便會被它的鄰居捨棄。

這句就是說明對於 鄰居node 不送交易 ,

node 會跟 鄰居node 斷連的

白皮書說的是一段時間內 , 完全不發交易的處理

可是就權重章節的討論 , 有發交易還不代表對增加權重是有最大的幫助的

所以最低條件是:

一段時間內 , 至少一筆鄰居node發的交易所選取被驗證的交易 , 必須是node DAG 內非

lazy tip
tip

知道不合作鄰居node後的應對

上面推出了最低要求

接下來討論各式應對方法

實際上不合作鄰居node已經可以視為惡意node了

所以手段激烈沒有關係 , 有幾個可選的

斷連

最直接了當的方法 , 反正該鄰居node不互相增加彼此交易的權重

基本上有跟沒有是一樣的 , 那就斷連

斷連會少收交易 , 所以

client 需要紀錄些備用的
node

要求難的PoW題目

上面斷連是完全不收交易的做法

這邊難的PoW題目就是少收交易的做法

client 就不需要紀錄備用的
node

只是交易確認的效率會變差 , 但可以降低不合作鄰居node的影響

有衝突交易DAG

其中一個 confirmation

這裡要講講常見的誤解

用礦機之類可以做大量PoW的機器
灌大量交易接到第二大權重的交易
這樣就能輕易篡改帳本了

假設這台礦機是正常node的鄰居

網路拓樸如下:







graphname



1

1



2

2



1--2




4

4



1--4




3

3



2--3




3--1




礦機

礦機



4--礦機




考慮上面對於 鄰居node 的管理
礦機會在發一段時間的交易後 , 被斷線
所以直連的礦機是難以成功的

為何會被斷線 , 兩個原因

  • 網路頻寬限制
  • 不合作的
    node

我們知道一個事實:

node 接收交易每單位時間是有上限的

想像礦機對

4 發大量的交易

如果要最大的效果 , 就是會把

4 的網路頻寬都用掉

這樣會讓

1 有一段時間沒有收到
4
發來的交易

根據

一段時間內 , 至少一筆鄰居node發的交易所選取被驗證的交易 , 必須是node DAG 內非

lazy tip
tip

的要求

1 會跟
4
斷線

斷線後的網路拓樸如下:







graphname



1

1



2

2



1--2




3

3



2--3




3--1




4

4



礦機

礦機



4--礦機




這樣礦機的交易是無法進入

1 ,
2
3

如果不管

4 上的帳本紀錄

這樣

1 ,
2
3
的帳本 , 衝突內最大交易還是沒變

如果

4 紀錄衝突交易內 , 不是最大權重交易可以增加交易權重的
tips

可以有下列的方法來防禦這樣的攻擊

  • 不收交易
    零元交易這章
    可以得知

    不收零元交易

    是一種阻擋的方式
    但是如果攻擊者弄很多非零元交易 , 還是抵擋不了 , 所以就需要下一點了

  • 要求做難的PoW題目
    IOTA的PoW跟比特幣不一樣 , 不需要全網node的hash難度共識
    所以可以拿來針對惡意的node
    要求做足夠難度的hash格式問題
    這樣礦機發的交易就會變少 , 更難超過最大權重

以上只是一種可行的方法 , 不排除有其他方法