2022-01-22 17:09:14 +01:00
#!/usr/bin/env bash
###
#
2022-10-13 14:07:48 +02:00
# This script helps initializing the JoinMarket docker containers.
2022-01-22 17:09:14 +01:00
# Its main goal is to make CoinJoin transactions possible in the regtest environment.
#
# It has two responsibilities:
2022-10-13 14:07:48 +02:00
# - funding wallets in all containers with some coins
# - starting the maker service in the secondary and tertiary container
2022-01-22 17:09:14 +01:00
#
###
set -Eeuo pipefail
script_dir = $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " & >/dev/null && pwd -P)
2022-10-13 14:07:48 +02:00
# fund wallet in primary JoinMarket container
2022-01-22 17:09:14 +01:00
. " $script_dir /fund-wallet.sh " --container jm_regtest_joinmarket --unmatured --blocks 3
2022-10-13 14:07:48 +02:00
# fund wallet in secondary and tertiary JoinMarket container.
# these will get more coins than the primary one in order to have enough liquidity
# to run the scheduler (scheduled sweep) successfully multiple times.
2022-05-11 10:05:01 +02:00
. " $script_dir /fund-wallet.sh " --container jm_regtest_joinmarket2 --unmatured --blocks 50
2022-10-13 14:07:48 +02:00
. " $script_dir /fund-wallet.sh " --container jm_regtest_joinmarket3 --unmatured --blocks 50
2022-01-22 17:09:14 +01:00
2023-09-08 13:26:59 +02:00
# fund addresses of seed 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'
# this is useful if you "import an existing wallet" and verify rescanning the chain works as expected.
dummy_wallet_address1 = 'bcrt1q6rz28mcfaxtmd6v789l9rrlrusdprr9pz3cppk' # 1st address of jar A (m/84'/1'/0'/0/0)
dummy_wallet_address2 = 'bcrt1qt5yxk3xzrx66q9wd5sdyynklqynqcyf7uh74j3' # 8th address of jar C (m/84'/1'/2'/0/7)
dummy_wallet_address3 = 'bcrt1qn8804dw5fahuc5cwqteuq5j4xlhk2cnkq7a8kw' # 21st change address of jar E (m/84'/1'/4'/1/21)
2022-05-16 17:20:41 +02:00
# make block rewards spendable: 100 + 5 (default of `taker_utxo_age`) + 1 = 106
2023-09-08 13:26:59 +02:00
. " $script_dir /mine-block.sh " 2 " $dummy_wallet_address1 " & >/dev/null
. " $script_dir /mine-block.sh " 2 " $dummy_wallet_address2 " & >/dev/null
. " $script_dir /mine-block.sh " 2 " $dummy_wallet_address3 " & >/dev/null
. " $script_dir /mine-block.sh " 100 & >/dev/null
2022-01-22 17:09:14 +01:00
2022-10-13 14:07:48 +02:00
start_maker( ) {
local base_url; base_url = ${ 1 :- }
local wallet_name; wallet_name = ${ 2 :- }
local wallet_password; wallet_password = ${ 3 :- }
# Check if maker service is not yet running
verify_no_open_session_or_throw " $base_url "
2022-01-22 17:09:14 +01:00
2022-10-13 14:07:48 +02:00
local maker_running; maker_running = $( is_maker_running " $base_url " )
2022-01-22 17:09:14 +01:00
2022-10-13 14:07:48 +02:00
if [ " $maker_running " != false ] ; then
msg_success "Maker is already running"
2022-01-22 17:09:14 +01:00
else
2022-10-13 14:07:48 +02:00
# Unlock wallet
local unlock_result; unlock_result = $( unlock_wallet " $base_url " " $wallet_name " " $wallet_password " )
local auth_token; auth_token = $( jq -r '.token' <<< " $unlock_result " )
local auth_header; auth_header = " Authorization: Bearer $auth_token "
# --------------------------
# Start maker
# --------------------------
## API: POST /api/v1/wallet/$wallet_name/maker/start
##
## Response:
## 200 OK
## {}
msg " Starting maker service for wallet $wallet_name .. "
local start_maker_request_payload; start_maker_request_payload = "{\"txfee\":\"0\",\"cjfee_a\":\"250\",\"cjfee_r\":\"0.0003\",\"ordertype\":\"sw0absoffer\",\"minsize\":\"1\"}"
local start_maker_result; start_maker_result = $( curl " $base_url /api/v1/wallet/ $wallet_name /maker/start " --silent --show-error --insecure -H " $auth_header " --data " $start_maker_request_payload " | jq "." )
if [ " $start_maker_result " != "{}" ] ; then
msg_warn " There has been a problem starting the maker service: $start_maker_result "
else
msg_success " Successfully started maker for wallet $wallet_name . "
fi
# do not lock the wallet as this will terminate the maker service
msg_warn " Wallet $wallet_name remains unlocked! "
2022-01-22 17:09:14 +01:00
fi
2022-10-13 14:07:48 +02:00
}
msg " Attempt to start maker service for wallet $wallet_name in secondary container.. "
start_maker "https://localhost:29183" "Satoshi.jmdat" "test"
msg " Attempt to start maker service for wallet $wallet_name in tertiary container.. "
start_maker "https://localhost:30183" "Satoshi.jmdat" "test"