change GetChainMessages api to include tipsets for validation

This commit is contained in:
vyzo 2020-09-21 18:58:52 +03:00
parent 44b52941f7
commit 5663b2d697
3 changed files with 12 additions and 8 deletions

View File

@ -217,6 +217,7 @@ func (c *client) processResponse(req *Request, res *Response) (*validatedRespons
} }
if options.ValidateMessages { if options.ValidateMessages {
// if the request includes target tipsets, validate against them
chain := make([]*BSTipSet, 0, resLength) chain := make([]*BSTipSet, 0, resLength)
for i, resChain := range res.Chain { for i, resChain := range res.Chain {
next := &BSTipSet{ next := &BSTipSet{
@ -318,7 +319,10 @@ func (c *client) GetFullTipSet(ctx context.Context, peer peer.ID, tsk types.TipS
} }
// GetChainMessages implements Client.GetChainMessages(). Refer to the godocs there. // GetChainMessages implements Client.GetChainMessages(). Refer to the godocs there.
func (c *client) GetChainMessages(ctx context.Context, head *types.TipSet, length uint64) ([]*CompactedMessages, error) { func (c *client) GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*CompactedMessages, error) {
head := tipsets[0]
length := uint64(len(tipsets))
ctx, span := trace.StartSpan(ctx, "GetChainMessages") ctx, span := trace.StartSpan(ctx, "GetChainMessages")
if span.IsRecordingEvents() { if span.IsRecordingEvents() {
span.AddAttributes( span.AddAttributes(
@ -331,7 +335,8 @@ func (c *client) GetChainMessages(ctx context.Context, head *types.TipSet, lengt
req := &Request{ req := &Request{
Head: head.Cids(), Head: head.Cids(),
Length: length, Length: length,
Options: Messages, Options: Messages | Validate,
TipSets: tipsets,
} }
validRes, err := c.doRequest(ctx, req, nil) validRes, err := c.doRequest(ctx, req, nil)

View File

@ -32,10 +32,9 @@ type Client interface {
// or less. // or less.
GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error) GetBlocks(ctx context.Context, tsk types.TipSetKey, count int) ([]*types.TipSet, error)
// GetChainMessages fetches messages from the network, from the provided // GetChainMessages fetches messages from the network, starting from the first provided tipset
// tipset *backwards*, returning the messages from as many tipsets as the // and returning messages from as many tipsets as requested or less.
// count parameter, or less. GetChainMessages(ctx context.Context, tipsets []*types.TipSet) ([]*CompactedMessages, error)
GetChainMessages(ctx context.Context, head *types.TipSet, length uint64) ([]*CompactedMessages, error)
// GetFullTipSet fetches a full tipset from a given peer. If successful, // GetFullTipSet fetches a full tipset from a given peer. If successful,
// the fetched object contains block headers and all messages in full form. // the fetched object contains block headers and all messages in full form.

View File

@ -1555,7 +1555,7 @@ func (syncer *Syncer) fetchMessages(ctx context.Context, headers []*types.TipSet
failed := false failed := false
for offset := 0; !failed && offset < nreq; { for offset := 0; !failed && offset < nreq; {
nextI := j + offset nextI := j + offset
nextHeader := headers[nextI] lastI := j + nreq
var requestErr error var requestErr error
var requestResult []*exchange.CompactedMessages var requestResult []*exchange.CompactedMessages
@ -1566,7 +1566,7 @@ func (syncer *Syncer) fetchMessages(ctx context.Context, headers []*types.TipSet
log.Infof("fetching messages at %d", startOffset+nextI) log.Infof("fetching messages at %d", startOffset+nextI)
} }
result, err := syncer.Exchange.GetChainMessages(ctx, nextHeader, uint64(nreq-offset)) result, err := syncer.Exchange.GetChainMessages(ctx, headers[nextI:lastI])
if err != nil { if err != nil {
requestErr = multierror.Append(requestErr, err) requestErr = multierror.Append(requestErr, err)
} else { } else {