交易、確認與共識
Tangle 初始狀態
與區塊鏈技術不同,IOTA 並不是建立一連串的靜態區塊,裏頭包含數筆交易。相反地,每筆交易都能夠自己附加至 Tangle 並與其他筆交易平行存在。以下將敘述 IOTA 如何加入交易、驗證有效以及成立共識。
上圖顯示為一個 Tangle 的範例並會在接下來文章接續舉例說明。在此例中,綠色的交易為已被網路幾近高度確認(Fully Confrimed)。往下會再解釋為何如此,如同區塊鏈一樣和機率有關,所以不會是絕對確認是 100%。而藍色則為尚未確認(Unconfirmed),只有被部分 tips 確認。至於灰色以及之後出現的黃色代表的是還沒被驗證的 tips。最後紅色則是衝突或是無效的交易。
在上圖中的交易“α“為我們例子中所謂不尋常的交易,它選擇的交易為„h“和„l“。因為交易„h“已經被交易„l“驗證,而“α“選擇了一個 tip (“l”)以及另一筆在該時間點已經不是 tip 的交易(“h”)。不過這樣的行為目前不會造成問題,在網路中尚能容忍。
新增交易
現在我們欲加入一筆交易至 Tangle 的話,使用者必須隨機選擇兩筆 tips(尚未確認的交易)然後驗證它們。驗證要做的也就是使用者檢查 tip 的簽章(signature)、PoW (簡單的工作證明(Proof of Work)作為防止濫發)以及確認 tips 沒有與先前交易衝突。如果選擇的 tips 合理的話,使用者便將新的交易連接到它們。
被選中的 tips 所直接或間接連接的交易與目前驗證的程序沒有關係,其他或者之後的交易會逐步處理這些驗證程序然後將它們編織到 Tangle中。
接續的交易
在此同時(之前或之後沒有影響),另一位使用者也可能加入了自己新的交易至不同的位置。它選擇了“z”和“y”,這樣一來便驗證了非常多筆與交易„1“驗證過的相同交易(“a”到“k”、“m”和“n”),另外也驗證了交易交易„1“沒有驗證到的部分(“l”、“o”、“r”、“t”、“v”、“y”和“z”)。
Tangle 目前的狀態
將交易“1”與“2”驗證的路徑標示起來後,我們可以看到有些交易只有被其中一方驗證,而有些則被雙方都驗證。被目前所有 tips 驗證且確認的交易就會被視為完全確認,因此交易“n”就被推進更深層的tangle裡,在此例中變成綠色。
目前為止我們理解了甚麼?
沒有人需要看見並且驗證全部的交易,每位使用者只需要選擇並驗證兩項交易,同時也驗證了他們之前連接的交易。如此一來,雖然他們只各自驗證了一部份的 tangle,但隨著其他使用者選擇並驗證不同的 tips 和路徑,完整驗證且達成共識的tangle就會建立起來。
隨著時間推進,一旦有筆交易足夠深入 tangle 的話,連接它與任一個最新 tip 的路徑將絕對存在。這樣的交易就會被視為 fully confirmed,而且它會持續被更新的交易重新驗證和重新認同。我們便會視其為受所有使用者與機器高度認同的交易。
欲檢查有效性,我們僅需檢查該交易有無直接或間接地被所有 tips 驗證(或者是有一定的比例確認,像是 80%),而不用再去重新驗證或是做類似的手段。備註:實際圖形中可能會有上千個 tips,沒有必要檢查它們前面所有的交易,而是透過統計樣本進行隨機採樣。
順道一提我們不會因為出現交易「n」而使得 tip 變少,以下將會顯示出更多 tips 的樣本。
確認層級
上圖列出更多 tip 來做為舉例,每個 tip 驗證的路徑都用藍底標示出來。由此一來便能清楚看見每個交易受到多少 tips 驗證以及其受到確認的層級。
賣家是能夠自己去決定確認層級的比例。如果交易速度的重要性遠大於交易的價值(像是微交易支付或是零元交易),或者發送者是自己的朋友,也許你可以將確認層級只設為 75 %。如果是此例選擇 75%(也就是四分之三的 tips)的話,交易「l」、「o」、「t」也能夠視為交易確認。
傳遞延遲
理論上有可能會因為 PoW 較慢或是傳輸延遲而出現一個緩慢的交易「5」,由上圖顯示的話交易「n」就不會被所有 tips 確認,但是它的確認比例為五分之四仍然算是很高(實際情況的話會有上千個 tips,可能是千分之九百九十九)。這邊想表達的是所謂的高確認度代表的是相當高的確認機率,就如同區塊鏈技術得確認一樣。在區塊鏈中每個區塊會增加交易的可靠度。
所以這邊出現的交易「5」不會將原本交易的確認狀況從「已確認」變成「未確認」,它只是變更了該交易的確認層級(假設有 100 個 tips 就會是從 100% 變成 99%)。一旦之後有更多交易驗證(以此圖為例)交易「1」到「5」的話,交易「n」就會再次被全部的 tips 所確認。所以在交易持續進入 tangle 的狀況下,這樣確認層級的變動影響是非常的微小的。
而且所謂 100% 的確認層級實際上是非常難達成的,永遠會有一些 tips 因延遲或自主變因而沒有遵從協定或是驗證到無用的交易。
雙重支付攻擊
現在假設有使用者將兩個會衝突的交易「w」與「y」個別加到 tangle 不同的位置上,而隨後的使用者可能都只將其中一個交易加到他們驗證的路徑中(依照他們 tip 的選擇又或者是因為傳遞延遲)。舉例來說,交易「1」和「2」在選擇 tips 驗證時,它們自己的路徑並不會產生衝突所以會確認之前的交易。因此這時雙重支付的攻擊看似成功受到確認了,但是透過時間的演進遲早會有交易會去驗證到這兩條衝突的交易路徑。舉例來說,交易「5」在選擇 tips 後就會發現衝突而沒辦法同時連到所選的 tips。這時它重新選擇 tips 直到所選擇的交易不會再產生衝突為止,藉此才能算是驗證完成有效的交易。
按照 tip 的選擇和 tangle 的成長演進,在衝突解決之前「w」與「y」後面可能仍會有更多使用者驗證它們。而依照多少使用者驗證新的交易,最後「w」與「y」其中一個會被視為確認而另一個會被遺棄。而被遺棄的交易其後所有的交易(它們看不出有產生衝突)也會因此被遺棄。不過它們不會消失仍然存在可以檢查的到,要是發送方發現交易遲遲沒有受到確認可以重新附加到 tangle,如此一來便能重新進行驗證。重發的交易等同於是一筆新的交易,也就是 PoW 和 tip 的選擇及驗證都得重作,不過並不需要產生新的簽章。
雙重支付解法
在上面的例子中,使用者發出的交易「5」嘗試連接到 tip「1」和「2」,但由於產生衝突所以重新選擇,然後我們假設它最後選擇 tip「1」和「4」。接著另一個使用者發出交易「7」選擇了 tip「2」和「3」。這時會出現分支,不過會因為「w」和「y」的雙重支付衝突讓最終只有一條能存活。按照 tips 的隨機選擇(以及交易累積的權重),其中一個分支會因自身權重而接收到較多的子交易,而最終會使得 tangle 上無法再將交易合理地附加到另一條分支。以上圖為例,使用者能夠附加到交易「5」、「6」和「8」但無法再連接到「7」。所以最後交易「y」、「2」、「3」和「7」將永遠無法成為確認狀態。
不過仍如同上面所述,交易「y」、「2」、「3」和「7」仍然可以重新附加到 tangle 上。只要這些交易(如果)是合理的話,它們仍然有新的機會受到完全確認。所以交易「2」、「3」和「7」還是能受到確認,不過交易「y」則永遠無法驗證成功。
離線 Tangle
Tangle 允許使用者在離線時建立交易(比如說公司內網或是在斷線時與鄰居互動),產生交易和連接的方式一樣按照協定所做。
以上圖為例,交易「1」和「2」是第一筆離線交易,它們連接到線上 tangle 最末端的 tips,隨後的交易一如往常附加上去。當需要連回主 tangle 時(或者斷線後能夠連回時),離線的 sub tangle 會被連接到交易「8」。交易「8」所扮演的角色就是將離線 tangle 接回線上 tangle 的新 tip。之後,交易「8」會變成合理的 tip 且能夠受到隨後新的線上交易選擇並驗證。後面附加到「8」的使用者將會將離線 tangle 中所有的交易納入自己的驗證路徑。
請注意前文曾提到的,離線交易和其他交易一樣都必須連接回主 tangle 才能受到完全確認。如果離線分支中的交易會與主 tangle 產生衝突的話,交易「1」到「8」是不會被確認的。衝突解決的方式也是一樣會透過一些隨後的交易,直到衝突被所有(或大部分)主 tangle 的 tips 所發現(如同上面雙重支付問題所述)。