PHP WebShell
Текущая директория: /opt/BitGoJS/modules/abstract-lightning/test/unit/lightning
Просмотр файла: lightningUtils.ts
import assert from 'assert';
import { importMacaroon } from 'macaroon';
import * as utxolib from '@bitgo/utxo-lib';
import { accounts, signerRootKey } from './createWatchOnlyFixture';
import {
isValidLightningNetworkName,
getLightningNetwork,
isValidLightningNetwork,
getStaticsLightningNetwork,
getUtxolibNetwork,
isLightningCoinName,
createWatchOnly,
addIPCaveatToMacaroon,
deriveLightningServiceSharedSecret,
} from '../../../src/lightning';
import * as sdkcore from '@bitgo/sdk-core';
describe('lightning utils', function () {
[
{ name: 'lnbtc', networkName: 'bitcoin' },
{ name: 'tlnbtc', networkName: 'testnet' },
].forEach(({ name, networkName }) => {
describe(`success - coin ${name} and network ${networkName}`, function () {
it(`isValidLightningNetworkName and getLightningNetwork`, function () {
assert(isValidLightningNetworkName(networkName));
const network = getLightningNetwork(networkName);
assert.strictEqual(network, utxolib.networks[networkName]);
});
it(`isValidLightningNetwork`, function () {
assert(isValidLightningNetworkName(networkName));
assert(isValidLightningNetwork(utxolib.networks[networkName]));
});
it(`getStaticsLightningNetwork`, function () {
assert.strictEqual(getStaticsLightningNetwork(name).family, 'lnbtc');
});
it(`getUtxolibNetwork`, function () {
assert.strictEqual(
getUtxolibNetwork(name),
networkName === 'bitcoin' ? utxolib.networks.bitcoin : utxolib.networks.testnet
);
});
it(`isLightningCoinName`, function () {
assert.strictEqual(isLightningCoinName(name), true);
assert.strictEqual(isLightningCoinName('ltc'), false);
});
});
});
it(`isValidLightningNetworkName should return false for non lightning network name`, function () {
assert.strictEqual(isValidLightningNetworkName('litecoin'), false);
});
it(`isValidLightningNetwork should return false for non lightning network`, function () {
assert.strictEqual(isValidLightningNetwork(utxolib.networks['litecoin']), false);
});
it(`getUtxolibNetwork should return fail for invalid lightning coin`, function () {
assert.throws(() => {
getUtxolibNetwork('ltc');
}, /ltc is not a lightning coin/);
});
it(`createWatchOnly`, function () {
const watchOnly = createWatchOnly(signerRootKey, utxolib.networks.testnet);
assert.deepStrictEqual(watchOnly.accounts, accounts);
assert.strictEqual(
watchOnly.master_key_fingerprint,
utxolib.bip32.fromBase58(signerRootKey, utxolib.networks.testnet).fingerprint.toString('hex')
);
});
it(`addIPCaveatToMacaroon`, function () {
const macaroon =
'AgEDbG5kAvgBAwoQMgU7rDi802Yqg/tHll24nhIBMBoWCgdhZGRyZXNzEgRyZWFkEgV3cml0ZRoTCgRpbmZvEgRyZWFkEgV3cml0ZRoXCghpbnZvaWNlcxIEcmVhZBIFd3JpdGUaIQoIbWFjYXJvb24SCGdlbmVyYXRlEgRyZWFkEgV3cml0ZRoWCgdtZXNzYWdlEgRyZWFkEgV3cml0ZRoXCghvZmZjaGFpbhIEcmVhZBIFd3JpdGUaFgoHb25jaGFpbhIEcmVhZBIFd3JpdGUaFAoFcGVlcnMSBHJlYWQSBXdyaXRlGhgKBnNpZ25lchIIZ2VuZXJhdGUSBHJlYWQAAAYgZKiUvEzxGd2QKGUS+9R5ZWevG09S06fMJUnt+k1XXXQ=';
const macaroonObj = importMacaroon(macaroon).exportJSON();
assert.strictEqual(macaroonObj.c, undefined);
const macaroonWithCaveat = addIPCaveatToMacaroon(macaroon, '127.0.0.1');
const macaroonObjWithCaveat = importMacaroon(macaroonWithCaveat).exportJSON();
assert.strictEqual(macaroonObjWithCaveat.c[0].i, 'ipaddr 127.0.0.1');
});
it(`deriveLightningServiceSharedSecret`, function () {
const userAuthXprv =
'xprv9s21ZrQH143K4NPkV8riiTnFf72MRyQDVHMmmpekGF1w5QkS2MfTei9KXYvrZVMop4zQ4arnzSF7TRp3Cy73AWaDdADiYMCi5qpYW1bUa5m';
const lightningServicePubKey = getStaticsLightningNetwork('tlnbtc').lightningServicePubKey;
const expectedSecret = sdkcore.getSharedSecret(
utxolib.bip32.fromBase58(userAuthXprv),
Buffer.from(lightningServicePubKey, 'hex')
);
const secret = deriveLightningServiceSharedSecret('tlnbtc', userAuthXprv);
assert.deepStrictEqual(secret, expectedSecret);
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!