Let's assume the Taproot soft fork is activated in June 2021. I continue to run an old version of Bitcoin Core (not enforcing Taproot rules) in July 2021 and so my full node treats valid Taproot spends as anyone-can-spend. Then in August 2021 I upgrade to the latest version of Bitcoin Core and start enforcing the Taproot rules. Does my full node re-verify the Taproot spends from the point of network activation or does it only verify Taproot spends from the point that I upgraded to the latest version of Bitcoin Core?
1 Answer
Your node will likely never re-verify those transactions according to the Taproot rules unless it is forced to do a new initial block download (IBD) due to database corruption etc. It verified them at the time as valid spends according to anyone-can-spend rules and so there is no need to revisit them.
SegWit was different to Taproot in that pre SegWit versions (< 0.13.1) weren't storing the witnesses and so when they upgraded to a post SegWit version (>= 0.13.1) they had to request these witnesses. With Taproot, the witnesses (SegWit v1) are already stored by post SegWit (>= 0.13.1) but pre Taproot versions, they just haven't been validated according to Taproot rules.
There is an open Bitcoin Core PR #21009 at the time of writing (February 2021) to remove the code that allowed for requesting witnesses after an upgrade to a post SegWit version (>= 0.13.1).
There is some interesting advice and observations on bitcoincore.org in the Segregated Witness Upgrade Guide. Some of it is specific to the SegWit soft fork (e.g. activation) rather than the proposed Taproot soft fork but much of it is applicable to both.
Thanks to Luke Dashjr and Suhas Daftuar for answering this question on IRC.