//UniswapV2Router02.sol
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
safeAssociateToken(address(this), token);
(amountToken, amountETH) = removeLiquidity(
token,
whbar,
liquidity,
amountTokenMin,
amountETHMin,
address(this), // used to be msg.sender
deadline
);
safeTransferToken(token, address(this), to, amountToken);
safeApproveToken(whbar, WHBAR, amountETH);
IWHBAR(WHBAR).withdraw(address(this), to, amountETH);
safeDissociateToken(address(this), token);
}
The removeLiquidityETH function operates in HBAR but derives its name from Uniswap on Ethereum. This name was kept to simplify integration for developers versed in Uniswap tools.
Code Overview
Resources:
import {
ContractFunctionParameters,
ContractExecuteTransaction,
AccountAllowanceApproveTransaction,
..
} from '@hashgraph/sdk';
//Client pre-checks:
// - Router contract has spender allowance the LP token
const params = new ContractFunctionParameters();
params.addAddress(tokenAddress); //address token
params.addUint256(lpTokenAmountToRemove); //uint liquidity
params.addUint256(amountTokenMin); //uint amountTokenMin
params.addUint256(amountETHMin); //uint amountETHMin
params.addAddress(toSoli); //address to
params.addUint256(deadline); //uint deadline
const response = await new ContractExecuteTransaction()
.setContractId(routerContractId)
.setGas(gasLim)
.setFunction('removeLiquidityETH', params)
.execute(client);
const record = await response.getRecord(client);
const result = record.contractFunctionResult!;
const values = result.getResult(['uint','uint']);
const amountToken = values[0]; //uint amountToken
const amountHBAR = values[1]; //uint amountETH
Removing Token/Token Liquidity
Remove liquidity from an existing token/token liquidity pool.
Function name: removeLiquidity
⛽ Recommended gas: 1,600,000 gwei (~ $0.14 USD)
Parameter Name
Description
address tokenA
EVM address of the first HTS token
address tokenB
EVM address of the second HTS token
uint liquidity
LP liquidity amount to remove in its smallest unit
uint amountAMin
The minimum amount for the first token in its smallest unit
uint amountBMin
The minimum amount for the second token in its smallest unit
The removeLiquidityETHSupportingFeeOnTransferTokens function operates in HBAR but derives its name from Uniswap on Ethereum. This name was kept to simplify integration for developers versed in Uniswap tools.
Code Overview
Resources:
import {
ContractFunctionParameters,
ContractExecuteTransaction,
AccountAllowanceApproveTransaction,
..
} from '@hashgraph/sdk';
//Client pre-checks:
// - Router contract has spender allowance for the LP token
const params = new ContractFunctionParameters();
params.addAddress(tokenAddress); //address token
params.addUint256(lpTokenAmountToRemove); //uint liquidity
params.addUint256(amountTokenMin); //uint amountTokenMin
params.addUint256(amountETHMin); //uint amountETHMin
params.addAddress(toAddress); //address to
params.addUint256(deadline); //uint deadline
const response = await new ContractExecuteTransaction()
.setContractId(routerContractId)
.setGas(gasLim)
.setFunction('removeLiquidityETHSupportingFeeOnTransferTokens', params)
.execute(client);
const record = await response.getRecord(client);
const result = record.contractFunctionResult!;
const values = result.getResult(['uint']);
const amountHBAR = values[1]; //uint amountETH