问题描述
使用Web3尚不成熟。
我正在尝试测试可以购买智能合约(ERC20代币)的功能。我已经测试了这段代码,将以太币从一个钱包发送到另一个钱包,并且成功。现在,每当我尝试与智能合约进行交互(发送已签名的交易以购买硬币)时,都会出现此错误:
错误:EVM已还原交易:
这就是它在etherscan rinkeby上出现的方式
这是我的代码
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