我收到一个错误:“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 错误与有效负载”的主要内容,如果未能解决你的问题,请参考以下文章
Webpack 5 收到 Polyfill 错误?!?!我的 JavaScript React 项目在尝试编译我的 webpack.config.js 文件时收到一个 polyfill 错误