如何发送代币到合约地址

How to send tokens to contract address

我想将 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);
    });
  });

你能告诉我我考试失败的原因吗?

Admin has 1000000 tokens, and I want to send 750000 tokens to TokenSale contract.

为此,admin 需要在代币合约上调用 transfer。 IE。你的测试代码应该有这个:

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

之后,调用startSale应该会成功,但没有理由调用它,因为它只是向自己转移了750,000个代币。