@coolwallet/kas
Version:
52 lines (46 loc) • 1.82 kB
text/typescript
import { tx } from '@coolwallet/core';
import { SignTxType } from './config/types';
import { SignatureType } from '@coolwallet/core/lib/transaction';
import { Transaction } from './transaction';
import {
validateDustThreshold,
validateInputs,
validateOutput,
validateChange,
validateAmountCanDisplayOnProCard,
validateTransaction,
} from './utils/validate';
import * as param from './config/param';
import { getTransferArgumentBuffer } from './utils/hash';
import { getSigningActions, getSigningPreActions } from './utils/scriptUtil';
export default async function signTransferTransaction(signTxData: SignTxType): Promise<string> {
const { transport, appId, appPrivateKey, inputs, output, change, version = 0, confirmCB, authorizedCB } = signTxData;
validateInputs(inputs);
validateOutput(output, !!change);
validateAmountCanDisplayOnProCard(output.value, 8);
validateDustThreshold(output.value);
if (change) validateChange(change);
const transaction = Transaction.fromTxData({
version,
inputs,
output,
change,
});
validateTransaction(transaction);
const script = param.TRANSFER.script + param.TRANSFER.signature;
const argumentBuf = await getTransferArgumentBuffer(transaction);
const inputArgument = argumentBuf.toString('hex');
const { preActions } = getSigningPreActions(transport, appId, appPrivateKey, script, inputArgument);
const { actions } = await getSigningActions(transport, appId, appPrivateKey, transaction);
const signatures = (await tx.flow.getSignaturesFromCoolWalletV2(
transport,
preActions,
actions,
SignatureType.Schnorr,
confirmCB,
authorizedCB,
)) as Array<Buffer>;
transaction.addSignatures(signatures);
const message = transaction.getMessage();
return Buffer.from(message, 'utf-8').toString('hex');
}