首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sendSignedTransaction:仲裁上的无效发送方错误

sendSignedTransaction:仲裁上的无效发送方错误
EN

Stack Overflow用户
提问于 2020-11-17 16:33:10
回答 3查看 1.9K关注 0票数 2

我试图使用我使用私有仲裁块链上的web3从私钥创建的帐户来调用节点应用程序上的智能契约上的方法。我正在使用下面的代码,但是我一直得到错误:返回的错误:无效的发件人”。下面是代码:

代码语言:javascript
复制
const Web3 = require("web3")
const web3 = new Web3(RPC_NODE);

var contract = new web3.eth.Contract(CONTRACT_ABI, CONTRACT_ADRESS);
var myMethod = contract.methods.myMethod(param1, param2);
var encodedABI = myMethod.encodeABI()

const account = web3.eth.accounts.privateKeyToAccount(PRIVATE_KEY);

var tx = {
  from: account.address,
  to: CONTRACT_ADRESS,
  gas: 2000000,
  data: encodedABI
};

console.log("Account Address:", account.address);

account.signTransaction(tx).then(signed => {
  var tran = web3.eth.sendSignedTransaction(signed.rawTransaction);
  console.log("Raw Signed Transaction:", signed.rawTransaction);
});

这个错误是有意义的,因为如果我查看日志,我得到的就是:

帐号: 0xBd55e32CB2559b06511D03E9B37a1c3bfF0f35Cd

'0xf901050480831e84809473341607498eb0648db01ed55c378c3ea227bf6980b8a47d8febab00000000000000000000000000000000000000000000000000000000000000401e4008f33fa1479a536072f9b06e978689c47527593b9a29853e2c708ab75293000000000000000000000000000000000000000000000000000000000000002463663038646139362d363665332d343034312d393630652d3030393838636433383865320000000000000000000000000000000000000000000000000000000078a0700c0b30a6a58016a9621033fe71974eb0cc8721841353b7aa5e42f96d122a7aa023fa6bf121c3c83de1c03674edf90c5bf9ad55165ac10a43965318cdde65e438‘原始交易:

如果我对原始的签名交易进行解码,我会看到:

代码语言:javascript
复制
{
  "nonce": 4,
  "gasPrice": null,
  "gasLimit": 2000000,
  "to": "0x73341607498eb0648db01ed55c378c3ea227bf69",
  "value": 0,
  "data": "7d8febab00000000000000000000000000000000000000000000000000000000000000401e4008f33fa1479a536072f9b06e978689c47527593b9a29853e2c708ab75293000000000000000000000000000000000000000000000000000000000000002463343866323863322d353932622d343930622d616663322d62323262366164303035653900000000000000000000000000000000000000000000000000000000",
  "from": "0xbd55e32cb2559b06511d03e9b37a1c3bff0f35cd",
  "r": "d423912021ff81d53c63da08374f9543df1fca3b1d76f085148310d51afb64f1",
  "v": "77",
  "s": "0a212017b256986ca24f151bd920817ae106624b54c04ea702ffd03ab288205c"
}

如您所见,签名的原始事务中的" from“字段与我使用私钥创建的帐户的地址不匹配。有人能解释一下这种行为吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-23 11:21:32

我通过将正确的chainId添加到tx对象来解决这个问题。

票数 1
EN

Stack Overflow用户

发布于 2020-11-22 10:14:41

上一次我遇到一个类似的问题时,我与privateKey的格式进行了斗争。

根据您使用的web3版本,这种格式可能会对通过privateKeyToAccount创建的帐户产生影响。

我想你缺少了一个0x前缀。确保您的PRIVATE_KEY前面有一个"0x",然后再试一次。

票数 1
EN

Stack Overflow用户

发布于 2021-12-14 17:07:16

您可以通过添加chainId来解决这个问题,就像这个var tx = new Tx(rawTx, {'chain':'ropsten'});

对于您的代码,您可以这样做=

代码语言:javascript
复制
account.signTransaction(tx, {'chain':'ropsten'}).then(signed => {
  var tran = web3.eth.sendSignedTransaction(signed.rawTransaction);
  console.log("Raw Signed Transaction:", signed.rawTransaction);
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64879348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档