All files / src register_second_passphrase.ts

100% Statements 18/18
100% Branches 4/4
100% Functions 2/2
100% Lines 18/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68                            3x 3x   3x   3x                 3x             35x 1x     34x     3x     35x 34x 34x   34x             34x 9x     25x     25x   25x    
/*
 * Copyright © 2019 Lisk Foundation
 *
 * See the LICENSE file at the top-level directory of this distribution
 * for licensing information.
 *
 * Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation,
 * no part of this software, including this file, may be copied, modified,
 * propagated, or distributed except according to the terms contained in the
 * LICENSE file.
 *
 * Removal or modification of this copyright notice is prohibited.
 *
 */
import { getKeys } from '@liskhq/lisk-cryptography';
import { validateNetworkIdentifier } from '@liskhq/lisk-validator';
 
import { SecondSignatureTransaction } from './9_second_signature_transaction';
import { TransactionJSON } from './transaction_types';
import { createBaseTransaction } from './utils';
 
export interface SecondPassphraseInputs {
	readonly passphrase?: string;
	readonly secondPassphrase: string;
	readonly timeOffset?: number;
	readonly networkIdentifier: string;
}
 
const validateInputs = ({
	secondPassphrase,
	networkIdentifier,
}: {
	readonly secondPassphrase: string;
	readonly networkIdentifier: string;
}): void => {
	if (typeof secondPassphrase !== 'string') {
		throw new Error('Please provide a secondPassphrase. Expected string.');
	}
 
	validateNetworkIdentifier(networkIdentifier);
};
 
export const registerSecondPassphrase = (
	inputs: SecondPassphraseInputs,
): Partial<TransactionJSON> => {
	validateInputs(inputs);
	const { passphrase, secondPassphrase, networkIdentifier } = inputs;
	const { publicKey } = getKeys(secondPassphrase);
 
	const transaction = {
		...createBaseTransaction(inputs),
		type: 9,
		asset: { publicKey },
		networkIdentifier,
	};
 
	if (!passphrase) {
		return transaction;
	}
 
	const secondSignatureTransaction = new SecondSignatureTransaction(
		transaction as TransactionJSON,
	);
	secondSignatureTransaction.sign(passphrase);
 
	return secondSignatureTransaction.toJSON();
};