首页 > 解决方案 > 如何设置 tx ETH 数量?

问题描述

我知道用户可以手动将 ETH 发送到合约/函数,但是有没有办法直接在代码中请求特定数量,以便将其添加到 gas 费用中,例如,dxsale.app 在创建一个预售(见下面的屏幕截图)——它将 0.1 ETH 的预售成本添加到 0.0072 的汽油费中,总计 0.1072。

Dxsale.app 预售费用包含在交易费用中

这可以在 ERC20 合约中完成吗?我知道我可以在函数中接收 ETH payable,例如

    function deposit() payable public {
        require(msg.value > 0, "You need to send some Ether");
    }

但是我可以指定我想要收到的金额(固定费用),以便将其添加到 tx 成本中吗?

谢谢

标签: solidityerc20

解决方案


TLDR:合约功能在交易发送后执行。所以不可能从合约中设置交易参数。


有没有办法直接在代码中请求特定金额

不在 Solidity 代码中。如果发送的金额不是预期值,您只能抛出异常。

function deposit() payable public {
    require(msg.value == 0.1 ether, "You need to send 0.1 Ether");
}

您可以在创建交易请求时指定金额。例如 MetaMask 使用Ethereum Provider API,因此您可以预定义 MetaMask 将显示的数量。

const params = [
  {
    from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
    to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
    value: '0x9184e72a', // 2441406250
  },
];

ethereum
  .request({
    method: 'eth_sendTransaction',
    params,
  });

但是用户可以在他们的钱包中覆盖这个选项,或者他们总是可以使用不同的方式提交交易(不是用自定义值请求的)。


该值(在paramsJS 对象和 Soliditymsg.value全局变量中)始终不包括汽油费。

因此,如果您发送 0.1 ETH,则在此基础上添加汽油费,总成本可能为 0.10012345。将params.value包含 0.1 ETH(以 wei 表示的十六进制数),以及msg.value将包含 0.1 ETH(以 wei 表示的十进制数)。


推荐阅读