PHP WebShell
Текущая директория: /opt/BitGoJS/modules/abstract-utxo/src/transaction/descriptor
Просмотр файла: explainPsbt.ts
import * as utxolib from '@bitgo/utxo-lib';
import { ITransactionRecipient } from '@bitgo/sdk-core';
import * as coreDescriptors from '@bitgo/utxo-core/descriptor';
import { toExtendedAddressFormat } from '../recipient';
import { TransactionExplanation } from '../../abstractUtxoCoin';
function toRecipient(output: coreDescriptors.ParsedOutput, network: utxolib.Network): ITransactionRecipient {
return {
address: toExtendedAddressFormat(output.script, network),
amount: output.value.toString(),
};
}
function sumValues(arr: { value: bigint }[]): bigint {
return arr.reduce((sum, e) => sum + e.value, BigInt(0));
}
function getInputSignaturesForInputIndex(psbt: utxolib.bitgo.UtxoPsbt, inputIndex: number): number {
const { partialSig } = psbt.data.inputs[inputIndex];
if (!partialSig) {
return 0;
}
return partialSig.reduce((agg, p) => {
const valid = psbt.validateSignaturesOfInputCommon(inputIndex, p.pubkey);
return agg + (valid ? 1 : 0);
}, 0);
}
function getInputSignatures(psbt: utxolib.bitgo.UtxoPsbt): number[] {
return psbt.data.inputs.map((_, i) => getInputSignaturesForInputIndex(psbt, i));
}
export function explainPsbt(
psbt: utxolib.bitgo.UtxoPsbt,
descriptors: coreDescriptors.DescriptorMap
): TransactionExplanation {
const parsedTransaction = coreDescriptors.parse(psbt, descriptors, psbt.network);
const { inputs, outputs } = parsedTransaction;
const externalOutputs = outputs.filter((o) => o.scriptId === undefined);
const changeOutputs = outputs.filter((o) => o.scriptId !== undefined);
const fee = sumValues(inputs) - sumValues(outputs);
const inputSignatures = getInputSignatures(psbt);
return {
inputSignatures,
signatures: inputSignatures.reduce((a, b) => Math.min(a, b), Infinity),
locktime: psbt.locktime,
id: psbt.getUnsignedTx().getId(),
outputs: externalOutputs.map((o) => toRecipient(o, psbt.network)),
outputAmount: sumValues(externalOutputs).toString(),
changeOutputs: changeOutputs.map((o) => toRecipient(o, psbt.network)),
changeAmount: sumValues(changeOutputs).toString(),
fee: fee.toString(),
};
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!