From aff7db9f35d64631a72b61d9207da6e473c5cbd0 Mon Sep 17 00:00:00 2001 From: The MMGen Project Date: Fri, 26 Feb 2021 21:09:35 +0000 Subject: [PATCH] Support Bitcoin Core v0.21.0 --- mmgen/daemon.py | 3 ++- mmgen/regtest.py | 16 ++++++++++++++++ mmgen/rpc.py | 23 +++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/mmgen/daemon.py b/mmgen/daemon.py index f520a718..19117710 100755 --- a/mmgen/daemon.py +++ b/mmgen/daemon.py @@ -313,7 +313,7 @@ class CoinDaemon(Daemon): 'btc': cd( 'Bitcoin', 'Bitcoin', - 'Bitcoin Core', 200100, '0.20.1', + 'Bitcoin Core', 210000, '0.21.0', 'bitcoind', 'bitcoin-cli', 'bitcoin.conf', @@ -508,6 +508,7 @@ class CoinDaemon(Daemon): class BitcoinDaemon(CoinDaemon): cfg_file_hdr = '# BitcoinDaemon config file\n' + tracking_wallet_name = 'mmgen-tracking-wallet' def subclass_init(self): diff --git a/mmgen/regtest.py b/mmgen/regtest.py index 84c9ab14..41968658 100755 --- a/mmgen/regtest.py +++ b/mmgen/regtest.py @@ -87,6 +87,20 @@ class MMGenRegtest(MMGenObject): gmsg('Mined {} block{}'.format(blocks,suf(blocks))) + async def create_tracking_wallet(self,user): + try: + await self.rpc_call('getbalance') + except: + await self.rpc_call('createwallet', + user, # wallet_name + user != 'miner', # disable_private_keys + user != 'miner', # blank (no keys or seed) + '', # passphrase (empty string for non-encrypted) + False, # avoid_reuse (track address reuse) + False, # descriptors (native descriptor wallet) + False # load_on_startup + ) + async def setup(self): try: os.makedirs(self.d.datadir) @@ -101,6 +115,7 @@ class MMGenRegtest(MMGenObject): gmsg('Creating miner wallet') self.start_daemon('miner') + await self.create_tracking_wallet('miner') await self.generate(432,silent=True) await self.rpc_call('stop') @@ -109,6 +124,7 @@ class MMGenRegtest(MMGenObject): for user in ('alice','bob'): gmsg("Creating {}'s tracking wallet".format(user.capitalize())) self.start_daemon(user) + await self.create_tracking_wallet(user) if user == 'bob' and opt.setup_no_stop_daemon: msg('Leaving daemon running with Bob as current user') else: diff --git a/mmgen/rpc.py b/mmgen/rpc.py index 5ae09f64..20a19cdd 100755 --- a/mmgen/rpc.py +++ b/mmgen/rpc.py @@ -386,6 +386,29 @@ class BitcoinRPCClient(RPCClient,metaclass=aInitMeta): if len((await self.call('help',func)).split('\n')) > 3: self.caps += (cap,) + if caller != 'regtest': + try: + await self.call('getbalance') + except: + await self.create_tracking_wallet() + + async def create_tracking_wallet(self): + """ + Quirk: when --datadir is specified (even if standard), wallet is created directly in + datadir, otherwise in datadir/wallets + """ + wname = self.daemon.tracking_wallet_name + await self.call('createwallet', + wname, # wallet_name + True, # disable_private_keys + True, # blank (no keys or seed) + '', # passphrase (empty string for non-encrypted) + False, # avoid_reuse (track address reuse) + False, # descriptors (native descriptor wallet) + True # load_on_startup + ) + ymsg(f'Created {self.daemon.coind_name} wallet {wname!r}') + def get_daemon_cfg_fn(self): # Use dirname() to remove 'bob' or 'alice' component return os.path.join(