我正在用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中获得其三元函数;

testing - 将以太坊从账户转移到合约时“用完”-LMLPHP

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


  交易到Ether_Transfer_From。 (后备)错误:VM异常而
  加工交易:无气


通过使用以下命令安装Ganache-cli 7.0.0 beta.0,我遵循了相同question的答案;


  npm install -g [email protected]


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

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

最佳答案

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

此代码段,部署编译实体文件,然后部署它并获取已部署合同地址的地址

  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--})


并且还使方法牢固可靠,以使其能够转移醚,例如:

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


请参阅:https://web3js.readthedocs.io/en/v1.2.0/web3-eth-contract.html#id12


  基本上我使用web3 api本身从一个帐户转移以太币
  通过调用我的solidity方法。
  
  另外,请检查以下内容:
   1.部署时,您是否部署了足够的天然气?当我以较少的汽油量部署合同时遇到了这个错误
   2.您应该坚决地支付费用

09-18 06:21