我正在用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中获得其三元函数;
但是,当我通过在文本框中输入1并单击(备用)按钮从帐户向智能合约发送一个1 Wei时,出现以下错误;
与Ether_Transfer_From进行交易。 (后备)错误:VM异常而 处理交易:没钱
我通过使用以下命令安装Ganache-cli 7.0.0 beta.0
来遵循相同的question的答案;
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
错误中。 如果有任何方法可以消除此错误或将以太坊从一个帐户转移到另一个帐户,请告诉我。
答案 0 :(得分:0)
这就是我为我的一个项目所做的。
此代码段,部署编译固态文件,然后部署它并获取已部署合同地址的地址
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.您应该扎实地支付方法