From 50562ba8971d25aa6ebfe3f046552363ce78f394 Mon Sep 17 00:00:00 2001 From: Thebora Kompanioni Date: Sun, 28 Jun 2026 14:22:36 +0200 Subject: [PATCH 001/117] dev(regtest): rectify tor setup and upgrade to core v29 (#1298) * dev(regtest): adapt bitcoin rpc users * dev(regtest): update to bitcoind v30.0 * chore(regtest): create descriptor wallets for clientserver regtest containers * chore(regtest): add backend descriptor to clientserver directory node * chore(regtest): rectify tor setup and downgrade to core v29 * dev(regtest): set ENSURE_WALLET to false and remove unused DESCRIPTOR_WALLET_NAME for ng nodes --- docker/regtest/docker-compose-common.yml | 8 ----- docker/regtest/docker-compose.yml | 36 +++++++------------ .../joinmarket/directory_node/README.md | 2 +- .../joinmarket/latest/jam-entrypoint.sh | 2 +- .../dockerfile-deps/joinmarket/latest/torrc | 2 +- docker/regtest/tor/conf/torrc | 5 --- package.json | 10 ++++-- 7 files changed, 23 insertions(+), 42 deletions(-) diff --git a/docker/regtest/docker-compose-common.yml b/docker/regtest/docker-compose-common.yml index 46490da6..f418e77c 100644 --- a/docker/regtest/docker-compose-common.yml +++ b/docker/regtest/docker-compose-common.yml @@ -12,10 +12,6 @@ services: jm_rpc_host: bitcoind jm_rpc_port: 43782 jm_directory_nodes: ${JM_ALL_DIRECTORY_NODES:?You must set the directory node addresses in generated env file} - jm_socks5_host: tor - jm_socks5_port: 9050 - jm_tor_control_host: tor - jm_tor_control_port: 9051 jm_minimum_makers: 1 # necessary to do coinjoins with this regtest setup; default is 4 jm_taker_utxo_age: 1 # faster testing of scheduler runs; default is 5 jm_maker_timeout_sec: 30 # easier testing of maker timeouts on regtest (and "Stall Monitor" retries); default is 60 @@ -45,10 +41,6 @@ services: jm_rpc_host: bitcoind jm_rpc_port: 43782 jm_directory_nodes: ${JM_ALL_DIRECTORY_NODES:?You must set the directory node addresses in generated env file} - jm_socks5_host: tor - jm_socks5_port: 9050 - jm_tor_control_host: tor - jm_tor_control_port: 9051 jm_minimum_makers: 1 # necessary to do coinjoins with this regtest setup; default is 4 jm_taker_utxo_age: 1 # faster testing of scheduler runs; default is 5 expose: diff --git a/docker/regtest/docker-compose.yml b/docker/regtest/docker-compose.yml index a33c7d8e..d4ffdab2 100644 --- a/docker/regtest/docker-compose.yml +++ b/docker/regtest/docker-compose.yml @@ -6,9 +6,8 @@ services: service: joinmarket_ng_native environment: READY_FILE: /root/.regtest-initializer/btc_fully_synched - BITCOIN__RPC_USER: regtest - BITCOIN__RPC_PASSWORD: regtest - BITCOIN__DESCRIPTOR_WALLET_NAME: jm_primary + BITCOIN__RPC_USER: joinmarket + BITCOIN__RPC_PASSWORD: joinmarket ports: - '28183:28183' # jmwalletd api - '28283:28283' # jmwalletd websocket @@ -32,11 +31,10 @@ services: file: docker-compose-common.yml service: joinmarket_jam_standalone_ng environment: - ENSURE_WALLET: 'true' + ENSURE_WALLET: 'false' BITCOIN__RPC_URL: http://bitcoind:43782 - BITCOIN__RPC_USER: regtest - BITCOIN__RPC_PASSWORD: regtest - BITCOIN__DESCRIPTOR_WALLET_NAME: jm_secondary + BITCOIN__RPC_USER: joinmarket2 + BITCOIN__RPC_PASSWORD: joinmarket2 LOGGING__LEVEL: DEBUG NETWORK_CONFIG__NETWORK: testnet NETWORK_CONFIG__BITCOIN_NETWORK: regtest @@ -64,6 +62,7 @@ services: jm_rpc_wallet_file: jm_tertiary jm_rpc_user: joinmarket3 jm_rpc_password: joinmarket3 + CREATE_WALLET_PARAMS_DESCRIPTORS: 'false' ports: - '30601:62601' # obwatch - '30183:28183' # jmwalletd api @@ -91,6 +90,7 @@ services: APP_PASSWORD: joinmarket jm_rpc_wallet_file: jm_quaternary jm_rpc_cookie_file: /root/.bitcoin_data/regtest/.cookie + CREATE_WALLET_PARAMS_DESCRIPTORS: 'false' ports: - '31080:80' - '31183:28183' # exposed for "init setup" routine @@ -116,7 +116,6 @@ services: environment: BITCOIN__RPC_USER: regtest BITCOIN__RPC_PASSWORD: regtest - BITCOIN__DESCRIPTOR_WALLET_NAME: jm_quinary ports: - '32183:28183' volumes: @@ -132,8 +131,8 @@ services: tor: condition: service_healthy - joinmarket_directory_node: - container_name: jm_regtest_joinmarket_directory_node + joinmarket_clientserver_directory_node: + container_name: jm_regtest_joinmarket_clientserver_directory_node build: context: ./dockerfile-deps/joinmarket/directory_node dockerfile: Dockerfile @@ -141,15 +140,10 @@ services: environment: jm_hidden_service_dir: \/root\/.joinmarket\/hidden_service_dir jm_directory_nodes: ${JM_REF_DIRECTORY_NODES:?You must set the reference directory node address in generated env file} - jm_socks5_host: localhost - jm_socks5_port: 9050 - jm_tor_control_host: localhost - jm_tor_control_port: 9051 - jm_daemon_host: 0.0.0.0 jm_blockchain_source: regtest jm_network: testnet volumes: - - 'joinmarket_directory_node_datadir:/root/.joinmarket' + - 'joinmarket_clientserver_directory_node_datadir:/root/.joinmarket' - './out/hidden_service_dir:/root/.joinmarket/hidden_service_dir:z' healthcheck: test: ['CMD', 'supervisorctl', 'status'] @@ -161,9 +155,6 @@ services: depends_on: tor: condition: service_healthy - networks: - default: - ipv4_address: 172.30.0.20 joinmarket_ng_orderbook_watcher: container_name: jm_regtest_joinmarket_ng_orderbook_watcher @@ -243,11 +234,10 @@ services: [ 'sh', '-c', - 'mkdir -p /var/lib/tor/ref-directory /var/lib/tor/ng-directory && cp -f /source/ref/* /var/lib/tor/ref-directory/ && cp -f /source/ng/* /var/lib/tor/ng-directory/ && chown -R 1000:1000 /var/lib/tor && chmod 700 /var/lib/tor/ref-directory /var/lib/tor/ng-directory && chmod 600 /var/lib/tor/ref-directory/* /var/lib/tor/ng-directory/*', + 'mkdir -p /var/lib/tor/ng-directory && cp -f /source/ng/* /var/lib/tor/ng-directory/ && chown -R 1000:1000 /var/lib/tor && chmod 700 /var/lib/tor/ng-directory && chmod 600 /var/lib/tor/ng-directory/*', ] volumes: - 'tor_datadir:/var/lib/tor' - - './out/hidden_service_dir:/source/ref:ro,z' - './out/ng_directory_hidden_service:/source/ng:ro,z' irc: @@ -262,7 +252,7 @@ services: bitcoind: container_name: jm_regtest_bitcoind restart: unless-stopped - image: polarlightning/bitcoind:28.0@sha256:ff435d758c89f01823924e057d5d5e4206d350ae69dff5e0dc1bbc9c6a36d010 + image: polarlightning/bitcoind:29.0@sha256:4521294ac25fdbf1492a8cc5ea987463a5f244b82546d29bbe8451db39f36f3a command: # rpcauth (user=regtest; password=regtest) # rpcauth (user=joinmarket; password=joinmarket) @@ -388,7 +378,7 @@ volumes: joinmarket3_datadir: joinmarket4_datadir: joinmarket5_datadir: - joinmarket_directory_node_datadir: + joinmarket_clientserver_directory_node_datadir: tor_datadir: irc_datadir: diff --git a/docker/regtest/dockerfile-deps/joinmarket/directory_node/README.md b/docker/regtest/dockerfile-deps/joinmarket/directory_node/README.md index 0f790880..c1c3b127 100644 --- a/docker/regtest/dockerfile-deps/joinmarket/directory_node/README.md +++ b/docker/regtest/dockerfile-deps/joinmarket/directory_node/README.md @@ -9,7 +9,7 @@ and provide the correct onion hostname via `directory_nodes` yourself! e.g. in a docker-compose setup: ```yml - joinmarket_directory_node: + joinmarket_clientserver_directory_node: [...] environment: jm_hidden_service_dir: \/root\/.joinmarket\/hidden_service_dir diff --git a/docker/regtest/dockerfile-deps/joinmarket/latest/jam-entrypoint.sh b/docker/regtest/dockerfile-deps/joinmarket/latest/jam-entrypoint.sh index b3e0a4ba..c760ccb8 100644 --- a/docker/regtest/dockerfile-deps/joinmarket/latest/jam-entrypoint.sh +++ b/docker/regtest/dockerfile-deps/joinmarket/latest/jam-entrypoint.sh @@ -93,7 +93,7 @@ if [ "${ENSURE_WALLET}" = "true" ]; then \"method\":\"createwallet\",\ \"params\":{\ \"wallet_name\":\"${wallet_name}\",\ - \"descriptors\":false,\ + \"descriptors\":$( [[ "${CREATE_WALLET_PARAMS_DESCRIPTORS,,}" == "false" ]] && echo false || echo true ),\ \"load_on_startup\":true\ }\ }" diff --git a/docker/regtest/dockerfile-deps/joinmarket/latest/torrc b/docker/regtest/dockerfile-deps/joinmarket/latest/torrc index acca9872..ece59b60 100644 --- a/docker/regtest/dockerfile-deps/joinmarket/latest/torrc +++ b/docker/regtest/dockerfile-deps/joinmarket/latest/torrc @@ -1,7 +1,7 @@ # Default JoinMarket Tor configuration # taken from v0.9.6 on 2022-07-18: # https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/v0.9.6/install.sh#L388-L393 -Log warn stderr +Log notice stdout SOCKSPort 9050 IsolateDestAddr IsolateDestPort ControlPort 9051 CookieAuthentication 1 diff --git a/docker/regtest/tor/conf/torrc b/docker/regtest/tor/conf/torrc index 6e7ef81a..7a7d630c 100644 --- a/docker/regtest/tor/conf/torrc +++ b/docker/regtest/tor/conf/torrc @@ -9,11 +9,6 @@ ControlPort 0.0.0.0:9051 CookieAuthentication 1 CookieAuthFile /var/lib/tor/control_auth_cookie -# Hidden service for JoinMarket reference directory node -HiddenServiceDir /var/lib/tor/ref-directory -HiddenServicePort 5222 172.30.0.20:8080 -HiddenServiceVersion 3 - # Hidden service for JoinMarket NG directory node HiddenServiceDir /var/lib/tor/ng-directory HiddenServicePort 5222 172.30.0.21:5223 diff --git a/package.json b/package.json index 15465d79..e64b0b0d 100644 --- a/package.json +++ b/package.json @@ -41,14 +41,18 @@ "regtest:down": "docker compose --env-file docker/regtest/.env.example --file docker/regtest/docker-compose.yml down", "regtest:logs:all": "docker compose --env-file docker/regtest/.env.example --file docker/regtest/docker-compose.yml logs --follow", "regtest:logs": "npm run regtest:logs:ng:native:jmwalletd", + "regtest:logs:obwatch": "npm run regtest:logs:ng:obwatch", + "regtest:logs:directory_node": "npm run regtest:logs:ng:directory_node", "regtest:logs:ng:native:jmwalletd": "docker logs -f jm_regtest_joinmarket", "regtest:logs:ng:obwatch": "docker logs -f jm_regtest_joinmarket_ng_orderbook_watcher", - "regtest:logs:obwatch": "npm run regtest:logs:ng:obwatch", - "regtest:logs:ng:directory_node": "docker exec -t jm_regtest_joinmarket_directory_node tail -f /var/log/jam/directory_node_stdout.log -n 200", + "regtest:logs:ng:directory_node": "docker logs -f jm_regtest_joinmarket_ng_directory_node", + "regtest:logs:clientserver:directory_node": "docker exec -t jm_regtest_joinmarket_clientserver_directory_node tail -f /var/log/jam/directory_node_stdout.log -n 200", "regtest:logs:clientserver:native:jmwalletd": "docker exec -t jm_regtest_joinmarket3 tail -f /var/log/jam/jmwalletd_stdout.log", + "regtest:logs:clientserver:native:tor": "docker exec -t jm_regtest_joinmarket3 tail -f /var/log/jam/tor_stdout.log", "regtest:logs:clientserver:native:schedule": "docker exec -t jm_regtest_joinmarket3 tail -f /root/.joinmarket/logs/TUMBLE.schedule", "regtest:init": "./docker/regtest/init-setup.sh", - "regtest:mine": "watch -n 11 ./docker/regtest/mine-block.sh" + "regtest:mine": "watch -n 11 ./docker/regtest/mine-block.sh", + "regtest:listwallets": "docker exec -t jm_regtest_bitcoind bitcoin-cli -datadir=/home/bitcoin/data -regtest -rpcport=43782 listwallets" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ From 91d31c2639c367c7a62d32dfddd5c6b0bd72dc42 Mon Sep 17 00:00:00 2001 From: Parth <143504541+parrth20@users.noreply.github.com> Date: Tue, 30 Jun 2026 00:55:35 +0530 Subject: [PATCH 002/117] Apply Tailwind styling consistency and brand identity pass across app (#1297) * style: add jam brand theme tokens * style: apply brand tokens to shared UI * style: add semantic brand status tokens * style: normalize branded UI states --- .../create/CreateStepVerifyMnemonic.tsx | 6 +- .../CreateFidelityBondDialogSteps.tsx | 14 ++-- src/components/earn/EarnForm.tsx | 4 +- src/components/earn/EarnPage.tsx | 4 +- src/components/earn/MoveToJarDialog.tsx | 6 +- src/components/earn/RenewBondDialog.tsx | 8 +-- src/components/import/ImportDetailsForm.tsx | 3 +- src/components/import/ImportStepConfirm.tsx | 2 +- src/components/layout/AppNavbar.tsx | 10 +-- src/components/layout/Layout.tsx | 2 +- src/components/logging/LogViewer.tsx | 5 +- src/components/orderbook/OrderbookTable.tsx | 4 +- src/components/receive/BitcoinAmountInput.tsx | 2 +- src/components/receive/ReceiveForm.tsx | 4 +- src/components/send/PaymentConfirmDialog.tsx | 6 +- src/components/send/SendForm.tsx | 8 +-- .../settings/AccountXpubsDialog.tsx | 4 +- src/components/settings/SeedPhraseDialog.tsx | 2 +- src/components/ui/alert.tsx | 4 +- src/components/ui/badge-variants.ts | 2 +- src/components/ui/button-variants.ts | 2 +- src/components/ui/jam/ActivityIndicator.tsx | 4 +- src/components/ui/jam/Address.tsx | 2 +- src/components/ui/jam/Balance.module.css | 4 +- src/components/ui/jam/Balance.tsx | 2 +- src/components/ui/jam/Cheatsheet.tsx | 2 +- src/components/ui/jam/Jar.tsx | 2 +- src/components/ui/jam/JmWebsocketInfo.tsx | 2 +- src/components/ui/jam/StatusBadge-variants.ts | 14 ++-- src/components/wallet/BranchEntryTable.tsx | 4 +- src/components/wallet/JarUtxosTable.tsx | 4 +- .../wallet/WalletJarsDetailsContent.tsx | 6 +- src/index.css | 72 +++++++++++++++---- 33 files changed, 133 insertions(+), 87 deletions(-) diff --git a/src/components/create/CreateStepVerifyMnemonic.tsx b/src/components/create/CreateStepVerifyMnemonic.tsx index 4612718f..6a636c32 100644 --- a/src/components/create/CreateStepVerifyMnemonic.tsx +++ b/src/components/create/CreateStepVerifyMnemonic.tsx @@ -87,7 +87,7 @@ export const CreateStepVerifyMnemonic = ({ mnemonicPhrase, onVerified, onBack }:
@@ -135,7 +135,7 @@ export const CreateStepVerifyMnemonic = ({ mnemonicPhrase, onVerified, onBack }: })}
{allSelected && isCorrect && ( -
+
{t('create_wallet.verify_mnemonic.feedback_mnemonic_confirmed')}
diff --git a/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx b/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx index 8e3e01d5..205db4e6 100644 --- a/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx +++ b/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx @@ -361,7 +361,7 @@ export function CreateFidelityBondDialogSteps({ wizard }: CreateFidelityBondDial
-
+

{t('earn.fidelity_bond.freeze_utxos.label_selected_utxos', { count: selectedUtxos.length })}

@@ -376,7 +376,7 @@ export function CreateFidelityBondDialogSteps({ wizard }: CreateFidelityBondDial
{utxosToFreeze.length > 0 && ( -
+

{t('earn.fidelity_bond.freeze_utxos.label_utxos_to_freeze', { count: utxosToFreeze.length })}

@@ -445,7 +445,7 @@ export function CreateFidelityBondDialogSteps({ wizard }: CreateFidelityBondDial key="copy-address-review" value={address} text={} - successText={} + successText={} className={cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'h-10 w-10 shrink-0')} onSuccess={() => toast.success(t('receive.text_copy_address'))} onError={() => toast.error(t('receive.error_copy_address_failed'))} @@ -503,8 +503,8 @@ export function CreateFidelityBondDialogSteps({ wizard }: CreateFidelityBondDial return (
-
- +
+

{t('earn.fidelity_bond.create_fidelity_bond.success_text')}

@@ -531,7 +531,7 @@ export function CreateFidelityBondDialogSteps({ wizard }: CreateFidelityBondDial key="copy-address-success" value={address} text={} - successText={} + successText={} className={cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'h-10 w-10 shrink-0')} onSuccess={() => toast.success(t('receive.text_copy_address'))} onError={() => toast.error(t('receive.error_copy_address_failed'))} @@ -553,7 +553,7 @@ export function CreateFidelityBondDialogSteps({ wizard }: CreateFidelityBondDial key="copy-txid" value={txResult.txinfo.txid} text={} - successText={} + successText={} className={cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'h-10 w-10 shrink-0')} onSuccess={() => toast.success(t('earn.fidelity_bond.create_fidelity_bond.text_copy_transaction_id')) diff --git a/src/components/earn/EarnForm.tsx b/src/components/earn/EarnForm.tsx index e2186199..3c8fb1be 100644 --- a/src/components/earn/EarnForm.tsx +++ b/src/components/earn/EarnForm.tsx @@ -310,11 +310,11 @@ export function EarnForm({

- isValid: + isValid:
{JSON.stringify(isValid, null, 2)}
- values: + values:
{JSON.stringify(values, null, 2)}
diff --git a/src/components/earn/EarnPage.tsx b/src/components/earn/EarnPage.tsx index c1192a74..b3beedd5 100644 --- a/src/components/earn/EarnPage.tsx +++ b/src/components/earn/EarnPage.tsx @@ -418,11 +418,11 @@ export const EarnPage = ({ walletFileName }: EarnPageProps) => {
- walletInfo.fidelityBondSummary.fbOutputs: + walletInfo.fidelityBondSummary.fbOutputs:
{JSON.stringify(walletInfo.fidelityBondSummary.fbOutputs, null, 2)}
- jmSessionState.offer_list: + jmSessionState.offer_list:
{JSON.stringify(jmSession.offer_list, null, 2)}
diff --git a/src/components/earn/MoveToJarDialog.tsx b/src/components/earn/MoveToJarDialog.tsx index 09e6d98f..df08f320 100644 --- a/src/components/earn/MoveToJarDialog.tsx +++ b/src/components/earn/MoveToJarDialog.tsx @@ -349,8 +349,8 @@ export function MoveToJarDialog({ open, onOpenChange, walletFileName, utxo }: Mo {step === 'success' && (
-
- +
+

{t('earn.fidelity_bond.move.success_text')}

@@ -368,7 +368,7 @@ export function MoveToJarDialog({ open, onOpenChange, walletFileName, utxo }: Mo key="copy-txid-move" value={txResult.txinfo.txid} text={} - successText={} + successText={} className={cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'h-10 w-10 shrink-0')} onSuccess={() => toast.success(t('earn.fidelity_bond.create_fidelity_bond.text_copy_transaction_id')) diff --git a/src/components/earn/RenewBondDialog.tsx b/src/components/earn/RenewBondDialog.tsx index de458991..bcc967ad 100644 --- a/src/components/earn/RenewBondDialog.tsx +++ b/src/components/earn/RenewBondDialog.tsx @@ -402,8 +402,8 @@ export function RenewBondDialog({ open, onOpenChange, walletFileName, utxo }: Re {step === 'success' && (
-
- +
+

{t('earn.fidelity_bond.renew.success_text')}

@@ -421,7 +421,7 @@ export function RenewBondDialog({ open, onOpenChange, walletFileName, utxo }: Re key="copy-address-renew" value={destinationAddress} text={} - successText={} + successText={} className={cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'h-10 w-10 shrink-0')} onSuccess={() => toast.success(t('receive.text_copy_address'))} onError={() => toast.error(t('global.errors.reason_unknown'))} @@ -443,7 +443,7 @@ export function RenewBondDialog({ open, onOpenChange, walletFileName, utxo }: Re key="copy-txid-renew" value={txResult.txinfo.txid} text={} - successText={} + successText={} className={cn(buttonVariants({ variant: 'outline', size: 'icon' }), 'h-10 w-10 shrink-0')} onSuccess={() => toast.success(t('earn.fidelity_bond.create_fidelity_bond.text_copy_transaction_id')) diff --git a/src/components/import/ImportDetailsForm.tsx b/src/components/import/ImportDetailsForm.tsx index 39c15b75..96be2600 100644 --- a/src/components/import/ImportDetailsForm.tsx +++ b/src/components/import/ImportDetailsForm.tsx @@ -253,7 +253,8 @@ export const ImportDetailsForm = ({
diff --git a/src/components/import/ImportStepConfirm.tsx b/src/components/import/ImportStepConfirm.tsx index 33aaf3e6..a583430c 100644 --- a/src/components/import/ImportStepConfirm.tsx +++ b/src/components/import/ImportStepConfirm.tsx @@ -113,7 +113,7 @@ export const ImportStepConfirm = ({
diff --git a/src/components/layout/AppNavbar.tsx b/src/components/layout/AppNavbar.tsx index 8ff3f309..c99d55e2 100644 --- a/src/components/layout/AppNavbar.tsx +++ b/src/components/layout/AppNavbar.tsx @@ -69,7 +69,7 @@ const WalletPreview = ({ ) : ( <> {isLoading ? ( - + ) : ( )} @@ -145,7 +145,7 @@ export function AppNavbar({ }) return ( -
+
{t('navbar.tab_earn')} - | + | {skipWalletBackupVerification && !isCorrect && (
diff --git a/src/components/create/CreateWalletPage.tsx b/src/components/create/CreateWalletPage.tsx index d6133f6c..594d5d42 100644 --- a/src/components/create/CreateWalletPage.tsx +++ b/src/components/create/CreateWalletPage.tsx @@ -41,7 +41,7 @@ const CreateWalletCard = ({ icon: Icon, title, children }: PropsWithChildren<{ i
- {title} + {title} {children} diff --git a/src/components/dev/DevSetupPage.tsx b/src/components/dev/DevSetupPage.tsx index 70b4f69d..7b6ffdaa 100644 --- a/src/components/dev/DevSetupPage.tsx +++ b/src/components/dev/DevSetupPage.tsx @@ -43,8 +43,8 @@ export default function DevSetupPage() {
Jam Instances
-
- +
+ jm_regtest_joinmarket primary · ng native
@@ -57,9 +57,14 @@ export default function DevSetupPage() {
-
- - +
+ + jm_regtest_joinmarket2 ({LINK_JM_REGTEST_JOINMARKET2}) secondary · ng standalone @@ -72,8 +77,8 @@ export default function DevSetupPage() {
-
- +
+ jm_regtest_joinmarket3 tertiary · clientserver native
@@ -85,9 +90,14 @@ export default function DevSetupPage() {
-
- - +
+ + jm_regtest_joinmarket4 ({LINK_JM_REGTEST_JOINMARKET4}) quaternary · clientserver standalone @@ -115,10 +125,15 @@ export default function DevSetupPage() {
Block Explorer
{' '} -
- + @@ -133,16 +148,23 @@ export default function DevSetupPage() {
-
- +
Mine a block, e.g.: -
generatetoaddress 1 bcrt1qrnz0thqslhxu86th069r9j6y7ldkgs2tzgf5wx
+
+                generatetoaddress 1 bcrt1qrnz0thqslhxu86th069r9j6y7ldkgs2tzgf5wx
+              
diff --git a/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialog.tsx b/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialog.tsx index 460870b6..dc19f39f 100644 --- a/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialog.tsx +++ b/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialog.tsx @@ -99,7 +99,7 @@ export function CreateFidelityBondDialog({ return ( - + {t('earn.fidelity_bond.create_fidelity_bond.title')} {t('earn.fidelity_bond.subtitle')} diff --git a/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx b/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx index 205db4e6..79eec90b 100644 --- a/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx +++ b/src/components/earn/CreateFidelityBondDialog/CreateFidelityBondDialogSteps.tsx @@ -88,7 +88,7 @@ export function CreateFidelityBondDialogSteps({ wizard }: CreateFidelityBondDial
-
+