move lnadr from main to lndc package
This commit is contained in:
parent
ba0f86d4dc
commit
9e5f302288
92
lndc/lnadr.go
Normal file
92
lndc/lnadr.go
Normal file
@ -0,0 +1,92 @@
|
||||
package lndc
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcutil"
|
||||
)
|
||||
|
||||
// lnAddr...
|
||||
type LNAdr struct {
|
||||
lnId [16]byte // redundant because adr contains it
|
||||
PubKey *btcec.PublicKey
|
||||
|
||||
Base58Addr btcutil.Address // Base58 encoded address (1XXX...)
|
||||
NetAddr *net.TCPAddr // IP address
|
||||
|
||||
name string // human readable name? Not a thing yet.
|
||||
endorsement []byte // a sig confirming the name? Not implemented
|
||||
}
|
||||
|
||||
// String...
|
||||
func (l *LNAdr) String() string {
|
||||
var encodedId []byte
|
||||
if l.PubKey == nil {
|
||||
encodedId = l.Base58Addr.ScriptAddress()
|
||||
} else {
|
||||
encodedId = l.PubKey.SerializeCompressed()
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%v@%v", encodedId, l.NetAddr)
|
||||
}
|
||||
|
||||
// newLnAddr...
|
||||
func LnAddrFromString(encodedAddr string) (*LNAdr, error) {
|
||||
// The format of an lnaddr is "<pubkey or pkh>@host"
|
||||
idHost := strings.Split(encodedAddr, "@")
|
||||
if len(idHost) != 2 {
|
||||
return nil, fmt.Errorf("invalid format for lnaddr string: %v", encodedAddr)
|
||||
}
|
||||
|
||||
// Attempt to resolve the IP address, this handles parsing IPv6 zones,
|
||||
// and such.
|
||||
fmt.Println("host: ", idHost[1])
|
||||
ipAddr, err := net.ResolveTCPAddr("tcp", idHost[1])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
addr := &LNAdr{NetAddr: ipAddr}
|
||||
|
||||
idLen := len(idHost[0])
|
||||
switch {
|
||||
// Is the ID a hex-encoded compressed public key?
|
||||
case idLen > 65 && idLen < 69:
|
||||
pubkeyBytes, err := hex.DecodeString(idHost[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
addr.PubKey, err = btcec.ParsePubKey(pubkeyBytes, btcec.S256())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// got pubey, populate address from pubkey
|
||||
pkh := btcutil.Hash160(addr.PubKey.SerializeCompressed())
|
||||
addr.Base58Addr, err = btcutil.NewAddressPubKeyHash(pkh,
|
||||
&chaincfg.TestNet3Params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Is the ID a string encoded bitcoin address?
|
||||
case idLen > 33 && idLen < 37:
|
||||
addr.Base58Addr, err = btcutil.DecodeAddress(idHost[0],
|
||||
&chaincfg.TestNet3Params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid address %s", idHost[0])
|
||||
}
|
||||
|
||||
// Finally, populate the lnid from the address.
|
||||
copy(addr.lnId[:], addr.Base58Addr.ScriptAddress())
|
||||
|
||||
return addr, nil
|
||||
}
|
89
peer.go
89
peer.go
@ -2,18 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"container/list"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/lightningnetwork/lnd/lndc"
|
||||
"li.lan/labs/plasma/lnwallet"
|
||||
"li.lan/labs/plasma/lnwire"
|
||||
)
|
||||
@ -41,86 +36,6 @@ const (
|
||||
outgoingQueueLen = 50
|
||||
)
|
||||
|
||||
// lnAddr...
|
||||
type lnAddr struct {
|
||||
lnId [16]byte // redundant because adr contains it
|
||||
pubKey *btcec.PublicKey
|
||||
|
||||
bitcoinAddr btcutil.Address
|
||||
netAddr *net.TCPAddr
|
||||
|
||||
name string
|
||||
endorsement []byte
|
||||
}
|
||||
|
||||
// String...
|
||||
func (l *lnAddr) String() string {
|
||||
var encodedId []byte
|
||||
if l.pubKey == nil {
|
||||
encodedId = l.bitcoinAddr.ScriptAddress()
|
||||
} else {
|
||||
encodedId = l.pubKey.SerializeCompressed()
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%v@%v", encodedId, l.netAddr)
|
||||
}
|
||||
|
||||
// newLnAddr...
|
||||
func newLnAddr(encodedAddr string) (*lnAddr, error) {
|
||||
// The format of an lnaddr is "<pubkey or pkh>@host"
|
||||
idHost := strings.Split(encodedAddr, "@")
|
||||
if len(idHost) != 2 {
|
||||
return nil, fmt.Errorf("invalid format for lnaddr string: %v", encodedAddr)
|
||||
}
|
||||
|
||||
// Attempt to resolve the IP address, this handles parsing IPv6 zones,
|
||||
// and such.
|
||||
fmt.Println("host: ", idHost[1])
|
||||
ipAddr, err := net.ResolveTCPAddr("tcp", idHost[1])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
addr := &lnAddr{netAddr: ipAddr}
|
||||
|
||||
idLen := len(idHost[0])
|
||||
switch {
|
||||
// Is the ID a hex-encoded compressed public key?
|
||||
case idLen > 65 && idLen < 69:
|
||||
pubkeyBytes, err := hex.DecodeString(idHost[0])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
addr.pubKey, err = btcec.ParsePubKey(pubkeyBytes, btcec.S256())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// got pubey, populate address from pubkey
|
||||
pkh := btcutil.Hash160(addr.pubKey.SerializeCompressed())
|
||||
addr.bitcoinAddr, err = btcutil.NewAddressPubKeyHash(pkh,
|
||||
&chaincfg.TestNet3Params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Is the ID a string encoded bitcoin address?
|
||||
case idLen > 33 && idLen < 37:
|
||||
addr.bitcoinAddr, err = btcutil.DecodeAddress(idHost[0],
|
||||
&chaincfg.TestNet3Params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
default:
|
||||
return nil, fmt.Errorf("invalid address %s", idHost[0])
|
||||
}
|
||||
|
||||
// Finally, populate the lnid from the address.
|
||||
copy(addr.lnId[:], addr.bitcoinAddr.ScriptAddress())
|
||||
|
||||
return addr, nil
|
||||
}
|
||||
|
||||
// outgoinMsg...
|
||||
type outgoinMsg struct {
|
||||
msg lnwire.Message
|
||||
@ -137,7 +52,7 @@ type peer struct {
|
||||
|
||||
conn net.Conn
|
||||
|
||||
lightningAddr lnAddr
|
||||
lightningAddr lndc.LNAdr
|
||||
inbound bool
|
||||
protocolVersion uint32
|
||||
peerId int32
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcwallet/waddrmgr"
|
||||
"github.com/lightningnetwork/lnd/lndc"
|
||||
"github.com/lightningnetwork/lnd/lnrpc"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
@ -92,7 +93,7 @@ func (r *rpcServer) ConnectPeer(ctx context.Context,
|
||||
return nil, fmt.Errorf("need: lnc pubkeyhash@hostname")
|
||||
}
|
||||
|
||||
peerAddr, err := newLnAddr(in.IdAtHost)
|
||||
peerAddr, err := lndc.LnAddrFromString(in.IdAtHost)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
12
server.go
12
server.go
@ -110,7 +110,7 @@ out:
|
||||
|
||||
// connectPeerMsg...
|
||||
type connectPeerMsg struct {
|
||||
addr *lnAddr
|
||||
addr *lndc.LNAdr
|
||||
reply chan error
|
||||
}
|
||||
|
||||
@ -143,10 +143,10 @@ out:
|
||||
// either need a compressed pubkey, or a
|
||||
// 20-byte pkh.
|
||||
var remoteId []byte
|
||||
if addr.pubKey == nil {
|
||||
remoteId = addr.bitcoinAddr.ScriptAddress()
|
||||
if addr.PubKey == nil {
|
||||
remoteId = addr.Base58Addr.ScriptAddress()
|
||||
} else {
|
||||
remoteId = addr.pubKey.SerializeCompressed()
|
||||
remoteId = addr.PubKey.SerializeCompressed()
|
||||
}
|
||||
|
||||
// Attempt to connect to the remote
|
||||
@ -154,7 +154,7 @@ out:
|
||||
// connection, or the crypto negotation
|
||||
// breaks down, then return an error to the
|
||||
// caller.
|
||||
ipAddr := addr.netAddr.String()
|
||||
ipAddr := addr.NetAddr.String()
|
||||
conn := lndc.NewConn(s.longTermPriv, nil)
|
||||
if err := conn.Dial(ipAddr, remoteId); err != nil {
|
||||
msg.reply <- err
|
||||
@ -178,7 +178,7 @@ out:
|
||||
}
|
||||
|
||||
// ConnectToPeer...
|
||||
func (s *server) ConnectToPeer(addr *lnAddr) error {
|
||||
func (s *server) ConnectToPeer(addr *lndc.LNAdr) error {
|
||||
reply := make(chan error, 1)
|
||||
|
||||
s.queries <- &connectPeerMsg{addr, reply}
|
||||
|
Loading…
Reference in New Issue
Block a user