Skip to content

Commit edc021f

Browse files
ellemoutonyyforyongyu
authored andcommitted
graph/db: simplify auth proof and edge info
Remove various unused fields and methods.
1 parent 80e7009 commit edc021f

File tree

4 files changed

+35
-190
lines changed

4 files changed

+35
-190
lines changed

autopilot/prefattach_test.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,11 @@ func (d *testDBGraph) addRandChannel(node1, node2 *btcec.PublicKey,
495495
Capacity: capacity,
496496
Features: lnwire.EmptyFeatureVector(),
497497
}
498-
edge.AddNodeKeys(lnNode1, lnNode2, lnNode1, lnNode2)
498+
copy(edge.NodeKey1Bytes[:], lnNode1.SerializeCompressed())
499+
copy(edge.NodeKey2Bytes[:], lnNode2.SerializeCompressed())
500+
copy(edge.BitcoinKey1Bytes[:], lnNode1.SerializeCompressed())
501+
copy(edge.BitcoinKey2Bytes[:], lnNode2.SerializeCompressed())
502+
499503
if err := d.db.AddChannelEdge(ctx, edge); err != nil {
500504
return nil, nil, err
501505
}

graph/db/kv_store.go

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ func forEachChannel(db kvdb.Backend, cb func(*models.ChannelEdgeInfo,
469469
chanID: chanID,
470470
}]
471471

472-
return cb(&info, policy1, policy2)
472+
return cb(info, policy1, policy2)
473473
},
474474
)
475475
}, reset)
@@ -557,7 +557,7 @@ func (c *KVStore) ForEachChannelCacheable(cb func(*models.CachedEdgeInfo,
557557
}
558558

559559
return cb(
560-
models.NewCachedEdge(&info),
560+
models.NewCachedEdge(info),
561561
cachedPolicy1, cachedPolicy2,
562562
)
563563
},
@@ -1393,7 +1393,7 @@ func (c *KVStore) AddEdgeProof(chanID lnwire.ShortChannelID,
13931393

13941394
edge.AuthProof = proof
13951395

1396-
return putChanEdgeInfo(edgeIndex, &edge, chanKey)
1396+
return putChanEdgeInfo(edgeIndex, edge, chanKey)
13971397
}, func() {})
13981398
}
13991399

