※ 引述《kugwa (kugwa)》之銘言:
: ※ 引述《grapherd (NULL)》之銘言:
: : 這個問題已經回應過了,不會發生這樣的問題。
: : 這種超久的 valid transaction V.S. 新出的爆幹 weight transaction
: : 因為超久以前的 valid transaction 已經改變整個帳本的狀況
: : (地址總額,對方地址總額等)
: : 因此根本不會有收到貨然後又被蓋掉的問題。
: 怎麼不會有呢
: 就是會有這樣的問題啊
: 比特幣的短鏈追上長鏈造成blockchain reorganization
: 以及我們一直在討論的IOTA攻擊手段(B的累積權重超越A的累積權重)
: 都是這個狀況呀(雖然說落後很多的情況下追上通常都是惡意去追的)
: 你所謂的「整個帳本的狀況」
: 本來就是根據blockchain或Tangle的樣子在解讀的
: blockchain的情況中 帳本的狀況就是最長鏈中所有交易一起套用的樣子
: blockchain reorganization時 因為長鏈換了一條 帳本會整個被大改動
: 而Tangle的情況中 A的累積權重比B的還大時 帳本只採計A而忽略B
: 但是當B的累積權重超越A時 帳本就會改為採計B而忽略A
: 這種帳本改動一發生 你看到的各種總額就會跟著發生變動 很嚴重的
: 總之 根本沒有所謂的「某個交易生效一段時間之後就絕對不會被撤銷」的情況
: (這應該叫freezed或是finalized)
: 只要另一方算力夠強 就有辦法撤銷任意的交易
: (比特幣拒收落後超過12個高度的block 這個情形先不討論)
: finalize之所以難以實現
: 就是因為很多種方式(例如你規定一個交易t時間後就堅決不再撤銷)
: 最終都會造成全網失去共識
: 就像我前一篇說的那種案例
幾點說明一下:
1. IOTA 為「固定」數值的區塊鏈 (區塊鏈不正確,反正就先當區塊鏈吧)
也就是說先不管整體網路如何,一個符合 valid transaction 規則的 double spending transaction,
製作上變得有點困難。
舉例而言,整個 IOTA 網路假設只有 1i,並且有三個 address A (1i), B(0i), C(0i), SUM(1i)
今天正常的交易 A 給 B 1i 的話,會變成:
A(0i), B(1i), C(0i), SUM(1i)
預想中發起 double spending 的話 (A->B, A->C),會變成:
A(0i), B(1i), C(1i), SUM(2i)
整體帳本的總數就不對了,這時候沒被共識到的那個交易,其他節點在收到的時候,就會列為拒絕戶而不使用它。
2. 交易共識改寫
有了固定數值的概念,我們再來看交易共識改寫的狀況。
2.1 正常節點捨棄 double spending transaction:
我之所前面說到,第一個交易已經成立後,第二個 double spending 交易就不會被其他人所接受的原因,
就是基於前面所提到的固定數值概念,都已經知道他是爛掉的交易,正常節點就不會選擇他了。
基於這個基礎,假設目前有 A, B, C 三個節點,B, C 節點已經認同第一筆交易,
這時候 A 節點發起 double spending transaction,B, C 節點收到之後會發現與帳本狀況不符合,
因此在 MCMC 的時候屏棄不用。
2.2. 超強算力讓 double spending transaction 的 weight 蓋掉原本的交易:
前面所提到的一種攻擊方式是,A交易成立後,B交易以超強算力蓋出一條超高 weight 的交易,
來蓋掉前面 A 的交易。
第一個要考慮的是節點,因為如同前面說的,節點會直接看到此交易造成帳本不符合後捨棄不用。
第二個是,有能力造出超高 weight 的交易嗎?
交易的發起流程,可以參考此文:https://goo.gl/pckfc2
可以清楚地發現,tips 就是一個 81 chars 的 tx hash,而 tx hash 產生的時機點是算完 nonce 之後才會產生。
意思就是說,如果我們要蓋出一個超長 weight transaciton,我們是沒有辦法 parallel 去做的:
| A |<