我正在开发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);
}