Transactions

tx 簽名然後 RLP 編碼然後散列傳輸到區塊鏈供礦工開採嗎?

  • September 7, 2021

使用此連結的討論:https ://ethereum.org/en/developers/docs/transactions/

顯然,在交易通過區塊鏈傳輸以供礦工開采之前,交易需要由發送者的私鑰使用橢圓曲線乘法進行簽名。然後,使用來自 JASON-RPC 呼叫的響應組件對它們進行 RLP 編碼raw(請參閱連結)。

這是否意味著只有raw組件通過乙太坊網路傳輸給礦工開採?

話雖如此,程序的工作原理如下:

  1. 發送方和接收方就 tx 達成一致並設置 gas 價格和限制等。
const EthereumTx = require('ethereumjs-tx').Transaction 
const privateKey = Buffer.from(   'e331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109',   'hex', )
const txParams = {   nonce: '0x00',   gasPrice: '0x09184e72a000',   gasLimit: '0x2710',   to: '0x0000000000000000000000000000000000000000',   value: '0x00',   data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057', }
  1. 發件人使用他的本地設備上的私鑰(使用他的錢包,例如 Metamask)對 tx 進行簽名——這可以在 readme.md 中描述
// The second parameter is not necessary if these values are used
const tx = new EthereumTx(txParams, { chain: 'mainnet', hardfork: 'petersburg' })
tx.sign(privateKey)
  1. 發送者使用 RLP 編碼方案序列化他/她的 tx
const serializedTx = tx.serialize()
  1. 發件人計算此序列化消息的 keccak-256 雜湊
  2. 散列的 tx 被發送到乙太坊網路進行探勘
  3. 一旦被探勘,客戶端軟體經常添加到交易中的其他元數據包括塊號(一旦被探勘並包含在區塊鏈中)和交易 ID(計算的雜湊)。

這個過程是這樣工作的嗎?這是正確的邏輯嗎?這在任何教科書或線上任何地方都不清楚。如果您知道這是參考的地方,請告訴我您的資源。提前謝謝了。

礦工需要了解有關交易的所有資訊。簽名需要使用私鑰進行散列。這並不意味著 RLP 編碼的 tx 需要一起散列,而只是交易 (tx) 的一些組件。令人困惑的是,一旦生成了這些組件(需要散列),就需要再次對已簽名的交易進行 RLP 編碼,以便礦工進行探勘。

因此,答案是沒有 RLP 編碼的交易在傳輸到區塊鏈之前沒有經過雜湊處理。但在傳輸之前,需要對未簽名的交易進行簽名(涉及散列),然後對其進行 RLP 編碼然後傳輸。

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