Skip to content

Conversation

@luchobonatti
Copy link
Member

@luchobonatti luchobonatti commented Jun 5, 2025

Add AddLiquidity and Permit2 Batch Support

Overview

This PR adds support for adding liquidity to Uniswap V4 pools and implements Permit2 batch signature handling for gas-efficient token approvals.

Changes

  • Added buildAddLiquidityCallData utility for creating add liquidity transactions
  • Implemented preparePermit2BatchData for handling batch token approvals
  • Updated SDK instance to support new functionality
  • Added comprehensive test coverage for new features

Technical Details

  • buildAddLiquidityCallData supports:
    • Single token liquidity addition
    • Dual token liquidity addition
    • Permit2 batch signature integration
  • preparePermit2BatchData handles:
    • Multiple token approvals in a single transaction
    • Native token (ETH) filtering
    • Custom deadline support
  • Updated SDK types and interfaces to support new functionality

Testing

Added test suites for:

  • buildAddLiquidityCallData.test.ts
  • preparePermit2BatchData.test.ts
  • Updated existing tests to maintain compatibility

Usage Example

// Without permit
const { calldata, value } = await uniDevKit.buildAddLiquidityCallData({
  pool,
  amount0: "100000000",
  amount1: "50000000000000000",
  recipient: "0x...",
  slippageTolerance: 50
});

// With Permit2 batch approval
const permitData = await uniDevKit.preparePermit2BatchData({
  tokens: [pool.token0.address, pool.token1.address],
  spender: uniDevKit.getContractAddress('positionManager'),
  owner: userAddress
});

const signature = await signer.signTypedData(
  permitData.toSign.domain,
  permitData.toSign.types,
  permitData.toSign.values
);

const permitWithSignature = permitData.buildPermit2BatchDataWithSignature(signature);

const { calldata, value } = await uniDevKit.buildAddLiquidityCallData({
  pool,
  amount0: parseUnits("100", 6),
  recipient: "0x...",
  permit2BatchSignature: permitWithSignature
});

const tx = await sendTransaction({
  to: uniDevKit.getContractAddress('positionManager'),
  data: calldata,
  value
});

- Add buildAddLiquidityCallData utility for creating add liquidity transactions
- Implement preparePermit2BatchData for handling batch token approvals
- Update SDK instance to support new functionality
- Add comprehensive test coverage
- Remove deprecated buildPermit2CallData
- Update README with new examples
@luchobonatti luchobonatti self-assigned this Jun 5, 2025
@luchobonatti luchobonatti merged commit f4f3a18 into main Jun 5, 2025
1 check passed
@luchobonatti luchobonatti deleted the feat/buildAddLiquidityCallData branch June 5, 2025 16:03
@github-actions
Copy link

github-actions bot commented Jun 5, 2025

🎉 This PR is included in version 1.0.9 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants