UniswapV3Staker
UniswapV3Staker.sol
A forked version of the UniswapV3Staker contract for use with the NFTX AMM.
Table of Contents
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.
incentiveId
bytes32
The ID of the incentive computed from its parameters.
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.
tokenId
uint256
The token ID of the liquidity NFT.
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.
rewardToken
IERC20Minimal
The address of the token for which to check rewards.
owner
address
The owner for which the rewards owed are checked.
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.
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.
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
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.
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.
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.
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
_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.
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.
key
IncentiveKey
Details of the incentive to end.
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
.
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.
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.
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
.
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.
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.
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
.
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.
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.
tokenId
uint256
The ID of the staked token.
incentiveId
bytes32
The ID of the incentive for which the token is staked.
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.
key
IncentiveKey
The ID of the incentive.
tokenId
uint256
The token ID of the staked liquidity NFT.
reward
uint256
The reward accrued to the NFT for the given incentive thus far.
secondsInsideX128
uint160
The seconds inside the tick range.
Last updated