package shreder import ( "encoding/hex" "testing" "github.com/gagliardetto/solana-go" ) func TestDecodeRouteV2Arg(t *testing.T) { tests := []struct { name string hexData string }{ { name: "Jupiter V6 RouteV2Arg Test 0", hexData: "bb64facc31c4af14809fd500000000002222e8db1800000064000a000000020000005601fe102700016310270102", }, { name: "Jupiter V6 RouteV2Arg Test 1", hexData: "bb64facc31c4af144ff91634b90000004e6c4d05000000002c013200000003000000520000000000000000102700014f102701024310270203", }, { name: "Jupiter V6 RouteV2Arg Test 2", hexData: "bb64facc31c4af14ba2eafa02c1d0000777a9b2200000000f4010a0000000100000052000000000000000010270001", }, { name: "Jupiter V6 RouteV2Arg Test 3", hexData: "bb64facc31c4af144a3521186b07000030508d0e00000000c201320000000300000052000000000000000010270001740110270102590010270203", }, { name: "Jupiter V6 RouteV2Arg Test 4", hexData: "bb64facc31c4af14092d05050000000013701f198c0100008102380100000300000059011027000168001027010251000000000000000010270203", }, { name: "Jupiter V6 RouteV2Arg Test 5", hexData: "bb64facc31c4af1480969800000000006f44ad39bd0000001202320000000200000068001027000151000000000000000010270102", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { instrData, err := hex.DecodeString(tt.hexData) if err != nil { t.Fatalf("failed to decode hex string: %v", err) return } t.Logf("raw bytes: %x", instrData[8:]) args, err := decodeJupiterV6RouteV2Arg(instrData[8:]) if err != nil { t.Fatalf("failed to decode jupiter arguments: %v", err) return } t.Logf("decoded args: %+v", args) }) } } func TestDecodeRouteArg(t *testing.T) { tests := []struct { name string hexData string }{ { name: "Jupiter V6 RouteArg Test 0", hexData: "e517cb977ae3ad2a030000004f6400014f64010251000000000000000064020340420f00000000005c1c81900e000000640000", }, { name: "Jupiter V6 RouteArg Test 1", hexData: "e517cb977ae3ad2a03000000646400017ab0b6c3d206f46577050000000c0000526401025f00640203bb628e2902000000338c430100000000320000", }, { name: "Jupiter V6 RouteArg Test 2", hexData: "e517cb977ae3ad2a04000000642300024b00000000410002761acfb15ea9fdcd0501200204769358e96343759bf8014402046196591e1e020000f5bf6fe101000000d00700", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { instrData, err := hex.DecodeString(tt.hexData) if err != nil { t.Fatalf("failed to decode hex string: %v", err) return } t.Logf("raw bytes: %x", instrData[8:]) args, err := decodeJupiterV6RouteArg(instrData[8:]) if err != nil { t.Fatalf("failed to decode jupiter arguments: %v", err) return } t.Logf("decoded args: %+v", args) }) } } func TestParseJupiterV6RouteDoesNotMisclassifyMeteoraDlmmAsPump(t *testing.T) { instrData, err := hex.DecodeString("e517cb977ae3ad2a0100000026640001b9fe480300000000187dbe35000000002c0100") if err != nil { t.Fatalf("failed to decode instruction data: %v", err) } accountStrs := []string{ "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "7Ubi7vPnj5E2WdMtpA21mQoZmpY2TnrDqWpHJg2j2k7z", "F7GdscGrjA8YwmiRaJNnbFAtmU6pmncwJX2Q6TNEVtWJ", "4tBgpAzd4QRCSKDkmSaRVqWpnKmRJjT5djjhaspNxUWR", "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4", "CreiuhfwdWCN5mJbMJtA9bBpYQrQF2tCBuZwSPWfpump", "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4", "D8cy77BBepLMngZx6ZukaTff5hCt1HrWyKk3Hnd9oitf", "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4", "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo", "6bh2zL833toG7TnbBn2HEi6vLBbMTEwREk6YPZYQThDK", "7Arfi1EzAiSMdbbwsEwUzndDGQzw1bHrVHir2cZmYi96", "8SQXJSUGrwRuh1fRtta2pGTXSKztboatnDjV9hdi7Kon", "G6SuCjTPhddLpUd7uUh5NJCpEhfg5oeN5vKxYmvnDX6i", "F7GdscGrjA8YwmiRaJNnbFAtmU6pmncwJX2Q6TNEVtWJ", "4tBgpAzd4QRCSKDkmSaRVqWpnKmRJjT5djjhaspNxUWR", "CreiuhfwdWCN5mJbMJtA9bBpYQrQF2tCBuZwSPWfpump", "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB", "9CuRuTiaNQjKyX73iPGY2n3qUZmP2Fyk4RvXKaHEksqj", "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo", "7Ubi7vPnj5E2WdMtpA21mQoZmpY2TnrDqWpHJg2j2k7z", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "D1ZN9Wj1fRSUQfCjhvnu1hqDMT7hzjzBBpi12nVniYD6", "LBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo", "BAxxa7cjHvqbSGpowcpinGxNKN66B9vwsMhSNzUWuS69", "99nHJNiPJBBupPfK7jdEsvx9KoHxSbeqSAfyn2qgboFA", "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4", } accounts := make([]solana.PublicKey, 0, len(accountStrs)) accountIndexes := make([]uint8, 0, len(accountStrs)) for i, account := range accountStrs { accounts = append(accounts, solana.MustPublicKeyFromBase58(account)) accountIndexes = append(accountIndexes, uint8(i)) } tx := VersionedTransaction{ Signatures: []solana.Signature{ solana.MustSignatureFromBase58("3AJSh1Dv4MHQL8UKLiVRkbAX2D45VRtNro68am9Dd66kh89khuFQGtsf8x1yx6m3pGSXU8vagb7Q4YfGXsfMzgEy"), }, StaticAccountKeys: accounts, Instructions: []Instructions{ { ProgramIDIndex: 4, Accounts: accountIndexes, Data: instrData, }, }, } signals, err := parseJupiterV6Instruction(tx, 0) if err != nil { t.Fatalf("parseJupiterV6Instruction returned error: %v", err) } if len(signals) != 0 { t.Fatalf("expected no signal for Meteora DLMM route, got %+v", signals) } }