如何在 Solidity 合约中采取一些行动花费 1 Ether

How to make some action in a Solidity contract cost 1 Ether

我有一个在 solidity 中定义的合约,我想让它在调用特定函数时,合约的总成本增加 1 个以太币。我对如何在实践中使用 ether 有点模糊。我会为此使用普通的 int 吗?关键字 ether 在哪里发挥作用?

你可能知道,1 ether == 1000000000000000000(或 10^18)wei。

您可以在全局变量 msg.value 中访问交易值,即 returns 与交易一起发送的 wei 数量。

所以你可以做一个简单的验证来检查调用你的函数的交易是否有 1 ETH 的价值。

function myFunc() external payable {
    require(msg.value == 1 ether, 'Need to send 1 ETH');
}

相当于10^18 wei

function myFunc() external payable {
    require(msg.value == 1000000000000000000, 'Need to send 1 ETH');
}

function myFunc() external payable {
    require(msg.value == 1e18, 'Need to send 1 ETH');
}

Solidity 文档中还有一小段显示了更多示例:https://docs.soliditylang.org/en/v0.8.2/units-and-global-variables.html#ether-units