show rebalance decreases in report, log open channels canceling

This commit is contained in:
Alex Bosworth 2020-07-01 21:42:13 -07:00
parent 31420b3e4e
commit 9c345e14f4
No known key found for this signature in database
GPG key ID: E80D2F3F311FD87E
8 changed files with 305 additions and 123 deletions

View file

@ -1,5 +1,10 @@
# Versions
## Version 5.39.8
- `bos open`: Log cancel pending channel actions
- `bos report`: Show decrease liquidity side on rebalances
## Version 5.39.7
- `market`: Remove method from help due to API unreliability

View file

@ -1,6 +1,6 @@
const asDisplay = rate => `${(rate / 1e4).toFixed(2)}% (${rate})`;
const asPercent = rate => `${(rate / 1e4).toFixed()}%`;
const highRate = 5e6;
const highRate = 5e5;
/** Format fee rate for display

View file

@ -399,6 +399,10 @@ module.exports = (args, cbk) => {
return cbk();
}
args.logger.info({
canceling_pending_channels: openChannels.pending.map(n => n.id),
});
// Cancel outstanding pending channels when there is an error
return asyncEach(openChannels.pending, (channel, cbk) => {
return cancelPendingChannel({id: channel.id, lnd: args.lnd}, () => {

291
package-lock.json generated
View file

@ -1,6 +1,6 @@
{
"name": "balanceofsatoshis",
"version": "5.39.7",
"version": "5.39.8",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@ -47,21 +47,21 @@
}
},
"@babel/code-frame": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
"integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
"integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
"dev": true,
"requires": {
"@babel/highlight": "^7.10.3"
"@babel/highlight": "^7.10.4"
}
},
"@babel/generator": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
"integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
"integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
"dev": true,
"requires": {
"@babel/types": "^7.10.3",
"@babel/types": "^7.10.4",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
@ -76,47 +76,47 @@
}
},
"@babel/helper-function-name": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
"integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
"integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
"dev": true,
"requires": {
"@babel/helper-get-function-arity": "^7.10.3",
"@babel/template": "^7.10.3",
"@babel/types": "^7.10.3"
"@babel/helper-get-function-arity": "^7.10.4",
"@babel/template": "^7.10.4",
"@babel/types": "^7.10.4"
}
},
"@babel/helper-get-function-arity": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
"integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
"integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
"dev": true,
"requires": {
"@babel/types": "^7.10.3"
"@babel/types": "^7.10.4"
}
},
"@babel/helper-split-export-declaration": {
"version": "7.10.1",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz",
"integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
"integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
"dev": true,
"requires": {
"@babel/types": "^7.10.1"
"@babel/types": "^7.10.4"
}
},
"@babel/helper-validator-identifier": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
"integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
"integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
"dev": true
},
"@babel/highlight": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
"integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
"integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.3",
"@babel/helper-validator-identifier": "^7.10.4",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
@ -174,34 +174,34 @@
}
},
"@babel/parser": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
"integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
"integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
"dev": true
},
"@babel/template": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
"integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
"integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.3",
"@babel/parser": "^7.10.3",
"@babel/types": "^7.10.3"
"@babel/code-frame": "^7.10.4",
"@babel/parser": "^7.10.4",
"@babel/types": "^7.10.4"
}
},
"@babel/traverse": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
"integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
"integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.3",
"@babel/generator": "^7.10.3",
"@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
"@babel/parser": "^7.10.3",
"@babel/types": "^7.10.3",
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.10.4",
"@babel/helper-function-name": "^7.10.4",
"@babel/helper-split-export-declaration": "^7.10.4",
"@babel/parser": "^7.10.4",
"@babel/types": "^7.10.4",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
@ -225,12 +225,12 @@
}
},
"@babel/types": {
"version": "7.10.3",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
"integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
"integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.3",
"@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@ -2053,9 +2053,9 @@
"dev": true
},
"goldengate": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/goldengate/-/goldengate-5.7.0.tgz",
"integrity": "sha512-lSg27HvOFPSNOUrrHuXEYWBEHqe9dLL/4UkZrI9OGY6gxkWicSwCobf4Af2m18LH5UGU+P0YypCUS0+wNUViog==",
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/goldengate/-/goldengate-5.8.0.tgz",
"integrity": "sha512-G1jmKieDzwvhPI80FYK9Xg6UbZrb+SW3wPaew70rI8dTh1/c2rumt04hUy0aGQqzjYkRuAvDzZ4oX4NHre277g==",
"requires": {
"@grpc/proto-loader": "0.5.4",
"@mitmaro/http-authorization-header": "1.0.0",
@ -2067,7 +2067,7 @@
"bn.js": "5.1.2",
"cbor": "5.0.2",
"grpc": "1.24.3",
"ln-service": "49.0.0",
"ln-service": "49.1.2",
"macaroon": "3.0.4",
"pushdata-bitcoin": "1.0.1",
"varuint-bitcoin": "1.1.2"
@ -2079,9 +2079,9 @@
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
},
"ln-service": {
"version": "49.0.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.0.0.tgz",
"integrity": "sha512-dkk2W2jrDHmip/8lLnDIO+I0LCDrh1x4aa7mE9ADml8smpyBVEjZDhBmFn9XVnj0lk4XyBvXq3peoEhJPjZPFg==",
"version": "49.1.2",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.1.2.tgz",
"integrity": "sha512-2XvP4aEzAfHXed3aCZ5ZPL1UVLVSAi+m48cwDepSAsUFQ6dMzKqC4VFf0/jyHBxaDLt8YTNqKhDbjCO5TUYyLw==",
"requires": {
"@datastructures-js/priority-queue": "4.1.1",
"async": "3.2.0",
@ -2094,7 +2094,7 @@
"express": "4.17.1",
"invoices": "1.1.0",
"is-base64": "1.1.0",
"lightning": "2.0.15",
"lightning": "2.0.19",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.0"
@ -2345,20 +2345,20 @@
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
},
"inquirer": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.2.0.tgz",
"integrity": "sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ==",
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.0.tgz",
"integrity": "sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA==",
"requires": {
"ansi-escapes": "^4.2.1",
"chalk": "^3.0.0",
"chalk": "^4.1.0",
"cli-cursor": "^3.1.0",
"cli-width": "^2.0.0",
"cli-width": "^3.0.0",
"external-editor": "^3.0.3",
"figures": "^3.0.0",
"lodash": "^4.17.15",
"mute-stream": "0.0.8",
"run-async": "^2.4.0",
"rxjs": "^6.5.3",
"rxjs": "^6.6.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0",
"through": "^2.3.6"
@ -2387,9 +2387,9 @@
}
},
"chalk": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@ -2403,6 +2403,11 @@
"restore-cursor": "^3.1.0"
}
},
"cli-width": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
},
"external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@ -2976,9 +2981,9 @@
"dev": true
},
"lightning": {
"version": "2.0.15",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.15.tgz",
"integrity": "sha512-WFrsgQOUYbcH3f5y6lQ2oRxTFL7byRZO1MCLkfanPlq74wJSLgxubgjh+S8Lhze9O4Lw7XlOy18cB76bQs0UsQ==",
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.19.tgz",
"integrity": "sha512-b3GH6KhjbTJTjk9KJ3+9UWz9TSLYfKlZ/3/L+XlrcwydvRjcLsPmefcTL6/R4o9BU0yVWF0NUMuZXJtnRWap5g==",
"requires": {
"@grpc/proto-loader": "0.5.4",
"async": "3.2.0",
@ -3018,10 +3023,55 @@
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
},
"goldengate": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/goldengate/-/goldengate-5.7.0.tgz",
"integrity": "sha512-lSg27HvOFPSNOUrrHuXEYWBEHqe9dLL/4UkZrI9OGY6gxkWicSwCobf4Af2m18LH5UGU+P0YypCUS0+wNUViog==",
"requires": {
"@grpc/proto-loader": "0.5.4",
"@mitmaro/http-authorization-header": "1.0.0",
"async": "3.2.0",
"asyncjs-util": "1.2.2",
"bip65": "1.0.3",
"bitcoin-ops": "1.4.1",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"cbor": "5.0.2",
"grpc": "1.24.3",
"ln-service": "49.0.0",
"macaroon": "3.0.4",
"pushdata-bitcoin": "1.0.1",
"varuint-bitcoin": "1.1.2"
},
"dependencies": {
"ln-service": {
"version": "49.0.0",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.0.0.tgz",
"integrity": "sha512-dkk2W2jrDHmip/8lLnDIO+I0LCDrh1x4aa7mE9ADml8smpyBVEjZDhBmFn9XVnj0lk4XyBvXq3peoEhJPjZPFg==",
"requires": {
"@datastructures-js/priority-queue": "4.1.1",
"async": "3.2.0",
"asyncjs-util": "1.2.2",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"bolt07": "1.5.1",
"bolt09": "0.1.0",
"cors": "2.8.5",
"express": "4.17.1",
"invoices": "1.1.0",
"is-base64": "1.1.0",
"lightning": "2.0.15",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.0"
}
}
}
},
"lightning": {
"version": "2.0.17",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.17.tgz",
"integrity": "sha512-6T/9GBaF86DeLz8GP81GwpmWeiwqSwtE3IR+SngkRzwLXUbL2O3aGRDirYJOfOHu1JFQe2Pic9/7vbO6wCoK2w==",
"version": "2.0.15",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.15.tgz",
"integrity": "sha512-WFrsgQOUYbcH3f5y6lQ2oRxTFL7byRZO1MCLkfanPlq74wJSLgxubgjh+S8Lhze9O4Lw7XlOy18cB76bQs0UsQ==",
"requires": {
"@grpc/proto-loader": "0.5.4",
"async": "3.2.0",
@ -3057,14 +3107,35 @@
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.0"
},
"dependencies": {
"lightning": {
"version": "2.0.17",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.17.tgz",
"integrity": "sha512-6T/9GBaF86DeLz8GP81GwpmWeiwqSwtE3IR+SngkRzwLXUbL2O3aGRDirYJOfOHu1JFQe2Pic9/7vbO6wCoK2w==",
"requires": {
"@grpc/proto-loader": "0.5.4",
"async": "3.2.0",
"asyncjs-util": "1.2.2",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"body-parser": "1.19.0",
"bolt07": "1.5.1",
"bolt09": "0.1.0",
"cbor": "5.0.2",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.0"
}
}
}
}
}
},
"ln-service": {
"version": "49.1.1",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.1.1.tgz",
"integrity": "sha512-PBG92fYxGZxAbnB/2rTDNkh/9sfN2kAI5B2iCnOKlPajAcvaxPw+LJdmbsTSghoR7tphnsEnlpuo99jJ1WW+YA==",
"version": "49.1.2",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.1.2.tgz",
"integrity": "sha512-2XvP4aEzAfHXed3aCZ5ZPL1UVLVSAi+m48cwDepSAsUFQ6dMzKqC4VFf0/jyHBxaDLt8YTNqKhDbjCO5TUYyLw==",
"requires": {
"@datastructures-js/priority-queue": "4.1.1",
"async": "3.2.0",
@ -3077,7 +3148,7 @@
"express": "4.17.1",
"invoices": "1.1.0",
"is-base64": "1.1.0",
"lightning": "2.0.18",
"lightning": "2.0.19",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.0"
@ -3087,39 +3158,49 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
},
"lightning": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/lightning/-/lightning-2.0.18.tgz",
"integrity": "sha512-AFCpMp3ALPCtC+9luDUX6xEeQHGG2HJSZ2rnDtvlD1Okjnh7bJ09NM+L3R/8BKzK696LBXR/fkbKvfnPqN5+Ng==",
"requires": {
"@grpc/proto-loader": "0.5.4",
"async": "3.2.0",
"asyncjs-util": "1.2.2",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"body-parser": "1.19.0",
"bolt07": "1.5.1",
"bolt09": "0.1.0",
"cbor": "5.0.2",
"express": "4.17.1",
"grpc": "1.24.3",
"invoices": "1.1.0"
}
}
}
},
"ln-sync": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-0.0.2.tgz",
"integrity": "sha512-C1gEVEE+0gxDdA/aTIIcx85NKdjo4cYhBe4yfqmrPLXGR9KtJaFxXALAuRNHh2zJL45hNz/waWMgNOF9UgIb5w==",
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/ln-sync/-/ln-sync-0.0.3.tgz",
"integrity": "sha512-Xhk5XwKVk6/uu0qI+xrzxNLwl1Hz8p50CgSLM59VL+XNr1RDZ1FmwUWP10pP42fIvu/Zi6ZbkG3kifLYl+UiZg==",
"requires": {
"async": "3.2.0",
"asyncjs-util": "1.2.2",
"cbor": "5.0.2",
"colorette": "1.2.0",
"ln-service": "49.1.1",
"ln-service": "49.1.2",
"node-lmdb": "0.9.2"
},
"dependencies": {
"bn.js": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
"integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA=="
},
"ln-service": {
"version": "49.1.2",
"resolved": "https://registry.npmjs.org/ln-service/-/ln-service-49.1.2.tgz",
"integrity": "sha512-2XvP4aEzAfHXed3aCZ5ZPL1UVLVSAi+m48cwDepSAsUFQ6dMzKqC4VFf0/jyHBxaDLt8YTNqKhDbjCO5TUYyLw==",
"requires": {
"@datastructures-js/priority-queue": "4.1.1",
"async": "3.2.0",
"asyncjs-util": "1.2.2",
"bitcoinjs-lib": "5.1.10",
"bn.js": "5.1.2",
"bolt07": "1.5.1",
"bolt09": "0.1.0",
"cors": "2.8.5",
"express": "4.17.1",
"invoices": "1.1.0",
"is-base64": "1.1.0",
"lightning": "2.0.19",
"macaroon": "3.0.4",
"morgan": "1.10.0",
"ws": "7.3.0"
}
}
}
},
"load-json-file": {
@ -4581,9 +4662,9 @@
"integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
},
"rxjs": {
"version": "6.5.5",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz",
"integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==",
"version": "6.6.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz",
"integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==",
"requires": {
"tslib": "^1.9.0"
}

View file

@ -25,12 +25,12 @@
"colorette": "1.2.0",
"crypto-js": "4.0.0",
"csv-parse": "4.10.1",
"goldengate": "5.7.0",
"goldengate": "5.8.0",
"ini": "1.3.5",
"inquirer": "7.2.0",
"inquirer": "7.3.0",
"ln-accounting": "4.1.6",
"ln-service": "49.1.1",
"ln-sync": "0.0.2",
"ln-service": "49.1.2",
"ln-sync": "0.0.3",
"moment": "2.27.0",
"psbt": "1.1.3",
"qrcode-terminal": "0.12.0",
@ -67,5 +67,5 @@
"scripts": {
"test": "tap test/arrays/*.js test/balances/*.js test/chain/*.js test/encryption/*.js test/fiat/*.js test/lnd/*.js test/network/*.js test/nodes/*.js test/responses/*.js test/routing/*.js test/swaps/*.js test/telegram/*.js test/wallets/*.js"
},
"version": "5.39.7"
"version": "5.39.8"
}

View file

@ -8,6 +8,7 @@ const {getChannels} = require('ln-service');
const {getNode} = require('ln-service');
const {getRouteThroughHops} = require('ln-service');
const {getWalletInfo} = require('ln-service');
const {getWalletVersion} = require('ln-service');
const {payViaRoutes} = require('ln-service');
const {returnResult} = require('asyncjs-util');
const {routeFromChannels} = require('ln-service');
@ -28,9 +29,11 @@ const flatten = arr => [].concat(...arr);
const highInbound = 4500000;
const {isArray} = Array;
const isPublicKey = n => /^[0-9A-F]{66}$/i.test(n);
const legacyMaxRebalanceTokens = 4294967;
const legacyVersion = '0.10.0-beta';
const {max} = Math;
const maxPaymentSize = 4294967;
const maxRebalanceTokens = 4294967;
const maxRebalanceTokens = 16777215;
const {min} = Math;
const minInboundBalance = 4294967 * 2;
const minRemoteBalance = 4294967;
@ -118,6 +121,17 @@ module.exports = (args, cbk) => {
// Get public key
getPublicKey: ['lnd', ({lnd}, cbk) => getWalletInfo({lnd}, cbk)],
// Determine the maximum tokens that can be rebalanced
maxRebalanceTokens: ['lnd', ({lnd}, cbk) => {
return getWalletVersion({lnd}, (err, res) => {
if (!!err || res.version === legacyVersion) {
return cbk(null, legacyMaxRebalanceTokens);
}
return cbk(null, maxRebalanceTokens);
});
}],
// Figure out which public keys and channels to avoid
ignore: [
'getInitialLiquidity',
@ -535,7 +549,13 @@ module.exports = (args, cbk) => {
}],
// Create local invoice
invoice: ['channels', 'findRoute', 'lnd', ({findRoute, lnd}, cbk) => {
invoice: [
'channels',
'findRoute',
'lnd',
'maxRebalanceTokens',
({findRoute, lnd, maxRebalanceTokens}, cbk) =>
{
return createInvoice({
lnd,
cltv_delta: defaultCltvDelta,

View file

@ -21,7 +21,7 @@ const report = [
},
{},
{
subtitle: '50 years ago',
subtitle: '51 years ago',
title: 'Last Block:',
},
{

View file

@ -1,11 +1,14 @@
const asyncAuto = require('async/auto');
const asyncMap = require('async/map');
const {bolden} = require('@alexbosworth/html2unicode');
const {decodeChanId} = require('bolt07');
const {getAutopilot} = require('ln-service');
const {getBackups} = require('ln-service');
const {getChainFeeRate} = require('ln-service');
const {getChannel} = require('ln-service');
const {getChannels} = require('ln-service');
const {getClosedChannels} = require('ln-service');
const {getInvoice} = require('ln-service');
const {getInvoices} = require('ln-service');
const {getNetworkGraph} = require('ln-service');
const {getPayments} = require('ln-service');
@ -142,6 +145,67 @@ module.exports = ({node, style}, cbk) => {
return cbk(null, currency);
}],
// Get rebalances
getRebalances: [
'getInfo',
'getLnd',
'getPayments',
({getInfo, getLnd, getPayments}, cbk) =>
{
const rebalances = getPayments.payments.slice().reverse()
.filter(payment => now() - Date.parse(payment.created_at) < afterMs)
.filter(payment => payment.destination === getInfo.public_key);
return asyncMap(rebalances, (rebalance, cbk) => {
return getInvoice({id: rebalance.id, lnd: getLnd.lnd}, (err, res) => {
if (!!err) {
return cbk(err);
}
const [outHop] = rebalance.hops;
const [payment] = res.payments;
if (!payment) {
return cbk(null, {
created_at: rebalance.created_at,
fee: rebalance.fee,
out_peer: outHop,
tokens: rebalance.tokens,
});
}
return getChannel({
id: payment.in_channel,
lnd: getLnd.lnd,
},
(err, channel) => {
if (!!err) {
return cbk(null, {
created_at: rebalance.created_at,
fee: rebalance.fee,
out_peer: outHop,
tokens: rebalance.tokens,
});
}
const inPeer = channel.policies.find(policy => {
return policy.public_key !== getInfo.public_key;
});
return cbk(null, {
created_at: rebalance.created_at,
fee: rebalance.fee,
in_peer: inPeer.public_key,
out_peer: outHop,
tokens: rebalance.tokens,
});
});
});
},
cbk);
}],
report: [
'currency',
'getAutopilot',
@ -156,6 +220,7 @@ module.exports = ({node, style}, cbk) => {
'getNetwork',
'getPayments',
'getRate',
'getRebalances',
({
currency,
getAutopilot,
@ -171,6 +236,7 @@ module.exports = ({node, style}, cbk) => {
getNetwork,
getPayments,
getRate,
getRebalances,
}, cbk) =>
{
const activity = [];
@ -238,24 +304,24 @@ module.exports = ({node, style}, cbk) => {
return activity.push({elements, date: invoice.confirmed_at});
});
getPayments.payments.slice().reverse()
.filter(payment => now() - Date.parse(payment.created_at) < afterMs)
.filter(payment => payment.destination === getInfo.public_key)
.forEach(payment => {
getRebalances.forEach(rebalance => {
const elements = [];
const {fee} = payment;
const {tokens} = payment;
const {fee} = rebalance;
const {tokens} = rebalance;
const amount = `${formatAsBigUnit(tokens)} ${currency}`;
const [outHop] = payment.hops;
const inHop = rebalance.in_peer;
const outHop = rebalance.out_peer;
const inNode = getGraph.nodes.find(n => n.public_key === inHop);
const outNode = getGraph.nodes.find(n => n.public_key === outHop);
const inbound = (inNode || {}).alias || (inNode || {}).public_key;
const outbound = (outNode || {}).alias || (outNode || {}).public_key;
elements.push({
subtitle: moment(payment.created_at).fromNow(),
subtitle: moment(rebalance.created_at).fromNow(),
title: getInfo.alias || getInfo.public_key,
});
@ -265,11 +331,17 @@ module.exports = ({node, style}, cbk) => {
details: `Increased inbound liquidity on ${outbound} by ${amount}`,
});
if (!!inbound) {
elements.push({
details: `Decreased inbound liquidity on ${inbound}`,
});
}
elements.push({
details: `Fee: ${formatAsBigUnit(fee)} ${currency}`,
});
return activity.push({elements, date: payment.created_at});
return activity.push({elements, date: rebalance.created_at});
});
getPayments.payments.slice().reverse()