我想将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);
});
});
您能给我什么建议为什么我考试不及格吗?
答案 0 :(得分:1)
管理员有1000000个令牌,我想向
TokenSale
合约发送750000个令牌。
为此, admin 需要调用令牌合约上的transfer
。即您的测试代码应包含以下内容:
tokenInstance.transfer(tokenSaleInstance.address, 750000, { from: admin });
此后,调用startSale
应该会成功,但是没有理由调用它,因为它只是向自己传递了750,000个令牌。