我在metamask中收到一条错误消息(inpage.js:1 MetaMask-RPC错误:错误:错误:[ethjs-rpc] rpc错误,有效负载为{“ id”:3801695059583,“ jsonrpc”:“ 2.0”,“ PARAMS “:[” 0xf8ac098504a817c80082753094bd212f85764be5ecdb5d0ca44ed46ac866b352c781c8b844d0679d3400000000000000000000000058f9015d8b36eacbd4d105cb79872992c073583f0000000000000000000000000000000000000000000000000000000000000000822d45a028d2355a1149fac93070742fc4e14213f441d4a8dfd97611b4de238f1ef70ffaa048f0eed65a9c495ce42229d569d156a7ff4cc206efced1f25e1c779c53f24485 “],” 方法 “:” eth_sendRawTransaction“}错误:VM异常而处理事务:复归)
我在metamask-setting中重置了帐户的交易历史记录
**我的html中有关帐户的信息************************** 硬币:(obj / adr / data):[object Object] / 0xBd212f85764Be5ecDB5d0ca44ed46AC866B352c7 / undefined CoinContract:(obj / adr / data):[对象对象] /未定义/未定义 硬币安泽根·明德:0x6d8c98f8eb01f8f7ee55d25bf01e30fa64333940 Coin erzeugen Account1 0x6d8C98f8eb01F8f7ee55D25Bf01e30Fa64333940 Saldo1 65764158165999998600 Amount:0.37 硬币发送帐户2 0x58f9015d8B36EAcBD4d105CB79872992C073583F Saldo2 30997031680000000000金额:0.37 投币帐户3 0xBd212f85764Be5ecDB5d0ca44ed46AC866B352c7 Saldo3 0金额:0.37
************从container.js调用转译******************
CoinSenden函数(数据,地址){
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.帐户的新余额答案 0 :(得分:3)
是的,我也遇到了同样的问题。但是对我来说答案很简单。我只需要清除Metamask中的交易记录。设置->重设帐户。 。原因是因为Metamask在内部保存了跟踪本地区块链随机数的状态。当您重置本地区块链,但不要重置Metamask时,它会感到困惑,并认为它过去试图发送某个区块的交易。但是重设帐户会清除该历史记录,因此您一切顺利。它不会改变余额,因此非常快捷,简便。
答案 1 :(得分:2)
我遇到了这个问题,终于解决了。
当您在Metamask上从一个Ganache帐户更改为另一个帐户时,问题是刷新问题。如果不这样做,则App.js中不会刷新相应的代码,您将在某个地方出现null导致此错误。
对于一个买卖商品的DApp,在连接到MetaMask上的ganache帐户0(coinbase帐户)成功售出项目后,我出售了该项目,然后切换到Ganache帐户1(或任何其他ganache)帐户)购买刚售出的商品。现在,我不断收到此错误,这很糟糕。在检查我的代码时,我发现了from帐户:默认情况下,App.account指向0x0,并且在更改Metamask上的Ganache帐户后(即使您实际上是在浏览器上进行刷新)也可能没有刷新,您需要确保有一个代码刷新以重新加载项目。因此,您需要重新运行displayAccount函数以刷新App.account并确保它不为null,这可以解决问题:请参阅我的代码:
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帐户并将其分配给App.account后,显示帐户将仅调用eth.getAccounts:
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的位置,它将解决问题
答案 2 :(得分:0)
答案可能为时已晚。但是只是为了其他进来的人。 我今天有同样的问题。然后修复它。 看到它是由于在javascript中创建合同实例的方式不正确。请检查合同实例的创建方式。 好吧,这可能只是其中一种情况!
答案 3 :(得分:0)
当Metamask
使用localhost
(本地节点)上的RPC连接到测试网络时,也会发生rpc-payload错误。在通过HTTP服务RPC的计算机上,应用于geth的传输块也会发生相同的情况。
如果您连接到网络上的另一个RPC服务节点,该限制就会消失。
答案 4 :(得分:0)
这是一个非常小的问题,并且我确实犯了与您相同的错误。但我想通了
只需更改此
{from : ContainerAccount2, value: 200, gas: 30000, gasPriceInWei : 1000}
到
{from : ContainerAccount2, value: web3.utils.toWei( (200).toString() , 'ether'), gas: 30000, gasPriceInWei : 1000}
那么您的问题就会解决。
说明: 您不能像以前一样直接发送以太币,只能转换为“ 单位”
希望你明白我的意思