๐ฅฉRewards
This document aims to allow external developers to integrate with Mito's LP Staking Rewards from within their dApps. We will only show the message examples, how will you integrate them within your dApp is your own choice. Documentation on broadcasting the transactions containing these messages can be found here.
Query
Fetch Staking Rewards
import { IndexerGrpcMitoApi } from '@injectivelabs/sdk-ts'
const MITO_API_ENDPOINT = 'https://k8s.mainnet.mito.grpc-web.injective.network' /** for mainnet */
const mitoApi = new IndexerGrpcMitoApi(MITO_API_ENDPOINT)
const address = 'inj1..'
const STAKING_CONTRACT_ADDRESS = `inj1gtze7qm07nky47n7mwgj4zatf2s77xqvh3k2n8` /** staking contract address for mainnet */
const { rewards } = await mitoApi.fetchStakingRewardsByAccount({
stakingContractAddress: STAKING_CONTRACT_ADDRESS,
accountAddress: address
})
console.log(rewards)
Fetch Staking Pools
import { IndexerGrpcMitoApi } from '@injectivelabs/sdk-ts'
const MITO_API_ENDPOINT = 'https://k8s.mainnet.mito.grpc-web.injective.network' /** for mainnet */
const mitoApi = new IndexerGrpcMitoApi(MITO_API_ENDPOINT)
const address = 'inj1..'
const STAKING_CONTRACT_ADDRESS = `inj1gtze7qm07nky47n7mwgj4zatf2s77xqvh3k2n8` /** staking contract address for mainnet */
const { pools } = await mitoApi.fetchStakingPools({
stakingContractAddress: STAKING_CONTRACT_ADDRESS
})
console.log(pools)
Transactions
Stake LP
import {
MsgExecuteContractCompat,
spotQuantityToChainQuantityToFixed
} from '@injectivelabs/sdk-ts'
const sender = `inj1...`
const amount = 0.01 /** staking 0.01 QUNT/INJ LP */
const vaultLpDenom = 'factory...' /** Can be fetched from the vault's information */
const vaultTokenDecimals = 18
const STAKING_CONTRACT_ADDRESS = `inj1gtze7qm07nky47n7mwgj4zatf2s77xqvh3k2n8` /** staking contract address for mainnet */
const message = MsgExecuteContractCompat.fromJSON({
sender,
funds: [
{
denom: vaultLpDenom,
amount: spotQuantityToChainQuantityToFixed({
value: amount,
baseDecimals: vaultTokenDecimals
})
}
],
contractAddress: STAKING_CONTRACT_ADDRESS,
exec: {
action: 'stake',
msg: {}
}
})
/** (Prepare) Broadcast the transaction */
Unstake LP
Note: The users need to Claim Stake 24 hours after they unstaked their LP.
import {
MsgExecuteContractCompat,
spotQuantityToChainQuantityToFixed
} from '@injectivelabs/sdk-ts'
const sender = `inj1...`
const amount = 0.01 /** unstaking 0.01 QUNT/INJ LP */
const vaultLpDenom = 'factory...' /** Can be fetched from the vault's information */
const vaultTokenDecimals = 18
const STAKING_CONTRACT_ADDRESS = `inj1gtze7qm07nky47n7mwgj4zatf2s77xqvh3k2n8` /** staking contract address for mainnet */
const message = MsgExecuteContractCompat.fromJSON({
sender,
contractAddress: STAKING_CONTRACT_ADDRESS,
exec: {
action: 'unstake',
msg: {
coin: {
denom: vault.lpDenom,
amount: spotQuantityToChainQuantityToFixed({
value: amount,
baseDecimals: vaultTokenDecimals
})
}
}
}
})
/** (Prepare) Broadcast the transaction */
Claim Stake
import {
MsgExecuteContractCompat
} from '@injectivelabs/sdk-ts'
const sender = `inj1...`
const vaultLpDenom = 'factory...' /** Can be fetched from the vault's information */
const STAKING_CONTRACT_ADDRESS = `inj1gtze7qm07nky47n7mwgj4zatf2s77xqvh3k2n8` /** staking contract address for mainnet */
const message = MsgExecuteContractCompat.fromJSON({
sender,
contractAddress: STAKING_CONTRACT_ADDRESS,
exec: {
action: 'claim_stake',
msg: {
lp_token: vaultLpDenom
}
}
})
/** (Prepare) Broadcast the transaction */
Claim Rewards
import {
MsgExecuteContractCompat
} from '@injectivelabs/sdk-ts'
const sender = `inj1...`
const vaultLpDenom = 'factory...' /** Can be fetched from the vault's information */
const STAKING_CONTRACT_ADDRESS = `inj1gtze7qm07nky47n7mwgj4zatf2s77xqvh3k2n8` /** staking contract address for mainnet */
const message = MsgExecuteContractCompat.fromJSON({
sender,
contractAddress: STAKING_CONTRACT_ADDRESS,
exec: {
action: 'claim_rewards',
msg: {
lp_token: vaultLpDenom
}
}
})
Last updated