Commit 825948d5 authored by protolambda's avatar protolambda

op-program: hints/oracle comms io style changes

Co-authored-by: default avatarAdrian Sutton <adrian@oplabs.co>
parent 19379a14
...@@ -20,8 +20,8 @@ func NewHintWriter(w io.Writer) *HintWriter { ...@@ -20,8 +20,8 @@ func NewHintWriter(w io.Writer) *HintWriter {
func (hw *HintWriter) Hint(v Hint) { func (hw *HintWriter) Hint(v Hint) {
hint := v.Hint() hint := v.Hint()
hintBytes := make([]byte, 4, 4+len(hint)+1) var hintBytes []byte
binary.BigEndian.PutUint32(hintBytes[:4], uint32(len(hint))) hintBytes = binary.BigEndian.AppendUint32(hintBytes, uint32(len(hint)))
hintBytes = append(hintBytes, []byte(hint)...) hintBytes = append(hintBytes, []byte(hint)...)
hintBytes = append(hintBytes, 0) // to block writing on hintBytes = append(hintBytes, 0) // to block writing on
_, err := hw.w.Write(hintBytes) _, err := hw.w.Write(hintBytes)
...@@ -41,14 +41,13 @@ func NewHintReader(r io.Reader) *HintReader { ...@@ -41,14 +41,13 @@ func NewHintReader(r io.Reader) *HintReader {
} }
func (hr *HintReader) NextHint(router func(hint string) error) error { func (hr *HintReader) NextHint(router func(hint string) error) error {
var lengthPrefix [4]byte var length uint32
if _, err := io.ReadFull(hr.r, lengthPrefix[:]); err != nil { if err := binary.Read(hr.r, binary.BigEndian, &length); err != nil {
if err == io.EOF { if err == io.EOF {
return io.EOF return io.EOF
} }
return fmt.Errorf("failed to read hint length prefix: %w", err) return fmt.Errorf("failed to read hint length prefix: %w", err)
} }
length := binary.BigEndian.Uint32(lengthPrefix[:])
payload := make([]byte, length) payload := make([]byte, length)
if length > 0 { if length > 0 {
if _, err := io.ReadFull(hr.r, payload); err != nil { if _, err := io.ReadFull(hr.r, payload); err != nil {
......
...@@ -26,15 +26,10 @@ func (o *OracleClient) Get(key Key) []byte { ...@@ -26,15 +26,10 @@ func (o *OracleClient) Get(key Key) []byte {
panic(fmt.Errorf("failed to write key %s (%T) to pre-image oracle: %w", key, key, err)) panic(fmt.Errorf("failed to write key %s (%T) to pre-image oracle: %w", key, key, err))
} }
var lengthPrefix [8]byte var length uint64
if _, err := io.ReadFull(o.rw, lengthPrefix[:]); err != nil { if err := binary.Read(o.rw, binary.BigEndian, &length); err != nil {
panic(fmt.Errorf("failed to read pre-image length of key %s (%T) from pre-image oracle: %w", key, key, err)) panic(fmt.Errorf("failed to read pre-image length of key %s (%T) from pre-image oracle: %w", key, key, err))
} }
length := binary.BigEndian.Uint64(lengthPrefix[:])
if length == 0 { // don't read empty payloads
return nil
}
payload := make([]byte, length) payload := make([]byte, length)
if _, err := io.ReadFull(o.rw, payload); err != nil { if _, err := io.ReadFull(o.rw, payload); err != nil {
panic(fmt.Errorf("failed to read pre-image payload (length %d) of key %s (%T) from pre-image oracle: %w", length, key, key, err)) panic(fmt.Errorf("failed to read pre-image payload (length %d) of key %s (%T) from pre-image oracle: %w", length, key, key, err))
...@@ -65,10 +60,8 @@ func (o *OracleServer) NextPreimageRequest(getPreimage func(key common.Hash) ([] ...@@ -65,10 +60,8 @@ func (o *OracleServer) NextPreimageRequest(getPreimage func(key common.Hash) ([]
return fmt.Errorf("failed to serve pre-image %s request: %w", key, err) return fmt.Errorf("failed to serve pre-image %s request: %w", key, err)
} }
var lengthPrefix [8]byte if err := binary.Write(o.rw, binary.BigEndian, uint64(len(value))); err != nil {
binary.BigEndian.PutUint64(lengthPrefix[:], uint64(len(value))) return fmt.Errorf("failed to write length-prefix %d: %w", len(value), err)
if _, err := o.rw.Write(lengthPrefix[:]); err != nil {
return fmt.Errorf("failed to write length-prefix %x: %w", lengthPrefix, err)
} }
if len(value) == 0 { if len(value) == 0 {
return nil return nil
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment