Transactions
為什麼簽名交易包含“雜湊”欄位?
使用
go-ethereum
庫簽署交易時,生成的對像如下所示:"tx": { "nonce": "0x7", "gasPrice": "0x77359400", "gas": "0x5208", "to": "0x9ea773969b2622a0a361fd137b088f90f88bd82f", "value": "0x7a120", "input": "0x", "v": "0x47a", "r": "0x1944717416cde8sa47ed607325bfb85a40618da4a6dab9c6e1636609612deddd", "s": "0x5480b689ffbab6o7dc58ae5d04369c3841a4fcbc95edecf7cf8608b9bf818e9c", "hash": "0x997d39754493fee0581985667s89874a83c8d93b29e0e8802831781b140b87d2" }
我理解交易驗證過程的方式是,公鑰、交易的雜湊和簽名的r、s、v值都用於驗證交易確實由使用者的私鑰簽名。
我似乎無法理解的是為什麼簽名的交易對象通常包含一個
"hash"
欄位,例如https://web3js.readthedocs.io/en/1.0/web3-eth.html#signtransaction即我的假設是,如果您非常反對提供的雜湊值,那麼您並沒有真正地接受任何東西(雜湊值可能會受到損害)。我的理解是,您總是希望自己對交易進行雜湊處理,以驗證這確實是由使用者私鑰簽名的正確雜湊。
我錯過了什麼?
這是整個交易的雜湊值(包括簽名在內的所有內容)。它不用於驗證(由簽名完成)。相反,它充當事務的全域唯一標識符,例如,它是您作為參數輸入的內容:
web3.eth.getTransactionReceipt('txn-hash')