跳到主要内容

区间转换器

FullRangeConvertorV2

FullRangeConvertorV2 将 V3 窄区间仓位转换为全区间仓位,并在同一笔交易中将新仓位锁入 BDexV3LiquidityLocker

convertToFullRangeAndLock

function convertToFullRangeAndLock(
LockParams lockParams,
SlippageChecks slippageParams
) external payable returns (
uint256 newLockId,
uint256 amountLiquidity0,
uint256 amountLiquidity1,
uint256 refund0,
uint256 refund1
);

调用前,NFT Owner 必须将 lockParams.nft_id 授权给 FullRangeConvertorV2

lockParams

struct LockParams {
INonfungiblePositionManager nftPositionManager;
uint256 nft_id;
address dustRecipient;
address owner;
address additionalCollector;
address collectAddress;
uint256 unlockDate;
uint16 countryCode;
string feeName;
bytes[] r;
}
参数说明
nftPositionManager原仓位 NFT 所属的 Position Manager(BDex),必须已加入 Locker 白名单。
nft_id要转换并锁仓的 NFT ID。
dustRecipient接收未用于新流动性的 token0/token1,以及锁仓初始收取结果的地址。
owner新锁仓的 Owner。
additionalCollector允许额外执行手续费收取的地址。
collectAddress自动收取手续费时的接收地址,不能为零地址。
unlockDate秒级解锁时间,必须晚于当前时间;永久锁仓使用 ETERNAL_LOCK
countryCodeLocker 支持的国家或地区代码。
feeNameLocker 费用方案名称;默认使用 DEFAULT
r动态费用签名参数;不使用动态费用时传空数组 []

slippageParams

struct SlippageChecks {
uint256 amount0LiquidityMin;
uint256 amount1LiquidityMin;
uint256 amount0RefundMin;
uint256 amount1RefundMin;
}
参数说明
amount0LiquidityMin铸造全区间 NFT 时,token0 的最小投入数量。窄区间转换时必须大于 0
amount1LiquidityMin铸造全区间 NFT 时,token1 的最小投入数量。窄区间转换时必须大于 0
amount0RefundMin转换后退还给 dustRecipient 的 token0 最小数量,通常传 0
amount1RefundMin转换后退还给 dustRecipient 的 token1 最小数量,通常传 0

amount0RefundMinamount1RefundMin 表示最小退款量,并非最大滑点或最大损失。

msg.value

feeName 对应的固定费用使用原生代币时,msg.value 必须与该费用方案的 flatFee 完全一致。

当前 Converter 不支持支付 ERC20 固定费用,因此不能使用 flatFeeToken != address(0)flatFee > 0 的费用方案。

返回值

返回值说明
newLockId新创建的 Locker Lock ID。
amountLiquidity0实际用于新全区间流动性的 token0 数量。
amountLiquidity1实际用于新全区间流动性的 token1 数量。
refund0退还给 dustRecipient 的 token0 数量。
refund1退还给 dustRecipient 的 token1 数量。

如果原 NFT 已经是全区间仓位,合约会跳过重新铸造并直接锁仓;此时流动性投入量和退款量均返回 0

getRangeAndMaxTick

function getRangeAndMaxTick(
INonfungiblePositionManager nftPositionManager,
uint256 nftId
) external view returns (
bool isFullRange,
int24 maxTick
);
参数或返回值说明
nftPositionManagerNFT 所属的 Position Manager。
nftId要查询的 NFT ID。
isFullRange当前 NFT 是否已经是全区间仓位。
maxTick当前费率等级对应的最大可用 Tick。全区间为 [-maxTick, maxTick]

tickSpacingToMaxTick

function tickSpacingToMaxTick(
int24 tickSpacing
) external pure returns (int24 maxTick);
参数或返回值说明
tickSpacingPool 费率等级对应的 Tick 间距。
maxTick该 Tick 间距对应的最大可用 Tick。