@kba-tools/genesis-tool
Version:
A forked repo from ConsenSys which helps to generate genesis block for Besu Network with xemptyBlockPeriod field.
135 lines • 13.9 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateNetworkConfig = generateNetworkConfig;
const genesis = __importStar(require("./genesisGenerate"));
const fileHandler = __importStar(require("./fileHandler"));
const nodekeys = __importStar(require("./nodeKeys"));
const besuConfig = __importStar(require("./besuConfig"));
const tessera_1 = require("./tessera");
const tesseraConfig_1 = require("./tesseraConfig");
function generateNodeConfig(numNodes, nodeType, accountPassword, curve, outputDir) {
return __awaiter(this, void 0, void 0, function* () {
const nNodes = numNodes;
const nodes = [];
for (let i = 0; i < nNodes; i++) {
const nodeData = yield nodekeys.generateNodeKeys(accountPassword, curve);
nodes.push(nodeData);
}
nodes.map((v, i) => {
fileHandler.writeNodeKeys(outputDir + "/" + nodeType + i.toString(), v);
});
return nodes;
});
}
function generateNetworkConfig(quorumConfig) {
return __awaiter(this, void 0, void 0, function* () {
// Create a new root folder each time - dont destroy anything that existed
const OUTPUT_BASE_DIR = `${quorumConfig.outputPath}`;
const ts = quorumConfig.noOutputTimestamp
? ""
: fileHandler.createTimestamp();
const outputDir = OUTPUT_BASE_DIR + "/" + ts;
fileHandler.setupOutputFolder(outputDir, quorumConfig);
console.log("Creating bootnodes...");
const bootnodes = yield generateNodeConfig(quorumConfig.bootnodes, "bootnode", quorumConfig.accountPassword, quorumConfig.curve, outputDir);
console.log("Creating members...");
const members = yield generateNodeConfig(quorumConfig.members, "member", quorumConfig.accountPassword, quorumConfig.curve, outputDir);
if (quorumConfig.tesseraEnabled) {
if (quorumConfig.tesseraPassword === "")
console.log("No password entered. Will not encrypt private key.");
console.log("Generating tessera keys...");
for (let val = 0; val < quorumConfig.members; val++) {
const { privateKeyPath, publicKeyPath } = yield (0, tessera_1.tesseraOutput)(quorumConfig.tesseraPassword, outputDir, val);
(0, tesseraConfig_1.createTesseraConfig)(privateKeyPath, publicKeyPath, quorumConfig, outputDir, val);
}
}
console.log("Creating validators...");
const validators = yield generateNodeConfig(quorumConfig.validators, "validator", quorumConfig.accountPassword, quorumConfig.curve, outputDir);
const validatorAddressBuffers = validators.map((v) => v.address);
const extraData = nodekeys.generateExtraDataString(validatorAddressBuffers, quorumConfig.consensus);
// concatenate NodeKeys array to pass into the Genesis functions
const NodeKeyConcat = bootnodes.concat(members, validators);
// static nodes generation
const allNodes = validators.concat(bootnodes, members);
const allNodesEnodes = allNodes.map((_) => _.publicKey.toString("hex"));
const consensus = quorumConfig.consensus;
switch (consensus) {
case "clique" /* Consensus.clique */: {
fileHandler.createStaticNodes(outputDir, allNodesEnodes, true, true);
genesis.createBesuGenesis(outputDir, quorumConfig, extraData, NodeKeyConcat);
besuConfig.createBesuConfig(bootnodes, quorumConfig, outputDir);
// goquorum requires the validator accounts addresses not the validator nodekey addresses
const validatorAccountAddresses = validators.map((v) => v.ethAccount.address.replace("0x", ""));
const quorumExtraData = nodekeys.generateQuorumCliqueExtraDataString(validatorAccountAddresses);
genesis.createGoQuorumGenesis(outputDir, quorumConfig, quorumExtraData, NodeKeyConcat);
fileHandler.createBesuPermissionsFile(outputDir, allNodesEnodes);
fileHandler.createGoQuorumPermissionsFile(outputDir, allNodesEnodes);
break;
}
case "raft" /* Consensus.raft */: {
fileHandler.createStaticNodes(outputDir, allNodesEnodes, false, true);
genesis.createGoQuorumGenesis(outputDir, quorumConfig, extraData, NodeKeyConcat);
fileHandler.createGoQuorumPermissionsFile(outputDir, allNodesEnodes);
break;
}
case "ibft" /* Consensus.ibft */: {
fileHandler.createStaticNodes(outputDir, allNodesEnodes, false, true);
genesis.createGoQuorumGenesis(outputDir, quorumConfig, extraData, NodeKeyConcat);
fileHandler.createGoQuorumPermissionsFile(outputDir, allNodesEnodes);
break;
}
case "ibft2" /* Consensus.ibft2 */: {
fileHandler.createStaticNodes(outputDir, allNodesEnodes, true, false);
genesis.createBesuGenesis(outputDir, quorumConfig, extraData, NodeKeyConcat);
besuConfig.createBesuConfig(bootnodes, quorumConfig, outputDir);
fileHandler.createBesuPermissionsFile(outputDir, allNodesEnodes);
break;
}
// qbft
default: {
fileHandler.createStaticNodes(outputDir, allNodesEnodes, true, true);
genesis.createGoQuorumGenesis(outputDir, quorumConfig, extraData, NodeKeyConcat);
genesis.createBesuGenesis(outputDir, quorumConfig, extraData, NodeKeyConcat);
besuConfig.createBesuConfig(bootnodes, quorumConfig, outputDir);
fileHandler.createBesuPermissionsFile(outputDir, allNodesEnodes);
fileHandler.createGoQuorumPermissionsFile(outputDir, allNodesEnodes);
break;
}
}
console.log("Artifacts in folder: " + outputDir);
return outputDir;
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya0dlbmVyYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9uZXR3b3JrR2VuZXJhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCQSxzREE4SkM7QUF4TEQsMkRBQTZDO0FBQzdDLDJEQUE2QztBQUM3QyxxREFBdUM7QUFDdkMseURBQTJDO0FBQzNDLHVDQUEwQztBQUMxQyxtREFBc0Q7QUFFdEQsU0FBZSxrQkFBa0IsQ0FDL0IsUUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsZUFBdUIsRUFDdkIsS0FBa0IsRUFDbEIsU0FBaUI7O1FBRWpCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBZSxFQUFFLENBQUM7UUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2pCLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQUE7QUFFRCxTQUFzQixxQkFBcUIsQ0FDekMsWUFBMEI7O1FBRTFCLDBFQUEwRTtRQUMxRSxNQUFNLGVBQWUsR0FBRyxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNy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