diff --git a/app/lib/constants.js b/app/lib/constants.js
deleted file mode 100644
index 43a17790aca2c597364abcdf1a6afde6d0a78fb1..0000000000000000000000000000000000000000
--- a/app/lib/constants.js
+++ /dev/null
@@ -1,148 +0,0 @@
-"use strict";
-const common = require('duniter-common');
-const UDID2 = "udid2;c;([A-Z-]*);([A-Z-]*);(\\d{4}-\\d{2}-\\d{2});(e\\+\\d{2}\\.\\d{2}(\\+|-)\\d{3}\\.\\d{2});(\\d+)(;?)";
-const PUBKEY = common.constants.FORMATS.PUBKEY;
-const TIMESTAMP = common.constants.FORMATS.TIMESTAMP;
-const IPV4_REGEXP = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/;
-const IPV6_REGEXP = /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b).){3}(b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b))|(([0-9A-Fa-f]{1,4}:){0,5}:((b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b).){3}(b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b))|(::([0-9A-Fa-f]{1,4}:){0,5}((b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b).){3}(b((25[0-5])|(1d{2})|(2[0-4]d)|(d{1,2}))b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/;
-module.exports = {
-    TIME_TO_TURN_ON_BRG_107: 1498860000,
-    ERROR: {
-        PEER: {
-            UNKNOWN_REFERENCE_BLOCK: 'Unknown reference block of peer'
-        },
-        BLOCK: {
-            NO_CURRENT_BLOCK: 'No current block'
-        }
-    },
-    ERRORS: {
-        // Technical errors
-        UNKNOWN: { httpCode: 500, uerr: { ucode: 1001, message: "An unknown error occured" } },
-        UNHANDLED: { httpCode: 500, uerr: { ucode: 1002, message: "An unhandled error occured" } },
-        SIGNATURE_DOES_NOT_MATCH: { httpCode: 400, uerr: { ucode: 1003, message: "Signature does not match" } },
-        ALREADY_UP_TO_DATE: { httpCode: 400, uerr: { ucode: 1004, message: "Already up-to-date" } },
-        WRONG_DOCUMENT: common.constants.ERRORS.WRONG_DOCUMENT,
-        SANDBOX_FOR_IDENTITY_IS_FULL: { httpCode: 503, uerr: { ucode: 1007, message: "The identities' sandbox is full. Please retry with another document or retry later." } },
-        SANDBOX_FOR_CERT_IS_FULL: { httpCode: 503, uerr: { ucode: 1008, message: "The certifications' sandbox is full. Please retry with another document or retry later." } },
-        SANDBOX_FOR_MEMERSHIP_IS_FULL: { httpCode: 503, uerr: { ucode: 1009, message: "The memberships' sandbox is full. Please retry with another document or retry later." } },
-        SANDBOX_FOR_TRANSACTION_IS_FULL: { httpCode: 503, uerr: { ucode: 1010, message: "The transactions' sandbox is full. Please retry with another document or retry later." } },
-        NO_POTENTIAL_FORK_AS_NEXT: { httpCode: 503, uerr: { ucode: 1011, message: "No fork block exists in the database as a potential next block." } },
-        INCONSISTENT_DB_MULTI_TXS_SAME_HASH: { httpCode: 503, uerr: { ucode: 1012, message: "Several transactions written with the same hash." } },
-        CLI_CALLERR_RESET: { httpCode: 503, uerr: { ucode: 1013, message: "Bad command: usage is `reset config`, `reset data`, `reset peers`, `reset stats` or `reset all`" } },
-        CLI_CALLERR_CONFIG: { httpCode: 503, uerr: { ucode: 1014, message: "Bad command: usage is `config`." } },
-        // Business errors
-        NO_MATCHING_IDENTITY: { httpCode: 404, uerr: { ucode: 2001, message: "No matching identity" } },
-        UID_ALREADY_USED: { httpCode: 400, uerr: { ucode: 2002, message: "UID already used in the blockchain" } },
-        PUBKEY_ALREADY_USED: { httpCode: 400, uerr: { ucode: 2003, message: "Pubkey already used in the blockchain" } },
-        NO_MEMBER_MATCHING_PUB_OR_UID: { httpCode: 404, uerr: { ucode: 2004, message: "No member matching this pubkey or uid" } },
-        WRONG_SIGNATURE_MEMBERSHIP: { httpCode: 400, uerr: { ucode: 2006, message: "wrong signature for membership" } },
-        ALREADY_RECEIVED_MEMBERSHIP: { httpCode: 400, uerr: { ucode: 2007, message: "Already received membership" } },
-        MEMBERSHIP_A_NON_MEMBER_CANNOT_LEAVE: { httpCode: 400, uerr: { ucode: 2008, message: "A non-member cannot leave" } },
-        NOT_A_MEMBER: { httpCode: 400, uerr: { ucode: 2009, message: "Not a member" } },
-        BLOCK_NOT_FOUND: { httpCode: 404, uerr: { ucode: 2011, message: "Block not found" } },
-        WRONG_UNLOCKER: common.constants.ERRORS.WRONG_UNLOCKER,
-        LOCKTIME_PREVENT: common.constants.ERRORS.LOCKTIME_PREVENT,
-        SOURCE_ALREADY_CONSUMED: common.constants.ERRORS.SOURCE_ALREADY_CONSUMED,
-        WRONG_AMOUNTS: common.constants.ERRORS.WRONG_AMOUNTS,
-        WRONG_OUTPUT_BASE: common.constants.ERRORS.WRONG_OUTPUT_BASE,
-        CANNOT_ROOT_BLOCK_NO_MEMBERS: common.constants.ERRORS.CANNOT_ROOT_BLOCK_NO_MEMBERS,
-        IDENTITY_WRONGLY_SIGNED: common.constants.ERRORS.IDENTITY_WRONGLY_SIGNED,
-        TOO_OLD_IDENTITY: common.constants.ERRORS.TOO_OLD_IDENTITY,
-        NO_IDTY_MATCHING_PUB_OR_UID: { httpCode: 404, uerr: { ucode: 2021, message: "No identity matching this pubkey or uid" } },
-        NEWER_PEER_DOCUMENT_AVAILABLE: { httpCode: 409, uerr: { ucode: 2022, message: "A newer peer document is available" } },
-        PEER_DOCUMENT_ALREADY_KNOWN: { httpCode: 400, uerr: { ucode: 2023, message: "Peer document already known" } },
-        TX_INPUTS_OUTPUTS_NOT_EQUAL: common.constants.ERRORS.TX_INPUTS_OUTPUTS_NOT_EQUAL,
-        TX_OUTPUT_SUM_NOT_EQUALS_PREV_DELTAS: common.constants.ERRORS.TX_OUTPUT_SUM_NOT_EQUALS_PREV_DELTAS,
-        BLOCKSTAMP_DOES_NOT_MATCH_A_BLOCK: common.constants.ERRORS.BLOCKSTAMP_DOES_NOT_MATCH_A_BLOCK,
-        A_TRANSACTION_HAS_A_MAX_SIZE: common.constants.ERRORS.A_TRANSACTION_HAS_A_MAX_SIZE,
-        BLOCK_ALREADY_PROCESSED: { httpCode: 400, uerr: { ucode: 2028, message: 'Already processed' } },
-        TOO_OLD_MEMBERSHIP: common.constants.ERRORS.TOO_OLD_MEMBERSHIP,
-        TX_ALREADY_PROCESSED: { httpCode: 400, uerr: { ucode: 2030, message: "Transaction already processed" } },
-        A_MORE_RECENT_MEMBERSHIP_EXISTS: { httpCode: 400, uerr: { ucode: 2031, message: "A more recent membership already exists" } },
-        MAXIMUM_LEN_OF_OUTPUT: common.constants.ERRORS.MAXIMUM_LEN_OF_OUTPUT,
-        MAXIMUM_LEN_OF_UNLOCK: common.constants.ERRORS.MAXIMUM_LEN_OF_UNLOCK
-    },
-    DEBUG: {
-        LONG_DAL_PROCESS: 50
-    },
-    BMA_REGEXP: common.constants.BMA_REGEXP,
-    IPV4_REGEXP: IPV4_REGEXP,
-    IPV6_REGEXP: IPV6_REGEXP,
-    TIMESTAMP: exact(TIMESTAMP),
-    UDID2_FORMAT: exact(UDID2),
-    PUBLIC_KEY: exact(PUBKEY),
-    DOCUMENTS_VERSION: common.constants.DOCUMENTS_VERSION,
-    BLOCK_GENERATED_VERSION: common.constants.BLOCK_GENERATED_VERSION,
-    LAST_VERSION_FOR_TX: 10,
-    TRANSACTION_VERSION: common.constants.TRANSACTION_VERSION,
-    REVOCATION_FACTOR: common.constants.REVOCATION_FACTOR,
-    FIRST_UNIT_BASE: 0,
-    PEER: common.constants.PEER,
-    NETWORK: {
-        MAX_MEMBERS_TO_FORWARD_TO_FOR_SELF_DOCUMENTS: 10,
-        MAX_NON_MEMBERS_TO_FORWARD_TO_FOR_SELF_DOCUMENTS: 6,
-        MAX_NON_MEMBERS_TO_FORWARD_TO: 4,
-        MAX_MEMBERS_TO_FORWARD_TO: 6,
-        MAX_CONCURRENT_POST: 3,
-        DEFAULT_TIMEOUT: 10 * 1000,
-        SYNC: {
-            MAX: 20
-        },
-        STATUS_INTERVAL: {
-            UPDATE: 2,
-            MAX: 20 // MAX Y blocks
-        }
-    },
-    PROOF_OF_WORK: {
-        EVALUATION: 1000,
-        UPPER_BOUND: common.constants.PROOF_OF_WORK.UPPER_BOUND.slice()
-    },
-    DEFAULT_CURRENCY_NAME: "no_currency",
-    CONTRACT: {
-        DEFAULT: {
-            C: 0.007376575,
-            DT: 30.4375 * 24 * 3600,
-            DT_REEVAL: 30.4375 * 24 * 3600,
-            UD0: 100,
-            STEPMAX: 3,
-            SIGDELAY: 3600 * 24 * 365 * 5,
-            SIGPERIOD: 0,
-            MSPERIOD: 0,
-            SIGSTOCK: 40,
-            SIGWINDOW: 3600 * 24 * 7,
-            SIGVALIDITY: 3600 * 24 * 365,
-            MSVALIDITY: 3600 * 24 * 365,
-            SIGQTY: 5,
-            X_PERCENT: 0.9,
-            PERCENTROT: 2 / 3,
-            BLOCKSROT: 20,
-            POWDELAY: 0,
-            AVGGENTIME: 16 * 60,
-            DTDIFFEVAL: 10,
-            MEDIANTIMEBLOCKS: 20,
-            IDTYWINDOW: 3600 * 24 * 7,
-            MSWINDOW: 3600 * 24 * 7 // a week
-        },
-        DSEN_P: 1.2 // dSen proportional factor
-    },
-    BRANCHES: {
-        DEFAULT_WINDOW_SIZE: 100
-    },
-    INVALIDATE_CORE_CACHE: true,
-    WITH_SIGNATURES_AND_POW: true,
-    NO_FORK_ALLOWED: false,
-    SAFE_FACTOR: 3,
-    BLOCKS_COLLECT_THRESHOLD: 30,
-    MUTE_LOGS_DURING_UNIT_TESTS: true,
-    SANDBOX_SIZE_TRANSACTIONS: 200,
-    SANDBOX_SIZE_IDENTITIES: 5000,
-    SANDBOX_SIZE_CERTIFICATIONS: 12,
-    SANDBOX_SIZE_MEMBERSHIPS: 5000,
-    CURRENT_BLOCK_CACHE_DURATION: 10 * 1000,
-    // With `logs` command, the number of tail lines to show
-    NB_INITIAL_LINES_TO_SHOW: 100
-};
-function exact(regexpContent) {
-    return new RegExp("^" + regexpContent + "$");
-}
-//# sourceMappingURL=constants.js.map
\ No newline at end of file
diff --git a/app/lib/helpers/merkle.js b/app/lib/helpers/merkle.js
deleted file mode 100644
index b887a0e941caf79be77aba0fa38fda052f583080..0000000000000000000000000000000000000000
--- a/app/lib/helpers/merkle.js
+++ /dev/null
@@ -1,42 +0,0 @@
-"use strict";
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.processForURL = (req, merkle, valueCoroutine) => __awaiter(this, void 0, void 0, function* () {
-    // Result
-    const json = {
-        "depth": merkle.depth,
-        "nodesCount": merkle.nodes,
-        "leavesCount": merkle.levels[merkle.depth].length,
-        "root": merkle.levels[0][0] || ""
-    };
-    if (req.query.leaves) {
-        // Leaves
-        json.leaves = merkle.leaves();
-        return json;
-    }
-    else if (req.query.leaf) {
-        // Extract of a leaf
-        json.leaves = {};
-        const hashes = [req.query.leaf];
-        // This code is in a loop for historic reasons. Should be set to non-loop style.
-        const values = yield valueCoroutine(hashes);
-        hashes.forEach((hash) => {
-            json.leaf = {
-                "hash": hash,
-                "value": values[hash] || ""
-            };
-        });
-        return json;
-    }
-    else {
-        return json;
-    }
-});
-//# sourceMappingURL=merkle.js.map
\ No newline at end of file
diff --git a/app/lib/wizard.js b/app/lib/wizard.js
deleted file mode 100644
index e7e9e8974730e95ea8b6a7c912ce2e56405392e7..0000000000000000000000000000000000000000
--- a/app/lib/wizard.js
+++ /dev/null
@@ -1,105 +0,0 @@
-"use strict";
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const constants = require('./constants');
-const async = require('async');
-const inquirer = require('inquirer');
-const logger = require('./logger').NewLogger('wizard');
-class Wizard {
-    static configPoW(conf) {
-        return doTasks(['pow'], conf);
-    }
-    static configCurrency(conf) {
-        return doTasks(['currency'], conf);
-    }
-    static configUCP(conf) {
-        return doTasks(['parameters'], conf);
-    }
-}
-exports.Wizard = Wizard;
-function doTasks(todos, conf) {
-    return new Promise((res, rej) => {
-        async.forEachSeries(todos, function (task, callback) {
-            tasks[task] && tasks[task](conf, callback);
-        }, (err) => {
-            if (err)
-                return rej(err);
-            return res();
-        });
-    });
-}
-const tasks = {
-    currency: function (conf, done) {
-        return __awaiter(this, void 0, void 0, function* () {
-            const answers = yield inquirer.prompt([{
-                    type: "input",
-                    name: "currency",
-                    message: "Currency name",
-                    default: conf.currency,
-                    validate: function (input) {
-                        return input.match(/^[a-zA-Z0-9-_ ]+$/) ? true : false;
-                    }
-                }]);
-            conf.currency = answers.currency;
-            done();
-        });
-    },
-    parameters: function (conf, done) {
-        async.waterfall([
-            async.apply(simpleFloat, "Universal Dividend %growth", "c", conf),
-            async.apply(simpleInteger, "Universal Dividend period (in seconds)", "dt", conf),
-            async.apply(simpleInteger, "First Universal Dividend (UD[0]) amount", "ud0", conf),
-            async.apply(simpleInteger, "Delay between 2 certifications of a same issuer", "sigPeriod", conf),
-            async.apply(simpleInteger, "Maximum stock of valid certifications per member", "sigStock", conf),
-            async.apply(simpleInteger, "Maximum age of a non-written certification", "sigWindow", conf),
-            async.apply(simpleInteger, "Certification validity duration", "sigValidity", conf),
-            async.apply(simpleInteger, "Number of valid certifications required to be a member", "sigQty", conf),
-            async.apply(simpleInteger, "Maximum age of a non-written identity", "idtyWindow", conf),
-            async.apply(simpleInteger, "Maximum age of a non-written membership", "msWindow", conf),
-            async.apply(simpleFloat, "Percentage of sentries to be reached to match WoT distance rule", "xpercent", conf),
-            async.apply(simpleInteger, "Membership validity duration", "msValidity", conf),
-            async.apply(simpleInteger, "Number of blocks on which is computed median time", "medianTimeBlocks", conf),
-            async.apply(simpleInteger, "The average time for writing 1 block (wished time)", "avgGenTime", conf),
-            async.apply(simpleInteger, "Frequency, in number of blocks, to wait for changing common difficulty", "dtDiffEval", conf),
-            async.apply(simpleFloat, "Weight in percent for previous issuers", "percentRot", conf)
-        ], done);
-    },
-    pow: function (conf, done) {
-        async.waterfall([
-            function (next) {
-                simpleInteger("Start computation of a new block if none received since (seconds)", "powDelay", conf, next);
-            }
-        ], done);
-    }
-};
-function simpleValue(question, property, defaultValue, conf, validation, done) {
-    return __awaiter(this, void 0, void 0, function* () {
-        const answers = yield inquirer.prompt([{
-                type: "input",
-                name: property,
-                message: question,
-                default: conf[property],
-                validate: validation
-            }]);
-        conf[property] = answers[property];
-        done();
-    });
-}
-function simpleInteger(question, property, conf, done) {
-    simpleValue(question, property, conf[property], conf, function (input) {
-        return input && input.toString().match(/^[0-9]+$/) ? true : false;
-    }, done);
-}
-function simpleFloat(question, property, conf, done) {
-    simpleValue(question, property, conf[property], conf, function (input) {
-        return input && input.toString().match(/^[0-9]+(\.[0-9]+)?$/) ? true : false;
-    }, done);
-}
-//# sourceMappingURL=wizard.js.map
\ No newline at end of file