Javascript

如何解碼交易以驗證其在 Javascript 中的簽名?

  • April 24, 2022

我注意到有可能使用錯誤的私鑰簽署交易。我採用了在https://github.com/ethereumjs/ethereumjs-tx找到的以下範例

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',
}

// The second parameter is not necessary if these values are used
const tx = new EthereumTx(txParams, { chain: 'mainnet', hardfork: 'petersburg' })
tx.sign(privateKey)
const serializedTx = tx.serialize()

此程式碼確實簽署了交易,但我如何驗證交易是否已正確簽署?

如何使用或解碼serializedTx並驗證簽名是否正確?

此程式碼確實簽署了交易,但我如何驗證交易是否已正確簽署?

如何驗證簽名是否正確?

web3有一個estimateGas方法,你可以用它來估計交易所需的gas,如果簽名不正確,這意味著交易將失敗,那麼它只會拋出一個錯誤。

還有可能以程式方式獲取與登錄地址關聯的私鑰(使用 Metamask)嗎?

出於安全考慮,privateKey 顯然是不可用的。如果您可以通過這種方式訪問元遮罩帳戶,那將是一個嚴重的安全漏洞。

當然,您可以使用任何您想要的私鑰簽署交易。

但是當您最終執行它時,該交易所需的氣體(以及您在該value欄位中設置的乙太數量)將從與該密鑰對應的帳戶中提取。

而如果你只是選擇一個隨機密鑰,那麼這個賬戶將有 0 個 Ether,幾乎 100% 的機率,這意味著交易隨後將因餘額不足而失敗。

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