【问题标题】:How to set a button to pay a fee with address and amount already set in Solidity?如何设置一个按钮来支付已经在 Solidity 中设置的地址和金额的费用?
【发布时间】:2021-12-29 11:30:49
【问题描述】:

我正在尝试像这样可靠地编写付费功能:

contract GetFee {

    address payable public feeCollector = 0x59c0f4Bea65c99C281A0107C86beE309b20b3B49;

    function payFee() public payable {
        feeCollector.transfer(100000000000000000);
    }
}

但是当我点击它时,我得到以下错误:

Note: The called function should be payable if you send value and the value you send should be less than your current balance.

如果我确实在部署和运行中插入任何数量,例如 1 ETH,它可以工作,但我不想这样做。

我想要一个功能,当点击它时,只需将特定金额发送到该特定地址,而无需用户插入任何其他内容。

怎么做?

【问题讨论】:

    标签: solidity smartcontracts web3 web3js remix


    【解决方案1】:

    GetFee被部署时,它持有0 ETH。

    feeCollector.transfer(100000000000000000);
    

    这个 sn-p 发送 0.1 ETH(代码中指定的 100000000000000000 wei)到feeCollector来自合约地址 - 不是来自用户。

    因此,当payFee() 尝试提交 0.1 ETH 而没有任何人事先向合约发送至少此金额时,由于合约余额不足,转账失败。

    请注意,通过调用合约函数的交易发送的金额始终需要来自用户。无法调用仅从钱包中提取预定义金额的函数。

    【讨论】:

    • 我将在 index.js 文件中使用 web3 作为解决方案,并添加了费用为 0.1 的要求规则。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 2015-04-13
    • 1970-01-01
    • 2020-03-20
    • 2016-05-25
    • 2021-10-23
    • 2020-06-09
    相关资源
    最近更新 更多