+ bcBlock := types.MapBlock(block)
+ if err := validation.ValidateBlock(bcBlock, parent, rewards); err != nil {
+ return errors.Sub(ErrBadBlock, err)
+ }
+
+ signature, err := c.SignBlock(block)
+ if err != nil {
+ return errors.Sub(ErrBadBlock, err)
+ }
+
+ if err := c.store.SaveBlock(block, bcBlock.TransactionStatus); err != nil {
+ return err
+ }
+ c.orphanManage.Delete(&bcBlock.ID)
+
+ if len(signature) != 0 {
+ xPub := config.CommonConfig.PrivateKey().XPub()
+ if err := c.eventDispatcher.Post(event.BlockSignatureEvent{BlockHash: block.Hash(), Signature: signature, XPub: xPub[:]}); err != nil {
+ return err
+ }
+ }