From 898dd290773c42f639fde5b9a0be0db0fb4ec3cd Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Thu, 16 Mar 2017 15:31:57 +0100
Subject: [PATCH] [fix] #878 UD formula is not correct

---
 app/lib/dal/sqliteDAL/MetaDAL.js              |   7 +-
 app/lib/dal/sqliteDAL/index/BIndexDAL.js      |   3 +-
 app/lib/dup/indexer.js                        |  12 +-
 doc/Protocol.md                               |  23 +-
 test/dal/dal.js                               |   2 +-
 test/dal/triming.js                           |  10 +-
 test/data/blockchain.json                     | 561 +++++++-----------
 test/fast/block/protocol-brg13-dividend.js    |   4 +-
 test/integration/transactions-test.js         |  30 +-
 test/integration/v1.0-double-dividend.js      |   8 +-
 test/integration/v1.0-g1-dividend-long-run.js |  90 +++
 test/integration/v1.0-g1-dividend.js          |   8 +-
 test/integration/v1.0-source-garbaging.js     |   7 +-
 .../{v0.4-dividend.js => v1.1-dividend.js}    |  19 +-
 14 files changed, 384 insertions(+), 400 deletions(-)
 create mode 100644 test/integration/v1.0-g1-dividend-long-run.js
 rename test/integration/{v0.4-dividend.js => v1.1-dividend.js} (78%)

diff --git a/app/lib/dal/sqliteDAL/MetaDAL.js b/app/lib/dal/sqliteDAL/MetaDAL.js
index 6e6100a5c..6662fa927 100644
--- a/app/lib/dal/sqliteDAL/MetaDAL.js
+++ b/app/lib/dal/sqliteDAL/MetaDAL.js
@@ -238,7 +238,12 @@ function MetaDAL(driver) {
         }));
       }
       yield sindexDAL.insertBatch(sourcesMovements);
