Set up PeerSwap

Allows to swap sats in and out of Lightning channels without a 3rd party
(and their fees). Instead, swaps can be initiated directly with the
channel peer.

https://www.peerswap.dev/
This commit is contained in:
Râu Cao 2022-12-26 11:16:08 +07:00
parent b3465e186f
commit 4f1b1aff30
Signed by: raucao
GPG Key ID: 15E65F399D084BA9
5 changed files with 104 additions and 1 deletions

View File

@ -27,12 +27,13 @@
"kosmos_kvm::guest",
"tor-full",
"tor-full::default",
"kosmos-bitcoin::source",
"kosmos-bitcoin::bitcoind",
"kosmos-bitcoin::c-lightning",
"kosmos-bitcoin::lnd",
"kosmos-bitcoin::lnd-scb-s3",
"kosmos-bitcoin::boltz",
"kosmos-bitcoin::rtl",
"kosmos-bitcoin::peerswap-lnd",
"kosmos_postgresql::hostsfile",
"kosmos-bitcoin::lndhub",
"kosmos-bitcoin::lndhub-go",

View File

@ -5,4 +5,5 @@ run_list %w(
kosmos-bitcoin::lnd-scb-s3
kosmos-bitcoin::boltz
kosmos-bitcoin::rtl
kosmos-bitcoin::peerswap-lnd
)

View File

@ -118,3 +118,7 @@ node.default["btcpay"]["domain"] = 'btcpay.kosmos.org'
node.default['btcpay']['postgres']['port'] = 5432
node.default['btcpay']['postgres']['database'] = 'btcpayserver'
node.default['btcpay']['postgres']['user'] = 'satoshi'
node.default['peerswap']['repo'] = 'https://github.com/ElementsProject/peerswap.git'
node.default['peerswap']['revision'] = 'master'
node.default['peerswap-lnd']['source_dir'] = '/opt/peerswap'

View File

@ -0,0 +1,94 @@
#
# Cookbook:: kosmos-bitcoin
# Recipe:: peerswap-lnd
#
include_recipe 'git'
include_recipe 'kosmos-bitcoin::golang'
include_recipe 'kosmos-bitcoin::user'
bitcoin_user = node['bitcoin']['username']
bitcoin_group = node['bitcoin']['usergroup']
lnd_dir = node['lnd']['lnd_dir']
macaroon_path = "#{lnd_dir}/data/chain/bitcoin/#{node['bitcoin']['network']}/admin.macaroon"
source_dir = node['peerswap-lnd']['source_dir']
config_dir = "/home/#{bitcoin_user}/.peerswap"
directory config_dir do
owner bitcoin_user
group bitcoin_group
mode '0700'
action :create
end
git source_dir do
repository node['peerswap']['repo']
revision node['peerswap']['revision']
action :sync
notifies :run, 'bash[compile_peerswap]', :immediately
end
bash 'compile_peerswap' do
cwd source_dir
environment 'GOPATH' => '/opt/go'
code 'make lnd-release'
action :run
notifies :restart, 'service[peerswap]', :delayed
end
template "#{config_dir}/peerswap.conf" do
source 'peerswap-lnd.conf.erb'
owner bitcoin_user
group bitcoin_group
mode 0600
sensitive true
variables config: {
tlscertpath: "#{lnd_dir}/tls.cert",
macaroonpath: macaroon_path
}
notifies :restart, 'service[peerswap]', :delayed
end
file "#{config_dir}/policy.conf" do
owner bitcoin_user
group bitcoin_group
mode 0600
content 'accept_all_peers=true'
notifies :restart, 'service[peerswap]', :delayed
end
systemd_unit 'peerswap.service' do
content({
Unit: {
Description: 'PeerSwap Lightning channel balancing',
Documentation: ['https://github.com/ElementsProject/peerswap'],
Requires: 'lnd.service',
After: 'lnd.service'
},
Service: {
User: bitcoin_user,
Group: bitcoin_group,
Type: 'simple',
WorkingDirectory: source_dir,
ExecStart: "/opt/go/bin/peerswapd",
Restart: 'always',
RestartSec: '10',
TimeoutSec: '60',
PrivateTmp: true,
ProtectSystem: 'full',
NoNewPrivileges: true,
PrivateDevices: true,
MemoryDenyWriteExecute: true
},
Install: {
WantedBy: 'multi-user.target'
}
})
verify false
triggers_reload true
action [:create, :enable, :start]
end
service 'peerswap' do
action :nothing
end

View File

@ -0,0 +1,3 @@
<% @config.each do |k, v| %>
<%= "lnd.#{k}=#{v}" %>
<% end %>