Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
3c2a92f
fix: gossip block announce only after block sucessfully imported
EclesioMeloJunior Oct 10, 2022
069109b
chore: imported block could be a best block
EclesioMeloJunior Oct 10, 2022
b3c1cea
chore: fix lint warns
EclesioMeloJunior Oct 11, 2022
f9c0d52
chore: simplify bool var, remove unneeded comment
EclesioMeloJunior Oct 11, 2022
abf6330
Merge branch 'development' into eclesio/fix/import-block-announce
EclesioMeloJunior Oct 11, 2022
67b3710
Merge branch 'eclesio/fix/import-block-announce' of github.com:ChainS…
EclesioMeloJunior Oct 11, 2022
35b18ff
wip: maybe propagate message when we have the block
EclesioMeloJunior Oct 11, 2022
efbf67f
Merge branch 'development' into eclesio/fix/import-block-announce
EclesioMeloJunior Oct 12, 2022
48fcdf6
chore: change test to check `propagate` var is `false`
EclesioMeloJunior Oct 13, 2022
80c8616
chore: increase code coverage + fix tests
EclesioMeloJunior Oct 13, 2022
642b847
chore: fix lint warns
EclesioMeloJunior Oct 13, 2022
a539478
chore: solving error wrapping
EclesioMeloJunior Oct 13, 2022
6eea08b
chore: remove useless comment
EclesioMeloJunior Oct 14, 2022
7cccaf9
chore: address comment
EclesioMeloJunior Oct 18, 2022
2615216
Merge branch 'development' into eclesio/fix/import-block-announce
EclesioMeloJunior Oct 20, 2022
1cde08c
chore: fix inverted `errors.Is` check
EclesioMeloJunior Oct 20, 2022
5b004be
chore
EclesioMeloJunior Oct 21, 2022
b04ed3b
Merge branch 'development' into eclesio/fix/import-block-announce
EclesioMeloJunior Oct 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 39 additions & 11 deletions dot/core/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,40 +127,68 @@ func (s *Service) StorageRoot() (common.Hash, error) {

// HandleBlockImport handles a block that was imported via the network
func (s *Service) HandleBlockImport(block *types.Block, state *rtstorage.TrieState) error {
return s.handleBlock(block, state)
err := s.handleBlock(block, state)
if err != nil {
return fmt.Errorf("handling block: %s", err)
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
}

isBestBlock := false
bestBlockHash := s.blockState.BestBlockHash()

if bestBlockHash.Equal(block.Header.Hash()) {
isBestBlock = true
}
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated

blockAnnounce, err := createBlockAnnounce(block, isBestBlock)
if err != nil {
logger.Errorf("creating block announce: %s", err)
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
}

s.net.GossipMessage(blockAnnounce)
Comment thread
EclesioMeloJunior marked this conversation as resolved.
return nil
}

// HandleBlockProduced handles a block that was produced by us
// It is handled the same as an imported block in terms of state updates; the only difference
// is we send a BlockAnnounceMessage to our peers.
func (s *Service) HandleBlockProduced(block *types.Block, state *rtstorage.TrieState) error {
if err := s.handleBlock(block, state); err != nil {
return err
err := s.handleBlock(block, state)
if err != nil {
return fmt.Errorf("handling block: %s", err)
}

const isBestBlock = true
blockAnnounce, err := createBlockAnnounce(block, isBestBlock)
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
if err != nil {
logger.Errorf("creating block announce: %s", err)
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
}

s.net.GossipMessage(blockAnnounce)
Comment thread
EclesioMeloJunior marked this conversation as resolved.
return nil
}

func createBlockAnnounce(block *types.Block, isBestBlock bool) (
blockAnnounce *network.BlockAnnounceMessage, err error) {
digest := types.NewDigest()
for i := range block.Header.Digest.Types {
digestValue, err := block.Header.Digest.Types[i].Value()
if err != nil {
return fmt.Errorf("getting value of digest type at index %d: %w", i, err)
return nil, fmt.Errorf("getting value of digest type at index %d: %w", i, err)
}
err = digest.Add(digestValue)
if err != nil {
return err
return nil, err
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
}
}

msg := &network.BlockAnnounceMessage{
return &network.BlockAnnounceMessage{
ParentHash: block.Header.ParentHash,
Number: block.Header.Number,
StateRoot: block.Header.StateRoot,
ExtrinsicsRoot: block.Header.ExtrinsicsRoot,
Digest: digest,
BestBlock: true,
}

s.net.GossipMessage(msg)
return nil
BestBlock: isBestBlock,
}, nil
}

func (s *Service) handleBlock(block *types.Block, state *rtstorage.TrieState) error {
Expand Down
11 changes: 5 additions & 6 deletions dot/network/block_announce.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,14 +203,13 @@ func (s *Service) validateBlockAnnounceHandshake(from peer.ID, hs Handshake) err
// if some more blocks are required to sync the announced block, the node will open a sync stream
// with its peer and send a BlockRequest message
func (s *Service) handleBlockAnnounceMessage(from peer.ID, msg NotificationsMessage) (propagate bool, err error) {
propagate = false

Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
bam, ok := msg.(*BlockAnnounceMessage)
if !ok {
return false, errors.New("invalid message")
}

if err = s.syncer.HandleBlockAnnounce(from, bam); err != nil {
return false, err
return propagate, errors.New("invalid message")
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
}

return true, nil
err = s.syncer.HandleBlockAnnounce(from, bam)
return propagate, err
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated
}
1 change: 1 addition & 0 deletions dot/sync/chain_processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ func (s *chainProcessor) handleBlock(block *types.Block) error {
}

logger.Debugf("🔗 imported block number %d with hash %s", block.Header.Number, block.Header.Hash())
// should we announce the block here?
Comment thread
EclesioMeloJunior marked this conversation as resolved.
Outdated

blockHash := block.Header.Hash()
s.telemetry.SendMessage(telemetry.NewBlockImport(
Expand Down
2 changes: 1 addition & 1 deletion dot/sync/chain_sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,7 @@ func (cs *chainSync) dispatchWorker(w *worker) {
"start hash %s, target hash %s, "+
"request data %d, direction %s",
w.id,
w.startNumber, w.targetNumber,
*w.startNumber, *w.targetNumber,
Comment thread
EclesioMeloJunior marked this conversation as resolved.
w.startHash, w.targetHash,
w.requestData, w.direction)

Expand Down