Web3错误:EVM已还原事务:

问题描述

使用Web3尚不成熟。

我正在尝试测试可以购买智能合约(ERC20代币)的功能。我已经测试了这段代码,将以太币从一个钱包发送到另一个钱包,并且成功。现在,每当我尝试与智能合约进行交互(发送已签名的交易以购买硬币)时,都会出现此错误

错误:EVM已还原交易:

这就是它在etherscan rinkeby上出现的方式

enter image description here

这是我的代码

  var rawTx = {
    nonce : nxn,gasPrice: web3.utils.toHex(web3.utils.toWei('3000','gwei')),gasLimit: '0x5208',to: '0x40d3b2f06f198d2b789b823cdbecd1db78090d74',value: web3.utils.toHex(web3.utils.toWei('0.002',"ether")),data : '0x',}

  var tx = new Tx(rawTx,{chain:'rinkeby',hardfork: 'petersburg'});
  tx.sign(privateKey);

  var serializedTx = tx.serialize();


  await web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
  .on('receipt',console.log);

解决方法

这意味着智能合约通常为revert()行失败而为您的交易完成了 require()。其他原因包括试图与不接受付款的智能合约进行应付交易。

没有智能合约源代码,就无法确定是什么原因导致退回。

,

好吧,事实证明我是将Eth发送给不接受Eth的合同。从而准确执行了Mikko所说的。当您将合同发送给Eth时,合同不知道该怎么做,因此它调用合同中的后备功能以还原交易。我假设这样做是为了防止重复等等。将合同更改为WETH(在rinkeby上)是可行的。

如果要测试使用ETH购买代币的功能,请使用此合同(仅限RINKEBY):0xc778417E063141139Fce010982780140Aa0cD5Ab

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...