PHP WebShell
Текущая директория: /opt/BitGoJS/modules/bitgo/dist/test/v2/unit/coins/utxo
Просмотр файла: descriptorAddress.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDescriptorAddress = getDescriptorAddress;
const assert = require("node:assert");
const sdk_test_1 = require("@bitgo/sdk-test");
const abstract_utxo_1 = require("@bitgo/abstract-utxo");
const utxolib = require("@bitgo/utxo-lib");
const src_1 = require("../../../../../src");
function getDescriptorAddress(d, index, network) {
const derivedScript = Buffer.from(abstract_utxo_1.descriptor.Descriptor.fromString(d, 'derivable').atDerivationIndex(index).scriptPubkey());
return utxolib.address.fromOutputScript(derivedScript, network);
}
describe('descriptor wallets', function () {
const bitgo = sdk_test_1.TestBitGo.decorate(src_1.BitGo, { env: 'mock' });
const coin = bitgo.coin('tbtc');
const xpubs = utxolib.testutil.getKeyTriple('setec astronomy').map((k) => k.neutered().toBase58());
function withChecksum(descriptor) {
return abstract_utxo_1.descriptor.Descriptor.fromString(descriptor, 'derivable').toString();
}
function getNamedDescriptor2Of2(name, a, b) {
return {
name,
value: withChecksum(`sh(multi(2,${a}/*,${b}/*))`),
signatures: [],
};
}
function getIWalletWithDescriptors(descriptors) {
return {
coinSpecific() {
return { descriptors };
},
};
}
const descFoo = getNamedDescriptor2Of2('foo', xpubs[0], xpubs[1]);
const descBar = getNamedDescriptor2Of2('bar', xpubs[1], xpubs[0]);
const addressFoo0 = getDescriptorAddress(descFoo.value, 0, coin.network);
const addressFoo1 = getDescriptorAddress(descFoo.value, 1, coin.network);
const addressBar0 = getDescriptorAddress(descBar.value, 0, coin.network);
it('has expected values', function () {
assert.deepStrictEqual([addressFoo0, addressFoo1, addressBar0], [
'2N9b1trWxMJN16mTzGJypFn6pEWfXtgh689',
'2N1YFzj4ECzcjuruaEvSzGaGGH1topMXMXZ',
'2N9oN5Kc2fLt2MrxEkuQPsy8Fg2KdrFfeKH',
]);
});
function runTestIsAddress(address, index, descriptorName, descriptorChecksum, expected) {
it(`should return ${expected} for address ${address} with index ${index} and descriptor ${descriptorName} with checksum ${descriptorChecksum}`, async function () {
const wallet = getIWalletWithDescriptors([descFoo, descBar]);
async function f() {
return coin.isWalletAddress({
address,
index,
coinSpecific: { descriptorName, descriptorChecksum },
keychains: xpubs.map((pub) => ({ pub })),
}, wallet);
}
if (expected === true) {
assert.equal(await f(), expected);
}
else {
// because isWalletAddress is stupid it actually throws instead of returning false
await assert.rejects(f, expected);
}
});
}
runTestIsAddress(addressFoo0, 0, 'foo', descFoo.value.slice(-8), true);
runTestIsAddress(addressFoo1, 0, 'foo', descFoo.value.slice(-8), /Address mismatch for descriptor/);
runTestIsAddress(addressBar0, 0, 'bar', descFoo.value.slice(-8), /Descriptor checksum mismatch/);
runTestIsAddress(addressFoo0, 0, 'bar', descBar.value.slice(-8), /Address mismatch for descriptor/);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvckFkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3YyL3VuaXQvY29pbnMvdXR4by9kZXNjcmlwdG9yQWRkcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLG9EQUtDO0FBZEQsc0NBQXNDO0FBRXRDLDhDQUE0QztBQUM1Qyx3REFBNkU7QUFDN0UsMkNBQTJDO0FBRzNDLDRDQUEyQztBQUUzQyxTQUFnQixvQkFBb0IsQ0FBQyxDQUFTLEVBQUUsS0FBYSxFQUFFLE9BQXdCO0lBQ3JGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQy9CLDBCQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQ3BGLENBQUM7SUFDRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7SUFDN0IsTUFBTSxLQUFLLEdBQVUsb0JBQVMsQ0FBQyxRQUFRLENBQUMsV0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQXFCLENBQUM7SUFDcEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBRW5HLFNBQVMsWUFBWSxDQUFDLFVBQWtCO1FBQ3RDLE9BQU8sMEJBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFVB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QUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3BHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsOEJBQThCLENBQUMsQ0FBQztJQUNqRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7QUFDdEcsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnbm9kZTphc3NlcnQnO1xuXG5pbXBvcnQgeyBUZXN0Qml0R28gfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQWJzdHJhY3RVdHhvQ29pbiwgZGVzY3JpcHRvciBhcyB1dHhvZCB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC11dHhvJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcbmltcG9ydCB7IElXYWxsZXQsIFdhbGxldENvaW5TcGVjaWZpYyB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB7IEJpdEdvIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlc2NyaXB0b3JBZGRyZXNzKGQ6IHN0cmluZywgaW5kZXg6IG51bWJlciwgbmV0d29yazogdXR4b2xpYi5OZXR3b3JrKTogc3RyaW5nIHtcbiAgY29uc3QgZGVyaXZlZFNjcmlwdCA9IEJ1ZmZlci5mcm9tKFxuICAgIHV0eG9kLkRlc2NyaXB0b3IuZnJvbVN0cmluZyhkLCAnZGVyaXZhYmxlJykuYXREZXJpdmF0aW9uSW5kZXgoaW5kZXgpLnNjcmlwdFB1YmtleSgpXG4gICk7XG4gIHJldHVybiB1dHhvbGliLmFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdChkZXJpdmVkU2NyaXB0LCBuZXR3b3JrKTtcbn1cblxuZGVzY3JpYmUoJ2Rlc2NyaXB0b3Igd2FsbGV0cycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYml0Z286IEJpdEdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvLCB7IGVudjogJ21vY2snIH0pO1xuICBjb25zdCBjb2luID0gYml0Z28uY29pbigndGJ0YycpIGFzIEFic3RyYWN0VXR4b0NvaW47XG4gIGNvbnN0IHhwdWJzID0gdXR4b2xpYi50ZXN0dXRpbC5nZXRLZXlUcmlwbGUoJ3NldGVjIGFzdHJvbm9teScpLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpO1xuXG4gIGZ1bmN0aW9uIHdpdGhDaGVja3N1bShkZXNjcmlwdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1dHhvZC5EZXNjcmlwdG9yLmZyb21TdHJpbmcoZGVzY3JpcHRvciwgJ2Rlcml2YWJsZScpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXROYW1lZERlc2NyaXB0b3IyT2YyKG5hbWU6IHN0cmluZywgYTogc3RyaW5nLCBiOiBzdHJpbmcpOiB1dHhvZC5OYW1lZERlc2NyaXB0b3Ige1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWU6IHdpdGhDaGVja3N1bShgc2gobXVsdGkoMiwke2F9LyosJHtifS8qKSlgKSxcbiAgICAgIHNpZ25hdHVyZXM6IFtdLFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJV2FsbGV0V2l0aERlc2NyaXB0b3JzKGRlc2NyaXB0b3JzOiB1dHhvZC5OYW1lZERlc2NyaXB0b3JbXSk6IElXYWxsZXQge1xuICAgIHJldHVybiB7XG4gICAgICBjb2luU3BlY2lmaWMoKSB7XG4gICAgICAgIHJldHVybiB7IGRlc2NyaXB0b3JzIH0gYXMgdW5rbm93biBhcyBXYWxsZXRDb2luU3BlY2lmaWM7XG4gICAgICB9LFxuICAgIH0gYXMgSVdhbGxldDtcbiAgfVxuXG4gIGNvbnN0IGRlc2NGb28gPSBnZXROYW1lZERlc2NyaXB0b3IyT2YyKCdmb28nLCB4cHVic1swXSwgeHB1YnNbMV0pO1xuICBjb25zdCBkZXNjQmFyID0gZ2V0TmFtZWREZXNjcmlwdG9yMk9mMignYmFyJywgeHB1YnNbMV0sIHhwdWJzWzBdKTtcbiAgY29uc3QgYWRkcmVzc0ZvbzAgPSBnZXREZXNjcmlwdG9yQWRkcmVzcyhkZXNjRm9vLnZhbHVlLCAwLCBjb2luLm5ldHdvcmspO1xuICBjb25zdCBhZGRyZXNzRm9vMSA9IGdldERlc2NyaXB0b3JBZGRyZXNzKGRlc2NGb28udmFsdWUsIDEsIGNvaW4ubmV0d29yayk7XG4gIGNvbnN0IGFkZHJlc3NCYXIwID0gZ2V0RGVzY3JpcHRvckFkZHJlc3MoZGVzY0Jhci52YWx1ZSwgMCwgY29pbi5uZXR3b3JrKTtcblxuICBpdCgnaGFzIGV4cGVjdGVkIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKFxuICAgICAgW2FkZHJlc3NGb28wLCBhZGRyZXNzRm9vMSwgYWRkcmVzc0JhcjBdLFxuICAgICAgW1xuICAgICAgICAnMk45YjF0cld4TUpOMTZtVHpHSnlwRm42cEVXZlh0Z2g2ODknLFxuICAgICAgICAnMk4xWUZ6ajRFQ3pjanVydWFFdlN6R2FHR0gxdG9wTVhNWFonLFxuICAgICAgICAnMk45b041S2MyZkx0Mk1yeEVrdVFQc3k4RmcyS2RyRmZlS0gnLFxuICAgICAgXVxuICAgICk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHJ1blRlc3RJc0FkZHJlc3MoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGVzY3JpcHRvck5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdG9yQ2hlY2tzdW06IHN0cmluZyxcbiAgICBleHBlY3RlZDogdHJ1ZSB8IEVycm9yIHwgUmVnRXhwXG4gICkge1xuICAgIGl0KGBzaG91bGQgcmV0dXJuICR7ZXhwZWN0ZWR9IGZvciBhZGRyZXNzICR7YWRkcmVzc30gd2l0aCBpbmRleCAke2luZGV4fSBhbmQgZGVzY3JpcHRvciAke2Rlc2NyaXB0b3JOYW1lfSB3aXRoIGNoZWNrc3VtICR7ZGVzY3JpcHRvckNoZWNrc3VtfWAsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhbGxldCA9IGdldElXYWxsZXRXaXRoRGVzY3JpcHRvcnMoW2Rlc2NGb28sIGRlc2NCYXJdKTtcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgIHJldHVybiBjb2luLmlzV2FsbGV0QWRkcmVzcyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2luU3BlY2lmaWM6IHsgZGVzY3JpcHRvck5hbWUsIGRlc2NyaXB0b3JDaGVja3N1bSB9LFxuICAgICAgICAgICAga2V5Y2hhaW5zOiB4cHVicy5tYXAoKHB1YikgPT4gKHsgcHViIH0pKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHdhbGxldFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAgIGFzc2VydC5lcXVhbChhd2FpdCBmKCksIGV4cGVjdGVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJlY2F1c2UgaXNXYWxsZXRBZGRyZXNzIGlzIHN0dXBpZCBpdCBhY3R1YWxseSB0aHJvd3MgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2VcbiAgICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoZiwgZXhwZWN0ZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcnVuVGVzdElzQWRkcmVzcyhhZGRyZXNzRm9vMCwgMCwgJ2ZvbycsIGRlc2NGb28udmFsdWUuc2xpY2UoLTgpLCB0cnVlKTtcbiAgcnVuVGVzdElzQWRkcmVzcyhhZGRyZXNzRm9vMSwgMCwgJ2ZvbycsIGRlc2NGb28udmFsdWUuc2xpY2UoLTgpLCAvQWRkcmVzcyBtaXNtYXRjaCBmb3IgZGVzY3JpcHRvci8pO1xuICBydW5UZXN0SXNBZGRyZXNzKGFkZHJlc3NCYXIwLCAwLCAnYmFyJywgZGVzY0Zvby52YWx1ZS5zbGljZSgtOCksIC9EZXNjcmlwdG9yIGNoZWNrc3VtIG1pc21hdGNoLyk7XG4gIHJ1blRlc3RJc0FkZHJlc3MoYWRkcmVzc0ZvbzAsIDAsICdiYXInLCBkZXNjQmFyLnZhbHVlLnNsaWNlKC04KSwgL0FkZHJlc3MgbWlzbWF0Y2ggZm9yIGRlc2NyaXB0b3IvKTtcbn0pO1xuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!