Have you tried creating a separate "descriptor" wallet that uses the xpub (and appropriate derivation path)? This should enable you to create a "watching-only" wallet that uses the underlying xpub+derivation path to generate and ultimately monitor addresses.
Regardless, you will need to do
one rescan of the current blockchain for it to pick up all the transactions that are already associated with the addresses generated... but once the initial rescan is complete, it
should just work as normal. As the addresses will be automatically generated (defaults to generating 1000, if a higher/lower limit is not specified), then you should not need to rescan again.
Also, having it in a separate wallet file means you won't affect or "pollute" your current wallet file with the watching only data.
EDIT: I have tested this today, and it works... but a couple of important notes:
- Bitcoin Core only accepts
xpubs (and
xprvs)... not ypubs/yprvs nor zpubs/zprvs... I used the converter here:
https://jlopp.github.io/xpub-converter/ (open source)
- The xpubs provided by Trezor Suite are at the Account level (ie. m/44'/0'/0' or m/49'/0'/0' etc)
- You will need a separate wallet for each Trezor "account"... otherwise, your balances/transactions will be all mixed.
- I'm not sure if you can specify receive
and change in the same descriptor... i just imported them as
two descriptors... one marked external (receive) and one marked internal (change)
- for the P2SH-P2WPKH (nested segwit) Trezor accounts... the descriptor format should be:
sh(wpkh(xpub_long_string_here/0/*))#CHECKSUM
sh(wpkh(xpub_long_string_here/1/*))#CHECKSUM
- You can calculate the CHECKSUM value for each descriptor by using
getdescriptorinfo command. Note that each descriptor will have a unique checksum.
- you can import both "receive" and "change" descriptors at the same time:
importdescriptors '[{"desc":"sh(wpkh(xpub_long_string_here/0/*))#CHECKSUM","active":true,"timestamp":1514764800,"internal":false},{"desc":"sh(wpkh(xpub_long_string_here/1/*))#CHECKSUM","active":true,"timestamp":1514764800,"internal":true}]'
This will mean you only need to do
one rescan.
- For the timestamps, I used
https://www.epochconverter.com/ I went back in the account history, then picked a date that was at least a few days before the first transaction showing in the account history (I picked 1st Jan 2018)... and converted that to "unix epoch" format. The timestamp isn't strictly necessary... but it can reduce the rescan time by a significant amount if you have only used your wallet for a couple of years as it starts the rescan from around the timestamp, rather than at block 0 (the default value).
- I did a quick "get new receive address" test and both Trezor Suite and Bitcon Core showed the same receive address as the first "unused" address
But obviously, Bitcoin Core will allow you to get multiple "new" receive addresses. So, there could be a potential "gap limit" issue if you were to generate too many receive address in Bitcoin Core and then receive coins to one of those address past the Trezor Suite gap limit (I'm not sure what this limit actually is)