|
|
|
package message
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
|
)
|
|
|
|
|
|
|
|
// MakeGetBlockNumberRequest makes the GetBlockNumber Request
|
|
|
|
func MakeGetBlockNumberRequest() *Request {
|
|
|
|
return &Request{
|
|
|
|
Request: &Request_GetBlockNumberRequest{
|
|
|
|
GetBlockNumberRequest: &GetBlockNumberRequest{},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlockHashesRequest makes GetBlockHashes Request
|
|
|
|
func MakeGetBlockHashesRequest(bns []uint64) *Request {
|
|
|
|
return &Request{
|
|
|
|
Request: &Request_GetBlockHashesRequest{
|
|
|
|
GetBlockHashesRequest: &GetBlockHashesRequest{
|
|
|
|
Nums: bns,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlocksByNumRequest makes the GetBlockByNumber request
|
|
|
|
func MakeGetBlocksByNumRequest(bns []uint64) *Request {
|
|
|
|
return &Request{
|
|
|
|
Request: &Request_GetBlocksByNumRequest{
|
|
|
|
GetBlocksByNumRequest: &GetBlocksByNumRequest{
|
|
|
|
Nums: bns,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlockByHashesRequest makes the GetBlocksByHashes request
|
|
|
|
func MakeGetBlocksByHashesRequest(hashes []common.Hash) *Request {
|
|
|
|
return &Request{
|
|
|
|
Request: &Request_GetBlocksByHashesRequest{
|
|
|
|
GetBlocksByHashesRequest: &GetBlocksByHashesRequest{
|
|
|
|
BlockHashes: hashesToBytes(hashes),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetNodeDataRequest makes the GetNodeData request
|
|
|
|
func MakeGetNodeDataRequest(hashes []common.Hash) *Request {
|
|
|
|
return &Request{
|
|
|
|
Request: &Request_GetNodeDataRequest{
|
|
|
|
GetNodeDataRequest: &GetNodeDataRequest{
|
|
|
|
NodeHashes: hashesToBytes(hashes),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetReceiptsRequest makes the GetReceipts request
|
|
|
|
func MakeGetReceiptsRequest(hashes []common.Hash) *Request {
|
|
|
|
return &Request{
|
|
|
|
Request: &Request_GetReceiptsRequest{
|
|
|
|
GetReceiptsRequest: &GetReceiptsRequest{
|
|
|
|
BlockHashes: hashesToBytes(hashes),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeErrorResponse makes the error response
|
|
|
|
func MakeErrorResponseMessage(rid uint64, err error) *Message {
|
|
|
|
resp := MakeErrorResponse(rid, err)
|
|
|
|
return makeMessageFromResponse(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeErrorResponse makes the error response as a response
|
|
|
|
func MakeErrorResponse(rid uint64, err error) *Response {
|
|
|
|
return &Response{
|
|
|
|
ReqId: rid,
|
|
|
|
Response: &Response_ErrorResponse{
|
|
|
|
&ErrorResponse{
|
|
|
|
Error: err.Error(),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlockNumberResponseMessage makes the GetBlockNumber response message
|
|
|
|
func MakeGetBlockNumberResponseMessage(rid uint64, bn uint64) *Message {
|
|
|
|
resp := MakeGetBlockNumberResponse(rid, bn)
|
|
|
|
return makeMessageFromResponse(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlockNumberResponse makes the GetBlockNumber response
|
|
|
|
func MakeGetBlockNumberResponse(rid uint64, bn uint64) *Response {
|
|
|
|
return &Response{
|
|
|
|
ReqId: rid,
|
|
|
|
Response: &Response_GetBlockNumberResponse{
|
|
|
|
GetBlockNumberResponse: &GetBlockNumberResponse{
|
|
|
|
Number: bn,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlockHashesResponseMessage makes the GetBlockHashes message
|
|
|
|
func MakeGetBlockHashesResponseMessage(rid uint64, hs []common.Hash) *Message {
|
|
|
|
resp := MakeGetBlockHashesResponse(rid, hs)
|
|
|
|
return makeMessageFromResponse(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlockHashesResponse makes the GetBlockHashes response
|
|
|
|
func MakeGetBlockHashesResponse(rid uint64, hs []common.Hash) *Response {
|
|
|
|
return &Response{
|
|
|
|
ReqId: rid,
|
|
|
|
Response: &Response_GetBlockHashesResponse{
|
|
|
|
GetBlockHashesResponse: &GetBlockHashesResponse{
|
|
|
|
Hashes: hashesToBytes(hs),
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlocksByNumResponseMessage makes the GetBlocksByNumResponse of Message type
|
|
|
|
func MakeGetBlocksByNumResponseMessage(rid uint64, blocksBytes, sigs [][]byte) *Message {
|
|
|
|
resp := MakeGetBlocksByNumResponse(rid, blocksBytes, sigs)
|
|
|
|
return makeMessageFromResponse(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlocksByNumResponseMessage make the GetBlocksByNumResponse of Response type
|
|
|
|
func MakeGetBlocksByNumResponse(rid uint64, blocksBytes, sigs [][]byte) *Response {
|
|
|
|
return &Response{
|
|
|
|
ReqId: rid,
|
|
|
|
Response: &Response_GetBlocksByNumResponse{
|
|
|
|
GetBlocksByNumResponse: &GetBlocksByNumResponse{
|
|
|
|
BlocksBytes: blocksBytes,
|
|
|
|
CommitSig: sigs,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlocksByHashesResponseMessage makes the GetBlocksByHashesResponse of Message type
|
|
|
|
func MakeGetBlocksByHashesResponseMessage(rid uint64, blocksBytes, sigs [][]byte) *Message {
|
|
|
|
resp := MakeGetBlocksByHashesResponse(rid, blocksBytes, sigs)
|
|
|
|
return makeMessageFromResponse(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetBlocksByHashesResponse make the GetBlocksByHashesResponse of Response type
|
|
|
|
func MakeGetBlocksByHashesResponse(rid uint64, blocksBytes [][]byte, sigs [][]byte) *Response {
|
|
|
|
return &Response{
|
|
|
|
ReqId: rid,
|
|
|
|
Response: &Response_GetBlocksByHashesResponse{
|
|
|
|
GetBlocksByHashesResponse: &GetBlocksByHashesResponse{
|
|
|
|
BlocksBytes: blocksBytes,
|
|
|
|
CommitSig: sigs,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetNodeDataResponseMessage makes the GetNodeDataResponse of Message type
|
|
|
|
func MakeGetNodeDataResponseMessage(rid uint64, nodeData [][]byte) *Message {
|
|
|
|
resp := MakeGetNodeDataResponse(rid, nodeData)
|
|
|
|
return makeMessageFromResponse(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetNodeDataResponse make the GetNodeDataResponse of Response type
|
|
|
|
func MakeGetNodeDataResponse(rid uint64, nodeData [][]byte) *Response {
|
|
|
|
return &Response{
|
|
|
|
ReqId: rid,
|
|
|
|
Response: &Response_GetNodeDataResponse{
|
|
|
|
GetNodeDataResponse: &GetNodeDataResponse{
|
|
|
|
DataBytes: nodeData,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetReceiptsResponseMessage makes the GetReceiptsResponse of Message type
|
|
|
|
func MakeGetReceiptsResponseMessage(rid uint64, receipts map[uint64]*Receipts) *Message {
|
|
|
|
resp := MakeGetReceiptsResponse(rid, receipts)
|
|
|
|
return makeMessageFromResponse(resp)
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeGetReceiptsResponse make the GetReceiptsResponse of Response type
|
|
|
|
func MakeGetReceiptsResponse(rid uint64, receipts map[uint64]*Receipts) *Response {
|
|
|
|
return &Response{
|
|
|
|
ReqId: rid,
|
|
|
|
Response: &Response_GetReceiptsResponse{
|
|
|
|
GetReceiptsResponse: &GetReceiptsResponse{
|
|
|
|
Receipts: receipts,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// MakeMessageFromRequest makes a message from the request
|
|
|
|
func MakeMessageFromRequest(req *Request) *Message {
|
|
|
|
return &Message{
|
|
|
|
ReqOrResp: &Message_Req{
|
|
|
|
Req: req,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func makeMessageFromResponse(resp *Response) *Message {
|
|
|
|
return &Message{
|
|
|
|
ReqOrResp: &Message_Resp{
|
|
|
|
Resp: resp,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func hashesToBytes(hashes []common.Hash) [][]byte {
|
|
|
|
res := make([][]byte, 0, len(hashes))
|
|
|
|
|
|
|
|
for _, h := range hashes {
|
|
|
|
b := make([]byte, common.HashLength)
|
|
|
|
copy(b, h[:])
|
|
|
|
res = append(res, b)
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
}
|
|
|
|
|
|
|
|
func bytesToHashes(bs [][]byte) []common.Hash {
|
|
|
|
res := make([]common.Hash, len(bs))
|
|
|
|
|
|
|
|
for _, b := range bs {
|
|
|
|
var h common.Hash
|
|
|
|
copy(h[:], b)
|
|
|
|
res = append(res, h)
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
}
|