pipo tx parse

This commit is contained in:
thloyi
2026-01-23 17:58:59 +08:00
parent 6bab10866b
commit 9f73e8f57f
12 changed files with 1172 additions and 746 deletions

View File

@@ -232,19 +232,14 @@ func decodeSwap2Params(data []byte) (*dflowSwapParams, error) {
return out, nil
}
func parseDFlowInstruction(tx *versionedTransaction, instructionIndex int) (*TxSignal, error) {
msg := tx.Message
if instructionIndex >= len(msg.Instructions) {
return nil, fmt.Errorf("instruction index out of bounds")
}
ix := msg.Instructions[instructionIndex]
if len(ix.Data) < 8 {
func parseDFlowInstruction(tx TransactionGetter, accounts []uint8, data []byte) (*TxSignal, error) {
if len(data) < 8 {
return nil, nil
}
var err error
disc := ix.Data[:8]
payload := ix.Data[8:]
disc := data[:8]
payload := data[8:]
var params *dflowSwapParams
switch {
@@ -277,12 +272,12 @@ func parseDFlowInstruction(tx *versionedTransaction, instructionIndex int) (*TxS
var (
srcIdx uint8
)
if len(ix.Accounts) <= 6 {
if len(accounts) <= 6 {
return nil, nil
}
accounts := ix.Accounts[5:]
accounts = accounts[5:]
for i, acctIdx := range accounts {
key, err := getStaticKey(tx.Message.StaticAccountKeys, int(acctIdx))
key, err := tx.GetAccount(acctIdx) //getStaticKey(tx.Message.StaticAccountKeys, int(acctIdx))
if err != nil {
return nil, err
}
@@ -295,29 +290,31 @@ func parseDFlowInstruction(tx *versionedTransaction, instructionIndex int) (*TxS
return nil, nil
}
baseMint, err := getStaticKey(tx.Message.StaticAccountKeys, int(accounts[srcIdx]))
baseMint, err := tx.GetAccount(accounts[srcIdx]) // getStaticKey(tx.Message.StaticAccountKeys, int(accounts[srcIdx]))
if err != nil {
return nil, err
}
quoteMint, err := getStaticKey(tx.Message.StaticAccountKeys, int(accounts[srcIdx+1]))
quoteMint, err := tx.GetAccount(accounts[srcIdx+1]) // getStaticKey(tx.Message.StaticAccountKeys, int(accounts[srcIdx+1]))
if err != nil {
return nil, err
}
if !quoteMint.Equals(solana.WrappedSol) {
return nil, nil
}
maker, _ := tx.GetAccount(0)
// Build TxSignal
sig := &TxSignal{
TxHash: tx.Signatures[0].String(),
Maker: tx.Message.StaticAccountKeys[0].String(),
TxHash: tx.Signatures(),
Maker: maker.String(),
Program: "PumpAMM",
Event: "sell",
Token0Address: baseMint.String(),
Token1Address: wsolMint,
Token0Amount: formatTokenAmount(pump.Amount),
Token1Amount: decimal.Zero,
Token0AmountUint64: uint64(pump.Amount),
Token0AmountUint64: pump.Amount,
Block: tx.Block(),
Token1AmountUint64: 0,
}
return sig, nil