Implement a simple mechanism to stop a miner from mining while kaspad is not synced (#1284)

* Reintroduce isSynced into the GetBlockTemplate response.

* Add a warning for when kaspad is not synced.

* Rephrase a log.
This commit is contained in:
stasatdaglabs 2020-12-24 17:15:44 +02:00 committed by GitHub
parent bd97075e07
commit 9d0f513e49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 572 additions and 545 deletions

View File

@ -24,6 +24,7 @@ func NewGetBlockTemplateRequestMessage(payAddress string) *GetBlockTemplateReque
type GetBlockTemplateResponseMessage struct {
baseMessage
MsgBlock *MsgBlock
IsSynced bool
Error *RPCError
}
@ -34,6 +35,9 @@ func (msg *GetBlockTemplateResponseMessage) Command() MessageCommand {
}
// NewGetBlockTemplateResponseMessage returns a instance of the message
func NewGetBlockTemplateResponseMessage(msgBlock *MsgBlock) *GetBlockTemplateResponseMessage {
return &GetBlockTemplateResponseMessage{MsgBlock: msgBlock}
func NewGetBlockTemplateResponseMessage(msgBlock *MsgBlock, isSynced bool) *GetBlockTemplateResponseMessage {
return &GetBlockTemplateResponseMessage{
MsgBlock: msgBlock,
IsSynced: isSynced,
}
}

View File

@ -67,3 +67,8 @@ func (m *Manager) SetOnBlockAddedToDAGHandler(onBlockAddedToDAGHandler flowconte
func (m *Manager) SetOnTransactionAddedToMempoolHandler(onTransactionAddedToMempoolHandler flowcontext.OnTransactionAddedToMempoolHandler) {
m.context.SetOnTransactionAddedToMempoolHandler(onTransactionAddedToMempoolHandler)
}
// IsIBDRunning returns true if IBD is currently running
func (m *Manager) IsIBDRunning() bool {
return m.context.IsIBDRunning()
}

View File

@ -33,5 +33,7 @@ func HandleGetBlockTemplate(context *rpccontext.Context, _ *router.Router, reque
}
msgBlock := appmessage.DomainBlockToMsgBlock(templateBlock)
return appmessage.NewGetBlockTemplateResponseMessage(msgBlock), nil
isSynced := !context.ProtocolManager.IsIBDRunning()
return appmessage.NewGetBlockTemplateResponseMessage(msgBlock, isSynced), nil
}

View File

@ -158,6 +158,10 @@ func solveLoop(newTemplateChan chan *appmessage.GetBlockTemplateResponseMessage,
if stopOldTemplateSolving != nil {
close(stopOldTemplateSolving)
}
if !template.IsSynced && !mineWhenNotSynced {
log.Warnf("Kaspad is not synced. Skipping current block template")
continue
}
stopOldTemplateSolving = make(chan struct{})
block := appmessage.MsgBlockToDomainBlock(template.MsgBlock)

View File

@ -344,6 +344,7 @@ message GetBlockTemplateRequestMessage{
message GetBlockTemplateResponseMessage{
BlockMessage blockMessage = 1;
bool isSynced = 2;
RPCError error = 1000;
}

View File

@ -22,12 +22,13 @@ func (x *KaspadMessage_GetBlockTemplateResponse) toAppMessage() (appmessage.Mess
if err != nil {
return nil, err
}
return appmessage.NewGetBlockTemplateResponseMessage(msgBlock), nil
return appmessage.NewGetBlockTemplateResponseMessage(msgBlock, x.GetBlockTemplateResponse.IsSynced), nil
}
func (x *KaspadMessage_GetBlockTemplateResponse) fromAppMessage(message *appmessage.GetBlockTemplateResponseMessage) error {
x.GetBlockTemplateResponse = &GetBlockTemplateResponseMessage{
BlockMessage: &BlockMessage{},
IsSynced: message.IsSynced,
}
return x.GetBlockTemplateResponse.BlockMessage.fromAppMessage(message.MsgBlock)
}