From d1a79df5342de2294a25ce89b4623a81a182f764 Mon Sep 17 00:00:00 2001 From: b00ris Date: Mon, 16 Apr 2018 10:05:03 +0300 Subject: [PATCH] remove verification from downloader for trusted --- eth/downloader/downloader.go | 8 +++++++- les/fetcher.go | 1 + les/fetcher_test.go | 6 +++--- les/handler.go | 17 ++++++++++++----- les/peer_test.go | 4 ++-- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 9e494989980d..e6348fa1017c 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -33,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p/discover" "github.com/ethereum/go-ethereum/params" ) @@ -113,7 +114,8 @@ type Downloader struct { blockchain BlockChain // Callbacks - dropPeer peerDropFn // Drops a peer for misbehaving + dropPeer peerDropFn // Drops a peer for misbehaving + IsTrustedPeer func(p discover.NodeID) bool // Status synchroniseMock func(id string, hash common.Hash) error // Replacement for synchronise during testing @@ -1261,6 +1263,10 @@ func (d *Downloader) processHeaders(origin uint64, pivot uint64, td *big.Int) er frequency := fsHeaderCheckFrequency if chunk[len(chunk)-1].Number.Uint64()+uint64(fsHeaderForceVerify) > pivot { frequency = 1 + //disable validation for trusted peers + if d.IsTrustedPeer != nil { + frequency = 0 + } } if n, err := d.lightchain.InsertHeaderChain(chunk, frequency); err != nil { // If some headers were inserted, add them too to the rollback list diff --git a/les/fetcher.go b/les/fetcher.go index d957d3874d8c..d781ab3f9385 100644 --- a/les/fetcher.go +++ b/les/fetcher.go @@ -595,6 +595,7 @@ func (f *lightFetcher) processResponse(req fetchRequest, resp fetchResponse) boo if f.pm.ulc != nil && len(f.pm.ulc.trustedKeys) > 0 { checkFreq = 0 } + if _, err := f.chain.InsertHeaderChain(headers, checkFreq); err != nil { if err == consensus.ErrFutureBlock { return true diff --git a/les/fetcher_test.go b/les/fetcher_test.go index 09ca4af46037..1a362572bb10 100644 --- a/les/fetcher_test.go +++ b/les/fetcher_test.go @@ -24,16 +24,16 @@ func TestFetcherULCPeerSelector(t *testing.T) { rand.Read(id4[:]) ftn1 := &fetcherTreeNode{ - hash: common.StringToHash("1"), + hash: common.HexToHash("1"), td: big.NewInt(1), } ftn2 := &fetcherTreeNode{ - hash: common.StringToHash("2"), + hash: common.HexToHash("2"), td: big.NewInt(2), parent: ftn1, } ftn3 := &fetcherTreeNode{ - hash: common.StringToHash("3"), + hash: common.HexToHash("3"), td: big.NewInt(3), parent: ftn2, } diff --git a/les/handler.go b/les/handler.go index 4569afb6f2b6..ebb995168612 100644 --- a/les/handler.go +++ b/les/handler.go @@ -226,6 +226,9 @@ func NewProtocolManager( if lightSync { manager.downloader = downloader.New(downloader.LightSync, chainDb, manager.eventMux, nil, blockchain, removePeer) + if manager.ulc != nil && len(manager.ulc.trustedKeys) > 0 { + manager.downloader.IsTrustedPeer = manager.ulc.isTrusted + } manager.peers.notify((*downloaderPeerNotify)(manager)) manager.fetcher = newLightFetcher(manager) } @@ -1274,14 +1277,18 @@ func (pc *peerConnection) RequestHeadersByNumber(origin uint64, amount int, skip func (d *downloaderPeerNotify) registerPeer(p *peer) { pm := (*ProtocolManager)(d) - pc := &peerConnection{ - manager: pm, - peer: p, + if pm.ulc == nil || p.isTrusted { + pc := &peerConnection{ + manager: pm, + peer: p, + } + pm.downloader.RegisterLightPeer(p.id, ethVersion, pc) } - pm.downloader.RegisterLightPeer(p.id, ethVersion, pc) } func (d *downloaderPeerNotify) unregisterPeer(p *peer) { pm := (*ProtocolManager)(d) - pm.downloader.UnregisterPeer(p.id) + if pm.ulc == nil || p.isTrusted { + pm.downloader.UnregisterPeer(p.id) + } } diff --git a/les/peer_test.go b/les/peer_test.go index b1ca007378ea..8403d523f7ff 100644 --- a/les/peer_test.go +++ b/les/peer_test.go @@ -17,8 +17,8 @@ const ( ) var ( - hash = common.StringToHash("some string") - genesis = common.StringToHash("genesis hash") + hash = common.HexToHash("some string") + genesis = common.HexToHash("genesis hash") headNum = uint64(1234) td = big.NewInt(123) )