Taproot is often described as making Bitcoin “more programmable”.
However, Bitcoin still executes the same stack-based Script VM, without loops or persistent state.
Taproot increased expressiveness without changing the VM. What specific protocol changes made this possible?










