diff --git a/glide.lock b/glide.lock index 3d31f944..0f016f36 100644 --- a/glide.lock +++ b/glide.lock @@ -70,7 +70,7 @@ imports: - name: github.com/tendermint/go-merkle version: 05042c6ab9cad51d12e4cecf717ae68e3b1409a8 - name: github.com/tendermint/go-p2p - version: 929cf433b9c8e987af5f7f3ca3ce717e1e3eda53 + version: 642901d5aae311368d91ebfb888a4f6877de9614 subpackages: - upnp - name: github.com/tendermint/go-rpc diff --git a/node/node.go b/node/node.go index e6ebc758..5499d3c2 100644 --- a/node/node.go +++ b/node/node.go @@ -112,6 +112,23 @@ func NewNode(config cfg.Config, privValidator *types.PrivValidator) *Node { sw.AddReactor("BLOCKCHAIN", bcReactor) sw.AddReactor("CONSENSUS", consensusReactor) + // filter peers by addr or pubkey + // NOTE: query format subject to change + sw.SetAddrFilter(func(addr net.Addr) error { + res := proxyApp.Query().QuerySync([]byte(Fmt("p2p/filter/addr/%s", addr.String()))) + if res.IsOK() { + return nil + } + return res + }) + sw.SetPubKeyFilter(func(pubkey crypto.PubKeyEd25519) error { + res := proxyApp.Query().QuerySync([]byte(Fmt("p2p/filter/pubkey/%X", pubkey.Bytes()))) + if res.IsOK() { + return nil + } + return res + }) + // add the event switch to all services // they should all satisfy events.Eventable SetEventSwitch(eventSwitch, bcReactor, mempoolReactor, consensusReactor)