graph/db: make some ChannelEdgeInfo fields optional
Since not all will be required for V2 channels. Wrap BitcoinKey1Bytes and BitcoinKey2Bytes in fn.Option since these fields are only required for v1 channel announcements. V2 channels may or may not have bitcoin keys present in their announcement. NewV1Channel constructor wraps the bitcoin keys with fn.Some(). All access sites updated to unwrap the options, using UnwrapOr for non-critical paths and UnwrapOrErr where the keys must be present (e.g., KV serialization, ToChannelAnnouncement).
This commit is contained in:
4 files changed
+72
-26
No files matched your search
+31
-7
@@ -4112,9 +4112,14 @@ func (c *KVStore) ChannelView() ([]EdgePoint, error) {
|
||||
return err
|
||||
}
|
||||
|
||||
btcKey1 := edgeInfo.BitcoinKey1Bytes.UnwrapOr(
|
||||
route.Vertex{},
|
||||
)
|
||||
btcKey2 := edgeInfo.BitcoinKey2Bytes.UnwrapOr(
|
||||
route.Vertex{},
|
||||
)
|
||||
pkScript, err := genMultiSigP2WSH(
|
||||
edgeInfo.BitcoinKey1Bytes[:],
|
||||
edgeInfo.BitcoinKey2Bytes[:],
|
||||
btcKey1[:], btcKey2[:],
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -4728,10 +4733,24 @@ func putChanEdgeInfo(edgeIndex kvdb.RwBucket,
|
||||
if _, err := b.Write(edgeInfo.NodeKey2Bytes[:]); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := b.Write(edgeInfo.BitcoinKey1Bytes[:]); err != nil {
|
||||
|
||||
btc1Key, err := edgeInfo.BitcoinKey1Bytes.UnwrapOrErr(
|
||||
fmt.Errorf("edge missing bitcoin key 1"),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := b.Write(edgeInfo.BitcoinKey2Bytes[:]); err != nil {
|
||||
btc2Key, err := edgeInfo.BitcoinKey2Bytes.UnwrapOrErr(
|
||||
fmt.Errorf("edge missing bitcoin key 2"),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := b.Write(btc1Key[:]); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := b.Write(btc2Key[:]); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -4769,7 +4788,7 @@ func putChanEdgeInfo(edgeIndex kvdb.RwBucket,
|
||||
if err := WriteOutpoint(&b, &edgeInfo.ChannelPoint); err != nil {
|
||||
return err
|
||||
}
|
||||
err := binary.Write(&b, byteOrder, uint64(edgeInfo.Capacity))
|
||||
err = binary.Write(&b, byteOrder, uint64(edgeInfo.Capacity))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -4891,12 +4910,17 @@ func deserializeChanEdgeInfo(r io.Reader) (*models.ChannelEdgeInfo, error) {
|
||||
if _, err := io.ReadFull(r, edgeInfo.NodeKey2Bytes[:]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, err := io.ReadFull(r, edgeInfo.BitcoinKey1Bytes[:]); err != nil {
|
||||
|
||||
var btcKey1, btcKey2 route.Vertex
|
||||
if _, err := io.ReadFull(r, btcKey1[:]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if _, err := io.ReadFull(r, edgeInfo.BitcoinKey2Bytes[:]); err != nil {
|
||||
edgeInfo.BitcoinKey1Bytes = fn.Some(btcKey1)
|
||||
|
||||
if _, err := io.ReadFull(r, btcKey2[:]); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
edgeInfo.BitcoinKey2Bytes = fn.Some(btcKey2)
|
||||
|
||||
featureBytes, err := wire.ReadVarBytes(r, 0, 900, "features")
|
||||
if err != nil {
|
||||
|
||||
Reference in new issue
Block a user