## Ante Handler allow paying fee using SNIP-20 token Fee abstraction modules enable users to pay fee use SNIP-20 token. Whenever a user uses SNIP-20 to pay fees, Fee-abstracion(FA) module will collect all SNIP-20 from user by execute the contract that transfer the amount of SNIP-20 token from user to module account address. After that, FA will use the amount of native token that have same value with the amount of SNIP-20 collected from user for paying fee. ``` func CustomDeductFeeAnteHandler() { if feeIsNativeToken() { PayFee(fee, feePayer) } else { // Get contract address contractAddr := fee.Denom // Transfer SNIP20 token to module account address recipient := GetModuleAccountAddress() execMsg := SNIP20TokenTransferMsg(recipient, fee.Amount) err := ExecuteContract(contractAddr, feePayer, execMsg) if err != nil { return err } // Transfer success, FA module will use the amount of token that // have same value with the amount of SNIP-20 token collected from // user for paying fee exchangeRate := GetSNIP20TokenExchangeRate(fee.Denom) nativeTokenFeeAmount := exchangeRate * fee.Amount nativeTokenFee := Coins{Denom, nativeTokenFeeAmount} PayFee(nativeTokenFee, FeeAbsModuleAccount) } } ``` User pays fee with SNIP20 token by declare the `-fees` flags while the `denom` field is the address of the specific contract of SNIP-20 token ` secret tx bank send <sender> <receiver> <amount> --fees 1000secret1k0jntykt7e4g3y88ltc60czgjuqdy4c9e8fzek `