将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/
我已经部署了这个合约,旨在将以太币从它自己发送到另一个账户
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/