Skip to content

tsouza/go-eosio-ship

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-eosio-ship GoDoc Test

go-eosio-ship is a golang library built on top of go-eosio for connecting to and consuming from EOSIO State History Plugin (SHiP).

Usage

package main

import (
	"bytes"
	"fmt"
	"github.com/greymass/go-eosio/pkg/chain"
	"github.com/tsouza/go-eosio-ship/pkg/ship"
	"github.com/tsouza/go-eosio-ship/pkg/types"
)

func main() {
	var shipAbi *chain.Abi
	conn := ship.NewConnection("nodeos-address", 8080)
	err := conn.Open()
	if err != nil {
		panic(err)
	}
	for {
		select {
		case a, ok := <-conn.Ready:
			if ok {
				shipAbi = a
				// request current state
				err = conn.SendStatusRequest()
				if err != nil {
					panic(err)
				}
			}
		case status, ok := <-conn.Status:
			if ok {
				// request blocks
				err = conn.SendBlocksRequest(&types.GetBlocksRequest{
					StartBlockNum:       status.ChainStateEndBlock,
					EndBlockNum:         types.MaxBlockNum,
					MaxMessagesInFlight: 1,
					HavePositions:       nil,
					IrreversibleOnly:    false,
					FetchBlock:          true,
					FetchTraces:         true,
					FetchDeltas:         true,
					FetchBlockHeader:    false,
				})
				if err != nil {
					panic(err)
				}
			}
		case blocks, ok := <-conn.Blocks:
			if ok {
				// do something with blocks request result, like decoding deltas
				deltas, err := shipAbi.Decode(bytes.NewReader(blocks.Deltas), "table_delta[]")
				if err != nil {
					panic(err)
				}
				fmt.Printf("%v\n", deltas)
				
				// request more
				err = conn.SendAckBlocksRequest(&types.GetBlocksAckRequest{
					NumMessages: 1,
				})
				if err != nil {
					panic(err)
				}
			}
		case err, ok := <- conn.Error:
			if ok {
				// oops!
				panic(err)
			}
		}
	}
}

License

Code and documentation released under Apache License 2.0

About

Golang library for connecting to EOSIO SHIP

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages