What frightens me is that there is no way back if we make this step and it turns out to be a wrong direction.
Please explain to me how ANY of the proposals (the original OP_EVAL, BIP 16, and BIP 17) are any different in the "what if we change our minds and want to remove support" case?
Removing support for BIP 17 would be harder than removing support for BIP 16, because if the network doesn't support it
all BIP 17 transactions can be stolen
as soon as they're broadcast.
Imagine there are a bunch of un-redeemed BIP 17 transactions in the block chain and support for BIP 17 goes away. Every single one of them could be immediately redeemed by anybody.
The situation is better with BIP 16, because of the "half validation" done by old nodes. Admittedly not a lot better, but it is the "belt and suspenders" nature of BIP 16 that makes me prefer it.
Isn't it still possible for anyone to spend out of a BIP-16 transaction if someone has ever revealed the public key (so, if you ever spend from a BIP16 transaction, you would certainly want to spend out of every transaction funding that address to avoid a chance that someone will spend those other transactions)?
So, let me see if I can sum up the choices when changing the protocol (regardless of which proposal is adopted):
1) Make things backward compatible in order to avoid a chain split - this creates a risk that coins can be stolen because old nodes/miners aren't performing full validation on the new transactions…to avoid this risk you do what? wait until 100% of all mining capacity has upgraded before using the new transaction types?
2) Ensure that no nodes (old/new, miner or non miner) allow any transaction that doesn't pass all validation and accept that a chain split could (will) happen - this creates a risk that people who don't upgrade can end up with un-spendable coins in their wallets (a double spend could be executed by creating a transaction accepted in the new chain, but not in the old, then spend those coins again on the old chain).
I'm not sure which is the better approach…just trying to make sense of it. However, it feels like it's better to ensure coins can't be accidentally spent and that full validation is always performed. If the super majority of the network is switching, then people will upgrade or patch…that's just part of the deal with bitcoin IMO. I also question the wisdom of OP_NOP bytecodes. Seems like it would be smarter to make them cause a script to immediately fail (if that were the case, we wouldn't be having this discussion, we would be talking about a clean implementation and a proper transition of the network).