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/
95 lines
2.2 KiB
Ruby
95 lines
2.2 KiB
Ruby
#
|
|
# 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
|