The Tangle: 圖解介紹
第四章:確認、餘額與雙花
目前我們提到了 DAG、隨機漫步與不同的 tip 選擇機制,這週我們要開始談到錢,是時候解釋「交易 A 確認交易 B」是什麼意思了。
如同系列文第一篇就提到的,每筆交易所包含的訊息要像是「Alice 給 Bob 10 IOTAs」。驗證者的工作就是要確認 Alice 真的有 10 IOTAs 能給錢。
這時你可能會問這些 IOTAs 從哪來的?答案是這些錢是從 tangle 上第一筆交易就全部產生出來的,這筆交易被稱之為創始交易,從這之後沒有任何的 IOTAs 在被產生出來。在創始交易中的 IOTAs 按照投資金額比例分配到最一開始參與這項計畫的投資者中。在這之後他們將他們的 IOTA 再賣給其他人,網路結構變因此建立起來。
回到 Alice 與 Bob 的問題,我們先來看個簡單的例子,下圖方匡代表一筆交易。為了方便起見,我們同時將 Alice 與 Bob 在交易前後的餘額顯示出來。我們看到 Alice 一開始有 10i,然後轉給 Bob,所以之後 Bob 就有 10i 而 Alice 沒有任何餘額。
這時有個人叫 Charlie 想要進行一筆交易,他跑了 tip 選擇演算法候選到了 Alice 的交易要進行驗證。Charlie 必須確認 Alice 是真的有 10i 給 Bob 的,他必須仔細驗證,不然驗證錯交易的話,它自己的交易也不會受到確認!
要絕對確定的話,Charlie 需要列出所有 Alice 的交易直接或間接驗證到的交易,往前一直到創始交易。這樣他有可能像下面這樣列出一長串:
- 創始交易產生 15i
- 創始交易給 Bob 2i
- 創始交易給 Alice 8i
- 創始交易給 Charlie 5i
- Charlie 給 Donna 3i
- Bob 給 Alice 2i
當然這只是其中一種方式,其實只要能確定一開始 Alice 有 10i 且 Bob 則是 0 就可接受。Charlie 還得確定系統中所有帳戶的餘額不少於零,不管是在交易「之前」還是「之後」,只要有餘額為負的,那他的交易就是無效。
我們來看個 Alice 發送比她現有餘額還多錢的例子:
Alice 只有 10i 卻付給 Bob 100i,任何確認這項交易的交易在未來網路中都會被視為無效,因為餘額為負是無法被接受的。
當我們確認兩筆交易而非只有一筆時,會發生更有趣的情況:
Bob 確認 Alice 的交易是正確無誤的,因為她有足夠的錢支付不讓自己餘額小於零。
不過要是支付的錢超過她所擁有的呢?如下圖所示,這樣的狀況下 Bob 無法確認 Alice 這兩筆交易,因為這會讓 Alice 的餘額變成負的。如果 Bob 硬要確認的話,他就違反了 IOTA 協定,之後不會再有人確認他的交易。
這種狀況被稱之為 ,因為 Alice 花了同樣的金額兩次。她並沒有違反協定是因為每筆獨立的交易她都有足夠的錢,也許她不是故意要雙重支付而是不小心將交易發送兩次。她會讓 tangle 產生分支無法再收束回來。這對誠實的使用者造成問題:哪條分支是我們確認的?
解決此問題的辦法就是我們上週提到的加權漫步,最終會有一條分支的權重大於另一條,而權重小的分支會被遺棄掉。這也說明了一筆交易產生時無法馬上就確認完成,就算有一些人驗證但它還是有可能位在會被遺棄的分支中。要確保你的交易完成確認的話,你必須等待它的驗證層級比例夠高,這會是我們下週的議題。
一如往常要是你有問題的話歡迎到 Discord 聯絡 @alongal#3938。