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==

Выполнить команду


Для локальной разработки. Не используйте в интернете!