Skip to content

weeaa/goyser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

17 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Geyser Yellowstone SDK

GoDoc Go Report Card License

This library contains tooling to interact with Yellowstone Geyser Plugin. Work in progress. ๐Ÿ‘ท

yellowstone

โ‡๏ธ Contents

๐Ÿ“ก Methods

  • SubscribeAccounts
    • AppendAccounts
    • UnsubscribeAccounts
    • UnsubscribeAccountsByID
  • SubscribeSlots
    • UnsubscribeSlots
  • SubscribeTransaction
    • UnsubscribeTransaction
  • SubscribeTransactionStatus
  • SubscribeBlocks
  • SubscribeBlocksMeta
  • SubscribeEntry
  • SubscribeAccountDataSlice

๐Ÿ’พ Installing

Go 1.22.0 or higher.

go get github.com/weeaa/goyser@latest

๐Ÿ’ป Examples

Subscribe to Slots and Account

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)
    }
  }
}

๐Ÿ›Ÿ Support

If my work has been useful in building your for-profit services/infra/bots/etc, consider donating at EcrHvqa5Vh4NhR3bitRZVrdcUGr1Z3o6bXHz7xgBU2FB (SOL).

๐Ÿ“ƒ License

Apache-2.0 License.