Get Positions for a Wallet
Fetch a wallet's open positions in Orca pools.
When combined with SHYFT APIs/SDK or DAS, we can also query all the position details with respect to a pool using graphQl. This involves two simple steps,
We use SHYFT's APIs/SDK to get all the Orca position mints from a users wallet.
We use the position mint to query Orca's position accounts using GraphQL.
The steps are illustrated below.
import { gql, GraphQLClient } from 'graphql-request';
const endpoint = `https://programs.shyft.to/v0/graphql?api_key=YOUR-API-KEY`; //Shyft's gQl endpoint
const graphQLClient = new GraphQLClient(endpoint, {
method: `POST`,
jsonSerializer: {
parse: JSON.parse,
stringify: JSON.stringify,
},
}); //Initialize gQL Client
async function getFeesOwedbyWallet(walletAddr) {
const token = await getWhirlpoolPositionToken(walletAddr);
const query = gql`
query MyQuery {
ORCA_WHIRLPOOLS_position(
where: {positionMint: {_eq: ${JSON.stringify(token.address)}}}
) {
feeOwedB
feeOwedA
liquidity
positionMint
pubkey
whirlpool
}
}
`;
const response = await graphQLClient.request(query);
console.dir(response,{depth: null});
}
getFeesOwedbyWallet('2v112XbwQXFrdqX438HUrfZF91qCZb7QRP4bwUiN7JF5')
Please note that, the Orca Whirlpool position token can be fetched from a users wallet using multiple ways, one of which is illustrated below
import { Network, ShyftSdk } from '@shyft-to/js';
const shyft = new ShyftSdk({ apiKey: "YOUR-API-KEY", network: Network.Mainnet }); //Initialize Shyft SDK
async function getWhirlpoolPositionToken(walletAddress)
{
const getAllTokens = await shyft.nft.getNftByOwner(walletAddress);
//using SHYFT SDK to get all Tokens
console.log("Total Tokens: ",getAllTokens.length);
for(let i = 0; i < getAllTokens.length; i++){
const token = getAllTokens[i];
if(token.update_authority === "3axbTs2z5GBy6usVbNVoqEgZMng3vZvMnAoX29BFfwhr" && token.name.includes("Orca Whirlpool Position")){
return {
success: true,
address: token.mint
}
}
}
return {
success: false,
address: ""
}
}
All whirlpool position tokens have the update_authority as 3axbTs2z5GBy6usVbNVoqEgZMng3vZvMnAoX29BFfwhr
and the name as 'Orca Whirlpool Position'. Also, please note that in this case we have considered the wallet address has only one Position token. A wallet can have multiple position token, and in that case, we would have to query with each position token in the users wallet in order to get the desired Whirlpool position details.
Last updated
Was this helpful?