# Fee preference (EVM precompile)
Root network will come with capability of paying transaction fee in a different asset(other than XRP) as long as liquidity for that asset exist in liquidity pool.
If an account doesn’t have CPAY/XRP (fee asset), the transaction fails with an InvalidTransaction::Payment error. There seems to be a balance check for a native token before executing an EVM transaction.
Steps
1. Create a new asset with 18 dp. On CENNZnet it gets asset id (17000).
2. Add liquidity to this pool.
```
const amount = 5923731168159260;
const coreAmount = 104350076;
const minLiquidity = 1;
await api.tx.cennzx
.addLiquidity(17000, minLiquidity, amount, coreAmount)
.signAndSend(Alice)
```
3. Execute
```
const signer = await ethers.getSigners().then((xs) => xs[0]);
// Defines the functions, used for the abi to encode the values of that function
const erc20Abi = ["function transfer_from(address who, uint256 amount)"];
let iface = new ethers.utils.Interface(erc20Abi);
const transferInput = iface.encodeFunctionData("transfer", [
"0xAB8208e1adEBe8Ee6155Ef9A155E2cdA3B880cc7",
1,
]);
const feeProxyAbi = [
"function callWithFeePreferences(address asset, uint128 max_payment, address target, bytes input)",
];
const feeProxyAddress = "0x00000000000000000000000000000000000004bb"; // On CENNZnet
// 1721
const feeProxy = new ethers.Contract(feeProxyAddress, feeProxyAbi, signer);
// asset id - 17000 will have the following address
const newTokenAddress = web3.utils.toChecksumAddress("0xcCCCcCcC00004268000000000000000000000000");
const block = await signer.provider.getBlock(
await signer.provider.getBlockNumber()
);
const maxPayment = '30000000000000000'
try {
// Call the fee proxy contract with the above values and input from the previous example.
const tx = await feeProxy.callWithFeePreferences(
newTokenAddress,
maxPayment,
newTokenAddresssyloTokenAddress,
transferInput,
{
maxFeePerGas: block.baseFeePerGas,
maxPriorityFeePerGas: ethers.utils.parseUnits("0.5", "gwei")
}
);
console.log('tx::',tx);
await tx.wait();
console.log('tx::',tx);
}
);
```