๐Ÿฅฉ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