Support Bitcoin Core v0.21.0

This commit is contained in:
The MMGen Project 2021-02-26 21:09:35 +00:00
commit aff7db9f35
Signed by: mmgen
GPG key ID: 3F8B1861E32B7DA2
3 changed files with 41 additions and 1 deletions

View file

@ -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):

View file

@ -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:

View file

@ -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(