89 lines
2.8 KiB
JavaScript
89 lines
2.8 KiB
JavaScript
'use strict';
|
|
|
|
var should = require('chai').should();
|
|
|
|
var Encoding = require('../../../lib/services/header/encoding');
|
|
|
|
describe('Header service encoding', function() {
|
|
|
|
var servicePrefix = new Buffer('0000', 'hex');
|
|
|
|
var hashPrefix = new Buffer('00', 'hex');
|
|
var heightPrefix = new Buffer('01', 'hex');
|
|
var encoding = new Encoding(servicePrefix);
|
|
var hash = '91b58f19b6eecba94ed0f6e463e8e334ec0bcda7880e2985c82a8f32e4d03add';
|
|
var hashBuf = new Buffer(hash, 'hex');
|
|
var header = {
|
|
hash: hash,
|
|
prevHash: '91b58f19b6eecba94ed0f6e463e8e334ec0bcda7880e2985c82a8f32e4d03ade',
|
|
version: 0x2000012,
|
|
merkleRoot: '91b58f19b6eecba94ed0f6e463e8e334ec0bcda7880e2985c82a8f32e4d03adf',
|
|
timestamp: 1E9,
|
|
bits: 400000,
|
|
nonce: 123456,
|
|
height: 123,
|
|
chainwork: '0000000000000000000000000000000000000000000000000000000200020002'
|
|
};
|
|
var versionBuf = new Buffer(4);
|
|
var prevHashBuf = new Buffer(header.prevHash, 'hex');
|
|
var merkleRootBuf = new Buffer(header.merkleRoot, 'hex');
|
|
var tsBuf = new Buffer(4);
|
|
var bitsBuf = new Buffer(4);
|
|
var nonceBuf = new Buffer(4);
|
|
var heightBuf = new Buffer(4);
|
|
var chainBuf = new Buffer('0000000000000000000000000000000000000000000000000000000200020002', 'hex');
|
|
heightBuf.writeUInt32BE(header.height);
|
|
|
|
it('should encode header hash key' , function() {
|
|
encoding.encodeHeaderHashKey(hash).should.deep.equal(Buffer.concat([servicePrefix, hashPrefix, hashBuf]));
|
|
});
|
|
|
|
it('should decode header hash key', function() {
|
|
encoding.decodeHeaderHashKey(Buffer.concat([servicePrefix, hashPrefix, hashBuf]))
|
|
.should.deep.equal(hash);
|
|
});
|
|
|
|
it('should encode header height key' , function() {
|
|
encoding.encodeHeaderHeightKey(header.height).should.deep.equal(Buffer.concat([servicePrefix, heightPrefix, heightBuf]));
|
|
});
|
|
|
|
it('should decode header height key', function() {
|
|
encoding.decodeHeaderHeightKey(Buffer.concat([servicePrefix, heightPrefix, heightBuf]))
|
|
.should.deep.equal(header.height);
|
|
});
|
|
it('should encode header value', function() {
|
|
var prevHashBuf = new Buffer(header.prevHash, 'hex');
|
|
versionBuf.writeInt32BE(header.version); // signed
|
|
tsBuf.writeUInt32BE(header.timestamp);
|
|
bitsBuf.writeUInt32BE(header.bits);
|
|
nonceBuf.writeUInt32BE(header.nonce);
|
|
heightBuf.writeUInt32BE(header.height);
|
|
encoding.encodeHeaderValue(header).should.deep.equal(Buffer.concat([
|
|
hashBuf,
|
|
versionBuf,
|
|
prevHashBuf,
|
|
merkleRootBuf,
|
|
tsBuf,
|
|
bitsBuf,
|
|
nonceBuf,
|
|
heightBuf,
|
|
chainBuf
|
|
]));
|
|
});
|
|
|
|
it('should decode header value', function() {
|
|
encoding.decodeHeaderValue(Buffer.concat([
|
|
hashBuf,
|
|
versionBuf,
|
|
prevHashBuf,
|
|
merkleRootBuf,
|
|
tsBuf,
|
|
bitsBuf,
|
|
nonceBuf,
|
|
heightBuf,
|
|
chainBuf
|
|
])).should.deep.equal(header);
|
|
});
|
|
});
|
|
|