Skip to content

Commit

Permalink
fix: correctly parse adminKeys from config
Browse files Browse the repository at this point in the history
Signed-off-by: Ivo Yankov <[email protected]>
  • Loading branch information
Ivo-Yankov committed Jan 21, 2025
1 parent e87135b commit 84bef06
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 17 deletions.
1 change: 1 addition & 0 deletions src/commands/flags.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1733,6 +1733,7 @@ export class Flags {

static readonly allFlags: CommandFlag[] = [
Flags.accountId,
Flags.adminKey,
Flags.amount,
Flags.apiPermissionProperties,
Flags.app,
Expand Down
2 changes: 1 addition & 1 deletion src/commands/node/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -839,7 +839,7 @@ export class NodeCommandHandlers implements CommandHandlers {
this.tasks.identifyNetworkPods(),
this.tasks.fetchPlatformSoftware('nodeAliases'),
// TODO: change to isGenesis: true once we are ready to use genesis-network.json: this.tasks.setupNetworkNodes('nodeAliases', true),
this.tasks.setupNetworkNodes('nodeAliases', true),
this.tasks.setupNetworkNodes('nodeAliases', false),
this.changeAllNodeStates(ConsensusNodeStates.SETUP),
],
{
Expand Down
6 changes: 3 additions & 3 deletions src/commands/node/tasks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -964,13 +964,13 @@ export class NodeCommandTasks {
) {
const networkNodeServiceMap = await this.accountManager.getNodeServiceMap(namespace);

const adminKeys = splitFlagInput(this.configManager.getFlag(flags.adminKey));
const genesisNetworkData = await GenesisNetworkDataConstructor.initialize(
const adminKeys = splitFlagInput(this.configManager.getFlag(flags.adminKey));
const genesisNetworkData = await GenesisNetworkDataConstructor.initialize(
nodeAliases,
this.keyManager,
keysDir,
networkNodeServiceMap,
adminKeys
adminKeys,
);

const genesisNetworkJson = path.join(stagingDir, 'genesis-network.json');
Expand Down
34 changes: 21 additions & 13 deletions src/core/genesis_network_models/genesis_network_data_constructor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ import {GenesisNetworkRosterEntryDataWrapper} from './genesis_network_roster_ent
import {Templates} from '../templates.js';
import path from 'path';
import type {NetworkNodeServices} from '../network_node_services.js';
import {SoloError} from "../errors.js";
import {SoloError} from '../errors.js';
import {Flags as flags} from '../../commands/flags.js';

/**
* Used to construct the nodes data and convert them to JSON
Expand All @@ -39,7 +40,7 @@ export class GenesisNetworkDataConstructor implements ToJSON {
private readonly keyManager: KeyManager,
private readonly keysDir: string,
private readonly networkNodeServiceMap: Map<string, NetworkNodeServices>,
adminKeyMap: Map<NodeAlias, string>
adminKeyMap: Map<NodeAlias, string>,
) {
nodeAliases.forEach(nodeAlias => {
const adminPrivateKey = PrivateKey.fromStringED25519(adminKeyMap[nodeAlias] || constants.GENESIS_KEY);
Expand Down Expand Up @@ -76,21 +77,28 @@ export class GenesisNetworkDataConstructor implements ToJSON {
keyManager: KeyManager,
keysDir: string,
networkNodeServiceMap: Map<string, NetworkNodeServices>,
adminKeys: string[]
adminKeys: string[],
): Promise<GenesisNetworkDataConstructor> {

const adminKeyMap: Map<NodeAlias, string> = new Map();
if (adminKeys.length > 0) {
if (adminKeys.length !== nodeAliases.length) {
throw new SoloError('Provide an adminKey for every node');
}

adminKeys.forEach((adminKey, i) => {
adminKeyMap[nodeAliases[i]] = adminKey
})

// If admin keys are passed and if it is not the default value from flags then validate and build the adminKeyMap
if (adminKeys.length > 0 && adminKeys.length !== 1 && adminKeys[0] !== flags.adminKey.definition.defaultValue) {
if (adminKeys.length !== nodeAliases.length) {
throw new SoloError('Provide an adminKey for every node');
}

adminKeys.forEach((adminKey, i) => {
adminKeyMap[nodeAliases[i]] = adminKey;
});
}

const instance = new GenesisNetworkDataConstructor(nodeAliases, keyManager, keysDir, networkNodeServiceMap, adminKeyMap);
const instance = new GenesisNetworkDataConstructor(
nodeAliases,
keyManager,
keysDir,
networkNodeServiceMap,
adminKeyMap,
);

await instance.load();

Expand Down

0 comments on commit 84bef06

Please sign in to comment.