将eth从合约发送到钱包地址

Sending eth from contract to wallet address

我已经部署了这个合约,旨在将以太币从它自己发送到另一个账户


pragma solidity ^0.8.0;

contract Contract {

    address public owner;
    address public admin;

    constructor(address _admin) public {
        owner = msg.sender;
        admin = _admin;
    }

    modifier onlyOwner(address sender) {
        require(
            sender == admin,
            "Only the admin of the contract can perform this operation."
        );_;
    }

    function sendTo (
        address toAddress
    ) public payable onlyOwner(msg.sender) {
        payable(toAddress).transfer(msg.value);
    }
}

我尝试在客户端与它进行交互:

var contract = new web3.eth.Contract(abi, Address, null);

const transaction = {
            from: mainAcct,
            to: dummyAcct,
            value: '10000000000000000',
            gas: 30000
};

await contract.methods.sendTo(dummyAcct).send(
            transaction , function(err, hash){
            if(!err){
                console.log("Transaction hash:", hash);
            }else{
                console.log(err);
            }
});
} catch (e) {
                console.log(e);
}

为什么我在控制台中收到此错误:

Error: Transaction has been reverted by the EVM

如有任何帮助,我们将不胜感激!

K

看起来您需要在发送金额之前为合同注资 我做了类似下面的事情 hre 是 hardhat 对象,但是在部署时会有添加资金的方法

const waveContractFactory = await hre.ethers.getContractFactory('contract_name');
  const waveContract = await waveContractFactory.deploy({
    value: hre.ethers.utils.parseEther('0.1'),
  });

问题可能出在转账上,转账限制了 gas,这可能是错误的原因,请尝试使用呼叫而不是转账,查看此网站以了解如何使用它https://solidity-by-example.org/sending-ether/