1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | var __importStar = (this && this.__importStar) || function (mod) {
|
6 | if (mod && mod.__esModule) return mod;
|
7 | var result = {};
|
8 | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
9 | result["default"] = mod;
|
10 | return result;
|
11 | };
|
12 | Object.defineProperty(exports, "__esModule", { value: true });
|
13 | const deepmerge_1 = __importDefault(require("deepmerge"));
|
14 | const lodash_camelcase_1 = __importDefault(require("lodash.camelcase"));
|
15 | const lodash_get_1 = __importDefault(require("lodash.get"));
|
16 | const lodash_set_1 = __importDefault(require("lodash.set"));
|
17 | const enums_1 = require("../enums");
|
18 | const errors_1 = require("../errors");
|
19 | const networks = __importStar(require("../networks"));
|
20 | const fee_1 = require("./fee");
|
21 | class ConfigManager {
|
22 | constructor() {
|
23 | this.setConfig(networks.devnet);
|
24 | }
|
25 | setConfig(config) {
|
26 | this.config = {
|
27 | network: config.network,
|
28 | exceptions: config.exceptions,
|
29 | milestones: config.milestones,
|
30 | genesisBlock: config.genesisBlock,
|
31 | };
|
32 | this.validateMilestones();
|
33 | this.buildConstants();
|
34 | this.buildFees();
|
35 | }
|
36 | setFromPreset(network) {
|
37 | this.setConfig(this.getPreset(network));
|
38 | }
|
39 | getPreset(network) {
|
40 | return networks[network.toLowerCase()];
|
41 | }
|
42 | all() {
|
43 | return this.config;
|
44 | }
|
45 | set(key, value) {
|
46 | lodash_set_1.default(this.config, key, value);
|
47 | }
|
48 | get(key) {
|
49 | return lodash_get_1.default(this.config, key);
|
50 | }
|
51 | setHeight(value) {
|
52 | this.height = value;
|
53 | this.buildFees();
|
54 | }
|
55 | getHeight() {
|
56 | return this.height;
|
57 | }
|
58 | isNewMilestone() {
|
59 | return this.milestones.map(milestone => milestone.height).includes(this.height);
|
60 | }
|
61 | getMilestone(height) {
|
62 | if (!height && this.height) {
|
63 | height = this.height;
|
64 | }
|
65 | if (!height) {
|
66 | height = 1;
|
67 | }
|
68 | while (this.milestone.index < this.milestones.length - 1 &&
|
69 | height >= this.milestones[this.milestone.index + 1].height) {
|
70 | this.milestone.index++;
|
71 | this.milestone.data = this.milestones[this.milestone.index];
|
72 | }
|
73 | while (height < this.milestones[this.milestone.index].height) {
|
74 | this.milestone.index--;
|
75 | this.milestone.data = this.milestones[this.milestone.index];
|
76 | }
|
77 | return this.milestone.data;
|
78 | }
|
79 | getMilestones() {
|
80 | return this.milestones;
|
81 | }
|
82 | buildConstants() {
|
83 | this.milestones = this.config.milestones.sort((a, b) => a.height - b.height);
|
84 | this.milestone = {
|
85 | index: 0,
|
86 | data: this.milestones[0],
|
87 | };
|
88 | let lastMerged = 0;
|
89 | while (lastMerged < this.milestones.length - 1) {
|
90 | this.milestones[lastMerged + 1] = deepmerge_1.default(this.milestones[lastMerged], this.milestones[lastMerged + 1]);
|
91 | lastMerged++;
|
92 | }
|
93 | }
|
94 | validateMilestones() {
|
95 | const delegateMilestones = this.config.milestones
|
96 | .sort((a, b) => a.height - b.height)
|
97 | .filter(milestone => milestone.activeDelegates);
|
98 | for (let i = 1; i < delegateMilestones.length; i++) {
|
99 | const previous = delegateMilestones[i - 1];
|
100 | const current = delegateMilestones[i];
|
101 | if (previous.activeDelegates === current.activeDelegates) {
|
102 | continue;
|
103 | }
|
104 | if ((current.height - previous.height) % previous.activeDelegates !== 0) {
|
105 | throw new errors_1.InvalidMilestoneConfigurationError(`Bad milestone at height: ${current.height}. The number of delegates can only be changed at the beginning of a new round.`);
|
106 | }
|
107 | }
|
108 | }
|
109 | buildFees() {
|
110 | for (const key of Object.keys(enums_1.TransactionTypes)) {
|
111 | fee_1.feeManager.set(enums_1.TransactionTypes[key], this.getMilestone().fees.staticFees[lodash_camelcase_1.default(key)]);
|
112 | }
|
113 | }
|
114 | }
|
115 | exports.ConfigManager = ConfigManager;
|
116 | exports.configManager = new ConfigManager();
|
117 |
|
\ | No newline at end of file |