PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-algo/dist/test/unit
Просмотр файла: algoIsWalletAddress.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const sdk_test_1 = require("@bitgo/sdk-test");
const sdk_api_1 = require("@bitgo/sdk-api");
const src_1 = require("../../src");
const assert_1 = require("assert");
const should = require('should');
describe('Algo class', function () {
let bitgo;
let basecoin;
before(function () {
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
bitgo.safeRegister('talgo', src_1.Talgo.createInstance);
bitgo.initializeTestVars();
basecoin = bitgo.coin('talgo');
});
describe('for method isWalletAddress', () => {
const ROOT_ADDRESS = 'AND6YSSWQMMFOROH6NINCLNDNHXYIICIPIOPORA5VWELJVZ5J6OBAZCB6E';
const USE_UNDEFINED = 'use undefined';
const INVALID_KEY = { pub: 'XH3WEL22VP6EAPVIUHUZCKBYZEJFSLZD3K4PK44MZCVSA4RFSB2ZH4SGLQ' };
const keychains = [
{ pub: '5II7OEXHVZUDTTLYMX2VESDSD6NZZ3CJKSYHKNQRU7RW2AEWBBM46VSPRE' }, // '62228ac8c01c5500072dc71d'
{ pub: '6JMXSB37MWGTALLCUUVJGKMC4LQCU3EEJHRRUZMIOQS4CPLQU2KVYWLR3M' }, // '62228ac8c01c5500072dc726'
{ pub: 'OH3WEL22VP6EAPVIUHUZCKBYZEJFSLZD3K4PK44MZCVSA4RFSB2ZH4SGLQ' }, // '62228ac9c01c5500072dc72f'
];
const makeVerifyAddressOptions = (address, rootAddress, bitgoPubKey, useKeyChain) => ({
address,
chain: 0,
index: 0,
coin: 'talgo',
wallet: '62228ae1c01c5500072dc7a1',
coinSpecific: {
rootAddress,
bitgoKey: '62228ac8c01c5500072dc71d',
addressVersion: 1,
threshold: 2,
...(bitgoPubKey ? { bitgoPubKey } : {}),
},
...(typeof useKeyChain === 'string' ? {} : { keychains }),
});
const otherAddress = 'AWSC7RL3RM72HSUW5QU4XTX3AOHY7QD3WLUZC2CAHWP6BTI5Q7IABVUXTA';
const receivingAddress = 'BIJ332IS63LGDG4HIPBMUWQLE4AMIS3D7A3IPNGGDS5FKGWURCHE5NVMXI';
// Test cases
[
{
title: 'should validate root address',
address: ROOT_ADDRESS,
expected: true,
},
{
title: 'should not validate address outside wallet',
address: otherAddress,
expected: false,
},
{
title: 'should validate a receiving address',
address: receivingAddress,
bitgoKey: '62237caa05ff6900076196d0',
bitgoPubKey: 'TZUQM3QPLGLAWIRDSN6REATX6HOSZGBXZFSFGD55OKUVE4JHXFWI5SZ6GY',
expected: true,
},
{
title: 'should not validate a not owned receiving address',
address: 'GD64YIY3TWGDMCNPP553DZPPR6LDUSFQOIJVFDPPXWEG3FVOJCCDBBHU5A',
bitgoKey: '62237caa05ff6900076196d0',
bitgoPubKey: 'TZUQM3QPLGLAWIRDSN6REATX6HOSZGBXZFSFGD55OKUVE4JHXFWI5SZ6GY',
expected: false,
},
{
title: 'should report error for invalid formatted address',
address: 'GD64YIY3TWGDMCNPP553DZPPR6LDUSFQOIJVFDPPXWEG3FVOJ',
throws: /invalid address/,
},
{
title: 'should report error for invalid checksum address',
address: 'GD64YIY3TWGDMCNPP553DZPPR6LDUSFQOIJVFDPPXWEG3F999',
throws: /invalid address/,
},
{
title: 'should report error if keychain is missing',
address: ROOT_ADDRESS,
keychains: USE_UNDEFINED,
throws: /missing required param keychains/,
},
{
title: 'should report error if any key is invalid',
address: ROOT_ADDRESS,
keychains: [keychains[0], keychains[1], INVALID_KEY],
throws: /invalid public key/,
},
].forEach(({ title, address, expected, bitgoPubKey, throws, keychains }) => {
it(title, async () => {
// GIVEN parameter options for created address
const params = makeVerifyAddressOptions(address, ROOT_ADDRESS, bitgoPubKey, keychains);
try {
// WHEN checking address
const result = await basecoin.isWalletAddress(params);
// THEN no error was expected
should(throws).be.undefined();
// THEN address is validated as expected
result.should.be.equal(expected);
}
catch (e) {
if (e instanceof assert_1.AssertionError) {
// Do not hide other assertions
throw e;
}
should(throws).be.not.undefined();
should(expected).be.undefined();
(() => {
throw e;
}).should.throw(throws || 'never reaches here but compiler is unhappy without this');
}
});
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxnb0lzV2FsbGV0QWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9hbGdvSXNXYWxsZXRBZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsOENBQTBEO0FBQzFELDRDQUEwQztBQUMxQyxtQ0FBNEQ7QUFDNUQsbUNBQXdDO0FBRXhDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVqQyxRQUFRLENBQUMsWUFBWSxFQUFFO0lBQ3JCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQVEsQ0FBQztJQUViLE1BQU0sQ0FBQztRQUNMLEtBQUssR0FBRyxvQkFBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtRQUMxQyxNQUFNLFlBQVksR0FBRyw0REFBNEQsQ0FBQztRQUNsRixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsNERBQTRELEVBQUUsQ0FBQztRQUUxRixNQUFNLFNBQVMsR0FBRztZQUNoQixFQUFFLEdBQUcsRUFBRSw0REFBNEQsRUFBRSxFQUFFLDZCQUE2QjtZQUNwRyxFQUFFLEdBQUcsRUFBRSw0REFBNEQsRUFBRSxFQUFFLDZCQUE2QjtZQUNwRyxFQUFFLEdBQUcsRUFBRSw0REFBNEQsRUFBRSxFQUFFLDZCQUE2QjtTQUNyRyxDQUFDO1FBRUYsTUFB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QUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxDQUFDLFlBQVksdUJBQWMsRUFBRSxDQUFDO3dCQUNoQywrQkFBK0I7d0JBQy9CLE1BQU0sQ0FBQyxDQUFDO29CQUNWLENBQUM7b0JBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2hDLENBQUMsR0FBRyxFQUFFO3dCQUNKLE1BQU0sQ0FBQyxDQUFDO29CQUNWLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLHlEQUF5RCxDQUFDLENBQUM7Z0JBQ3ZGLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlc3RCaXRHbywgVGVzdEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgVGFsZ28sIFZlcmlmeUFsZ29BZGRyZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBBc3NlcnRpb25FcnJvciB9IGZyb20gJ2Fzc2VydCc7XG5cbmNvbnN0IHNob3VsZCA9IHJlcXVpcmUoJ3Nob3VsZCcpO1xuXG5kZXNjcmliZSgnQWxnbyBjbGFzcycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndGFsZ28nLCBUYWxnby5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YWxnbycpO1xuICB9KTtcblxuICBkZXNjcmliZSgnZm9yIG1ldGhvZCBpc1dhbGxldEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgY29uc3QgUk9PVF9BRERSRVNTID0gJ0FORDZZU1NXUU1NRk9ST0g2TklOQ0xORE5IWFlJSUNJUElPUE9SQTVWV0VMSlZaNUo2T0JBWkNCNkUnO1xuICAgIGNvbnN0IFVTRV9VTkRFRklORUQgPSAndXNlIHVuZGVmaW5lZCc7XG4gICAgY29uc3QgSU5WQUxJRF9LRVkgPSB7IHB1YjogJ1hIM1dFTDIyVlA2RUFQVklVSFVaQ0tCWVpFSkZTTFpEM0s0UEs0NE1aQ1ZTQTRSRlNCMlpINFNHTFEnIH07XG5cbiAgICBjb25zdCBrZXljaGFpbnMgPSBbXG4gICAgICB7IHB1YjogJzVJSTdPRVhIVlpVRFRUTFlNWDJWRVNEU0Q2TlpaM0NKS1NZSEtOUVJVN1JXMkFFV0JCTTQ2VlNQUkUnIH0sIC8vICc2MjIyOGFjOGMwMWM1NTAwMDcyZGM3MWQnXG4gICAgICB7IHB1YjogJzZKTVhTQjM3TVdHVEFMTENVVVZKR0tNQzRMUUNVM0VFSkhSUlVaTUlPUVM0Q1BMUVUyS1ZZV0xSM00nIH0sIC8vICc2MjIyOGFjOGMwMWM1NTAwMDcyZGM3MjYnXG4gICAgICB7IHB1YjogJ09IM1dFTDIyVlA2RUFQVklVSFVaQ0tCWVpFSkZTTFpEM0s0UEs0NE1aQ1ZTQTRSRlNCMlpINFNHTFEnIH0sIC8vICc2MjIyOGFjOWMwMWM1NTAwMDcyZGM3MmYnXG4gICAgXTtcblxuICAgIGNvbnN0IG1ha2VWZXJpZnlBZGRyZXNzT3B0aW9ucyA9IChcbiAgICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICAgIHJvb3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgICBiaXRnb1B1YktleT86IHN0cmluZyxcbiAgICAgIHVzZUtleUNoYWluPzogdHlwZW9mIGtleWNoYWlucyB8IHN0cmluZ1xuICAgICk6IFZlcmlmeUFsZ29BZGRyZXNzT3B0aW9ucyA9PiAoe1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGNoYWluOiAwLFxuICAgICAgaW5kZXg6IDAsXG4gICAgICBjb2luOiAndGFsZ28nLFxuICAgICAgd2FsbGV0OiAnNjIyMjhhZTFjMDFjNTUwMDA3MmRjN2ExJyxcbiAgICAgIGNvaW5TcGVjaWZpYzoge1xuICAgICAgICByb290QWRkcmVzcyxcbiAgICAgICAgYml0Z29LZXk6ICc2MjIyOGFjOGMwMWM1NTAwMDcyZGM3MWQnLFxuICAgICAgICBhZGRyZXNzVmVyc2lvbjogMSxcbiAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgICAuLi4oYml0Z29QdWJLZXkgPyB7IGJpdGdvUHViS2V5IH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgLi4uKHR5cGVvZiB1c2VLZXlDaGFpbiA9PT0gJ3N0cmluZycgPyB7fSA6IHsga2V5Y2hhaW5zIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3RoZXJBZGRyZXNzID0gJ0FXU0M3UkwzUk03MkhTVVc1UVU0WFRYM0FPSFk3UUQzV0xVWkMyQ0FIV1A2QlRJNVE3SUFCVlVYVEEnO1xuICAgIGNvbnN0IHJlY2VpdmluZ0FkZHJlc3MgPSAnQklKMzMySVM2M0xHREc0SElQQk1VV1FMRTRBTUlTM0Q3QTNJUE5HR0RTNUZLR1dVUkNIRTVOVk1YSSc7XG5cbiAgICAvLyBUZXN0IGNhc2VzXG4gICAgW1xuICAgICAge1xuICAgICAgICB0aXRsZTogJ3Nob3VsZCB2YWxpZGF0ZSByb290IGFkZHJlc3MnLFxuICAgICAgICBhZGRyZXNzOiBST09UX0FERFJFU1MsXG4gICAgICAgIGV4cGVjdGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdzaG91bGQgbm90IHZhbGlkYXRlIGFkZHJlc3Mgb3V0c2lkZSB3YWxsZXQnLFxuICAgICAgICBhZGRyZXNzOiBvdGhlckFkZHJlc3MsXG4gICAgICAgIGV4cGVjdGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnc2hvdWxkIHZhbGlkYXRlIGEgcmVjZWl2aW5nIGFkZHJlc3MnLFxuICAgICAgICBhZGRyZXNzOiByZWNlaXZpbmdBZGRyZXNzLFxuICAgICAgICBiaXRnb0tleTogJzYyMjM3Y2FhMDVmZjY5MDAwNzYxOTZkMCcsXG4gICAgICAgIGJpdGdvUHViS2V5OiAnVFpVUU0zUVBMR0xBV0lSRFNONlJFQVRYNkhPU1pHQlhaRlNGR0Q1NU9LVVZFNEpIWEZXSTVTWjZHWScsXG4gICAgICAgIGV4cGVjdGVkOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdzaG91bGQgbm90IHZhbGlkYXRlIGEgbm90IG93bmVkIHJlY2VpdmluZyBhZGRyZXNzJyxcbiAgICAgICAgYWRkcmVzczogJ0dENjRZSVkzVFdHRE1DTlBQNTUzRFpQUFI2TERVU0ZRT0lKVkZEUFBYV0VHM0ZWT0pDQ0RCQkhVNUEnLFxuICAgICAgICBiaXRnb0tleTogJzYyMjM3Y2FhMDVmZjY5MDAwNzYxOTZkMCcsXG4gICAgICAgIGJpdGdvUHViS2V5OiAnVFpVUU0zUVBMR0xBV0lSRFNONlJFQVRYNkhPU1pHQlhaRlNGR0Q1NU9LVVZFNEpIWEZXSTVTWjZHWScsXG4gICAgICAgIGV4cGVjdGVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnc2hvdWxkIHJlcG9ydCBlcnJvciBmb3IgaW52YWxpZCBmb3JtYXR0ZWQgYWRkcmVzcycsXG4gICAgICAgIGFkZHJlc3M6ICdHRDY0WUlZM1RXR0RNQ05QUDU1M0RaUFBSNkxEVVNGUU9JSlZGRFBQWFdFRzNGVk9KJyxcbiAgICAgICAgdGhyb3dzOiAvaW52YWxpZCBhZGRyZXNzLyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnc2hvdWxkIHJlcG9ydCBlcnJvciBmb3IgaW52YWxpZCBjaGVja3N1bSBhZGRyZXNzJyxcbiAgICAgICAgYWRkcmVzczogJ0dENjRZSVkzVFdHRE1DTlBQNTUzRFpQUFI2TERVU0ZRT0lKVkZEUFBYV0VHM0Y5OTknLFxuICAgICAgICB0aHJvd3M6IC9pbnZhbGlkIGFkZHJlc3MvLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdzaG91bGQgcmVwb3J0IGVycm9yIGlmIGtleWNoYWluIGlzIG1pc3NpbmcnLFxuICAgICAgICBhZGRyZXNzOiBST09UX0FERFJFU1MsXG4gICAgICAgIGtleWNoYWluczogVVNFX1VOREVGSU5FRCxcbiAgICAgICAgdGhyb3dzOiAvbWlzc2luZyByZXF1aXJlZCBwYXJhbSBrZXljaGFpbnMvLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdzaG91bGQgcmVwb3J0IGVycm9yIGlmIGFueSBrZXkgaXMgaW52YWxpZCcsXG4gICAgICAgIGFkZHJlc3M6IFJPT1RfQUREUkVTUyxcbiAgICAgICAga2V5Y2hhaW5zOiBba2V5Y2hhaW5zWzBdLCBrZXljaGFpbnNbMV0sIElOVkFMSURfS0VZXSxcbiAgICAgICAgdGhyb3dzOiAvaW52YWxpZCBwdWJsaWMga2V5LyxcbiAgICAgIH0sXG4gICAgXS5mb3JFYWNoKCh7IHRpdGxlLCBhZGRyZXNzLCBleHBlY3RlZCwgYml0Z29QdWJLZXksIHRocm93cywga2V5Y2hhaW5zIH0pID0+IHtcbiAgICAgIGl0KHRpdGxlLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOIHBhcmFtZXRlciBvcHRpb25zIGZvciBjcmVhdGVkIGFkZHJlc3NcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbWFrZVZlcmlmeUFkZHJlc3NPcHRpb25zKGFkZHJlc3MsIFJPT1RfQUREUkVTUywgYml0Z29QdWJLZXksIGtleWNoYWlucyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBXSEVOIGNoZWNraW5nIGFkZHJlc3NcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5pc1dhbGxldEFkZHJlc3MocGFyYW1zKTtcblxuICAgICAgICAgIC8vIFRIRU4gbm8gZXJyb3Igd2FzIGV4cGVjdGVkXG4gICAgICAgICAgc2hvdWxkKHRocm93cykuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgICAgLy8gVEhFTiBhZGRyZXNzIGlzIHZhbGlkYXRlZCBhcyBleHBlY3RlZFxuICAgICAgICAgIHJlc3VsdC5zaG91bGQuYmUuZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikge1xuICAgICAgICAgICAgLy8gRG8gbm90IGhpZGUgb3RoZXIgYXNzZXJ0aW9uc1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2hvdWxkKHRocm93cykuYmUubm90LnVuZGVmaW5lZCgpO1xuICAgICAgICAgIHNob3VsZChleHBlY3RlZCkuYmUudW5kZWZpbmVkKCk7XG4gICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfSkuc2hvdWxkLnRocm93KHRocm93cyB8fCAnbmV2ZXIgcmVhY2hlcyBoZXJlIGJ1dCBjb21waWxlciBpcyB1bmhhcHB5IHdpdGhvdXQgdGhpcycpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==Выполнить команду
Для локальной разработки. Не используйте в интернете!