On Sat, May 13, 2017 at 1:26 AM, Luke Dashjr <luke@dashjr.org> wrote:
Versionbits change/lose their meaning after the deployment timeout. For this
reason, the timeout must be specified so the check is skipped when that
occurs.

To add a timeout a user can optionally bundle a pair of similar transactions.  One with the transaction version bits set and a second with a locktime set.  The effect is the same.

Also, doing it the way you describe would fail to enforce that BIP9 is
actually in use for the block version; you could simply add that as an
additional condition, but it seems pretty hacky since you wouldn't be able to
upgrade versionbits anymore...


My formal condition does include a check for the block version (I've corrected the constants below):

(txVersion & 0xe0000000 != 0x200000000) || ((blkVersion & 0xe0000000 = 0x200000000) && (blkVersion & txVersion = txVersion))

Nothing here prevents upgrading versionbits AFAICT.  Any txVersion that does not begin with 0b001 is unconditionally acceptable and available for further soft-forking.