廣播手簽原始交易時隨機收到錯誤“無效發件人”
我正在開發一個移動錢包應用程序,我在其中籤署原始交易並嘗試通過https://etherscan.io/pushTx廣播它。
問題是它有時會像預期的那樣給我“gas * price + value 資金不足”的錯誤(因為我的賬戶中的 ETH 為零)。但有時它會因錯誤“無效發件人”而失敗。
以下是使用相同數據(nonce、gas price、value、gas limit、收件人地址、私鑰等)簽署的兩個交易。一個正在工作,但另一個失敗:
資金不足的天然氣價格* +值:f86a80843b9aca0082ea6094380070128936d804f669f588acc54762deb1d8ed872386f26fc100008026a002ea646e10ec345e5412104b5f761b28cfd079a46a8e56aadf70798c1c0d6524a0253968a49677d70948546b68f6ba33ddab85ed37e82a59c86259ee13aa79f207
無效的發件人:f86a80843b9aca0082ea6094380070128936d804f669f588acc54762deb1d8ed872386f26fc100008025a00db144bb2b0fb247c0aa31d6a8d7dc73f834c3c3ba32e1cb53180cb900d23ce1a08d2b86e0adb07455e657409a0d676f6ed7cb90b369be3ce5762726cc30c6ea41
我嘗試使用帶有以下程式碼的 ehters-js 解碼上面的事務,並且都從地址和鏈 ID 生成有效:
函式 decodeMyTx() { var serializedTx = document.getElementById("inputarea").value.trim(); if (!serializedTx.startsWith('0x')) { serializedTx = '0x' + serializedTx; } 嘗試 { var tx = ethers.utils.parseTransaction(serializedTx); var rawTx = { 隨機數:tx.nonce, gasPrice: tx.gasPrice.toHexString() + ' -> ' + tx.gasPrice.toString(), gasLimit: tx.gasLimit.toHexString() + ' -> ' + tx.gasLimit.toString(), 來自:tx.from, 到:tx.to, 值:tx.value.toHexString() + ' -> ' + tx.value.toString(), 數據:tx.data, 鏈:tx.chainId, v: tx.v, r:tx.r, s: tx.s }; document.getElementById("outputarea").value = JSON.stringify(rawTx, null, " "); } 捕捉(錯誤){ document.getElementById("outputarea").value = error.message; } }
任何人都可以對此有所了解嗎?它快把我逼瘋了。
好的。事實證明,這是因為我沒有強制執行低 S 簽名值。