From ad062c24c0ec023452a71e06fa7e99339333210b 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 d7884457cc6..d57ab823bb4 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 5402a4ea36f..d62b9d24507 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 6beb81b85d9..fd7dca5644e 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,