@@ -23,6 +23,16 @@ import (
2323 "github.com/eigerco/strawberry/internal/store"
2424)
2525
26+ type Features uint32
27+
28+ const (
29+ FeatureNone Features = 0
30+ FeatureAncestry Features = 1
31+ FeatureFork Features = 2
32+ FeatureAncestryAndFork Features = 3
33+ FeatureReserved Features = 2147483648
34+ )
35+
2636// Node is a conformance testing node complying with fuzzer protocol https://github.com/davxy/jam-stuff/tree/main/fuzz-proto
2737// opens a connection via a unix socket and listens to fuzzer messages and updates the state accordingly
2838type Node struct {
@@ -38,11 +48,13 @@ type Node struct {
3848}
3949
4050// NewNode create a new conformance testing node
41- func NewNode (socketPath string , chain * store.Chain , trie * store.Trie , appName []byte , appVersion , jamVersion Version ) * Node {
51+ func NewNode (socketPath string , chain * store.Chain , trie * store.Trie , appName []byte , appVersion , jamVersion Version , features Features ) * Node {
4252 peerInfo := PeerInfo {
43- Name : appName ,
44- AppVersion : appVersion ,
45- JamVersion : jamVersion ,
53+ FuzzVersion : 1 ,
54+ FuzzFeatures : features ,
55+ JamVersion : jamVersion ,
56+ AppVersion : appVersion ,
57+ Name : appName ,
4658 }
4759 return & Node {
4860 socketPath : socketPath ,
@@ -56,8 +68,11 @@ func NewNode(socketPath string, chain *store.Chain, trie *store.Trie, appName []
5668
5769// Start starts the node server
5870func (n * Node ) Start () error {
71+ // If the socket file exists, try to remove it.
5972 if _ , err := os .Stat (n .socketPath ); err == nil {
60- os .Remove (n .socketPath )
73+ if err := os .Remove (n .socketPath ); err != nil {
74+ return fmt .Errorf ("failed to remove existing socket file: %v" , err )
75+ }
6176 }
6277
6378 // Listen on the Unix socket
@@ -83,7 +98,11 @@ func (n *Node) Stop() error {
8398}
8499
85100func (n * Node ) handleConnection (conn net.Conn ) {
86- defer conn .Close ()
101+ defer func () {
102+ if err := conn .Close (); err != nil {
103+ log .Printf ("error closing connection: %v" , err )
104+ }
105+ }()
87106 for {
88107 ctx := context .Background ()
89108
@@ -116,8 +135,17 @@ func (n *Node) handleConnection(conn net.Conn) {
116135 responseMsg = NewMessage (Error {Message : []byte ("Chain error: block header verification failure: BadSealSignature" )})
117136 } else if strings .Contains (err .Error (), "unexpected author" ) {
118137 responseMsg = NewMessage (Error {Message : []byte ("Chain error: block header verification failure: UnexpectedAuthor" )})
138+ // responseMsg = NewMessage(Error{Message: []byte("Chain error: block verification failure: unexpected author")}) //fauty vectors have the error in different format
119139 } else if strings .Contains (err .Error (), "epoch marker" ) {
120140 responseMsg = NewMessage (Error {Message : []byte ("Chain error: block header verification failure: InvalidEpochMark" )})
141+ // responseMsg = NewMessage(Error{Message: []byte("Chain error: block header verification failure: InvalidEpochMark")}) //fauty vectors have the error in different format
142+ } else if strings .Contains (err .Error (), "winning ticket marker" ) {
143+ responseMsg = NewMessage (Error {Message : []byte ("Chain error: block header verification failure: InvalidTicketsMark" )})
144+ // responseMsg = NewMessage(Error{Message: []byte("Chain error: block verification failure: invalid tickets mark")}) //fauty vectors have the error in different format
145+ } else if strings .Contains (err .Error (), "core unauthorized" ) {
146+ responseMsg = NewMessage (Error {Message : []byte ("Chain error: block execution failure: reports error: code unauthorized" )})
147+ } else if strings .Contains (err .Error (), "future report slot" ) {
148+ responseMsg = NewMessage (Error {Message : []byte ("Chain error: block execution failure: reports error: report refers to slot in the future" )})
121149 } else {
122150 return
123151 }
0 commit comments