# Transactions, Confirmation And Consensus #### No issue and tolerated by the network ![](https://i.imgur.com/9vEGLwl.png) * Transaction **a** reference l * Transaction **a** reference h * Transaction l reference h #### Validation - 1 ![](https://i.imgur.com/kQqFTVq.png) 添增一個新的交易 (tx. 1) 進入 Tangle,該比交易需要驗證(validate)兩個 tips,驗證的定義為: * 檢查 tips 的簽名 (checking the tip‘s signature) * 檢查 tips 的工作證明(PoW (little “Proof of Work” as spam protection)) * 確認 tips 沒有與先前的交易衝突(注意 Validation path) #### Validation - 2 ![](https://i.imgur.com/8VEqPha.png) 交易 2 會間接 validate 交易 1 validate 過的交易。 #### What did we learn? ![](https://i.imgur.com/e67yJtL.png) 根據上圖,我們會發現有些 transaction 只會被 validate 一次而已,但有些是兩次。(深色部份為 tx.1 與 tx.2 validate 的 transaction 交集。)但這些 transaction 或多或少都被 validate 1 次以上,這是確定的。 因此,我們看到交易 **n** 因為被 validate 了 2 次,所以從 **unconfirmed** 狀態轉為 **Fully confirmed** 狀態(顏色由藍轉綠)。 What did we learn ? * 沒有人需要驗證所有的交易!每個新的交易只需要驗證一部份的 Tangle 最終會因為持續有新的交易產生而間接驗證整個 Tangle. * 一旦一個交易的深度 (deeps) 到達一定的程度,「每一個」新的交易都會間接驗證該筆交易,我們可以這筆交易得到很高的確定性。 * 你不需要真的檢查所有 tips 的 parents 來進行確認,而是透過隨機採樣。 #### Confirmation level. ![](https://i.imgur.com/RfFdRnc.png) 經由上圖,我們可以看到有些交易被驗證了許多次。 如果您要新增一筆「速度比價值重要」的交易時(例如奈米交易,或是 0 token 交易),您可以會選擇 confirm level 比較高的交易做驗證(因為這樣做需要間接確認的父交易比較少)。例如你想要一個大致是 75% 確認度的交易,你可以選擇 l, o, t 作為 tips. #### A slow transaction “5” ![](https://i.imgur.com/JOwNnTU.png) 理論上有可能會出現一個「緩慢」的交易 5,由上圖得知,交易 5 原本要確認的交易 q, s,在交易 5 被 attach to tangle 之前已經被交易 w 所驗證(原因可能是因為比較慢的 POW 或是廣播)。我們知道交易 5 是一個新的 tips 但他導致交易 n 「變為沒有被所有的 tips 所直接/間接驗證」(請注意看交易 5 的 Validation path)。但交易 n 仍保有 4 到 5 個以上不等的交易驗證他(在現實的 Tangle 狀態中應該是成千上萬個。)所以交易 n 還是有很高的可靠性。 請注意,交易 5 的出現「並不會」翻轉什麼,不會將一個 confirmed 的 transaction 改變為 unconfirmed,充其量只是將 100% 的確認度降低為 99% 而已。 #### Conflicting transactions ![](https://i.imgur.com/Uel6dLa.png) 假設上圖中的交易 w, y 為兩個衝突交易 (double spend),因為種種原因沒有被後續的交易檢查出來(可能 tips selection 沒選(驗證)到,或是由於廣播延遲導致 w, y 出現的時間點比較晚。),例如交易 1 跟交易 2 的 Validation path 就沒有交集,自然也不會驗證到 w, y 這兩筆衝突交易,因此這筆 double spend 得到了第一次的確認(驗證)。但或快或慢,一定會出現一筆交易 5 驗證到這筆衝突交易。這時交易 5 會重新做 tips selections. 而附加在被視為衝突交易的其他 transactions,POW 需要重做。 #### Weight ![](https://i.imgur.com/HTja5Rx.png) 在上一個章節中,原本要驗證 tx. 1 和 tx. 2 的交易 5,因為衝突交易的關係改選擇交易 1 跟交易 4,但有另外一筆交易 7,選擇了交易 2 和交易 3,這產生了某種型態的分支 (branch)。但由於 w, y 為衝突交易的原因,交易 5 與 7 只有一筆交易得以生存。這時選擇機制為「權重」,由上圖得知 w 的權重稍大(位置比較後面),所以 y, 2, 3, 7 將永遠不會進入完全確認 (fully confirmed) 的狀態(會一直 unconfirmed 下去)。 然而,y, 2, 3, 7 仍可透過 re-attach to the Tangle 重新得到確認,但 y 將永遠因為衝突交易而失敗。 #### Offline Tangle ![](https://i.imgur.com/wecnTcb.png) Tangle 允許用戶在離線環境下交易(例如某些企業的內網或是在網路中斷但仍可與鄰居連線的情況下)。 由上圖得知,交易 1 與 2 為第一筆在離線狀態下完成的交易,而 1, 2 隨之而來的交易也都平常規則進行。在恢復連線後,他們將會被連接到 Tangle 最新的 tips 上 (tx. 8)。交易 8 的角色是將離線 subTangle 與 mainTangle 合併。 請注意!離線交易中的所有交易都是 unconfirmed 的,必須一直到連線恢復,與 mainTangle 做結合之後才有機會被 fully-confirmed,然而一旦連線恢復之後,off Tangle 中的任何交易被驗證為衝突交易,那麼 1~8 的交易將不會被確認。