joinmarket: allow recreating wallet from seed
This allows users to easily upgrade their wallets to use Fidelity Bonds.
This commit is contained in:
parent
7c5ef32b50
commit
179b86d19c
@ -252,10 +252,15 @@ For clarity reasons, nix-bitcoin renames all scripts to `jm-*` without `.py`, fo
|
||||
example `wallet-tool.py` becomes `jm-wallet-tool`. The rest of this section
|
||||
details nix-bitcoin specific workflows for JoinMarket.
|
||||
|
||||
## Initialize JoinMarket Wallet
|
||||
## Wallets
|
||||
|
||||
By default, nix-bitcoin's JoinMarket module automatically generates a wallet for
|
||||
you. If however, you want to manually initialize your wallet, follow these steps.
|
||||
By default, a wallet is automatically generated at service startup.
|
||||
It's stored at `/var/lib/joinmarket/wallets/wallet.jmdat`, and its mnmenoic recovery
|
||||
seed phrase is stored at `/var/lib/joinmarket/jm-wallet-seed`.
|
||||
|
||||
A missing wallet file is automatically recreated if the seed file is still present.
|
||||
|
||||
If you want to manually initialize your wallet instead, follow these steps:
|
||||
|
||||
1. Enable JoinMarket in your node configuration
|
||||
|
||||
|
@ -260,6 +260,6 @@
|
||||
# The nix-bitcoin release version that your config is compatible with.
|
||||
# When upgrading to a backwards-incompatible release, nix-bitcoin will display an
|
||||
# an error and provide hints for migrating your config to the new release.
|
||||
nix-bitcoin.configVersion = "0.0.49";
|
||||
nix-bitcoin.configVersion = "0.0.51";
|
||||
|
||||
}
|
||||
|
@ -250,17 +250,31 @@ in {
|
||||
if [[ ! -f $wallet ]]; then
|
||||
${optionalString (cfg.rpcWalletFile != null) ''
|
||||
echo "Create watch-only wallet ${cfg.rpcWalletFile}"
|
||||
${bitcoind.cli}/bin/bitcoin-cli -named createwallet \
|
||||
wallet_name="${cfg.rpcWalletFile}" disable_private_keys=true
|
||||
if ! output=$(${bitcoind.cli}/bin/bitcoin-cli -named createwallet \
|
||||
wallet_name="${cfg.rpcWalletFile}" disable_private_keys=true 2>&1); then
|
||||
# Ignore error if bitcoind wallet already exists
|
||||
if [[ $output != *"already exists"* ]]; then
|
||||
echo "$output"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
''}
|
||||
# Restore wallet from seed if available
|
||||
seed=
|
||||
if [[ -e jm-wallet-seed ]]; then
|
||||
seed="--recovery-seed-file jm-wallet-seed"
|
||||
fi
|
||||
cd ${cfg.dataDir}
|
||||
# Strip trailing newline from password file
|
||||
if ! tr -d "\n" <"${secretsDir}/jm-wallet-password" \
|
||||
| ${nbPkgs.joinmarket}/bin/jm-genwallet \
|
||||
--datadir=${cfg.dataDir} --wallet-password-stdin $walletname \
|
||||
| grep 'recovery_seed' \
|
||||
| cut -d ':' -f2 \
|
||||
| (umask u=r,go=; cat > jm-wallet-seed); then
|
||||
--datadir=${cfg.dataDir} --wallet-password-stdin $seed $walletname \
|
||||
| (if [[ ! $seed ]]; then
|
||||
umask u=r,go=
|
||||
grep -ohP '(?<=recovery_seed:).*' > jm-wallet-seed
|
||||
else
|
||||
cat > /dev/null
|
||||
fi); then
|
||||
echo "wallet creation failed"
|
||||
rm -f "$wallet" jm-wallet-seed
|
||||
exit 1
|
||||
|
@ -100,6 +100,29 @@ let
|
||||
[1] https://github.com/bitcoin/bitcoin/pull/15454
|
||||
'';
|
||||
}
|
||||
{
|
||||
version = "0.0.51";
|
||||
condition = config.services.joinmarket.enable;
|
||||
message = let
|
||||
jmDataDir = config.services.joinmarket.dataDir;
|
||||
in ''
|
||||
Joinmarket 0.9.1 has added support for Fidelity Bonds [1].
|
||||
|
||||
If you've used joinmarket before, do the following to enable Fidelity Bonds in your existing wallet.
|
||||
Enabling Fidelity Bonds has no effect if you don't use them.
|
||||
|
||||
1. Deploy the new system config to your node
|
||||
2. Run the following on your node:
|
||||
# Ensure that the wallet seed exists and rename the wallet
|
||||
ls ${jmDataDir}/jm-wallet-seed && mv ${jmDataDir}/wallets/wallet.jmdat{,.bak}
|
||||
# This automatically recreates the wallet with Fidelity Bonds support
|
||||
systemctl restart joinmarket
|
||||
# Remove wallet backup if update was successful
|
||||
rm ${jmDataDir}/wallets/wallet.jmdat.bak
|
||||
|
||||
[1] https://github.com/JoinMarket-Org/joinmarket-clientserver/blob/master/docs/fidelity-bonds.md
|
||||
'';
|
||||
}
|
||||
];
|
||||
|
||||
mkOnionServiceChange = service: {
|
||||
|
@ -1,10 +1,20 @@
|
||||
{ stdenv, lib, fetchurl, python3, nbPython3Packages, pkgs }:
|
||||
{ stdenv, lib, fetchurl, applyPatches, fetchpatch, python3, nbPython3Packages, pkgs }:
|
||||
|
||||
let
|
||||
version = "0.9.1";
|
||||
src = fetchurl {
|
||||
url = "https://github.com/JoinMarket-Org/joinmarket-clientserver/archive/v${version}.tar.gz";
|
||||
sha256 = "0a8jlzi3ll1dw60fwnqs5awmcfxdjynh6i1gfmcc29qhwjpx5djl";
|
||||
src = applyPatches {
|
||||
src = fetchurl {
|
||||
url = "https://github.com/JoinMarket-Org/joinmarket-clientserver/archive/v${version}.tar.gz";
|
||||
sha256 = "0a8jlzi3ll1dw60fwnqs5awmcfxdjynh6i1gfmcc29qhwjpx5djl";
|
||||
};
|
||||
patches = [
|
||||
(fetchpatch {
|
||||
# https://github.com/JoinMarket-Org/joinmarket-clientserver/pull/999
|
||||
name = "improve-genwallet";
|
||||
url = "https://patch-diff.githubusercontent.com/raw/JoinMarket-Org/joinmarket-clientserver/pull/999.patch";
|
||||
sha256 = "08x2i1q8qsn5rxmfmmj4i8s1d2yc862i152riw3d8zwz7x2cq40h";
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
runtimePackages = with nbPython3Packages; [
|
||||
|
Loading…
Reference in New Issue
Block a user