PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/@bitgo-forks/avalanchejs/src/vms/avm/utxoCalculationFns
Просмотр файла: useAvmAndCorethUTXOs.ts
import type { UTXOCalculationState } from '../../utils/calculateSpend';
import {
TransferableInput,
TransferableOutput,
} from '../../../serializable/avax';
import {
OutputOwners,
TransferOutput,
} from '../../../serializable/fxs/secp256k1';
import { BigIntPr, Int } from '../../../serializable/primitives';
import { addressesFromBytes, isTransferOut } from '../../../utils';
import { bigIntMin } from '../../../utils/bigintMath';
import { verifySignaturesMatch } from '../../../vms/utils/calculateSpend/utils';
// UTXO Spend for coreth/AVM UTXOs
export const useAvmAndCorethUTXOs = ({
amountsToBurn,
utxos,
options,
changeOutputs,
inputUTXOs,
fromAddresses,
inputs,
...state
}: UTXOCalculationState): UTXOCalculationState => {
const changeOwner = new OutputOwners(
new BigIntPr(0n),
new Int(options.threshold),
addressesFromBytes(options.changeAddresses),
);
verifySignaturesMatch(
utxos
.filter((utxo) => !!amountsToBurn.get(utxo.assetId.toString()))
// We only support burning [secp256k1fx.TransferOutput]s.
.filter((utxo) => !!isTransferOut(utxo.output as TransferOutput)),
(utxo) => utxo.output as TransferOutput,
fromAddresses,
options,
).forEach(({ sigData, data: utxo }) => {
const utxoTransferout = utxo.output as TransferOutput;
const remainingAmountToBurn =
amountsToBurn.get(utxo.assetId.toString()) ?? 0n;
const amountToBurn = bigIntMin(
remainingAmountToBurn,
utxoTransferout.amt.value(),
);
// if nothing left to burn then lets skip the rest
if (!amountToBurn) return;
amountsToBurn.set(
utxo.assetId.toString(),
remainingAmountToBurn - amountToBurn,
);
inputs.push(
TransferableInput.fromUtxoAndSigindicies(utxo, sigData.sigIndicies),
);
inputUTXOs.push(utxo);
const remainingAmount = utxoTransferout.amt.value() - amountToBurn;
if (remainingAmount > 0) {
changeOutputs.push(
new TransferableOutput(
utxo.assetId,
new TransferOutput(new BigIntPr(remainingAmount), changeOwner),
),
);
}
});
return {
utxos,
fromAddresses,
options,
...state,
amountsToBurn,
inputs,
changeOutputs,
inputUTXOs,
};
};
Выполнить команду
Для локальной разработки. Не используйте в интернете!