[英]How to calculate slippage percent before send transaction in web3?
每次我想检查滑点,我都必须先发送交易,如果交易因为“INSUFFICIENT_OUTPUT_AMOUNT”而失败,我知道这个滑点比我预期的要高,但是我为此损失了费用,它需要费气我赔了钱,如何查看 web3 中的滑点百分比? 或者有任何图书馆可以帮助我解决这个问题吗? 这是我在 web3 中使用 pancakeswap 智能合约的简单交易代码。
...
amount_out = contract.functions.getAmountsOut(amountBNB, [spend,tokenToBuy]).call()[-1]
min_tokens = int(amount_out * (1 - (slippage / 100)))
...
pancakeswap2_txn = contract.functions.swapExactETHForTokens(
min_tokens,
[spend,tokenToBuy],
sender_address,
(int(time.time()) + 10000)
).buildTransaction({
'from': sender_address,
'value': web3.toWei(price,'ether'),
'gas': gas_limit,
'gasPrice': web3.toWei(gasPriceEntry.get(),'gwei'),
'nonce': nonce,
})
...
注释掉“'gas': gas_limit”部分。
我不记得为什么了,但是如果不设置“gas”参数,你应该会得到同样的错误,你现在可以在区块链上看到这个错误 + 你已经在执行代码时支付了费用。 这样您就知道错误是什么,但没有发送实际交易,因此您无需支付 gas/交易费。
接下来,如果您打算在滑点低于您的最大滑点预期(例如低于 10%)的情况下执行交易,您可以考虑下一个程序。 如果不是“知道最小滑点然后使用它”,而是尝试“找到最小滑点并执行交易”怎么办?
下一个程序能否帮助您:
但是,请记住,如果您将“gas”参数保留在您的swapExactETHForTokens中,您将通过 for 循环为每次执行支付所有 gas 费用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.