solana-dex-parser
Version:
Solana Dex Transaction Parser
115 lines (110 loc) • 4.17 kB
text/typescript
import { Connection } from '@solana/web3.js';
import dotenv from 'dotenv';
import { DexParser } from '../dex-parser';
dotenv.config();
const tests = {
CREATE: [
{
signature: 'xZmKodPHYxesDJzPLHfjqG4VvKJcQpwuo3fTa2T64LY9nePfAa97xtSmzCvSWJ5EFzYjAURLD666zqV8oJL8kTp',
type: 'CREATE',
desc: 'Raydium CPMM: initialize',
name: 'IMG',
poolId: 'CXgcuECqdaBpvJWH5cwEir9Y5FY9SKTjhGutMc95bGy3',
token0Mint: 'znv3FZt2HFAvzYf5LxzVyryh3mBXWuTRRng25gEZAjh',
token0Amount: 1000000000,
token1Mint: 'So11111111111111111111111111111111111111112',
token1Amount: 20,
},
{
signature: '55JBLGRP6Zcd4t8gxsQ27EbLN3kzzMMnwxA9iD1CUTsax2C2cJLNbW3nuRg1gCH56ojJ4YNpRcuzpDL1PbnRvh18',
type: 'CREATE',
desc: 'Raydium CPMM: initialize',
name: 'TRUMP',
poolId: 'HKuJrP5tYQLbEUdjKwjgnHs2957QKjR2iWhJKTtMa1xs',
token0Mint: '6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN',
token0Amount: 423.320786,
token1Mint: 'So11111111111111111111111111111111111111112',
token1Amount: 0.352896784,
},
],
ADD: [
{
signature: '2uVjffn9bwatwRnGZYRpJk5fhxTcGcGfvtc971FBdt1CgUhxESrG8qPN3DiahgaLDULC4JTqc1whSCfvZ5gzJRmL',
type: 'ADD',
desc: 'Raydium CPMM: deposit',
name: 'IMG',
poolId: 'CXgcuECqdaBpvJWH5cwEir9Y5FY9SKTjhGutMc95bGy3',
token0Mint: 'znv3FZt2HFAvzYf5LxzVyryh3mBXWuTRRng25gEZAjh',
token0Amount: 928.616834,
token1Mint: 'So11111111111111111111111111111111111111112',
token1Amount: 0.064818705,
},
{
signature: '38Bf6HotXPuGcErvexLS4tCQVnLSuD1PtvhgNuCmhbbNwwDKXNSw8Gc6MQwgWwpU5FNUJwGac1ziSS6kKDJdW1Rr',
type: 'ADD',
desc: 'Raydium CPMM: deposit',
name: 'TRUMP',
poolId: 'HKuJrP5tYQLbEUdjKwjgnHs2957QKjR2iWhJKTtMa1xs',
token0Mint: '6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN',
token0Amount: 972.595817,
token1Mint: 'So11111111111111111111111111111111111111112',
token1Amount: 95.855640586,
},
],
REMOVE: [
{
signature: '5sYGW9tkSuh4UHUNGLwtLRSuAGHTTKQMqgaGtF7jB4r8EzADkVmq3nPfiWiQ7UhPn4vj2bpqNXvcKpqgMX1uWc97',
type: 'REMOVE',
desc: 'Raydium CPMM: withdraw',
name: 'IMG',
poolId: 'CXgcuECqdaBpvJWH5cwEir9Y5FY9SKTjhGutMc95bGy3',
token0Mint: 'znv3FZt2HFAvzYf5LxzVyryh3mBXWuTRRng25gEZAjh',
token0Amount: 1735.661744,
token1Mint: 'So11111111111111111111111111111111111111112',
token1Amount: 0.03501825,
},
{
signature: '5eVe9LMAHgz6Ze7VrUn1XHgoaWJXinM2uoEvRciVoJsADCDc8v4HrewQorp4JUx3jAzBSw5p3RrSAYFqd95udWxR',
type: 'REMOVE',
desc: 'Raydium CPMM: withdraw',
name: 'TRUMP',
poolId: 'HKuJrP5tYQLbEUdjKwjgnHs2957QKjR2iWhJKTtMa1xs',
token0Mint: '6p6xgHyF7AeE6TZkSmFsko444wqoP15icUSqi2jfGiPN',
token0Amount: 977.537752,
token1Mint: 'So11111111111111111111111111111111111111112',
token1Amount: 95.417034698,
},
],
};
describe('Liquidity', () => {
let connection: Connection;
beforeAll(async () => {
// Initialize connection
const rpcUrl = process.env.SOLANA_RPC_URL;
if (!rpcUrl) {
throw new Error('SOLANA_RPC_URL environment variable is not set');
}
connection = new Connection(rpcUrl);
});
describe('Raydium CPMM', () => {
Object.values(tests)
.flat()
.forEach((test) => {
it(`${test.type} > ${test.name} > ${test.desc} `, async () => {
const tx = await connection.getTransaction(test.signature, {
maxSupportedTransactionVersion: 0,
});
if(!tx) throw new Error('Transaction not found');
const parser = new DexParser();
const events = parser.parseLiquidity(tx);
expect(events.length).toEqual(1);
expect(events[0].type).toEqual(test.type);
expect(events[0].poolId).toEqual(test.poolId);
expect(events[0].token0Mint).toEqual(test.token0Mint);
expect(events[0].token0Amount).toEqual(test.token0Amount);
expect(events[0].token1Mint).toEqual(test.token1Mint);
expect(events[0].token1Amount).toEqual(test.token1Amount);
});
});
});
});