Providing liquidity and staking your position NFT to earn rewards
Providing liquidity on Uniswap V3 makes the position eligible to earn swap fees if the swap takes place within the interval to which the liquidity was added. If incentives are available, a liquidity provider (LP) can stake its position NFT to mine those rewards as well. This guide explains how to mine additional liquidity incentives when they are available.
Use common sense and don't pay ridiculous amounts of Ethereum for gas for these simple transactions! It seems that the gas estimation for some of the methods described below does not work within Metamask, precisely, if you are trying to stake your position NFT before the incentives have started. In case of doubt, contact Synternet team on Discord, we will try to help. It is recommended to start staking position NFT on the incentive after it has been started.
Current incentives
- The currently incentivised period is from 2025-07-05 to 2025-10-05.
- The total amount of incentives: 225,000 SYNT or roughly 75,000 SYNT per month.
- A summary of metadata, which will be needed to liquidity providers (LPs) to mine the incentives and query their reward info:
{
"incentive": {
"rewardTokenAddress": "0xDA987c655ebC38C801DB64A8608bc1AA56Cd9a31",
"poolAddress": "0x5A6799c11AFb8Aa3B766f354d2d9863dDa118553",
"startDateUnix": "1751662800",
"endDateUnix": "1759611600",
"refundeeAddress": "0xf71F736Bb50125109967dA6572c5acFDE03F1467"
},
"reward": "225000000000000000000000",
"keys": {
"incentiveHash": "0x8c5ae43d57eb89f14225a04b9a5f93311b6331959362da4b22d565216be3ec62",
"incentiveKey": "0x000000000000000000000000da987c655ebc38c801db64a8608bc1aa56cd9a310000000000000000000000005a6799c11afb8aa3b766f354d2d9863dda11855300000000000000000000000000000000000000000000000000000000686840d00000000000000000000000000000000000000000000000000000000068e18ad0000000000000000000000000f71f736bb50125109967da6572c5acfde03f1467"
}
}
- Key for querying accumulated rewards:
["0xDA987c655ebC38C801DB64A8608bc1AA56Cd9a31","0x5A6799c11AFb8Aa3B766f354d2d9863dDa118553",1751662800,1759611600,"0xf71F736Bb50125109967dA6572c5acFDE03F1467"]
Creating a liquidity position
The first step is of course to create a liquidity position. This is done via Uniswap UI, which this guide is currently not covering.
To start mining rewards, a liquidity provider will need to make two more transactions:
1) approve position NFT token on Staker contract 2) send it to Staker contract in oder to deposit and stake the token in a single action.
Interacting with Positions NFT and Staker smart contracts
The guide will be using Etherscan UI. In order to send transactions via Etherscan, a user needs to connect to UI using MetaMask, WalletConnect, or Coinbase Wallet. Thus, all common hardware wallets are also supported as well.
Figure: Connecting to Etherscan UI is necessary for sending transactions
In case you want to provide liquidity as a multisig address, it is also possible to use Safe Wallet to interact with these smart contracts.
Step 1: Approve NFT on Staker
When liquidity position is created on Uniswap V3 protocol, an NFT corresponding to that position is minted and added to the LP's account that have added the liquidity. The first transaction (a cheap one) is to use approve (0x095ea7b3)
method from Uniswap V3: Positions NFT contract.
Arguments:
- to:
0xe34139463bA50bD61336E0c446Bd8C0867c6fE65
(Uniswap V3: Staker contract address) - tokenId:
0000000
(this is a placeholder, use your NFT's Token ID)
Figure: Approving your liquidity position NFT on Staker contract
The transaction, when successful, will look like this.
Step 2: Send NFT to Staker and stake on the incentive
Second transaction will deposit and stake your NFT on the Staker contract (this is a more expensive one, because it is actually at least 2 on-chain actions rolled into a single transaction). Use safeTransferFrom (0xb88d4fde)
method from Uniswap V3: Positions NFT.
There are two methods with exactly the same name, but different hash signature, pay attention to that. Also the method which allows sending the position NFT and staking it in one go has a _data
argument. Alternatively, you can use safeTransferFrom (0x42842e0e)
method as well, but then you should stake the position NFT with stakeToken (0xf2d2909b)
method from Uniswap V3: Staker.
Arguments:
- from:
0x......
(this is a placeholder, use the same address that you used to create liquidity position and which owns the NFT, it is also the same wallet address that is signing these transactions) - to:
0xe34139463bA50bD61336E0c446Bd8C0867c6fE65
(Uniswap V3: Staker contract address) - tokenId:
0000000
(this is a placeholder, use your NFT's Token ID) - _data:
0x000000000000000000000000da987c655ebc38c801db64a8608bc1aa56cd9a310000000000000000000000005a6799c11afb8aa3b766f354d2d9863dda11855300000000000000000000000000000000000000000000000000000000686840d00000000000000000000000000000000000000000000000000000000068e18ad0000000000000000000000000f71f736bb50125109967da6572c5acfde03f1467
(this is the unhashedincentiveKey
from the metadata JSON above. Always check if this is a valid incentive's key)
Figure: Sending your liquidity position NFT to Staker contract deposits it and also stakes it
The transaction, when successful, will look like this.
Step 3: Query accumulated rewards
After these two transactions are done, the rewards being mined can already be seen via getRewardInfo
method on Uniswap V3: Staker contract. Thankfully, querying doesn’t cost anything! Also, there's no need to connect a wallet to Etherscan.
Arguments:
- key:
["0xDA987c655ebC38C801DB64A8608bc1AA56Cd9a31","0x5A6799c11AFb8Aa3B766f354d2d9863dDa118553",1751662800,1759611600,"0xf71F736Bb50125109967dA6572c5acFDE03F1467"]
(use exactly this, with all the parentheses, commas, etc. This is a "human readable" key of the incentive - a combination of metadata from the first message in the format ["Reward token","pool address",start date,end date,"refundee"].) - tokenId:
0000000
(this is a placeholder, use your NFT's Token ID)
Figure: Querying how much rewards have been accumulated
Step 4: Unstake NFT from Staker
To withdraw rewards, the position NFT first needs to be unstaked from the incentive.
Reward withdrawing is done via unstakeToken (0xf549ab42)
method on Uniswap V3: Staker contract.
Arguments:
- key (tuple): (here we are using the same fields that have been used to request the reward info)
- rewardToken:
0xDA987c655ebC38C801DB64A8608bc1AA56Cd9a31
(the SYNT token address, so this won't change) - pool:
0x5A6799c11AFb8Aa3B766f354d2d9863dDa118553
(Uniswap V3 pool, so this also won't change) - startTime:
1751662800
(use the appropriate incentive's data!) - endTime:
1759611600
(use the appropriate incentive's data!) - refundee:
0xf71F736Bb50125109967dA6572c5acFDE03F1467
(the refundee address from the incentive metadata)
- rewardToken:
- tokenId:
0000000
(this is a placeholder, use your NFT's Token ID)
Figure: Unstaking your liquidity position NFT on Staker contract won't transfer it back to your wallet just yet
The NFT will not be transferred back to its owner account, it is only unstaked via this command. Use withdrawToken
method for that (see below). However, if after a particular incentive ends and the new one starts, if the price is within the price interval set in the position, it makes sense to just stake the token on the new incentives program using stakeToken
method (see below).
Step 5: Claim rewards
After the token was unstaked form a specific incentive, rewards can be claimed. This is done via claimReward (0x2f2d783d)
method on Uniswap V3: Staker contract.
Arguments:
- rewardToken:
0xDA987c655ebC38C801DB64A8608bc1AA56Cd9a31
(the SYNT token address, so this won't change) - to:
0x0000000000000000000000000000000000000000
(this is a placeholder, use the account address that is providing liquidity) - amountRequested:
0
(use zero to withdraw all available rewards)
Figure: Claiming your rewards on Staker contract will send them to your wallet
Note that you can claim the rewards only after you unstake your NFT from the Uniswap V3: Staker contract.
Next steps: Withdraw NFT or stake again
As mentioned, after one incentive program ends, another should begin. Therefore, it makes sense to just stake the position NFT on a new incentive, but only if the market price is within the price interval of that position. To stake on a new incentive use stakeToken (0xf2d2909b)
method on Uniswap V3: Staker contract.
Arguments:
- key (tuple): (here we are using the same fields that have been used to request the reward info)
- rewardToken:
0xDA987c655ebC38C801DB64A8608bc1AA56Cd9a31
(the SYNT token address, so this won't change) - pool:
0x5A6799c11AFb8Aa3B766f354d2d9863dDa118553
(Uniswap V3 pool, so this also won't change) - startTime:
1751662800
(use the appropriate incentive's data!) - endTime:
1759611600
(use the appropriate incentive's data!) - refundee:
0xf71F736Bb50125109967dA6572c5acFDE03F1467
(the refundee address from the incentive metadata)
- rewardToken:
- tokenId:
0000000
(placeholder here, use your NFT's Token ID)
Figure: You can stake your position NFT on as many incentives as there are available
Alternatively, you can withdraw NFT token back to your wallet using withdrawToken (0x3c423f0b)
method on Uniswap V3: Staker contract.
Arguments:
- tokenId:
0000000
(this is a placeholder, use your NFT's Token ID) - to:
0x0000000000000000000000000000000000000000
(this is a placeholder, use the account address that is providing liquidity) - data:
0x0
(this is an optional argument and unimportant in this case, so use this zero hex value)
Figure: Withdrawing your position NFT from Staker contract will send it to your wallet