Home Reference Source Test

test/specs/generic/consensus/base/block/BlockUtils.spec.js

describe('BlockUtils', () => {
    it('computes valid targets', () => {
        let difficulty = 1;
        let target = BlockUtils.difficultyToTarget(difficulty);

        expect(BlockUtils.isValidTarget(target)).toBe(true);

        difficulty = 250;
        target = BlockUtils.difficultyToTarget(difficulty);

        expect(BlockUtils.isValidTarget(target)).toBe(true);

        difficulty = NumberUtils.UINT32_MAX;
        target = BlockUtils.difficultyToTarget(difficulty);

        expect(BlockUtils.isValidTarget(target)).toBe(true);

        difficulty = NumberUtils.UINT64_MAX;
        target = BlockUtils.difficultyToTarget(difficulty);

        expect(BlockUtils.isValidTarget(target)).toBe(true);

        difficulty = Policy.BLOCK_TARGET_MAX;
        target = BlockUtils.difficultyToTarget(difficulty);

        expect(BlockUtils.isValidTarget(target)).toBe(true);
    });

    it('computes valid compacts', () => {
        let difficulty = 1;
        let target = BlockUtils.difficultyToCompact(difficulty);

        expect(BlockUtils.isValidCompact(target)).toBe(true);

        difficulty = 250;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(BlockUtils.isValidCompact(target)).toBe(true);

        difficulty = NumberUtils.UINT32_MAX;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(BlockUtils.isValidCompact(target)).toBe(true);

        difficulty = NumberUtils.UINT64_MAX;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(BlockUtils.isValidCompact(target)).toBe(true);

        difficulty = Policy.BLOCK_TARGET_MAX;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(BlockUtils.isValidCompact(target)).toBe(true);
    });

    it('computes correct compacts from difficulty', () => {
        let difficulty = 1;
        let target = BlockUtils.difficultyToCompact(difficulty);

        expect(target).toEqual(0x1f010000);

        difficulty = 250;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(target).toEqual(0x1e010624);

        difficulty = NumberUtils.UINT32_MAX;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(target).toEqual(0x1b010000);

        difficulty = NumberUtils.UINT64_MAX;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(target).toEqual(0x18080000);

        difficulty = Policy.BLOCK_TARGET_MAX;
        target = BlockUtils.difficultyToCompact(difficulty);

        expect(target).toEqual(0x01000001);
    });

    it('correctly computes targets from compact', () => {
        expect(BlockUtils.compactToTarget(0x01000001).toNumber()).toEqual(1);
        expect(BlockUtils.compactToTarget(0x0200ffff).toNumber()).toEqual(0xffff);
        expect(BlockUtils.compactToTarget(0x037fffff).toNumber()).toEqual(0x7fffff);
        expect(BlockUtils.compactToTarget(0x0380ffff).toNumber()).toEqual(0x80ffff);
        expect(BlockUtils.compactToTarget(0x040080ff).toNumber()).toEqual(0x80ff00);
    });

    it('computes correct targets from difficulty', () => {
        let target = BlockUtils.difficultyToTarget(new BigNumber(1));
        expect(target.eq(Policy.BLOCK_TARGET_MAX)).toBe(true);

        target = BlockUtils.difficultyToTarget(Policy.BLOCK_TARGET_MAX);
        expect(target.eq(new BigNumber(1))).toBe(true);
    });

    it('computes correct target depth', () => {
        expect(BlockUtils.getTargetDepth(BlockUtils.compactToTarget(0x1f010000))).toEqual(0);
        expect(BlockUtils.getTargetDepth(BlockUtils.compactToTarget(0x1f008f00))).toEqual(0);
        expect(BlockUtils.getTargetDepth(BlockUtils.compactToTarget(0x1f008000))).toEqual(1);
        expect(BlockUtils.getTargetDepth(BlockUtils.compactToTarget(0x1e600000))).toEqual(1);
        expect(BlockUtils.getTargetDepth(BlockUtils.compactToTarget(0x1e400000))).toEqual(2);
        expect(BlockUtils.getTargetDepth(BlockUtils.compactToTarget(0x01000002))).toEqual(239);
        expect(BlockUtils.getTargetDepth(BlockUtils.compactToTarget(0x01000001))).toEqual(240);
    });
});