diff --git a/internal/example/cmd/main.go b/internal/example/cmd/main.go index 2cb3ea0..8c78bdf 100644 --- a/internal/example/cmd/main.go +++ b/internal/example/cmd/main.go @@ -61,16 +61,13 @@ func main() { if tx.Program != parser.SolProgramPumpAMM { continue } - if tx.EntryContract == "" || tx.EntryContract == parser.SolProgramPumpAMM || tx.EntryContract == parser.EntryContractOKXDexRouterV2 || tx.EntryContract == "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr" { - continue - } //if tx.Token1Amount.GreaterThanOrEqual(decimal.NewFromFloat(0.1)) || tx.Event != "buy" { // continue //} // printed = true - fmt.Printf("t: %s, block: %d, hash: %s, maker: %s, program: %s, event: %s, token0: %s, entryContract: %s, token balance: %s, EntryContract: %s\n", + fmt.Printf("t: %s, block: %d, is cash:%v hash: %s, maker: %s, program: %s, event: %s, token0: %s, entryContract: %s, token balance: %s, EntryContract: %s\n", time.Now().Format(time.RFC3339Nano), - tx.Block, tx.GetTxHash(), tx.Maker, tx.Program, tx.Event, tx.Token0Amount, tx.EntryContract, tx.AfterSignerToken0Balance, tx.EntryContract) + tx.Block, tx.Cashback, tx.GetTxHash(), tx.Maker, tx.Program, tx.Event, tx.Token0Amount, tx.EntryContract, tx.AfterSignerToken0Balance, tx.EntryContract) //break } //if !printed { diff --git a/internal/example/tx.go b/internal/example/tx.go index d8262a2..09bb42f 100644 --- a/internal/example/tx.go +++ b/internal/example/tx.go @@ -50,7 +50,8 @@ type Tx struct { AfterSOLBalance decimal.Decimal `gorm:"column:after_sol_balance;type:numeric" json:"after_sol_balance"` EntryContract string `gorm:"column:tx_entry_contract;type:entry_contract;default:'none'" json:"tx_entry_contract"` - Mayhem bool + Mayhem bool + Cashback bool `json:"is_cashback_coin"` } func (tx *Tx) GetTxHash() string { @@ -121,6 +122,7 @@ func FromTx(tx *parser.Tx) []*Tx { EntryContract: s.CheckEntryContract(), Mayhem: s.Mayhem, + Cashback: s.Cashback, } } else if s.Program == "PumpAMM" { if s.BaseMint.Equals(solana.WrappedSol) { @@ -175,6 +177,7 @@ func FromTx(tx *parser.Tx) []*Tx { EntryContract: s.CheckEntryContract(), Mayhem: s.Mayhem, + Cashback: s.Cashback, } } else { newTx = &Tx{ @@ -219,6 +222,7 @@ func FromTx(tx *parser.Tx) []*Tx { EntryContract: s.CheckEntryContract(), Mayhem: s.Mayhem, + Cashback: s.Cashback, } } } diff --git a/internal/example/yellowstone.go b/internal/example/yellowstone.go index 2f07f9b..fd2652c 100644 --- a/internal/example/yellowstone.go +++ b/internal/example/yellowstone.go @@ -62,9 +62,7 @@ func NewClientWithPumpSwap(endpoint string, ch chan SubscriptionMessage) *Client "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA", //Pump AMM "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P", //Pump } - subscription.Transactions["transactions_sub"].AccountRequired = []string{ - "ARu4n5mFdZogZAravu7CcizaojWnS6oqka37gdLT5SZn", - } + subscription.BlocksMeta = make(map[string]*pb.SubscribeRequestFilterBlocksMeta) subscription.BlocksMeta["block_meta"] = &pb.SubscribeRequestFilterBlocksMeta{} diff --git a/pumpamm.go b/pumpamm.go index dbd1e85..d163099 100644 --- a/pumpamm.go +++ b/pumpamm.go @@ -41,6 +41,8 @@ type ammBuyEvent struct { LastUpdateTimestamp int64 MinBaseAmountOut uint64 IxName string + CashbackFeeBasisPoints uint64 + Cashback uint64 } type ammCreatePoolEvent struct { @@ -113,6 +115,8 @@ type ammSellEvent struct { CoinCreator solana.PublicKey CoinCreatorFeeBasisPoints uint64 CoinCreatorFee uint64 + CashbackFeeBasisPoints uint64 + Cashback uint64 } type ammWithdrawEvent struct { @@ -329,6 +333,7 @@ func ammBuyParser(tx *Tx, instruction Instruction, innerInstructions InnerInstru userBalance, _ := GetSolAfterTx(result, userIndex) userQuote = userQuote.Add(decimal.NewFromUint64(userBalance)) } + isCashbackCoin := event.CashbackFeeBasisPoints > 0 || event.Cashback > 0 return []Swap{ { Program: SolProgramPumpAMM, @@ -347,6 +352,7 @@ func ammBuyParser(tx *Tx, instruction Instruction, innerInstructions InnerInstru BaseReserve: decimal.NewFromUint64(event.PoolBaseTokenReserve - event.BaseAmountOut), QuoteReserve: decimal.NewFromUint64(event.PoolQuoteTokenReserve + event.QuoteAmountIn), Mayhem: isMayhemPump(result.accountList[instruction.Accounts[9]]), + Cashback: isCashbackCoin, UserBaseBalance: userBase, UserQuoteBalance: userQuote, EntryContract: entryContract, @@ -448,6 +454,7 @@ func ammSellParser(tx *Tx, instruction Instruction, innerInstructions InnerInstr userBalance, _ := GetSolAfterTx(result, userIndex) userQuote = userQuote.Add(decimal.NewFromUint64(userBalance)) } + isCashbackCoin := event.CashbackFeeBasisPoints > 0 || event.Cashback > 0 return []Swap{ { Program: SolProgramPumpAMM, @@ -466,6 +473,7 @@ func ammSellParser(tx *Tx, instruction Instruction, innerInstructions InnerInstr BaseReserve: decimal.NewFromUint64(event.PoolBaseTokenReserves + event.BaseAmountIn), QuoteReserve: decimal.NewFromUint64(event.PoolQuoteTokenReserves - event.QuoteAmountOut), Mayhem: isMayhemPump(result.accountList[instruction.Accounts[9]]), + Cashback: isCashbackCoin, UserBaseBalance: userBase, UserQuoteBalance: userQuote, EntryContract: entryContract,