我如何在不支付gas费的情况下计算solid合约的结果?



假设我有这个固态合约,我想计算minAmountOut2的结果,而不实际支付gas gas费。有可能实现吗?我认为这应该是理论上可行的,但我不确定如何实现它实际上....谢谢!

pragma solidity >=0.7.0 <0.9.0;
contract Storage {

constructor()  payable {
// uint256 number;
address wbnb_addres = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c; 
address pancake_swap_v2 = 0x10ED43C718714eb63d5aA57B78B54704E256024E; 
uint amount = msg.value ;
address target_token_address = 0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82;
address sender_address = tx.origin;
address[] memory address_input = new address[](2);
address_input[0] = wbnb_addres;
address_input[1] = target_token_address;
uint[] memory result = IPancakeRouter02(pancake_swap_v2).getAmountsOut(amount,address_input);
uint minAmountOut = result[1];
uint deadline = 1e30;
address[] memory address_output2 = new address[](2);
address_output2[0] = target_token_address;
address_output2[1] = wbnb_addres;
uint[] memory result2 = IPancakeRouter02(pancake_swap_v2).getAmountsOut(minAmountOut,address_output2);
uint minAmountOut2 = result2[1];


}    

}

一种可能的方法是将结果转换为字符串并触发一个revert函数....然后当我在web3中运行estimatgas函数时,我得到了使用错误和异常处理的结果。

据我所知,estimateGas是唯一这样的函数。估计as应该几乎等于web3.eth。sendTransaction,它们之间的唯一区别是estimateGas实际上不发送事务,如果您的操作在调用函数时失败,则无法通过estimateGas获得有效结果。

现在构造函数中已经有了所有的代码。您可能希望将代码分成更小的函数,然后调用estimateGas。

相关内容

最新更新