IOTA 交易,确认和共识
Tangle 初始狀態(tài)
與區(qū)塊鏈技術(shù)不同,IOTA 并不是一條有著時間序列概念,每個區(qū)塊前后相連的鏈,鏈中的每個塊包含一些交易。在 IOTA 中,每筆交易都可以其他交易連接(所謂連接,就是驗證其他交易),并且可并行發(fā)生。下面的內(nèi)容將就如何在 IOTA 中加入交易,驗證交易及其共識機(jī)制展開。
上圖是 tangle 的一個案例,下面內(nèi)容都會圍繞該圖展開。綠色交易代表已經(jīng)被網(wǎng)絡(luò)以高確定性(high certainty)地確認(rèn),藍(lán)色交易是部分確認(rèn),也就是確定性較低。灰色(以及下面的黃色)方框表示還沒有任何人驗證過的 tip (tip 有尖端,尾部的意思,比如手指尖就可以用這個詞,這里的 tip 表示 tangle 中最新的尚無人驗證的交易)。紅色交易,表示有沖突,或無效交易。
在上圖中,交易?α?并非一筆普通交易。它引用了交易?h?和?l,由于交易?h?已經(jīng)被交易?l?引用了,?α?會選擇一個 tip(l) 和 一個顯然不是 tip 的交易(h)。這么做目前似乎并沒有問題,網(wǎng)絡(luò)也允許這樣的行為。
加入一筆交易
為了向 tangle 中加入一筆新的交易,用戶必須從 tangle 中隨機(jī)挑選出兩個 tip(tip 就是尚未確認(rèn)的交易),并對兩個 tip 進(jìn)行驗證。所謂驗證,意味著用戶需要檢查 tip 的簽名,即所謂的 PoW,并確保所選的 tip 與之前的任何交易(無論是直接相關(guān)還是間接相關(guān))都沒有沖突。如果所選的 tip 是合法的,用戶就對其進(jìn)行引用,也就是加入新的交易。
如果交易既沒有被所選的 tip 直接引用,也沒有被間接引用,那么對于當(dāng)前的驗證過程來說,這些交易就是不相關(guān)的交易。對于不相關(guān)交易,會由其他人或是之后的交易來進(jìn)行驗證,并將它們加入到 tangle 中。
另一筆交易
與此同時(其實不必同時,早一點晚一點都無所謂),另一個用戶可能正在一個不同的位置加入新的交易。它選擇了 tip?z?和?y。如此一來,它就在更大的范圍上驗證了已經(jīng)驗證過的同樣交易,即?a?到?k,m?到?n,加上額外的一些沒有在交易?1?驗證路徑上的交易(l,?o,?r,?t,?v,?y?和?z)。
新的 Tangle 狀態(tài)
交易?1?和?2?的驗證路徑有重合之處,我們可以看到有一些交易僅被確認(rèn)一次,有些交易被確認(rèn)兩次。被當(dāng)前所有 tip 驗證和確認(rèn)的交易就被認(rèn)為是完全確認(rèn)。因此,交易?n?進(jìn)入 tangle 更深一層,現(xiàn)在變成了綠色。從現(xiàn)在開始,隨后所有連接到?1?與/或?2?或者它的孩子,將會保持再驗證和再確認(rèn)的交易狀態(tài)。
我們已經(jīng)學(xué)到了什么?
沒有人需要看到和驗證所有的交易。每個用戶僅需要選擇和驗證兩筆交易及其父交易。如此一來,他們僅驗證了 tangle 的一部分而已。當(dāng)其他用戶選擇并驗證不同的 tip 和路徑,完整 tangle 的協(xié)同驗證就出現(xiàn)了。
在某個時間點以后,一旦一筆交易在 tangle 中進(jìn)入足夠深的位置,無論從最新的 tip 中的任意一個,無論從直接或是間接路徑上它都存在。這樣的交易就被認(rèn)為是完全確認(rèn),并且會被每一個新的交易再驗證,再確認(rèn)。我們可以認(rèn)為它被所有用戶(和機(jī)器)確認(rèn),并且確定性很高。
為了對確認(rèn)進(jìn)行檢查,接收者只需要檢查交易是否被已有的所有 tip 直接或間接引用(或者通過一個確定比率,如果確定性更低的話,比如 80%,也可以接受)。這時候就不需要再驗證或是其他類似操作了。注意:可能會有上千個 tip。與其檢查每個 tip 的父節(jié)點,更可能的是選擇一個隨機(jī)樣本,并做一個統(tǒng)計評估。
注意交易?n?還沒有被確認(rèn),因為現(xiàn)在我們的 tip 比較少。下面會展示更多 tip 的場景。
確認(rèn)級別
我加入了一些新的 tip 對上例進(jìn)行了擴(kuò)展。對于每個新的 tip,它的驗證路徑都被高亮了。通過顏色,你可以清楚地看到哪些交易被多少 tip 所驗證,及其驗證等級。
一個商家可能會根據(jù)自身情況設(shè)定個性化的確認(rèn)/確定等級。如果交易速度比交易價值更重要(比如微支付或零價值支付),又或者發(fā)送方是一個朋友,一個人可能會以 75% 的確認(rèn)等級接受交易。在 75% 的確定等級(3/4 tip)下,交易?l,?o, 和?t?可能也會被確認(rèn)。
傳播延遲
理論上,由于更慢的 PoW 或者傳播延遲,可能在稍后出現(xiàn)一筆慢速交易?5。鑒于我們已經(jīng)知道了交易?5,交易?n?就不會再被所有的 tip 完全確認(rèn)。但是,他們的確認(rèn)確定性(confirmation certainty)仍然很高,有 4/5 tip 確認(rèn)(實際上會有上千而不是 5 個 tip)。記住,所有一切都是為了一個高概率的確定性 – 就像在區(qū)塊鏈里面,區(qū)塊的每次確認(rèn)就是增加了確定性的概率。
請注意,本例中的交易?5?的狀態(tài)并非從 “確認(rèn)” 轉(zhuǎn)變?yōu)?“未確認(rèn)”。它僅是從改變了數(shù)學(xué)上精確的確定性比率(比如,如果一共有 100 個 tip,從 100% 到 99%)。一旦一些隨后的交易引用了交易?1?和?5,交易?n?就會被所有的 tip 再次完全確認(rèn)。這樣小的確認(rèn)等級變化將不太可能會發(fā)生,更進(jìn)一步的交易會進(jìn)入 tangle。
請注意,100% 的確認(rèn)/確定等級無論如何都很難達(dá)到,因為總會出現(xiàn)一些無正面貢獻(xiàn)的 tip(比如,引用一些無用的交易,或是根本不遵守協(xié)議)。
雙花
想象這樣一種情況,一個用戶在 tangle 的兩個不同的地方加入了兩筆沖突的交易(w?和?y)。對于隨后的用戶,在他們的驗證路徑上可能只有這些沖突交易里面的其中一筆(取決于他們的 tip 選擇,和一些可能的傳播時延)。比如,加入了交易?1?和?2?的用戶就不會看到?jīng)_突,并會確認(rèn)他們所選的 tip。因此,雙花就得到了第一次確認(rèn)。但是,遲早必然會發(fā)生的是,這兩筆沖突的交易會出現(xiàn)在一筆交易的驗證路徑上。比如,交易 5 就會看到?jīng)_突,繼而不會確認(rèn)選出的 tip。相反,為了確保它自身會是一筆有效的交易,它會重新選擇 tip 直到找到不沖突的交易。
依賴于 tip 的選擇和 tangle 的推進(jìn),在沖突變得逐漸清晰之前,可能會有更多的用戶在?w?或?y?后面附加交易。取決于用戶在哪里附加最多新的交易,w?或者?y?都會在某個點確認(rèn),但是其他會被丟棄。被丟棄交易(因為它們看不到即將到來的沖突)后面的所有交易也會被丟棄。但是,這些交易并不會丟失,而是可能被任何人(但最可能是交易接收方)接受,并為了新的確認(rèn)機(jī)會再次附加到 tangle。這時,PoW 就需要重新來過,但是并不需要從發(fā)送方發(fā)送新的簽名了。
解決雙花
上面已經(jīng)說到,一個用戶嘗試將交易?5?與 tip?1?和?2?相連。由于沖突,它重新進(jìn)行選擇 tip,并且決定連接到 tip?1?和?4。另一個用戶(也可能是同一個)選擇 tip?2?和?3?連接到交易 7。雖然出現(xiàn)了多個分支,但是由于?w?和?y的雙花,只有一個能夠存活。基于 tip 的隨機(jī)選擇(和交易的累積權(quán)重),這兩個分支的其中一個會接收更多的的子交易(獨立的,權(quán)重)直到 tangle 進(jìn)入一個狀態(tài),在這個狀態(tài)里就不可能再合法地附加任一片段。在上面的示例中,用戶可能繼續(xù)與交易?5,6?和?8?相連,但是不會連接到交易?7。因此,交易?y,2,3?和?7?將永遠(yuǎn)也不會成為一個完全確認(rèn)的狀態(tài)。
正如上面所說的,交易?y,2,3?和?7?可能被再次加入 tangle 。只要他們(仍然)是有效的,就會新的機(jī)會被確認(rèn)。交易?2,3?和?7?可能然后被確認(rèn),但是交易?y?仍然無效。
離線 Tangle
tangle 能夠讓用戶在離線的情況下,仍然能夠繼續(xù)構(gòu)建交易,比如在公司內(nèi)部的局域網(wǎng),或者在斷電的情況下與鄰居繼續(xù)交互。如此,依照協(xié)議規(guī)定創(chuàng)建交易,并相互連接。
在上面的案例中,交易?1?和?2?是首先離線的一批。它們與在線 tangle(online tangle) 最后已知的 tip 相連。隨后的交易與往常一樣不斷地附加到后面。一旦有向主 tangle(main tangle) 的提交(commit),離線的子 tangle 就會通過創(chuàng)建交易?8?得到最終確定,它會將離線 tangle 與當(dāng)前在線 tangle 的 tip 進(jìn)行合并。隨后,交易?8?變?yōu)橐粋€合法的 tip,并且可供后面的在線交易進(jìn)行選擇和驗證。在線連接到交易?8?的下一個用戶,將會在他們的驗證路徑上包含所有的離線交易。
請注意,正如上文,只有當(dāng)離線交易跟其他交易一樣,被加入到主 tangle 中,離線交易才會被完全確認(rèn)。如果離線分支中的任何交易與主 tangle 沖突,交易?1?到?8?就不會被確認(rèn)。再一次的,它可能會花費(fèi)隨后幾個交易的時間,直至沖突對于主 tangle 的所有(或者大部分) tip 都可見(也就是上面所說的 “雙花”)。
原文:https://github.com/noneymous/iota-consensus-presentation
https://blog.csdn.net/simple_the_best/article/details/79329840 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的IOTA 交易,确认和共识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Integer overflow, si
- 下一篇: 用 Parity 发送 ERC20 To