Files
purple-electrumwallet/tests/regtest/regtest.sh
T

514 lines
16 KiB
Bash
Raw Normal View History

2019-03-11 21:00:29 +01:00
#!/usr/bin/env bash
export HOME=~
set -eu
2021-09-15 09:47:58 +02:00
TEST_ANCHOR_CHANNELS=True
2019-03-11 21:00:29 +01:00
# alice -> bob -> carol
alice="./run_electrum --regtest -D /tmp/alice"
bob="./run_electrum --regtest -D /tmp/bob"
carol="./run_electrum --regtest -D /tmp/carol"
2019-03-11 21:00:29 +01:00
bitcoin_cli="bitcoin-cli -rpcuser=doggman -rpcpassword=donkey -rpcport=18554 -regtest"
function new_blocks()
{
$bitcoin_cli generatetoaddress $1 $($bitcoin_cli getnewaddress) > /dev/null
}
2023-06-28 14:23:32 +02:00
function wait_until_htlcs_settled()
{
msg="wait until $1's local_unsettled_sent is zero"
cmd="./run_electrum --regtest -D /tmp/$1"
while unsettled=$($cmd list_channels | jq '.[] | .local_unsettled_sent') && [ $unsettled != "0" ]; do
2023-06-28 14:23:32 +02:00
sleep 1
msg="$msg."
printf "$msg\r"
done
printf "\n"
}
2019-08-30 15:18:04 +02:00
function wait_for_balance()
2019-07-03 08:40:18 +02:00
{
2019-08-30 15:18:04 +02:00
msg="wait until $1's balance reaches $2"
cmd="./run_electrum --regtest -D /tmp/$1"
2019-08-30 15:18:04 +02:00
while balance=$($cmd getbalance | jq '[.confirmed, .unconfirmed] | to_entries | map(select(.value != null).value) | map(tonumber) | add ') && (( $(echo "$balance < $2" | bc -l) )); do
sleep 1
2019-08-30 15:18:04 +02:00
msg="$msg."
printf "$msg\r"
2019-07-03 08:40:18 +02:00
done
2019-08-30 15:18:04 +02:00
printf "\n"
2019-07-03 08:40:18 +02:00
}
function wait_until_channel_open()
{
2019-08-30 15:18:04 +02:00
msg="wait until $1 sees channel open"
cmd="./run_electrum --regtest -D /tmp/$1"
2019-08-30 15:18:04 +02:00
while channel_state=$($cmd list_channels | jq '.[0] | .state' | tr -d '"') && [ $channel_state != "OPEN" ]; do
sleep 1
2019-08-30 15:18:04 +02:00
msg="$msg."
printf "$msg\r"
2019-07-03 08:40:18 +02:00
done
2019-08-30 15:18:04 +02:00
printf "\n"
}
function wait_until_channel_closed()
{
msg="wait until $1 sees channel closed"
cmd="./run_electrum --regtest -D /tmp/$1"
2019-08-30 15:18:04 +02:00
while [[ $($cmd list_channels | jq '.[0].state' | tr -d '"') != "CLOSED" ]]; do
sleep 1
msg="$msg."
printf "$msg\r"
done
printf "\n"
}
function wait_until_spent()
{
msg="wait until $1:$2 is spent"
while [[ $($bitcoin_cli gettxout $1 $2) ]]; do
sleep 1
msg="$msg."
printf "$msg\r"
done
printf "\n"
2019-07-03 08:40:18 +02:00
}
2019-03-11 21:00:29 +01:00
if [[ $# -eq 0 ]]; then
echo "syntax: init|start|open|status|pay|close|stop"
exit 1
fi
2020-02-02 14:50:08 +01:00
if [[ $1 == "new_block" ]]; then
new_blocks 1
2019-03-11 21:00:29 +01:00
fi
2020-02-02 14:50:08 +01:00
if [[ $1 == "init" ]]; then
echo "initializing $2"
rm -rf /tmp/$2/
agent="./run_electrum --regtest -D /tmp/$2"
$agent create --offline > /dev/null
2021-09-15 09:47:58 +02:00
$agent setconfig --offline enable_anchor_channels $TEST_ANCHOR_CHANNELS
2020-02-02 14:50:08 +01:00
$agent setconfig --offline log_to_file True
2020-11-11 11:03:31 +01:00
$agent setconfig --offline use_gossip True
2020-02-02 14:50:08 +01:00
$agent setconfig --offline server 127.0.0.1:51001:t
2020-06-09 18:36:34 +02:00
$agent setconfig --offline lightning_to_self_delay 144
$agent setconfig --offline test_force_disable_mpp True
2022-10-20 13:40:01 +02:00
echo "funding $2"
2023-08-03 11:40:01 +00:00
# note: changing the funding amount affects all tests, as they rely on "wait_for_balance"
2022-10-20 13:40:01 +02:00
$bitcoin_cli sendtoaddress $($agent getunusedaddress -o) 1
2019-10-29 08:02:14 +01:00
fi
if [[ $1 == "setconfig" ]]; then
# use this to set config vars that need to be set before the daemon is started
agent="./run_electrum --regtest -D /tmp/$2"
$agent setconfig --offline $3 $4
fi
2020-02-02 14:50:08 +01:00
2019-03-11 21:00:29 +01:00
# start daemons. Bob is started first because he is listening
if [[ $1 == "start" ]]; then
2020-02-02 14:50:08 +01:00
agent="./run_electrum --regtest -D /tmp/$2"
$agent daemon -d
$agent load_wallet
sleep 1 # give time to synchronize
2019-03-11 21:00:29 +01:00
fi
if [[ $1 == "stop" ]]; then
2020-02-02 14:50:08 +01:00
agent="./run_electrum --regtest -D /tmp/$2"
$agent stop || true
fi
2021-02-09 15:09:27 +01:00
2019-05-28 13:11:21 +02:00
# alice sends two payments, then broadcast ctx after first payment.
# thus, bob needs to redeem both to_local and to_remote
2020-02-02 14:50:08 +01:00
2019-03-11 21:00:29 +01:00
if [[ $1 == "breach" ]]; then
2020-02-05 08:56:58 +01:00
wait_for_balance alice 1
echo "alice opens channel"
2019-03-11 21:00:29 +01:00
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
2019-07-03 08:40:18 +02:00
new_blocks 3
2019-08-30 15:18:04 +02:00
wait_until_channel_open alice
2022-03-29 14:07:53 +02:00
request=$($bob add_request 0.01 -m "blah" | jq -r ".lightning_invoice")
echo "alice pays"
2019-03-11 21:00:29 +01:00
$alice lnpay $request
2019-05-28 13:11:21 +02:00
sleep 2
ctx=$($alice get_channel_ctx $channel --iknowwhatimdoing)
2022-03-29 14:07:53 +02:00
request=$($bob add_request 0.01 -m "blah2" | jq -r ".lightning_invoice")
2019-08-30 15:18:04 +02:00
echo "alice pays again"
2019-05-28 13:11:21 +02:00
$alice lnpay $request
echo "alice broadcasts old ctx"
$bitcoin_cli sendrawtransaction $ctx
new_blocks 1
2019-08-30 15:18:04 +02:00
wait_until_channel_closed bob
new_blocks 1
2023-08-03 11:40:01 +00:00
wait_for_balance bob 1.14
2019-08-30 15:18:04 +02:00
$bob getbalance
2019-03-11 21:00:29 +01:00
fi
2021-03-12 16:10:02 +01:00
if [[ $1 == "backup" ]]; then
wait_for_balance alice 1
echo "alice opens channel"
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel1=$($alice open_channel $bob_node 0.15 --password='')
new_blocks 1 # cannot open multiple chans with same node in same block
$alice setconfig use_recoverable_channels False
2023-08-18 08:49:11 +02:00
channel2=$($alice open_channel $bob_node 0.15 --password='')
2021-03-12 16:10:02 +01:00
new_blocks 3
wait_until_channel_open alice
backup=$($alice export_channel_backup $channel2)
2023-08-18 08:49:11 +02:00
seed=$($alice getseed --password='')
2021-03-12 16:10:02 +01:00
$alice stop
mv /tmp/alice/regtest/wallets/default_wallet /tmp/alice/regtest/wallets/default_wallet.old
$alice -o restore "$seed"
$alice daemon -d
$alice load_wallet
$alice import_channel_backup $backup
echo "request force close $channel1"
$alice request_force_close $channel1
echo "request force close $channel2"
$alice request_force_close $channel2
2021-09-15 09:47:58 +02:00
new_blocks 1
wait_for_balance alice 0.997
2021-03-12 16:10:02 +01:00
fi
if [[ $1 == "backup_local_forceclose" ]]; then
# Alice does a local-force-close, and then restores from seed before sweeping CSV-locked coins
wait_for_balance alice 1
echo "alice opens channel"
bob_node=$($bob nodeid)
$alice setconfig use_recoverable_channels False
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
new_blocks 3
wait_until_channel_open alice
backup=$($alice export_channel_backup $channel)
echo "local force close $channel"
$alice close_channel $channel --force
sleep 0.5
2023-08-18 08:49:11 +02:00
seed=$($alice getseed --password='')
$alice stop
mv /tmp/alice/regtest/wallets/default_wallet /tmp/alice/regtest/wallets/default_wallet.old
new_blocks 150
$alice -o restore "$seed"
$alice daemon -d
$alice load_wallet
$alice import_channel_backup $backup
wait_for_balance alice 0.998
fi
2021-11-26 09:45:06 +01:00
if [[ $1 == "collaborative_close" ]]; then
wait_for_balance alice 1
echo "alice opens channel"
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
2021-11-26 09:45:06 +01:00
new_blocks 3
wait_until_channel_open alice
echo "alice closes channel"
request=$($bob close_channel $channel)
fi
2023-06-28 14:23:32 +02:00
if [[ $1 == "swapserver_success" ]]; then
2022-10-20 13:40:01 +02:00
wait_for_balance alice 1
echo "alice opens channel"
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
2022-10-20 13:40:01 +02:00
new_blocks 3
wait_until_channel_open alice
echo "alice initiates swap"
dryrun=$($alice reverse_swap 0.02 dryrun)
onchain_amount=$(echo $dryrun| jq -r ".onchain_amount")
2023-06-28 14:23:32 +02:00
swap=$($alice reverse_swap 0.02 $onchain_amount)
echo $swap | jq
funding_txid=$(echo $swap| jq -r ".funding_txid")
2022-10-20 13:40:01 +02:00
new_blocks 1
2023-06-28 14:23:32 +02:00
wait_until_spent $funding_txid 0
wait_until_htlcs_settled alice
fi
if [[ $1 == "swapserver_forceclose" ]]; then
wait_for_balance alice 1
echo "alice opens channel"
bob_node=$($bob nodeid)
channel=$($alice open_channel $bob_node 0.15 --password='')
new_blocks 3
wait_until_channel_open alice
echo "alice initiates swap"
dryrun=$($alice reverse_swap 0.02 dryrun)
onchain_amount=$(echo $dryrun| jq -r ".onchain_amount")
swap=$($alice reverse_swap 0.02 $onchain_amount)
echo $swap | jq
funding_txid=$(echo $swap| jq -r ".funding_txid")
$bob close_channel --force $channel
new_blocks 1
wait_until_spent $funding_txid 0 # alice reveals preimage
new_blocks 1
wait_for_balance bob 0.999
fi
2023-06-28 14:23:32 +02:00
if [[ $1 == "swapserver_refund" ]]; then
$alice setconfig test_swapserver_refund true
wait_for_balance alice 1
echo "alice opens channel"
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
2023-06-28 14:23:32 +02:00
new_blocks 3
wait_until_channel_open alice
echo "alice initiates swap"
dryrun=$($alice reverse_swap 0.02 dryrun)
onchain_amount=$(echo $dryrun| jq -r ".onchain_amount")
swap=$($alice reverse_swap 0.02 $onchain_amount)
echo $swap | jq
funding_txid=$(echo $swap| jq -r ".funding_txid")
new_blocks 140
wait_until_spent $funding_txid 0
2022-10-20 13:40:01 +02:00
new_blocks 1
2023-06-28 14:23:32 +02:00
wait_until_htlcs_settled alice
2022-10-20 13:40:01 +02:00
fi
if [[ $1 == "extract_preimage" ]]; then
# instead of settling bob will broadcast
2024-12-14 08:24:26 +01:00
$alice setconfig test_force_disable_mpp false
$alice setconfig test_force_mpp true
$bob enable_htlc_settle false
wait_for_balance alice 1
echo "alice opens channel"
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
$alice open_channel $bob_node 0.15 --password=''
new_blocks 3
wait_until_channel_open alice
chan_id=$($alice list_channels | jq -r ".[0].channel_point")
# alice pays bob
2022-03-29 14:07:53 +02:00
invoice=$($bob add_request 0.04 -m "test" | jq -r ".lightning_invoice")
screen -S alice_payment -dm -L -Logfile /tmp/alice/screen.log $alice lnpay $invoice --timeout=600
sleep 1
unsettled=$($alice list_channels | jq '.[] | .local_unsettled_sent')
if [[ "$unsettled" == "0" ]]; then
echo 'enable_htlc_settle did not work'
exit 1
fi
# bob force closes
$bob close_channel $chan_id --force
new_blocks 1
wait_until_channel_closed bob
sleep 5
success=$(cat /tmp/alice/screen.log | jq -r ".success")
if [[ "$success" != "true" ]]; then
exit 1
fi
cat /tmp/alice/screen.log
fi
2019-03-11 21:00:29 +01:00
if [[ $1 == "redeem_htlcs" ]]; then
$bob enable_htlc_settle false
2020-02-05 08:56:58 +01:00
wait_for_balance alice 1
echo "alice opens channel"
2019-03-11 21:00:29 +01:00
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
$alice open_channel $bob_node 0.15 --password=''
2020-02-05 08:56:58 +01:00
new_blocks 3
wait_until_channel_open alice
2019-03-11 21:00:29 +01:00
# alice pays bob
2022-03-29 14:07:53 +02:00
invoice=$($bob add_request 0.04 -m "test" | jq -r ".lightning_invoice")
2019-05-29 17:34:12 +02:00
$alice lnpay $invoice --timeout=1 || true
2020-03-06 10:26:11 +01:00
unsettled=$($alice list_channels | jq '.[] | .local_unsettled_sent')
if [[ "$unsettled" == "0" ]]; then
echo 'enable_htlc_settle did not work'
2019-03-11 21:00:29 +01:00
exit 1
fi
# bob goes away
2019-08-19 12:46:31 +02:00
$bob stop
2019-03-11 21:00:29 +01:00
echo "alice balance before closing channel:" $($alice getbalance)
balance_before=$($alice getbalance | jq '[.confirmed, .unconfirmed, .lightning] | to_entries | map(select(.value != null).value) | map(tonumber) | add ')
# alice force closes the channel
chan_id=$($alice list_channels | jq -r ".[0].channel_point")
$alice close_channel $chan_id --force
new_blocks 1
sleep 3
2019-03-11 21:00:29 +01:00
echo "alice balance after closing channel:" $($alice getbalance)
new_blocks 150
2019-03-11 21:00:29 +01:00
sleep 10
new_blocks 1
sleep 3
echo "alice balance after CLTV" $($alice getbalance)
new_blocks 150
2019-03-11 21:00:29 +01:00
sleep 10
new_blocks 1
sleep 3
echo "alice balance after CSV" $($alice getbalance)
2019-08-30 15:18:04 +02:00
# fixme: add local to getbalance
wait_for_balance alice $(echo "$balance_before - 0.02" | bc -l)
$alice getbalance
2019-03-11 21:00:29 +01:00
fi
2019-05-29 17:34:12 +02:00
2019-06-24 11:13:18 +02:00
if [[ $1 == "breach_with_unspent_htlc" ]]; then
$bob enable_htlc_settle false
2019-08-30 15:18:04 +02:00
wait_for_balance alice 1
echo "alice opens channel"
2019-05-29 17:34:12 +02:00
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
new_blocks 3
2019-08-30 15:18:04 +02:00
wait_until_channel_open alice
2019-05-29 17:34:12 +02:00
echo "alice pays bob"
2022-03-29 14:07:53 +02:00
invoice=$($bob add_request 0.04 -m "test" | jq -r ".lightning_invoice")
2019-05-29 17:34:12 +02:00
$alice lnpay $invoice --timeout=1 || true
2020-03-06 10:26:11 +01:00
unsettled=$($alice list_channels | jq '.[] | .local_unsettled_sent')
if [[ "$unsettled" == "0" ]]; then
echo "enable_htlc_settle did not work, $unsettled"
2019-05-29 17:34:12 +02:00
exit 1
fi
ctx=$($alice get_channel_ctx $channel --iknowwhatimdoing)
$bob enable_htlc_settle true
2020-03-06 10:26:11 +01:00
unsettled=$($alice list_channels | jq '.[] | .local_unsettled_sent')
if [[ "$unsettled" != "0" ]]; then
echo "enable_htlc_settle did not work, $unsettled"
2019-05-29 17:34:12 +02:00
exit 1
fi
echo "alice breaches with old ctx"
$bitcoin_cli sendrawtransaction $ctx
2023-08-03 11:40:01 +00:00
wait_for_balance bob 1.14
2019-05-29 17:34:12 +02:00
fi
2019-06-24 11:13:18 +02:00
if [[ $1 == "breach_with_spent_htlc" ]]; then
$bob enable_htlc_settle false
2019-08-30 15:18:04 +02:00
wait_for_balance alice 1
2019-06-24 11:13:18 +02:00
echo "alice opens channel"
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
2019-06-24 11:13:18 +02:00
new_blocks 3
2019-08-30 15:18:04 +02:00
wait_until_channel_open alice
2019-06-24 11:13:18 +02:00
echo "alice pays bob"
2022-03-29 14:07:53 +02:00
invoice=$($bob add_request 0.04 -m "test" | jq -r ".lightning_invoice")
2019-06-24 11:13:18 +02:00
$alice lnpay $invoice --timeout=1 || true
ctx=$($alice get_channel_ctx $channel --iknowwhatimdoing)
2020-03-06 10:26:11 +01:00
unsettled=$($alice list_channels | jq '.[] | .local_unsettled_sent')
if [[ "$unsettled" == "0" ]]; then
echo "enable_htlc_settle did not work, $unsettled"
2019-06-24 11:13:18 +02:00
exit 1
fi
cp /tmp/alice/regtest/wallets/default_wallet /tmp/alice/regtest/wallets/toxic_wallet
$bob enable_htlc_settle true
2020-03-06 10:26:11 +01:00
unsettled=$($alice list_channels | jq '.[] | .local_unsettled_sent')
if [[ "$unsettled" != "0" ]]; then
echo "enable_htlc_settle did not work, $unsettled"
2019-06-24 11:13:18 +02:00
exit 1
fi
echo $($bob getbalance)
echo "bob goes offline"
2019-08-19 12:46:31 +02:00
$bob stop
2019-06-24 11:13:18 +02:00
ctx_id=$($bitcoin_cli sendrawtransaction $ctx)
echo "alice breaches with old ctx:" $ctx_id
new_blocks 1
if [[ $($bitcoin_cli gettxout $ctx_id 0 | jq '.confirmations') != "1" ]]; then
echo "breach tx not confirmed"
exit 1
2019-06-24 11:13:18 +02:00
fi
echo "wait for cltv_expiry blocks"
# note: this will let alice redeem both to_local and the htlc.
# (to_local needs to_self_delay blocks; htlc needs whatever we put in invoice)
new_blocks 150
2019-08-19 12:46:31 +02:00
$alice stop
2019-09-02 19:04:08 +02:00
$alice daemon -d
2019-08-30 15:57:01 +02:00
sleep 1
$alice load_wallet -w /tmp/alice/regtest/wallets/toxic_wallet
2019-06-24 11:13:18 +02:00
# wait until alice has spent both ctx outputs
2019-08-30 15:18:04 +02:00
echo "alice spends to_local and htlc outputs"
2021-09-15 09:47:58 +02:00
if [ $TEST_ANCHOR_CHANNELS = True ] ; then
# to_local_anchor/to_remote_anchor: 0 and 1 (both are present due to untrimmed htlcs)
# htlc: 2, to_local: 3
wait_until_spent $ctx_id 2
wait_until_spent $ctx_id 3
else
# htlc: 0, to_local: 1
wait_until_spent $ctx_id 0
wait_until_spent $ctx_id 1
fi
2019-06-24 11:13:18 +02:00
new_blocks 1
echo "bob comes back"
2019-09-02 19:04:08 +02:00
$bob daemon -d
2019-08-30 15:57:01 +02:00
sleep 1
2019-08-19 12:46:31 +02:00
$bob load_wallet
2023-08-03 11:40:01 +00:00
wait_for_balance bob 1.039
2019-08-30 15:18:04 +02:00
$bob getbalance
2019-06-24 11:13:18 +02:00
fi
2019-07-05 14:42:09 +02:00
2020-02-02 14:50:08 +01:00
if [[ $1 == "watchtower" ]]; then
2019-08-30 15:18:04 +02:00
wait_for_balance alice 1
2019-07-05 14:42:09 +02:00
echo "alice opens channel"
bob_node=$($bob nodeid)
2023-08-18 08:49:11 +02:00
channel=$($alice open_channel $bob_node 0.15 --password='')
2020-02-02 14:50:08 +01:00
echo "channel outpoint: $channel"
2019-07-05 14:42:09 +02:00
new_blocks 3
2019-08-30 15:18:04 +02:00
wait_until_channel_open alice
2019-07-05 14:42:09 +02:00
echo "alice pays bob"
2022-03-29 14:07:53 +02:00
invoice1=$($bob add_request 0.01 -m "invoice1" | jq -r ".lightning_invoice")
2019-07-05 14:42:09 +02:00
$alice lnpay $invoice1
ctx=$($alice get_channel_ctx $channel --iknowwhatimdoing)
2020-02-02 14:50:08 +01:00
echo "alice pays bob again"
2022-03-29 14:07:53 +02:00
invoice2=$($bob add_request 0.01 -m "invoice2" | jq -r ".lightning_invoice")
2019-07-05 14:42:09 +02:00
$alice lnpay $invoice2
2024-12-20 14:02:54 +01:00
bob_ctn=$($bob list_channels | jq '.[0].local_ctn')
2020-02-02 14:50:08 +01:00
msg="waiting until watchtower is synchronized"
# watchtower needs to be at latest revoked ctn
2024-12-20 14:02:54 +01:00
while watchtower_ctn=$($bob get_watchtower_ctn $channel) && [[ $watchtower_ctn != $((bob_ctn-1)) ]]; do
sleep 0.1
2024-12-20 14:02:54 +01:00
printf "$msg $bob_ctn $watchtower_ctn\r"
2020-02-02 14:50:08 +01:00
done
printf "\n"
echo "stopping alice and bob"
2021-09-27 10:31:44 +02:00
$bob stop
$alice stop
ctx_id=$($bitcoin_cli sendrawtransaction $ctx)
echo "alice breaches with old ctx:" $ctx_id
echo "watchtower publishes justice transaction"
2021-09-15 09:47:58 +02:00
if [ $TEST_ANCHOR_CHANNELS = True ] ; then
output_index=3
else
output_index=1
fi
wait_until_spent $ctx_id $output_index # alice's to_local gets punished
2019-07-05 14:42:09 +02:00
fi
2023-08-08 05:09:58 +02:00
if [[ $1 == "just_in_time" ]]; then
bob_node=$($bob nodeid)
$alice setconfig zeroconf_trusted_node $bob_node
$alice setconfig use_recoverable_channels false
wait_for_balance carol 1
echo "carol opens channel with bob"
$carol open_channel $bob_node 0.15 --password=''
new_blocks 3
wait_until_channel_open carol
echo "carol pays alice"
# note: set amount to 0.001 to test failure: 'payment too low'
invoice=$($alice add_request 0.01 -m "invoice" | jq -r ".lightning_invoice")
$carol lnpay $invoice
fi
if [[ $1 == "unixsockets" ]]; then
# This looks different because it has to run the entire daemon
# Test domain socket behavior
./run_electrum --regtest daemon -d --rpcsock=unix # Start daemon with unix domain socket
./run_electrum --regtest stop # Errors if it can't connect
# Test custom socket path
f=$(mktemp --dry-run)
./run_electrum --regtest daemon -d --rpcsock=unix --rpcsockpath=$f
[ -S $f ] # filename exists and is socket
./run_electrum --regtest stop
rm $f # clean up
# Test for regressions in the ordinary TCP functionality.
./run_electrum --regtest daemon -d --rpcsock=tcp
./run_electrum --regtest stop
fi