|
@@ -46,9 +46,9 @@ var (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
type LesOdrRequest interface {
|
|
type LesOdrRequest interface {
|
|
|
- GetCost(*peer) uint64
|
|
|
|
|
- CanSend(*peer) bool
|
|
|
|
|
- Request(uint64, *peer) error
|
|
|
|
|
|
|
+ GetCost(*serverPeer) uint64
|
|
|
|
|
+ CanSend(*serverPeer) bool
|
|
|
|
|
+ Request(uint64, *serverPeer) error
|
|
|
Validate(ethdb.Database, *Msg) error
|
|
Validate(ethdb.Database, *Msg) error
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -78,19 +78,19 @@ type BlockRequest light.BlockRequest
|
|
|
|
|
|
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
|
-func (r *BlockRequest) GetCost(peer *peer) uint64 {
|
|
|
|
|
- return peer.GetRequestCost(GetBlockBodiesMsg, 1)
|
|
|
|
|
|
|
+func (r *BlockRequest) GetCost(peer *serverPeer) uint64 {
|
|
|
|
|
+ return peer.getRequestCost(GetBlockBodiesMsg, 1)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
|
-func (r *BlockRequest) CanSend(peer *peer) bool {
|
|
|
|
|
|
|
+func (r *BlockRequest) CanSend(peer *serverPeer) bool {
|
|
|
return peer.HasBlock(r.Hash, r.Number, false)
|
|
return peer.HasBlock(r.Hash, r.Number, false)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
|
-func (r *BlockRequest) Request(reqID uint64, peer *peer) error {
|
|
|
|
|
|
|
+func (r *BlockRequest) Request(reqID uint64, peer *serverPeer) error {
|
|
|
peer.Log().Debug("Requesting block body", "hash", r.Hash)
|
|
peer.Log().Debug("Requesting block body", "hash", r.Hash)
|
|
|
- return peer.RequestBodies(reqID, r.GetCost(peer), []common.Hash{r.Hash})
|
|
|
|
|
|
|
+ return peer.requestBodies(reqID, []common.Hash{r.Hash})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Valid processes an ODR request reply message from the LES network
|
|
// Valid processes an ODR request reply message from the LES network
|
|
@@ -134,19 +134,19 @@ type ReceiptsRequest light.ReceiptsRequest
|
|
|
|
|
|
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
|
-func (r *ReceiptsRequest) GetCost(peer *peer) uint64 {
|
|
|
|
|
- return peer.GetRequestCost(GetReceiptsMsg, 1)
|
|
|
|
|
|
|
+func (r *ReceiptsRequest) GetCost(peer *serverPeer) uint64 {
|
|
|
|
|
+ return peer.getRequestCost(GetReceiptsMsg, 1)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
|
-func (r *ReceiptsRequest) CanSend(peer *peer) bool {
|
|
|
|
|
|
|
+func (r *ReceiptsRequest) CanSend(peer *serverPeer) bool {
|
|
|
return peer.HasBlock(r.Hash, r.Number, false)
|
|
return peer.HasBlock(r.Hash, r.Number, false)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
|
-func (r *ReceiptsRequest) Request(reqID uint64, peer *peer) error {
|
|
|
|
|
|
|
+func (r *ReceiptsRequest) Request(reqID uint64, peer *serverPeer) error {
|
|
|
peer.Log().Debug("Requesting block receipts", "hash", r.Hash)
|
|
peer.Log().Debug("Requesting block receipts", "hash", r.Hash)
|
|
|
- return peer.RequestReceipts(reqID, r.GetCost(peer), []common.Hash{r.Hash})
|
|
|
|
|
|
|
+ return peer.requestReceipts(reqID, []common.Hash{r.Hash})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Valid processes an ODR request reply message from the LES network
|
|
// Valid processes an ODR request reply message from the LES network
|
|
@@ -191,24 +191,24 @@ type TrieRequest light.TrieRequest
|
|
|
|
|
|
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
|
-func (r *TrieRequest) GetCost(peer *peer) uint64 {
|
|
|
|
|
- return peer.GetRequestCost(GetProofsV2Msg, 1)
|
|
|
|
|
|
|
+func (r *TrieRequest) GetCost(peer *serverPeer) uint64 {
|
|
|
|
|
+ return peer.getRequestCost(GetProofsV2Msg, 1)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
|
-func (r *TrieRequest) CanSend(peer *peer) bool {
|
|
|
|
|
|
|
+func (r *TrieRequest) CanSend(peer *serverPeer) bool {
|
|
|
return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true)
|
|
return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
|
-func (r *TrieRequest) Request(reqID uint64, peer *peer) error {
|
|
|
|
|
|
|
+func (r *TrieRequest) Request(reqID uint64, peer *serverPeer) error {
|
|
|
peer.Log().Debug("Requesting trie proof", "root", r.Id.Root, "key", r.Key)
|
|
peer.Log().Debug("Requesting trie proof", "root", r.Id.Root, "key", r.Key)
|
|
|
req := ProofReq{
|
|
req := ProofReq{
|
|
|
BHash: r.Id.BlockHash,
|
|
BHash: r.Id.BlockHash,
|
|
|
AccKey: r.Id.AccKey,
|
|
AccKey: r.Id.AccKey,
|
|
|
Key: r.Key,
|
|
Key: r.Key,
|
|
|
}
|
|
}
|
|
|
- return peer.RequestProofs(reqID, r.GetCost(peer), []ProofReq{req})
|
|
|
|
|
|
|
+ return peer.requestProofs(reqID, []ProofReq{req})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Valid processes an ODR request reply message from the LES network
|
|
// Valid processes an ODR request reply message from the LES network
|
|
@@ -245,23 +245,23 @@ type CodeRequest light.CodeRequest
|
|
|
|
|
|
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
|
-func (r *CodeRequest) GetCost(peer *peer) uint64 {
|
|
|
|
|
- return peer.GetRequestCost(GetCodeMsg, 1)
|
|
|
|
|
|
|
+func (r *CodeRequest) GetCost(peer *serverPeer) uint64 {
|
|
|
|
|
+ return peer.getRequestCost(GetCodeMsg, 1)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
|
-func (r *CodeRequest) CanSend(peer *peer) bool {
|
|
|
|
|
|
|
+func (r *CodeRequest) CanSend(peer *serverPeer) bool {
|
|
|
return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true)
|
|
return peer.HasBlock(r.Id.BlockHash, r.Id.BlockNumber, true)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
|
-func (r *CodeRequest) Request(reqID uint64, peer *peer) error {
|
|
|
|
|
|
|
+func (r *CodeRequest) Request(reqID uint64, peer *serverPeer) error {
|
|
|
peer.Log().Debug("Requesting code data", "hash", r.Hash)
|
|
peer.Log().Debug("Requesting code data", "hash", r.Hash)
|
|
|
req := CodeReq{
|
|
req := CodeReq{
|
|
|
BHash: r.Id.BlockHash,
|
|
BHash: r.Id.BlockHash,
|
|
|
AccKey: r.Id.AccKey,
|
|
AccKey: r.Id.AccKey,
|
|
|
}
|
|
}
|
|
|
- return peer.RequestCode(reqID, r.GetCost(peer), []CodeReq{req})
|
|
|
|
|
|
|
+ return peer.requestCode(reqID, []CodeReq{req})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Valid processes an ODR request reply message from the LES network
|
|
// Valid processes an ODR request reply message from the LES network
|
|
@@ -316,12 +316,12 @@ type ChtRequest light.ChtRequest
|
|
|
|
|
|
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
|
-func (r *ChtRequest) GetCost(peer *peer) uint64 {
|
|
|
|
|
- return peer.GetRequestCost(GetHelperTrieProofsMsg, 1)
|
|
|
|
|
|
|
+func (r *ChtRequest) GetCost(peer *serverPeer) uint64 {
|
|
|
|
|
+ return peer.getRequestCost(GetHelperTrieProofsMsg, 1)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
|
-func (r *ChtRequest) CanSend(peer *peer) bool {
|
|
|
|
|
|
|
+func (r *ChtRequest) CanSend(peer *serverPeer) bool {
|
|
|
peer.lock.RLock()
|
|
peer.lock.RLock()
|
|
|
defer peer.lock.RUnlock()
|
|
defer peer.lock.RUnlock()
|
|
|
|
|
|
|
@@ -333,7 +333,7 @@ func (r *ChtRequest) CanSend(peer *peer) bool {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
|
-func (r *ChtRequest) Request(reqID uint64, peer *peer) error {
|
|
|
|
|
|
|
+func (r *ChtRequest) Request(reqID uint64, peer *serverPeer) error {
|
|
|
peer.Log().Debug("Requesting CHT", "cht", r.ChtNum, "block", r.BlockNum)
|
|
peer.Log().Debug("Requesting CHT", "cht", r.ChtNum, "block", r.BlockNum)
|
|
|
var encNum [8]byte
|
|
var encNum [8]byte
|
|
|
binary.BigEndian.PutUint64(encNum[:], r.BlockNum)
|
|
binary.BigEndian.PutUint64(encNum[:], r.BlockNum)
|
|
@@ -343,7 +343,7 @@ func (r *ChtRequest) Request(reqID uint64, peer *peer) error {
|
|
|
Key: encNum[:],
|
|
Key: encNum[:],
|
|
|
AuxReq: auxHeader,
|
|
AuxReq: auxHeader,
|
|
|
}
|
|
}
|
|
|
- return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), []HelperTrieReq{req})
|
|
|
|
|
|
|
+ return peer.requestHelperTrieProofs(reqID, []HelperTrieReq{req})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Valid processes an ODR request reply message from the LES network
|
|
// Valid processes an ODR request reply message from the LES network
|
|
@@ -413,12 +413,12 @@ type BloomRequest light.BloomRequest
|
|
|
|
|
|
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
|
-func (r *BloomRequest) GetCost(peer *peer) uint64 {
|
|
|
|
|
- return peer.GetRequestCost(GetHelperTrieProofsMsg, len(r.SectionIndexList))
|
|
|
|
|
|
|
+func (r *BloomRequest) GetCost(peer *serverPeer) uint64 {
|
|
|
|
|
+ return peer.getRequestCost(GetHelperTrieProofsMsg, len(r.SectionIndexList))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
|
-func (r *BloomRequest) CanSend(peer *peer) bool {
|
|
|
|
|
|
|
+func (r *BloomRequest) CanSend(peer *serverPeer) bool {
|
|
|
peer.lock.RLock()
|
|
peer.lock.RLock()
|
|
|
defer peer.lock.RUnlock()
|
|
defer peer.lock.RUnlock()
|
|
|
|
|
|
|
@@ -429,7 +429,7 @@ func (r *BloomRequest) CanSend(peer *peer) bool {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
|
-func (r *BloomRequest) Request(reqID uint64, peer *peer) error {
|
|
|
|
|
|
|
+func (r *BloomRequest) Request(reqID uint64, peer *serverPeer) error {
|
|
|
peer.Log().Debug("Requesting BloomBits", "bloomTrie", r.BloomTrieNum, "bitIdx", r.BitIdx, "sections", r.SectionIndexList)
|
|
peer.Log().Debug("Requesting BloomBits", "bloomTrie", r.BloomTrieNum, "bitIdx", r.BitIdx, "sections", r.SectionIndexList)
|
|
|
reqs := make([]HelperTrieReq, len(r.SectionIndexList))
|
|
reqs := make([]HelperTrieReq, len(r.SectionIndexList))
|
|
|
|
|
|
|
@@ -444,7 +444,7 @@ func (r *BloomRequest) Request(reqID uint64, peer *peer) error {
|
|
|
Key: common.CopyBytes(encNumber[:]),
|
|
Key: common.CopyBytes(encNumber[:]),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- return peer.RequestHelperTrieProofs(reqID, r.GetCost(peer), reqs)
|
|
|
|
|
|
|
+ return peer.requestHelperTrieProofs(reqID, reqs)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Valid processes an ODR request reply message from the LES network
|
|
// Valid processes an ODR request reply message from the LES network
|
|
@@ -489,19 +489,19 @@ type TxStatusRequest light.TxStatusRequest
|
|
|
|
|
|
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
// GetCost returns the cost of the given ODR request according to the serving
|
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
// peer's cost table (implementation of LesOdrRequest)
|
|
|
-func (r *TxStatusRequest) GetCost(peer *peer) uint64 {
|
|
|
|
|
- return peer.GetRequestCost(GetTxStatusMsg, len(r.Hashes))
|
|
|
|
|
|
|
+func (r *TxStatusRequest) GetCost(peer *serverPeer) uint64 {
|
|
|
|
|
+ return peer.getRequestCost(GetTxStatusMsg, len(r.Hashes))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
// CanSend tells if a certain peer is suitable for serving the given request
|
|
|
-func (r *TxStatusRequest) CanSend(peer *peer) bool {
|
|
|
|
|
|
|
+func (r *TxStatusRequest) CanSend(peer *serverPeer) bool {
|
|
|
return peer.version >= lpv2
|
|
return peer.version >= lpv2
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
// Request sends an ODR request to the LES network (implementation of LesOdrRequest)
|
|
|
-func (r *TxStatusRequest) Request(reqID uint64, peer *peer) error {
|
|
|
|
|
|
|
+func (r *TxStatusRequest) Request(reqID uint64, peer *serverPeer) error {
|
|
|
peer.Log().Debug("Requesting transaction status", "count", len(r.Hashes))
|
|
peer.Log().Debug("Requesting transaction status", "count", len(r.Hashes))
|
|
|
- return peer.RequestTxStatus(reqID, r.GetCost(peer), r.Hashes)
|
|
|
|
|
|
|
+ return peer.requestTxStatus(reqID, r.Hashes)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Valid processes an ODR request reply message from the LES network
|
|
// Valid processes an ODR request reply message from the LES network
|