如何将代币发送到合同地址

时间:2019-05-07 04:34:38

标签: ethereum solidity truffle

我想将erc20令牌发送到能够交易令牌的合同地址。

但是,我没有通过测试,错误提示 Error: VM Exception while processing transaction: revert

我的功能是这个

TokenSale.sol

  function startSale(address _tokenSaleContractAddress) public {
    require(msg.sender == admin);
    require(tokenContract.transfer(_tokenSaleContractAddress, 750000)); 
  }

MyToken.sol

  function transfer(address _to, uint256 _value) public returns (bool success) {
    require(balanceOf[msg.sender] >= _value);

    balanceOf[msg.sender] -= _value;
    balanceOf[_to] += _value;

    emit Transfer(msg.sender, _to, _value);

    return true;
  }

我的测试是这个

  it('facilitates start sale', function() {
    return MyToken.deployed().then(function(instance) {
      tokenInstance = instance;
      return TokenSale.deployed()
    }).then(function(instance) {
      tokenSaleInstance = instance;
      return tokenSaleInstance.startSale(tokenSaleInstance.address, {from: admin} )
    }).then(function(receipt) {

      return tokenInstance.balanceOf(tokenSaleInstance.address)
    }).then(function(balance) {
      assert.equal(balance.toNumber, 750000);
    });
  });

您能给我什么建议为什么我考试不及格吗?

1 个答案:

答案 0 :(得分:1)

  

管理员有1000000个令牌,我想向TokenSale合约发送750000个令牌。

为此, admin 需要调用令牌合约上的transfer。即您的测试代码应包含以下内容:

tokenInstance.transfer(tokenSaleInstance.address, 750000, { from: admin });

此后,调用startSale应该会成功,但是没有理由调用它,因为它只是向自己传递了750,000个令牌。