From b7998d614b5ed11f879bc6446acd7f3822b19f0d Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Tue, 28 Feb 2017 16:53:44 +0100
Subject: [PATCH] [fix] #856 Do not apply block length rule for block#0

---
 app/lib/dup/indexer.js                      |  7 ++++++-
 doc/Protocol.md                             |  2 ++
 package.json                                |  2 +-
 test/fast/block/protocol-brg50-blocksize.js | 21 +++++++++++++--------
 4 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/app/lib/dup/indexer.js b/app/lib/dup/indexer.js
index 0646912bc..37b5b429e 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 379382a28..c4feaf30f 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 0ceeef364..b88fd5504 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 475934eaf..30b4ab42a 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);
   }));
 });
-- 
GitLab