import { solanaPortalSource, solanaInstructionDecoder } from '@subsquid/pipes/solana'
import { createTarget } from '@subsquid/pipes'
import * as orcaWhirlpool from './abi/orca_whirlpool/index.js'
const source = solanaPortalSource({
portal: 'https://portal.sqd.dev/datasets/solana-mainnet',
})
const decoder = solanaInstructionDecoder({
programId: orcaWhirlpool.programId,
instructions: {
swap: orcaWhirlpool.instructions.swap,
swapV2: orcaWhirlpool.instructions.swapV2,
},
range: { from: 200000000, to: 200001000 },
})
const target = createTarget({
write: async ({ logger, read }) => {
for await (const { data } of read()) {
// data.swap and data.swapV2 contain decoded instructions
for (const swap of data.swap) {
logger.info({
slot: swap.blockNumber,
programId: swap.programId,
instruction: swap.instruction, // Typed instruction data
})
}
}
},
})
await source.pipe(decoder).pipeTo(target)