Solidity -不能将固定值转移到Contract



我正在开发solid Contract,但我找不到一种方法将外部地址中的预定义值存入合同。这是我使用的测试代码:

pragma solidity 0.5.12;
contract Payment {
    mapping(address => uint256) public balances;
    address payable wallet;
    constructor(address payable _wallet) public {
        wallet = _wallet;
    }
    function buyToken() public payable {
        balances[msg.sender] += 1;
        wallet.transfer(0.1 ether);
    }
    function () payable external{}
    function getContractBalance() public view returns(uint) {
        return address(this).balance;
    }
}

在Remix中,如果我使用msg。重视它的工作很好。我使用地址"1"部署合约,然后使用地址"2",然后执行buyToken(),因此从地址"2"发送了1个以太币(来自Remix Test表单)。地址"1"。如果我使用一个固定的值(如0.1以太),它不工作。

我想要的是人们可以在合同中存入固定数量的ETH(实际上是TRON,但代码是一样的)。

谢谢你的帮助。

如果合约的以太币余额小于0.1,则buyToken将失败。如果合约余额超过0.1以太币,buyToken将正常工作,钱包将收到0.1以太币。

假设合约余额为0

如果address2用0.001 ether调用buyToken,交易将失败,因为合约没有足够的余额来转移0.1 ether

如果address2用5 ether调用buyToken,交易将成功。钱包地址将收到0.1 ether .

    function buyToken() public payable {
        balances[msg.sender] += 1;
        wallet.transfer(0.1 ether);
    }

味精。Value会一直工作,因为它会将收到的任何金额转移到钱包地址。

如果address2用0.001 ether调用buyToken,钱包将收到0.001 ether

如果address2用5 ether调用buyToken,钱包将收到5 ether

    function buyToken() public payable {
        balances[msg.sender] += 1;
        wallet.transfer(msg.value);
    }

相关内容

  • 没有找到相关文章

最新更新