Documentation
¶
Overview ¶
Package solanatxparser provides an extensible parser for Solana transactions.
Parsers are registered in priority order and each contributes typed events to a UnifiedResult. The library ships with three built-in providers:
- "cxcx" (cxcx-ai/solana-parser-go) — 50+ DEX protocols, Meme, Jupiter routing
- "defaultperson" (DefaultPerson/solana-dex-parser-go) — DLMM / DAMM v2 fallback
- "stake" (gagliardetto/solana-go/programs/stake) — 18 Stake program instructions
To add a new parser, implement the Provider interface and call Register.
Index ¶
- func NormalizeAMM(name string) string
- func ResolveAMM(programID string) string
- type BinaryReader
- type EventKind
- type LiquidityEvent
- type MemeEvent
- type Options
- type ParseContext
- type Parser
- func (p *Parser) ParseDecoded(signature string, rawTx *rpc.GetTransactionResult, tx *solana.Transaction) (*UnifiedResult, error)
- func (p *Parser) ParseSignature(ctx context.Context, signature string) (*UnifiedResult, error)
- func (p *Parser) RPCCallCount() int64
- func (p *Parser) Register(provider Provider)
- type Provider
- type ProviderName
- type ProviderStatus
- type StakeEvent
- type TokenAmount
- type TradeEvent
- type TransferEvent
- type UnifiedResult
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NormalizeAMM ¶
func ResolveAMM ¶
ResolveAMM looks up a program ID when the AMM name is empty or Unknown.
Types ¶
type BinaryReader ¶
type BinaryReader struct {
// contains filtered or unexported fields
}
func NewBinaryReader ¶
func NewBinaryReader(buffer []byte) *BinaryReader
func (*BinaryReader) ReadBytes ¶
func (r *BinaryReader) ReadBytes(n int) []byte
func (*BinaryReader) ReadPubkey ¶
func (r *BinaryReader) ReadPubkey() solana.PublicKey
func (*BinaryReader) ReadU128 ¶
func (r *BinaryReader) ReadU128() *big.Int
type LiquidityEvent ¶
type LiquidityEvent struct {
Layer ProviderName `json:"layer"`
Idx string `json:"idx"`
Action string `json:"action"`
User string `json:"user"`
AMM string `json:"amm"`
ProgramID string `json:"programId"`
PoolID string `json:"poolId"`
BaseToken TokenAmount `json:"baseToken"`
QuoteToken TokenAmount `json:"quoteToken"`
}
type Options ¶
func DefaultOptions ¶
func DefaultOptions() Options
type ParseContext ¶
type ParseContext struct {
Signature string
Slot uint64
BlockTime *int64
Tx *solana.Transaction
Meta *rpc.TransactionMeta
Version interface{}
DPTx *adapter.SolanaTransaction
DPConvErr error
}
ParseContext holds the pre-fetched transaction data shared by all providers.
type Parser ¶
type Parser struct {
// contains filtered or unexported fields
}
func (*Parser) ParseDecoded ¶
func (p *Parser) ParseDecoded(signature string, rawTx *rpc.GetTransactionResult, tx *solana.Transaction) (*UnifiedResult, error)
ParseDecoded runs all registered providers on pre-fetched data without any RPC calls.
func (*Parser) ParseSignature ¶
ParseSignature fetches and parses a single transaction through all registered providers.
func (*Parser) RPCCallCount ¶
type Provider ¶
type Provider interface {
Name() ProviderName
Parse(ctx *ParseContext, result *UnifiedResult) *ProviderStatus
}
Provider contributes typed events to a UnifiedResult. Implementations must be safe for concurrent use.
type ProviderName ¶
type ProviderName string
ParserName identifies a registered provider.
const ( ProviderCxcx ProviderName = "cxcx" ProviderDefaultPerson ProviderName = "defaultperson" ProviderStake ProviderName = "stake" ProviderSwap ProviderName = "swap" )
type ProviderStatus ¶
type ProviderStatus struct {
Ran bool `json:"ran"`
Error string `json:"error,omitempty"`
Elapsed string `json:"elapsed,omitempty"`
}
ProviderStatus tracks whether a provider ran and how long it took.
type StakeEvent ¶
type StakeEvent struct {
Layer ProviderName `json:"layer"`
Idx string `json:"idx"`
Instruction string `json:"instruction"`
StakeAccount string `json:"stakeAccount,omitempty"`
VoteAccount string `json:"voteAccount,omitempty"`
}
type TokenAmount ¶
type TradeEvent ¶
type TradeEvent struct {
Layer ProviderName `json:"layer"`
Idx string `json:"idx"`
Type string `json:"type"`
User string `json:"user"`
AMM string `json:"amm"`
Route string `json:"route"`
ProgramID string `json:"programId"`
Pools []string `json:"pools"`
InputToken TokenAmount `json:"inputToken"`
OutputToken TokenAmount `json:"outputToken"`
}
type TransferEvent ¶
type TransferEvent struct {
Layer ProviderName `json:"layer"`
Idx string `json:"idx"`
From string `json:"from"`
To string `json:"to"`
IsSelf bool `json:"isSelf"`
IsBurn bool `json:"isBurn"`
Token TokenAmount `json:"token"`
IsFee bool `json:"isFee"`
ProgramID string `json:"programId"`
}
type UnifiedResult ¶
type UnifiedResult struct {
Signature string `json:"signature"`
Slot uint64 `json:"slot"`
BlockTime *int64 `json:"blockTime,omitempty"`
Signer string `json:"signer"`
OnchainSuccess bool `json:"onchainSuccess"`
OnchainError interface{} `json:"onchainError,omitempty"`
Fee uint64 `json:"fee"`
ComputeUnits uint64 `json:"computeUnits"`
Trades []TradeEvent `json:"trades"`
Liquidities []LiquidityEvent `json:"liquidities"`
Transfers []TransferEvent `json:"transfers"`
MemeEvents []MemeEvent `json:"memeEvents"`
StakeEvents []StakeEvent `json:"stakeEvents"`
Providers map[ProviderName]*ProviderStatus `json:"providers"`
}
func (*UnifiedResult) EventCounts ¶
func (r *UnifiedResult) EventCounts() map[EventKind]int
func (*UnifiedResult) HasAnyEvent ¶
func (r *UnifiedResult) HasAnyEvent() bool
func (*UnifiedResult) SelfTransfers ¶
func (r *UnifiedResult) SelfTransfers() []TransferEvent