chore: support pump create

This commit is contained in:
2026-03-23 15:43:08 +08:00
parent 17a3c9e89c
commit 21eba4264f
3 changed files with 163 additions and 23 deletions

View File

@@ -777,3 +777,122 @@ func TestParseRaydiumLaunchLabCreate2(t *testing.T) {
t.Fatalf("expected IsToken2022 true, got false")
}
}
func manuallyLoadAddressTable(t *testing.T, client *rpc.Client, tablePubkey solana.PublicKey) *AddressTables {
loader := NewAddressTables(client, false)
table, err := loader.loadAddressTable(tablePubkey)
if err != nil {
t.Fatalf("failed to load address table: %s", err)
}
loader.tables.Add(tablePubkey, &TableInfo{
addresses: table,
})
return loader
}
func TestParsePumpCreate(t *testing.T) {
rpcUrl := os.Getenv("SOL_RPC_URL")
if rpcUrl == "" {
t.Fatalf("SOL_RPC_URL is not set")
}
client := rpc.New(rpcUrl)
loader := manuallyLoadAddressTable(t, client, solana.MustPublicKeyFromBase58("AXVvmhWaaPtV52jqYuTNqp1xRrkbxhfJfeHQKxq5cbvZ"))
ch := make(chan TxSignal)
closed := make(chan struct{})
go func() {
ParseTransactionForSubscribe(
context.Background(),
getTransaction(t, client, "3vUAHpBUoxeoZheo9m3XmufNUWmJWRAN4xZjSqDos71GL6tCKSTmJV6YeMS5XdVAbRAfqQi1rPusjbmEhoam4x9Y"),
loader,
ch,
closed,
)
}()
go func() {
<-closed
close(ch)
}()
signals := make([]TxSignal, 0)
for signal := range ch {
signals = append(signals, signal)
}
if len(signals) == 0 {
t.Fatalf("expected at least 1 signal, got %d", len(signals))
}
signal := signals[0]
if signal.Label != "pump" {
t.Fatalf("expected pump signal, got %s", signal.Label)
}
if signal.Event != "create" {
t.Fatalf("expected create event, got %s", signal.Event)
}
if signal.Maker != "8oVJLE69qH1i5jotFABcCoaPS38DAyZ7djRg6uuD3Cb7" {
t.Fatalf("expected maker 8oVJLE69qH1i5jotFABcCoaPS38DAyZ7djRg6uuD3Cb7, got %s", signal.Maker)
}
if signal.Token0Address != "AtaWsdyfcANLsHNdpYJyFdNvwSQnUzvhRN2MCCP9pump" {
t.Fatalf("expected token0 address AtaWsdyfcANLsHNdpYJyFdNvwSQnUzvhRN2MCCP9pump, got %s", signal.Token0Address)
}
if !signal.IsToken2022 {
t.Fatalf("expected IsToken2022 true, got false")
}
if signal.IsCashbackEnabled {
t.Fatalf("expected IsCashbackEnabled true, got false")
}
}
func TestParsePumpCreate2(t *testing.T) {
rpcUrl := os.Getenv("SOL_RPC_URL")
if rpcUrl == "" {
t.Fatalf("SOL_RPC_URL is not set")
}
client := rpc.New(rpcUrl)
ch := make(chan TxSignal)
closed := make(chan struct{})
go func() {
ParseTransactionForSubscribe(
context.Background(),
getTransaction(t, client, "3EKKjtNFzhtQaA9GyPt5UJHLr5mWT2XodaxWoenUrcaPpN8BKm84ATVapdUJcb9sJVFyS4iKD9spGBKfqkSFutea"),
nil,
ch,
closed,
)
}()
go func() {
<-closed
close(ch)
}()
signals := make([]TxSignal, 0)
for signal := range ch {
signals = append(signals, signal)
}
if len(signals) == 0 {
t.Fatalf("expected at least 1 signal, got %d", len(signals))
}
signal := signals[0]
if signal.Label != "pump" {
t.Fatalf("expected pump signal, got %s", signal.Label)
}
if signal.Event != "create" {
t.Fatalf("expected create event, got %s", signal.Event)
}
if signal.Maker != "5mGqXMqUbJzxQ9aqbBttB4JUfAMqceSTmrtpt6RuPXdC" {
t.Fatalf("expected maker 5mGqXMqUbJzxQ9aqbBttB4JUfAMqceSTmrtpt6RuPXdC, got %s", signal.Maker)
}
if signal.Token0Address != "J9Hqi5VddcTNJ2F5EyxSZxC2JpJeymfJXjLhsCVPZpna" {
t.Fatalf("expected token0 address J9Hqi5VddcTNJ2F5EyxSZxC2JpJeymfJXjLhsCVPZpna, got %s", signal.Token0Address)
}
if !signal.IsToken2022 {
t.Fatalf("expected IsToken2022 true, got false")
}
if signal.IsCashbackEnabled {
t.Fatalf("expected IsCashbackEnabled true, got false")
}
}