return err
}
+ for _, p := range c.subProtocols {
+ if err := c.syncProtocolStatus(p); err != nil {
+ return errors.Wrap(err, p.Name(), "sync sub protocol status")
+ }
+
+ if err := p.ApplyBlock(block); err != nil {
+ return errors.Wrap(err, p.Name(), "sub protocol connect block")
+ }
+ }
+
irrBlockHeader := c.lastIrrBlockHeader
if c.isIrreversible(&block.BlockHeader) && block.Height > irrBlockHeader.Height {
irrBlockHeader = &block.BlockHeader
return err
}
+ for _, p := range c.subProtocols {
+ if err := c.syncProtocolStatus(p); err != nil {
+ return errors.Wrap(err, p.Name(), "sync sub protocol status")
+ }
+ }
+
txsToRestore := map[bc.Hash]*types.Tx{}
for _, detachBlockHeader := range detachBlockHeaders {
detachHash := detachBlockHeader.Hash()
return err
}
+ for _, p := range c.subProtocols {
+ if err := p.DetachBlock(b); err != nil {
+ return errors.Wrap(err, p.Name(), "sub protocol detach block")
+ }
+ }
+
for _, tx := range b.Transactions {
txsToRestore[tx.ID] = tx
}
return err
}
+ for _, p := range c.subProtocols {
+ if err := p.ApplyBlock(b); err != nil {
+ return errors.Wrap(err, p.Name(), "sub protocol attach block")
+ }
+ }
+
if consensusResult.IsFinalize() {
consensusResults = append(consensusResults, consensusResult.Fork())
}
return errors.Sub(ErrBadBlock, err)
}
+ for _, p := range c.subProtocols {
+ if err := p.ValidateBlock(block, bcBlock.TransactionStatus.GetVerifyStatus()); err != nil {
+ return errors.Wrap(err, "sub protocol save block")
+ }
+ }
+
signature, err := c.SignBlock(block)
if err != nil {
return errors.Sub(ErrBadBlock, err)