diff --git a/test/integration/transactions/transactions-test.ts b/test/integration/transactions/transactions-test.ts
deleted file mode 100644
index 7a1b730837de43a3cff2d467119e1bccd0e80957..0000000000000000000000000000000000000000
--- a/test/integration/transactions/transactions-test.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-// Source file from duniter: Crypto-currency software to manage libre currency such as Ğ1
-// Copyright (C) 2018  Cedric Moreau <cem.moreau@gmail.com>
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU Affero General Public License for more details.
-
-import {TestUser} from "../tools/TestUser"
-import {NewTestingServer, TestingServer} from "../tools/toolbox"
-import {Underscore} from "../../../app/lib/common-libs/underscore"
-import {shouldFail, shouldNotFail} from "../../unit-tools"
-
-const should = require('should');
-const assert = require('assert');
-
-describe("Testing transactions", function() {
-
-  const now = 1490000000;
-  const yesterday = now - 86400;
-  const tomorrow = now + 86400;
-  const intwodays = now + (86400 * 2);
-
-  let s1:TestingServer, tic:TestUser, toc:TestUser
-
-  before(async () => {
-
-    s1 = NewTestingServer({
-      gva: {},
-      pair: {
-        pub: 'DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV',
-        sec: '468Q1XtTq7h84NorZdWBZFJrGkB18CbmbHr9tkp9snt5GiERP7ySs3wM8myLccbAAGejgMRC9rqnXuW3iAfZACm7'
-      },
-      nbCores: 1,
-      dt: 7210,
-      ud0: 1200,
-      udTime0: now + 7210,
-      udReevalTime0: now + 7210,
-      avgGenTime: 7210,
-      medianTimeBlocks: 1
-    });
-
-    tic = new TestUser('tic', { pub: 'DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV', sec: '468Q1XtTq7h84NorZdWBZFJrGkB18CbmbHr9tkp9snt5GiERP7ySs3wM8myLccbAAGejgMRC9rqnXuW3iAfZACm7'}, { server: s1 });
-    toc = new TestUser('toc', { pub: 'DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo', sec: '64EYRvdPpTfLGGmaX5nijLXRqWXaVz8r1Z1GtaahXwVSJGQRn7tqkxLb288zwSYzELMEG5ZhXSBYSxsTsz1m9y8F'}, { server: s1 });
-
-    await s1.initDalBmaConnections();
-    // Self certifications
-    await tic.createIdentity();
-    await toc.createIdentity();
-    // Certification;
-    await tic.cert(toc);
-    await toc.cert(tic);
-    await tic.join();
-    await toc.join();
-    await s1.commit({ time: now });
-    await s1.commit({
-      time: now + 7210
-    });
-    await s1.commit({
-      time: now + 7210
-    });
-    await tic.sendMoney(510, toc);
-    await s1.expect('/tx/history/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo', (res:any) => {
-      res.should.have.property('pubkey').equal('DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo');
-      res.should.have.property('history').property('pending').length(1);
-    });
-    await s1.commit({
-      time: now + 7220
-    });
-  })
-
-  after(() => {
-    return Promise.all([
-      s1.closeCluster()
-    ])
-  })
-
-  describe("History by time", function(){
-    it('should have a time not null', () => s1.expect('/tx/history/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo', (res:any) => {
-      res.should.have.property('pubkey').equal('DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo');
-      res.should.have.property('history').property('received').length(1);
-      res.history.received[0].should.have.property('time').not.be.Null;
-      res.history.received[0].should.have.property('time').be.a.Number;
-    }));
-
-    it('should return a received transaction between yesterday and tomorrow', () => s1.expect('/tx/history/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo/times/' + yesterday + '/' + tomorrow, (res:any) => {
-      res.should.have.property('pubkey').equal('DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo');
-      res.should.have.property('history').property('received').length(1);
-      res.history.received[0].should.have.property('time').not.be.Null;
-      res.history.received[0].should.have.property('time').be.a.Number;
-    }));
-
-    it('should not return a received transaction the day after tomorrow', () => s1.expect('/tx/history/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo/times/' + tomorrow + '/' + intwodays, (res:any) => {
-      res.should.have.property('pubkey').equal('DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo');
-      res.should.have.property('history').property('received').length(0);
-    }));
-  })
-
-  describe("Sources", function(){
-
-    it('it should exist block#2 with UD of 1200', () => s1.expect('/blockchain/block/2', (block:any) => {
-      should.exists(block);
-      assert.equal(block.number, 2);
-      assert.equal(block.dividend, 1200);
-    }));
-
-    it('tic should be able to send 510 to toc', async () => {
-      await s1.expect('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV', (res:any) => {
-        should.exists(res);
-        assert.equal(res.sources.length, 1);
-        assert.equal(res.sources[0].conditions, 'SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV)')
-        const txSrc = (Underscore.findWhere(res.sources, { type: 'T' }) as any)
-        assert.equal(txSrc.amount, 690);
-      })
-      const tx = await s1.get('/tx/hash/B6DCADFB841AC05A902741A8772A70B4086D5AEAB147AD48987DDC3887DD55C8')
-      assert.notEqual(tx, null)
-      assert.deepEqual(tx, {
-        "comment": "",
-        "currency": "duniter_unit_test_currency",
-        "hash": "B6DCADFB841AC05A902741A8772A70B4086D5AEAB147AD48987DDC3887DD55C8",
-        "inputs": [
-          "1200:0:D:DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:2"
-        ],
-        "issuers": [
-          "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV"
-        ],
-        "locktime": 0,
-        "outputs": [
-          "510:0:SIG(DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo)",
-          "690:0:SIG(DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV)"
-        ],
-        "raw": "",
-        "signatures": [
-          "Wy2tAKp/aFH2hqZJ5qnUFUNEukFbHwaR4v9gZ/aGoySPfXovDwld9W15w8C0ojVYbma9nlU3eLkVqzVBYz3lAw=="
-        ],
-        "unlocks": [
-          "0:SIG(0)"
-        ],
-        "version": 10,
-        "written_block": 3
-      })
-    })
-
-    it('toc should have 1510 of sources', () => s1.expect('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo', (res:any) => {
-      should.exists(res);
-      assert.equal(res.sources.length, 2);
-      const txRes = (Underscore.findWhere(res.sources, { type: 'T' }) as any)
-      const duRes = (Underscore.where(res.sources, { type: 'D' }) as any)
-      assert.equal(txRes.type, 'T');
-      assert.equal(txRes.amount, 510);
-      assert.equal(duRes[0].type, 'D');
-      assert.equal(duRes[0].amount, 1200);
-    }));
-
-    it('toc should be able to send 800 to tic', async () => {
-      let tx1 = await toc.prepareITX(1710, tic);
-      await toc.sendTX(tx1);
-      await s1.commit({ time: now + 15000 });
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0);
-    })
-  });
-
-  describe("Chaining", function(){
-
-    it('with SIG and XHX', async () => {
-      // Current state
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0);
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(2);
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0);
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(2);
-      // Make the time go so another UD is available
-      await s1.commit({ time: now + 15000 });
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(1);
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(3);
-      let tx1 = await toc.prepareITX(1200, tic);
-      await toc.sendTX(tx1);
-      await s1.commit({ time: now + 15000 });
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0);
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(4);
-      // Now cat has all the money...
-      let current = await s1.get('/blockchain/current');
-      let tx2 = await tic.prepareUTX(tx1, ['SIG(2)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      let tx3 = await tic.prepareUTX(tx1, ['SIG(1)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      let tx4 = await tic.prepareUTX(tx1, ['SIG(0)'], [{ qty: 1200, base: 0, lock: 'XHX(8AFC8DF633FC158F9DB4864ABED696C1AA0FE5D617A7B5F7AB8DE7CA2EFCD4CB)' }], { comment: 'ok', blockstamp: [current.number, current.hash].join('-') });
-      let tx5 = await tic.prepareUTX(tx1, ['XHX(2)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      let tx6 = await tic.prepareUTX(tx1, ['XHX(4)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong', blockstamp: [current.number, current.hash].join('-') });
-      await shouldFail(toc.sendTX(tx2), 'Wrong unlocker in transaction');
-      await shouldFail(toc.sendTX(tx3), 'Wrong unlocker in transaction');
-      await shouldNotFail(toc.sendTX(tx4));
-      await shouldFail(toc.sendTX(tx5), 'Wrong unlocker in transaction');
-      await shouldFail(toc.sendTX(tx6), 'Wrong unlocker in transaction');
-      await s1.commit({ time: now + 19840 }); // TX4 commited
-      (await 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.
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(3);
-      let tx7 = await tic.prepareUTX(tx4, ['XHX(2872767826647264)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'wrong1', blockstamp: [current.number, current.hash].join('-') });
-      let tx8 = await 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!
-      await shouldFail(toc.sendTX(tx7), 'Wrong unlocker in transaction');
-      await shouldNotFail(toc.sendTX(tx8));
-      await s1.commit({ time: now + 19840 }); // TX8 commited
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(1); // That's why toc now has 1 more source...
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(3); // ...and why tic's number of sources hasn't changed
-    })
-
-    it('with MULTISIG', async () => {
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(1);
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(3);
-      let tx1 = await toc.prepareITX(1200, tic);
-      await toc.sendTX(tx1);
-      await s1.commit({ time: now + 19840 });
-      let current = await s1.get('/blockchain/current');
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(0);
-      (await 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 = await 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('-') });
-      await shouldNotFail(toc.sendTX(tx2));
-      await s1.commit({ time: now + 19840 }); // TX2 commited
-      (await s1.get('/tx/sources/DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo')).should.have.property('sources').length(1); // toc is also present in the target of tx2
-      (await s1.get('/tx/sources/DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV')).should.have.property('sources').length(4); // As well as tic
-      let tx3 = await 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 = await 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 = await 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 = await toc.prepareMTX(tx2, tic, ['XHX(1872767826647264) SIG(1) SIG(0) SIG(0) SIG(0)'], [{ qty: 1200, base: 0, lock: 'SIG(' + toc.pub + ')' }], { comment: 'multi WRONG', blockstamp: [current.number, current.hash].join('-') });
-      // nLocktime
-      let tx7 = await 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('-') });
-      await shouldFail(toc.sendTX(tx3), 'Wrong unlocker in transaction');
-      await shouldNotFail(toc.sendTX(tx4));
-      await shouldNotFail(toc.sendTX(tx5));
-      await shouldFail(toc.sendTX(tx6), 'Wrong unlocker in transaction');
-      await shouldFail(toc.sendTX(tx7), 'Locktime not elapsed yet');
-    })
-  })
-})