test: add pow-tests

This commit is contained in:
Javed Khan 2018-05-22 14:45:23 +05:30
parent bc07492eba
commit 5af767159a
No known key found for this signature in database
GPG Key ID: 7E31745B904584E6

88
test/pow-test.js Normal file
View File

@ -0,0 +1,88 @@
/* eslint-env mocha */
/* eslint prefer-arrow-callback: "off" */
'use strict';
const assert = require('./util/assert');
const Chain = require('../lib/blockchain/chain');
const ChainEntry = require('../lib/blockchain/chainentry');
const Network = require('../lib/protocol/network');
const network = Network.get('main');
function random(max) {
return Math.floor(Math.random() * max);
}
const chain = new Chain({
memory: true,
network
});
describe('Difficulty', function() {
it('should open chain', async () => {
await chain.open();
});
it('should get next work', async () => {
const prev = new ChainEntry();
prev.time = 1262152739;
prev.bits = 0x1d00ffff;
prev.height = 32255;
const first = new ChainEntry();
first.time = 1261130161;
assert.strictEqual(chain.retarget(prev, first), 0x1d00d86a);
});
it('should get next work pow limit', async () => {
const prev = new ChainEntry();
prev.time = 1233061996;
prev.bits = 0x1d00ffff;
prev.height = 2015;
const first = new ChainEntry();
first.time = 1231006505;
assert.strictEqual(chain.retarget(prev, first), 0x1d00ffff);
});
it('should get next work lower limit actual', async () => {
const prev = new ChainEntry();
prev.time = 1279297671;
prev.bits = 0x1c05a3f4;
prev.height = 68543;
const first = new ChainEntry();
first.time = 1279008237;
assert.strictEqual(chain.retarget(prev, first), 0x1c0168fd);
});
it('should get next work upper limit actual', async () => {
const prev = new ChainEntry();
prev.time = 1269211443;
prev.bits = 0x1c387f6f;
prev.height = 46367;
const first = new ChainEntry();
first.time = 1263163443;
assert.strictEqual(chain.retarget(prev, first), 0x1d00e1fd);
});
it('should get block proof equivalent time', async () => {
const blocks = [];
for (let i = 0; i < 10000; i++) {
const prev = new ChainEntry();
prev.height = i;
prev.time = 1269211443 + i * network.pow.targetSpacing;
prev.bits = 0x207fffff;
if (i > 0)
prev.chainwork = prev.getProof().addn(blocks[i-1].chainwork.toNumber());
blocks[i] = prev;
}
chain.tip = blocks[blocks.length - 1];
for (let j = 0; j < 1000; j++) {
const p1 = blocks[random(blocks.length)];
const p2 = blocks[random(blocks.length)];
const tdiff = chain.getProofTime(p1, p2);
assert.strictEqual(tdiff, p1.time - p2.time);
}
});
});