ssv-keys
Version:
Tool for splitting a validator key into a predefined threshold of shares via Shamir-Secret-Sharing (SSS), and encrypt them with a set of operator keys.
71 lines (62 loc) • 1.86 kB
text/typescript
import { IsString, Length, ValidateNested, IsOptional, validateSync, IsNumber } from 'class-validator';
import { OperatorData } from './OperatorData';
import { IKeySharesData, IKeySharesPartialData } from './IKeySharesData';
import { OpeatorsListValidator, PublicKeyValidator, OwnerAddressValidator, OwnerNonceValidator } from './validators';
import { operatorSortedList } from '../../helpers/operator.helper';
export class KeySharesData implements IKeySharesData {
public ownerNonce?: number | null = null;
public ownerAddress?: string | null = null;
public publicKey?: string | null = null;
public operators?: OperatorData[] | null = null;
update(data: IKeySharesPartialData) {
if (data.ownerAddress) {
this.ownerAddress = data.ownerAddress;
}
if (typeof data.ownerNonce === 'number') {
this.ownerNonce = data.ownerNonce;
}
if (data.publicKey) {
this.publicKey = data.publicKey;
}
if (data.operators) {
this.operators = operatorSortedList(data.operators);
}
}
/**
* Do all possible validations.
*/
async validate(): Promise<any> {
validateSync(this);
}
/**
* Get the list of operators IDs.
*/
get operatorIds(): number[] {
if (!this.operators?.length) {
return [];
}
return this.operators.map(operator => parseInt(String(operator.id), 10));
}
/**
* Get the list of operators public keys.
*/
get operatorPublicKeys(): string[] {
if (!this.operators?.length) {
return [];
}
return this.operators.map(operator => String(operator.operatorKey));
}
}