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