ADD: process-unpaid-invoices; REF: stuck payments script; REF: website; REF: important channels script; DOC: some docs

This commit is contained in:
Overtorment
2020-05-04 14:09:37 +01:00
parent 9f45c31618
commit e390a06aae
10 changed files with 252 additions and 24 deletions

View File

@@ -1,20 +1,52 @@
const important_channels = {
'03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f': 'ACINQ',
'03abf6f44c355dec0d5aa155bdbdd6e0c8fefe318eff402de65c6eb2e1be55dc3e': 'OpenNode',
'0242a4ae0c5bef18048fbecf995094b74bfb0f7391418d71ed394784373f41e4f3': 'coingate.com',
'0254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d3': 'bitrefill thor',
'030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f': 'bitrefill 2',
'025f1456582e70c4c06b61d5c8ed3ce229e6d0db538be337a2dc6d163b0ebc05a5': 'paywithmoon.com',
'0279c22ed7a068d10dc1a38ae66d2d6461e269226c60258c021b1ddcdfe4b00bc4': 'ln1.satoshilabs.com',
'026c7d28784791a4b31a64eb34d9ab01552055b795919165e6ae886de637632efb': 'LivingRoomOfSatoshi',
'02816caed43171d3c9854e3b0ab2cf0c42be086ff1bd4005acc2a5f7db70d83774': 'ln.pizza aka fold',
};
const wumbo = {
'03abf6f44c355dec0d5aa155bdbdd6e0c8fefe318eff402de65c6eb2e1be55dc3e': true, // opennode
'0254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d3': true, // bitrefill
'030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f': true, // bitrefill 2
'02816caed43171d3c9854e3b0ab2cf0c42be086ff1bd4005acc2a5f7db70d83774': true, // fold
'03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f': {
name: 'ACINQ',
uri: '03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f@34.239.230.56:9735',
},
'03abf6f44c355dec0d5aa155bdbdd6e0c8fefe318eff402de65c6eb2e1be55dc3e': {
name: 'OpenNode',
uri: '03abf6f44c355dec0d5aa155bdbdd6e0c8fefe318eff402de65c6eb2e1be55dc3e@18.221.23.28:9735',
wumbo: 1,
},
'0242a4ae0c5bef18048fbecf995094b74bfb0f7391418d71ed394784373f41e4f3': {
name: 'coingate.com',
uri: '0242a4ae0c5bef18048fbecf995094b74bfb0f7391418d71ed394784373f41e4f3@3.124.63.44:9735',
},
'0254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d3': {
name: 'bitrefill thor',
uri: '0254ff808f53b2f8c45e74b70430f336c6c76ba2f4af289f48d6086ae6e60462d3@52.30.63.2:9735',
wumbo: 1,
},
'030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f': {
name: 'bitrefill 2',
uri: '030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f@52.50.244.44:9735',
wumbo: 1,
},
'025f1456582e70c4c06b61d5c8ed3ce229e6d0db538be337a2dc6d163b0ebc05a5': {
name: 'paywithmoon.com',
uri: '025f1456582e70c4c06b61d5c8ed3ce229e6d0db538be337a2dc6d163b0ebc05a5@52.86.210.65:9735',
},
'0279c22ed7a068d10dc1a38ae66d2d6461e269226c60258c021b1ddcdfe4b00bc4': {
name: 'ln1.satoshilabs.com',
uri: '0279c22ed7a068d10dc1a38ae66d2d6461e269226c60258c021b1ddcdfe4b00bc4@157.230.28.160:9735',
},
'02004c625d622245606a1ea2c1c69cfb4516b703b47945a3647713c05fe4aaeb1c': {
name: 'LivingRoomOfSatoshi',
uri: '02004c625d622245606a1ea2c1c69cfb4516b703b47945a3647713c05fe4aaeb1c@172.81.178.151:9735',
},
'02816caed43171d3c9854e3b0ab2cf0c42be086ff1bd4005acc2a5f7db70d83774': {
name: 'ln.pizza aka fold',
uri: '02816caed43171d3c9854e3b0ab2cf0c42be086ff1bd4005acc2a5f7db70d83774@35.238.153.25:9735',
wumbo: 1,
},
'0331f80652fb840239df8dc99205792bba2e559a05469915804c08420230e23c7c': {
name: 'LightningPowerUsers.com',
uri: '0331f80652fb840239df8dc99205792bba2e559a05469915804c08420230e23c7c@34.200.181.109:9735',
},
'033d8656219478701227199cbd6f670335c8d408a92ae88b962c49d4dc0e83e025': {
name: 'bfx-lnd0',
uri: '033d8656219478701227199cbd6f670335c8d408a92ae88b962c49d4dc0e83e025@34.65.85.39:9735',
},
};
let lightning = require('../lightning');
@@ -27,12 +59,12 @@ lightning.listChannels({}, function(err, response) {
}
let lightningListChannels = response;
for (let channel of lightningListChannels.channels) {
if (0 && channel.capacity < 5000000) {
if (channel.capacity < 0.05 / 100000000) {
console.log(
'lncli closechannel',
channel.channel_point.replace(':', ' '),
(!channel.active && '--force') || '',
'#',
'; sleep 10 #',
'low capacity channel',
channel.capacity / 100000000,
'btc',
@@ -40,7 +72,27 @@ lightning.listChannels({}, function(err, response) {
}
}
for (let important of Object.keys(important_channels)) {
console.log('# reconnect important channels that are inactive:\n');
for (const important of Object.keys(important_channels)) {
for (let channel of lightningListChannels.channels) {
if (channel.remote_pubkey === important && !channel.active) {
console.log(
'lncli disconnect',
channel.remote_pubkey,
'; sleep 5;',
'lncli connect',
important_channels[channel.remote_pubkey].uri,
'#',
important_channels[channel.remote_pubkey].name,
);
}
}
}
console.log('\n# open important channels:\n');
for (const important of Object.keys(important_channels)) {
let atLeastOneChannelIsSufficientCapacity = false;
for (let channel of lightningListChannels.channels) {
if (channel.remote_pubkey === important && channel.local_balance >= 4000000 && channel.active) {
@@ -50,12 +102,17 @@ lightning.listChannels({}, function(err, response) {
if (!atLeastOneChannelIsSufficientCapacity) {
console.log(
'lncli disconnect',
important,
'; sleep 3;',
'lncli openchannel --node_key',
important,
'--connect',
important_channels[important].uri.split('@')[1],
'--local_amt',
wumbo[important] ? '167772150' : '16777215',
important_channels[important].wumbo ? '167772150' : '16777215',
'#',
important_channels[important],
important_channels[important].name,
);
}
}

View File

@@ -1,6 +1,12 @@
/**
* This script gets all locked payments from our database and cross-checks them with actual
* sentout payments from LND. If locked payment is in there we moe locked payment to array of real payments for the user
* (it is effectively spent coins by user), if not - we attempt to pay it again (if it is not too old).
*/
import { User, Lock, Paym } from '../class/';
const config = require('../config');
const fs = require('fs');
var Redis = require('ioredis');
var redis = new Redis(config.redis);
@@ -15,6 +21,7 @@ let lightning = require('../lightning');
let tempPaym = new Paym(redis, bitcoinclient, lightning);
let listPayments = await tempPaym.listPayments();
console.log('done', 'got', listPayments['payments'].length, 'payments');
fs.writeFileSync('listPayments.json', JSON.stringify(listPayments['payments'], null, 2));
for (let key of keys) {
const userid = key.replace('locked_payments_for_', '');
@@ -34,6 +41,7 @@ let lightning = require('../lightning');
if (daysPassed < 2) {
// if (!await payment.isExpired()) {
let sendResult;
console.log('attempting to pay to route');
try {
sendResult = await payment.attemptPayToRoute();
} catch (_) {

View File

@@ -0,0 +1,35 @@
/**
* This script goes through all user invoices in LND and if it is settled - marks it
* so in our database. Does this only for invoices younger than week. *
*/
import { Invo } from '../class/';
const config = require('../config');
const fs = require('fs');
const Redis = require('ioredis');
const redis = new Redis(config.redis);
let bitcoinclient = require('../bitcoin');
let lightning = require('../lightning');
(async () => {
console.log('fetching listinvoices...');
let tempInv = new Invo(redis, bitcoinclient, lightning);
let listinvoices = await tempInv.listInvoices();
console.log('done', 'got', listinvoices['invoices'].length, 'invoices');
fs.writeFileSync('listInvoices.json', JSON.stringify(listinvoices['invoices'], null, 2));
let markedInvoices = 0;
for (const invoice of listinvoices['invoices']) {
if (invoice.state === 'SETTLED' && +invoice.creation_date >= +new Date() / 1000 - 3600 * 24 * 7) {
tempInv.setInvoice(invoice.payment_request);
await tempInv.markAsPaidInDatabase();
markedInvoices++;
process.stdout.write(markedInvoices + '\r');
}
}
console.log('done, marked', markedInvoices, 'invoices');
process.exit();
})();