@chorus-one/ethereum
Version:
All-in-one toolkit for building staking dApps on Ethereum network
78 lines (71 loc) • 2.19 kB
text/typescript
import { Hex } from 'viem'
import { StakewiseConnector } from '../connector'
import { VaultActionType, VaultTransaction } from '../types/transactionHistory'
async function extractTransactionsHistory (
connector: StakewiseConnector,
vault: Hex,
userAccount: Hex
): Promise<VaultTransaction[]> {
const vars_getActions = {
where: {
vault_: {
id: vault.toLowerCase()
},
actionType_in: Object.values(VaultActionType),
address: userAccount.toLowerCase()
},
first: 1000,
skip: 0
}
const actionsData = await connector.graphqlRequest({
type: 'graph',
op: 'AllocatorActions',
query: `
query AllocatorActions(
$skip: Int!
$first: Int!
$where: AllocatorAction_filter
) {
allocatorActions(
skip: $skip,
first: $first,
orderBy: createdAt,
orderDirection: desc,
where: $where,
) {
id
assets
shares
createdAt
actionType
}
}
`,
variables: vars_getActions
})
if (!actionsData.data.allocatorActions || actionsData.data.allocatorActions.length === 0) {
throw new Error(`Transaction data is missing the allocatorActions field`)
}
const interactions: VaultTransaction[] = []
// eslint-disable-next-line @typescript-eslint/no-explicit-any
actionsData.data.allocatorActions.forEach((action: any) => {
const createdAt: string = action.createdAt
interactions.push({
vault: vault,
when: new Date(parseInt(createdAt) * 1000),
type: action.actionType,
amount: action.assets ? BigInt(action.assets) : 0n, // some txs don't have assets, e.g. ExitQueueEntered
hash: action.id
})
})
return interactions
}
export async function getTxHistory (params: {
connector: StakewiseConnector
vault: Hex
userAccount: Hex
}): Promise<Array<VaultTransaction>> {
const { connector, vault, userAccount } = params
const interactions = await extractTransactionsHistory(connector, vault, userAccount)
return interactions
}