mirror of
https://github.com/joinmarket-webui/jam.git
synced 2026-08-18 13:09:10 +02:00
* refactor: add reason to scheduler error messages * fix: dismiss schedule confirm dialog on error * chore(i18n): distinct scheduler starting/stopping messages * chore(sweep): remove redundant manual destination validation * chore(sweep): initial sweep options * chore(ui): add slider component * chore(sweep): add rounding chance option * feat(sweep): ability to add/remove destinations * chore(sweep): use plan tumbler mutation * refactor(sweep): use tumblerstartMutation * refactor(sweep): externalize SweepForm * feat(sweep): ability to set min/max number of collaborators * chore(sweep): increase time_lambda_seconds in insecure test options * chore(sweep): fix progress step of quick sweep * chore(sweep): start refactor schedule entry * chore(sweep): preserve raw data in ScheduleEntry * feat(sweep): show destination addresses * chore(sweep): scroll to top after start/stop * chore(ui): add Item component * fix: only abort single taker runs on send page * chore(sweep): schedule entries with Item component * chore(sweep): show wait time before next action * chore(sweep): schedule entries in accordion * chore(sweep): remove scheduler.progress_current_state_wait_before_next message * chore(sweep): tab for completed entries * refactor(sweep): align Schedule object structure * chore(sweep): display error message on failed actions * chore(sweep): display completed scheduled sweep * chore(sweep): move stop button from child component to page * feat(sweep): ability to review scheduled sweep plan * chore(sweep): increase schedule polling from 3s to 10s * chore(sweep): hourglass icon for waiting alerts * chore(sweep): adapt buttons, labels and alert texts * fix(sweep): default min confirmations between phases * chore(sweep): improve time estimate on sweeps * chore(sweep): show pending tasks in details * feat(sweep): ability to configure mintxcount * chore(storybook): add slider, sidebar and item stories * test(sweep): verify add/remove sweep destination input * test: load decorators from story meta config * chore(sweep): add makeSessionIdleTimeoutSeconds to form values * chore(sweep): reload schedule if not stale or terminated * chore(sweep): more details in sections * chore(sweep): reorder entry details * chore(sweep): show transaction info in destination section * chore(sweep): estimate duration with fixed runtime info of maker phases * chore(regtest): setup dummy wallet fidelity bonds * fix(sweep): maker idle timeout less than runtime duration * chore(sweep): use taker_utxo_age as min confs in sweep preconditions * chore(build): add task test:coverage * chore(sweep): max number of destination addresses * chore(sweep): maxNumberOfDestinations
101 lines
4.8 KiB
Bash
Executable file
101 lines
4.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
###
|
|
#
|
|
# This script helps initializing the JoinMarket docker containers.
|
|
# Its main goal is to make CoinJoin transactions possible in the regtest environment.
|
|
#
|
|
# It has two responsibilities:
|
|
# - funding wallets in all containers with some coins
|
|
# - starting the maker service in secondary through quinary containers
|
|
#
|
|
###
|
|
|
|
set -Eeuo pipefail
|
|
|
|
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
|
|
|
|
# fund wallet in primary JoinMarket NG container
|
|
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket --unmatured --blocks 3
|
|
|
|
# fund wallet in ng standalone secondary container
|
|
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket2 --unmatured --blocks 50
|
|
|
|
# fund wallet in legacy clientserver native tertiary container
|
|
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket3 --unmatured --blocks 50
|
|
|
|
# fund wallet in legacy clientserver jam-standalone quaternary container
|
|
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket4 --unmatured --blocks 50
|
|
|
|
# fund wallet in ng peer quinary container
|
|
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket5 --unmatured --blocks 50
|
|
|
|
# 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)
|
|
dummy_wallet_address_fb0='bcrt1q7war3lusq3ez633rzzfkp75unfcgrqqcu80sgp0ellhrdvkzxh5swspygk' # 1st fb address (m/84'/1'/0'/2/0)
|
|
dummy_wallet_address_fb959='bcrt1q6rlcknptmqhf4w20928tpz6px4y70960gyupd029c7vx7kdjwt0q46nk9c' # 960th fb address (m/84'/1'/0'/2/959)
|
|
# make block rewards spendable: 100 + 5 (default of `taker_utxo_age`) + 1 = 106
|
|
. "$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" 1 "$dummy_wallet_address_fb0" &>/dev/null
|
|
. "$script_dir/mine-block.sh" 1 "$dummy_wallet_address_fb959" &>/dev/null
|
|
. "$script_dir/mine-block.sh" 100 &>/dev/null
|
|
|
|
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"
|
|
|
|
local maker_running; maker_running=$(is_maker_running "$base_url")
|
|
|
|
if [ "$maker_running" != false ]; then
|
|
msg_success "Maker is already running"
|
|
else
|
|
# 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\":\"0\",\"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" -H "Content-Type: application/json" --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!"
|
|
fi
|
|
}
|
|
|
|
msg "Attempt to start maker service for wallet $wallet_name in ng standalone container.."
|
|
start_maker "https://localhost:29183" "Satoshi.jmdat" "test"
|
|
|
|
msg "Attempt to start maker service for wallet $wallet_name in legacy native container.."
|
|
start_maker "https://localhost:30183" "Satoshi.jmdat" "test"
|
|
|
|
msg "Attempt to start maker service for wallet $wallet_name in legacy standalone container.."
|
|
start_maker "https://localhost:31183" "Satoshi.jmdat" "test"
|
|
|
|
msg "Attempt to start maker service for wallet $wallet_name in ng peer container.."
|
|
start_maker "https://localhost:32183" "Satoshi.jmdat" "test"
|