Skip to content

Commit

Permalink
feat: add static peers on bootnode
Browse files Browse the repository at this point in the history
  • Loading branch information
krish-nr committed Jan 22, 2024
1 parent 22fa6fd commit 69ef571
Show file tree
Hide file tree
Showing 9 changed files with 230 additions and 36 deletions.
16 changes: 14 additions & 2 deletions cmd/bootnode/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/p2p/discover"
"github.com/ethereum/go-ethereum/p2p/discover/v4wire"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/p2p/nat"
"github.com/ethereum/go-ethereum/p2p/netutil"
Expand All @@ -45,10 +46,14 @@ func main() {
runv5 = flag.Bool("v5", false, "run a v5 topic discovery bootnode")
verbosity = flag.Int("verbosity", int(log.LvlInfo), "log verbosity (0-5)")
vmodule = flag.String("vmodule", "", "log verbosity pattern")
network = flag.String("network", "", "testnet/mainnet")

nodeKey *ecdsa.PrivateKey
err error
)

var staticV4Nodes []v4wire.Node

flag.Parse()

glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false)))
Expand Down Expand Up @@ -86,6 +91,12 @@ func main() {
}
}

if *network == "testnet" {
staticV4Nodes = staticV4NodesTestnet
} else {
staticV4Nodes = staticV4NodesMainnet
}

