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
|
example `wallet-tool.py` becomes `jm-wallet-tool`. The rest of this section
|
||||||
details nix-bitcoin specific workflows for JoinMarket.
|
details nix-bitcoin specific workflows for JoinMarket.
|
||||||
|
|
||||||
## Initialize JoinMarket Wallet
|
## Wallets
|
||||||
|
|
||||||
By default, nix-bitcoin's JoinMarket module automatically generates a wallet for
|
By default, a wallet is automatically generated at service startup.
|
||||||
you. If however, you want to manually initialize your wallet, follow these steps.
|
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
|
1. Enable JoinMarket in your node configuration
|
||||||
|
|
||||||
|
@ -260,6 +260,6 @@
|
|||||||
# The nix-bitcoin release version that your config is compatible with.
|
# The nix-bitcoin release version that your config is compatible with.
|
||||||
# When upgrading to a backwards-incompatible release, nix-bitcoin will display an
|
# 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.
|
# 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
|
if [[ ! -f $wallet ]]; then
|
||||||
${optionalString (cfg.rpcWalletFile != null) ''
|
${optionalString (cfg.rpcWalletFile != null) ''
|
||||||
echo "Create watch-only wallet ${cfg.rpcWalletFile}"
|
echo "Create watch-only wallet ${cfg.rpcWalletFile}"
|
||||||
${bitcoind.cli}/bin/bitcoin-cli -named createwallet \
|
if ! output=$(${bitcoind.cli}/bin/bitcoin-cli -named createwallet \
|
||||||
wallet_name="${cfg.rpcWalletFile}" disable_private_keys=true
|
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}
|
cd ${cfg.dataDir}
|
||||||
# Strip trailing newline from password file
|
# Strip trailing newline from password file
|
||||||
if ! tr -d "\n" <"${secretsDir}/jm-wallet-password" \
|
if ! tr -d "\n" <"${secretsDir}/jm-wallet-password" \
|
||||||
| ${nbPkgs.joinmarket}/bin/jm-genwallet \
|
| ${nbPkgs.joinmarket}/bin/jm-genwallet \
|
||||||
--datadir=${cfg.dataDir} --wallet-password-stdin $walletname \
|
--datadir=${cfg.dataDir} --wallet-password-stdin $seed $walletname \
|
||||||
| grep 'recovery_seed' \
|
| (if [[ ! $seed ]]; then
|
||||||
| cut -d ':' -f2 \
|
umask u=r,go=
|
||||||
| (umask u=r,go=; cat > jm-wallet-seed); then
|
grep -ohP '(?<=recovery_seed:).*' > jm-wallet-seed
|
||||||
|
else
|
||||||
|
cat > /dev/null
|
||||||
|
fi); then
|
||||||
echo "wallet creation failed"
|
echo "wallet creation failed"
|
||||||
rm -f "$wallet" jm-wallet-seed
|
rm -f "$wallet" jm-wallet-seed
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -100,6 +100,29 @@ let
|
|||||||
[1] https://github.com/bitcoin/bitcoin/pull/15454
|
[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: {
|
mkOnionServiceChange = service: {
|
||||||
|
@ -1,11 +1,21 @@
|
|||||||
{ stdenv, lib, fetchurl, python3, nbPython3Packages, pkgs }:
|
{ stdenv, lib, fetchurl, applyPatches, fetchpatch, python3, nbPython3Packages, pkgs }:
|
||||||
|
|
||||||
let
|
let
|
||||||
version = "0.9.1";
|
version = "0.9.1";
|
||||||
|
src = applyPatches {
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://github.com/JoinMarket-Org/joinmarket-clientserver/archive/v${version}.tar.gz";
|
url = "https://github.com/JoinMarket-Org/joinmarket-clientserver/archive/v${version}.tar.gz";
|
||||||
sha256 = "0a8jlzi3ll1dw60fwnqs5awmcfxdjynh6i1gfmcc29qhwjpx5djl";
|
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; [
|
runtimePackages = with nbPython3Packages; [
|
||||||
joinmarketbase
|
joinmarketbase
|
||||||
|
Loading…
Reference in New Issue
Block a user