Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 21 additions & 8 deletions cmd/bootnode/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import (
"github.com/XinFinOrg/XDPoSChain/log"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/discv5"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
"github.com/XinFinOrg/XDPoSChain/p2p/nat"
"github.com/XinFinOrg/XDPoSChain/p2p/netutil"
)
Expand All @@ -37,7 +38,7 @@ func main() {
var (
listenAddr = flag.String("addr", ":30301", "listen address")
genKey = flag.String("genkey", "", "generate a node key")
writeAddr = flag.Bool("writeaddress", false, "write out the node's pubkey hash and quit")
writeAddr = flag.Bool("writeaddress", false, "write out the node's public key and quit")
nodeKeyFile = flag.String("nodekey", "", "private key filename")
nodeKeyHex = flag.String("nodekeyhex", "", "private key as hex (for testing)")
natdesc = flag.String("nat", "none", "port mapping mechanism (any|none|upnp|pmp|extip:<IP>)")
Expand Down Expand Up @@ -85,7 +86,7 @@ func main() {
}

if *writeAddr {
fmt.Printf("%v\n", discover.PubkeyID(&nodeKey.PublicKey))
fmt.Printf("%x\n", crypto.FromECDSAPub(&nodeKey.PublicKey)[1:])
os.Exit(0)
}

Expand All @@ -111,26 +112,38 @@ func main() {
if !realaddr.IP.IsLoopback() {
go nat.Map(natm, nil, "udp", realaddr.Port, realaddr.Port, "ethereum discovery")
}
// TODO: react to external IP changes over time.
if ext, err := natm.ExternalIP(); err == nil {
realaddr = &net.UDPAddr{IP: ext, Port: realaddr.Port}
}
}

printNotice(&nodeKey.PublicKey, *realaddr)

if *runv5 {
if _, err := discv5.ListenUDP(nodeKey, conn, realaddr, "", restrictList); err != nil {
if _, err := discv5.ListenUDP(nodeKey, conn, "", restrictList); err != nil {
utils.Fatalf("%v", err)
}
} else {
db, _ := enode.OpenDB("")
ln := enode.NewLocalNode(db, nodeKey)
cfg := discover.Config{
PrivateKey: nodeKey,
AnnounceAddr: realaddr,
NetRestrict: restrictList,
PrivateKey: nodeKey,
NetRestrict: restrictList,
}
if _, err := discover.ListenUDP(conn, cfg); err != nil {
if _, err := discover.ListenUDP(conn, ln, cfg); err != nil {
utils.Fatalf("%v", err)
}
}

select {}
}

func printNotice(nodeKey *ecdsa.PublicKey, addr net.UDPAddr) {
if addr.IP.IsUnspecified() {
addr.IP = net.IP{127, 0, 0, 1}
}
n := enode.NewV4(nodeKey, addr.IP, 0, addr.Port)
fmt.Println(n.String())
fmt.Println("Note: you're using cmd/bootnode, a developer tool.")
fmt.Println("We recommend using a regular node as bootstrap node for production deployments.")
}
4 changes: 2 additions & 2 deletions cmd/p2psim/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ import (
"github.com/XinFinOrg/XDPoSChain/crypto"
"github.com/XinFinOrg/XDPoSChain/internal/flags"
"github.com/XinFinOrg/XDPoSChain/p2p"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
"github.com/XinFinOrg/XDPoSChain/p2p/simulations"
"github.com/XinFinOrg/XDPoSChain/p2p/simulations/adapters"
"github.com/XinFinOrg/XDPoSChain/rpc"
Expand Down Expand Up @@ -300,7 +300,7 @@ func createNode(ctx *cli.Context) error {
if err != nil {
return err
}
config.ID = discover.PubkeyID(&privKey.PublicKey)
config.ID = enode.PubkeyToIDV4(&privKey.PublicKey)
config.PrivateKey = privKey
}
if services := ctx.String("services"); services != "" {
Expand Down
36 changes: 19 additions & 17 deletions cmd/utils/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ import (
"github.com/XinFinOrg/XDPoSChain/miner"
"github.com/XinFinOrg/XDPoSChain/node"
"github.com/XinFinOrg/XDPoSChain/p2p"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/discv5"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
"github.com/XinFinOrg/XDPoSChain/p2p/nat"
"github.com/XinFinOrg/XDPoSChain/p2p/netutil"
"github.com/XinFinOrg/XDPoSChain/params"
Expand Down Expand Up @@ -932,19 +932,20 @@ func setAllowlistAndDenylistForPeers(ctx *cli.Context, cfg *p2p.Config) {
// setup allowlist for peers
if ctx.IsSet(PeersAllowlistFlag.Name) {
urls := SplitAndTrim(ctx.String(PeersAllowlistFlag.Name))
cfg.AllowPeers = make(map[discover.NodeID]struct{}, len(urls))
cfg.AllowPeers = make(map[enode.ID]struct{}, len(urls))
for _, url := range urls {
if url != "" {
node1, err1 := discover.HexID(url)
var node1 enode.ID
err1 := node1.UnmarshalText([]byte(url))
if err1 == nil {
cfg.AllowPeers[node1] = struct{}{}
log.Info("Add peer to allowlist", "id", node1)
continue
}
node2, err2 := discover.ParseNode(url)
node2, err2 := enode.ParseV4(url)
if err2 == nil {
cfg.AllowPeers[node2.ID] = struct{}{}
log.Info("Add peer to allowlist", "enode", url, "id", node2.ID)
cfg.AllowPeers[node2.ID()] = struct{}{}
log.Info("Add peer to allowlist", "enode", url, "id", node2.ID())
continue
}
log.Crit("Invalid peer id for allowlist", "url", url, "err1", err1, "err2", err2)
Expand All @@ -955,19 +956,20 @@ func setAllowlistAndDenylistForPeers(ctx *cli.Context, cfg *p2p.Config) {
// setup denylist for peers
if ctx.IsSet(PeersDenylistFlag.Name) {
urls := SplitAndTrim(ctx.String(PeersDenylistFlag.Name))
cfg.DenyPeers = make(map[discover.NodeID]struct{}, len(urls))
cfg.DenyPeers = make(map[enode.ID]struct{}, len(urls))
for _, url := range urls {
if url != "" {
node1, err1 := discover.HexID(url)
var node1 enode.ID
err1 := node1.UnmarshalText([]byte(url))
if err1 == nil {
cfg.DenyPeers[node1] = struct{}{}
log.Info("Add peer to denylist", "id", node1)
continue
}
node2, err2 := discover.ParseNode(url)
node2, err2 := enode.ParseV4(url)
if err2 == nil {
cfg.DenyPeers[node2.ID] = struct{}{}
log.Info("Add peer to denylist", "enode", url, "id", node2.ID)
cfg.DenyPeers[node2.ID()] = struct{}{}
log.Info("Add peer to denylist", "enode", url, "id", node2.ID())
continue
}
log.Crit("Invalid peer id for denylist", "url", url, "err1", err1, "err2", err2)
Expand All @@ -982,10 +984,10 @@ func removeDenylistedPeers(cfg *p2p.Config) {
return
}

filteredNodes := make([]*discover.Node, 0, len(cfg.BootstrapNodes))
filteredNodes := make([]*enode.Node, 0, len(cfg.BootstrapNodes))
for _, node := range cfg.BootstrapNodes {
if _, ok := cfg.DenyPeers[node.ID]; ok {
log.Info("Remove denylisted peer", "enode", node, "id", node.ID)
if _, ok := cfg.DenyPeers[node.ID()]; ok {
log.Info("Remove denylisted peer", "enode", node, "id", node.ID())
continue
}
filteredNodes = append(filteredNodes, node)
Expand Down Expand Up @@ -1021,11 +1023,11 @@ func setBootstrapNodes(ctx *cli.Context, cfg *p2p.Config) {
cfg.BootstrapNodes = mustParseBootnodes(urls)
}

func mustParseBootnodes(urls []string) []*discover.Node {
nodes := make([]*discover.Node, 0, len(urls))
func mustParseBootnodes(urls []string) []*enode.Node {
nodes := make([]*enode.Node, 0, len(urls))
for _, url := range urls {
if url != "" {
node, err := discover.ParseNode(url)
node, err := enode.ParseV4(url)
if err != nil {
log.Crit("Bootstrap URL invalid", "enode", url, "err", err)
return nil
Expand Down
4 changes: 2 additions & 2 deletions eth/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import (
"github.com/XinFinOrg/XDPoSChain/event"
"github.com/XinFinOrg/XDPoSChain/log"
"github.com/XinFinOrg/XDPoSChain/p2p"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
"github.com/XinFinOrg/XDPoSChain/params"
"github.com/XinFinOrg/XDPoSChain/rlp"
)
Expand Down Expand Up @@ -184,7 +184,7 @@ func NewProtocolManager(config *params.ChainConfig, mode downloader.SyncMode, ne
NodeInfo: func() interface{} {
return manager.NodeInfo()
},
PeerInfo: func(id discover.NodeID) interface{} {
PeerInfo: func(id enode.ID) interface{} {
if p := manager.peers.Peer(fmt.Sprintf("%x", id[:8])); p != nil {
return p.Info()
}
Expand Down
4 changes: 2 additions & 2 deletions eth/helper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import (
"github.com/XinFinOrg/XDPoSChain/ethdb"
"github.com/XinFinOrg/XDPoSChain/event"
"github.com/XinFinOrg/XDPoSChain/p2p"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
"github.com/XinFinOrg/XDPoSChain/params"
"github.com/holiman/uint256"
)
Expand Down Expand Up @@ -206,7 +206,7 @@ func newTestPeer(name string, version int, pm *ProtocolManager, shake bool) (*te
app, net := p2p.MsgPipe()

// Generate a random id and create the peer
var id discover.NodeID
var id enode.ID
rand.Read(id[:])

peer := pm.newPeer(version, p2p.NewPeer(id, name, nil), net)
Expand Down
4 changes: 2 additions & 2 deletions eth/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"github.com/XinFinOrg/XDPoSChain/core/types"
"github.com/XinFinOrg/XDPoSChain/eth/downloader"
"github.com/XinFinOrg/XDPoSChain/log"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
)

const (
Expand Down Expand Up @@ -69,7 +69,7 @@ func (pm *ProtocolManager) syncTransactions(p *peer) {
// the transactions in small packs to one peer at a time.
func (pm *ProtocolManager) txsyncLoop() {
var (
pending = make(map[discover.NodeID]*txsync)
pending = make(map[enode.ID]*txsync)
sending = false // whether a send is active
pack = new(txsync) // the pack that is being sent
done = make(chan error, 1) // result of the send
Expand Down
6 changes: 3 additions & 3 deletions eth/sync_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import (

"github.com/XinFinOrg/XDPoSChain/eth/downloader"
"github.com/XinFinOrg/XDPoSChain/p2p"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
)

// Tests that fast sync gets disabled as soon as a real block is successfully
Expand All @@ -42,8 +42,8 @@ func TestFastSyncDisabling(t *testing.T) {
// Sync up the two peers
io1, io2 := p2p.MsgPipe()

go pmFull.handle(pmFull.newPeer(63, p2p.NewPeer(discover.NodeID{}, "empty", nil), io2))
go pmEmpty.handle(pmEmpty.newPeer(63, p2p.NewPeer(discover.NodeID{}, "full", nil), io1))
go pmFull.handle(pmFull.newPeer(63, p2p.NewPeer(enode.ID{}, "empty", nil), io2))
go pmEmpty.handle(pmEmpty.newPeer(63, p2p.NewPeer(enode.ID{}, "full", nil), io1))

time.Sleep(250 * time.Millisecond)
pmEmpty.synchronise(pmEmpty.peers.BestPeer())
Expand Down
26 changes: 13 additions & 13 deletions node/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"github.com/XinFinOrg/XDPoSChain/internal/debug"
"github.com/XinFinOrg/XDPoSChain/log"
"github.com/XinFinOrg/XDPoSChain/p2p"
"github.com/XinFinOrg/XDPoSChain/p2p/discover"
"github.com/XinFinOrg/XDPoSChain/p2p/enode"
"github.com/XinFinOrg/XDPoSChain/rpc"
)

Expand Down Expand Up @@ -61,19 +61,19 @@ func (api *adminAPI) AddPeer(url string) (bool, error) {
return false, ErrNodeStopped
}
// Try to add the url as a static peer and return
node, err := discover.ParseNode(url)
node, err := enode.ParseV4(url)
if err != nil {
return false, fmt.Errorf("invalid enode: %v", err)
}
// only accept the node which is in peer allowlist if the list is not empty
if len(server.AllowPeers) > 0 {
if _, ok := server.AllowPeers[node.ID]; !ok {
return false, fmt.Errorf("peer is not in allowlist: %v, ID: %s", url, node.ID)
if _, ok := server.AllowPeers[node.ID()]; !ok {
return false, fmt.Errorf("peer is not in allowlist: %v, ID: %s", url, node.ID())
}
}
// reject the node which is in peer blacklist
if _, ok := server.DenyPeers[node.ID]; ok {
return false, fmt.Errorf("peer is in blacklist: %v, ID: %s", url, node.ID)
if _, ok := server.DenyPeers[node.ID()]; ok {
return false, fmt.Errorf("peer is in blacklist: %v, ID: %s", url, node.ID())
}
server.AddPeer(node)
return true, nil
Expand All @@ -87,7 +87,7 @@ func (api *adminAPI) RemovePeer(url string) (bool, error) {
return false, ErrNodeStopped
}
// Try to remove the url as a static peer and return
node, err := discover.ParseNode(url)
node, err := enode.ParseV4(url)
if err != nil {
return false, fmt.Errorf("invalid enode: %v", err)
}
Expand All @@ -102,19 +102,19 @@ func (api *adminAPI) AddTrustedPeer(url string) (bool, error) {
if server == nil {
return false, ErrNodeStopped
}
node, err := discover.ParseNode(url)
node, err := enode.ParseV4(url)
if err != nil {
return false, fmt.Errorf("invalid enode: %v", err)
}
// only accept the node which is in peer allowlist if the list is not empty
if len(server.AllowPeers) > 0 {
if _, ok := server.AllowPeers[node.ID]; !ok {
return false, fmt.Errorf("trusted peer is not in allowlist: %v, ID: %s", url, node.ID)
if _, ok := server.AllowPeers[node.ID()]; !ok {
return false, fmt.Errorf("trusted peer is not in allowlist: %v, ID: %s", url, node.ID())
}
}
// reject the node which is in peer blacklist
if _, ok := server.DenyPeers[node.ID]; ok {
return false, fmt.Errorf("trusted peer is in blacklist: %v, ID: %s", url, node.ID)
if _, ok := server.DenyPeers[node.ID()]; ok {
return false, fmt.Errorf("trusted peer is in blacklist: %v, ID: %s", url, node.ID())
}
server.AddTrustedPeer(node)
return true, nil
Expand All @@ -128,7 +128,7 @@ func (api *adminAPI) RemoveTrustedPeer(url string) (bool, error) {
if server == nil {
return false, ErrNodeStopped
}
node, err := discover.ParseNode(url)
node, err := enode.ParseV4(url)
if err != nil {
return false, fmt.Errorf("invalid enode: %v", err)
}
Expand Down
Loading
Loading