@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
62 lines (57 loc) • 1.91 kB
text/typescript
import { Hex } from 'viem'
import { StakewiseConnector } from '../connector'
export const getUnstakeQueue = async (params: { connector: StakewiseConnector; userAccount: Hex; vault: Hex }) => {
const { connector, vault, userAccount } = params
const queueData = await connector.graphqlRequest({
type: 'graph',
op: 'exitQueue',
query: `
query exitQueue($where: ExitRequest_filter) {
exitRequests(where: $where) {
receiver
isClaimed
timestamp
totalAssets
isClaimed
isClaimable
exitedAssets
isV2Position
positionTicket
exitQueueIndex
withdrawalTimestamp
}
}
`,
variables: {
where: {
vault: vault.toLowerCase(),
receiver: userAccount.toLowerCase()
}
}
})
if (!queueData.data.exitRequests) {
throw new Error('Queue data is missing the exitRequests field')
}
const data = queueData.data.exitRequests as {
timestamp: string
isClaimable: boolean
isClaimed: boolean
totalAssets: string
exitedAssets: string
positionTicket: string
exitQueueIndex: string | null
withdrawalTimestamp: number | null
}[]
return data.map((queueItem) => {
return {
positionTicket: BigInt(queueItem.positionTicket),
exitQueueIndex: queueItem.exitQueueIndex ? BigInt(queueItem.exitQueueIndex) : undefined,
isWithdrawable: queueItem.isClaimable,
wasWithdrawn: queueItem.isClaimed,
timestamp: Number(queueItem.timestamp) * 1000,
totalAssets: BigInt(queueItem.totalAssets),
exitedAssets: BigInt(queueItem.exitedAssets || 0),
withdrawalTimestamp: queueItem.withdrawalTimestamp !== null ? queueItem.withdrawalTimestamp * 1000 : undefined
}
})
}