@@ -2238,7 +2238,7 @@ func (c *KVStore) fetchNextChanUpdateBatch(
22382238
// Now we have all the information we need to build the
22392239
// channel edge.
22402240
channel := ChannelEdge{
2241-
Info: &edgeInfo,
2241+
Info: edgeInfo,
22422242
Policy1: edge1,
22432243
Policy2: edge2,
22442244
Node1: node1,
@@ -2784,7 +2784,7 @@ func (c *KVStore) FilterChannelRange(startHeight,
27842784
continue
27852785
}
27862786

2787-
node1Key, node2Key := computeEdgePolicyKeys(&edgeInfo)
2787+
node1Key, node2Key := computeEdgePolicyKeys(edgeInfo)
27882788

27892789
rawPolicy := edges.Get(node1Key)
27902790
if len(rawPolicy) != 0 {
@@ -2936,7 +2936,7 @@ func (c *KVStore) fetchChanInfos(tx kvdb.RTx, chanIDs []uint64) (
29362936
}
29372937

29382938
chanEdges = append(chanEdges, ChannelEdge{
2939-
Info: &edgeInfo,
2939+
Info: edgeInfo,
29402940
Policy1: edge1,
29412941
Policy2: edge2,
29422942
Node1: node1,
@@ -3087,7 +3087,7 @@ func (c *KVStore) delChannelEdgeUnsafe(edges, edgeIndex, chanIndex,
30873087
// being removed due to the channel becoming a zombie. We do this to
30883088
// ensure we don't store unnecessary data for spent channels.
30893089
if !isZombie {
3090-
return &edgeInfo, nil
3090+
return edgeInfo, nil
30913091
}
30923092

30933093
nodeKey1, nodeKey2 := edgeInfo.NodeKey1Bytes, edgeInfo.NodeKey2Bytes
@@ -3106,7 +3106,7 @@ func (c *KVStore) delChannelEdgeUnsafe(edges, edgeIndex, chanIndex,
31063106
)
31073107
}
31083108

3109-
return &edgeInfo, markEdgeZombie(
3109+
return edgeInfo, markEdgeZombie(
31103110
zombieIndex, byteOrder.Uint64(chanID), nodeKey1, nodeKey2,
31113111
)
31123112
}
@@ -3551,7 +3551,7 @@ func nodeTraversal(tx kvdb.RTx, nodePub []byte, db kvdb.Backend,
35513551
}
35523552

35533553
// Finally, we execute the callback.
3554-
err = cb(tx, &edgeInfo, outgoingPolicy, incomingPolicy)
3554+
err = cb(tx, edgeInfo, outgoingPolicy, incomingPolicy)
35553555
if err != nil {
35563556
return err
35573557
}
@@ -3781,7 +3781,7 @@ func (c *KVStore) FetchChannelEdgesByOutpoint(op *wire.OutPoint) (
37813781
if err != nil {
37823782
return fmt.Errorf("%w: chanID=%x", err, chanID)
37833783
}
3784-
edgeInfo = &edge
3784+
edgeInfo = edge
37853785

37863786
// Once we have the information about the channels' parameters,
37873787
// we'll fetch the routing policies for each for the directed
@@ -3887,7 +3887,7 @@ func (c *KVStore) FetchChannelEdgesByID(chanID uint64) (
38873887
return err
38883888
}
38893889

3890-
edgeInfo = &edge
3890+
edgeInfo = edge
38913891

38923892
// Then we'll attempt to fetch the accompanying policies of this
38933893
// edge.
@@ -4702,46 +4702,46 @@ func putChanEdgeInfo(edgeIndex kvdb.RwBucket,
47024702
}
47034703

47044704
func fetchChanEdgeInfo(edgeIndex kvdb.RBucket,
4705-
chanID []byte) (models.ChannelEdgeInfo, error) {
4705+
chanID []byte) (*models.ChannelEdgeInfo, error) {
47064706

47074707
edgeInfoBytes := edgeIndex.Get(chanID)
47084708
if edgeInfoBytes == nil {
4709-
return models.ChannelEdgeInfo{}, ErrEdgeNotFound
4709+
return nil, ErrEdgeNotFound
47104710
}
47114711

47124712
edgeInfoReader := bytes.NewReader(edgeInfoBytes)
47134713

47144714
return deserializeChanEdgeInfo(edgeInfoReader)
47154715
}
47164716

4717-
func deserializeChanEdgeInfo(r io.Reader) (models.ChannelEdgeInfo, error) {
4717+
func deserializeChanEdgeInfo(r io.Reader) (*models.ChannelEdgeInfo, error) {
47184718
var (
47194719
err error
47204720
edgeInfo models.ChannelEdgeInfo
47214721
)
47224722

47234723
if _, err := io.ReadFull(r, edgeInfo.NodeKey1Bytes[:]); err != nil {
4724-
return models.ChannelEdgeInfo{}, err
4724+
return nil, err
47254725
}
47264726
if _, err := io.ReadFull(r, edgeInfo.NodeKey2Bytes[:]); err != nil {
4727-
return models.ChannelEdgeInfo{}, err
4727+
return nil, err
47284728
}
47294729
if _, err := io.ReadFull(r, edgeInfo.BitcoinKey1Bytes[:]); err != nil {
4730-
return models.ChannelEdgeInfo{}, err
4730+
return nil, err
47314731
}
47324732
if _, err := io.ReadFull(r, edgeInfo.BitcoinKey2Bytes[:]); err != nil {
4733-
return models.ChannelEdgeInfo{}, err
4733+
return nil, err
47344734
}
47354735

47364736
featureBytes, err := wire.ReadVarBytes(r, 0, 900, "features")
47374737
if err != nil {
4738-
return models.ChannelEdgeInfo{}, err
4738+
return nil, err
47394739
}
47404740

47414741
features := lnwire.NewRawFeatureVector()
47424742
err = features.Decode(bytes.NewReader(featureBytes))
47434743
if err != nil {
4744-
return models.ChannelEdgeInfo{}, fmt.Errorf("unable to decode "+
4744+
return nil, fmt.Errorf("unable to decode "+
47454745
"features: %w", err)
47464746
}
47474747
edgeInfo.Features = lnwire.NewFeatureVector(features, lnwire.Features)
@@ -4750,19 +4750,19 @@ func deserializeChanEdgeInfo(r io.Reader) (models.ChannelEdgeInfo, error) {
47504750

47514751
proof.NodeSig1Bytes, err = wire.ReadVarBytes(r, 0, 80, "sigs")
47524752
if err != nil {
4753-
return models.ChannelEdgeInfo{}, err
4753+
return nil, err
47544754
}
47554755
proof.NodeSig2Bytes, err = wire.ReadVarBytes(r, 0, 80, "sigs")
47564756
if err != nil {
4757-
return models.ChannelEdgeInfo{}, err
4757+
return nil, err
47584758
}
47594759
proof.BitcoinSig1Bytes, err = wire.ReadVarBytes(r, 0, 80, "sigs")
47604760
if err != nil {
4761-
return models.ChannelEdgeInfo{}, err
4761+
return nil, err
47624762
}
47634763
proof.BitcoinSig2Bytes, err = wire.ReadVarBytes(r, 0, 80, "sigs")
47644764
if err != nil {
4765-
return models.ChannelEdgeInfo{}, err
4765+
return nil, err
47664766
}
47674767

47684768
if !proof.IsEmpty() {
@@ -4771,17 +4771,17 @@ func deserializeChanEdgeInfo(r io.Reader) (models.ChannelEdgeInfo, error) {
47714771

47724772
edgeInfo.ChannelPoint = wire.OutPoint{}
47734773
if err := ReadOutpoint(r, &edgeInfo.ChannelPoint); err != nil {
4774-
return models.ChannelEdgeInfo{}, err
4774+
return nil, err
47754775
}
47764776
if err := binary.Read(r, byteOrder, &edgeInfo.Capacity); err != nil {
4777-
return models.ChannelEdgeInfo{}, err
4777+
return nil, err
47784778
}
47794779
if err := binary.Read(r, byteOrder, &edgeInfo.ChannelID); err != nil {
4780-
return models.ChannelEdgeInfo{}, err
4780+
return nil, err
47814781
}
47824782

47834783
if _, err := io.ReadFull(r, edgeInfo.ChainHash[:]); err != nil {
4784-
return models.ChannelEdgeInfo{}, err
4784+
return nil, err
47854785
}
47864786

47874787
// We'll try and see if there are any opaque bytes left, if not, then
@@ -4793,10 +4793,10 @@ func deserializeChanEdgeInfo(r io.Reader) (models.ChannelEdgeInfo, error) {
47934793
case errors.Is(err, io.ErrUnexpectedEOF):
47944794
case errors.Is(err, io.EOF):
47954795
case err != nil:
4796-
return models.ChannelEdgeInfo{}, err
4796+
return nil, err
47974797
}
47984798

4799-
return edgeInfo, nil
4799+
return &edgeInfo, nil
48004800
}
48014801

48024802
func putChanEdgePolicy(edges kvdb.RwBucket, edge *models.ChannelEdgePolicy,

graph/db/models/channel_auth_proof.go

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package models
22

3-
import "github.com/btcsuite/btcd/btcec/v2/ecdsa"
4-
53
// ChannelAuthProof is the authentication proof (the signature portion) for a
64
// channel. Using the four signatures contained in the struct, and some
75
// auxiliary knowledge (the funding script, node identities, and outpoint) nodes
@@ -10,117 +8,23 @@ import "github.com/btcsuite/btcd/btcec/v2/ecdsa"
108
// nodeID1 || nodeID2 || bitcoinKey1|| bitcoinKey2 || 2-byte-feature-len ||
119
// features.
1210
type ChannelAuthProof struct {
13-
// nodeSig1 is a cached instance of the first node signature.
14-
nodeSig1 *ecdsa.Signature
15-
1611
// NodeSig1Bytes are the raw bytes of the first node signature encoded
1712
// in DER format.
1813
NodeSig1Bytes []byte
1914

20-
// nodeSig2 is a cached instance of the second node signature.
21-
nodeSig2 *ecdsa.Signature
22-
2315
// NodeSig2Bytes are the raw bytes of the second node signature
2416
// encoded in DER format.
2517
NodeSig2Bytes []byte
2618

27-
// bitcoinSig1 is a cached instance of the first bitcoin signature.
28-
bitcoinSig1 *ecdsa.Signature
29-
3019
// BitcoinSig1Bytes are the raw bytes of the first bitcoin signature
3120
// encoded in DER format.
3221
BitcoinSig1Bytes []byte
3322

34-
// bitcoinSig2 is a cached instance of the second bitcoin signature.
35-
bitcoinSig2 *ecdsa.Signature
36-
3723
// BitcoinSig2Bytes are the raw bytes of the second bitcoin signature
3824
// encoded in DER format.
3925
BitcoinSig2Bytes []byte
4026
}
4127

42-
// Node1Sig is the signature using the identity key of the node that is first
43-
// in a lexicographical ordering of the serialized public keys of the two nodes
44-
// that created the channel.
45-
//
46-
// NOTE: By having this method to access an attribute, we ensure we only need
47-
// to fully deserialize the signature if absolutely necessary.
48-
func (c *ChannelAuthProof) Node1Sig() (*ecdsa.Signature, error) {
49-
if c.nodeSig1 != nil {
50-
return c.nodeSig1, nil
51-
}
52-
53-
sig, err := ecdsa.ParseSignature(c.NodeSig1Bytes)
54-
if err != nil {
55-
return nil, err
56-
}
57-
58-
c.nodeSig1 = sig
59-
60-
return sig, nil
61-
}
62-
63-
// Node2Sig is the signature using the identity key of the node that is second
64-
// in a lexicographical ordering of the serialized public keys of the two nodes
65-
// that created the channel.
66-
//
67-
// NOTE: By having this method to access an attribute, we ensure we only need
68-
// to fully deserialize the signature if absolutely necessary.
69-
func (c *ChannelAuthProof) Node2Sig() (*ecdsa.Signature, error) {
70-
if c.nodeSig2 != nil {
71-
return c.nodeSig2, nil
72-
}
73-
74-
sig, err := ecdsa.ParseSignature(c.NodeSig2Bytes)
75-
if err != nil {
76-
return nil, err
77-
}
78-
79-
c.nodeSig2 = sig
80-
81-
return sig, nil
82-
}
83-
84-
// BitcoinSig1 is the signature using the public key of the first node that was
85-
// used in the channel's multi-sig output.
86-
//
87-
// NOTE: By having this method to access an attribute, we ensure we only need
88-
// to fully deserialize the signature if absolutely necessary.
89-
func (c *ChannelAuthProof) BitcoinSig1() (*ecdsa.Signature, error) {
90-
if c.bitcoinSig1 != nil {
91-
return c.bitcoinSig1, nil
92-
}
93-
94-
sig, err := ecdsa.ParseSignature(c.BitcoinSig1Bytes)
95-
if err != nil {
96-
return nil, err
97-
}
98-
99-
c.bitcoinSig1 = sig
100-
101-
return sig, nil
102-
}
103-
104-
// BitcoinSig2 is the signature using the public key of the second node that
105-
// was used in the channel's multi-sig output.
106-
//
107-
// NOTE: By having this method to access an attribute, we ensure we only need
108-
// to fully deserialize the signature if absolutely necessary.
109-
func (c *ChannelAuthProof) BitcoinSig2() (*ecdsa.Signature, error) {
110-
if c.bitcoinSig2 != nil {
111-
return c.bitcoinSig2, nil
112-
}
113-
114-
sig, err := ecdsa.ParseSignature(c.BitcoinSig2Bytes)
115-
if err != nil {
116-
return nil, err
117-
}
118-
119-
c.bitcoinSig2 = sig
120-
121-
return sig, nil
122-
}
123-
12428
// IsEmpty check is the authentication proof is empty Proof is empty if at
12529
// least one of the signatures are equal to nil.
12630
func (c *ChannelAuthProof) IsEmpty() bool {

0 commit comments

Comments
 (0)