考虑以下代码
mapping (address => uint256) public balanceOf;
event Transfer(address indexed from, address indexed to, uint256 value);
function _transfer(address _from, address _to, uint _value) internal {
require(_to != 0x0);
require(balanceOf[_from] >= _value);
balanceOf[_from] -= _value;
balanceOf[_to] += _value;
Transfer(_from, _to, _value);
}
function sell(uint256 amount) public {
require(this.balance >= amount * sellPrice);
_transfer(msg.sender, this, amount);
msg.sender.transfer(amount * sellPrice);
}
function sendTokens(address _to, uint value) public {
_transfer(msg.sender,_to,value);
msg.sender.transfer(value * sellPrice);
}
function buy() payable public {
uint amount = (msg.value / buyPrice) * 1 wei;
_transfer(this, msg.sender, amount);
}
这里sell()和buy()函数向/从合约发送/接收令牌,但是当调用几乎相同签名的函数sendTokens()时,它无法发送或发送0令牌。合同还有醚和代币。但它总是考虑发送和接收令牌。但是几乎相同的代码,sendTokens的行为并不相同。
此外,我还有另一个与此相关的问题。每个帐户都有ethers和多个令牌。然后,它将如何确定此处需要发送此特定令牌,或者此处发送以太币而不是任何令牌。
任何人都可以提供帮助。提前谢谢。
答案 0 :(得分:0)
代码中没有更正。也许Metamask和remix目前不支持这种类型的交易。当我从Web3js调用这个方法时它起作用了。所以无法找到确切的原因,但是它最终有效。