PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-staking/dist/test/unit
Просмотр файла: transaction.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
const assert = __importStar(require("assert"));
const utxolib = __importStar(require("@bitgo/utxo-lib"));
const src_1 = require("../../src");
describe('transactions', function () {
describe('fixed wallets', function () {
const rootWalletKeys = utxolib.testutil.getDefaultWalletKeys();
const network = utxolib.networks.bitcoin;
const chain = 20;
const index = 0;
const changeAddress = utxolib.address.fromOutputScript(utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(chain, index).publicKeys, 'p2wsh', network).scriptPubKey, network);
const changeAddressInfo = { chain: chain, index, address: changeAddress };
const unspents = utxolib.testutil.mockUnspents(rootWalletKeys, ['p2sh', 'p2wsh'], BigInt(1e8), network);
const outputs = [
{
script: utxolib.bitgo.outputScripts.createOutputScript2of3(rootWalletKeys.deriveForChainAndIndex(40, 0).publicKeys, 'p2trMusig2', network).scriptPubKey,
value: BigInt(1e7),
},
];
it('should fail if fee rate is negative', function () {
assert.throws(() => {
(0, src_1.buildFixedWalletStakingPsbt)({
rootWalletKeys,
unspents,
outputs,
changeAddressInfo,
feeRateSatKB: 999,
network,
});
}, /Fee rate must be at least 1 sat\/vbyte/);
});
it('should fail if the changeAddressInfo does not match the derived change script', function () {
assert.throws(() => {
(0, src_1.buildFixedWalletStakingPsbt)({
rootWalletKeys,
unspents,
outputs,
changeAddressInfo: { ...changeAddressInfo, index: 1 },
feeRateSatKB: 1000,
network,
});
}, /Change address info does not match the derived change script/);
});
it('should fail if there are no unspents or outputs', function () {
assert.throws(() => {
(0, src_1.buildFixedWalletStakingPsbt)({
rootWalletKeys,
unspents: [],
outputs: [],
changeAddressInfo,
feeRateSatKB: 1000,
network,
});
}, /Must have at least one input and one output/);
});
it('should fail if the input amount cannot cover the staking amount and the fee', function () {
assert.throws(() => {
(0, src_1.buildFixedWalletStakingPsbt)({
rootWalletKeys,
unspents: unspents.slice(0, 1),
outputs: [
{ script: outputs[0].script, value: unspents.reduce((sum, unspent) => sum + unspent.value, BigInt(0)) },
],
changeAddressInfo,
feeRateSatKB: 1000,
network,
});
}, /Input amount \d+ cannot cover the staking amount \d+ and the fee: \d+/);
});
it('should be able to create a psbt for a fixed wallet', function () {
const psbt = (0, src_1.buildFixedWalletStakingPsbt)({
rootWalletKeys,
unspents,
outputs,
changeAddressInfo,
feeRateSatKB: 1000,
network,
});
assert.deepStrictEqual(psbt.data.inputs.length, 2);
assert.deepStrictEqual(psbt.data.outputs.length, 2);
assert.deepStrictEqual(psbt.txOutputs[0].script, outputs[0].script);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFFakMseURBQTJDO0FBRTNDLG1DQUF3RDtBQUV4RCxRQUFRLENBQUMsY0FBYyxFQUFFO0lBQ3ZCLFFBQVEsQ0FBQyxlQUFlLEVBQUU7UUFDeEIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQy9ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDaEIsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FDcEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQ2hELGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsVUFBVSxFQUM5RCxPQUFPLEVBQ1AsT0FBTyxDQUNSLENBQUMsWUFBWSxFQUNkLE9BQU8sQ0FDUixDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFnQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFFckcsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQzVDLGNBQWMsRUFDZCxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFDakIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUNYLE9BQU8sQ0FDaUMsQ0FBQztRQUUzQyxNQUFNLE9BQU8sR0FBRztZQUNkO2dCQUNFLE1BQU0sRUFBRSxPQUFPLENBQUMsS0FBSyxD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QUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5cbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgYnVpbGRGaXhlZFdhbGxldFN0YWtpbmdQc2J0IH0gZnJvbSAnLi4vLi4vc3JjJztcblxuZGVzY3JpYmUoJ3RyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ2ZpeGVkIHdhbGxldHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSB1dHhvbGliLnRlc3R1dGlsLmdldERlZmF1bHRXYWxsZXRLZXlzKCk7XG4gICAgY29uc3QgbmV0d29yayA9IHV0eG9saWIubmV0d29ya3MuYml0Y29pbjtcbiAgICBjb25zdCBjaGFpbiA9IDIwO1xuICAgIGNvbnN0IGluZGV4ID0gMDtcbiAgICBjb25zdCBjaGFuZ2VBZGRyZXNzID0gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoXG4gICAgICB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhcbiAgICAgICAgcm9vdFdhbGxldEtleXMuZGVyaXZlRm9yQ2hhaW5BbmRJbmRleChjaGFpbiwgaW5kZXgpLnB1YmxpY0tleXMsXG4gICAgICAgICdwMndzaCcsXG4gICAgICAgIG5ldHdvcmtcbiAgICAgICkuc2NyaXB0UHViS2V5LFxuICAgICAgbmV0d29ya1xuICAgICk7XG4gICAgY29uc3QgY2hhbmdlQWRkcmVzc0luZm8gPSB7IGNoYWluOiBjaGFpbiBhcyB1dHhvbGliLmJpdGdvLkNoYWluQ29kZSwgaW5kZXgsIGFkZHJlc3M6IGNoYW5nZUFkZHJlc3MgfTtcblxuICAgIGNvbnN0IHVuc3BlbnRzID0gdXR4b2xpYi50ZXN0dXRpbC5tb2NrVW5zcGVudHMoXG4gICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgIFsncDJzaCcsICdwMndzaCddLFxuICAgICAgQmlnSW50KDFlOCksXG4gICAgICBuZXR3b3JrXG4gICAgKSBhcyB1dHhvbGliLmJpdGdvLldhbGxldFVuc3BlbnQ8YmlnaW50PltdO1xuXG4gICAgY29uc3Qgb3V0cHV0cyA9IFtcbiAgICAgIHtcbiAgICAgICAgc2NyaXB0OiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuY3JlYXRlT3V0cHV0U2NyaXB0Mm9mMyhcbiAgICAgICAgICByb290V2FsbGV0S2V5cy5kZXJpdmVGb3JDaGFpbkFuZEluZGV4KDQwLCAwKS5wdWJsaWNLZXlzLFxuICAgICAgICAgICdwMnRyTXVzaWcyJyxcbiAgICAgICAgICBuZXR3b3JrXG4gICAgICAgICkuc2NyaXB0UHViS2V5LFxuICAgICAgICB2YWx1ZTogQmlnSW50KDFlNyksXG4gICAgICB9LFxuICAgIF07XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgZmVlIHJhdGUgaXMgbmVnYXRpdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRGaXhlZFdhbGxldFN0YWtpbmdQc2J0KHtcbiAgICAgICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgICAgICB1bnNwZW50cyxcbiAgICAgICAgICBvdXRwdXRzLFxuICAgICAgICAgIGNoYW5nZUFkZHJlc3NJbmZvLFxuICAgICAgICAgIGZlZVJhdGVTYXRLQjogOTk5LFxuICAgICAgICAgIG5ldHdvcmssXG4gICAgICAgIH0pO1xuICAgICAgfSwgL0ZlZSByYXRlIG11c3QgYmUgYXQgbGVhc3QgMSBzYXRcXC92Ynl0ZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIGlmIHRoZSBjaGFuZ2VBZGRyZXNzSW5mbyBkb2VzIG5vdCBtYXRjaCB0aGUgZGVyaXZlZCBjaGFuZ2Ugc2NyaXB0JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkRml4ZWRXYWxsZXRTdGFraW5nUHNidCh7XG4gICAgICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAgICAgdW5zcGVudHMsXG4gICAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgICBjaGFuZ2VBZGRyZXNzSW5mbzogeyAuLi5jaGFuZ2VBZGRyZXNzSW5mbywgaW5kZXg6IDEgfSxcbiAgICAgICAgICBmZWVSYXRlU2F0S0I6IDEwMDAsXG4gICAgICAgICAgbmV0d29yayxcbiAgICAgICAgfSk7XG4gICAgICB9LCAvQ2hhbmdlIGFkZHJlc3MgaW5mbyBkb2VzIG5vdCBtYXRjaCB0aGUgZGVyaXZlZCBjaGFuZ2Ugc2NyaXB0Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgdGhlcmUgYXJlIG5vIHVuc3BlbnRzIG9yIG91dHB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRGaXhlZFdhbGxldFN0YWtpbmdQc2J0KHtcbiAgICAgICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgICAgICB1bnNwZW50czogW10sXG4gICAgICAgICAgb3V0cHV0czogW10sXG4gICAgICAgICAgY2hhbmdlQWRkcmVzc0luZm8sXG4gICAgICAgICAgZmVlUmF0ZVNhdEtCOiAxMDAwLFxuICAgICAgICAgIG5ldHdvcmssXG4gICAgICAgIH0pO1xuICAgICAgfSwgL011c3QgaGF2ZSBhdCBsZWFzdCBvbmUgaW5wdXQgYW5kIG9uZSBvdXRwdXQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiB0aGUgaW5wdXQgYW1vdW50IGNhbm5vdCBjb3ZlciB0aGUgc3Rha2luZyBhbW91bnQgYW5kIHRoZSBmZWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRGaXhlZFdhbGxldFN0YWtpbmdQc2J0KHtcbiAgICAgICAgICByb290V2FsbGV0S2V5cyxcbiAgICAgICAgICB1bnNwZW50czogdW5zcGVudHMuc2xpY2UoMCwgMSksXG4gICAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgICAgeyBzY3JpcHQ6IG91dHB1dHNbMF0uc2NyaXB0LCB2YWx1ZTogdW5zcGVudHMucmVkdWNlKChzdW0sIHVuc3BlbnQpID0+IHN1bSArIHVuc3BlbnQudmFsdWUsIEJpZ0ludCgwKSkgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGNoYW5nZUFkZHJlc3NJbmZvLFxuICAgICAgICAgIGZlZVJhdGVTYXRLQjogMTAwMCxcbiAgICAgICAgICBuZXR3b3JrLFxuICAgICAgICB9KTtcbiAgICAgIH0sIC9JbnB1dCBhbW91bnQgXFxkKyBjYW5ub3QgY292ZXIgdGhlIHN0YWtpbmcgYW1vdW50IFxcZCsgYW5kICB0aGUgZmVlOiBcXGQrLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEgcHNidCBmb3IgYSBmaXhlZCB3YWxsZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwc2J0ID0gYnVpbGRGaXhlZFdhbGxldFN0YWtpbmdQc2J0KHtcbiAgICAgICAgcm9vdFdhbGxldEtleXMsXG4gICAgICAgIHVuc3BlbnRzLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgICBjaGFuZ2VBZGRyZXNzSW5mbyxcbiAgICAgICAgZmVlUmF0ZVNhdEtCOiAxMDAwLFxuICAgICAgICBuZXR3b3JrLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocHNidC5kYXRhLmlucHV0cy5sZW5ndGgsIDIpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwc2J0LmRhdGEub3V0cHV0cy5sZW5ndGgsIDIpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwc2J0LnR4T3V0cHV0c1swXS5zY3JpcHQsIG91dHB1dHNbMF0uc2NyaXB0KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!