Files
libsam/pkg/shreder/program_juptierv6_test.go

162 lines
5.3 KiB
Go
Raw Normal View History

2026-01-06 16:42:07 +08:00
package shreder
import (
"encoding/hex"
"testing"
2026-03-18 14:18:33 +08:00
"github.com/gagliardetto/solana-go"
2026-01-06 16:42:07 +08:00
)
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",
2026-02-12 12:44:36 +08:00
hexData: "e517cb977ae3ad2a03000000646400017ab0b6c3d206f46577050000000c0000526401025f00640203bb628e2902000000338c430100000000320000",
2026-01-06 16:42:07 +08:00
},
2026-02-17 19:13:12 +08:00
{
name: "Jupiter V6 RouteArg Test 2",
hexData: "e517cb977ae3ad2a04000000642300024b00000000410002761acfb15ea9fdcd0501200204769358e96343759bf8014402046196591e1e020000f5bf6fe101000000d00700",
},
2026-01-06 16:42:07 +08:00
}
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)
})
}
}
2026-03-18 14:18:33 +08:00
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)
}
}