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