Uniswap 路由器合约有一些以
*SupportingFeeOnTransferTokens
结尾的方法,例如swapExactTokensForETHSupportingFeeOnTransferTokens
。
https://github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/UniswapV2Router02.sol
我隐约(认为我)理解这些方法应该被调用来交换代币,这些代币在转账过程中会以某种方式收取税收/佣金。
我有几个关于这些的问题:
简而言之,这些函数与常规交换函数的行为有何不同?它们是否以某种方式与 minOut 参数交互?
Dex UI 如何知道要调用哪个方法?它如何知道需要调用
SupportingFee
版本而不是标准交换?
如果我的 web3 脚本调用错误版本的方法会发生什么?失败?金额错误?
与 swapExactTokensForTokens 相同,但对于以下令牌会成功 转账需收取费用。
so 什么是转账费用代币?
在大多数情况下,转移代币的费用会燃烧或转移一小部分 每次转账的一部分,以便转账的接收者结束 比发件人提供的略少。这被称为 “包含”转账费用。
如果是包含转账代币费用的情况,您可以使用 路由器合约中相应的交换函数以 “支持转账费用”。这些功能通过调整来成功 “amountOutMin”参数用于检查收件人金额而不是 计算不变式时的发送金额。
所以基本上
Fee-on-transfer
代币会自动从任何交易中扣除费用,并且通常将此费用重定向到特定活动,例如:
对于转账收费代币,仅转账预期金额可能会因自动扣除费用而导致差异。如果处理不当,可能会导致交易失败或发送错误的金额。