alexbosworth / balanceofsatoshis Goto Github PK
View Code? Open in Web Editor NEWTool for working with the balance of your satoshis on LND
License: MIT License
Tool for working with the balance of your satoshis on LND
License: MIT License
Add a system so that you can define an inbound and outbound liquidity target for a peer
This would then inform rebalances which would go towards the target, peer displays which would illustrate distances from target values, etc
To get your unconfirmed transactions into the Blockchain it's a good idea to regularly re-broadcast your transactions
It would be cool if balanceofsatoshis could help with this process
When reporting on daily activities in report
, only one side of the rebalance is shown
Both sides could be shown instead to illustrate the transfer
Using the APIs like the BitFinex REST API balanceofsatoshis could allow depositing and withdrawing from exchanges
This could be helpful for liquidity operations or to facilitate ala minute trading
I am receiving the following error when attempting to run bos accounting payments
against my node:
/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/ln-accounting/node_modules/ln-service/bolt11/parse_payment_request.js:80
throw new Error('ExpectedLnPrefix');
^
Error: ExpectedLnPrefix
at module.exports (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/ln-accounting/node_modules/ln-service/bolt11/parse_payment_request.js:80:11)
at /home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/ln-accounting/harmony/payments_as_records.js:40:38
at Array.map (<anonymous>)
at module.exports (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/ln-accounting/harmony/payments_as_records.js:37:31)
at asyncAuto.payments (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/ln-accounting/report/get_accounting_report.js:238:26)
at runTask (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at /home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/asyncjs-util/return_result.js:26:50
at wrapper (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/internal/once.js:12:16)
at processQueue (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:173:20)
at taskComplete (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
Currently the rebalance result is logged but not returned from the function. Would be great to receive the result as well to be able to show it to the user in the UI
Hey @alexbosworth , I am getting segmentation faults. I just did a npm upgrade. I do not get telegram messages, apart from "connected to XXX" messages
# bos telegram --node=DeBitcoinFan --connect 9******
is_connected: true
2020-07-06T09:36:45.213Z ๐ swaply inbound enabled by XXX on 633615x1873x0
Segmentation fault (core dumped)
# bos --version
5.40.1
followed instructions to make ~/.bos/mynode/credentials.js:
{
"macaroon": "mymacaroon==",
"cert": "mycert==",
"socket": "mynode.mysite.io:10009"
}
When I run bos nodes
, error:
balanceofsatoshis/nodes/get_saved_nodes.js:103
if (!credentials.macaroon) {
^
TypeError: Cannot read property 'macaroon' of undefined
lnd version 0.8.0-beta commit=v0.8.1-beta
bos 5.6.2
node v10.17.0
Support using a LNURL to login to a service that uses it for authentication
When attempting to run the following command (or any bos accounting
command):
bos accounting chain-fees --month 8 --year 2020 --csv
The command hangs for several minutes, then returns:
UnexpectedResponseInHistoricRateResponse
If you are starting up or running a routing node you may not really know what to do or there may be some marginal actions that require review to automate
balanceofsatoshis could suggest to you commands to run based on an analysis of your node
Instead of always going to the backing LND to find out information about fee rates, liquidity, etc, make a local copy of the node data that can be used as a first access cache
What are we able to copy?
With all of this data on the local side, queries could be a lot faster
When you do bos open
there is no way to specify that a channel should be private
This could either be a global --private
flag or a repeated --private
flag to correspond with the per public key amounts
It would be nice to have a way to push a payment to a destination where the routing fee was inclusive, so pay N amount inclusive of routing fees
It would be nice to know if there are forwards happening that are being rejected, and why they are being rejected
This was already added as a feature previously but removed due to low signal and the removal of the database
When removing a peer, a circular rebalance can allow for preserving the inbound liquidity present on the peer that is being removed
This could work with multiple HODL invoices, so that all of the inbound would be transferred in a short time window with the channel close.
Hi, getting this error trying to increase inbound liquidity. I'm using a non-standard setup, running from a git clone and a credentials.json file because my cert and macaroons are in non-standard locations. I believe the base64 cert and macaroon are correct. I can see node info so I'm fairly sure the app is setup correctly. 100% of funds are in channels currently.
Just need some info on what the error (402 PaymentRequiredToCreateSwap) means and how to correct it.
After bos telegram is entered, the user is prompted for the bot API. The input is hidden, so the user can't tell if it was entered incorrectly. After the API is submitted, there is no error checking done on the API to ensure that it is legitimate.
Currently the final output of the remove-peer is the transaction id to monitor for the closing transaction
It would be nice if it could show the fees paid by the close transaction id and then who is paying this fee
$ bos --version
5.41.3
$ lnd --version
lnd version 0.10.99-beta commit=clock/v1.0.0-229-ge64e71d86dc1ac716c30a80f85a22e8fb544697f
$ node --version
v14.6.0
$ bos increase-inbound-liquidity --show-raw-recovery --recovery
(node:28266) UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received type boolean (true)
at Function.from (buffer.js:329:9)
at asyncAuto.recovery (/usr/lib/node_modules/balanceofsatoshis/node_modules/goldengate/lightninglabs/decode_swap_recovery.js:44:35)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at validate (/usr/lib/node_modules/balanceofsatoshis/node_modules/goldengate/lightninglabs/decode_swap_recovery.js:39:16)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:229:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at auto (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:164:5)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/goldengate/lightninglabs/decode_swap_recovery.js:32:12
at new Promise (<anonymous>)
at module.exports (/usr/lib/node_modules/balanceofsatoshis/node_modules/goldengate/lightninglabs/decode_swap_recovery.js:31:10)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:28266) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:28266) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Instead of constantly fetching historic fiat rates, cache them and then refer to them in the future
$ bos --version
5.41.3
$ lnd --version
lnd version 0.10.99-beta commit=clock/v1.0.0-229-ge64e71d86dc1ac716c30a80f85a22e8fb544697f
$ node --version
v14.6.0
$ bos increase-inbound-liquidity --show-raw-recovery --recovery <recovery_secret>
/usr/lib/node_modules/balanceofsatoshis/swaps/swap_out.js:404
if (getLimits.max_cltv_delta < minCltvDelta) {
^
TypeError: Cannot read property 'max_cltv_delta' of undefined
at asyncAuto.getTimeout (/usr/lib/node_modules/balanceofsatoshis/swaps/swap_out.js:404:23)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at asyncAuto.getQuote (/usr/lib/node_modules/balanceofsatoshis/swaps/swap_out.js:328:18)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at asyncAuto.startHeight (/usr/lib/node_modules/balanceofsatoshis/swaps/swap_out.js:218:18)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
Currently when you open a channel with bos open
you specify the capacity and it gives you an address to pay that matches that capacity
But what if you want to burn a UTXO or multiple UTXOs into channels with no change leftover?
It would be nice to tell bos open
about your UTXOs and have it help you figure out a channel open that left no change
Currently remove-peer is designed to remove all channels with a peer
It would be nice to specify --channel <id>
to discretely specify the channels to remove
When I run the following 2 commands:
bos accounting chain-sends
bos accounting invoices
I receive the error:
err:
- 503
- UnexpectedPendingChannelsErr
-
err:
message: 14 UNAVAILABLE: failed to connect to all addresses
stack:
- Error: 14 UNAVAILABLE: failed to connect to all addresses
- at Object.exports.createStatusError (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/common.js:91:15)
- at Object.onReceiveStatus (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:1209:28)
- at InterceptingListener._callNext (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:568:42)
- at InterceptingListener.onReceiveStatus (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:618:8)
- at callback (/home/tom/.npm-global/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:847:24)
This could be related to this issue.
Some nodes may present persistent problems when routing or there may be some other reason to want to prevent routing through a specific node
There should be a global blacklist of nodes to avoid, potentially with timers attached relating to how long to avoid these nodes
Hi,
As per the readme: Requires an installation of Node v10.12.0+ and NPM
.
However, this is incorrect:
โถ yarn add balanceofsatoshis
yarn add v1.22.0
[1/5] ๐ Validating package.json...
[2/5] ๐ Resolving packages...
warning balanceofsatoshis > [email protected]: Critical
[3/5] ๐ Fetching packages...
error [email protected]: The engine "node" is incompatible with this module. Expected version ">=12.0.0". Got "10.19.0"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
I believe it is because it depends on [email protected]
> [email protected]
> [email protected]
.
The node compatibility was corrected in [email protected]
.
If it is possible to upgrade the dependencies then it would resolve the issue.
$ bos --version
5.39.1
$ lnd --version
lnd version 0.10.99-beta commit=clock/v1.0.0-49-g9b8d51231c9cc5505380e911a45378f78d306190
$ bos probe --find-max 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f
checking_for_path_to: ACINQ 03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f
err:
- 503
- UnexpectedErrGettingRouteToDestination
-
err:
message: 2 UNKNOWN: feature pair exists
stack:
- Error: 2 UNKNOWN: feature pair exists
- at Object.exports.createStatusError (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/common.js:91:15)
- at Object.onReceiveStatus (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:1209:28)
- at InterceptingListener._callNext (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:568:42)
- at InterceptingListener.onReceiveStatus (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:618:8)
- at callback (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:847:24)
Show rebalance details like fee rate, fee, inbound side outbound side in the invoice details
This can help with record keeping to know why you made that invoice
Sometimes you might want more privacy in a payment
Allow specifying:
$ watch --version
watch from procps-ng 3.3.12
$ bos --version
5.43.2
$ watch bos forwards
/usr/lib/node_modules/balanceofsatoshis/network/get_forwards.js:238
const isWideSize = size.get().width > wideSizeCols;
^
TypeError: Cannot read property 'get' of undefined
at asyncAuto.allForwards (/usr/lib/node_modules/balanceofsatoshis/network/get_forwards.js:238:33)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at asyncAuto.forwards (/usr/lib/node_modules/balanceofsatoshis/network/get_forwards.js:229:16)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at /usr/lib/node_modules/balanceofsatoshis/node_modules/asyncjs-util/return_result.js:26:50
at wrapper (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/once.js:12:16)
$ bos --version
5.39.2
$ lnd --version
lnd version 0.10.99-beta commit=clock/v1.0.0-71-g87880c0d56937f2380acee37910492b2fc7b910f
$ lncli getnodeinfo <inactive_node_pub_key>
[lncli] rpc error: code = Unknown desc = unable to find node
$ bos probe <inactive_node_pub_key>
/usr/lib/node_modules/balanceofsatoshis/network/probe_destination.js:164
return cbk(null, {features: features.filter(n => !!n.is_known)});
^
TypeError: Cannot read property 'filter' of undefined
at asyncAuto.getFeatures (/usr/lib/node_modules/balanceofsatoshis/network/probe_destination.js:164:44)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at /usr/lib/node_modules/balanceofsatoshis/network/probe_destination.js:139:18
at /usr/lib/node_modules/balanceofsatoshis/node_modules/asyncjs-util/return_result.js:22:40
at wrapper (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/once.js:12:16)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:217:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at /usr/lib/node_modules/balanceofsatoshis/node_modules/ln-service/node_modules/lightning/lnd_methods/info/get_node.js:91:20
at Object.onReceiveStatus (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:1210:9)
at InterceptingListener._callNext (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:568:42)
at InterceptingListener.onReceiveStatus (/usr/lib/node_modules/balanceofsatoshis/node_modules/grpc/src/client_interceptors.js:618:8)
Currently the chain-receive auto selection of amount simply uses a static scalar.
This leads to some errors like:
err:
- 503
- UnexpectedErrorCreatingSwapIn
-
err:
message: 9 FAILED_PRECONDITION: target unreachable
stack:
- Error: 9 FAILED_PRECONDITION: target unreachable
This error means that the swap service cannot find a route to pay off-chain, but this is not messaged clearly
Instead this error could be handled and the amount could also be adjusted to be valid for the receiving node
Replicate the view of mempool.space but put it in a Telegram message
When the backing node or nodes goes offline, meaning that the bot loses its connection to the backing LND, have the bot report this connection loss to Telegram
Currently the max-liquidity finding process is inefficient in trying routes that it knows ahead of time are very unlikely or impossible to work. Because of the efficiency of binary search this isn't too much of a problem but it is not optimal.
So when finding the max amount that can be sent using binary search, always scope the binary search to the minimum of the desired amount and the known liquidity, policy restrictions.
I tested the bos telegram in my RaspiBlitz node (Pi 4 B) and it worked great so far. Than i observed kind of performance lags after that installation. cpu was always at 60% on that node process.
Do you expect that huge performance requirements on this? Iam hosting some telegram bots with python and those guys are running on 3% max.
Can you try to confirm that?
Even though I generally don't believe in ratio-based rebalancing, situationally it is appropriate. For example if a peer wants you to maintain a ratio, you may have to do that.
In the rebalance
command, instead of an amount to target, a ratio could be targeted which would essentially just calculate the amount for you
The value returned by bos balance --onchain
appears to be total_balance + unconfirmed_balance
rather than confirmed_balance + unconfirmed_balance
.
It would be nice to have a command that would output recent breaches in such a way that it could be used with https://github.com/alexbosworth/sendnotification
Right now it will autofind mainnet stuff
If that is missing it should just try to find testnet
Currently the flow for transferring credentials in add node is:
Instead it could be
This would save a step
When BoS is communicating with external services like Telegram or the Loop server being able to specify a proxy to go through would be very valuable for privacy by avoiding exposing the public IP address of the node (or the server where BoS is running).
$ bos --version
5.41.3
$ lnd --version
lnd version 0.10.99-beta commit=clock/v1.0.0-229-ge64e71d86dc1ac716c30a80f85a22e8fb544697f
/usr/lib/node_modules/balanceofsatoshis/node_modules/probing/graph/max_htlc_across_route.js:29
return BigInt(policy.max_htlc_mtokens);
^
TypeError: Cannot convert undefined to a BigInt
at BigInt (<anonymous>)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/probing/graph/max_htlc_across_route.js:29:14
at Array.map (<anonymous>)
at module.exports (/usr/lib/node_modules/balanceofsatoshis/node_modules/probing/graph/max_htlc_across_route.js:26:6)
at asyncAuto.findMax (/usr/lib/node_modules/balanceofsatoshis/node_modules/probing/routing/find_max_payable.js:123:26)
at runTask (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:227:13)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:167:31
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:177:13)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/onlyOnce.js:12:16
at /usr/lib/node_modules/balanceofsatoshis/node_modules/asyncjs-util/return_result.js:26:50
at wrapper (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/internal/once.js:12:16)
at processQueue (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:173:20)
at taskComplete (/usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:193:9)
at /usr/lib/node_modules/balanceofsatoshis/node_modules/async/auto.js:220:17
Will attempt --max-paths 1
workaround.
Terminal:
bos chain-receive XXX --max-fee=2500 --refund-address=AAA
Then made a tx from exchange to the given bech address, but forgot to subtract the prompting mining fees (are these even given exact in exchanges?).
Now loop is still pending. The bech address has XXX - 1000sats confirmed by se blocks already. What can I do?
I already saved the pay recover key.
When receiving a rebalance report in the telegram bot, currently only the amount and fee is reported in the message
Instead the message could be expanded to include:
It would be nice to have a browser tab dedicated to a node or nodes that would allow for doing simple node maintenance jobs
The gateway
command was designed to facilitate this usage, but has yet to be utilized
A great focus for this would be a system that would allow for keeping tabs on channel balance shifts that require rebalance actions, and then facilitating those rebalance actions
When making on-chain transactions via increase-inbound-liquidity
or swap-in
, etc, these transactions could be automatically updated with labels to capture information about what these transactions are related to
Other potential chain transactions could be updated like swap-in
, open
, increase-outbound-liquidity
, remove-peer
Generally it's nice Blockchain hygiene to avoid address re-use
When remove-peer
is executed with an external address but multiple channels, it coop closes them all out to that address
To close to multiple unique external addresses the --address
option could be repeatable
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.