UniswapV3Staker

UniswapV3Staker.sol

A forked version of the UniswapV3Staker contract for use with the NFTX AMM.

Table of Contents

Constants
Variables
Events
Public Write Functions
Read Functions

Constants

factory

function factory() external view returns (IUniswapV3Factory)

The address of the NFTX AMM's pool factory.

nonfungiblePositionManager

function nonfungiblePositionManager() 
    external 
    view 
    returns (INonfungiblePositionManager)

The address of the NFTX AMM's NonfungiblePositionManager.

maxIncentiveDuration

function maxIncentiveDuration() external view returns (uint256)

The maximum duration of an incentive, in seconds.

maxIncentiveStartLeadTime

function maxIncentiveStartLeadTime() external view returns (uint256)

The maximum amount of seconds into the future the incentive startTime can be set.

Variables

incentives

function incentives(bytes32 incentiveId)
    external
    view
    returns (
        uint256 totalRewardUnclaimed,
        uint160 totalSecondsClaimedX128,
        uint96 numberOfStakes
    )

Represents a staking incentive.

Parameters
Type
Description

incentiveId

bytes32

The ID of the incentive computed from its parameters.

Return values
Type
Description

totalRewardUnclaimed

bytes32

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(uint256 tokenId)
    external
    view
    returns (
        address owner,
        uint48 numberOfStakes,
        int24 tickLower,
        int24 tickUpper
    )

Returns information about a deposited liquidity NFT.

Parameters
Type
Description

tokenId

uint256

The token ID of the liquidity NFT.

Return values
Type
Description

owner

address

The owner of the deposited liquidity 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.

rewards

function rewards(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
Type
Description

rewardToken

IERC20Minimal

The address of the token for which to check rewards.

owner

address

The owner for which the rewards owed are checked.

Return values
Type
Description

tokenId

uint256

The amount of the reward token claimable by the owner.

Events

IncentiveCreated

event IncentiveCreated(
    IERC20Minimal indexed rewardToken,
    IUniswapV3Pool indexed pool,
    uint256 startTime,
    uint256 endTime,
    address refundee,
    uint256 reward
)

Event emitted when a liquidity mining incentive has been created.

Parameters
Type
Description

rewardToken

IERC20Minimal

The token being distributed as a reward.

pool

IUniswapV3Pool

The NFTX AMM pool.

startTime

uint256

The time when the incentive program begins.

endTime

uint256

The time when rewards stop accruing.

refundee

uint256

The address that receives any remaining reward tokens after the end time.

reward

uint256

The amount of reward tokens to be distributed.

IncentiveEnded

event IncentiveEnded(bytes32 indexed incentiveId, uint256 refund)

Event that can be emitted when a liquidity mining incentive has ended.

Parameters
Type
Description

incentiveId

bytes32

ID of the incentive that is ending.

refund

uint256

The amount of reward tokens refunded.

DepositTransferred

event DepositTransferred(
    uint256 indexed tokenId, 
    address indexed oldOwner, 
    address indexed newOwner
)

Emitted when ownership of a deposit changes

Parameters
Type
Description

tokenId

uint256

The token ID of the deposited liquidity NFT 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 indexed tokenId, 
    bytes32 indexed incentiveId, 
    uint128 liquidity
)

Event emitted when an NFTX AMM LP token has been staked.

Parameters
Type
Description

tokenId

uint256

The token ID of the staked liquidity NFT.

incentiveId

bytes32

ID of the incentive being staked on.

liquidity

uint128

The amount of liquidity staked.

TokenUnstaked

event TokenUnstaked(uint256 indexed tokenId, bytes32 indexed incentiveId)

Event emitted when an NFTX AMM liquidity NFT has been unstaked.

Parameters
Type
Description

tokenId

uint256

The token ID of the unstaked liquidity NFT.

incentiveId

bytes32

ID of the incentive being unstaked from.

RewardClaimed

event RewardClaimed(address indexed to, uint256 reward)

Event emitted when a reward token has been claimed.

Parameters
Type
Description

to

address

The address that claimed rewards were sent to.

reward

uint256

The amount of reward token claimed.

Write Functions

constructor

function constructor(
    contract IUniswapV3Factory _factory,
    contract INonfungiblePositionManager _nonfungiblePositionManager,
    uint256 _maxIncentiveStartLeadTime,
    uint256 _maxIncentiveDuration
) public
Parameters
Type
Description

