在web3中使用transferFrom以太坊令牌(ERC827)功能时遇到麻烦

时间:2018-02-22 21:32:16

标签: ethereum solidity web3

我已经签署了2份合同:

1。 ERC 827兼容令牌

function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) {
require(_to != address(this));

super.transferFrom(_from, _to, _value);

require(_to.call(_data));
return true;

}

2。上层方法将通过“_data”参数调用并传递一些数据的测试合同。

uint public data;

function setData(uint256 a) returns (bool) {

  data = a;
  Data(msg.sender, address(this), 10, a);
  return true;

}

现在我试图测试user1调用transferFrom()的情况,该调用应该调用Test contract 2。

var abi = require('ethereumjs-abi');

const expectSuccess = async (promise) => {
  if(isTestRPC()) {
  /* handle TestRPC */
  return (await promise)
 } else {
   /* handle everything else */
   let ret = await promise
   ret.receipt.status.should.be.equal("0x1")
   return ret
  }
}
it ('getData', async function() {

let token = await Token.at("token address");
let t = await Test.deployed();

let str = "getData(uint256)";
var encode = abi.simpleEncode(str,1)

 await expectSuccess(token.transferFrom(a2,t.address,web3.toBigNumber(10),encode));});

注意:a2地址包含10个令牌,并且已通过之前的测试确认过。

上面的运行测试给出了错误 - >错误:处理事务时出现VM异常:还原。对令牌合同(1)和测试合同(2)进行的其他测试正在进行。

我真的很感激任何帮助!!提前谢谢......

1 个答案:

答案 0 :(得分:1)

要使用transferFrom,首先需要执行方法approve以实际允许地址_to花费_from的帐户令牌,就像在ERC20令牌中一样。

批准 - ERC827

  

使用_spender参数在_data上执行函数,如果是。{   功能结束成功允许_spender退出您的   帐户多次,最高为_value金额。如果这个功能是   再次调用它会用_value覆盖当前的限额。

function approve(address _spender, uint256 _value, bytes _data) public returns (bool) {
    require(_spender != address(this));
    require(super.approve(_spender, _value));
    require(_spender.call(_data));
    return true;
}

来源:original EIP: 827