From cddfcc3eefe48463340fc824ac82246e3e475fde Mon Sep 17 00:00:00 2001 From: samlior Date: Mon, 30 Mar 2026 11:59:42 +0800 Subject: [PATCH] fix: term sell --- cmd/txparse/main.go | 2 +- pkg/shreder/program_term.go | 4 +-- pkg/shreder/txparser_test.go | 53 +++++++++++++++++++++++++++++++++++- 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/cmd/txparse/main.go b/cmd/txparse/main.go index 2765b07..1b785cd 100644 --- a/cmd/txparse/main.go +++ b/cmd/txparse/main.go @@ -15,7 +15,7 @@ import ( const ( rpcURL = "https://staked.helius-rpc.com?api-key=5adcf1f9-5719-43d1-bf3f-c2d4e1e5f94d" - txSignature = "PDynKmdiRG61ZZQoTSmdoTvra2Q8MG91YRdce7vo7EhpoYwr5WjJLbEuJbocPunk2zb4ZCZjXSGNU5bXwJRL7Gu" + txSignature = "4oSnHnDSscjmc6XX1rjXCEBavoLR9wkdZvGCAUn928iLWqrCwt2a6mgJpjP4NHqrCboUC82ugrjjEbNGNYAagkue" labelFilter = "" ) diff --git a/pkg/shreder/program_term.go b/pkg/shreder/program_term.go index 2d40e13..e1c52d5 100644 --- a/pkg/shreder/program_term.go +++ b/pkg/shreder/program_term.go @@ -11,7 +11,7 @@ import ( var terminalProgramID = solana.MustPublicKeyFromBase58("term9YPb9mzAsABaqN71A4xdbxHmpBNZavpBiQKZzN3") var ( terminalBuyTokensIX = []byte{0x14, 0xfe, 0x38, 0xc9, 0x3d, 0x37, 0x17, 0x27} - terminalSellTokensIX = []byte{0xbe, 0x84, 0xa2, 0x96, 0x93, 0x7c, 0xf8, 0x6b} + terminalSellTokensIX = []byte{0xcd, 0xaa, 0x10, 0x49, 0x20, 0xd6, 0x62, 0xd6} terminalAmmSellTokensIX = []byte{0x40, 0x64, 0x97, 0xb9, 0x16, 0xfa, 0xec, 0xb1} ) @@ -144,7 +144,7 @@ func parseTermSell(tx VersionedTransaction, instruction Instructions) (*TxSignal Token0Amount: formatTokenAmount(tokenAmount), Token1Amount: formatSolAmount(solAmount), Program: "Pump", - Event: "buy", + Event: "sell", IsToken2022: false, IsMayhemMode: false, ExactSOL: false, diff --git a/pkg/shreder/txparser_test.go b/pkg/shreder/txparser_test.go index 039cf7f..2472637 100644 --- a/pkg/shreder/txparser_test.go +++ b/pkg/shreder/txparser_test.go @@ -189,7 +189,58 @@ func TestParseTermBuy(t *testing.T) { t.Fatalf("expected token0 amount 6952026214256, got %d", signal.Token0AmountUint64) } if signal.Token1AmountUint64 != 250000000 { - t.Fatalf("expected token1 amount 653333333, got %d", signal.Token1AmountUint64) + t.Fatalf("expected token1 amount 250000000, got %d", signal.Token1AmountUint64) + } +} + +func TestParseTermSell(t *testing.T) { + rpcUrl := os.Getenv("SOL_RPC_URL") + if rpcUrl == "" { + t.Fatalf("SOL_RPC_URL is not set") + } + + client := rpc.New(rpcUrl) + ch := make(chan TxSignal) + closed := make(chan struct{}) + go func() { + ParseTransactionForSubscribe( + context.Background(), + getTransaction(t, client, "4oSnHnDSscjmc6XX1rjXCEBavoLR9wkdZvGCAUn928iLWqrCwt2a6mgJpjP4NHqrCboUC82ugrjjEbNGNYAagkue"), + nil, + ch, + closed, + ) + }() + go func() { + <-closed + close(ch) + }() + signals := make([]TxSignal, 0) + for signal := range ch { + signals = append(signals, signal) + } + if len(signals) != 1 { + t.Fatalf("expected 1 signal, got %d", len(signals)) + } + + signal := signals[0] + if signal.Label != "terminal" { + t.Fatalf("expected terminal signal, got %s", signal.Label) + } + if signal.Event != "sell" { + t.Fatalf("expected sell event, got %s", signal.Event) + } + if signal.Maker != "DjAj23BSiaRJKJziKHwtLexEHRDgL4tEjx4Ye4Gkug2E" { + t.Fatalf("expected maker DjAj23BSiaRJKJziKHwtLexEHRDgL4tEjx4Ye4Gkug2E, got %s", signal.Maker) + } + if signal.Token0Address != "5J6TKpfP5SHDaUNAdDg23c31wS3KnfZ3JTfFErt4pump" { + t.Fatalf("expected token0 address 5J6TKpfP5SHDaUNAdDg23c31wS3KnfZ3JTfFErt4pump, got %s", signal.Token0Address) + } + if signal.Token0AmountUint64 != 6384819151429 { + t.Fatalf("expected token0 amount 6384819151429, got %d", signal.Token0AmountUint64) + } + if signal.Token1AmountUint64 != 243633622 { + t.Fatalf("expected token1 amount 243633622, got %d", signal.Token1AmountUint64) } }