Skip to content

Commit b1d9fbc

Browse files
committed
Update mining protocol
1 parent 9b87dc4 commit b1d9fbc

File tree

5 files changed

+24
-14
lines changed

5 files changed

+24
-14
lines changed

lib/blockTemplate.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var BlockTemplate = module.exports = function BlockTemplate(job, timestamp){
2424
this.targetBlob = job.targetBlob;
2525
this.target = bignum.fromBuffer(this.targetBlob);
2626
this.chainIndex = this.fromGroup * constants.GroupSize + this.toGroup;
27+
this.height = job.height
2728

2829
this.registerSubmit = function(nonce){
2930
if (submits.indexOf(nonce) === -1){
@@ -49,6 +50,7 @@ var BlockTemplate = module.exports = function BlockTemplate(job, timestamp){
4950
toGroup: this.toGroup,
5051
headerBlob: this.headerBlob.toString('hex'),
5152
txsBlob: emptyTxsBlob,
53+
height: this.height
5254
};
5355
}
5456
return this.jobParams;

lib/constants.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
module.exports = Object.freeze({
3+
MiningProtocolVersion: 0x00,
34
JobsMessageType: 0x00,
45
SubmitResultMessageType: 0x01,
56
SubmitBlockMessageType: 0x00,

lib/daemon.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,13 @@ function MinerClient(instance, logger){
4848

4949
this.submit = function(block, callback){
5050
var blockSize = block.length;
51-
var messageSize = 4 + 1 + blockSize; // encodedBlockSize(4 bytes) + messageType(1 byte)
52-
var msgHeader = Buffer.alloc(9); // encodedMessageSize(4 bytes) + encodedBlockSize(4 bytes) + messageType(1 byte)
53-
msgHeader.writeUInt32BE(messageSize);
54-
msgHeader.writeUInt8(constants.SubmitBlockMessageType, 4);
55-
msgHeader.writeUInt32BE(blockSize, 5);
51+
var msgPrefixSize = 1 + 1 + 4; // version(1 byte) + messageType(1 byte) + encodedBlockSize(4 bytes)
52+
var msgSize = msgPrefixSize + blockSize;
53+
var msgHeader = Buffer.alloc(10); // encodedMessageSize(4 bytes) + msgPrefixSize
54+
msgHeader.writeUInt32BE(msgSize);
55+
msgHeader.writeUInt8(constants.MiningProtocolVersion, 4)
56+
msgHeader.writeUInt8(constants.SubmitBlockMessageType, 5);
57+
msgHeader.writeUInt32BE(blockSize, 6);
5658
var data = Buffer.concat([msgHeader, block]);
5759
client.write(data, callback);
5860
}

lib/messages.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ var jobParser = new Parser()
1919
.buffer('targetBlob', {
2020
'length': 'targetLength'
2121
})
22+
.uint32('height')
2223
.saveOffset('dataLength');
2324

2425
exports.parseMessage = function(buffer, callback){
@@ -31,8 +32,9 @@ exports.parseMessage = function(buffer, callback){
3132
callback(null, 0);
3233
}
3334
else {
34-
var messageType = buffer.readUInt8(headerSize);
35-
var startOffset = headerSize + 1; // 1 byte message type
35+
var version = buffer.readUInt8(headerSize); // 1 byte version
36+
var messageType = buffer.readUInt8(headerSize + 1); // 1 byte message type
37+
var startOffset = headerSize + 2;
3638
var endOffset = headerSize + bodyLength;
3739
var message = buffer.slice(startOffset, endOffset);
3840
var payload = parse(messageType, message);
@@ -72,11 +74,13 @@ function parseJobs(buffer){
7274
function parseSubmitResult(buffer){
7375
var fromGroup = buffer.readUInt32BE();
7476
var toGroup = buffer.readUInt32BE(4);
75-
var result = buffer.readUInt8(8);
77+
var blockHash = buffer.slice(8, 40)
78+
var result = buffer.readUInt8(40);
7679
var succeed = result == 1;
7780
return {
7881
fromGroup: fromGroup,
7982
toGroup: toGroup,
83+
blockHash: blockHash,
8084
succeed: succeed
8185
};
8286
}

lib/pool.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,20 +162,21 @@ var pool = module.exports = function pool(config, logger){
162162
break;
163163
case constants.SubmitResultMessageType:
164164
var result = message.payload;
165-
handleSubmitResult(result.fromGroup, result.toGroup, result.succeed);
165+
handleSubmitResult(result);
166166
break;
167167
default:
168168
logger.error('Invalid message type: ' + message.type);
169169
}
170170
}
171171

172-
function handleSubmitResult(fromGroup, toGroup, succeed){
173-
var chainIndex = chainIndexStr(fromGroup, toGroup);
174-
if (succeed){
175-
logger.info('Submit block succeed for chainIndex: ' + chainIndex);
172+
function handleSubmitResult(result){
173+
var chainIndex = chainIndexStr(result.fromGroup, result.toGroup);
174+
var blockHashHex = result.blockHash.toString('hex');
175+
if (result.succeed){
176+
logger.info(`Submit block ${blockHashHex} succeed for chainIndex ${chainIndex}`);
176177
}
177178
else {
178-
logger.error('Submit block failed for chainIndex: ' + chainIndex);
179+
logger.error(`Submit block ${blockHashHex} failed for chainIndex ${chainIndex}`);
179180
}
180181
}
181182

0 commit comments

Comments
 (0)