What do protocol upgrades look like? Are there forwards compatibility features such as in the block header?