diff options
author | Sonic <sonic@dexon.org> | 2019-05-08 16:13:05 +0800 |
---|---|---|
committer | Sonic <sonic@dexon.org> | 2019-05-08 16:14:44 +0800 |
commit | 732611145661380064ef31f7e60d50da6bd7a04a (patch) | |
tree | f34efc9b1e5b256b3218e2e967678fe18a81f1e9 | |
parent | 8ddf407b731f6baf1af1275c07b6861579cbc749 (diff) | |
download | dexon-732611145661380064ef31f7e60d50da6bd7a04a.tar dexon-732611145661380064ef31f7e60d50da6bd7a04a.tar.gz dexon-732611145661380064ef31f7e60d50da6bd7a04a.tar.bz2 dexon-732611145661380064ef31f7e60d50da6bd7a04a.tar.lz dexon-732611145661380064ef31f7e60d50da6bd7a04a.tar.xz dexon-732611145661380064ef31f7e60d50da6bd7a04a.tar.zst dexon-732611145661380064ef31f7e60d50da6bd7a04a.zip |
lds: remove LES/1 related code
-rw-r--r-- | lds/backend.go | 2 | ||||
-rw-r--r-- | lds/handler.go | 159 | ||||
-rw-r--r-- | lds/odr_requests.go | 13 | ||||
-rw-r--r-- | lds/peer.go | 21 | ||||
-rw-r--r-- | lds/protocol.go | 12 | ||||
-rw-r--r-- | lds/txrelay.go | 4 |
6 files changed, 6 insertions, 205 deletions
diff --git a/lds/backend.go b/lds/backend.go index e9922a496..3fa033b91 100644 --- a/lds/backend.go +++ b/lds/backend.go @@ -152,8 +152,6 @@ func New(ctx *node.ServiceContext, config *dex.Config) (*LightDexon, error) { func lesTopic(genesisHash common.Hash, protocolVersion uint) discv5.Topic { var name string switch protocolVersion { - case lpv1: - name = "LES" case lpv2: name = "LES2" default: diff --git a/lds/handler.go b/lds/handler.go index a32784730..d8a6fa3b5 100644 --- a/lds/handler.go +++ b/lds/handler.go @@ -324,7 +324,7 @@ func (pm *ProtocolManager) handle(p *peer) error { } } -var reqList = []uint64{GetBlockHeadersMsg, GetBlockBodiesMsg, GetCodeMsg, GetReceiptsMsg, GetProofsV1Msg, SendTxMsg, SendTxV2Msg, GetTxStatusMsg, GetHeaderProofsMsg, GetProofsV2Msg, GetHelperTrieProofsMsg} +var reqList = []uint64{GetBlockHeadersMsg, GetBlockBodiesMsg, GetCodeMsg, GetReceiptsMsg, SendTxV2Msg, GetTxStatusMsg, GetProofsV2Msg, GetHelperTrieProofsMsg} // handleMsg is invoked whenever an inbound message is received from a remote // peer. The remote connection is torn down upon returning any error. @@ -704,59 +704,6 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { Obj: resp.Receipts, } - case GetProofsV1Msg: - p.Log().Trace("Received proofs request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Reqs []ProofReq - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - bytes int - proofs proofsData - ) - reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxProofsFetch) { - return errResp(ErrRequestRejected, "") - } - for _, req := range req.Reqs { - // Retrieve the requested state entry, stopping if enough was found - if number := rawdb.ReadHeaderNumber(pm.chainDb, req.BHash); number != nil { - if header := rawdb.ReadHeader(pm.chainDb, req.BHash, *number); header != nil { - statedb, err := pm.blockchain.State() - if err != nil { - continue - } - var trie state.Trie - if len(req.AccKey) > 0 { - account, err := pm.getAccount(statedb, header.Root, common.BytesToHash(req.AccKey)) - if err != nil { - continue - } - trie, _ = statedb.Database().OpenStorageTrie(common.BytesToHash(req.AccKey), account.Root) - } else { - trie, _ = statedb.Database().OpenTrie(header.Root) - } - if trie != nil { - var proof light.NodeList - trie.Prove(req.Key, 0, &proof) - - proofs = append(proofs, proof) - if bytes += proof.DataSize(); bytes >= softResponseLimit { - break - } - } - } - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendProofs(req.ReqID, bv, proofs) - case GetProofsV2Msg: p.Log().Trace("Received les/2 proofs request") // Decode the retrieval message @@ -819,27 +766,6 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) return p.SendProofsV2(req.ReqID, bv, nodes.NodeList()) - case ProofsV1Msg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received proofs response") - // A batch of merkle proofs arrived to one of our previous requests - var resp struct { - ReqID, BV uint64 - Data []light.NodeList - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgProofsV1, - ReqID: resp.ReqID, - Obj: resp.Data, - } - case ProofsV2Msg: if pm.odr == nil { return errResp(ErrUnexpectedResponse, "") @@ -861,51 +787,6 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { Obj: resp.Data, } - case GetHeaderProofsMsg: - p.Log().Trace("Received headers proof request") - // Decode the retrieval message - var req struct { - ReqID uint64 - Reqs []ChtReq - } - if err := msg.Decode(&req); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - // Gather state data until the fetch or network limits is reached - var ( - bytes int - proofs []ChtResp - ) - reqCnt := len(req.Reqs) - if reject(uint64(reqCnt), MaxHelperTrieProofsFetch) { - return errResp(ErrRequestRejected, "") - } - trieDb := trie.NewDatabase(ethdb.NewTable(pm.chainDb, light.ChtTablePrefix)) - for _, req := range req.Reqs { - if header := pm.blockchain.GetHeaderByNumber(req.BlockNum); header != nil { - sectionHead := rawdb.ReadCanonicalHash(pm.chainDb, req.ChtNum*pm.iConfig.ChtSize-1) - if root := light.GetChtRoot(pm.chainDb, req.ChtNum-1, sectionHead); root != (common.Hash{}) { - trie, err := trie.New(root, trieDb) - if err != nil { - continue - } - var encNumber [8]byte - binary.BigEndian.PutUint64(encNumber[:], req.BlockNum) - - var proof light.NodeList - trie.Prove(encNumber[:], 0, &proof) - - proofs = append(proofs, ChtResp{Header: header, Proof: proof}) - if bytes += proof.DataSize() + estHeaderRlpSize; bytes >= softResponseLimit { - break - } - } - } - } - bv, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - return p.SendHeaderProofs(req.ReqID, bv, proofs) - case GetHelperTrieProofsMsg: p.Log().Trace("Received helper trie proof request") // Decode the retrieval message @@ -967,26 +848,6 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) return p.SendHelperTrieProofs(req.ReqID, bv, HelperTrieResps{Proofs: nodes.NodeList(), AuxData: auxData}) - case HeaderProofsMsg: - if pm.odr == nil { - return errResp(ErrUnexpectedResponse, "") - } - - p.Log().Trace("Received headers proof response") - var resp struct { - ReqID, BV uint64 - Data []ChtResp - } - if err := msg.Decode(&resp); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - p.fcServer.GotReply(resp.ReqID, resp.BV) - deliverMsg = &Msg{ - MsgType: MsgHeaderProofs, - ReqID: resp.ReqID, - Obj: resp.Data, - } - case HelperTrieProofsMsg: if pm.odr == nil { return errResp(ErrUnexpectedResponse, "") @@ -1008,24 +869,6 @@ func (pm *ProtocolManager) handleMsg(p *peer) error { Obj: resp.Data, } - case SendTxMsg: - if pm.txpool == nil { - return errResp(ErrRequestRejected, "") - } - // Transactions arrived, parse all of them and deliver to the pool - var txs []*types.Transaction - if err := msg.Decode(&txs); err != nil { - return errResp(ErrDecode, "msg %v: %v", msg, err) - } - reqCnt := len(txs) - if reject(uint64(reqCnt), MaxTxSend) { - return errResp(ErrRequestRejected, "") - } - pm.txpool.AddRemotes(txs) - - _, rcost := p.fcClient.RequestProcessed(costs.baseCost + uint64(reqCnt)*costs.reqCost) - pm.server.fcCostStats.update(msg.Code, uint64(reqCnt), rcost) - case SendTxV2Msg: if pm.txpool == nil { return errResp(ErrRequestRejected, "") diff --git a/lds/odr_requests.go b/lds/odr_requests.go index f157d0938..a3503e1d9 100644 --- a/lds/odr_requests.go +++ b/lds/odr_requests.go @@ -191,8 +191,6 @@ type TrieRequest light.TrieRequest // peer's cost table (implementation of LdsOdrRequest) func (r *TrieRequest) GetCost(peer *peer) uint64 { switch peer.version { - case lpv1: - return peer.GetRequestCost(GetProofsV1Msg, 1) case lpv2: return peer.GetRequestCost(GetProofsV2Msg, 1) default: @@ -351,8 +349,6 @@ type ChtRequest light.ChtRequest // peer's cost table (implementation of LdsOdrRequest) func (r *ChtRequest) GetCost(peer *peer) uint64 { switch peer.version { - case lpv1: - return peer.GetRequestCost(GetHeaderProofsMsg, 1) case lpv2: return peer.GetRequestCost(GetHelperTrieProofsMsg, 1) default: @@ -380,15 +376,6 @@ func (r *ChtRequest) Request(reqID uint64, peer *peer) error { AuxReq: auxHeader, } switch peer.version { - case lpv1: - var reqsV1 ChtReq - if req.Type != htCanonical || req.AuxReq != auxHeader || len(req.Key) != 8 { - return fmt.Errorf("Request invalid in LES/1 mode") - } - blockNum := binary.BigEndian.Uint64(req.Key) - // convert HelperTrie request to old CHT request - reqsV1 = ChtReq{ChtNum: (req.TrieIdx + 1) * (r.Config.ChtSize / r.Config.PairChtSize), BlockNum: blockNum, FromLevel: req.FromLevel} - return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), []ChtReq{reqsV1}) case lpv2: return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), []HelperTrieReq{req}) default: diff --git a/lds/peer.go b/lds/peer.go index 1b1eb06cc..e0ee23236 100644 --- a/lds/peer.go +++ b/lds/peer.go @@ -208,21 +208,11 @@ func (p *peer) SendReceiptsRLP(reqID, bv uint64, receipts []rlp.RawValue) error return sendResponse(p.rw, ReceiptsMsg, reqID, bv, receipts) } -// SendProofs sends a batch of legacy LES/1 merkle proofs, corresponding to the ones requested. -func (p *peer) SendProofs(reqID, bv uint64, proofs proofsData) error { - return sendResponse(p.rw, ProofsV1Msg, reqID, bv, proofs) -} - // SendProofsV2 sends a batch of merkle proofs, corresponding to the ones requested. func (p *peer) SendProofsV2(reqID, bv uint64, proofs light.NodeList) error { return sendResponse(p.rw, ProofsV2Msg, reqID, bv, proofs) } -// SendHeaderProofs sends a batch of legacy LES/1 header proofs, corresponding to the ones requested. -func (p *peer) SendHeaderProofs(reqID, bv uint64, proofs []ChtResp) error { - return sendResponse(p.rw, HeaderProofsMsg, reqID, bv, proofs) -} - // SendHelperTrieProofs sends a batch of HelperTrie proofs, corresponding to the ones requested. func (p *peer) SendHelperTrieProofs(reqID, bv uint64, resp HelperTrieResps) error { return sendResponse(p.rw, HelperTrieProofsMsg, reqID, bv, resp) @@ -271,8 +261,6 @@ func (p *peer) RequestReceipts(reqID, cost uint64, hashes []common.Hash) error { func (p *peer) RequestProofs(reqID, cost uint64, reqs []ProofReq) error { p.Log().Debug("Fetching batch of proofs", "count", len(reqs)) switch p.version { - case lpv1: - return sendRequest(p.rw, GetProofsV1Msg, reqID, cost, reqs) case lpv2: return sendRequest(p.rw, GetProofsV2Msg, reqID, cost, reqs) default: @@ -283,13 +271,6 @@ func (p *peer) RequestProofs(reqID, cost uint64, reqs []ProofReq) error { // RequestHelperTrieProofs fetches a batch of HelperTrie merkle proofs from a remote node. func (p *peer) RequestHelperTrieProofs(reqID, cost uint64, data interface{}) error { switch p.version { - case lpv1: - reqs, ok := data.([]ChtReq) - if !ok { - return errInvalidHelpTrieReq - } - p.Log().Debug("Fetching batch of header proofs", "count", len(reqs)) - return sendRequest(p.rw, GetHeaderProofsMsg, reqID, cost, reqs) case lpv2: reqs, ok := data.([]HelperTrieReq) if !ok { @@ -312,8 +293,6 @@ func (p *peer) RequestTxStatus(reqID, cost uint64, txHashes []common.Hash) error func (p *peer) SendTxs(reqID, cost uint64, txs types.Transactions) error { p.Log().Debug("Fetching batch of transactions", "count", len(txs)) switch p.version { - case lpv1: - return p2p.Send(p.rw, SendTxMsg, txs) // old message format does not include reqID case lpv2: return sendRequest(p.rw, SendTxV2Msg, reqID, cost, txs) default: diff --git a/lds/protocol.go b/lds/protocol.go index d89b2e301..4c7f574e0 100644 --- a/lds/protocol.go +++ b/lds/protocol.go @@ -34,19 +34,18 @@ import ( // Constants to match up protocol versions and messages const ( - lpv1 = 1 lpv2 = 2 ) // Supported versions of the les protocol (first is primary) var ( - ClientProtocolVersions = []uint{lpv2, lpv1} - ServerProtocolVersions = []uint{lpv2, lpv1} + ClientProtocolVersions = []uint{lpv2} + ServerProtocolVersions = []uint{lpv2} AdvertiseProtocolVersions = []uint{lpv2} // clients are searching for the first advertised protocol in the list ) // Number of implemented message corresponding to different protocol versions. -var ProtocolLengths = map[uint]uint64{lpv1: 15, lpv2: 22} +var ProtocolLengths = map[uint]uint64{lpv2: 22} const ( NetworkId = 1 @@ -64,13 +63,8 @@ const ( BlockBodiesMsg = 0x05 GetReceiptsMsg = 0x06 ReceiptsMsg = 0x07 - GetProofsV1Msg = 0x08 - ProofsV1Msg = 0x09 GetCodeMsg = 0x0a CodeMsg = 0x0b - SendTxMsg = 0x0c - GetHeaderProofsMsg = 0x0d - HeaderProofsMsg = 0x0e // Protocol messages belonging to LPV2 GetProofsV2Msg = 0x0f ProofsV2Msg = 0x10 diff --git a/lds/txrelay.go b/lds/txrelay.go index 7feb2c189..16eccfdc6 100644 --- a/lds/txrelay.go +++ b/lds/txrelay.go @@ -118,14 +118,14 @@ func (self *LdsTxRelay) send(txs types.Transactions, count int) { rq := &distReq{ getCost: func(dp distPeer) uint64 { peer := dp.(*peer) - return peer.GetRequestCost(SendTxMsg, len(ll)) + return peer.GetRequestCost(SendTxV2Msg, len(ll)) }, canSend: func(dp distPeer) bool { return dp.(*peer) == pp }, request: func(dp distPeer) func() { peer := dp.(*peer) - cost := peer.GetRequestCost(SendTxMsg, len(ll)) + cost := peer.GetRequestCost(SendTxV2Msg, len(ll)) peer.fcServer.QueueRequest(reqID, cost) return func() { peer.SendTxs(reqID, cost, ll) } }, |