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 toaddress 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 |