diff --git a/app/lib/dup/indexer.js b/app/lib/dup/indexer.js index 0646912bcaede618fb2b9c5704c7477fbf5bdf76..37b5b429e4da2835a9f21ebe8fd5ca5eb9976a09 100644 --- a/app/lib/dup/indexer.js +++ b/app/lib/dup/indexer.js @@ -965,7 +965,12 @@ const indexer = module.exports = { }, // BR_G50 - ruleBlockSize: (HEAD) => HEAD.bsize < indexer.DUP_HELPERS.getMaxBlockSize(HEAD), + ruleBlockSize: (HEAD) => { + if (HEAD.number > 0) { + return HEAD.bsize < indexer.DUP_HELPERS.getMaxBlockSize(HEAD); + } + return true; + }, // BR_G98 ruleCurrency: (block, HEAD) => { diff --git a/doc/Protocol.md b/doc/Protocol.md index 379382a289c7c88f7ff280768abf35d001f4b9ae..c4feaf30f0394d88adbb05e3dff376a683168058 100644 --- a/doc/Protocol.md +++ b/doc/Protocol.md @@ -2058,6 +2058,8 @@ If `HEAD.number > 0`: Rule: +If `HEAD.number > 0`: + HEAD.size < MAX(500 ; CEIL(1.10 * HEAD.avgBlockSize)) ###### BR_G98 - Currency diff --git a/package.json b/package.json index 0ceeef3647c9edd78d3393543ba3abb879a87f63..b88fd5504623ada3d29acc9801cde19d7b6ce8d3 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "duniter-common": "0.1.0", "duniter-crawler": "^0.2.9", "duniter-keypair": "^0.3.0", - "duniter-prover": "^0.2.5", + "duniter-prover": "^0.2.6", "event-stream": "3.3.4", "inquirer": "0.8.5", "jison": "0.4.17", diff --git a/test/fast/block/protocol-brg50-blocksize.js b/test/fast/block/protocol-brg50-blocksize.js index 475934eaf069d12140c16581dae8521dc82a16b0..30b4ab42ae1065b9182f1a630ef71d41ca307f4d 100644 --- a/test/fast/block/protocol-brg50-blocksize.js +++ b/test/fast/block/protocol-brg50-blocksize.js @@ -9,42 +9,47 @@ const SUCCESS = true; describe("Protocol BR_G50 - Block size", function(){ it('2 for an AVG(10) should succeed', () => co(function*(){ - const HEAD = { bsize: 2, avgBlockSize: 10 }; + const HEAD = { number: 24, bsize: 2, avgBlockSize: 10 }; indexer.ruleBlockSize(HEAD).should.equal(SUCCESS); })); it('400 for an AVG(10) should succeed', () => co(function*(){ - const HEAD = { bsize: 400, avgBlockSize: 10 }; + const HEAD = { number: 24, bsize: 400, avgBlockSize: 10 }; indexer.ruleBlockSize(HEAD).should.equal(SUCCESS); })); it('499 for an AVG(10) should succeed', () => co(function*(){ - const HEAD = { bsize: 499, avgBlockSize: 10 }; + const HEAD = { number: 24, bsize: 499, avgBlockSize: 10 }; indexer.ruleBlockSize(HEAD).should.equal(SUCCESS); })); it('500 for an AVG(10) should fail', () => co(function*(){ - const HEAD = { bsize: 500, avgBlockSize: 10 }; + const HEAD = { number: 24, bsize: 500, avgBlockSize: 10 }; indexer.ruleBlockSize(HEAD).should.equal(FAIL); })); it('500 for an AVG(454) should fail', () => co(function*(){ - const HEAD = { bsize: 500, avgBlockSize: 454 }; + const HEAD = { number: 24, bsize: 500, avgBlockSize: 454 }; indexer.ruleBlockSize(HEAD).should.equal(FAIL); })); it('500 for an AVG(455) should succeed', () => co(function*(){ - const HEAD = { bsize: 500, avgBlockSize: 455 }; + const HEAD = { number: 24, bsize: 500, avgBlockSize: 455 }; indexer.ruleBlockSize(HEAD).should.equal(SUCCESS); })); it('1100 for an AVG(1000) should fail', () => co(function*(){ - const HEAD = { bsize: 1100, avgBlockSize: 1000 }; + const HEAD = { number: 24, bsize: 1100, avgBlockSize: 1000 }; indexer.ruleBlockSize(HEAD).should.equal(FAIL); })); it('1100 for an AVG(1001) should succeed', () => co(function*(){ - const HEAD = { bsize: 1100, avgBlockSize: 1001 }; + const HEAD = { number: 24, bsize: 1100, avgBlockSize: 1001 }; + indexer.ruleBlockSize(HEAD).should.equal(SUCCESS); + })); + + it('1100 for block#0 should succeed', () => co(function*(){ + const HEAD = { number: 0, bsize: 1100, avgBlockSize: 0 }; indexer.ruleBlockSize(HEAD).should.equal(SUCCESS); })); });