Transactions
tx 簽名然後 RLP 編碼然後散列傳輸到區塊鏈供礦工開採嗎?
使用此連結的討論:https ://ethereum.org/en/developers/docs/transactions/
顯然,在交易通過區塊鏈傳輸以供礦工開采之前,交易需要由發送者的私鑰使用橢圓曲線乘法進行簽名。然後,使用來自 JASON-RPC 呼叫的響應組件對它們進行 RLP 編碼
raw
(請參閱連結)。這是否意味著只有
raw
組件通過乙太坊網路傳輸給礦工開採?話雖如此,程序的工作原理如下:
- 發送方和接收方就 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', }
- 發件人使用他的本地設備上的私鑰(使用他的錢包,例如 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)
- 發送者使用 RLP 編碼方案序列化他/她的 tx
const serializedTx = tx.serialize()
- 發件人計算此序列化消息的 keccak-256 雜湊
- 散列的 tx 被發送到乙太坊網路進行探勘
- 一旦被探勘,客戶端軟體經常添加到交易中的其他元數據包括塊號(一旦被探勘並包含在區塊鏈中)和交易 ID(計算的雜湊)。
這個過程是這樣工作的嗎?這是正確的邏輯嗎?這在任何教科書或線上任何地方都不清楚。如果您知道這是參考的地方,請告訴我您的資源。提前謝謝了。
礦工需要了解有關交易的所有資訊。簽名需要使用私鑰進行散列。這並不意味著 RLP 編碼的 tx 需要一起散列,而只是交易 (tx) 的一些組件。令人困惑的是,一旦生成了這些組件(需要散列),就需要再次對已簽名的交易進行 RLP 編碼,以便礦工進行探勘。
因此,答案是沒有 RLP 編碼的交易在傳輸到區塊鏈之前沒有經過雜湊處理。但在傳輸之前,需要對未簽名的交易進行簽名(涉及散列),然後對其進行 RLP 編碼然後傳輸。