From 9b837ba316133172389e8a338bfc6cb1055a9db1 Mon Sep 17 00:00:00 2001 From: Jack Mallers Date: Tue, 21 Aug 2018 13:47:55 -0500 Subject: [PATCH] fix(channels): neutrino clients manual channels flagged private Make sure that if a user of ours is using neutrino that we flag their channels as private when they manually open them. Reason for this is because light consumer clients are not expected to have high uptime. However we cannot hardcode channels as private every time because we do support more power users driving their remote nodes or BTCPay Server with Zap. So we only flag channels as private if the activeConnection is local. --- app/lib/lnd/methods/channelController.js | 5 +++-- app/reducers/channels.js | 12 +++++++++++- test/unit/reducers/channels.spec.js | 2 ++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/app/lib/lnd/methods/channelController.js b/app/lib/lnd/methods/channelController.js index d7884457..d57ab823 100644 --- a/app/lib/lnd/methods/channelController.js +++ b/app/lib/lnd/methods/channelController.js @@ -19,13 +19,14 @@ function ensurePeerConnected(lnd, pubkey, host) { * @return {[type]} [description] */ export function connectAndOpen(lnd, event, payload) { - const { pubkey, host, localamt } = payload + const { pubkey, host, localamt, private: privateChannel } = payload return ensurePeerConnected(lnd, pubkey, host) .then(() => { const call = lnd.openChannel({ node_pubkey: Buffer.from(pubkey, 'hex'), - local_funding_amount: Number(localamt) + local_funding_amount: Number(localamt), + private: privateChannel }) call.on('data', data => event.sender.send('pushchannelupdated', { pubkey, data })) diff --git a/app/reducers/channels.js b/app/reducers/channels.js index 5402a4ea..d62b9d24 100644 --- a/app/reducers/channels.js +++ b/app/reducers/channels.js @@ -1,5 +1,6 @@ import { createSelector } from 'reselect' import { ipcRenderer } from 'electron' +import Store from 'electron-store' import { btc } from 'lib/utils' import { showNotification } from 'lib/utils/notifications' import { requestSuggestedNodes } from 'lib/utils/api' @@ -191,7 +192,16 @@ export const openChannel = ({ pubkey, host, local_amt }) => (dispatch, getState) dispatch(openingChannel()) dispatch(addLoadingPubkey(pubkey)) - ipcRenderer.send('lnd', { msg: 'connectAndOpen', data: { pubkey, host, localamt } }) + // Grab the activeConnection type from our local store. If the active connection type is local (light clients using + // neutrino) we will flag manually created channels as private. Other connections like remote node and BTCPay Server + // we will announce to the network as these users are using Zap to drive nodes that are online 24/7 + const store = new Store({ name: 'settings' }) + const { type } = store.get('activeConnection', {}) + + ipcRenderer.send('lnd', { + msg: 'connectAndOpen', + data: { pubkey, host, localamt, private: type === 'local' } + }) } // TODO: Decide how to handle streamed updates for channels diff --git a/test/unit/reducers/channels.spec.js b/test/unit/reducers/channels.spec.js index 6beb81b8..fd7dca56 100644 --- a/test/unit/reducers/channels.spec.js +++ b/test/unit/reducers/channels.spec.js @@ -1,3 +1,5 @@ +// @flow + import channelsReducer, { SET_CHANNEL_FORM, SET_CHANNEL,