PHP WebShell

Текущая директория: /opt/BitGoJS/modules/utxo-lib/test/bitgo

Просмотр файла: nonStandardHalfSigned.ts

import * as path from 'path';
import * as fs from 'fs-extra';
import * as assert from 'assert';

import { networks, Network, getNetworkName } from '../../src';
import { createTransactionFromBuffer } from '../../src/bitgo';
import { ScriptType2Of3, scriptTypes2Of3 } from '../../src/bitgo/outputScripts';
import { getDefaultCosigner } from '../../src/testutil';

import { getHalfSignedTransaction2Of3 } from '../transaction_util';
import { fixtureKeys } from '../integration_local_rpc/generate/fixtures';
import { padInputScript } from '../../src/bitgo/nonStandardHalfSigned';

async function getFixture<T>(network: Network, name: string): Promise<T> {
  const p = path.join(__dirname, 'fixtures', 'nonStandardHalfSigned', getNetworkName(network) as string, name);
  return JSON.parse(await fs.readFile(p, 'utf-8'));
}

function runTest<TNumber extends number | bigint>(scriptType: ScriptType2Of3, amountType: 'number' | 'bigint') {
  const network = networks.bitcoin;

  describe(`createTransactionFromNonStandardHalfSigned ${scriptType} ${amountType}`, function () {
    if (scriptType === 'p2tr' || scriptType === 'p2trMusig2') {
      return; // TODO: enable p2tr tests when signing is supported
    }
    fixtureKeys.forEach((signKey, pubkeyIndex) => {
      it(`parses non-standard half signed transaction pubkeyIndex=${pubkeyIndex}`, async function () {
        const standardHalfSigned = getHalfSignedTransaction2Of3<TNumber>(
          fixtureKeys,
          signKey,
          getDefaultCosigner(fixtureKeys, signKey),
          scriptType,
          network,
          { amountType }
        );

        // Fixtures can only be constructed using utxolib < 1.10
        const nonStandardHalfSigned = createTransactionFromBuffer<TNumber>(
          Buffer.from(
            await getFixture<string>(network, `nonStandardHalfSigned-${scriptType}-${pubkeyIndex}.json`),
            'hex'
          ),
          network,
          { amountType }
        );

        // The nonstandard transaction input is missing two `OP_0`
        assert.strictEqual(nonStandardHalfSigned.toBuffer().length, standardHalfSigned.toBuffer().length - 2);

        nonStandardHalfSigned.ins.forEach((input) => padInputScript(input, pubkeyIndex));

        assert.strictEqual(nonStandardHalfSigned.toBuffer().length, standardHalfSigned.toBuffer().length);
        assert.strictEqual(
          nonStandardHalfSigned.toBuffer().toString('hex'),
          standardHalfSigned.toBuffer().toString('hex')
        );
      });
    });
  });
}

describe('Non-Standard Half-Signed Transactions', function () {
  scriptTypes2Of3.forEach((scriptType) => runTest<number>(scriptType as ScriptType2Of3, 'number'));
  scriptTypes2Of3.forEach((scriptType) => runTest<bigint>(scriptType as ScriptType2Of3, 'bigint'));
});

Выполнить команду


Для локальной разработки. Не используйте в интернете!