gpt4 book ai didi

testing - “Out of Gas” 将以太坊从账户转移到合约时

转载 作者:行者123 更新时间:2023-11-28 21:36:47 35 4
gpt4 key购买 nike

我正在使用 ganache 创建 10 个以太坊账户。我想将以太坊从一个账户转移到一个智能合约。我通过编写以下两个可靠的智能合约来做到这一点;

pragma solidity >=0.4.0 <0.6.0;
contract Ether_Transfer_To{
function () external payable { //fallback function

}
function get_balance() public returns(uint){
return address(this).balance;
}
}
contract Ether_Transfer_From{
Ether_Transfer_To private the_instance;
constructor() public{
//the_instance=Ether_Transfer_To(address(this));
the_instance=new Ether_Transfer_To();
}
function get_balance() public returns(uint){
return address(this).balance;
}
function get_balance_of_instance() public returns(uint){
//return address(the_instance).balance;
return the_instance.get_balance();
}
function () external payable {
// msg.sender.send(msg.value)
address(the_instance).send(msg.value);
}
}

当我部署contract Ether_Transfer_From 智能合约时,我在remix 中得到了它的三成员函数,如下所示。 ;

enter image description here

但是,当我通过在文本框中写入 1 并单击(回退)按钮将一个 1 Wei 从帐户发送到智能合约时,出现以下错误;

transact to Ether_Transfer_From. (fallback) errored: VM Exception while processing transaction: out of gas

我按照相同的答案 question通过使用以下命令安装 Ganache-cli 7.0.0 beta.0

npm install -g ganache-cli@7.0.0-beta.0

但我仍然得到同样的错误。我想我使用的是较旧的 Ganache cli 而不是 Ganache-cli 7.0.0 beta.0 因为它转到 C 驱动器并且我之前在 D 驱动器中安装了 ganache 2.1.1 .

我只想将以太币从一个账户发送到另一个账户,但我真的陷入了这个out of gas 错误。 如果有任何方法可以消除此错误或将以太币从一个帐户转移到另一个帐户,请告诉我。

最佳答案

这就是我为我的一个项目所做的。

这段代码,部署编译solidity文件然后部署,获取部署的合约地址

  const input = fs.readFileSync('Migrations.sol');
const output = solc.compile(input.toString(), 1);
const bytecode = output.contracts[':Migrations']['bytecode'];
const abi = JSON.parse(output.contracts[':Migrations'].interface);
var contract = new web3.eth.Contract(abi);

contract.deploy({
data: '0x'+bytecode,
})
.send({
from: chairPerson,
gas: 5500000,
gasPrice: '2000000000000'
})
.on('receipt', (receipt) => {
add=receipt.contractAddress;
})

现在使用合约的 abi,​​我可以调用已部署合约的方法并使用以下代码将“1.5”以太币从一个地址转移到另一个地址。

contract.methods.registerRequest(fromAddress,toAddress,requestNumber).send({from:fromAddress,value : web3.utils.toWei('1.5', 'ether')}).on('transactionHash', (hashResult) => {-- some code--})

并且还使 solidity 中的方法成为可支付的,以允许它转移以太币,例如:

function registerRequest(address requestedBy,address requestedTo,uint requestNumber) payable public{}

引用:https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#id12

Basically I used web3 api itself to transfer ether from one account to another by calling my solidity method.

Also, check the following things :
1. While deploying, are you deploying with enough gas ? I faced this error when I was deploying the contract with less gas quantity

2. Your method in solidity should be payable

关于testing - “Out of Gas” 将以太坊从账户转移到合约时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57943648/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com