如何将eth从账户转移到合约?

How to transfer eth from an account to a contract?

我对 solidity 很陌生,当我使用 remix 测试我的合约时,我想从我的账户转移一些 eth 到智能合约。我试过这段代码,但它似乎从合约中转移了 eth 而不是我的账户。

    function addStaker (uint _stakeAmount) public membership(master, msg.sender) returns(bool) {
    if(!members[msg.sender].alreadyExist) {
        Member memory newMember = Member(msg.sender, true);
        members[msg.sender] = newMember;
        bool sent = payable(address(this)).send(_stakeAmount);
        require(sent, "invalid balance");
        return true;
    } else {
        return false;
    }
}

如何将 ETH 从我的账户转移到智能合约?

如果你想实现一个 defi 合约(因为你的函数名称是 addStaker),它接受来自 ERC20 代币的质押硬币,实现是不同的。但是如果你只是想从你的 metamask 账户发送钱给合约,你必须标记函数 payable.

 function pay() public payable {
            //  msg.value is the amount of wei sent with the message to the contract. 
            // with this you are setting a minimum amount
            require(msg.value > .01 ether);
            // add your logic
    }

智能合约无法从地址提取 contract-specified 数量的 ETH。金额始终需要由发件人指定并签名。

合约只能验证发送的金额:

function addStaker() public payable {
    require(msg.value == 1 ether);
}

如何选择金额取决于您使用的钱包软件。在 Remix 的情况下,“部署和 运行 交易”选项卡中有“价值”输入,您可以在其中指定随交易发送的 ETH 数量。