Raw-Transaction

廣播手簽原始交易時隨機收到錯誤“無效發件人”

  • October 17, 2018

我正在開發一個移動錢包應用程序,我在其中籤署原始交易並嘗試通過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 簽名值。

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