MCPcopy Create free account
hub / github.com/DNAProject/DNA / addSignaturesToBlockLocked

Method addSignaturesToBlockLocked

consensus/vbft/block_pool.go:585–632  ·  view source on GitHub ↗
(block *Block, forEmpty bool)

Source from the content-addressed store, hash-verified

583}
584
585func (pool *BlockPool) addSignaturesToBlockLocked(block *Block, forEmpty bool) error {
586
587 blkNum := block.getBlockNum()
588 c := pool.getCandidateInfoLocked(blkNum)
589 if c == nil {
590 panic(fmt.Errorf("non-candidates for block %d yet when seal block", blkNum))
591 }
592
593 bookkeepers := make([]keypair.PublicKey, 0)
594 sigData := make([][]byte, 0)
595
596 // add proposer sig
597 proposer := block.getProposer()
598 proposerPk := pool.server.peerPool.GetPeerPubKey(proposer)
599 if !forEmpty {
600 bookkeepers = append(bookkeepers, proposerPk)
601 sigData = append(sigData, block.Block.Header.SigData[0])
602 } else {
603 if block.EmptyBlock == nil {
604 return fmt.Errorf("block has no empty candidate")
605 }
606 bookkeepers = append(bookkeepers, proposerPk)
607 sigData = append(sigData, block.EmptyBlock.Header.SigData[0])
608 }
609
610 // add endorsers' sig
611 for endorser, eSigs := range c.EndorseSigs {
612 for _, sig := range eSigs {
613 if sig.EndorsedProposer == proposer && sig.ForEmpty == forEmpty && endorser != proposer {
614 endoresrPk := pool.server.peerPool.GetPeerPubKey(endorser)
615 if endoresrPk != nil {
616 bookkeepers = append(bookkeepers, endoresrPk)
617 sigData = append(sigData, sig.Signature)
618 }
619 break
620 }
621 }
622 }
623 if !forEmpty {
624 block.Block.Header.Bookkeepers = bookkeepers
625 block.Block.Header.SigData = sigData
626 } else {
627 block.EmptyBlock.Header.Bookkeepers = bookkeepers
628 block.EmptyBlock.Header.SigData = sigData
629 }
630
631 return nil
632}
633
634func (pool *BlockPool) setBlockSealed(block *Block, forEmpty bool, sigdata bool) error {
635 pool.lock.Lock()

Callers 1

setBlockSealedMethod · 0.95

Calls 5

getBlockNumMethod · 0.80
ErrorfMethod · 0.80
getProposerMethod · 0.80
GetPeerPubKeyMethod · 0.80

Tested by

no test coverage detected