我在使用一个函数时遇到麻烦,该函数调用另一个函数并在另一个实例中发送同一合约的资金:
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);
}
}
当我尝试运行此功能时,出现错误,无法估计所需的气体。代码可以编译,而while或for循环则不需要。
我遇到的问题是我什至不知道在哪里可以找到答案...
确切的错误是:
气体估计错误,并显示以下消息(请参见下文)。的 事务执行可能会失败。您要强制发送吗? JsonRpcEngine-响应没有错误或请求结果:{ “ jsonrpc”:“ 2.0”,“ id”:2522037241,“ method”:“ eth_estimateGas”, “ params”:[{“ from”:“ 0x6d4dcc21e77ee5bc18d0f91497fc5285a71c836a”, “至”:“ 0x1B15f071B4Fbd625Ebb3cC389D856ea2Ba7284A5”,“数据”: “ 0x03fb6eb00000000000000000000000006f13ee53f5eced4021b768c2949f45c5075120890000000000000000000000001b15f071b4fbd625ebb3cc389d856ea2ba7284a5”, “ value”:“ 0x1001d1bf800”}]}
我正在使用版本^ 0.4.25进行混音编译。您能给我任何帮助,我将不胜感激。
谢谢。
答案 0 :(得分:0)
现在,此问题已解决。问题是使用发送(即2300)时没有足够的气体储备。在Smarx中使用call可以帮助我:
关键是命令:
address(sp).send(tradePrice)
应为:
address(sp).call.value(tradePrice)("")
无论如何,感谢所有响应并试图提供帮助的人。