传输功能无法按预期工作

时间:2018-02-28 09:44:47

标签: blockchain ethereum solidity smartcontracts

考虑以下代码

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和多个令牌。然后,它将如何确定此处需要发送此特定令牌,或者此处发送以太币而不是任何令牌。

任何人都可以提供帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

代码中没有更正。也许Metamask和remix目前不支持这种类型的交易。当我从Web3js调用这个方法时它起作用了。所以无法找到确切的原因,但是它最终有效。