UNPKG

4.28 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5var __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};
12Object.defineProperty(exports, "__esModule", { value: true });
13const deepmerge_1 = __importDefault(require("deepmerge"));
14const lodash_camelcase_1 = __importDefault(require("lodash.camelcase"));
15const lodash_get_1 = __importDefault(require("lodash.get"));
16const lodash_set_1 = __importDefault(require("lodash.set"));
17const enums_1 = require("../enums");
18const errors_1 = require("../errors");
19const networks = __importStar(require("../networks"));
20const fee_1 = require("./fee");
21class 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}
115exports.ConfigManager = ConfigManager;
116exports.configManager = new ConfigManager();
117//# sourceMappingURL=config.js.map
\No newline at end of file