PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-lib/test/bitgo/litecoin
Просмотр файла: mwebBehavior.ts
import * as assert from 'assert';
import * as path from 'path';
import * as fs from 'fs-extra';
import { networks } from '../../../src';
import {
addWalletUnspentToPsbt,
createPsbtForNetwork,
createPsbtFromTransaction,
createTransactionFromBuffer,
LitecoinPsbt,
LitecoinTransaction,
NonWitnessWalletUnspent,
} from '../../../src/bitgo';
import { getDefaultWalletKeys, mockWalletUnspent } from '../../../src/testutil';
const network = networks.litecoin;
async function getFixture<T>(name: string): Promise<T> {
const p = path.join(__dirname, 'fixtures', name);
return JSON.parse(await fs.readFile(p, 'utf-8'));
}
async function getFixtureAsBuffer(name: string): Promise<Buffer> {
return Buffer.from(await getFixture<string>(name), 'hex');
}
async function getTransaction(mweb: boolean): Promise<LitecoinTransaction<bigint>> {
return createTransactionFromBuffer(await getFixtureAsBuffer(`ltc-${mweb ? 'mweb-' : ''}transaction.json`), network, {
amountType: 'bigint',
});
}
describe('Litecoin Transaction', function () {
it('mweb transaction gets round-tripped to a non-mweb transaction', async function () {
const mweb = await getTransaction(true);
assert(mweb instanceof LitecoinTransaction);
const nonMwebFixture = await getFixture(`ltc-transaction.json`);
assert.deepStrictEqual(mweb.toHex(), nonMwebFixture);
});
it('non-mweb transaction gets round-tripped to a non-mweb transaction', async function () {
const nonMweb = await getTransaction(false);
assert(nonMweb instanceof LitecoinTransaction);
const nonMwebFixture = await getFixture(`ltc-transaction.json`);
assert.deepStrictEqual(nonMweb.toHex(), nonMwebFixture);
});
it(`mweb transaction read from hex and buffer serialize to the same fixture`, async function () {
const mweb = await getTransaction(true);
const hex: string = await getFixture(`ltc-mweb-transaction.json`);
const mwebBuffer = createTransactionFromBuffer(Buffer.from(hex, 'hex'), network, { amountType: 'bigint' });
assert.deepStrictEqual(mweb.toHex(), mwebBuffer.toHex());
});
});
describe('Litecoin Psbt', function () {
it('LitecoinPsbt can read hex of a mweb transaction', async function () {
const mwebTransaction = await getTransaction(true);
const psbt = createPsbtFromTransaction(mwebTransaction, [
{
script: Buffer.from('f955ddd1845eb0cb2c4542ff04ace2695f9f88c6b7a1ac2fba0b91662cffacc9', 'hex'),
value: BigInt(10000),
},
]);
assert(psbt instanceof LitecoinPsbt);
assert.deepStrictEqual(psbt.getUnsignedTx().toHex(), await getFixture(`ltc-transaction.json`));
});
it('can add an input to a psbt whose prev transaction has a mweb serialization', async function () {
const rootWalletKeys = getDefaultWalletKeys();
const buf = await getFixtureAsBuffer(`ltc-mweb-transaction.json`);
const tx = await createTransactionFromBuffer(buf, network, { amountType: 'bigint' });
const psbt = createPsbtForNetwork({ network });
assert(psbt instanceof LitecoinPsbt);
const u = mockWalletUnspent(network, BigInt(9500), {
chain: 0,
index: 0,
keys: rootWalletKeys,
vout: 0,
id: `${tx.getId()}:0`,
});
addWalletUnspentToPsbt(
psbt,
{
...u,
prevTx: buf,
} as NonWitnessWalletUnspent<bigint>,
rootWalletKeys,
'user',
'bitgo'
);
assert(psbt.data.inputs.length > 0);
// Check that the previous transaction buffer added does not have a MWEB flag
const prevTxBuffer = psbt.data.inputs[0].nonWitnessUtxo;
assert(prevTxBuffer);
assert.deepStrictEqual(prevTxBuffer.toString('hex'), await getFixture(`ltc-transaction.json`));
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!