This library contains tooling to interact with Yellowstone Geyser Plugin. Work in progress. ๐ท
SubscribeAccounts
AppendAccounts
UnsubscribeAccounts
UnsubscribeAccountsByID
SubscribeSlots
UnsubscribeSlots
SubscribeTransaction
UnsubscribeTransaction
SubscribeTransactionStatus
SubscribeBlocks
SubscribeBlocksMeta
SubscribeEntry
SubscribeAccountDataSlice
Go 1.22.0 or higher.
go get github.com/weeaa/goyser@latest
package main
import (
"context"
"github.com/joho/godotenv"
"github.com/weeaa/goyser"
"github.com/weeaa/goyser/geyser_pb"
"log"
"os"
)
func main() {
ctx := context.Background()
if err := godotenv.Load(); err != nil {
log.Fatal(err)
}
rpcAddr, ok := os.LookupEnv("GEYSER_RPC")
if !ok {
log.Fatal("could not inf GEYSER_RPC in .env")
}
client, err := goyser.New(
ctx,
rpcAddr,
)
if err != nil {
log.Fatal(err)
}
defer client.GrpcConn.Close()
if err = client.NewSubscribeClient("main", ctx); err != nil {
log.Fatal(err)
}
defer client.DefaultStreamClient.Geyser.CloseSend()
stream := client.Streams["main"]
defer client.DefaultStreamClient.Geyser.CloseSend()
if err = stream.SubscribeSlots("slots", &geyser_pb.SubscribeRequestFilterSlots{}); err != nil {
log.Fatal(err)
}
if err = stream.SubscribeAccounts("accounts", &geyser_pb.SubscribeRequestFilterAccounts{
Account: []string{"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"},
}); err != nil {
log.Fatal(err)
}
for out := range stream.Ch {
switch {
case out.GetSlot() != nil:
log.Printf("slot update: %+v", out.GetSlot())
case out.GetTransaction() != nil:
log.Printf("tx update: %+v", out.GetTransaction())
default:
log.Printf("other update: %+v", out)
}
}
}
If my work has been useful in building your for-profit services/infra/bots/etc, consider donating at
EcrHvqa5Vh4NhR3bitRZVrdcUGr1Z3o6bXHz7xgBU2FB
(SOL).