Hi Matt,

(I moved your comment to this thread, where I think it is more relevant).

This is a fair point.  I concede that as far as Sighash Type Byte is concerned, the type of change is fairly similar to BIP 68 (though I don't think the argument applies to OP_CODESEPARATOR).
I might rephrase what you say as "invalidating otherwise-unusable bits of the protocol".  I don't quite know the right phrasing that captures both the insecure and redundant aspects of the protocol.  I'm willing to accept that nSequence numbers (as they originally were), NOP1-NOP10 and these extra sighash types can all be classified as redundant aspects of the Bitcoin protocol.

I still think the alternative proposal of caching the sha256 midstate is the better choice.  We should strive to avoid changing the consensus rules when we have reasonable alternatives to achieve our goals. However, I now see that this proposal isn't entirely unprecedented.

On Tue, Mar 12, 2019 at 5:08 PM Matt Corallo <lf-lists@mattcorallo.com> wrote:
Note that even your carve-outs for OP_NOP is not sufficient here - if you were using nSequence to tag different pre-signed transactions into categories (roughly as you suggest people may want to do with extra sighash bits) then their transactions could very easily have become un-realistically-spendable. The whole point of soft forks is that we invalidate otherwise-unused bits of the protocol. This does not seem inconsistent with the proposal here.

> On Mar 9, 2019, at 13:29, Russell O'Connor <roconnor@blockstream.io> wrote:
> Bitcoin has *never* made a soft-fork, since the time of Satoishi, that invalidated transactions that send secured inputs to secured outputs (excluding uses of OP_NOP1-OP_NOP10).

On Fri, Mar 8, 2019 at 10:57 AM Russell O'Connor <roconnor@blockstream.io> wrote:
On Thu, Mar 7, 2019 at 2:57 PM Matt Corallo <lf-lists@mattcorallo.com> wrote:
I can't say I'm particularly married to this idea (hence the alternate
proposal in the original email), but at the same time the lack of
existing transactions using these bits (and the redundancy thereof -
they don't *do* anything special) seems to be pretty strong indication
that they are not in use. One could argue a similarity between these
bits and OP_NOPs - no one is going to create transactions that require
OP_NOP execution to be valid as they are precisely the kind of thing
that may get soft-forked to have a new meaning. While the sighash bits
are somewhat less candidates for soft-forking,

I don't think "somewhat less candidates for soft-forking" is a fair description.  These bits essentially unsuitable for soft-forking within legacy Script.

I don't think "someone
may have shoved random bits into parts of their
locked-for-more-than-a-year transactions" is sufficient reason to not
soft-fork something out.

I disagree. It is sufficient.

When was the last time Bitcoin soft-forked out working transactions that sent funds from securely held UTXOs to securely held UTXOs (aside from those secured by Scripts using the reserved OP_NOP1-OP_NOP10)?  AFAIK it has never occurred since the time of Satoshi, even for the most hypothetical of transactions.  It is my understanding is that Bitcoin Core would never do such a thing unless the security of Bitcoin protocol itself was under existential threat (see OP_CODESEPARATOR) and even then Bitcoin Core would only soft-fork out the minimal amount necessary to safely diffuse such a threat.

Since the above soft-fork isn't addressing addressing any such threat (that I'm aware of), and could hypothetically destroy other people money, it crosses a line I thought we were never supposed to cross.
 
Obviously, actually *seeing* it used in
practice or trying to fork them out in a fast manner would be
unacceptable, but neither is being proposed here.

Perhaps you don't see them in used in the blockchain because the users trying to use them are caught up by the fact they they are not being relayed by default (violating SCRIPT_VERIFY_STRICTENC) and are having difficulty redeeming them.
You cannot first make transactions non-standard and then use the fact that you don't see them being used to justify a soft-fork.

I know of users who have their funds tied up due to other changes in Bitcoin Core's default relay policy.  I believe they waiting for their funds to become valuable enough to go through the trouble of having them directly mined.  Shall we now permanently destroy their funds too, before they have a chance to get their transactions mined?