_factory

contract IUniswapV3Factory

The Uniswap V3 factory.

_nonfungiblePositionManager

contract INonfungiblePositionManager

The NFT position manager contract address.

_maxIncentiveStartLeadTime

uint256

The max duration of an incentive in seconds.

_maxIncentiveDuration

uint256

The max amount of seconds into the future the incentive startTime can be set.

createIncentive

function createIncentive(IncentiveKey memory key, uint256 reward) external 

Creates a new liquidity mining incentive program.

Parameters
Type
Description

key

IncentiveKey

Details of the incentive to create.

reward

uint256

The amount of reward tokens to be distributed.

endIncentive

function endIncentive(IncentiveKey memory key) 
    external 
    returns (uint256 refund)

Ends an incentive after the incentive end time has passed and all stakes have been withdrawn.

Parameters
Type
Description

key

IncentiveKey

Details of the incentive to end.

Return values
Type
Description

refund

uint256

The remaining reward tokens when the incentive is ended.

onERC721Received

function onERC721Received(
    address,
    address from,
    uint256 tokenId,
    bytes calldata data
) external returns (bytes4)

Upon receiving a NFTX V3 LP ERC721, creates the token deposit setting owner to from. Also stakes token in one or more incentives if properly formatted data has a length > 0.

Whenever an {IERC721} tokenId token is transferred to this contract via {IERC721-safeTransferFrom} by operator from from, this function is called. It must return its Solidity selector to confirm the token transfer. If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. The selector can be obtained in Solidity with IERC721.onERC721Received.selector.

Parameters
Type
Description

unnamed

address

The address which called the transfer function.

from

address

The address which previously owned the token.

tokenId

uint256

ID of the NFT.

data

bytes

Additional data with no specified format.

Return values
Type
Description

unnamed

bytes4

A keccak256 hash of the function call and arguments.

transferDeposit

function transferDeposit(uint256 tokenId, address to) external

Transfers ownership of a deposit from the sender to the given recipient.

Parameters
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 memory data) external

Withdraws an NFTX V3 LP token tokenId from this contract to the recipient to.

Parameters
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(IncentiveKey memory key, uint256 tokenId) external override

Stakes an NFTX V3 LP token.

Parameters
Type
Description

key

IncentiveKey

The key of the incentive for which to stake the NFT.

tokenId

uint256

The ID of the token to stake.

unstakeToken

function unstakeToken(IncentiveKey memory key, uint256 tokenId) external override

Unstakes an NFTX V3 LP token.

Parameters
Type
Description

key

IncentiveKey

The key of the incentive for which to unstake the NFT.

tokenId

uint256

The ID of the token to unstake.

claimReward

function claimReward(
    IERC20Minimal rewardToken,
    address to,
    uint256 amountRequested
) external returns (uint256 reward)

Transfers amountRequested of accrued rewardToken rewards from the contract to the recipient to.

Parameters
Type
Description

rewardToken

IERC20Minimal

The token being distributed as a reward.

to

address

The address where claimed rewards will be sent.

amountRequested

uint256

The amount of reward token to claim. If set to 0, then the entire reward amount is claimed.

Return values
Type
Description

reward

uint256

The amount of reward token claimed.

Read Functions

stakes

function stakes(uint256 tokenId, bytes32 incentiveId)
    public
    view
    override
    returns (uint160 secondsPerLiquidityInsideInitialX128, uint128 liquidity)

Returns information about a staked liquidity NFT.

Parameters
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
Type
Description

secondsPerLiquidityInsideInitialX128

uint160

secondsPerLiquidity represented as a UQ32.128.

liquidity

bytes32

The amount of liquidity in the NFT as of the last time the rewards were computed.

getRewardInfo

function getRewardInfo(IncentiveKey memory key, uint256 tokenId)
    external
    view
    override
    returns (uint256 reward, uint160 secondsInsideX128)

Calculates the reward amount that will be received for the given stake.

Parameters
Type
Description

key

IncentiveKey

The ID of the incentive.

tokenId

uint256

The token ID of the staked liquidity NFT.

Return values
Type
Description

reward

uint256

The reward accrued to the NFT for the given incentive thus far.

secondsInsideX128

uint160

The seconds inside the tick range.

Last updated