-    })
+    }),
+
+    18: 'BEGIN;' +
+      // Add a `massReeval` column
+    'ALTER TABLE b_index ADD COLUMN massReeval VARCHAR(100) NOT NULL DEFAULT \'0\';' +
+    'COMMIT;'
   };
 
   this.init = () => co(function *() {
diff --git a/app/lib/dal/sqliteDAL/index/BIndexDAL.js b/app/lib/dal/sqliteDAL/index/BIndexDAL.js
index d46ca9b72..6ca590c16 100644
--- a/app/lib/dal/sqliteDAL/index/BIndexDAL.js
+++ b/app/lib/dal/sqliteDAL/index/BIndexDAL.js
@@ -32,6 +32,7 @@ function BIndexDAL(driver) {
     'medianTime',
     'dividend',
     'mass',
+    'massReeval',
     'unitBase',
     'powMin',
     'udTime',
@@ -40,7 +41,7 @@ function BIndexDAL(driver) {
     'speed'
   ];
   this.arrays = [];
-  this.bigintegers = ['mass'];
+  this.bigintegers = ['mass', 'massReeval'];
   this.booleans = ['leaving'];
   this.pkFields = ['number'];
   this.translated = {};
diff --git a/app/lib/dup/indexer.js b/app/lib/dup/indexer.js
index ad23ea20d..cccce2bac 100644
--- a/app/lib/dup/indexer.js
+++ b/app/lib/dup/indexer.js
@@ -840,7 +840,7 @@ const indexer = module.exports = {
     } else if (HEAD.udReevalTime != HEAD_1.udReevalTime) {
       // DUG
       const previousUB = HEAD_1.unitBase;
-      HEAD.dividend = Math.ceil(HEAD_1.dividend + Math.pow(conf.c, 2) * Math.ceil(HEAD_1.mass / Math.pow(10, previousUB)) / HEAD.membersCount / (conf.dtReeval / conf.dt));
+      HEAD.dividend = Math.ceil(HEAD_1.dividend + Math.pow(conf.c, 2) * Math.ceil(HEAD_1.massReeval / Math.pow(10, previousUB)) / HEAD.membersCount / (conf.dtReeval / conf.dt));
     } else {
       HEAD.dividend = HEAD_1.dividend;
     }
@@ -865,6 +865,7 @@ const indexer = module.exports = {
 
   // BR_G15
   prepareMass: (HEAD, HEAD_1) => {
+    // Mass
     if (HEAD.number == 0) {
       HEAD.mass = 0;
     }
@@ -873,6 +874,15 @@ const indexer = module.exports = {
     } else {
       HEAD.mass = HEAD_1.mass;
     }
+    // Mass on re-evaluation
+    if (HEAD.number == 0) {
+      HEAD.massReeval = 0;
+    }
+    else if (HEAD.udReevalTime != HEAD_1.udReevalTime) {
+      HEAD.massReeval = HEAD_1.mass;
+    } else {
+      HEAD.massReeval = HEAD_1.massReeval;
+    }
   },
 
   // BR_G16
diff --git a/doc/Protocol.md b/doc/Protocol.md
index 03954bfc1..4a12171e8 100644
--- a/doc/Protocol.md
+++ b/doc/Protocol.md
@@ -1435,6 +1435,7 @@ The block produces 1 new entry:
       medianTime = null
       dividend = null
       mass = null
+      massReeval = null
       unitBase = null
       powMin = PowMin
       udTime = null
@@ -1627,7 +1628,7 @@ If `HEAD.number == 0`:
     
 Else If `HEAD.udReevalTime != HEAD~1.udReevalTime`:
 
-    HEAD.dividend = HEAD_1.dividend + c² * CEIL(HEAD~1.mass / POW(10, HEAD~1.unitbase)) / HEAD.membersCount)
+    HEAD.dividend = HEAD_1.dividend + c² * CEIL(HEAD~1.massReeval / POW(10, HEAD~1.unitbase)) / HEAD.membersCount)
 
 Else:
 
@@ -1655,7 +1656,7 @@ If `HEAD.dividend >= 1000000`    :
     HEAD.new_dividend = HEAD.dividend
     HEAD.unitBase = HEAD.unitBase + 1
     
-###### BR_G15 - HEAD.mass
+###### BR_G15 - HEAD.mass and HEAD.massReeval
 
 If `HEAD.number == 0`:
 
@@ -1669,6 +1670,24 @@ Else:
 
     HEAD.mass = HEAD~1.mass
 
+EndIf
+
+If `HEAD.number == 0`:
+
+    HEAD.massReeval = 0
+
+Else if `HEAD.udReevalTime != HEAD~1.udReevalTime`:
+
+    HEAD.massReeval = HEAD~1.mass
+
+Else:
+
+    HEAD.massReeval = HEAD~1.massReeval
+
+EndIf
+
+> Functionnally: the UD is reevaluated on the preceding monetary mass (important!)
+
 ###### BR_G16 - HEAD.speed
 
 If `HEAD.number == 0`:
diff --git a/test/dal/dal.js b/test/dal/dal.js
index 73a915100..3c4866f77 100644
--- a/test/dal/dal.js
+++ b/test/dal/dal.js
@@ -103,7 +103,7 @@ describe("DAL", function(){
   it('should have DB version 18', () => co(function *() {
     let version = yield fileDAL.getDBVersion();
     should.exist(version);
-    version.should.equal(18);
+    version.should.equal(19);
   }));
 
   it('should have no peer in a first time', function(){
diff --git a/test/dal/triming.js b/test/dal/triming.js
index f56d067d8..0014c17a0 100644
--- a/test/dal/triming.js
+++ b/test/dal/triming.js
@@ -17,11 +17,11 @@ describe("Triming", function(){
 
   it('should be able to feed the bindex', () => co(function *() {
     yield dal.bindexDAL.insertBatch([
-      { number: 121, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
-      { number: 122, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
-      { number: 123, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
-      { number: 124, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
-      { number: 125, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 }
+      { number: 121, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, massReeval: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
+      { number: 122, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, massReeval: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
+      { number: 123, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, massReeval: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
+      { number: 124, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, massReeval: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 },
+      { number: 125, version: 6, bsize: 0, hash: "HASH", issuer: "ISSUER", time: 0, membersCount: 3, issuersCount: 2, issuersFrame: 1, issuersFrameVar: 2, avgBlockSize: 0, medianTime: 1482500000, dividend: 100, mass: 300, massReeval: 300, unitBase: 2, powMin: 70, udTime: 0, udReevalTime: 0, diffNumber: 5, speed: 1.0 }
     ]);
   }));
 
diff --git a/test/data/blockchain.json b/test/data/blockchain.json
index 9c985447d..090bf5216 100644
--- a/test/data/blockchain.json
+++ b/test/data/blockchain.json
@@ -5,8 +5,8 @@
       "nonce": 100000000001,
       "number": 0,
       "powMin": 0,
-      "time": 1480000000,
-      "medianTime": 1480000000,
+      "time": 1489672122,
+      "medianTime": 1489672122,
       "membersCount": 2,
       "monetaryMass": null,
       "unitbase": 0,
@@ -15,39 +15,39 @@
       "issuersFrameVar": 0,
       "len": 6,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "PBFMqPiRTdgUHQdVyUEc4m0vAw+hfK4gP9/cxqJMZm4sqPRHMEwHc2lyxWQwb9G/L7OduaXa0m0mVhRErLueDw==",
-      "hash": "4B776FA22B16BC52A03E5BEC0435AD6D55E6E82F443E4DE905FF7D809735B208",
-      "parameters": "0.99:300:9995:0:40:604800:31536000:1:604800:604800:0.9:31536000:3:1:5000:10:0.6666666666666666:1480000300:1480000300:300",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "N+x0F9pUcFTeqU3KEvmjGaPjnWt2uWkWCO43VXsBYCLCrjKkwU0EqJouETQKeQ7t7ukOiOyIrXW7+JBbzXaIBQ==",
+      "hash": "D06BB9FEE8D9E59892283D96A6B4D7B3937A177FB1F2B435A60E949099837355",
+      "parameters": "0.007376575:3600:1200:0:40:604800:31536000:1:604800:604800:0.9:31536000:3:20:960:10:0.6666666666666666:1489675722:1489675722:3600",
       "previousHash": null,
       "previousIssuer": null,
-      "inner_hash": "B7E0D4830FBBAD337CB70EED3F057102D40051CE7348D9C040B9C35D79AF146F",
+      "inner_hash": "C7DED079D6093B6E1210061D7EB43C7F006C6F656EF35A4F60E80B7B3CCBD989",
       "dividend": null,
       "identities": [
-        "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:kdg4GA3wNnXt+u/gP9uD34lGhzClhMylDpJew5zhtkQAz84oscNQtDXpvooCWzVsS1kZ25MaH42eL7kOq+sUCg==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat",
-        "2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc:oA9lMYvK8CiqQ0K05q5JL42A9nTrWrv2aITJsunPHccB+HuInv3+u/MFmopBiMuUsNL3CSNF6ycyLkVkhcNNAQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac"
+        "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:1eubHHbuNfilHMM0G2bI30iZzebQ2cQ1PC7uPAw08FGMMmQCRerlF/3pc4sAcsnexsxBseA/3lY03KlONqJBAg==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tic",
+        "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:lcekuS0eP2dpFL99imJcwvDAwx49diiDMkG8Lj7FLkC/6IJ0tgNjUzCIZgMGi7bL5tODRiWi9B49UMXb8b3MAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc"
       ],
       "joiners": [
-        "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:/1zplmVFOvsw8Ko8Y7I2o2eq+cIJOPDwe770Guzjvoq9WiKDbL//ETqUIF2oydyOn46hj9xPaLFCvafCBHZbBg==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat",
-        "2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc:9Fj76dW4K/IQfXCZcspwEji3pNdpEuNIx+UWPi86S8xab35wu0Q1Fj/f8bcjlCnlo1PURW/ijaMJiSYIKqiSBg==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac"
+        "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:s2hUbokkibTAWGEwErw6hyXSWlWFQ2UWs2PWx8d/kkElAyuuWaQq4Tsonuweh1xn4AC1TVWt4yMR3WrDdkhnAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tic",
+        "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:80pUx9YBk0RwqrVrQQA+PuxoNn21A8NwQ3824CQPU1ad9R1oDXc/pU6NVpQv92LM8gaWs/Pm1mLXNNVnr+m6BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc"
       ],
       "actives": [],
       "leavers": [],
       "revoked": [],
       "excluded": [],
       "certifications": [
-        "2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:4QfdSLspQh0c3DlEOZMiadC7GvlX4L6WB/dPdNjh1scVEmeRUEnAFoaa2gec5wdAzAq3vu2gKnQrKb9EAaNwDA==",
-        "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc:0:hnOxOjpoL7+KVDmaosBgJXX8BBpcUWi5hzWrhjCT/NByZzfQYAknQHg98vGRVVVbsn+oKZO6worHFbbIAP7kAQ=="
+        "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:0:vMaYgBSnU+83AYOVQCZAx1XLpg/F1MmMztDfCnZvl8hPs4LE9tcDvCrrFogAwMEW2N7Y0gCH62/fBMgw4KrGCA==",
+        "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:0:RKIGMgYIhB9FmjPbmyo4egPufg/iTpBznYGZp5hjK1WZ1a9imQldLNUMe0eiPlSKJTK/JD3gOlCiynOEY2csBA=="
       ],
       "transactions": []
     },
     {
       "version": 10,
-      "nonce": 100000000002,
+      "nonce": 200000000001,
       "number": 1,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000000,
+      "time": 1489679330,
+      "medianTime": 1489672122,
       "membersCount": 2,
       "monetaryMass": 0,
       "unitbase": 0,
@@ -56,13 +56,13 @@
       "issuersFrameVar": 5,
       "len": 0,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "b4G1benKmPAqkZbXUqnm3xk/rNR9QLBrHdRmqEgjCmjNMELk5ZlbIflPJqN8FaKBtOvlS0w90rcGIbqsBR4wBQ==",
-      "hash": "A97F97CDFE5755B2553663AAA788F419ABDBC6DDABE7064F2E29213D63B6677A",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "75Shypw8ECCk7R7223ix73zgijgyywXuh3TptCK9u0x2QOw5HFtX4gievdKspVc/UeecHkiZlWLt9hBb2WzJBw==",
+      "hash": "275D9E2A26EC39AE059752CB46E2F462D0ACB1ACF0D43B516E5D4F6E20A6C1D2",
       "parameters": "",
-      "previousHash": "4B776FA22B16BC52A03E5BEC0435AD6D55E6E82F443E4DE905FF7D809735B208",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "B899A9957654878ACD2C17E25498E4EC3FA5640732912BE22F18686FEC91DF5C",
+      "previousHash": "D06BB9FEE8D9E59892283D96A6B4D7B3937A177FB1F2B435A60E949099837355",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "7BF4F2DF4AACCF329EEF1FB7F88FADBE2332094EA86784DB755033FC6491859E",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -75,27 +75,27 @@
     },
     {
       "version": 10,
-      "nonce": 100000000001,
+      "nonce": 100000000002,
       "number": 2,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489679330,
+      "medianTime": 1489675726,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 2400,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 2,
       "issuersFrameVar": 4,
       "len": 0,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "WdX95cp30pIameTDFpJUW0edT5hdE32Ms1rl8e0o4BIFfVVVfoOFnywGwlmKGHcBEhttHcFtYEFhaF1gzq20Ag==",
-      "hash": "ABDDADC611E48D1658501E68036F6250F2591A1C6265FD2AFFBB21FBD68CBB77",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "W88NIRegwf+t4I+BzZ6koQWQwneeDoSIA6OfL1X87z4E9VyCGzJ94tvgRpXXM8ke7oHm5xc91hnTxhloyHCnCw==",
+      "hash": "93F1DA501410CE37EFA9C1A89EC484DFCFB223EE8318B0DA85A0D2DFCA6E526C",
       "parameters": "",
-      "previousHash": "A97F97CDFE5755B2553663AAA788F419ABDBC6DDABE7064F2E29213D63B6677A",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "0F1563F15793DD900AB265278F0043B0FDF51B5C8F37759BC9C2436792241046",
-      "dividend": 9995,
+      "previousHash": "275D9E2A26EC39AE059752CB46E2F462D0ACB1ACF0D43B516E5D4F6E20A6C1D2",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "0051A67F22EBC3FB10034DD3FC593CB0E6B93652C6B0A2A7EED2599CC3A821C7",
+      "dividend": 1200,
       "identities": [],
       "joiners": [],
       "actives": [],
@@ -110,23 +110,23 @@
       "nonce": 100000000001,
       "number": 3,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489679340,
+      "medianTime": 1489676927,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 2400,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 3,
       "issuersFrameVar": 3,
       "len": 8,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "auA3aA9JJzylL22NvcU6Q5JBm0bpTm6i0k+HYuwcESSql3zK6cvSwzj8tytvSPIp5m1toMAlWgyg6N8ZZqGqCg==",
-      "hash": "22F8CF714806514B5B9AF2F00084EEA73009713E0588E16D88AE20A4858FEB6C",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "dxC+vTs8hZoPyYmdm0CFq2bLzm4RHGnR+XVEnGs8CwsXh9Um+iZMh7BLBMqzoBJ+GgIjSjn3/EnlKde4Ta6fCA==",
+      "hash": "813F9DE2D8C2AAC097E84C194CE4F4EA7719E5F73604F7FF4646AA71895618FC",
       "parameters": "",
-      "previousHash": "ABDDADC611E48D1658501E68036F6250F2591A1C6265FD2AFFBB21FBD68CBB77",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "575C69507C3AB44A1E21A4CBDC9CBEC8E6C845C2A3CCB96303C3464331122311",
+      "previousHash": "93F1DA501410CE37EFA9C1A89EC484DFCFB223EE8318B0DA85A0D2DFCA6E526C",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "16983C51A51D857D0A4FA6CB0C915364B4AF197DE8D2ECCA1AB4AE0ADC04CED0",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -138,54 +138,54 @@
       "transactions": [
         {
           "version": 10,
-          "blockstamp": "2-ABDDADC611E48D1658501E68036F6250F2591A1C6265FD2AFFBB21FBD68CBB77",
+          "blockstamp": "2-93F1DA501410CE37EFA9C1A89EC484DFCFB223EE8318B0DA85A0D2DFCA6E526C",
           "locktime": 0,
           "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
+            "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV"
           ],
           "inputs": [
-            "9995:0:D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:2"
+            "1200:0:D:DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:2"
           ],
           "unlocks": [
             "0:SIG(0)"
           ],
           "outputs": [
-            "2999:0:SIG(2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc)",
-            "6996:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
+            "510:0:SIG(DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo)",
+            "690:0:SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV)"
           ],
           "comments": [],
           "signatures": [
-            "CcABNeZDNXft/k2fplMAHshN4i3Jcp+Ixrami7gs3ICtFqw5nAs1AaJJLfxPr+CvXdE8473D8bu57wnfarZGCg=="
+            "9gXcWpjdGSEpjBY5P2iloicVV6if5O5h5pUj8/uYNOdFzvC3i9zFVVpAOuwfFaC6XS48ZErcDilAA/kE3yD1DQ=="
           ],
           "comment": "",
           "currency": "duniter_unit_test_currency",
           "block_number": 3,
-          "time": 1480000300
+          "time": 1489676927
         }
       ]
     },
     {
       "version": 10,
-      "nonce": 100000000001,
+      "nonce": 200000000002,
       "number": 4,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489677530,
+      "medianTime": 1489677530,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 2400,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 4,
       "issuersFrameVar": 2,
-      "len": 8,
+      "len": 9,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "w5vLqsAti58nrsJJndMdJ6+r5VuOOrFy0SfzF2jVriRTkQ/gTzRTNl+v4XJwDsyNeL14EeJvxDCGiu28gqQzAw==",
-      "hash": "919E463FC10AC54457739D3B0FA63D40CD436DC72E4574E1CBF09FFD9B5058D6",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "EyhLvDuJIpIXYdN1tmGBKsyNMN/gixD9zU5r/dRic42sJX9xH2RcTOG9mkRrAqwYpcWXO56uDhp8Q2TF+Y9OCg==",
+      "hash": "45735BA97959129703F3BA6CD10B5968B0326C78D5B1FD5DCA861E06A86B65CE",
       "parameters": "",
-      "previousHash": "22F8CF714806514B5B9AF2F00084EEA73009713E0588E16D88AE20A4858FEB6C",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "61C58D4212F826FA86D12D5E9D4598252595D0EB7FA18616E4BF6715156A9A75",
+      "previousHash": "813F9DE2D8C2AAC097E84C194CE4F4EA7719E5F73604F7FF4646AA71895618FC",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "4455241B85F9CE2C2FF6D73F569DEAF63DBBA2D41BEBA3025CE2964377C44CE7",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -197,54 +197,55 @@
       "transactions": [
         {
           "version": 10,
-          "blockstamp": "3-22F8CF714806514B5B9AF2F00084EEA73009713E0588E16D88AE20A4858FEB6C",
+          "blockstamp": "3-813F9DE2D8C2AAC097E84C194CE4F4EA7719E5F73604F7FF4646AA71895618FC",
           "locktime": 0,
           "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
+            "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo"
           ],
           "inputs": [
-            "6996:0:T:E84C72FBE788F6F52B293676A8314A6F227F14B0A8FD0168E1C4F08E85D1F8E9:1"
+            "1200:0:D:DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:2",
+            "510:0:T:BAB784FE208D23E898FCB439378F2DD2298BF735F63814C8E1B24DB61F9D0A8E:0"
           ],
           "unlocks": [
-            "0:SIG(0)"
+            "0:SIG(0)",
+            "1:SIG(0)"
           ],
           "outputs": [
-            "1:0:SIG(2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc)",
-            "6995:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
+            "1710:0:SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV)"
           ],
           "comments": [],
           "signatures": [
-            "7Oiujg+TezElOGkSiHBi5HGu2rdLZTJnIUTq7XQIMZ0bfseTDiZLBZFI1pKuuj4uSSZ6mwDtxMN1iYCq22K+BA=="
+            "dv04DTxyNoek1WkGDy2OQtuzwNIKi5yRCjXfRdH2gjeYAxCOWORU7cUA+PMn9nKQijODNBnJU4cg8yIPSvgcBg=="
           ],
           "comment": "",
           "currency": "duniter_unit_test_currency",
           "block_number": 4,
-          "time": 1480000300
+          "time": 1489677530
         }
       ]
     },
     {
       "version": 10,
-      "nonce": 100000000001,
+      "nonce": 200000000001,
       "number": 5,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489691960,
+      "medianTime": 1489677530,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 2400,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 5,
       "issuersFrameVar": 1,
-      "len": 8,
+      "len": 0,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "OZMDpxcUeCzJbZO+vNnRdCpGqeHvchLvv8iBSFKbhBotj6ZpOQwerqJ/Uoo4eIdF2dOYYWLqi4tzdmYMke8UBA==",
-      "hash": "556C20BEB55FBEE1C5067A379EFB55F74727741D76F01DBEC9230617E1D8B19F",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "JdalufDChSDbAGxj+QdzdhSLoY+aTTx2mwbuh1eUJaCNQCSrq91Bjv0uxm+UqVqJeReCokl0y8buSnUHAps/Bg==",
+      "hash": "5470C2B9E599DC16EAF5B628EF6EB2281384C27EC686C33710E30F83B5256511",
       "parameters": "",
-      "previousHash": "919E463FC10AC54457739D3B0FA63D40CD436DC72E4574E1CBF09FFD9B5058D6",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "3E632B8E68CE3B54EE3B3B3509F6C370877CD41373D8F6B274B263252C6B35AD",
+      "previousHash": "45735BA97959129703F3BA6CD10B5968B0326C78D5B1FD5DCA861E06A86B65CE",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "AD87A9940E8612DAE2AE0D1829E90F6B805B0FC6F1A58880C927506BD4B0D23F",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -253,58 +254,31 @@
       "revoked": [],
       "excluded": [],
       "certifications": [],
-      "transactions": [
-        {
-          "version": 10,
-          "blockstamp": "4-919E463FC10AC54457739D3B0FA63D40CD436DC72E4574E1CBF09FFD9B5058D6",
-          "locktime": 0,
-          "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
-          ],
-          "inputs": [
-            "6995:0:T:50844926EC611BF6BBF9918A657F87E0AA0DE5A5D8DB3D476289BF64C6ED8C25:1"
-          ],
-          "unlocks": [
-            "0:SIG(0)"
-          ],
-          "outputs": [
-            "5495:0:SIG(2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc)",
-            "1500:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
-          ],
-          "comments": [],
-          "signatures": [
-            "XTuTwiRJxzvtMEzFuuTYrXeUcedAhp6UJDh4l79C2pMNYTtCki0vzBzCWEbqpVz0BFJakoiDVMzxhp10EwRIBw=="
-          ],
-          "comment": "",
-          "currency": "duniter_unit_test_currency",
-          "block_number": 5,
-          "time": 1480000300
-        }
-      ]
+      "transactions": []
     },
     {
       "version": 10,
-      "nonce": 100000000001,
+      "nonce": 200000000002,
       "number": 6,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489679935,
+      "medianTime": 1489679935,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 4800,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 6,
       "issuersFrameVar": 0,
-      "len": 8,
+      "len": 0,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "J3Uo950Zyst8KpdaqoruwZwwEi0bUMUbEqdGKs0ebKfUzL+K6lQKNw8+uVLjp5x3hON7sBCTRy8Mn2krAmBkBA==",
-      "hash": "7672117AD7A2F8387AC6372FE7DA2618D20661FD159ED8E695BCFABDF080AAE9",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "7skWtuh2k3ABpB6rSr1ilp192pAO+phe3aFjVA1DqdEnJoACeCuVzNqS3uUvogEEbsVgvExzoZampl6ZgNmJDA==",
+      "hash": "6A1EB65CB39A3101A0207FE57945BDBAC9100B34FC221686BB2EF4B0C262C460",
       "parameters": "",
-      "previousHash": "556C20BEB55FBEE1C5067A379EFB55F74727741D76F01DBEC9230617E1D8B19F",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "330140744B0B37BA875F90586D2DFF3355A0C08BDBB95EC6BECC049335530CA2",
-      "dividend": null,
+      "previousHash": "5470C2B9E599DC16EAF5B628EF6EB2281384C27EC686C33710E30F83B5256511",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "3D02688629E31EB5751561E3D1099BEA18165BAE0EE4A80C8BFB0CF6AAB367E5",
+      "dividend": 1200,
       "identities": [],
       "joiners": [],
       "actives": [],
@@ -312,57 +286,30 @@
       "revoked": [],
       "excluded": [],
       "certifications": [],
-      "transactions": [
-        {
-          "version": 10,
-          "blockstamp": "5-556C20BEB55FBEE1C5067A379EFB55F74727741D76F01DBEC9230617E1D8B19F",
-          "locktime": 0,
-          "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
-          ],
-          "inputs": [
-            "1500:0:T:DA453C8B6300F06AC538D7EFB154DA9AE51F30D525236B9D4AD13944E18AA1B0:1"
-          ],
-          "unlocks": [
-            "0:SIG(0)"
-          ],
-          "outputs": [
-            "1:0:SIG(6EQoFVnFf2xpaRzieNTXmAKU6XkDHYrvgorJ8ppMFa8b)",
-            "1499:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
-          ],
-          "comments": [],
-          "signatures": [
-            "IZWp8BX2nbEIhlIjULR4yA4TPjVIKJarqD0rwy3XB8Yu2PNUBYOYFAvGS77bFVl0QO91GPpetIgkk+ju7+1eAA=="
-          ],
-          "comment": "",
-          "currency": "duniter_unit_test_currency",
-          "block_number": 6,
-          "time": 1480000300
-        }
-      ]
+      "transactions": []
     },
     {
       "version": 10,
       "nonce": 100000000001,
       "number": 7,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489679935,
+      "medianTime": 1489679935,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 4800,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 6,
       "issuersFrameVar": 0,
-      "len": 8,
+      "len": 7,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "Ypcfoc27Mwm0ef3QXLD9oKTFBdclLA7e0dGJdorOb+I4uwOgaZFQtE6bD59G7UoKLrYj1blvEX4MsWSKOyeiDw==",
-      "hash": "19809DFAB3494410A545636D4D6BEBA19851C33E300753AF7175C638B3252B46",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "fF4KleWf0oqTpV2wfBTAOKiphDYQXPau8tdG8LwcUyqzB2QZWrW0QknDs05VorpcPZJNOGupNXz+tcW9KWkNAg==",
+      "hash": "C5B4179C5D65DB6AF1D24CD6859D88C3B4A4A9DAD6A35AF32DA74D877816C0BB",
       "parameters": "",
-      "previousHash": "7672117AD7A2F8387AC6372FE7DA2618D20661FD159ED8E695BCFABDF080AAE9",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "6A2FC5075A94C90C794B7832089ACA20A80E977A5BD4ECC35E1B271F09ADFDA1",
+      "previousHash": "6A1EB65CB39A3101A0207FE57945BDBAC9100B34FC221686BB2EF4B0C262C460",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "7995A51F9E502B64D1FA78DB9EE09E744E8A5A047C00CDB018825773976BFE30",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -374,54 +321,53 @@
       "transactions": [
         {
           "version": 10,
-          "blockstamp": "6-7672117AD7A2F8387AC6372FE7DA2618D20661FD159ED8E695BCFABDF080AAE9",
+          "blockstamp": "6-6A1EB65CB39A3101A0207FE57945BDBAC9100B34FC221686BB2EF4B0C262C460",
           "locktime": 0,
           "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
+            "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo"
           ],
           "inputs": [
-            "1499:0:T:A6F2C3DFF8EFEBE226F103E86193A8F22A51D25DD63C2BB9BF86D9A5F3DC55B8:1"
+            "1200:0:D:DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:6"
           ],
           "unlocks": [
             "0:SIG(0)"
           ],
           "outputs": [
-            "99:0:SIG(2EvWF9XM6TY3zUDjwi3qfGRW5zhN11TXcUDXdgK2XK41)",
-            "1400:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
+            "1200:0:SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV)"
           ],
           "comments": [],
           "signatures": [
-            "ZOFga+kwbnUqXOare6rEhyzQdtW/S7MRnfCXAsVz7+D6SKbJj9OSjD9PwlNHOyVNTQLTKQL0L9YlG+Gq/W5xBw=="
+            "58QpdQLvcRNnK3zd/iHcJ1NIq7tKosfG6nvPyYYKLXxim7oZqU2mPJElXblbRlCNYw1HEYnubyPxUjvqGaHKBw=="
           ],
           "comment": "",
           "currency": "duniter_unit_test_currency",
           "block_number": 7,
-          "time": 1480000300
+          "time": 1489679935
         }
       ]
     },
     {
       "version": 10,
-      "nonce": 100000000001,
+      "nonce": 200000000001,
       "number": 8,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489679935,
+      "medianTime": 1489679935,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 4800,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 6,
       "issuersFrameVar": 0,
       "len": 8,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "9Qsguxm0OGAkmGquSNBP126O39agARD6ZIB+VxfStJkPpMK4T8u6Rkj6s5wSf1zIpMtaelFKiH4UPo0rBqxvDw==",
-      "hash": "050A9D36F87024F767A84AE444D16D7A6DF1B72918B0587768FDF62D319A0C39",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "HOZxXE99TtQjblW2wTyVLkSkbsofjdJ7de9Yw9mzg6LTAaYevhhmNuqoe5LEKk9D7kVfUqv1vQ6S30G4w2/aAQ==",
+      "hash": "E457BF313F313D6A852685BE741B1370B8B9C768C76D0F8A8711D7C5195461D2",
       "parameters": "",
-      "previousHash": "19809DFAB3494410A545636D4D6BEBA19851C33E300753AF7175C638B3252B46",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "1E8983A9AE9EFDE602A97C0EF87DA7728CF1BE539A854FDF8510E2A8EF96AD16",
+      "previousHash": "C5B4179C5D65DB6AF1D24CD6859D88C3B4A4A9DAD6A35AF32DA74D877816C0BB",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "A5619C280B29FAE71A56505304BBA29F79478362F6692507C5F13B964E57A2B0",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -433,54 +379,55 @@
       "transactions": [
         {
           "version": 10,
-          "blockstamp": "7-19809DFAB3494410A545636D4D6BEBA19851C33E300753AF7175C638B3252B46",
+          "blockstamp": "7-C5B4179C5D65DB6AF1D24CD6859D88C3B4A4A9DAD6A35AF32DA74D877816C0BB",
           "locktime": 0,
           "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
+            "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV"
           ],
           "inputs": [
-            "1400:0:T:F1C86F38F33B2D37561EE927801D8B630BCADA62336E4BBC718BA06B1101584C:1"
+            "1200:0:T:078C0C0626B5A1E43F3A9D06238A60DA596C0B5C60409FE8F44C6FF01CB5354E:0"
           ],
           "unlocks": [
             "0:SIG(0)"
           ],
           "outputs": [
-            "100:0:SIG(DPFgnVSB14QnYFjKNhbFRYLxroSmaXZ53TzgFZBcCxbF)",
-            "1300:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
+            "1200:0:XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB)"
+          ],
+          "comments": [
+            "ok"
           ],
-          "comments": [],
           "signatures": [
-            "keBrKUqRzMfx+YMXbRAiygOhPo90UESQ6SmX9GMRsHJDnHieke24xsXiNJvSIwFxP8A9aP6tLvPg/GFmaWrRAA=="
+            "5e1HCNRpRGPNIwA8jaGxdD4wPD3s4gUXOGJMJSiBHYqBJtcMq54gguDQsSCEfJiLVvEm3ZX5wl6OdSXQ+/ZSCw=="
           ],
-          "comment": "",
+          "comment": "ok",
           "currency": "duniter_unit_test_currency",
           "block_number": 8,
-          "time": 1480000300
+          "time": 1489679935
         }
       ]
     },
     {
       "version": 10,
-      "nonce": 100000000001,
+      "nonce": 200000000001,
       "number": 9,
       "powMin": 0,
-      "time": 1480000300,
-      "medianTime": 1480000300,
+      "time": 1489679935,
+      "medianTime": 1489679935,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 4800,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 6,
       "issuersFrameVar": 0,
-      "len": 16,
+      "len": 8,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "Iw0erkjb6Etqy0NnZ3JFnup1kzSfvVYKofpxqtujAkBNMo1GFdZJDmp0txKVUuW8C1VjuMVBMpYuI0VXF9XOAQ==",
-      "hash": "CB0B5D591CC73102DBBE731884B9EBA780F84EB033B4D3BBE19FEA8DB0B13F9D",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "/Fy/99YjcYvSCLWzcEGt55/14slANHNjupxSJ6kpZg3jK4fO6JXvAEshw73FVZ7sKYh+Hj0W840UsUaymVmUCg==",
+      "hash": "F2F5CC139B9BEF01E639198CB3A1203D5148E75DD072F5BB3D733A206F7C2DD6",
       "parameters": "",
-      "previousHash": "050A9D36F87024F767A84AE444D16D7A6DF1B72918B0587768FDF62D319A0C39",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "7A7EB27C6FE5C6AC6A7D1097A119936814B91DCA3222589B41CD9D6603B480AF",
+      "previousHash": "E457BF313F313D6A852685BE741B1370B8B9C768C76D0F8A8711D7C5195461D2",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "B4847747FF4D4A56B6AA778A096D30F16FBEA8D37D0AC4DE2C72E55CA2B68599",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -492,55 +439,30 @@
       "transactions": [
         {
           "version": 10,
-          "blockstamp": "8-050A9D36F87024F767A84AE444D16D7A6DF1B72918B0587768FDF62D319A0C39",
+          "blockstamp": "7-C5B4179C5D65DB6AF1D24CD6859D88C3B4A4A9DAD6A35AF32DA74D877816C0BB",
           "locktime": 0,
           "issuers": [
-            "2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc"
+            "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV"
           ],
           "inputs": [
-            "9995:0:D:2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc:2"
+            "1200:0:T:E14CB52BD5C9A4B9CA8D3007EABBB5B77E1F58D4598CC44D022AE398E4C8F90D:0"
           ],
           "unlocks": [
-            "0:SIG(0)"
+            "0:XHX(1872767826647264)"
           ],
           "outputs": [
-            "4:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)",
-            "9991:0:SIG(2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc)"
+            "1200:0:SIG(DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo)"
           ],
-          "comments": [],
-          "signatures": [
-            "2Rc2aSKOO+qvUJpxFJ64+tx7B5fIDfwQqH719xOUSLfyTNQXUzeY5KNUw4nwk2gv6AS8AEQiNWx/m6N3lmLdAg=="
+          "comments": [
+            "okk"
           ],
-          "comment": "",
-          "currency": "duniter_unit_test_currency",
-          "block_number": 9,
-          "time": 1480000300
-        },
-        {
-          "version": 10,
-          "blockstamp": "8-050A9D36F87024F767A84AE444D16D7A6DF1B72918B0587768FDF62D319A0C39",
-          "locktime": 0,
-          "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
-          ],
-          "inputs": [
-            "1300:0:T:0FAD3D25899C789C1C2B12FE3D90BF26E5794FB31ECF5072A881DF9B83E7CA00:1"
-          ],
-          "unlocks": [
-            "0:SIG(0)"
-          ],
-          "outputs": [
-            "999:0:SIG(4WmQWq4NuJtu6mzFDKkmmu6Cm6BZvgoY4b4MMDMwVvu7)",
-            "301:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
-          ],
-          "comments": [],
           "signatures": [
-            "1r90zlvq3xKcgf1g9tY9n3KzMiwobdrfJYe7Cjeo8K+Jw5+d7Aerd9vLMqK8Y5wIL49Av/lOdfRmcwqxutTHDw=="
+            "+KUFhYV5wpPbahhRtGcFVfWcjTh/Rl7K68i/ESKmrwf3rnFLpl4atVpzyvmsOsliz5wDjWMiG9wTYMDjRj4XDQ=="
           ],
-          "comment": "",
+          "comment": "okk",
           "currency": "duniter_unit_test_currency",
           "block_number": 9,
-          "time": 1480000300
+          "time": 1489679935
         }
       ]
     },
@@ -549,23 +471,23 @@
       "nonce": 100000000001,
       "number": 10,
       "powMin": 1,
-      "time": 1480000900,
-      "medianTime": 1480000300,
+      "time": 1489679935,
+      "medianTime": 1489679935,
       "membersCount": 2,
-      "monetaryMass": 19990,
+      "monetaryMass": 4800,
       "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 6,
       "issuersFrameVar": 0,
-      "len": 18,
+      "len": 7,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "GLNVBH1YlcVW8oakj3tTCHixX1Fcg+VbMAFGH+2CznBGIgYWIvjTB0zdmzNFSmmBos7jJ1+dH0iFwvQeCQgeCQ==",
-      "hash": "012FCFA205F23EE9AA8C041625785AB031FD5E8BED58C46A72E85E1002CED001",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "alJqiw4mWCy2cN8rsVV89J31El8msp2j5zTkFcNTP5M39sLOTwAJaL+orpPcmW28zRRIFpDssiQjys3t+3pHBg==",
+      "hash": "3524C70AAA67384D9627B0E79D2642DBB0402EF86B6205EC6AFC1EA20C6B5D92",
       "parameters": "",
-      "previousHash": "CB0B5D591CC73102DBBE731884B9EBA780F84EB033B4D3BBE19FEA8DB0B13F9D",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "78423BD3BAF675A32848D84D6B151F722A66A8FD51436272ECD468ECA4FAC429",
+      "previousHash": "F2F5CC139B9BEF01E639198CB3A1203D5148E75DD072F5BB3D733A206F7C2DD6",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "6F8DFC7DF1889161DD0712A5CD19CA7BD437C4108AFDE8B9BA3838FA2283ADCD",
       "dividend": null,
       "identities": [],
       "joiners": [],
@@ -577,147 +499,54 @@
       "transactions": [
         {
           "version": 10,
-          "blockstamp": "9-CB0B5D591CC73102DBBE731884B9EBA780F84EB033B4D3BBE19FEA8DB0B13F9D",
+          "blockstamp": "9-F2F5CC139B9BEF01E639198CB3A1203D5148E75DD072F5BB3D733A206F7C2DD6",
           "locktime": 0,
           "issuers": [
-            "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd"
+            "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo"
           ],
           "inputs": [
-            "4:0:T:3B12EEC97704A8CCA31AFD7B60BA09555744703E22A6A47EE4ECBE6DA20B27E5:0",
-            "301:0:T:9B18E2C2CBF9C856560E76F8684665C8677DD0506AAD5195960E30CC37A5706C:1"
-          ],
-          "unlocks": [
-            "0:SIG(0)",
-            "1:SIG(0)"
-          ],
-          "outputs": [
-            "300:0:SIG(7kMAi8wttYKPK5QSfCwoDriNTcCTWKzTbuSjsLsjGJX2)",
-            "5:0:SIG(HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd)"
-          ],
-          "comments": [],
-          "signatures": [
-            "fBvHesFaqBR+oiybh076bOD9wzrNRR3UEL6RcaFfLNwf1zKeGWmrAc6axIsmVuhMcreiODlQcFvLQKuuH6A/Bw=="
-          ],
-          "comment": "",
-          "currency": "duniter_unit_test_currency",
-          "block_number": 10,
-          "time": 1480000300
-        },
-        {
-          "version": 10,
-          "blockstamp": "9-CB0B5D591CC73102DBBE731884B9EBA780F84EB033B4D3BBE19FEA8DB0B13F9D",
-          "locktime": 0,
-          "issuers": [
-            "2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc"
-          ],
-          "inputs": [
-            "2999:0:T:E84C72FBE788F6F52B293676A8314A6F227F14B0A8FD0168E1C4F08E85D1F8E9:0"
+            "1200:0:T:0E7786FE197AED43CFC607435707B1CD1C1C5A48F85EE9FC8D1DFA465190940D:0"
           ],
           "unlocks": [
             "0:SIG(0)"
           ],
           "outputs": [
-            "700:0:SIG(7kMAi8wttYKPK5QSfCwoDriNTcCTWKzTbuSjsLsjGJX2)",
-            "2299:0:SIG(2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc)"
+            "1200:0:SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV)"
           ],
           "comments": [],
           "signatures": [
-            "1yuPcN97qG7p7VcyHGxseoZTQx8qEMe9pMH/84hgUemd9X8Vg3BCpXgZXXDJgLUDOKksKTM8e3aoRHhz09ohAQ=="
+            "zeENt6T/6XNIkxPswRniGotX8/Ob3StWNRiRphP/vKiyFUZZOnUCvVCFQ8+WD1iH2sl0siHG8ztn8AoZq/ZUDQ=="
           ],
           "comment": "",
           "currency": "duniter_unit_test_currency",
           "block_number": 10,
-          "time": 1480000300
+          "time": 1489679935
         }
       ]
     },
     {
       "version": 10,
-      "nonce": 100000000001,
+      "nonce": 200000000001,
       "number": 11,
       "powMin": 1,
-      "time": 1480000900,
-      "medianTime": 1480000900,
-      "membersCount": 2,
-      "monetaryMass": 59590,
-      "unitbase": 1,
-      "issuersCount": 1,
-      "issuersFrame": 6,
-      "issuersFrameVar": 0,
-      "len": 0,
-      "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "e4uKt8qIAP+AShaCWmFRVbrkOiCkkMupRj2LL3rOMSIYYSz7RIyaX2xwobOkcEUTZeG4/1mPdMkKg+czlXAiBA==",
-      "hash": "E55F97AFE990B0DE5E1B3CE98EAF4F9A65B907A9BFBE9C222A17506BD8EC5061",
-      "parameters": "",
-      "previousHash": "012FCFA205F23EE9AA8C041625785AB031FD5E8BED58C46A72E85E1002CED001",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "D85BA527336453C5C89F359DDFFEDC02A8B8BB1EE5AF35FBBDEB519DC6E76AC3",
-      "dividend": 1980,
-      "identities": [],
-      "joiners": [],
-      "actives": [],
-      "leavers": [],
-      "revoked": [],
-      "excluded": [],
-      "certifications": [],
-      "transactions": []
-    },
-    {
-      "version": 10,
-      "nonce": 100000000001,
-      "number": 12,
-      "powMin": 1,
-      "time": 1480001800,
-      "medianTime": 1480000900,
-      "membersCount": 2,
-      "monetaryMass": 157610,
-      "unitbase": 1,
-      "issuersCount": 1,
-      "issuersFrame": 6,
-      "issuersFrameVar": 0,
-      "len": 0,
-      "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "7NANBYFqoUKGOGTB53gpEiC6K12frgUx747Is3iQs7pwtJBNCP7bUnAzMsZ/yZ0kUB8mzPsXhZ0/gRGaYT9LCA==",
-      "hash": "2E3A789AFE1461B9CBE58A55EA47E6B7BE70938CC275AACE98283DF12B9C717F",
-      "parameters": "",
-      "previousHash": "E55F97AFE990B0DE5E1B3CE98EAF4F9A65B907A9BFBE9C222A17506BD8EC5061",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "9FE128B18BBE82A5202B42C2A1D051C891490CBF2433C93D392587FA3E79630F",
-      "dividend": 4901,
-      "identities": [],
-      "joiners": [],
-      "actives": [],
-      "leavers": [],
-      "revoked": [],
-      "excluded": [],
-      "certifications": [],
-      "transactions": []
-    },
-    {
-      "version": 10,
-      "nonce": 100000000001,
-      "number": 13,
-      "powMin": 1,
-      "time": 1480003600,
-      "medianTime": 1480001800,
+      "time": 1489679935,
+      "medianTime": 1489679935,
       "membersCount": 2,
-      "monetaryMass": 410210,
-      "unitbase": 2,
+      "monetaryMass": 4800,
+      "unitbase": 0,
       "issuersCount": 1,
       "issuersFrame": 6,
       "issuersFrameVar": 0,
-      "len": 0,
+      "len": 8,
       "currency": "duniter_unit_test_currency",
-      "issuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "signature": "7UXLMH3GXbROWUvKYxtWIepCds5iUfhFh/7R1hFJm0bYhPrXVdS39iiT/TvVjAxPlMX64fjCHuw7kMnJpQBIDA==",
-      "hash": "5A354E5304DD71757418621ADA2B3A7766706F4D837DE31C05EDE1F5C614AB08",
+      "issuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "signature": "OjWOEdPEpzWKFqxdIcSdk0FUcsXk3vAu9rcmucktgF1L8CdSh09Te4Aek8MCQ8vE7no+EJkL7QR6bv2tI8e/Dw==",
+      "hash": "7F2151494087FA237E1E793EA8C2D015B84A11492CAA282A44DC99DBB1DBAAC8",
       "parameters": "",
-      "previousHash": "2E3A789AFE1461B9CBE58A55EA47E6B7BE70938CC275AACE98283DF12B9C717F",
-      "previousIssuer": "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd",
-      "inner_hash": "7253A5ACC95D3BB0FB467DFD8CE269C55F36F93AA218CAEF76E1480AC2F3D2F9",
-      "dividend": 1263,
+      "previousHash": "3524C70AAA67384D9627B0E79D2642DBB0402EF86B6205EC6AFC1EA20C6B5D92",
+      "previousIssuer": "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV",
+      "inner_hash": "03E45A377A6BCDAA8AC8150A60EFB668C85068A7180C7524818CE331EFEC9ABC",
+      "dividend": null,
       "identities": [],
       "joiners": [],
       "actives": [],
@@ -725,7 +554,35 @@
       "revoked": [],
       "excluded": [],
       "certifications": [],
-      "transactions": []
+      "transactions": [
+        {
+          "version": 10,
+          "blockstamp": "10-3524C70AAA67384D9627B0E79D2642DBB0402EF86B6205EC6AFC1EA20C6B5D92",
+          "locktime": 0,
+          "issuers": [
+            "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV"
+          ],
+          "inputs": [
+            "1200:0:T:1F3F5DCAA471431680CD7F5A59D3D22A1A1091810FC72D8BDE2A40883CD6D48D:0"
+          ],
+          "unlocks": [
+            "0:SIG(0)"
+          ],
+          "outputs": [
+            "1200:0:(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG(DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo)) || (SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV) && SIG(DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo))"
+          ],
+          "comments": [
+            "cross1"
+          ],
+          "signatures": [
+            "qu+yUzggT+Zt6v4LpgVSYnJkTQRMUAmX4EOfsCnaVNROlv3QhhErynq+WGLNUbGSBnGtrwgA4VfjcZ0eTTL2CA=="
+          ],
+          "comment": "cross1",
+          "currency": "duniter_unit_test_currency",
+          "block_number": 11,
+          "time": 1489679935
+        }
+      ]
     }
   ]
 }
diff --git a/test/fast/block/protocol-brg13-dividend.js b/test/fast/block/protocol-brg13-dividend.js
index 5673b9806..48dd0bc9e 100644
--- a/test/fast/block/protocol-brg13-dividend.js
+++ b/test/fast/block/protocol-brg13-dividend.js
@@ -26,7 +26,7 @@ describe("Protocol BR_G13 - dividend", function(){
 
   it('block with medianTime == udTime', () => co(function*(){
     const conf   = { dt: 100, dtReeval: 100, c: 0.0488 };
-    const HEAD_1 = { number: 59, udTime:     1500000900, udReevalTime: 1500000900, dividend: 100, mass: 18000, unitBase: 1 };
+    const HEAD_1 = { number: 59, udTime:     1500000900, udReevalTime: 1500000900, dividend: 100, mass: 18000, massReeval: 18000, unitBase: 1 };
     const HEAD   = { number: 60, medianTime: 1500000900, membersCount: 3 };
     indexer.prepareUDTime(HEAD, HEAD_1, conf);
     indexer.prepareDividend(HEAD, HEAD_1, conf);
@@ -36,7 +36,7 @@ describe("Protocol BR_G13 - dividend", function(){
 
   it('block with medianTime > udTime', () => co(function*(){
     const conf   = { dt: 100, dtReeval: 100, c: 0.0488 };
-    const HEAD_1 = { number: 59, udTime:     1500000900, udReevalTime: 1500000900, dividend: 100, mass: 18000, unitBase: 1 };
+    const HEAD_1 = { number: 59, udTime:     1500000900, udReevalTime: 1500000900, dividend: 100, mass: 18000, massReeval: 18000, unitBase: 1 };
     const HEAD   = { number: 60, medianTime: 1500000901, membersCount: 3 };
     indexer.prepareUDTime(HEAD, HEAD_1, conf);
     indexer.prepareDividend(HEAD, HEAD_1, conf);
diff --git a/test/integration/transactions-test.js b/test/integration/transactions-test.js
index e435fbd12..70d4f9455 100644
--- a/test/integration/transactions-test.js
+++ b/test/integration/transactions-test.js
@@ -109,18 +109,18 @@ describe("Testing transactions", function() {
       yield s1.commit();
       (yield s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(1);
       (yield s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(3);
-      let tx1 = yield toc.prepareITX(1201, tic);
+      let tx1 = yield toc.prepareITX(1200, tic);
       yield toc.sendTX(tx1);
       yield s1.commit();
       (yield s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0);
       (yield s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(4);
       // Now cat has all the money...
       let current = yield s1.get('/blockchain/current');
-      let tx2 = yield tic.prepareUTX(tx1, ['SIG(2)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      let tx3 = yield tic.prepareUTX(tx1, ['SIG(1)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      let tx4 = yield tic.prepareUTX(tx1, ['SIG(0)'], [{ qty: 1201, base: 0, lock: 'XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB)' }], { comment: 'ok', blockstamp: [current.number, current.hash].join('-') });
-      let tx5 = yield tic.prepareUTX(tx1, ['XHX(2)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      let tx6 = yield tic.prepareUTX(tx1, ['XHX(4)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
+      let tx2 = yield tic.prepareUTX(tx1, ['SIG(2)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
+      let tx3 = yield tic.prepareUTX(tx1, ['SIG(1)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
+      let tx4 = yield tic.prepareUTX(tx1, ['SIG(0)'], [{ qty: 1200, base: 0, lock: 'XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB)' }], { comment: 'ok', blockstamp: [current.number, current.hash].join('-') });
+      let tx5 = yield tic.prepareUTX(tx1, ['XHX(2)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
+      let tx6 = yield tic.prepareUTX(tx1, ['XHX(4)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
       yield unit.shouldFail(toc.sendTX(tx2), 'Wrong unlocker in transaction');
       yield unit.shouldFail(toc.sendTX(tx3), 'Wrong unlocker in transaction');
       yield unit.shouldNotFail(toc.sendTX(tx4));
@@ -129,8 +129,8 @@ describe("Testing transactions", function() {
       yield s1.commit(); // TX4 commited
       (yield s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0); // The tx was not sent to someone, but with an XHX! So toc has nothing more than before.
       (yield s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(3);
-      let tx7 = yield tic.prepareUTX(tx4, ['XHX(2872767826647264)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong1', blockstamp: [current.number, current.hash].join('-') });
-      let tx8 = yield tic.prepareUTX(tx4, ['XHX(1872767826647264)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'okk', blockstamp: [current.number, current.hash].join('-') }); // tic unlocks the XHX locked amount, and gives it to toc!
+      let tx7 = yield tic.prepareUTX(tx4, ['XHX(2872767826647264)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong1', blockstamp: [current.number, current.hash].join('-') });
+      let tx8 = yield tic.prepareUTX(tx4, ['XHX(1872767826647264)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'okk', blockstamp: [current.number, current.hash].join('-') }); // tic unlocks the XHX locked amount, and gives it to toc!
       yield unit.shouldFail(toc.sendTX(tx7), 'Wrong unlocker in transaction');
       yield unit.shouldNotFail(toc.sendTX(tx8));
       yield s1.commit(); // TX8 commited
@@ -141,24 +141,24 @@ describe("Testing transactions", function() {
     it('with MULTISIG', () => co(function *() {
       (yield s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(1);
       (yield s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(3);
-      let tx1 = yield toc.prepareITX(1201, tic);
+      let tx1 = yield toc.prepareITX(1200, tic);
       yield toc.sendTX(tx1);
       yield s1.commit();
       let current = yield s1.get('/blockchain/current');
       (yield s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0);
       (yield s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(4);
       // The funding transaction that can be reverted by its issuer (tic here) or consumed by toc if he knowns X for H(X)
-      let tx2 = yield tic.prepareUTX(tx1, ['SIG(0)'], [{ qty: 1201, base: 0, lock: '(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG(' + toc.pub + ')) || (SIG(' + tic.pub + ') && SIG(' + toc.pub + '))'  }], { comment: 'cross1', blockstamp: [current.number, current.hash].join('-') });
+      let tx2 = yield tic.prepareUTX(tx1, ['SIG(0)'], [{ qty: 1200, base: 0, lock: '(XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB) && SIG(' + toc.pub + ')) || (SIG(' + tic.pub + ') && SIG(' + toc.pub + '))'  }], { comment: 'cross1', blockstamp: [current.number, current.hash].join('-') });
       yield unit.shouldNotFail(toc.sendTX(tx2));
       yield s1.commit(); // TX2 commited
       (yield s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(1); // toc is also present in the target of tx2
       (yield s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(4); // As well as tic
-      let tx3 = yield tic.prepareUTX(tx2, ['XHX(1872767826647264) SIG(0)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      let tx4 = yield toc.prepareUTX(tx2, ['XHX(1872767826647264) SIG(0)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'ok', blockstamp: [current.number, current.hash].join('-') });
-      let tx5 = yield tic.prepareMTX(tx2, toc, ['XHX(1872767826647264) SIG(1) SIG(0)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'multi OK', blockstamp: [current.number, current.hash].join('-') });
-      let tx6 = yield toc.prepareMTX(tx2, tic, ['XHX(1872767826647264) SIG(1) SIG(0)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'multi WRONG', blockstamp: [current.number, current.hash].join('-') });
+      let tx3 = yield tic.prepareUTX(tx2, ['XHX(1872767826647264) SIG(0)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
+      let tx4 = yield toc.prepareUTX(tx2, ['XHX(1872767826647264) SIG(0)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'ok', blockstamp: [current.number, current.hash].join('-') });
+      let tx5 = yield tic.prepareMTX(tx2, toc, ['XHX(1872767826647264) SIG(1) SIG(0)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'multi OK', blockstamp: [current.number, current.hash].join('-') });
+      let tx6 = yield toc.prepareMTX(tx2, tic, ['XHX(1872767826647264) SIG(1) SIG(0)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'multi WRONG', blockstamp: [current.number, current.hash].join('-') });
       // nLocktime
-      let tx7 = yield tic.prepareMTX(tx2, toc, ['XHX(1872767826647264) SIG(1) SIG(0)'], [{ qty: 1201, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong locktime', locktime: 100, blockstamp: [current.number, current.hash].join('-') });
+      let tx7 = yield tic.prepareMTX(tx2, toc, ['XHX(1872767826647264) SIG(1) SIG(0)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong locktime', locktime: 100, blockstamp: [current.number, current.hash].join('-') });
       yield unit.shouldFail(toc.sendTX(tx3), 'Wrong unlocker in transaction');
       yield unit.shouldNotFail(toc.sendTX(tx4));
       yield unit.shouldNotFail(toc.sendTX(tx5));
diff --git a/test/integration/v1.0-double-dividend.js b/test/integration/v1.0-double-dividend.js
index e0b33b369..e9a6fbbc6 100644
--- a/test/integration/v1.0-double-dividend.js
+++ b/test/integration/v1.0-double-dividend.js
@@ -77,11 +77,11 @@ describe("Protocol 1.0 Dividend Update", function() {
     json.dividend.should.equal(1000);
   }));
 
-  it('should have block#8 with UD 1010', () => s1.expectThat('/blockchain/block/8', (json) => {
-    json.dividend.should.equal(1002);
+  it('should have block#8 with UD 1000', () => s1.expectThat('/blockchain/block/8', (json) => {
+    json.dividend.should.equal(1000);
   }));
 
-  it('should have block#9 with UD 1010', () => s1.expectThat('/blockchain/block/9', (json) => {
-    json.dividend.should.equal(1002);
+  it('should have block#9 with UD 1000', () => s1.expectThat('/blockchain/block/9', (json) => {
+    json.dividend.should.equal(1000);
   }));
 });
diff --git a/test/integration/v1.0-g1-dividend-long-run.js b/test/integration/v1.0-g1-dividend-long-run.js
new file mode 100644
index 000000000..29d664202
--- /dev/null
+++ b/test/integration/v1.0-g1-dividend-long-run.js
@@ -0,0 +1,90 @@
+"use strict";
+
+const co        = require('co');
+const should    = require('should');
+const bma       = require('duniter-bma').duniter.methods.bma;
+const constants = require('../../app/lib/constants');
+const toolbox   = require('./tools/toolbox');
+
+const start = 1488985390; // 2016-03-08 16:03:10 UTC+0
+const delayToUD = 1489057200 - start; // Delay to 2016-03-09 12:00:00 UTC+0
+
+const aDay = 3600 * 24;
+const _6months = 15778800;
+
+const conf = {
+  sigValidity: _6months * 160, // A whole life
+  msValidity: _6months * 160, // A whole life
+  ud0: 1000,
+  udTime0: 1488970800, // 2016-03-08 12:00:00 UTC+0
+  udReevalTime0: 1490094000, // 2016-03-21 12:00:00 UTC+0 ==> first recomputed UD (equinox)
+  c: .0488, // 4.88 %
+  dt: aDay,
+  cpu: 1.,
+  dtReeval: _6months, // 6 months
+  medianTimeBlocks: 1, // The medianTime always equals previous block's medianTime for easy testing
+  avgGenTime: 3600 * 24 // 1 bloc a day
+};
+
+constants.CORES_MAXIMUM_USE_IN_PARALLEL = 1;
+
+let s1, cat, tac;
+
+describe("Protocol 1.0 Äž1 Dividend - long run", function() {
+
+  /*****
+   * DESCRIPTION
+   * -----------
+   *
+   * Simulates the real dividends that would occur in the currency (simulating N)
+   */
+
+  before(() => co(function*() {
+
+    const res1 = yield toolbox.simpleNodeWith2Users(conf);
+    s1 = res1.s1;
+    cat = res1.cat; // HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd
+    tac = res1.tac; // 2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc
+    yield s1.commit({ time: start });
+    yield s1.commit({ time: start + 1 });
+    yield s1.commit({ time: start + delayToUD });
+    for (let i = 1; i < 20; i++) {
+      yield s1.commit({ time: (start + delayToUD) + aDay * i });
+    }
+  }));
+
+  it('should have block#0 has no UD', () => s1.expectThat('/blockchain/block/0', (json) => {
+    should.not.exist(json.dividend);
+    json.should.have.property('medianTime').equal(start); // 2016-03-08 16:03:10 UTC+0
+  }));
+
+  it('should have block#1 has no UD', () => s1.expectThat('/blockchain/block/1', (json) => {
+    json.dividend.should.equal(1000);
+    json.should.have.property('medianTime').equal(start); // 2016-03-08 16:03:10 UTC+0
+  }));
+
+  it('should have block#2 with UD 1000', () => s1.expectThat('/blockchain/block/2', (json) => {
+    should.not.exist(json.dividend);
+    json.should.have.property('medianTime').equal(start + 1); // 2016-03-08 16:03:11 UTC+0
+  }));
+
+  it('should have block#3 with UD 1000', () => s1.expectThat('/blockchain/block/3', (json) => {
+    json.dividend.should.equal(1000);
+    json.should.have.property('medianTime').equal(start + delayToUD); // 2016-03-09 12:00:00 UTC+0
+  }));
+
+  it('should have block#4 with UD 1000', () => s1.expectThat('/blockchain/block/4', (json) => {
+    json.dividend.should.equal(1000);
+    json.should.have.property('medianTime').equal((start + delayToUD) + aDay); // 2016-03-10 12:00:00 UTC+0
+  }));
+
+  it('should have block#14 with UD 1000, even if dtReeval has been reached', () => s1.expectThat('/blockchain/block/15', (json) => {
+    json.dividend.should.equal(1000);
+    json.should.have.property('medianTime').equal((start + delayToUD) + aDay * 12); // 2016-03-21 12:00:00 UTC+0
+  }));
+
+  it('should have block#14 with UD 1000, even if dtReeval has been reached', () => s1.expectThat('/blockchain/block/16', (json) => {
+    json.dividend.should.equal(1000);
+    json.should.have.property('medianTime').equal((start + delayToUD) + aDay * 13); // 2016-03-22 12:00:00 UTC+0
+  }));
+});
diff --git a/test/integration/v1.0-g1-dividend.js b/test/integration/v1.0-g1-dividend.js
index 9fe62f35f..d403856fc 100644
--- a/test/integration/v1.0-g1-dividend.js
+++ b/test/integration/v1.0-g1-dividend.js
@@ -107,13 +107,13 @@ describe("Protocol 1.0 Äž1 Dividend", function() {
     json.should.have.property('medianTime').equal((start + delayToUD) + aDay * 11); // 2016-03-20 12:00:00 UTC+0
   }));
 
-  it('should have block#14 with UD 1001', () => s1.expectThat('/blockchain/block/15', (json) => {
-    json.dividend.should.equal(1001);
+  it('should have block#14 with UD 1000, even if dtReeval has been reached', () => s1.expectThat('/blockchain/block/15', (json) => {
+    json.dividend.should.equal(1000);
     json.should.have.property('medianTime').equal((start + delayToUD) + aDay * 12); // 2016-03-21 12:00:00 UTC+0
   }));
 
-  it('should have block#14 with UD 1001', () => s1.expectThat('/blockchain/block/16', (json) => {
-    json.dividend.should.equal(1001);
+  it('should have block#14 with UD 1000, even if dtReeval has been reached', () => s1.expectThat('/blockchain/block/16', (json) => {
+    json.dividend.should.equal(1000);
     json.should.have.property('medianTime').equal((start + delayToUD) + aDay * 13); // 2016-03-22 12:00:00 UTC+0
   }));
 });
diff --git a/test/integration/v1.0-source-garbaging.js b/test/integration/v1.0-source-garbaging.js
index 2b88a2448..50cd27132 100644
--- a/test/integration/v1.0-source-garbaging.js
+++ b/test/integration/v1.0-source-garbaging.js
@@ -170,6 +170,7 @@ describe("Protocol 1.0 Source Garbaging", function() {
   }));
 
   it('should have lost some money with unitBase bumped from 0 to 1', () => co(function*() {
+    yield s1.commit({ time: now + 900 });
     yield s1.commit({ time: now + 900 });
     // Has no more enough on the account (100x10^0 < 100x10^1)
     yield s1.expectThat('/tx/sources/DPFgnVSB14QnYFjKNhbFRYLxroSmaXZ53TzgFZBcCxbF', (json) => {
@@ -197,9 +198,9 @@ describe("Protocol 1.0 Source Garbaging", function() {
     yield s1.commit({ time: now + 3600 });
     yield s1.expectThat('/tx/sources/HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', (json) => {
       json.sources.should.deepEqual([
-        { type: 'D', noffset: 11, identifier: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', amount: 1980, base: 1 },
-        { type: 'D', noffset: 12, identifier: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', amount: 4901, base: 1 },
-        { type: 'D', noffset: 13, identifier: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', amount: 1263, base: 2 }
+        { type: 'D', noffset: 11, identifier: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', amount: 9995, base: 0 },
+        { type: 'D', noffset: 12, identifier: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', amount: 1980, base: 1 },
+        { type: 'D', noffset: 14, identifier: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', amount: 3940, base: 1 }
       ]);
     });
   }));
diff --git a/test/integration/v0.4-dividend.js b/test/integration/v1.1-dividend.js
similarity index 78%
rename from test/integration/v0.4-dividend.js
rename to test/integration/v1.1-dividend.js
index 01f1fe6bb..f28a622c6 100644
--- a/test/integration/v0.4-dividend.js
+++ b/test/integration/v1.1-dividend.js
@@ -12,6 +12,7 @@ const now = 1484000000;
 const s1 = toolbox.server({
   c: 0.1,
   dt: 10,
+  dtReeval: 10,
   udTime0: now + 10,
   udReevalTime0: now + 10,
   ud0: 100,
@@ -27,7 +28,7 @@ const tac = user('tac', { pub: '2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc', s
 const tic = user('tic', { pub: 'DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV', sec: '468Q1XtTq7h84NorZdWBZFJrGkB18CbmbHr9tkp9snt5GiERP7ySs3wM8myLccbAAGejgMRC9rqnXuW3iAfZACm7'}, { server: s1 });
 
 
-describe("Protocol 0.4 Dividend", function() {
+describe("Protocol 1.1 Dividend", function() {
 
   before(() => co(function*() {
 
@@ -55,10 +56,10 @@ describe("Protocol 0.4 Dividend", function() {
   it('should exit 2 dividends for cat', () => s1.expect('/tx/sources/HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', (res) => {
     res.should.have.property('pubkey').equal('HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd');
     res.should.have.property('sources').length(4);
-    res.sources[0].should.have.property('amount').equal(100); // M = 0;   N = 2; = UD(0) + c²*M/N = 100 + 0.01*0/2 = 100 (ceiled)
-    res.sources[1].should.have.property('amount').equal(101); // M = 200; N = 2; = UD(1) + c²*M/N = 100 + 0.01*200/2 = 101 (ceiled)
-    res.sources[2].should.have.property('amount').equal(103); // M = 402; N = 3; = UD(2) + c²*M/N = 101 + 0.01*402/3 = 103 (ceiled)
-    res.sources[3].should.have.property('amount').equal(106); // M = 708; N = 3; = UD(3) + c²*M/N = 103 + 0.01*708/3 = 106 (ceiled)
+    res.sources[0].should.have.property('amount').equal(100); // UD(0) = ud0 => M(0) = 0
+    res.sources[1].should.have.property('amount').equal(100); // t = 1, M(t-1) = 0; , N(t) = 2, UD(t) = UD(t-1) + c²*M(t-1)/N(t) = 100 + 0.01*0/2 = 100 (ceiled) => M(1) = 200
+    res.sources[2].should.have.property('amount').equal(101); // t = 2, M(t-1) = 200, N(t) = 3, UD(t) = UD(t-1) + c²*M(t-1)/N(t) = 100 + 0.01*200/3 = 101 (ceiled) => M(2) = M(1)+N(t-1)*DU(t-1) = 200+2*100 = 400
+    res.sources[3].should.have.property('amount').equal(103); // t = 3, M(t-1) = 402, N(t) = 3, UD(t) = UD(t-1) + c²*M(t-1)/N(t) = 101 + 0.01*400/3 = 103 (ceiled) => M(3) = M(2)+N(t-1)*DU(t-1) = 400+3*101 = 703
     res.sources[0].should.have.property('base').equal(0);
     res.sources[1].should.have.property('base').equal(0);
   }));
@@ -70,10 +71,10 @@ describe("Protocol 0.4 Dividend", function() {
       res.should.have.property('pubkey').equal('2LvDg21dVXvetTD9GdkPLURavLYEqP3whauvPWX4c2qc');
       res.should.have.property('sources').length(6);
       res.sources[0].should.have.property('amount').equal(100);
-      res.sources[1].should.have.property('amount').equal(101);
-      res.sources[2].should.have.property('amount').equal(103);
-      res.sources[3].should.have.property('amount').equal(106);
-      res.sources[4].should.have.property('amount').equal(110);
+      res.sources[1].should.have.property('amount').equal(100);
+      res.sources[2].should.have.property('amount').equal(101);
+      res.sources[3].should.have.property('amount').equal(103);
+      res.sources[4].should.have.property('amount').equal(106);
       res.sources[5].should.have.property('amount').equal(105);
       res.sources[0].should.have.property('type').equal('D');
       res.sources[1].should.have.property('type').equal('D');
-- 
GitLab