如何通过 msg.value 将以太币转入智能合约?

How to transfer ether to smart contract by msg.value?

我想从我的地址转移一些以太币到智能合约,我试过下面的代码但它不起作用。如何通过msg.sender转账?

pragma solidity >=0.7.0 <0.9.0;

contract Test {

    function testTransfer() external payable {
        bool sent = payable(address(this)).send(msg.value);
        require(sent, "invalid balance");
    }

}

一旦我用 1 个以太币触发函数,错误输出如下:

我确定我的地址中有足够的以太币。我应该怎么做才能转移以太币?谢谢!

交易失败,因为智能合约试图将以太币转移给自己,而智能合约没有定义接收函数,所以它可以那样接收以太币,对于你的例子,你可以简单地删除所有的在函数内编写代码并创建另一个函数来检查合约余额,它会起作用

pragma solidity >=0.7.0 <0.9.0;

contract Test {

     function testTransfer() external payable {}
     function getBalance() external view returns (uint256) {
       return address(this).balance;
     }
}