PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@bitgo-forks/avalanchejs/src/vms/pvm/utxoCalculationFns
Просмотр файла: useSpendableLockedUTXOs.spec.ts
import { Id } from '../../../serializable/fxs/common';
import { testContext } from '../../../fixtures/context';
import {
fromAddressBytes,
testUTXOID1,
getStakeableLockoutOutput,
testUTXOID2,
} from '../../../fixtures/transactions';
import { addressesFromBytes } from '../../../utils';
import { useSpendableLockedUTXOs } from './useSpendableLockedUTXOs';
import { defaultSpendResult } from '../../utils/calculateSpend';
import type { StakeableLockOut } from '../../../serializable/pvm';
describe('src/vms/pvm/spend/useSpendableLockedUTXOs.spec.ts', () => {
it('Should do nothing if stakeable output is not locked anymore', () => {
const stakeableUtxoAmt1 = 600000000n;
const stakeableUtxoAmt2 = 700000000n;
const amountRemainingToStake = 500000000n;
const lockTime = 1n;
const { amountsToStake, changeOutputs, inputs } = useSpendableLockedUTXOs({
amountsToBurn: new Map(),
...defaultSpendResult(),
utxos: [
getStakeableLockoutOutput(testUTXOID1, stakeableUtxoAmt1, lockTime),
getStakeableLockoutOutput(testUTXOID2, stakeableUtxoAmt2, lockTime),
],
fromAddresses: addressesFromBytes(fromAddressBytes),
amountsToStake: new Map([
[testContext.avaxAssetID, amountRemainingToStake],
]), // amount remaining to stake
options: { minIssuanceTime: lockTime * 2n } as any,
});
expect(changeOutputs.length).toEqual(0);
expect(inputs.length).toEqual(0);
expect(amountsToStake.get(testContext.avaxAssetID)).toEqual(
amountRemainingToStake,
);
});
it('Should have a remaining stakeable amount and has no change', () => {
const stakeableUtxoAmt1 = 200000000n;
const stakeableUtxoAmt2 = 100000000n;
const amountRemainingToStake = 500000000n;
const { amountsToStake, changeOutputs } = useSpendableLockedUTXOs({
amountsToBurn: new Map(),
...defaultSpendResult(),
utxos: [
getStakeableLockoutOutput(testUTXOID1, stakeableUtxoAmt1),
getStakeableLockoutOutput(testUTXOID2, stakeableUtxoAmt2),
],
fromAddresses: addressesFromBytes(fromAddressBytes),
amountsToStake: new Map([
[testContext.avaxAssetID, amountRemainingToStake],
]), // amount remaining to stake
options: { minIssuanceTime: 0n } as any,
});
expect(changeOutputs.length).toEqual(0);
expect(amountsToStake.get(testContext.avaxAssetID)).toEqual(
amountRemainingToStake - stakeableUtxoAmt1 - stakeableUtxoAmt2,
);
});
it('Should have no remaining stakeable amount and change', () => {
const stakeableUtxoAmt1 = 200000000n;
const stakeableUtxoAmt2 = 400000000n;
const amountRemainingToStake = 500000000n;
const { amountsToStake, changeOutputs, inputs, inputUTXOs } =
useSpendableLockedUTXOs({
amountsToBurn: new Map(),
...defaultSpendResult(),
utxos: [
getStakeableLockoutOutput(testUTXOID1, stakeableUtxoAmt1),
getStakeableLockoutOutput(testUTXOID2, stakeableUtxoAmt2),
],
fromAddresses: addressesFromBytes(fromAddressBytes),
amountsToStake: new Map([
[testContext.avaxAssetID, amountRemainingToStake],
]), // amount remaining to stake
options: { minIssuanceTime: 0 } as any,
});
expect(changeOutputs.length).toEqual(1);
expect(changeOutputs[0].amount()).toEqual(
stakeableUtxoAmt1 + stakeableUtxoAmt2 - amountRemainingToStake,
);
expect(amountsToStake.get(testContext.avaxAssetID)).toEqual(0n);
expect(inputs).toHaveLength(2);
expect(inputs[0].utxoID.txID).toEqual(testUTXOID1);
expect(inputs[0].amount()).toEqual(stakeableUtxoAmt1);
expect(inputs[1].utxoID.txID).toEqual(testUTXOID2);
expect(inputs[1].amount()).toEqual(stakeableUtxoAmt2);
expect(inputUTXOs).toHaveLength(2);
expect(inputUTXOs[0].utxoId.txID).toEqual(testUTXOID1);
expect(
(inputUTXOs[0].output as StakeableLockOut).transferOut.amount(),
).toEqual(stakeableUtxoAmt1);
expect(inputUTXOs[1].utxoId.txID).toEqual(testUTXOID2);
expect(
(inputUTXOs[1].output as StakeableLockOut).transferOut.amount(),
).toEqual(stakeableUtxoAmt2);
});
it('Should not be affected by assets with different asset id', () => {
const stakeableUtxoAmt1 = 200000000n;
const stakeableUtxoAmt2 = 400000000n;
const amountRemainingToStake = 500000000n;
const { amountsToStake, changeOutputs } = useSpendableLockedUTXOs({
amountsToBurn: new Map(),
...defaultSpendResult(),
utxos: [
getStakeableLockoutOutput(testUTXOID1, stakeableUtxoAmt1),
getStakeableLockoutOutput(
testUTXOID1,
stakeableUtxoAmt2,
undefined,
Id.fromString('1'),
),
],
fromAddresses: addressesFromBytes(fromAddressBytes),
amountsToStake: new Map([
[testContext.avaxAssetID, amountRemainingToStake],
]), // amount remaining to stake
options: { minIssuanceTime: 0 } as any,
});
expect(changeOutputs.length).toEqual(0);
expect(amountsToStake.get(testContext.avaxAssetID)).toEqual(
amountRemainingToStake - stakeableUtxoAmt1,
);
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!