Javascript
如何解碼交易以驗證其在 Javascript 中的簽名?
我注意到有可能使用錯誤的私鑰簽署交易。我採用了在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% 的機率,這意味著交易隨後將因餘額不足而失敗。