Transactions

為什麼簽名交易包含“雜湊”欄位?

  • April 17, 2018

使用go-ethereum庫簽署交易時,生成的對像如下所示:

"tx": {
       "nonce": "0x7",
       "gasPrice": "0x77359400",
       "gas": "0x5208",
       "to": "0x9ea773969b2622a0a361fd137b088f90f88bd82f",
       "value": "0x7a120",
       "input": "0x",
       "v": "0x47a",
       "r": "0x1944717416cde8sa47ed607325bfb85a40618da4a6dab9c6e1636609612deddd",
       "s": "0x5480b689ffbab6o7dc58ae5d04369c3841a4fcbc95edecf7cf8608b9bf818e9c",
       "hash": "0x997d39754493fee0581985667s89874a83c8d93b29e0e8802831781b140b87d2"
   }

我理解交易驗證過程的方式是,公鑰、交易的雜湊和簽名的rsv值都用於驗證交易確實由使用者的私鑰簽名。

我似乎無法理解的是為什麼簽名的交易對象通常包含一個"hash"欄位,例如https://web3js.readthedocs.io/en/1.0/web3-eth.html#signtransaction

即我的假設是,如果您非常反對提供的雜湊值,那麼您並沒有真正地接受任何東西(雜湊值可能會受到損害)。我的理解是,您總是希望自己對交易進行雜湊處理,以驗證這確實是由使用者私鑰簽名的正確雜湊。

我錯過了什麼?

這是整個交易的雜湊值(包括簽名在內的所有內容)。它不用於驗證(由簽名完成)。相反,它充當事務的全域唯一標識符,例如,它是您作為參數輸入的內容:

web3.eth.getTransactionReceipt('txn-hash')

引用自:https://ethereum.stackexchange.com/questions/45892