channeldb/graph: extract ChannelEdgePolicy serialization
This commit is contained in:
parent
91c9e45031
commit
b9c5248915
@ -3173,57 +3173,15 @@ func putChanEdgePolicy(edges, nodes *bbolt.Bucket, edge *ChannelEdgePolicy,
|
|||||||
byteOrder.PutUint64(edgeKey[33:], edge.ChannelID)
|
byteOrder.PutUint64(edgeKey[33:], edge.ChannelID)
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
|
if err := serializeChanEdgePolicy(&b, edge, to); err != nil {
|
||||||
err := wire.WriteVarBytes(&b, 0, edge.SigBytes)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := binary.Write(&b, byteOrder, edge.ChannelID); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
var scratch [8]byte
|
|
||||||
updateUnix := uint64(edge.LastUpdate.Unix())
|
|
||||||
byteOrder.PutUint64(scratch[:], updateUnix)
|
|
||||||
if _, err := b.Write(scratch[:]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := binary.Write(&b, byteOrder, edge.MessageFlags); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := binary.Write(&b, byteOrder, edge.ChannelFlags); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := binary.Write(&b, byteOrder, edge.TimeLockDelta); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := binary.Write(&b, byteOrder, uint64(edge.MinHTLC)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := binary.Write(&b, byteOrder, uint64(edge.FeeBaseMSat)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if err := binary.Write(&b, byteOrder, uint64(edge.FeeProportionalMillionths)); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := b.Write(to); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(edge.ExtraOpaqueData) > MaxAllowedExtraOpaqueBytes {
|
|
||||||
return ErrTooManyExtraOpaqueBytes(len(edge.ExtraOpaqueData))
|
|
||||||
}
|
|
||||||
if err := wire.WriteVarBytes(&b, 0, edge.ExtraOpaqueData); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Before we write out the new edge, we'll create a new entry in the
|
// Before we write out the new edge, we'll create a new entry in the
|
||||||
// update index in order to keep it fresh.
|
// update index in order to keep it fresh.
|
||||||
|
updateUnix := uint64(edge.LastUpdate.Unix())
|
||||||
var indexKey [8 + 8]byte
|
var indexKey [8 + 8]byte
|
||||||
copy(indexKey[:], scratch[:])
|
byteOrder.PutUint64(indexKey[:8], updateUnix)
|
||||||
byteOrder.PutUint64(indexKey[8:], edge.ChannelID)
|
byteOrder.PutUint64(indexKey[8:], edge.ChannelID)
|
||||||
|
|
||||||
updateIndex, err := edges.CreateBucketIfNotExists(edgeUpdateIndexBucket)
|
updateIndex, err := edges.CreateBucketIfNotExists(edgeUpdateIndexBucket)
|
||||||
@ -3348,6 +3306,58 @@ func fetchChanEdgePolicies(edgeIndex *bbolt.Bucket, edges *bbolt.Bucket,
|
|||||||
return edge1, edge2, nil
|
return edge1, edge2, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func serializeChanEdgePolicy(w io.Writer, edge *ChannelEdgePolicy,
|
||||||
|
to []byte) error {
|
||||||
|
|
||||||
|
err := wire.WriteVarBytes(w, 0, edge.SigBytes)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := binary.Write(w, byteOrder, edge.ChannelID); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var scratch [8]byte
|
||||||
|
updateUnix := uint64(edge.LastUpdate.Unix())
|
||||||
|
byteOrder.PutUint64(scratch[:], updateUnix)
|
||||||
|
if _, err := w.Write(scratch[:]); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := binary.Write(w, byteOrder, edge.MessageFlags); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(w, byteOrder, edge.ChannelFlags); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(w, byteOrder, edge.TimeLockDelta); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(w, byteOrder, uint64(edge.MinHTLC)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(w, byteOrder, uint64(edge.FeeBaseMSat)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := binary.Write(w, byteOrder, uint64(edge.FeeProportionalMillionths)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := w.Write(to); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(edge.ExtraOpaqueData) > MaxAllowedExtraOpaqueBytes {
|
||||||
|
return ErrTooManyExtraOpaqueBytes(len(edge.ExtraOpaqueData))
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := wire.WriteVarBytes(w, 0, edge.ExtraOpaqueData); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func deserializeChanEdgePolicy(r io.Reader,
|
func deserializeChanEdgePolicy(r io.Reader,
|
||||||
nodes *bbolt.Bucket) (*ChannelEdgePolicy, error) {
|
nodes *bbolt.Bucket) (*ChannelEdgePolicy, error) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user