jam/docker/regtest/init-setup.sh
Thebora Kompanioni 028f32166a
feat: import wallet (#621)
* chore(regtest): do not build tor locally in regtest env

* feat(import): add rescanning param to session request

* feat(api): add rescanblockchain request to JmWalletApi

* feat: add import wallet button to wallets page

* refactor: externalize component PreventLeavingPageByMistake

* refactor: externalize component WalletCreationForm

* wip: use WalletCreationForm in ImportWallet

* refactor: externalize SeedWordInput and rename to MnemonicWordInput

* feat(api): add wallet recover request to JmWalletApi

* build(deps): bump caniuse-lite to v1.0.30001511

* wip(import): start wallet after successful import

* refactor: externalize component WalletCreationConfirmation

* wip(import): use WalletCreationConfirmation view in component WalletImport

* dev(regtest): add funds to dummy wallet during initialization of local setup

* wip(import): update gaplimit before rescanning chain

* wip(import): prevent import if rescan is in progress

* wip(import): ability to customize gaplimit and blockheight

* wip(import): show duration hint when importing wallet

* wip(import): hide sensitive info while importing wallet

* wip(import): reset gaplimit to original value after importing

* wip(import): add description for blockheight and gaplimit

* wip(import): add cancel button to WalletCreationForm

* refactor: externalize component MnemonicPhraseInput

* wip(import): show rescanning indicator on main wallet view

* wip(import): show rescanning indicator in navbar

* wip(import): disable sending when rescanning is in progress

* wip(import): disable navbar/earn/jam when rescanning is in progress

* Update src/i18n/locales/en/translation.json

Co-authored-by: openoms <43343391+openoms@users.noreply.github.com>

* fix(import): disable viewing jars on main wallet if rescanning is active

* wip(import): prevent creating new address when rescanning

* fix(import): reload wallet info after rescanning finishes

* refactor: move auto reloading code from WalletContext to WalletInfoAutoReload

* refactor: remove unused method reloadDisplay

* wip(import): reload recursively till balance is found

* wip(import): expand import options by default

* ui: add 'dev' badge to buttons only visible in dev env

---------

Co-authored-by: openoms <43343391+openoms@users.noreply.github.com>
2023-09-08 13:26:59 +02:00

85 lines
3.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 the secondary and tertiary container
#
###
set -Eeuo pipefail
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
# fund wallet in primary JoinMarket container
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket --unmatured --blocks 3
# 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.
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket2 --unmatured --blocks 50
. "$script_dir/fund-wallet.sh" --container jm_regtest_joinmarket3 --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)
# 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" 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\":\"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!"
fi
}
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"