我遇到了一个函数的问题,该函数调用一个函数并在另一个实例中发送相同合同的资金:
function buyLoan(address _sellLoan, address _sellPortfolio) public {
uint tradePrice = Loan(_sellLoan).getBalance();
// Now check if funds available
if (tradePrice > address(this).balance) {
// Not enough funds, so revert
revert();
} else {
// Enough funds, so execute purchase
// Get Sell Portfolio for transfer
Portfolio sp = Portfolio(_sellPortfolio);
// Finalize sale of Loan
tr.executeTrade(_sellLoan, _tradeDate);
if (!address(sp).send(tradePrice))
revert();
// Now add loan to buying portfolio
addLoan(_sellLoan, tradePrice);
// Delete loan from selling portfolio
sp.deleteLoan(_sellLoan);
}
}
当我尝试运行这个函数时,我得到一个错误,它无法估计所需的气体。代码经过编译,不存在do while或for循环。
我的问题是,我甚至不知道该去哪里解决这个问题。。。
准确的错误是:
天然气估计错误,显示以下消息(请参阅下文(。这个事务执行可能会失败。是否要强制发送?JsonRpcEngine-请求的响应没有错误或结果:{"jsonrpc":"2.0","id":2522037241,"method":"eth_estimateGas","params":[{"from":"0x6d4dcc21e77ee5bc18d0f91497fc5285a71c836a","到":"0x1B15f071B4Fbd625Ebb3cC389D856ea2Ba7284A5","数据":"0x03fb6eb00000000000000000000000006f13ee53f5eced4021b768c2949f45c50751208900000000000000001b15f071b4fbd625ebb3cc89d856ea2ba7284a5","value":"0x1001d1bf800"}]}
我正在使用版本^0.4.25进行混音编译。如果你能帮我,我将不胜感激。
谢谢。
这个问题现在已经解决了。问题是在使用send时没有足够的天然气储备(即2300(。使用呼叫作为Smarx帮助我在这里:
https://ethereum.stackexchange.com/questions/65879/error-when-executing-transfer-with-sufficient-funds?noredirect=1#comment79515_65879
关键是命令:
address(sp).send(tradePrice)
应该是:
address(sp).call.value(tradePrice)("")
不管怎样,感谢所有响应并尽力提供帮助的人。