區塊鏈交易驗證的一點心得

以太坊交易驗證spa

一直以來我都誤覺得以太坊交易驗證整個是放進虛擬機(EVM)來執行的。最近才意識到在執行以前須要先驗證簽名並且是必須先驗證簽名,既:設計

1. 驗證簽名。blog

2. 虛擬機執行交易。虛擬機

在說此設計的必要性以前有個你們都共識的是:以太坊

交易執行失敗是須要扣手續費的,然而由於簽名不經過的交易是不能扣手續費的,緣由:im

簽名不經過是由於沒有用合法的私鑰或者簽名的信息和交易信息不一致,假若簽名不經過還須要扣手續費,那麼任何人均可以用不合法的簽名僞造某個地址發交易,這樣一來那個被僞造的地址在什麼都沒作的狀況下就會被惡意扣手續費。所以簽名不合法不能扣手續費d3

 以下圖,在AsMessage中對簽名身份進行了驗證,並無由於不合法的簽名而計算消耗的gas。margin

 

 

然而,EVM執行過程當中是會計算手續費的,並把交易改變的帳戶stateObject對應的狀況(好比說扣錢加錢)放進stateDB的,因此咱們要在EVM計算以前就驗證交易簽名。假若把簽名放在最後一步驗證,假若簽名驗證不經過,根據以上「簽名不扣費原則」,那麼須要stateDB回滾此交易改變的狀態,無疑這種方案是浪費礦工計算量的並且麻煩。因此仍是在EVM以前就驗證簽名。img

相關文章
相關標籤/搜索