Merge pull request #1530 from denniswon/blockheader_download_request

add block header download api to grpc
pull/1631/head
Dennis JongHyuck Won 5 years ago committed by GitHub
commit 6ece8d958c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      README.md
  2. 19
      api/service/syncing/downloader/client.go
  3. 3
      api/service/syncing/downloader/gen.sh
  4. 64
      api/service/syncing/downloader/proto/downloader.pb.go
  5. 5
      api/service/syncing/downloader/proto/downloader.proto
  6. 17
      node/node_syncing.go

@ -36,6 +36,8 @@ make
```
Note: make sure to run ``` scripts/install_build_tools.sh ```to make sure build tools are of correct versions.
## Build
If you want to bypass the Makefile:

@ -44,7 +44,7 @@ func (client *Client) Close() {
func (client *Client) GetBlockHashes(startHash []byte, size uint32, ip, port string) *pb.DownloaderResponse {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
request := &pb.DownloaderRequest{Type: pb.DownloaderRequest_HEADER, BlockHash: startHash, Size: size}
request := &pb.DownloaderRequest{Type: pb.DownloaderRequest_BLOCKHASH, BlockHash: startHash, Size: size}
request.Ip = ip
request.Port = port
response, err := client.dlClient.Query(ctx, request)
@ -54,6 +54,23 @@ func (client *Client) GetBlockHashes(startHash []byte, size uint32, ip, port str
return response
}
// GetBlockHeaders gets block headers in serialization byte array by calling a grpc request.
func (client *Client) GetBlockHeaders(hashes [][]byte) *pb.DownloaderResponse {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
request := &pb.DownloaderRequest{Type: pb.DownloaderRequest_BLOCKHEADER}
request.Hashes = make([][]byte, len(hashes))
for i := range hashes {
request.Hashes[i] = make([]byte, len(hashes[i]))
copy(request.Hashes[i], hashes[i])
}
response, err := client.dlClient.Query(ctx, request)
if err != nil {
utils.Logger().Error().Err(err).Str("target", client.conn.Target()).Msg("[SYNC] downloader/client.go:GetBlockHeaders query failed")
}
return response
}
// GetBlocks gets blocks in serialization byte array by calling a grpc request.
func (client *Client) GetBlocks(hashes [][]byte) *pb.DownloaderResponse {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)

@ -1 +1,2 @@
protoc -I proto/ proto/downloader.proto --go_out=plugins=grpc:proto
SRC_DIR=$(dirname $0)
protoc -I ${SRC_DIR}/proto/ ${SRC_DIR}/proto/downloader.proto --go_out=plugins=grpc:${SRC_DIR}/proto

@ -25,33 +25,36 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
type DownloaderRequest_RequestType int32
const (
DownloaderRequest_HEADER DownloaderRequest_RequestType = 0
DownloaderRequest_BLOCKHASH DownloaderRequest_RequestType = 0
DownloaderRequest_BLOCK DownloaderRequest_RequestType = 1
DownloaderRequest_NEWBLOCK DownloaderRequest_RequestType = 2
DownloaderRequest_BLOCKHEIGHT DownloaderRequest_RequestType = 3
DownloaderRequest_REGISTER DownloaderRequest_RequestType = 4
DownloaderRequest_REGISTERTIMEOUT DownloaderRequest_RequestType = 5
DownloaderRequest_UNKNOWN DownloaderRequest_RequestType = 6
DownloaderRequest_BLOCKHEADER DownloaderRequest_RequestType = 7
)
var DownloaderRequest_RequestType_name = map[int32]string{
0: "HEADER",
0: "BLOCKHASH",
1: "BLOCK",
2: "NEWBLOCK",
3: "BLOCKHEIGHT",
4: "REGISTER",
5: "REGISTERTIMEOUT",
6: "UNKNOWN",
7: "BLOCKHEADER",
}
var DownloaderRequest_RequestType_value = map[string]int32{
"HEADER": 0,
"BLOCKHASH": 0,
"BLOCK": 1,
"NEWBLOCK": 2,
"BLOCKHEIGHT": 3,
"REGISTER": 4,
"REGISTERTIMEOUT": 5,
"UNKNOWN": 6,
"BLOCKHEADER": 7,
}
func (x DownloaderRequest_RequestType) String() string {
@ -135,7 +138,7 @@ func (m *DownloaderRequest) GetType() DownloaderRequest_RequestType {
if m != nil {
return m.Type
}
return DownloaderRequest_HEADER
return DownloaderRequest_BLOCKHASH
}
func (m *DownloaderRequest) GetHashes() [][]byte {
@ -248,32 +251,33 @@ func init() {
func init() { proto.RegisterFile("downloader.proto", fileDescriptor_6a99ec95c7ab1ff1) }
var fileDescriptor_6a99ec95c7ab1ff1 = []byte{
// 399 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0xc1, 0x6e, 0xd3, 0x40,
0x10, 0x86, 0xb3, 0x8e, 0xe3, 0x24, 0x93, 0xd0, 0x2e, 0x03, 0x42, 0xab, 0x0a, 0x90, 0xe5, 0x93,
0xb9, 0xf8, 0xd0, 0x9e, 0x38, 0x70, 0x28, 0xee, 0x12, 0x5b, 0x2d, 0x8e, 0x58, 0x3b, 0x54, 0x1c,
0x5d, 0xba, 0xaa, 0x2d, 0xaa, 0x7a, 0xf1, 0xba, 0x42, 0xe6, 0x2d, 0x91, 0x78, 0x20, 0xe4, 0x4d,
0x5a, 0x5b, 0x02, 0x72, 0xda, 0xf9, 0xff, 0xd9, 0x19, 0xcd, 0x7c, 0x1a, 0xa0, 0xd7, 0xd5, 0x8f,
0xbb, 0xdb, 0x2a, 0xbf, 0x96, 0x75, 0xa0, 0xea, 0xaa, 0xa9, 0x10, 0x7a, 0xc7, 0xfb, 0x65, 0xc1,
0xd3, 0xb3, 0x47, 0x29, 0xe4, 0xf7, 0x7b, 0xa9, 0x1b, 0x7c, 0x07, 0x76, 0xd3, 0x2a, 0xc9, 0x88,
0x4b, 0xfc, 0x83, 0xe3, 0x37, 0xc1, 0xa0, 0xc5, 0x5f, 0x9f, 0x83, 0xdd, 0x9b, 0xb5, 0x4a, 0x0a,
0x53, 0x86, 0x2f, 0xc0, 0x29, 0x72, 0x5d, 0x48, 0xcd, 0x2c, 0x77, 0xec, 0x2f, 0xc5, 0x4e, 0xe1,
0x11, 0xcc, 0x94, 0x94, 0x75, 0x94, 0xeb, 0x82, 0x8d, 0x5d, 0xe2, 0x2f, 0xc5, 0xa3, 0xc6, 0x97,
0x30, 0xbf, 0xba, 0xad, 0xbe, 0x7e, 0x33, 0x49, 0xdb, 0x24, 0x7b, 0x03, 0x0f, 0xc0, 0x2a, 0x15,
0x9b, 0xb8, 0xc4, 0x9f, 0x0b, 0xab, 0x54, 0x88, 0x60, 0xab, 0xaa, 0x6e, 0x98, 0x63, 0x1c, 0x13,
0x77, 0x9e, 0x2e, 0x7f, 0x4a, 0x36, 0x75, 0x89, 0xff, 0x44, 0x98, 0xd8, 0xd3, 0xb0, 0x18, 0x8c,
0x87, 0x00, 0x4e, 0xc4, 0x4f, 0xcf, 0xb8, 0xa0, 0x23, 0x9c, 0xc3, 0xe4, 0xfd, 0xc5, 0x3a, 0x3c,
0xa7, 0x04, 0x97, 0x30, 0x4b, 0xf8, 0xe5, 0x56, 0x59, 0x78, 0x08, 0x0b, 0x13, 0x46, 0x3c, 0x5e,
0x45, 0x19, 0x1d, 0x77, 0x69, 0xc1, 0x57, 0x71, 0x9a, 0x71, 0x41, 0x6d, 0x7c, 0x06, 0x87, 0x0f,
0x2a, 0x8b, 0x3f, 0xf2, 0xf5, 0x26, 0xa3, 0x13, 0x5c, 0xc0, 0x74, 0x93, 0x9c, 0x27, 0xeb, 0xcb,
0x84, 0x3a, 0xde, 0x6f, 0x02, 0x38, 0xc4, 0xa4, 0x55, 0x75, 0xa7, 0x25, 0x32, 0x98, 0xaa, 0xbc,
0xed, 0x4c, 0x46, 0x0c, 0x96, 0x07, 0x89, 0xab, 0x1d, 0x6e, 0xcb, 0xe0, 0x3e, 0xf9, 0x1f, 0xee,
0x6d, 0x9f, 0x40, 0xc8, 0x9b, 0x52, 0x37, 0xbd, 0x31, 0x00, 0xef, 0xc2, 0x62, 0xcb, 0x4c, 0x96,
0x37, 0x45, 0x63, 0x18, 0xdb, 0x62, 0x68, 0x79, 0x6f, 0xe1, 0xf9, 0xbf, 0xea, 0xbb, 0x05, 0xd2,
0x4d, 0x18, 0xf2, 0x34, 0xa5, 0x23, 0x9c, 0x81, 0xfd, 0xe1, 0x34, 0xbe, 0xa0, 0xa4, 0x03, 0x16,
0x27, 0xe9, 0x97, 0x24, 0xa4, 0xd6, 0xf1, 0x67, 0x80, 0x7e, 0x1a, 0x8c, 0x60, 0xf2, 0xe9, 0x5e,
0xd6, 0x2d, 0xbe, 0xda, 0x7b, 0x1d, 0x47, 0xaf, 0xf7, 0x6f, 0xe3, 0x8d, 0xae, 0x1c, 0x73, 0x95,
0x27, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x68, 0xc1, 0xb5, 0x25, 0xa9, 0x02, 0x00, 0x00,
// 410 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xcd, 0x6e, 0xd3, 0x40,
0x10, 0xce, 0x3a, 0x8e, 0x93, 0x4c, 0xd2, 0x76, 0x19, 0x10, 0x5a, 0x55, 0x80, 0x2c, 0x9f, 0xcc,
0xc5, 0x87, 0xf6, 0xc4, 0x81, 0x43, 0x70, 0x4d, 0x6c, 0xb5, 0x38, 0x62, 0xed, 0x50, 0x71, 0x74,
0xe9, 0xaa, 0xb6, 0xa8, 0xea, 0xc5, 0xeb, 0x0a, 0x99, 0x17, 0xe0, 0x05, 0x79, 0x06, 0x9e, 0x03,
0x79, 0x9d, 0xd6, 0x96, 0x80, 0x9c, 0x76, 0xbf, 0x6f, 0x7e, 0x34, 0xf3, 0x7d, 0x03, 0xf4, 0xba,
0xfc, 0x7e, 0x77, 0x5b, 0x66, 0xd7, 0xa2, 0xf2, 0x64, 0x55, 0xd6, 0x25, 0x42, 0xcf, 0x38, 0xbf,
0x0d, 0x78, 0x72, 0xf6, 0x08, 0xb9, 0xf8, 0x76, 0x2f, 0x54, 0x8d, 0x6f, 0xc1, 0xac, 0x1b, 0x29,
0x18, 0xb1, 0x89, 0x7b, 0x78, 0xf2, 0xda, 0x1b, 0xb4, 0xf8, 0x2b, 0xd9, 0xdb, 0xbd, 0x69, 0x23,
0x05, 0xd7, 0x65, 0xf8, 0x1c, 0xac, 0x3c, 0x53, 0xb9, 0x50, 0xcc, 0xb0, 0xc7, 0xee, 0x92, 0xef,
0x10, 0x1e, 0xc3, 0x4c, 0x0a, 0x51, 0x85, 0x99, 0xca, 0xd9, 0xd8, 0x26, 0xee, 0x92, 0x3f, 0x62,
0x7c, 0x01, 0xf3, 0xab, 0xdb, 0xf2, 0xcb, 0x57, 0x1d, 0x34, 0x75, 0xb0, 0x27, 0xf0, 0x10, 0x8c,
0x42, 0xb2, 0x89, 0x4d, 0xdc, 0x39, 0x37, 0x0a, 0x89, 0x08, 0xa6, 0x2c, 0xab, 0x9a, 0x59, 0x9a,
0xd1, 0xff, 0x96, 0x53, 0xc5, 0x0f, 0xc1, 0xa6, 0x36, 0x71, 0x0f, 0xb8, 0xfe, 0x3b, 0x3f, 0x09,
0x2c, 0x06, 0xf3, 0xe1, 0x01, 0xcc, 0xdf, 0x5d, 0x6c, 0xfc, 0xf3, 0x70, 0x95, 0x84, 0x74, 0x84,
0x73, 0x98, 0x68, 0x48, 0x09, 0x2e, 0x61, 0x16, 0x07, 0x97, 0x1d, 0x32, 0xf0, 0x08, 0x16, 0x5d,
0x5e, 0x10, 0xad, 0xc3, 0x94, 0x8e, 0xdb, 0x30, 0x0f, 0xd6, 0x51, 0x92, 0x06, 0x9c, 0x9a, 0xf8,
0x14, 0x8e, 0x1e, 0x50, 0x1a, 0x7d, 0x08, 0x36, 0xdb, 0x94, 0x4e, 0x70, 0x01, 0xd3, 0x6d, 0x7c,
0x1e, 0x6f, 0x2e, 0x63, 0x6a, 0x0d, 0x1a, 0xac, 0xce, 0x02, 0x4e, 0xa7, 0xce, 0x2f, 0x02, 0x38,
0xd4, 0x4e, 0xc9, 0xf2, 0x4e, 0x09, 0x64, 0x30, 0x95, 0x59, 0xd3, 0x92, 0x8c, 0x68, 0xad, 0x1e,
0x20, 0xae, 0x77, 0x1e, 0x18, 0xda, 0x83, 0xd3, 0xff, 0x79, 0xd0, 0xf5, 0xf1, 0xb8, 0xb8, 0x29,
0x54, 0xdd, 0x13, 0x03, 0x37, 0x6c, 0x58, 0x74, 0x42, 0x8a, 0xe2, 0x26, 0xaf, 0xb5, 0xf0, 0x26,
0x1f, 0x52, 0xce, 0x1b, 0x78, 0xf6, 0xaf, 0xfa, 0x76, 0xa3, 0x64, 0xeb, 0xfb, 0x41, 0x92, 0xd0,
0x11, 0xce, 0xc0, 0x7c, 0xbf, 0x8a, 0x2e, 0x28, 0x41, 0x00, 0x2b, 0x8a, 0x93, 0xcf, 0xb1, 0x4f,
0x8d, 0x93, 0x4f, 0x00, 0xfd, 0x34, 0x18, 0xc2, 0xe4, 0xe3, 0xbd, 0xa8, 0x1a, 0x7c, 0xb9, 0xf7,
0x64, 0x8e, 0x5f, 0xed, 0xdf, 0xc6, 0x19, 0x5d, 0x59, 0xfa, 0x54, 0x4f, 0xff, 0x04, 0x00, 0x00,
0xff, 0xff, 0x00, 0xaf, 0x33, 0x33, 0xbe, 0x02, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

@ -10,15 +10,16 @@ service Downloader {
// DownloaderRequest is the generic download request.
message DownloaderRequest {
enum RequestType {
HEADER = 0;
BLOCKHASH = 0;
BLOCK = 1;
NEWBLOCK = 2;
BLOCKHEIGHT = 3;
REGISTER = 4;
REGISTERTIMEOUT = 5;
UNKNOWN = 6;
BLOCKHEADER = 7;
}
// Request type.
RequestType type = 1;

@ -327,7 +327,7 @@ func (node *Node) SendNewBlockToUnsync() {
func (node *Node) CalculateResponse(request *downloader_pb.DownloaderRequest, incomingPeer string) (*downloader_pb.DownloaderResponse, error) {
response := &downloader_pb.DownloaderResponse{}
switch request.Type {
case downloader_pb.DownloaderRequest_HEADER:
case downloader_pb.DownloaderRequest_BLOCKHASH:
if request.BlockHash == nil {
return response, fmt.Errorf("[SYNC] GetBlockHashes Request BlockHash is NIL")
}
@ -364,6 +364,21 @@ func (node *Node) CalculateResponse(request *downloader_pb.DownloaderRequest, in
response.Payload = append(response.Payload, blockHash[:])
}
case downloader_pb.DownloaderRequest_BLOCKHEADER:
for _, bytes := range request.Hashes {
var hash common.Hash
hash.SetBytes(bytes)
blockHeader := node.Blockchain().GetHeaderByHash(hash)
if blockHeader == nil {
continue
}
encodedBlockHeader, err := rlp.EncodeToBytes(blockHeader)
if err == nil {
response.Payload = append(response.Payload, encodedBlockHeader)
}
}
case downloader_pb.DownloaderRequest_BLOCK:
for _, bytes := range request.Hashes {
var hash common.Hash

Loading…
Cancel
Save