import { createTarget, createTransformer } from '@subsquid/pipes'
import {
solanaPortalSource,
type SolanaPortalData,
SolanaQueryBuilder
} from '@subsquid/pipes/solana'
async function main() {
const blankQueryBuilder = new SolanaQueryBuilder()
const source = solanaPortalSource({
portal: 'https://portal.sqd.dev/datasets/solana-mainnet',
query: blankQueryBuilder,
})
// Build the query inside the transformer
const transformer = createTransformer({
transform: async (data: SolanaPortalData<any>) => {
return data.blocks.map(b => b.instructions.map(i => i.transactionHash))
},
query: ({queryBuilder, portal, logger}) => {
queryBuilder.addFields({
block: {
slot: true, hash: true,
},
instruction: {
programId: true,
data: true,
accounts: true,
transactionHash: true,
},
})
.addInstruction({
request: {
programId: ['whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc'], // Orca Whirlpool
d8: ['0xf8c69e91e17587c8'], // Swap instruction discriminator
},
range: {
from: 200000000,
to: 200000000,
},
})
}
})
const target = createTarget({
write: async ({logger, read}) => {
for await (const {data} of read()) {
logger.info({data}, 'data')
}
},
})
await source.pipe(transformer).pipeTo(target)
}
void main()