if *writeAddr {
fmt.Printf("%x\n", crypto.FromECDSAPub(&nodeKey.PublicKey)[1:])
os.Exit(0)
Expand Down Expand Up @@ -123,8 +134,9 @@ func main() {
db, _ := enode.OpenDB("")
ln := enode.NewLocalNode(db, nodeKey)
cfg := discover.Config{
PrivateKey: nodeKey,
NetRestrict: restrictList,
PrivateKey: nodeKey,
NetRestrict: restrictList,
StaticV4Nodes: staticV4Nodes,
}
if *runv5 {
if _, err := discover.ListenV5(conn, ln, cfg); err != nil {
Expand Down
110 changes: 110 additions & 0 deletions cmd/bootnode/static_nodes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package main

import (
"encoding/hex"
"net"

"github.com/ethereum/go-ethereum/p2p/discover/v4wire"
)

var staticV4NodesTestnet = []v4wire.Node{
//p2p-0

{
IP: net.ParseIP("18.177.245.157").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("223488870e492f49873b621c21f3e1302f00993aaa5214a077a1c4eb62dfe96675cc7a3360525c3409480d1ec13cc72f432b4d50f5e70f98e60385dc25d4be6b"),
},

//p2p-1
{
IP: net.ParseIP("18.176.219.164").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("f6a082e7861762da7e5d65ebf92b06e72b9fde81787a1a71ec8ab407345f3a7787e2617c5b9565ea3a1be46f794eeb791aef3059818b23588f2352b1d7973dfd"),
},
}

var staticV4NodesMainnet = []v4wire.Node{
//ap-p2p-0

{
IP: net.ParseIP("52.193.218.151").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("db109c6cac5c8b6225edd3176fc3764c58e0720950fe94c122c80978e706a9c9e976629b718e48b6306ea0f9126e5394d3424c9716c5703549e2e7eba216353b"),
},

//ap-p2p-1
{
IP: net.ParseIP("52.195.105.192").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("afe18782053bb31fb7ea41e1acf659ab9bd1eec181fb97331f0a6b61871a469b4f75138f903c977796be1cc2a3c985d33150a396e878d3cd6e4723b6040ff9c0"),
},
//ap-p2p-2
{
IP: net.ParseIP("18.182.161.116").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("0cbbf05d39193127e373038f41cdfb520644453dc764bac49f8403b774f2aab7e679b72ac1ee692f19f55cf07cdf07ef99195c841cbe30d263955149de9213cb"),
},
//us-p2p-2
{
IP: net.ParseIP("34.205.6.198").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("ad16edbb25953c36026636427d637fd874f65d1895a589c987009cb820a675cb0f0e1a1dffe34b826a8ef4cc9a0da398cc921ce612de7e6167dd3fdf3db9a1d9"),
},
//us-p2p-1
{
IP: net.ParseIP("34.194.74.36").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("852a9d69b385ccf858227ab741d73821704b7fc4abf6510840e8769a44c0d360d269a6ff6b0c42d7335e1caa494a16e45e24ad8aaa9830509f1d8ff49ebb1288"),
},
//us-p2p-0
{
IP: net.ParseIP("54.211.157.22").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("23538322b4fa60a936395012b37d5b4407717eec54c64232bd4e985b24ad941c3e4dd36d634e053286d926ceed66c725f8f2a72003f59901b963dee9d9983080"),
},
//eu-p2p-0
{
IP: net.ParseIP("34.246.100.156").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("752038ca7a0359e967d5096453935a5c3d5a13864c3551bd60c5d7d8e6547b2d68b1ceb484d872116ac6977b78d1d39fab8ebd92d22e68b032ffc196fa6cecd7"),
},
//eu-p2p-1
{
IP: net.ParseIP("99.81.30.183").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("6c24f4531d755d647ee3d8082f7945f051032c7bc1fc6c90ae6c328092efa2cf1ce429db01e7c4efe26f198eecf996979c2958745ac1f4d831f88231abd0096e"),
},
//eu-p2p-2
{
IP: net.ParseIP("34.243.159.16").To4(),
UDP: 30303,
TCP: 30303,
ID: decodePubkeyV4("f39da1c3b027b5683387c724363e0e132c287a6094564a05b43e8f22508e973098b3c7234df09beabcc19827f1d8998bd1e1d960fb5949bac0317bbe7fcb20a4"),
},
}

// decodePubkeyV4
func decodePubkeyV4(hexPubkey string) v4wire.Pubkey {
pubkeyBytes, err := hex.DecodeString(hexPubkey)
if err != nil {
return v4wire.Pubkey{}
}
if len(pubkeyBytes) != 64 {
return v4wire.Pubkey{}
}

var pubkey v4wire.Pubkey
copy(pubkey[:], pubkeyBytes)
return pubkey
}
1 change: 0 additions & 1 deletion core/blockchain.go
Original file line number Diff line number Diff line change
Expand Up @@ -1826,7 +1826,6 @@ func (bc *BlockChain) insertChain(chain types.Blocks, verifySeals, setHead bool)

// skip block process if we already have the state, receipts and logs from mining work
if !(receiptExist && logExist && stateExist) {
log.Info("Krish debug:")
// Retrieve the parent block and it's state to execute on top
parent := it.previous()
if parent == nil {
Expand Down
1 change: 0 additions & 1 deletion core/state/statedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,6 @@ func New(root common.Hash, db Database, snaps *snapshot.Tree) (*StateDB, error)

// NewWithSharedPool creates a new state with sharedStorge on layer 1.5
func NewWithSharedPool(root common.Hash, db Database, snaps *snapshot.Tree) (*StateDB, error) {
log.Info("debug: NewWithSharedPool called")
statedb, err := New(root, db, snaps)
if err != nil {
return nil, err
Expand Down
4 changes: 4 additions & 0 deletions p2p/discover/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (

"github.com/ethereum/go-ethereum/common/mclock"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/p2p/discover/v4wire"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/p2p/enr"
"github.com/ethereum/go-ethereum/p2p/netutil"
Expand Down Expand Up @@ -55,6 +56,9 @@ type Config struct {

ValidSchemes enr.IdentityScheme // allowed identity schemes
Clock mclock.Clock

//static v4 nodes
StaticV4Nodes []v4wire.Node
}

func (cfg Config) withDefaults() Config {
Expand Down
26 changes: 19 additions & 7 deletions p2p/discover/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -317,14 +317,12 @@ func (tab *Table) loadSeedNodes() {
func (tab *Table) doRevalidate(done chan<- struct{}) {
defer func() { done <- struct{}{} }()

log.Info("do revalidate")
last, bi := tab.nodeToRevalidate()
if last == nil {
// No non-empty bucket found.
return
}

log.Info("do revalidate send ping")
// Ping the selected node and wait for a pong.
remoteSeq, err := tab.net.ping(unwrapNode(last))

Expand Down Expand Up @@ -413,13 +411,12 @@ func (tab *Table) findnodeByID(target enode.ID, nresults int, preferLive bool) *
liveNodes := &nodesByDistance{target: target}
for _, b := range &tab.buckets {
for _, n := range b.entries {
// 使用xorDistance函数计算节点n与目标ID的距离
distance := xorDistance(target, n.ID())
nodes.push(n, nresults)
if preferLive && n.livenessChecks > 0 {
liveNodes.push(n, nresults)
}
log.Info("ZXL Distance", "Node ID", n.ID(), "Target ID", target, "XOR Distance", distance)
log.Trace("Distance", "Node ID", n.ID(), "Target ID", target, "XOR Distance", distance)

}
}
Expand Down Expand Up @@ -451,6 +448,21 @@ func (tab *Table) getAllNodeIDs() []enode.ID {
return ids
}

// get node by given id
func (tab *Table) getNodeByID(id enode.ID) enode.Node {
tab.mutex.Lock()
defer tab.mutex.Unlock()

for _, b := range tab.buckets {
for _, n := range b.entries {
if n.ID().String() == id.String() {
return n.Node
}
}
}
return enode.Node{}
}

// get all nodes ids
func (tab *Table) getAllNodes() []enode.Node {
tab.mutex.Lock()
Expand Down Expand Up @@ -542,7 +554,7 @@ func (tab *Table) addSeenNode(n *node) {
//
// The caller must not hold tab.mutex.
func (tab *Table) addVerifiedNode(n *node) {
log.Info("ZXL: addVerifiedNode", "nodeIP", n.IP().String(), "nodeId", n.ID().String())
log.Trace("addVerifiedNode", "nodeIP", n.IP().String(), "nodeId", n.ID().String())
if !tab.isInitDone() {
return
}
Expand All @@ -552,9 +564,9 @@ func (tab *Table) addVerifiedNode(n *node) {
nodes := tab.getAllNodes()

for i, nodeIndex := range nodes {
log.Info("ZXL: current tab content", "index", i, "nodeId", nodeIndex.ID(), "nodeIP", nodeIndex.IP().String())
log.Trace("current tab content", "index", i, "nodeId", nodeIndex.ID(), "nodeIP", nodeIndex.IP().String())
for j, pair := range nodeIndex.Record().GetPairs() {
log.Info("ZXL: current node content", "node index", i, "pair index", j, "pairKey", pair.GetPairKey(), "pairValue", pair.GetPairValue())
log.Trace("current node content", "node index", i, "pair index", j, "pairKey", pair.GetPairKey(), "pairValue", pair.GetPairValue())

}
}
Expand Down
Loading

0 comments on commit 69ef571

Please sign in to comment.