Grin 中的交易詳解
編者按:本文來自以太坊愛好者編者按:本文來自Brandon Arvanaghi以太坊愛好者
(ID:ethfans),作者:
編者按:本文來自
以太坊愛好者
以太坊愛好者

,翻譯&校對: stormpang & 閔敏,經授權發布。
圖片描述
編者註:Grin 是一種基於MimbleWimble 協議建立的新型密碼學貨幣。本文是一個詳細的教程,逐步解釋了MimbleWimble 協議中交易是如何構造出來,又如何運用密碼學,在不洩露交易雙方地址和交易額的條件下,保證貨幣沒有雙花,保證只有貨幣所有者才能花費貨幣。
本文旨在分享Grin 交易的運行原理,幫助大家理解Grin 交易是如何實際運行的。
圖片描述
Grin 交易的輸出是一個Pederson 承諾,採用如下形式:
圖片描述
-一個Grin 輸出就是一個Pedersen 承諾。 -
Perdersen 承諾是一種隱藏信息的好方法。如果你是第一次聽到Perdersen 承諾的概念,那麼每當你看到這個詞的時候,就想想“屏蔽值(shielded value)” 的概念(譯者註:就是別人都看不見這個值是什麼)。
以下這段文字摘自Grin 的wiki (了解Grin 交易運行原理的最佳入門資料)。
r 是被用作致盲因子的私鑰,G 是橢圓曲線上的一個固定點,它們的乘積r * G 就是r 在這條曲線上的公鑰。

v 是輸入值或輸出值,H 是橢圓曲線上的另一個固定點……
若想更深入地研究密碼學可以閱讀ECC primer 這篇博客。簡而言之,要花費一筆Grin 輸出,必須同時知道致盲因子(r) 以及Grin 交易金額(v)。這兩個值是不可能通過破解承諾倒推得出的。因此,只有提前知道這些數值才能花費Grin 的輸出。

假設這個輸出包含40 Grin,使用的致盲因子為20 。
(插播:實際發送的Grin 數量是原子單位1 NanoGrin 的整數倍。這裡為了簡單起見,我使用整數個Grin 來舉例):
圖片描述
二級標題
-Grin 輸出(位於“commit” 列)。 -

再強調一遍,從該輸出推出“20” (致盲因子)或“40” (Grin 數量)是不可能的。
圖片描述
假設我們剛才提到的輸出屬於Alice。現在,Alice 想要將這些40 個Grin 中的25 個發送給Bob 。為了簡單起見,咱們先忽略給礦工的交易手續費。

如果你有一張5 美元的鈔票,買了3 美元的東西,會得到2 美元的找零。比特幣系統中的交易就是這樣運作的,Grin 也不例外。如果Alice 想從她的未花費交易輸出40 Grin 中拿出25 Grin 發送給Bob ,她在這筆交易中還要創建一個新的未花費交易輸出,將餘下的15 Grin (找零)打回自己的地址。
圖片描述
這筆交易中有15 Grin 將回到Alice 手中,意味著只有她能夠控制並且再次花費這15 Grin 。換句話說,必須杜絕Bob 花費Alice 零錢的可能性。為此,Alice 必須為她的找零輸出創建一個新的致盲因子。假設Alice 選了34 。

Alice 同時知道r (她的找零輸出的致盲因子)和v (找零的Grin 數量),就擁有了創建零錢輸出(co)所需的一切信息,而且將作為一個輸出記錄在區塊鏈上。 Alice 即將向Bob 發送的25 Grin 輸出也是如此。
圖片描述
圖片描述
正如我前面所提到的,只有知道了輸出使用的致盲因子,才能花費這個輸出。 Alice 知道她想花費的輸出的致盲因子(20) ,但是她需要通過一種方式向Grin 系統中的其他人證明她知道。"這就是為什麼她需要創建一個完全獨立的計算,求解她的致盲因子總數。這就要把Alice 剛剛為她的找零輸出創建的致盲因子(34),減去她想要花費的輸出的致盲因子(20)。

-Alice 的致盲因子總數。 -
圖片描述
rs (s 表示發送者,即Alice )代表Alice 的致盲因子總數,在這個例子裡是14。 (插播:我有意忽略了內核偏移量(kernel offset)。)
Alice 將以下信息發送給Bob 。實際上,Grin 數據並不會被分為“元數據(Metadata)” 和
圖片描述
數據(Data)”字段,但是為了清晰起見,本文特意將二者區分開來。
圖片描述
-Alice 在Grin 交易第一步需要發送給Bob 的所有信息。 -
元數據(Metadata)字段:
發送數量(Amount to send):Alice 想要發送給Bob 的Grin 數量(這個例子裡是25 )。
交易唯一ID (TX UUID): Alice 和Bob 在來回發送數據時使用的唯一標識符,用於標識此交易。
交易費(TX fee): 交易費(在本教程中咱不討論了)。
交易輸入(TX Inputs): Alice 將單個或多個未花費輸出用作發送給Bob 的交易的輸入。
Bob 的操作

ks • G: Alice 的nonce ks 與生成點G 相乘,得到的值就是這個nonce 的Pedersen 承諾。
圖片描述
Bob 的操作

當接收到Alice 發送的信息後,Bob 將TX fee 和lock_height 這兩個變量連起來產生M(即交易的“消息(Message)”)。
圖片描述
圖片描述
圖片描述
交易消息。
圖片描述

