now able to decode EvenQueues

This commit is contained in:
billettc 2020-11-17 07:14:55 -05:00
parent 90034de446
commit b18ae61fda
6 changed files with 90 additions and 5 deletions

2
go.mod
View File

@ -4,7 +4,7 @@ go 1.14
require ( require (
github.com/GeertJohan/go.rice v1.0.0 github.com/GeertJohan/go.rice v1.0.0
github.com/dfuse-io/binary v0.0.0-20201113172957-3eda1bb6412c github.com/dfuse-io/binary v0.0.0-20201113225852-eb73efbfa745
github.com/dfuse-io/logging v0.0.0-20201110202154-26697de88c79 github.com/dfuse-io/logging v0.0.0-20201110202154-26697de88c79
github.com/google/go-cmp v0.4.1 // indirect github.com/google/go-cmp v0.4.1 // indirect
github.com/gorilla/rpc v1.2.0 github.com/gorilla/rpc v1.2.0

2
go.sum
View File

@ -79,6 +79,8 @@ github.com/dfuse-io/binary v0.0.0-20201113172717-8fc2fd76c8d2 h1:qeVi/lwj1tYUxdE
github.com/dfuse-io/binary v0.0.0-20201113172717-8fc2fd76c8d2/go.mod h1:GDFX6qH3BQZPWTeYaA4ZW98T94zs2skRoG3oMz/0jw0= github.com/dfuse-io/binary v0.0.0-20201113172717-8fc2fd76c8d2/go.mod h1:GDFX6qH3BQZPWTeYaA4ZW98T94zs2skRoG3oMz/0jw0=
github.com/dfuse-io/binary v0.0.0-20201113172957-3eda1bb6412c h1:ufKbFyLlpy/Rg6iErIBcsTqnql66Fq7iZynLfhYpNKg= github.com/dfuse-io/binary v0.0.0-20201113172957-3eda1bb6412c h1:ufKbFyLlpy/Rg6iErIBcsTqnql66Fq7iZynLfhYpNKg=
github.com/dfuse-io/binary v0.0.0-20201113172957-3eda1bb6412c/go.mod h1:GDFX6qH3BQZPWTeYaA4ZW98T94zs2skRoG3oMz/0jw0= github.com/dfuse-io/binary v0.0.0-20201113172957-3eda1bb6412c/go.mod h1:GDFX6qH3BQZPWTeYaA4ZW98T94zs2skRoG3oMz/0jw0=
github.com/dfuse-io/binary v0.0.0-20201113225852-eb73efbfa745 h1:41kLpvyYOkN/VenBzd5fwH069Oc11xJTvGwqK3kf6IU=
github.com/dfuse-io/binary v0.0.0-20201113225852-eb73efbfa745/go.mod h1:GDFX6qH3BQZPWTeYaA4ZW98T94zs2skRoG3oMz/0jw0=
github.com/dfuse-io/dauth v0.0.0-20200529171443-21c0e2d262c2/go.mod h1:tab5biQg59hbrHjaXTjaLcsP3zblx6B0I0Keu03xB44= github.com/dfuse-io/dauth v0.0.0-20200529171443-21c0e2d262c2/go.mod h1:tab5biQg59hbrHjaXTjaLcsP3zblx6B0I0Keu03xB44=
github.com/dfuse-io/derr v0.0.0-20200406214256-c690655246a1/go.mod h1:JW/hUKChGd6ytDtvwx4JFo57m1pnFvMxaq9WbDAb2fQ= github.com/dfuse-io/derr v0.0.0-20200406214256-c690655246a1/go.mod h1:JW/hUKChGd6ytDtvwx4JFo57m1pnFvMxaq9WbDAb2fQ=
github.com/dfuse-io/derr v0.0.0-20200417132224-d333cfd0e9a0/go.mod h1:/DjjRCyTi/KIiI1E1hnhvfWwg+K06jo+qM4VcjHvHq4= github.com/dfuse-io/derr v0.0.0-20200417132224-d333cfd0e9a0/go.mod h1:/DjjRCyTi/KIiI1E1hnhvfWwg+K06jo+qM4VcjHvHq4=

View File

@ -1,11 +1,9 @@
package solana package solana
import ( import (
"github.com/dfuse-io/logging"
"go.uber.org/zap" "go.uber.org/zap"
) )
func init() { func init() {
zlog, _ = zap.NewDevelopment() zlog, _ = zap.NewDevelopment()
logging.TestingOverride()
} }

7
serum/init_test.go Normal file
View File

@ -0,0 +1,7 @@
package serum
import "github.com/dfuse-io/logging"
func init() {
logging.TestingOverride()
}

View File

@ -18,10 +18,9 @@ import (
"fmt" "fmt"
"math/big" "math/big"
"go.uber.org/zap"
bin "github.com/dfuse-io/binary" bin "github.com/dfuse-io/binary"
"github.com/dfuse-io/solana-go" "github.com/dfuse-io/solana-go"
"go.uber.org/zap"
) )
type MarketV2 struct { type MarketV2 struct {
@ -166,3 +165,39 @@ func (s *SlabLeafNode) GetPrice() *big.Int {
v := new(big.Int).SetBytes(raw[0 : len(raw)-8]) v := new(big.Int).SetBytes(raw[0 : len(raw)-8])
return v return v
} }
type EventQueueHeader struct {
Serum [5]byte
AccountFlags uint64
Head uint64
Count uint64
SeqNum uint64
}
type EventFlag uint8
const (
FillEventFlag = iota
OutEventFlag
BidEventFlag
MakerEventFlag
)
var EventFlagStrings = []string{"FILL", "OUT", "BID", "MAKER"}
type Event struct {
Flag uint8
OwnerSlot uint8
FeeTier uint8
Padding [5]uint8
NativeQtyReleased uint64
NativeQtyPaid uint64
NativeFeeOrRebate uint64
OrderID bin.Uint128
Owner solana.PublicKey
ClientOrderID uint64
}
func (e *Event) Type() string {
return EventFlagStrings[e.Flag]
}

View File

@ -1,6 +1,7 @@
package serum package serum
import ( import (
"encoding/base64"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
@ -13,6 +14,48 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestDecoder_Market(t *testing.T) {
b64 := `c2VydW0DAAAAAAAAAF4kKlwSa8cc6xshYrDN0SrwrDDLBBUwemtddQHhfjgKAQAAAAAAAACL34duLBe2W5K3QFyI1rhNSESYe+cR/nc2UqvgE9x1VMb6evO+2606PWXzaqvJdDGxu+TC0vbg5HymAgNFL11habDAgiZH59TQw5/Y/52i1DhnPZFYOUB4C3G0hhSSXiRAZw8oAwAAAAAAAAAAAAAANvvq/rQwheCOf85MPshRgZEhXzDFAUh3IjalXs/zJ3I5cTmQBAAAABoqGA0AAAAAZAAAAAAAAACuBhNqk2KYdlbj/V5jbAGnnybh+XBss48/P00r053wbACx0Z1WrY+X9jL+huHdyUdpKzL/JScDimaQlNfzjpWANi1Nu6kEazO0bu0NkhnKFyQt2psF0SRCimAVpNimaOjou1Esrd0dKTtLbedHvt62Vi1bRJYveY74GEP6vkH/qBAnAAAAAAAACgAAAAAAAAAAAAAAAAAAAMsrAAAAAAAAcGFkZGluZw==`
data, err := base64.StdEncoding.DecodeString(b64)
require.NoError(t, err)
var m *MarketV2
err = bin.NewDecoder(data).Decode(&m)
require.NoError(t, err)
fmt.Println("market event queue:", m.EventQueue.String())
}
func TestDecoder_Event(t *testing.T) {
b64 := `c2VydW0RAAAAAAAAAKMoAAAAAAAAAAAAAAAAAAAD+gUAAAAAAAYJAAAAAAAAP9MRAAAAAACwUAY6AAAAAAAAAAAAAAAA/Af4//////8aBQAAAAAAAJGeNN64UdRK+szEsGLeTBiPnrTkfJaOEzsacSpRiAYs6zimHOimKK8CAQAAAAAAAEC6CycAAAAAAAAAAAAAAAAAAAAAAAAAAP/3BwAAAAAAIAUAAAAAAACRnjTeuFHUSvrMxLBi3kwYj5605HyWjhM7GnEqUYgGLH2wFQ01ceby`
data, err := base64.StdEncoding.DecodeString(b64)
headerData := data[0:38]
eventData := data[37:]
require.NoError(t, err)
fmt.Println("Size of data:", len(data), hex.EncodeToString(data))
//read the header
//read the rest ...
var h *EventQueueHeader
err = bin.NewDecoder(headerData).Decode(&h)
var events [2]*Event
err = bin.NewDecoder(eventData).Decode(&events)
require.NoError(t, err)
for _, e := range events {
fmt.Println("serum?:", string(h.Serum[:]))
fmt.Println("Type:", e.Flag)
fmt.Println("event owner:", e.Owner)
}
}
func TestDecoder_Orderbook(t *testing.T) { func TestDecoder_Orderbook(t *testing.T) {
cnt, err := ioutil.ReadFile("./testdata/orderbook.hex") cnt, err := ioutil.ReadFile("./testdata/orderbook.hex")
require.NoError(t, err) require.NoError(t, err)