Browse Source

Support Bitcoin Core v0.21.0

The MMGen Project 4 years ago
parent
commit
aff7db9f35
3 changed files with 41 additions and 1 deletions
  1. 2 1
      mmgen/daemon.py
  2. 16 0
      mmgen/regtest.py
  3. 23 0
      mmgen/rpc.py

+ 2 - 1
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):
 

+ 16 - 0
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:

+ 23 - 0
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(