streamingfast / solana-go

Go library for the Solana Blockchain
Apache License 2.0
121 stars 25 forks source link

Subscribing to an account returns default rpc.Account #5

Closed gallynaut closed 2 years ago

gallynaut commented 3 years ago

Whenever I subscribe to an account through the devnet websocket, it always returns the default initialized values for rpc.Account. I can see the raw json coming across has values for lamports/rentEpoch but for some reason decodeResponse doesn't unmarshal correctly

Initialize websocket

    a.Solana.WS, err = ws.Dial(context.Background(), "ws://devnet.solana.com")
    if err != nil {
        log.Fatal("could not start Solana websocket:", err)
    }
    defer a.Solana.WS.Close()

Subscribe to account and wait for messages

func (sol *SolanaApp) subscribeAccount(done <-chan struct{}) error {
    s, err := sol.WS.AccountSubscribe(sol.PublicKey, "")
    if err != nil {
        return err
    }
    log.Println("subscribed to account")
    go func() {
        for {
            select {
            case <-done:
                log.Println("unsubscribing account")
                return
            default:
                message, err := s.Recv()
                if err != nil {
                    fmt.Println(" error receiving subscription message: ", err)
                }
                acctResult, ok := message.(*ws.AccountResult)
                if !ok {
                    log.Printf("error decoding msg: %+v\n", message)
                }
                log.Printf("msg received: %+v\n", *acctResult)
            }
        }
    }()
    return nil
}

Json Response

{
   "jsonrpc":"2.0",
   "method":"accountNotification",
   "params":{
      "result":{
         "context":{
            "slot":47771518
         },
         "value":{
            "data":[
               "",
               "base64"
            ],
            "executable":false,
            "lamports":202000000000,
            "owner":"11111111111111111111111111111111",
            "rentEpoch":110
         }
      },
      "subscription":3128857
   }
}

Unmarshalled Struct

Context:
    {
        Slot:47771518
    } 
Value:
    {
        Account:
        {
            Lamports:0 
            Data: 
            Owner:11111111111111111111111111111111 
            Executable:false 
            RentEpoch:0
            }
        }
    }
maoueh commented 2 years ago

Sorry long delay, just tried to reproduce using Mainnet and it seems account data is properly populated now, I assume it has been fixed, closing.

Don't hesitate to re-open if needed.