multi: Update lnd to use new feature vector API.

This commit is contained in:
Jim Posen authored and Olaoluwa Osuntokun committed 2017-10-17 22:47:20 -07:00
1 parent af49752d4d
commit 9fd77a6e40
16 files changed
+49 -63

No files matched your search

+1 -1
View File
@@ -29,7 +29,7 @@ type ChannelAnnouncement struct {
// by the target node. This field can be used to signal the type of the
// channel, or modifications to the fields that would normally follow
// this vector.
Features *FeatureVector
Features *RawFeatureVector
// ChainHash denotes the target chain that this channel was opened
// within. This value should be the genesis hash of the target chain.
+5 -1
View File
@@ -170,10 +170,14 @@ type FeatureVector struct {
}
// NewFeatureVector constructs a new FeatureVector from a raw feature vector and
// mapping of feature definitions.
// mapping of feature definitions. If the feature vector argument is nil, a new
// one will be constructed with no enabled features.
func NewFeatureVector(featureVector *RawFeatureVector,
featureNames map[FeatureBit]string) *FeatureVector {
if featureVector == nil {
featureVector = NewRawFeatureVector()
}
return &FeatureVector{
RawFeatureVector: featureVector,
featureNames: featureNames,
+3 -3
View File
@@ -9,15 +9,15 @@ import "io"
type Init struct {
// GlobalFeatures is feature vector which affects HTLCs and thus are
// also advertised to other nodes.
GlobalFeatures *FeatureVector
GlobalFeatures *RawFeatureVector
// LocalFeatures is feature vector which only affect the protocol
// between two nodes.
LocalFeatures *FeatureVector
LocalFeatures *RawFeatureVector
}
// NewInitMessage creates new instance of init message object.
func NewInitMessage(gf, lf *FeatureVector) *Init {
func NewInitMessage(gf *RawFeatureVector, lf *RawFeatureVector) *Init {
return &Init{
GlobalFeatures: gf,
LocalFeatures: lf,
+4 -3
View File
@@ -215,7 +215,7 @@ func writeElement(w io.Writer, element interface{}) error {
if err := wire.WriteVarBytes(w, 0, e); err != nil {
return err
}
case *FeatureVector:
case *RawFeatureVector:
if e == nil {
return fmt.Errorf("cannot write nil feature vector")
}
@@ -435,8 +435,9 @@ func readElement(r io.Reader, element interface{}) error {
return err
}
*e = pubKey
case **FeatureVector:
f, err := NewFeatureVectorFromReader(r)
case **RawFeatureVector:
f := NewRawFeatureVector()
err = f.Decode(r)
if err != nil {
return err
}
+10 -16
View File
@@ -51,16 +51,14 @@ func randPubKey() (*btcec.PublicKey, error) {
return priv.PubKey(), nil
}
func randFeatureVector(r *rand.Rand) *FeatureVector {
numFeatures := r.Int31n(10000)
features := make([]Feature, numFeatures)
for i := int32(0); i < numFeatures; i++ {
features[i] = Feature{
Flag: featureFlag(rand.Int31n(2) + 1),
func randRawFeatureVector(r *rand.Rand) *RawFeatureVector {
featureVec := NewRawFeatureVector()
for i := 0; i < 10000; i++ {
if r.Int31n(2) == 0 {
featureVec.Set(FeatureBit(i))
}
}
return NewFeatureVector(features)
return featureVec
}
func TestMaxOutPointIndex(t *testing.T) {
@@ -139,11 +137,9 @@ func TestLightningWireProtocol(t *testing.T) {
customTypeGen := map[MessageType]func([]reflect.Value, *rand.Rand){
MsgInit: func(v []reflect.Value, r *rand.Rand) {
req := NewInitMessage(
randFeatureVector(r),
randFeatureVector(r),
randRawFeatureVector(r),
randRawFeatureVector(r),
)
req.GlobalFeatures.featuresMap = nil
req.LocalFeatures.featuresMap = nil
v[0] = reflect.ValueOf(*req)
},
@@ -351,9 +347,8 @@ func TestLightningWireProtocol(t *testing.T) {
MsgChannelAnnouncement: func(v []reflect.Value, r *rand.Rand) {
req := ChannelAnnouncement{
ShortChannelID: NewShortChanIDFromInt(uint64(r.Int63())),
Features: randFeatureVector(r),
Features: randRawFeatureVector(r),
}
req.Features.featuresMap = nil
req.NodeSig1 = testSig
req.NodeSig2 = testSig
req.BitcoinSig1 = testSig
@@ -396,7 +391,7 @@ func TestLightningWireProtocol(t *testing.T) {
req := NodeAnnouncement{
Signature: testSig,
Features: randFeatureVector(r),
Features: randRawFeatureVector(r),
Timestamp: uint32(r.Int31()),
Alias: a,
RGBColor: RGB{
@@ -407,7 +402,6 @@ func TestLightningWireProtocol(t *testing.T) {
// TODO(roasbeef): proper gen rand addrs
Addresses: testAddrs,
}
req.Features.featuresMap = nil
var err error
req.NodeID, err = randPubKey()
+1 -1
View File
@@ -59,7 +59,7 @@ type NodeAnnouncement struct {
Signature *btcec.Signature
// Features is the list of protocol features this node supports.
Features *FeatureVector
Features *RawFeatureVector
// Timestamp allows ordering in the case of multiple announcements.
Timestamp uint32