mirror of
https://github.com/ZmnSCPxj/clboss.git
synced 2026-08-13 12:33:20 +02:00
Add AskreneUpdates, a standalone module both rebalancers will use to hold the node disables and channel_update overrides they learn from routing failures. askrene never ages these (they carry no timestamp, unlike the inform-channel constraints), so instead of accumulating them in a shared askrene layer they live in two append-only sqlite tables here and are projected, still-fresh, into a private per-request layer for each getroutes. Records arrive as AskreneNodeDisableUpdate / AskreneChannelUpdate. A ReqResp (Request/ResponseAskreneUpdates) returns the distinct nodes disabled within clboss-node-disable-age-secs and the latest override per channel direction within clboss-channel-update-age-secs. Static open_layer/close_layer build and tear down a uuid-named, non-persistent layer from a response (open_layer returns an empty name if askrene is absent, so a caller never names a missing layer). Rows are pruned only at clboss-update-retain-secs (default 30d), so the log survives long enough to mine. Nothing calls the module yet. Also add an AskreneLayer header comment pointing at this store for where the learned node disables and channel_update overrides live.
233 lines
7.7 KiB
C++
233 lines
7.7 KiB
C++
#include"Boss/Mod/ActiveProber.hpp"
|
|
#include"Boss/Mod/AmountSettingsHandler.hpp"
|
|
#include"Boss/Mod/AskreneUpdates.hpp"
|
|
#include"Boss/Mod/AutoDisconnector.hpp"
|
|
#include"Boss/Mod/AvailableRpcCommandsAnnouncer.hpp"
|
|
#include"Boss/Mod/BlockTracker.hpp"
|
|
#include"Boss/Mod/BoltzSwapper/Main.hpp"
|
|
#include"Boss/Mod/ChannelCandidateInvestigator/Main.hpp"
|
|
#include"Boss/Mod/ChannelCandidateMatchmaker.hpp"
|
|
#include"Boss/Mod/ChannelCandidatePreinvestigator.hpp"
|
|
#include"Boss/Mod/ChannelCreateDestroyMonitor.hpp"
|
|
#include"Boss/Mod/ChannelCreationDecider.hpp"
|
|
#include"Boss/Mod/ChannelCreator/Main.hpp"
|
|
#include"Boss/Mod/ChannelFeeManager.hpp"
|
|
#include"Boss/Mod/ChannelFeeSetter.hpp"
|
|
#include"Boss/Mod/ChannelFinderByDistance.hpp"
|
|
#include"Boss/Mod/ChannelFinderByEarnedFee.hpp"
|
|
#include"Boss/Mod/ChannelFinderByListpays.hpp"
|
|
#include"Boss/Mod/ChannelFinderByPopularity.hpp"
|
|
#include"Boss/Mod/ChannelFundsComputer.hpp"
|
|
#include"Boss/Mod/ComplainerByLowConnectRate.hpp"
|
|
#include"Boss/Mod/ComplainerByLowSuccessPerDay.hpp"
|
|
#include"Boss/Mod/ConnectFinderByDns.hpp"
|
|
#include"Boss/Mod/ConnectFinderByHardcode.hpp"
|
|
#include"Boss/Mod/Connector.hpp"
|
|
#include"Boss/Mod/CommandReceiver.hpp"
|
|
#include"Boss/Mod/Dowser.hpp"
|
|
#include"Boss/Mod/EarningsRebalancer.hpp"
|
|
#include"Boss/Mod/EarningsTracker.hpp"
|
|
#include"Boss/Mod/FeeModderByBalance.hpp"
|
|
#include"Boss/Mod/FeeMonitor.hpp"
|
|
#include"Boss/Mod/FeeModderByPriceTheory.hpp"
|
|
#include"Boss/Mod/FeeModderBySize.hpp"
|
|
#include"Boss/Mod/ForwardFeeMonitor.hpp"
|
|
#include"Boss/Mod/FundsMover/Main.hpp"
|
|
#include"Boss/Mod/HtlcAcceptor.hpp"
|
|
#include"Boss/Mod/InitialConnect.hpp"
|
|
#include"Boss/Mod/InitialRebalancer.hpp"
|
|
#include"Boss/Mod/Initiator.hpp"
|
|
#include"Boss/Mod/InternetConnectionMonitor.hpp"
|
|
#include"Boss/Mod/InvoicePayer.hpp"
|
|
#include"Boss/Mod/JitRebalancer.hpp"
|
|
#include"Boss/Mod/JsonOutputter.hpp"
|
|
#include"Boss/Mod/ListfundsAnalyzer.hpp"
|
|
#include"Boss/Mod/ListfundsAnnouncer.hpp"
|
|
#include"Boss/Mod/ListpaysHandler.hpp"
|
|
#include"Boss/Mod/ListpeersAnalyzer.hpp"
|
|
#include"Boss/Mod/ListpeersAnnouncer.hpp"
|
|
#include"Boss/Mod/Manifester.hpp"
|
|
#include"Boss/Mod/MoveFundsCommand.hpp"
|
|
#include"Boss/Mod/NeedsConnectSolicitor.hpp"
|
|
#include"Boss/Mod/NeedsOnchainFundsSwapper.hpp"
|
|
#include"Boss/Mod/NewaddrHandler.hpp"
|
|
#include"Boss/Mod/NodeBalanceSwapper.hpp"
|
|
#include"Boss/Mod/OnchainFeeMonitor.hpp"
|
|
#include"Boss/Mod/OnchainFundsAnnouncer.hpp"
|
|
#include"Boss/Mod/OnchainFundsIgnorer.hpp"
|
|
#include"Boss/Mod/PaymentDeleter.hpp"
|
|
#include"Boss/Mod/PeerCompetitorFeeMonitor/Main.hpp"
|
|
#include"Boss/Mod/PeerComplaintsDesk/Main.hpp"
|
|
#include"Boss/Mod/PeerFromScidMapper.hpp"
|
|
#include"Boss/Mod/PeerMetrician.hpp"
|
|
#include"Boss/Mod/PeerStatistician.hpp"
|
|
#include"Boss/Mod/RebalanceModeManager.hpp"
|
|
#include"Boss/Mod/RebalanceUnmanager.hpp"
|
|
#include"Boss/Mod/Reconnector.hpp"
|
|
#include"Boss/Mod/RegularActiveProbe.hpp"
|
|
#include"Boss/Mod/RpcWrapper.hpp"
|
|
#include"Boss/Mod/SelfUptimeMonitor.hpp"
|
|
#include"Boss/Mod/SendpayResultMonitor.hpp"
|
|
#include"Boss/Mod/SetConfigHandler.hpp"
|
|
#include"Boss/Mod/StatusCommand.hpp"
|
|
#include"Boss/Mod/SwapManager.hpp"
|
|
#include"Boss/Mod/SwapReporter.hpp"
|
|
#include"Boss/Mod/TimerTwiceDailyAnnouncer.hpp"
|
|
#include"Boss/Mod/Timers.hpp"
|
|
#include"Boss/Mod/UnmanagedManager.hpp"
|
|
#include"Boss/Mod/Waiter.hpp"
|
|
#include"Boss/Mod/all.hpp"
|
|
#include<vector>
|
|
|
|
namespace {
|
|
|
|
class All {
|
|
private:
|
|
std::vector<std::shared_ptr<void>> modules;
|
|
|
|
public:
|
|
template<typename M, typename... As>
|
|
std::shared_ptr<M> install(As&&... as) {
|
|
auto ptr = std::make_shared<M>(as...);
|
|
modules.push_back(std::shared_ptr<void>(ptr));
|
|
return ptr;
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
namespace Boss { namespace Mod {
|
|
|
|
std::shared_ptr<void> all( std::ostream& cout
|
|
, S::Bus& bus
|
|
, Ev::ThreadPool& threadpool
|
|
, std::function< Net::Fd( std::string const&
|
|
, std::string const&
|
|
)
|
|
> open_rpc_socket
|
|
) {
|
|
auto all = std::make_shared<All>();
|
|
|
|
/* Basic. */
|
|
auto waiter = all->install<Waiter>(bus);
|
|
auto imon = all->install<InternetConnectionMonitor>( bus
|
|
, threadpool
|
|
, *waiter
|
|
);
|
|
all->install<JsonOutputter>(cout, bus);
|
|
all->install<CommandReceiver>(bus);
|
|
all->install<RpcWrapper>(bus);
|
|
all->install<AvailableRpcCommandsAnnouncer>(bus);
|
|
|
|
/* Startup. */
|
|
all->install<Manifester>(bus);
|
|
all->install<Initiator>(bus, threadpool, std::move(open_rpc_socket));
|
|
all->install<SetConfigHandler>(bus);
|
|
|
|
/* General settings. */
|
|
all->install<AmountSettingsHandler>(bus);
|
|
|
|
/* Regular timers. */
|
|
all->install<BlockTracker>(bus);
|
|
all->install<Timers>(bus, *waiter);
|
|
all->install<TimerTwiceDailyAnnouncer>(bus);
|
|
|
|
/* Connection wrangling. */
|
|
all->install<InitialConnect>(bus);
|
|
all->install<Connector>(bus);
|
|
all->install<NeedsConnectSolicitor>(bus);
|
|
all->install<ConnectFinderByDns>(bus);
|
|
all->install<ConnectFinderByHardcode>(bus);
|
|
all->install<Reconnector>(bus);
|
|
all->install<AutoDisconnector>(bus);
|
|
|
|
/* Status monitors. */
|
|
all->install<ChannelFundsComputer>(bus);
|
|
all->install<ListpeersAnnouncer>(bus);
|
|
all->install<ListpeersAnalyzer>(bus);
|
|
all->install<OnchainFeeMonitor>(bus, *waiter);
|
|
all->install<ListfundsAnnouncer>(bus);
|
|
all->install<ListfundsAnalyzer>(bus);
|
|
all->install<OnchainFundsAnnouncer>(bus);
|
|
all->install<OnchainFundsIgnorer>(bus);
|
|
all->install<ChannelCreateDestroyMonitor>(bus);
|
|
all->install<SelfUptimeMonitor>(bus);
|
|
|
|
/* Channel creation wrangling. */
|
|
all->install<ChannelFinderByDistance>(bus, *waiter);
|
|
all->install<ChannelFinderByEarnedFee>(bus);
|
|
all->install<ChannelFinderByListpays>(bus);
|
|
all->install<ChannelFinderByPopularity>(bus, *waiter);
|
|
all->install<ChannelCandidatePreinvestigator>(bus);
|
|
auto investigator = all->install< ChannelCandidateInvestigator::Main
|
|
>(bus, *imon);
|
|
all->install<ChannelCreationDecider>(bus);
|
|
all->install<ChannelCreator::Main>(bus, *waiter, *investigator);
|
|
all->install<ChannelCandidateMatchmaker>(bus);
|
|
all->install<Dowser>(bus);
|
|
|
|
/* Status. */
|
|
all->install<StatusCommand>(bus);
|
|
|
|
/* Offchain-to-onchain swap. */
|
|
all->install<NewaddrHandler>(bus);
|
|
all->install<BoltzSwapper::Main>(bus, threadpool);
|
|
all->install<SwapManager>(bus);
|
|
all->install<NeedsOnchainFundsSwapper>(bus);
|
|
all->install<NodeBalanceSwapper>(bus);
|
|
all->install<SwapReporter>(bus);
|
|
|
|
/* Invoice wrangling. */
|
|
all->install<InvoicePayer>(bus);
|
|
all->install<ListpaysHandler>(bus);
|
|
all->install<PaymentDeleter>(bus);
|
|
|
|
/* Channel fees. */
|
|
all->install<FeeMonitor>(bus);
|
|
all->install<PeerCompetitorFeeMonitor::Main>(bus);
|
|
all->install<ChannelFeeSetter>(bus);
|
|
all->install<ChannelFeeManager>(bus);
|
|
all->install<FeeModderBySize>(bus);
|
|
all->install<FeeModderByBalance>(bus);
|
|
all->install<FeeModderByPriceTheory>(bus);
|
|
|
|
/* HTLC manipulation. */
|
|
all->install<HtlcAcceptor>(bus, *waiter);
|
|
|
|
/* Bad peer monitoring. */
|
|
all->install<SendpayResultMonitor>(bus);
|
|
all->install<ForwardFeeMonitor>(bus);
|
|
all->install<PeerStatistician>(bus);
|
|
all->install<PeerMetrician>(bus);
|
|
all->install<ActiveProber>(bus, *investigator);
|
|
all->install<RegularActiveProbe>(bus);
|
|
/* Peer complaints. */
|
|
all->install<PeerComplaintsDesk::Main>(bus);
|
|
all->install<ComplainerByLowConnectRate>(bus);
|
|
#ifdef ENABLE_COMPLAINER_BY_LOW_SUCCESS_PER_DAY
|
|
all->install<ComplainerByLowSuccessPerDay>(bus);
|
|
#endif /* ENABLE_COMPLAINER_BY_LOW_SUCCESS_PER_DAY */
|
|
|
|
/* Channel balancing. */
|
|
all->install<RebalanceModeManager>(bus);
|
|
all->install<AskreneUpdates>(bus);
|
|
all->install<FundsMover::Main>(bus);
|
|
all->install<MoveFundsCommand>(bus);
|
|
all->install<EarningsTracker>(bus);
|
|
all->install<JitRebalancer>(bus);
|
|
#ifdef ENABLE_INITIAL_REBALANCER
|
|
all->install<InitialRebalancer>(bus);
|
|
#endif /* ENABLE_INITIAL_REBALANCER */
|
|
all->install<EarningsRebalancer>(bus);
|
|
all->install<RebalanceUnmanager>(bus);
|
|
|
|
/* Unmanaged nodes. */
|
|
all->install<UnmanagedManager>(bus);
|
|
|
|
/* Utility. */
|
|
all->install<PeerFromScidMapper>(bus);
|
|
|
|
return all;
|
|
}
|
|
|
|
}}
|