PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-lib/dist/test/address
Просмотр файла: address.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.readFixture = readFixture;
exports.getOutputScripts = getOutputScripts;
const path = require("path");
const assert = require("assert");
const utxolib = require("../../src");
const src_1 = require("../../src");
const testutil_1 = require("../../src/testutil");
const outputScripts_util_1 = require("../integration_local_rpc/generate/outputScripts.util");
const fixtureUtil = require("../fixture.util");
async function readFixture(network, suffix, defaultValue) {
return await fixtureUtil.readFixture(path.join(__dirname, 'fixtures', `${utxolib.getNetworkName(network)}${suffix}.json`), defaultValue);
}
const keyTriples = Array.from({ length: 4 }).map((v, i) => (0, testutil_1.getKeyTriple)(`${i}`));
function getOutputScripts(network) {
return keyTriples.flatMap((keys) => outputScripts_util_1.scriptTypes
.filter((t) => (0, outputScripts_util_1.isSupportedDepositType)(network, t))
.map((scriptType) => {
return [scriptType, (0, outputScripts_util_1.createScriptPubKey)(keys, scriptType, network)];
}));
}
function runWithAddressFormat(network, addressFormat) {
describe(`network=${(0, src_1.getNetworkName)(network)}` + (addressFormat ? ` addressFormat=${addressFormat}` : ''), function () {
let vectors;
let refVectors;
before('prepare fixtures', async function () {
vectors = getOutputScripts(network).map(([scriptType, scriptPubKey]) => [
scriptType,
scriptPubKey.toString('hex'),
addressFormat === undefined
? utxolib.address.fromOutputScript(scriptPubKey, network)
: utxolib.addressFormat.fromOutputScriptWithFormat(scriptPubKey, addressFormat, network),
]);
refVectors = await readFixture(network, (addressFormat ?? 'default') === 'default' ? '' : `-${addressFormat}`, vectors);
});
it('matches test vectors, parses to scriptPubKeyHex, implements toCanonicalFormat', function () {
assert.strictEqual(vectors.length, refVectors.length);
vectors.forEach((v, i) => {
assert.deepStrictEqual(v, refVectors[i]);
const [, scriptPubKeyHex, address] = v;
if (!addressFormat || addressFormat === 'default') {
assert.strictEqual(utxolib.address.toOutputScript(address, network).toString('hex'), scriptPubKeyHex);
}
else {
assert.throws(() => {
utxolib.address.toOutputScript(address, network);
});
assert.strictEqual(utxolib.addressFormat.toOutputScriptWithFormat(address, addressFormat, network).toString('hex'), scriptPubKeyHex);
}
assert.strictEqual(utxolib.addressFormat.toCanonicalFormat(address, network), utxolib.address.fromOutputScript(Buffer.from(scriptPubKeyHex, 'hex'), network));
if (network.bech32 && !address.startsWith(network.bech32)) {
const { hash, version } = utxolib.address.fromBase58Check(address, network);
assert.deepStrictEqual(utxolib.address.toBase58Check(hash, version, network), address);
}
});
});
});
}
describe('Address', function () {
(0, src_1.getNetworkList)().forEach((network) => {
const formats = utxolib.addressFormat.addressFormats.filter((f) => utxolib.addressFormat.isSupportedAddressFormat(f, network));
[undefined, ...formats].forEach((f) => {
runWithAddressFormat(network, f);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvYWRkcmVzcy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLGtDQUtDO0FBSUQsNENBUUM7QUFuQ0QsNkJBQTZCO0FBQzdCLGlDQUFpQztBQUNqQyxxQ0FBcUM7QUFDckMsbUNBQTJEO0FBQzNELGlEQUFrRDtBQUVsRCw2RkFLOEQ7QUFHOUQsK0NBQStDO0FBSXhDLEtBQUssVUFBVSxXQUFXLENBQUksT0FBd0IsRUFBRSxNQUFjLEVBQUUsWUFBZTtJQUM1RixPQUFPLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxFQUNwRixZQUFZLENBQ2IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBQSx1QkFBWSxFQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWpGLFNBQWdCLGdCQUFnQixDQUFDLE9BQXdCO0lBQ3ZELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2pDLGdDQUFXO1NBQ1IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFBLDJDQUFzQixFQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNqRCxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQXdCLEVBQUU7UUFDeEMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFBLHVDQUFrQixFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFD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QUM7b0JBQzFELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM1RSxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3pGLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsUUFBUSxDQUFDLFNBQVMsRUFBRTtJQUNsQixJQUFBLG9CQUFjLEdBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNuQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNoRSxPQUFPLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDM0QsQ0FBQztRQUVGLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IGdldE5ldHdvcmtMaXN0LCBnZXROZXR3b3JrTmFtZSB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICcuLi8uLi9zcmMvdGVzdHV0aWwnO1xuXG5pbXBvcnQge1xuICBjcmVhdGVTY3JpcHRQdWJLZXksXG4gIGlzU3VwcG9ydGVkRGVwb3NpdFR5cGUsXG4gIFNjcmlwdFR5cGUsXG4gIHNjcmlwdFR5cGVzLFxufSBmcm9tICcuLi9pbnRlZ3JhdGlvbl9sb2NhbF9ycGMvZ2VuZXJhdGUvb3V0cHV0U2NyaXB0cy51dGlsJztcblxuaW1wb3J0IHsgQWRkcmVzc0Zvcm1hdCB9IGZyb20gJy4uLy4uL3NyYy9hZGRyZXNzRm9ybWF0JztcbmltcG9ydCAqIGFzIGZpeHR1cmVVdGlsIGZyb20gJy4uL2ZpeHR1cmUudXRpbCc7XG5cbmV4cG9ydCB0eXBlIEFkZHJlc3NUZXN0VmVjdG9yID0gW3NjcmlwdFR5cGU6IFNjcmlwdFR5cGUsIG91dHB1dFNjcmlwdEhleDogc3RyaW5nLCBhZGRyZXNzOiBzdHJpbmddO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZpeHR1cmU8VD4obmV0d29yazogdXR4b2xpYi5OZXR3b3JrLCBzdWZmaXg6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBhd2FpdCBmaXh0dXJlVXRpbC5yZWFkRml4dHVyZShcbiAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZml4dHVyZXMnLCBgJHt1dHhvbGliLmdldE5ldHdvcmtOYW1lKG5ldHdvcmspfSR7c3VmZml4fS5qc29uYCksXG4gICAgZGVmYXVsdFZhbHVlXG4gICk7XG59XG5cbmNvbnN0IGtleVRyaXBsZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0IH0pLm1hcCgodiwgaSkgPT4gZ2V0S2V5VHJpcGxlKGAke2l9YCkpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0U2NyaXB0cyhuZXR3b3JrOiB1dHhvbGliLk5ldHdvcmspOiBbU2NyaXB0VHlwZSwgQnVmZmVyXVtdIHtcbiAgcmV0dXJuIGtleVRyaXBsZXMuZmxhdE1hcCgoa2V5cykgPT5cbiAgICBzY3JpcHRUeXBlc1xuICAgICAgLmZpbHRlcigodCkgPT4gaXNTdXBwb3J0ZWREZXBvc2l0VHlwZShuZXR3b3JrLCB0KSlcbiAgICAgIC5tYXAoKHNjcmlwdFR5cGUpOiBbU2NyaXB0VHlwZSwgQnVmZmVyXSA9PiB7XG4gICAgICAgIHJldHVybiBbc2NyaXB0VHlwZSwgY3JlYXRlU2NyaXB0UHViS2V5KGtleXMsIHNjcmlwdFR5cGUsIG5ldHdvcmspXTtcbiAgICAgIH0pXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJ1bldpdGhBZGRyZXNzRm9ybWF0KG5ldHdvcmssIGFkZHJlc3NGb3JtYXQ/OiBBZGRyZXNzRm9ybWF0KSB7XG4gIGRlc2NyaWJlKFxuICAgIGBuZXR3b3JrPSR7Z2V0TmV0d29ya05hbWUobmV0d29yayl9YCArIChhZGRyZXNzRm9ybWF0ID8gYCBhZGRyZXNzRm9ybWF0PSR7YWRkcmVzc0Zvcm1hdH1gIDogJycpLFxuICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgIGxldCB2ZWN0b3JzOiBBZGRyZXNzVGVzdFZlY3RvcltdO1xuICAgICAgbGV0IHJlZlZlY3RvcnM6IEFkZHJlc3NUZXN0VmVjdG9yW107XG5cbiAgICAgIGJlZm9yZSgncHJlcGFyZSBmaXh0dXJlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmVjdG9ycyA9IGdldE91dHB1dFNjcmlwdHMobmV0d29yaykubWFwKFxuICAgICAgICAgIChbc2NyaXB0VHlwZSwgc2NyaXB0UHViS2V5XSk6IEFkZHJlc3NUZXN0VmVjdG9yID0+IFtcbiAgICAgICAgICAgIHNjcmlwdFR5cGUsXG4gICAgICAgICAgICBzY3JpcHRQdWJLZXkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgICAgYWRkcmVzc0Zvcm1hdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gdXR4b2xpYi5hZGRyZXNzLmZyb21PdXRwdXRTY3JpcHQoc2NyaXB0UHViS2V5LCBuZXR3b3JrKVxuICAgICAgICAgICAgICA6IHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChzY3JpcHRQdWJLZXksIGFkZHJlc3NGb3JtYXQsIG5ldHdvcmspLFxuICAgICAgICAgIF1cbiAgICAgICAgKTtcblxuICAgICAgICByZWZWZWN0b3JzID0gYXdhaXQgcmVhZEZpeHR1cmUoXG4gICAgICAgICAgbmV0d29yayxcbiAgICAgICAgICAoYWRkcmVzc0Zvcm1hdCA/PyAnZGVmYXVsdCcpID09PSAnZGVmYXVsdCcgPyAnJyA6IGAtJHthZGRyZXNzRm9ybWF0fWAsXG4gICAgICAgICAgdmVjdG9yc1xuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdtYXRjaGVzIHRlc3QgdmVjdG9ycywgcGFyc2VzIHRvIHNjcmlwdFB1YktleUhleCwgaW1wbGVtZW50cyB0b0Nhbm9uaWNhbEZvcm1hdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlY3RvcnMubGVuZ3RoLCByZWZWZWN0b3JzLmxlbmd0aCk7XG4gICAgICAgIHZlY3RvcnMuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodiwgcmVmVmVjdG9yc1tpXSk7XG4gICAgICAgICAgY29uc3QgWywgc2NyaXB0UHViS2V5SGV4LCBhZGRyZXNzXSA9IHY7XG5cbiAgICAgICAgICBpZiAoIWFkZHJlc3NGb3JtYXQgfHwgYWRkcmVzc0Zvcm1hdCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodXR4b2xpYi5hZGRyZXNzLnRvT3V0cHV0U2NyaXB0KGFkZHJlc3MsIG5ldHdvcmspLnRvU3RyaW5nKCdoZXgnKSwgc2NyaXB0UHViS2V5SGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgICAgICAgIHV0eG9saWIuYWRkcmVzcy50b091dHB1dFNjcmlwdChhZGRyZXNzLCBuZXR3b3JrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgICAgICB1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KGFkZHJlc3MsIGFkZHJlc3NGb3JtYXQsIG5ldHdvcmspLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICAgICAgc2NyaXB0UHViS2V5SGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgICAgIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC50b0Nhbm9uaWNhbEZvcm1hdChhZGRyZXNzLCBuZXR3b3JrKSxcbiAgICAgICAgICAgIHV0eG9saWIuYWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0KEJ1ZmZlci5mcm9tKHNjcmlwdFB1YktleUhleCwgJ2hleCcpLCBuZXR3b3JrKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAobmV0d29yay5iZWNoMzIgJiYgIWFkZHJlc3Muc3RhcnRzV2l0aChuZXR3b3JrLmJlY2gzMikpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaGFzaCwgdmVyc2lvbiB9ID0gdXR4b2xpYi5hZGRyZXNzLmZyb21CYXNlNThDaGVjayhhZGRyZXNzLCBuZXR3b3JrKTtcbiAgICAgICAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwodXR4b2xpYi5hZGRyZXNzLnRvQmFzZTU4Q2hlY2soaGFzaCwgdmVyc2lvbiwgbmV0d29yayksIGFkZHJlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICk7XG59XG5cbmRlc2NyaWJlKCdBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICBnZXROZXR3b3JrTGlzdCgpLmZvckVhY2goKG5ldHdvcmspID0+IHtcbiAgICBjb25zdCBmb3JtYXRzID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmFkZHJlc3NGb3JtYXRzLmZpbHRlcigoZikgPT5cbiAgICAgIHV0eG9saWIuYWRkcmVzc0Zvcm1hdC5pc1N1cHBvcnRlZEFkZHJlc3NGb3JtYXQoZiwgbmV0d29yaylcbiAgICApO1xuXG4gICAgW3VuZGVmaW5lZCwgLi4uZm9ybWF0c10uZm9yRWFjaCgoZikgPT4ge1xuICAgICAgcnVuV2l0aEFkZHJlc3NGb3JtYXQobmV0d29yaywgZik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!