-交易的Schnorr 挑戰。 -
交易消息。

圖片描述
圖片描述
Bob 通過e 為該交易生成自己的Schnoor 簽名,即sr(r 代表接收者)。雖然sr 是Bob 的完整簽名,但是我們稱其為Bob 的部分簽名,因為該簽名最終要與Alice 的部分簽名一同創建整個交易的簽名。
-該交易中Bob 的部分簽名。 -
圖片描述
當Alice 最終收到sr 時,是無法倒推出kr 或rr 的實際數值的。 Bob 將以下內容髮送給Alice:
圖片描述
按照順序,發送的內容包括:

sr: Bob 的部分簽名。
rr • G: Bob 即將收到的25 Grin 的致盲因子所對應的承諾。

圖片描述
圖片描述
相信你還記得,Bob 的部分簽名sr 包括以下內容:
-該交易中Bob 的部分簽名。 -
圖片描述
基於我們先前描述的橢圓曲線的性質,Alice 在等式兩邊同時乘以生成點G 後,該等式依舊成立。
圖片描述
因為Alice 等於已經從Bob 處收到了kr • G (Bob 所選的nonce 對應的承諾)與rr • G(Bob 即將收到的25 Grin 的致盲因子所對應的承諾),並且已經在本地計算出了e,她只需要簡單地將sr 乘以生成點G ,確保與等式右邊的值相等,就能夠驗證Bob 的部分簽名了。

Bob 知道他將收到的Grin 數量(25)。
圖片描述

Bob 知道他的nonce 值。
……至此,Alice 在不知道Bob 選擇的nonce 和致盲因子的情況下驗證了Bob 的部分簽名。
圖片描述
之後,Alice 生成她自己的部分簽名:
-該交易中Alice 的部分簽名。 -

交易簽名由Alice 和Bob 的部分簽名之和以及他們各自的nonce 所對應的承諾之和組成。
圖片描述
Alice 和Bob 的nonce 所對應的承諾之和(他們彼此都不知道對方的nonce 值)。
其中,s = ss + sr,k = ks + kr。
合併之後,交易簽名可以表示成如下形式:
交易完成
圖片描述
-交易簽名-
(34•G) + (15•H) + (11•G) + (25•H) - (20•G) - (40•H) = (25•G) + (0•H)
其中,s = ss + sr,k = ks + kr。
記住這個簽名—— 你很快就知道它的意義了。
數字貨幣需要“記憶” —— 也就是說,當你向某個人發送一筆錢的時候,你不能把同一筆錢發送給其他人。通過使用Grin,我們隱藏了Grin 的發送數量以及接收方。那麼,我們怎麼證明這筆錢沒有被“雙花” 或憑空造出來的呢?

3 美元給收銀員(輸出)+ 2 美元找零返還給我(輸出)- 5 美元鈔票(輸入) = 0
圖片描述
如果一筆Grin 交易的輸出之和減去輸入之和後能夠產生一個有效的橢圓曲線公鑰,那麼你就能知道v 值一定被抵消了。如果等式右側不是某些已知數值n 的n•G + 0•H 形式,你就能知道這筆交易是非法的了。這意味著,要么輸出總量大於輸入總量(例如,你支付了5 美元,收銀員收取了3 美元,卻倒找了你10 美元),要么輸入總量大於輸出總量(例如,你支付了5 美元,收銀員收了3 美元,但是沒有找你錢)。

圖片描述
圖片描述

圖片描述
圖片描述
sr•G + ss•G = (kr • G) + (ks • G) + (e • (rr•G + rs•G))
還記得吧,當你把Bob 的部分簽名的等式兩邊同時乘以G 後,會得到如下等式。
-等式兩邊同時乘以生成點G 後Bob 的部分簽名-
圖片描述
sr•G + ss•G = (k•G) + (e • (r•G))
同樣,當你把Alice 的部分簽名的等式兩邊同時乘以G 後,會得到如下等式。
sr•G + ss•G = (k•G) + (e • (25•G))
-等式兩邊同時乘以生成點G 後Alice 的部分簽名。 -
或:
如果把兩個等式相加會發生什麼呢?你將得到:
其中, rr 是Bob 的致盲因子,rs 是Alice 的致盲因子總數, rr•G + rs•G 等於(rr + rs)•G 。
進一步簡化這個等式,我們會得到:
那麼接下來只需檢驗等式兩邊是否相等就行了。
二級標題
記住,等式中的所有變量(部分簽名之和、e 中各部分、過剩致盲因子所對應的承諾、nonce 之和對應的承諾)對於所有人都是可見的,因此任何人都能進行驗證。我們可以在既不知道Alice 的致盲因子也不知道Bob 的致盲因子的情況下驗證該交易。通過將他們的部分簽名相加,並驗證其總和是否等於過剩致盲因子對應的承諾,我們能夠證明:
Alice 和Bob 在創建該交易的時候,都知道各自輸出的致盲因子。這意味著新他們能夠花費交易產生的新輸出,使得該輸出不被鎖定。
二級標題
以下信息將存儲在交易內核中:
總結
二級標題
總結
該交易的交易費(transaction fee)與鎖定高度(lock_height)。 (插播:如果是Coinbase 交易,不會包含這兩部分信息)。
二級標題
總結
二級標題
總結


