以太坊技術黃皮書學習筆記5:交易

以太坊的交易設計比較直接,公式1是對交易的定義:將交易分爲2中情況,一種情況是沒有交易的接收者,即Tt是空集合,如公式2,這種情況代表的是創建一個智能合約的交易;另一種情況是交易的接受者不爲空,一般這種情況指的是一次轉賬或者消息發送,如公式3。

其中Tn:nonce,表示既要的發送者已經發送到交易個數

Tp:gasPrice,以Wei計價的每個gas的價格

Tg:gasLimit,這個交易最多可以消耗的gas的個數,他與gasprice一起防止惡意用戶使用智能合約來攻擊網絡

Tt:交易的接受者地址,160-bit地址,如果是創建智能合約,則此值爲空集合

Tv:交易中涉及的轉賬額度,以Wei爲計價單位

Ti:如果是智能合約的創建交易,則此值表示創建智能合約的代碼,只需要在創建的時候使用一次,如果合約創建成功,那麼以太網絡會返回該代碼對應的body,這個是編譯後的可以被以太網認識和執行的彙編代碼

Tw,Tr,Ts是用來確定交易的發送者的160bit地址的值,是經過加密的數據,下面將會詳細的講解他們的用法

關於交易的數據結構代碼如下,有興趣的同學可以自行學習

以太坊技術黃皮書學習筆記5:交易

交易的自驗證:

以太坊技術黃皮書學習筆記5:交易

在開始介紹以太坊交易驗證之前,首先要列出需要用到的三個公式【1】:公式1,公式2,公式3.其中公式1是根據一個32字節的私鑰,來生成一個64字節的公鑰;公式2是通過私鑰給一個消息e簽名,簽名的的結果是三個值:v,r,s,這三個值的長度分別是1個字節,32字節,32字節,這三個值其實就是前面講到的交易中的簽名信息Tw,Tr,Ts;公式3根據消息e和簽名信息v,r,s可以還原私鑰Pr對應的公鑰Pu

公式4,5,6,7說明數據的有效範圍,4表示消息e是交易T的hash值,5,6,7是r,s,v的取值範圍,其中secp256k1n的值如下:

以太坊技術黃皮書學習筆記5:交易

以太坊技術黃皮書學習筆記5:交易

公式8是對地址的定義,即對於某一私鑰Pr,其地址如何計算,其中公式9表示取hash值的後96到255比特位。我們需要注意的是公式10,其說明的內容是根據私鑰Pr,求出公鑰pu,然後對pu進行KEC運算。公式10和公式1是同一公式。

公式11,12,13,14,15,16,17是爲了解釋如何獲取消息e即h(T)。首先給出的是需要進行hash運算的交易T的定義,當交易T是創建智能合約時Tt是空,如公式15所示,否則按照公式16選擇P的值,同時根據v的值不同,定義不同的交易T的內容,然後根據不同的內容使用KEC算法,得到交易T對應的hash值。公式18和19着重說明的G(T,Pr)這個變量其實與T的內容一致,除了G(T,Pr)的值裏面v,r,s都是經過簽名公式19運算出來的簽名信息,這個簽名使用了私鑰和交易T的hash值,這個公式與公式2一樣。

公式20,21,22,23,25是定義了一個交易T的驗籤函數S(T),通過公式25,將交易T的hash值,與簽名信息進行運算,可以還原出私鑰Pr對應的公鑰Pu,其中公式22,23說明了當Tw屬於集合{27,28}時V0的不同取值。公式24表示對於任意的交易T以及交易發送者的私鑰Pr,如果滿足公式24說明交易的發送者確實是擁有私鑰Pr的地址發出。

這裏需要給出的邏輯是這樣的,我們看到交易T的信息裏面並不包含交易的sender,也就是說交易的發起者可以通過自己的私鑰,對交易T的hash值進行簽名,並且可以將簽名的結果v,r,s放到交易T的信息字段中,在全網中傳播。任何一個得到交易數據和簽名信息的人,可以通過公式20反向推算出交易發送者的地址A,地址A是通過私鑰得出,因此全網只要驗證發送交易的地址與公式20得出的值相同,即可驗證交易的有效性。

本節內容比較簡單,解釋了交易的數據組成以及如何驗證交易的有效性。對源代碼有興趣的同學可以參考下圖:

以太坊技術黃皮書學習筆記5:交易

【1】 https://koclab.cs.ucsb.edu/teaching/ccs130h/notes/ecdsa-cert.pdf

相關文章