rpc: getwork - verify header before mutating current block.
This commit is contained in:
parent
5dadb224ca
commit
a508d5a51d
@ -1422,7 +1422,7 @@ RPC.prototype.verifychain = function verifychain(args, callback) {
|
||||
|
||||
RPC.prototype._submitwork = function getwork(data, callback) {
|
||||
var attempt = this.attempt;
|
||||
var block, header, cb;
|
||||
var block, header, cb, cur;
|
||||
|
||||
if (data.length !== 128)
|
||||
return callback(new RPCError('Invalid parameter.'));
|
||||
@ -1435,18 +1435,29 @@ RPC.prototype._submitwork = function getwork(data, callback) {
|
||||
reverseEndian(data);
|
||||
|
||||
header = bcoin.headers.fromAbbr(data);
|
||||
block = attempt.block;
|
||||
|
||||
if (header.prevBlock !== block.prevBlock
|
||||
|| header.bits !== block.bits) {
|
||||
return callback(null, false);
|
||||
}
|
||||
|
||||
if (!header.verify())
|
||||
return callback(null, false);
|
||||
|
||||
cb = this.coinbase[header.merkleRoot];
|
||||
|
||||
if (!cb)
|
||||
return callback(null, false);
|
||||
|
||||
block = attempt.block;
|
||||
cur = block.txs[0];
|
||||
block.txs[0] = cb;
|
||||
attempt.updateMerkle();
|
||||
|
||||
if (header.prevBlock !== block.prevBlock
|
||||
|| header.merkleRoot !== block.merkleRoot
|
||||
|| header.bits !== block.bits) {
|
||||
if (header.merkleRoot !== block.merkleRoot) {
|
||||
block.txs[0] = cur;
|
||||
attempt.updateMerkle();
|
||||
this.logger.warning('Bad calculated merkle root for submitted work.');
|
||||
return callback(null, false);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user