From 273e87b8ad27f0560e856e0ae067fa2dc14a2e65 Mon Sep 17 00:00:00 2001 From: thloyi Date: Wed, 22 Apr 2026 11:16:26 +0800 Subject: [PATCH] fix ignore failed metaora swap --- metaorapool.go | 7 +++++-- orcawhirpool_test.go | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 orcawhirpool_test.go diff --git a/metaorapool.go b/metaorapool.go index 0675527..4d5dc75 100644 --- a/metaorapool.go +++ b/metaorapool.go @@ -16,8 +16,8 @@ type metaoraPoolInitializePoolData struct { } type metaoraPoolSwapArgs struct { - InAmount uint64 - MinimumOutAmount uint64 + InAmount uint64 + MinimumOutAmount uint64 } var ( @@ -855,6 +855,9 @@ func metaoraPoolSwap(tx *Tx, instruction Instruction, innerInstructions InnerIns } } if !baseFound || !quoteFound { + if args.InAmount == 0 { + return nil, increaseOffset(offset), InstructionIgnoredError + } return nil, increaseOffset(offset), fmt.Errorf("failed to find meteora pool event in inner instructions") } diff --git a/orcawhirpool_test.go b/orcawhirpool_test.go new file mode 100644 index 0000000..43ea205 --- /dev/null +++ b/orcawhirpool_test.go @@ -0,0 +1,23 @@ +package pump_parser + +import "testing" + +func TestOrcaWhirlpoolRemoveLiquidityPreservesLargeUint64TransferAmounts(t *testing.T) { + EnableAllParsers() + + tx := mustParseRPCFixtureTx(t, "4sj82GCLtgTDExq7B8YrBsrrqPcE4FqT5Y1gKWmE4cHMDxs7wkCV1hik73dSZ99gZm3K4wyBZQ6U8Nmf48rM9Jri") + if len(tx.Swaps) == 0 { + t.Fatal("expected parsed swaps") + } + + swap := tx.Swaps[0] + if swap.Program != SolProgramOrcaWhirPool { + t.Fatalf("program = %s, want %s", swap.Program, SolProgramOrcaWhirPool) + } + if swap.Event != TxEventRemoveLiquidity { + t.Fatalf("event = %s, want %s", swap.Event, TxEventRemoveLiquidity) + } + + assertDecimalString(t, "base_amount", swap.BaseAmount, "101086439062") + assertDecimalString(t, "quote_amount", swap.QuoteAmount, "9863327902766042414") +}