Copy const decreaseLiquidity = async () => {
const UNI = '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984'
const EMPTY_ADDRESS = '0x0000000000000000000000000000000000000000'
const uniswapV3NftManagerAddress = '0xc36442b4a4522e871399cd717abdd847ab11fe88'
const abi = [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint128",
"name": "liquidity",
"type": "uint128"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"name": "DecreaseLiquidity",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "recipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"name": "Collect",
"type": "event"
},
]
const web3 = new Web3(provider)
const uniswapV3NftManagerContract = new web3.eth.Contract(abi as AbiItem[], uniswapV3NftManagerAddress)
const deadline = Math.floor(Date.now() / 1000) + 60 * 10; // 10 minutes from now
const decreaseLiquidityParams = [
60162,// tokenId The id of the erc721 token
4999000099994999900,
2499999999999999,
0,
deadline,
]
const decreaseLiquidityData = uniswapV3NftManagerContract.methods['decreaseLiquidity'](
decreaseLiquidityParams[0],
decreaseLiquidityParams[1],
decreaseLiquidityParams[2],
decreaseLiquidityParams[3],
decreaseLiquidityParams[4],
).encodeABI();
const amount0Max = ethers.utils.parseUnits("100", 18);
const amount1Max = ethers.utils.parseUnits("100", 18);
const collectParams = [
60162,// tokenId The id of the erc721 token
EMPTY_ADDRESS,
amount0Max,
amount1Max,
]
const collectData = uniswapV3NftManagerContract.methods['collect'](
collectParams[0],
collectParams[1],
collectParams[2],
collectParams[3],
).encodeABI();
const name = 'YOUR_ROLE_NAME'
const roleName = ethers.utils.formatBytes32String(name);
const calls = [
{
roleName,
to: uniswapV3NftManagerAddress,
value: '0',
data: decreaseLiquidityData,
operation: Operation.Call,
},
{
roleName,
to: uniswapV3NftManagerAddress,
value: '0',
data: collectData,
operation: Operation.Call,
},
]
const receipt = await execTransactionsFromModule(calls)
console.log('receipt: ', receipt)
}