[NOD-182] Added AcceptedIDMerkleRoot to GetBlockTemplateResult (#301)

This commit is contained in:
Svarog 2019-05-16 12:44:25 +03:00 committed by Ori Newman
parent b1d3ca0206
commit ac1fd11a42
4 changed files with 65 additions and 57 deletions

View File

@ -142,6 +142,7 @@ type GetBlockTemplateResult struct {
SigOpLimit int64 `json:"sigOpLimit,omitempty"`
SizeLimit int64 `json:"sizeLimit,omitempty"`
Transactions []GetBlockTemplateResultTx `json:"transactions"`
AcceptedIDMerkleRoot string `json:"acceptedIdMerkleRoot"`
Version int32 `json:"version"`
CoinbaseAux *GetBlockTemplateResultAux `json:"coinbaseAux,omitempty"`
CoinbaseTxn *GetBlockTemplateResultTx `json:"coinbaseTxn,omitempty"`

View File

@ -36,8 +36,15 @@ func parseBlock(template *btcjson.GetBlockTemplateResult) (*util.Block, error) {
}
bits := uint32(bitsInt64)
// parseAcceptedIDMerkleRoot
acceptedIDMerkleRoot, err := daghash.NewHashFromStr(template.AcceptedIDMerkleRoot)
if err != nil {
return nil, fmt.Errorf("Error parsing acceptedIDMerkleRoot: %s", err)
}
// parse rest of block
msgBlock := wire.NewMsgBlock(wire.NewBlockHeader(template.Version, parentHashes, &daghash.Hash{}, &daghash.Hash{}, &daghash.Hash{}, uint32(bits), 0))
msgBlock := wire.NewMsgBlock(
wire.NewBlockHeader(template.Version, parentHashes, &daghash.Hash{},
acceptedIDMerkleRoot, &daghash.Hash{}, uint32(bits), 0))
for i, txResult := range append([]btcjson.GetBlockTemplateResultTx{*template.CoinbaseTxn}, template.Transactions...) {
reader := hex.NewDecoder(strings.NewReader(txResult.Data))
@ -48,7 +55,9 @@ func parseBlock(template *btcjson.GetBlockTemplateResult) (*util.Block, error) {
msgBlock.AddTransaction(tx)
}
return util.NewBlock(msgBlock), nil
block := util.NewBlock(msgBlock)
msgBlock.Header.HashMerkleRoot = blockdag.BuildHashMerkleTreeStore(block.Transactions()).Root()
return block, nil
}
func solveBlock(block *util.Block, stopChan chan struct{}, foundBlock chan *util.Block) {
@ -124,10 +133,6 @@ func solveLoop(newTemplateChan chan *btcjson.GetBlockTemplateResult, foundBlock
return
}
msgBlock := block.MsgBlock()
msgBlock.Header.HashMerkleRoot = blockdag.BuildHashMerkleTreeStore(block.Transactions()).Root()
go solveBlock(block, stopOldTemplateSolving, foundBlock)
}
}

View File

@ -1787,6 +1787,7 @@ func (state *gbtWorkState) blockTemplateResult(useCoinbaseValue bool, submitOld
SigOpLimit: blockdag.MaxSigOpsPerBlock,
SizeLimit: wire.MaxBlockPayload,
Transactions: transactions,
AcceptedIDMerkleRoot: header.AcceptedIDMerkleRoot.String(),
Version: header.Version,
LongPollID: longPollID,
SubmitOld: submitOld,

View File

@ -314,6 +314,7 @@ var helpDescsEnUS = map[string]string{
"getBlockTemplateResult-sigOpLimit": "Number of sigops allowed in blocks ",
"getBlockTemplateResult-sizeLimit": "Number of bytes allowed in blocks",
"getBlockTemplateResult-transactions": "Array of transactions as JSON objects",
"getBlockTemplateResult-acceptedIdMerkleRoot": "The root of the merkle tree of transaction IDs accepted by this block",
"getBlockTemplateResult-version": "The block version",
"getBlockTemplateResult-coinbaseAux": "Data that should be included in the coinbase signature script",
"getBlockTemplateResult-coinbaseTxn": "Information about the coinbase transaction",