5 Commits

Author SHA1 Message Date
cachalots
5d06d18aa8 culimit 2026-02-27 15:32:36 +08:00
9877794d1c fix: flas buy/sell 2026-02-21 19:03:00 +08:00
f6242f0193 Merge branch 'master' of https://go.onsig.ai/onsig/libsam 2026-02-21 18:52:17 +08:00
b06a1fa377 chore: upgrade axiom pumpfun buy/sell 2026-02-21 18:42:18 +08:00
bijianing97
bd2dbe3c91 Add lbPairAddress for TxSignal 2026-02-12 17:37:29 +08:00
4 changed files with 26 additions and 11 deletions

View File

@@ -122,6 +122,10 @@ func parseDlmmInstruction(tx VersionedTransaction, instructionIndex int) (TxSign
if err != nil {
return nil, err
}
lbPair, err := tx.GetAccount(int(instruction.Accounts[0]))
if err != nil {
return nil, err
}
userTokenOut, err := tx.GetAccount(int(instruction.Accounts[5]))
if err != nil {
return nil, err
@@ -220,6 +224,7 @@ func parseDlmmInstruction(tx VersionedTransaction, instructionIndex int) (TxSign
ExactSOL: exactSol,
ActiveBin: args.ActiveBin,
MaxPriceImpactBps: args.MaxPriceImpactBps,
LbPairAddress: lbPair.String(),
Block: tx.Block,
Token0AmountUint64: token0AmountUint64,
Token1AmountUint64: token1AmountUint64,

View File

@@ -10,8 +10,8 @@ import (
var flasProgramID = solana.MustPublicKeyFromBase58("FLASHX8DrLbgeR8FcfNV1F5krxYcYMUdBkrP1EPBtxB9")
var (
flasBuyTokensIX = []byte{0x00, 0x1, 0x4}
flasSellTokensIX = []byte{0x01, 0x1, 0x3}
flasBuyTokensIX = []byte{0x00, 0x1, 0x1b}
flasSellTokensIX = []byte{0x01, 0x1, 0x1a}
flasAmmBuyTokensIX = []byte{0x00, 0x2, 0x2}
flasAmmSellTokensIX = []byte{0x01, 0x2, 0x2}
)
@@ -140,11 +140,11 @@ func parseFlasAmmBuy(tx VersionedTransaction, instructionIndex int) (*TxSignal,
func parseFlasSell(tx VersionedTransaction, instructionIndex int) (*TxSignal, error) {
instruction := tx.Instructions[instructionIndex]
if len(instruction.Accounts) < 9 {
if len(instruction.Accounts) < 11 {
return nil, fmt.Errorf("accounts too short")
}
mint, err := tx.GetAccount(int(instruction.Accounts[8]))
mint, err := tx.GetAccount(int(instruction.Accounts[10]))
if err != nil {
return nil, err
}
@@ -178,15 +178,15 @@ func parseFlasSell(tx VersionedTransaction, instructionIndex int) (*TxSignal, er
func parseFlasBuy(tx VersionedTransaction, instructionIndex int) (*TxSignal, error) {
instruction := tx.Instructions[instructionIndex]
if len(instruction.Accounts) < 9 {
if len(instruction.Accounts) < 11 {
return nil, fmt.Errorf("accounts too short")
}
mint, err := tx.GetAccount(int(instruction.Accounts[8]))
mint, err := tx.GetAccount(int(instruction.Accounts[10]))
if err != nil {
return nil, err
}
user, err := tx.GetAccount(int(instruction.Accounts[0]))
user, err := tx.GetAccount(int(instruction.Accounts[1]))
if err != nil {
return nil, err
}

View File

@@ -45,6 +45,7 @@ type TxSignal struct {
IsToken2022 bool `json:"is_token2022"`
IsMayhemMode bool `json:"is_mayhem_mode"`
CUPrice decimal.Decimal `json:"cu_price"`
CULimit decimal.Decimal `json:"cu_limit"`
SWQoSAgent string `json:"swqos_agent"`
SWQoSTips decimal.Decimal `json:"swqos_tips"`
@@ -55,6 +56,8 @@ type TxSignal struct {
ActiveBin int32 `json:"active_bin"`
// MaxPriceImpactBps is the price impact guard for swap_with_price_impact(2).
MaxPriceImpactBps uint16 `json:"max_price_impact_bps"`
//
LbPairAddress string `json:"lb_pair_address"`
// parsed values
Token0AmountUint64 uint64 `json:"-"`

View File

@@ -203,16 +203,22 @@ func ParseTransactionWithHandler(ctx context.Context, versioned VersionedTransac
cuPrice := decimal.Zero
swqosAgent := ""
swqosTips := decimal.Zero
cuLimit := decimal.Zero
for _, instruction := range versioned.Instructions {
program, err := versioned.GetAccount(int(instruction.ProgramIDIndex))
if err != nil {
continue
}
if program.Equals(ComputeBudgetProgram) &&
len(instruction.Data) == 9 &&
instruction.Data[0] == 0x03 {
cuPriceUint64 := binary.LittleEndian.Uint64(instruction.Data[1:9])
cuPrice = formatCUPrice(cuPriceUint64)
len(instruction.Data) == 9 {
if instruction.Data[0] == 0x03 {
cuPriceUint64 := binary.LittleEndian.Uint64(instruction.Data[1:9])
cuPrice = formatCUPrice(cuPriceUint64)
} else if instruction.Data[0] == 0x02 {
cuLimitUint32 := binary.LittleEndian.Uint32(instruction.Data[1:4])
cuLimit = formatCUPrice(uint64(cuLimitUint32))
}
}
if program.Equals(solana.SystemProgramID) &&
len(instruction.Data) == 12 &&
@@ -260,6 +266,7 @@ func ParseTransactionWithHandler(ctx context.Context, versioned VersionedTransac
one.Label = handler.Label
one.Block = versioned.Block
one.CUPrice = cuPrice
one.CULimit = cuLimit
one.SWQoSAgent = swqosAgent
one.SWQoSTips = swqosTips
select {