Allows staking nonfungible liquidity tokens in exchange for reward tokens
Functions
factory
function factory(
) external view returns (contract IUniswapV3Factory)
The Uniswap V3 Factory
nonfungiblePositionManager
function nonfungiblePositionManager(
) external view returns (contract INonfungiblePositionManager)
The nonfungible position manager with which this staking contract is compatible
maxIncentiveDuration
function maxIncentiveDuration(
) external view returns (uint256)
The max duration of an incentive in seconds
maxIncentiveStartLeadTime
function maxIncentiveStartLeadTime(
) external view returns (uint256)
The max amount of seconds into the future the incentive startTime can be set
incentives
function incentives(
bytes32 incentiveId
) external view returns (uint256 totalRewardUnclaimed, uint160 totalSecondsClaimedX128, uint96 numberOfStakes)
Represents a staking incentive
Parameters:
Name | Type | Description |
---|
incentiveId | bytes32 | The ID of the incentive computed from its parameters |
Return Values:
Name | Type | Description |
---|
totalRewardUnclaimed | uint256 | The amount of reward token not yet claimed by users |
totalSecondsClaimedX128 | uint160 | Total liquidity-seconds claimed, represented as a UQ32.128 |
numberOfStakes | uint96 | The count of deposits that are currently staked for the incentive |
deposits
function deposits(
) external view returns (address owner, uint48 numberOfStakes, int24 tickLower, int24 tickUpper)
Returns information about a deposited NFT
Return Values:
Name | Type | Description |
---|
owner | address | The owner of the deposited NFT |
numberOfStakes | uint48 | Counter of how many incentives for which the liquidity is staked |
tickLower | int24 | The lower tick of the range |
tickUpper | int24 | The upper tick of the range |
stakes
function stakes(
uint256 tokenId,
bytes32 incentiveId
) external view returns (uint160 secondsPerLiquidityInsideInitialX128, uint128 liquidity)
Returns information about a staked liquidity NFT
Parameters:
Name | Type | Description |
---|
tokenId | uint256 | The ID of the staked token |
incentiveId | bytes32 | The ID of the incentive for which the token is staked |
Return Values:
Name | Type | Description |
---|
secondsPerLiquidityInsideInitialX128 | uint160 | secondsPerLiquidity represented as a UQ32.128 |
liquidity | uint128 | The amount of liquidity in the NFT as of the last time the rewards were computed |
rewards
function rewards(
contract IERC20Minimal rewardToken,
address owner
) external view returns (uint256 rewardsOwed)
Returns amounts of reward tokens owed to a given address according to the last time all stakes were updated
Parameters:
Name | Type | Description |
---|
rewardToken | contract IERC20Minimal | The token for which to check rewards |
owner | address | The owner for which the rewards owed are checked |
Return Values:
Name | Type | Description |
---|
rewardsOwed | uint256 | The amount of the reward token claimable by the owner |
createIncentive
function createIncentive(
struct IUniswapV3Staker.IncentiveKey key,
uint256 reward
) external
Creates a new liquidity mining incentive program
Parameters:
Name | Type | Description |
---|
key | struct IUniswapV3Staker.IncentiveKey | Details of the incentive to create |
reward | uint256 | The amount of reward tokens to be distributed |
endIncentive
function endIncentive(
struct IUniswapV3Staker.IncentiveKey key
) external returns (uint256 refund)
Ends an incentive after the incentive end time has passed and all stakes have been withdrawn
Parameters:
Name | Type | Description |
---|
key | struct IUniswapV3Staker.IncentiveKey | Details of the incentive to end |
Return Values:
Name | Type | Description |
---|
refund | uint256 | The remaining reward tokens when the incentive is ended |
transferDeposit
function transferDeposit(
uint256 tokenId,
address to
) external
Transfers ownership of a deposit from the sender to the given recipient
Parameters:
Name | Type | Description |
---|
tokenId | uint256 | The ID of the token (and the deposit) to transfer |
to | address | The new owner of the deposit |
withdrawToken
function withdrawToken(
uint256 tokenId,
address to,
bytes data
) external
Withdraws a Uniswap V3 LP token tokenId
from this contract to the recipient to
Parameters:
Name | Type | Description |
---|
tokenId | uint256 | The unique identifier of an Uniswap V3 LP token |
to | address | The address where the LP token will be sent |
data | bytes | An optional data array that will be passed along to the to address via the NFT safeTransferFrom |
stakeToken
function stakeToken(
struct IUniswapV3Staker.IncentiveKey key,
uint256 tokenId
) external
Stakes a Uniswap V3 LP token
Parameters:
Name | Type | Description |
---|
key | struct IUniswapV3Staker.IncentiveKey | The key of the incentive for which to stake the NFT |
tokenId | uint256 | The ID of the token to stake |
unstakeToken
function unstakeToken(
struct IUniswapV3Staker.IncentiveKey key,
uint256 tokenId
) external
Unstakes a Uniswap V3 LP token
Parameters:
Name | Type | Description |
---|
key | struct IUniswapV3Staker.IncentiveKey | The key of the incentive for which to unstake the NFT |
tokenId | uint256 | The ID of the token to unstake |
claimReward
function claimReward(
contract IERC20Minimal rewardToken,
address to,
uint256 amountRequested
) external returns (uint256 reward)
Transfers amountRequested
of accrued rewardToken
rewards from the contract to the recipient to
Parameters:
Name | Type | Description |
---|
rewardToken | contract IERC20Minimal | The token being distributed as a reward |
to | address | The address where claimed rewards will be sent to |
amountRequested | uint256 | The amount of reward tokens to claim. Claims entire reward amount if set to 0. |
Return Values:
Name | Type | Description |
---|
reward | uint256 | The amount of reward tokens claimed |
getRewardInfo
function getRewardInfo(
struct IUniswapV3Staker.IncentiveKey key,
uint256 tokenId
) external returns (uint256 reward, uint160 secondsInsideX128)
Calculates the reward amount that will be received for the given stake
Parameters:
Name | Type | Description |
---|
key | struct IUniswapV3Staker.IncentiveKey | The key of the incentive |
tokenId | uint256 | The ID of the token |
Return Values:
Name | Type | Description |
---|
reward | uint256 | The reward accrued to the NFT for the given incentive thus far |
secondsInsideX128 | uint160 | The seconds inside the tick range |
Events
IncentiveCreated
event IncentiveCreated(
contract IERC20Minimal rewardToken,
contract IUniswapV3Pool pool,
uint256 startTime,
uint256 endTime,
address refundee,
uint256 reward
)
Event emitted when a liquidity mining incentive has been created
Parameters:
Name | Type | Description |
---|
rewardToken | contract IERC20Minimal | The token being distributed as a reward |
pool | contract IUniswapV3Pool | The Uniswap V3 pool |
startTime | uint256 | The time when the incentive program begins |
endTime | uint256 | The time when rewards stop accruing |
refundee | address | The address which receives any remaining reward tokens after the end time |
reward | uint256 | The amount of reward tokens to be distributed |
IncentiveEnded
event IncentiveEnded(
bytes32 incentiveId,
uint256 refund
)
Event that can be emitted when a liquidity mining incentive has ended
Parameters:
Name | Type | Description |
---|
incentiveId | bytes32 | The incentive which is ending |
refund | uint256 | The amount of reward tokens refunded |
DepositTransferred
event DepositTransferred(
uint256 tokenId,
address oldOwner,
address newOwner
)
Emitted when ownership of a deposit changes
Parameters:
Name | Type | Description |
---|
tokenId | uint256 | The ID of the deposit (and token) that is being transferred |
oldOwner | address | The owner before the deposit was transferred |
newOwner | address | The owner after the deposit was transferred |
TokenStaked
event TokenStaked(
uint256 tokenId,
bytes32 liquidity,
uint128 incentiveId
)
Event emitted when a Uniswap V3 LP token has been staked
Parameters:
Name | Type | Description |
---|
tokenId | uint256 | The unique identifier of an Uniswap V3 LP token |
liquidity | bytes32 | The amount of liquidity staked |
incentiveId | uint128 | The incentive in which the token is staking |
TokenUnstaked
event TokenUnstaked(
uint256 tokenId,
bytes32 incentiveId
)
Event emitted when a Uniswap V3 LP token has been unstaked
Parameters:
Name | Type | Description |
---|
tokenId | uint256 | The unique identifier of an Uniswap V3 LP token |
incentiveId | bytes32 | The incentive in which the token is staking |
RewardClaimed
event RewardClaimed(
address to,
uint256 reward
)
Event emitted when a reward token has been claimed
Parameters:
Name | Type | Description |
---|
to | address | The address where claimed rewards were sent to |
reward | uint256 | The amount of reward tokens claimed |