我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”

Posted

技术标签:

【中文标题】我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”【英文标题】:i get an error: "MetaMask - RPC Error: Error: Error: [ethjs-rpc] rpc error with payload" 【发布时间】:2019-10-24 03:26:43 【问题描述】:
    我从我的 javascript 发送交易 Metamask 打开传输对话框 我确认

    我在 metamask (inpage.js:1 MetaMask - RPC Error: Error: Error: [ethjs-rpc] rpc error with payload "id":3801695059583,"jsonrpc":"2.0"," PARAMS “:[” 0xf8ac098504a817c80082753094bd212f85764be5ecdb5d0ca44ed46ac866b352c781c8b844d0679d3400000000000000000000000058f9015d8b36eacbd4d105cb79872992c073583f0000000000000000000000000000000000000000000000000000000000000000822d45a028d2355a1149fac93070742fc4e14213f441d4a8dfd97611b4de238f1ef70ffaa048f0eed65a9c495ce42229d569d156a7ff4cc206efced1f25e1c779c53f24485 “],” 方法 “:” eth_sendRawTransaction“错误:VM异常而处理事务:复归)

我在 metamask-setting 中重置了账户的交易历史

**关于我的 html 中的帐户的信息 ************************* 硬币:(obj/adr/data):[object Object]/0xBd212f85764Be5ecDB5d0ca44ed46AC866B352c7/undefined CoinContract: (obj/adr/data):[object Object]/undefined/undefined 硬币anzeigen Minter:0x6d8c98f8eb01f8f7ee55d25bf01e30fa64333940 Coin erzeugen Account1 0x6d8C98f8eb01F8f7ee55D25Bf01e30Fa64333940 Saldo1 65764158165999998600 金额:0.37 投币账户2 0x58f9015d8B36EAcBD4d105CB79872992C073583F Saldo2 30997031680000000000 金额:0.37 投币账户3 0xBd212f85764Be5ecDB5d0ca44ed46AC866B352c7 Saldo3 0 金额:0.37


************从container.js调用事务**************

function CoinSenden (data,adressat)

console.log("投币:" + adressat);

试试

//
// Code für ändern ????
//
var param1=data.amount;
var myContract = web3.eth.contract(CoinABI);
var myContractInstance = myContract.at(CoinContractADR);
console.log("contract/contractinstanz:" + myContract + "/" + myContractInstance);
console.log("contract/contractinstanz:" + myContract.address + "/" + myContractInstance.address);
console.log("para:" + param1 + "/" + "adr:" + ContainerAccount2);

myContractInstance.send(
  ContainerAccount2,param1,
  from : ContainerAccount2, value: 200, gas: 30000, gasPriceInWei : 1000, 
  function(err, myContract)
    if(!err) 
       // NOTE: The callback will fire twice!
       // Once the contract has the transactionHash property set and once its deployed on an address.
        // e.g. check tx hash on the first call (transaction send)
       if(!myContract.address) 
           console.log("Phase1- " + myContract.transactionHash) // The hash of the transaction, which deploys the contract

       // check address on the second call (contract deployed)
        else 
           console.log("Phase2- " + myContract.address) // the contract address
       
        // Note that the returned "myContractReturned" === "myContract",
       // so the returned "myContractReturned" object will also get the address set.
    
    else 

      console.log("Fehler in der Methode beim Coin senden: " + err);

    
  );



console.log("Coin senden fertig.")

捕捉(错误)

console.log("Fehler beim Coin senden: " + err);

嗯,不多。我想看看它是否有效: 1. ganache 中的已提交事务 2.账户的新余额

【问题讨论】:

好像跟金额有关....类型不对? 【参考方案1】:

是的,我也遇到了同样的问题。但对我来说答案很简单。我只需要清除 Metamask 中的交易历史。设置 -> 重置帐户。 。原因是因为 Metamask 在内部保存了跟踪本地区块链随机数的状态。当您重置本地区块链,但重置 Metamask 时,它会感到困惑,并认为它正在尝试为过去的区块发送交易。但是重置帐户会清除该历史记录,所以你很高兴。它不会改变余额,因此超级快速和简单。

【讨论】:

这很好用,但这很奇怪,因为重新导入私钥不起作用,我认为重新导入私钥应该会自动重置 metamask 上的所有帐户。【参考方案2】:

我遇到了这个问题,终于解决了。

问题是当您在 Metamask 上从一个 Ganache 帐户更改为另一个帐户时出现刷新问题。如果您没有在 App.js 中进行相应的代码刷新,您将在某处出现导致此错误的 null。

在我的情况下,对于一个购买和销售物品的 DApp,在 MetaMask 上连接到 ganache 帐户 0(coinbase 帐户)成功出售物品后,我出售该物品,然后切换到 Ganache 帐户 1(或任何其他 ganache帐户)购买刚刚出售的物品。现在我一直收到这个错误,这很糟糕。在检查我的代码时,我发现了来自帐户:App.account 默认指向 0x0 并且在 Metamask 上更改 Ganache 帐户后可能没有刷新(即使您在浏览器上物理刷新),您需要确保有代码刷新以重新加载项目。所以你需要重新运行你的 displayAccount 函数来刷新 App.account 并确保它不为空,这解决了这个问题:查看我的代码:

 App.displayAccountInfo(); //I added this line before the buyItem method could work  
    const transactionReceipt = await itemStoreInstance.buyItem(
        _itemId, 
            from: App.account,// This was null till i added displayAccountInfo() above
            value: _price,
            gas: 5000000
        
    ).on("transactionHash", hash => 
        console.log("transaction hash", hash);
    );

在您在 Metamask 上更改为不同的 Ganache 帐户后,显示帐户只需调用 eth.getAccounts 并将其分配给 App.account:见下文:

displayAccountInfo: async () => 
    const accounts = await window.web3.eth.getAccounts();
    App.account = accounts[0];
    $('#account').text(App.account);
    const balance = await window.web3.eth.getBalance(App.account);
    $('#accountBalance').text(window.web3.utils.fromWei(balance, "ether") + " ETH");
,

将此应用到您的问题的上下文中,查找 null 的位置,它将解决问题

【讨论】:

【参考方案3】:

答案可能为时已晚。但只是为了其他进来的人。 我今天有同样的问题。后来修好了。 这是由于在 javascript 中创建合约实例的方式不正确。请检查合约实例的创建方式。 好吧,这可能只是其中一种情况!

【讨论】:

【参考方案4】:

Metamask 使用localhost(本地节点)上的 RPC 连接到测试网络时,也会发生 rpc-payload 的此错误。与通过 HTTP 服务 RPC 的机器上的 geth 相同的传输块将发生。

如果您连接到网络上的另一个 RPC 服务节点,限制就会消失。

【讨论】:

虽然这个答案没有解决该用户一年前遇到的具体问题,但它直接解决了标题中的问题(“问题”)。因此,除非社区认为它偏离主题并可能被删除,否则我建议它留在这个线程中,如果可以的话。 Tks, tg【参考方案5】:

这是一个非常小的问题,我确实犯了和你一样的错误。但我想通了

改一下

from : ContainerAccount2, value: 200, gas: 30000, gasPriceInWei : 1000 

from : ContainerAccount2, value: web3.utils.toWei( (200).toString() , 'ether'), gas: 30000, gasPriceInWei : 1000

那么你的问题就解决了。

说明: 您不能像以前那样直接发送以太币,只需转换为“Unit

希望你明白我的意思

【讨论】:

以上是关于我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到的 jwt 格式错误?

我想在进行更新查询时选择一个表,但我收到错误代码 1093

我收到一个警告错误的 js fiddle 配置

Webpack 5 收到 Polyfill 错误?!?!我的 JavaScript React 项目在尝试编译我的 webpack.config.js 文件时收到一个 polyfill 错误

我收到错误:致命错误:索引超出范围

为啥我收到一个错误,显示模块“多处理”没有属性“sharedctypes”?