09:35 < gmaxwell> sipa: okay, so lets end this argument and add a freeking op_code for this for luke.
[...]
09:36 < gavinandresen> I don't like adding an extra byte to make luke-jr feel better.
But doing this would perpetually bloat the blockchain a bit just so that Luke (and now a few others) would feel better about the cleanliness of the solution. It's a real cost that will cost bitcoin users real money now and in the future and will contribute to the loss of decentralization as bitcoin grows.
Making an OP_P2SH really seems like the best option. The objection that BIP16 creates a special case isn't confined to just Luke; plenty of other people also see that as a valid concern. One name that stands out in my memory because I specifically asked him about it is Tycho.
Of course, Gavin also has objections to OP_P2SH, and while I don't think those objections are fatal (see my reply), I'm not the one doing the work so my opinion doesn't mean shit.
In particular, I think that we could define OP_P2SH in a way that has very strict limits today, but the ability to be used in a more flexible way tomorrow if we determine that it is safe to do so.
For example, we could require that it appear no more than once, and if present it must be the first (or last) opcode in a script and reject any transaction that includes it in any other position, or even reject any transaction where the script doesn't exactly match the existing BIP16 template. This would be pretty simple to add to the existing BIP16 code.
But then down the road, we could gradually relax things as needed.
Say you want to make a transaction that can be redeemed by either of two different P2SH payloads. You rewrite the first stage script to include two hashes and verify that the script matches at least one of them. OP_P2SH still must be first, but now there are two possible templates.
Down the road, someone wants to write a conditional script that can be redeemed either with a key or a P2SH payload. You allow OP_P2SH to be found elsewhere in the script, maybe even inside of a OP_IF block.
What I'm trying to get at is that OP_P2SH could be added today, which would ease some valid concerns, and for relatively low cost, and in a way that allows us room to change in the future.
And for what it's worth, I'm a strong supporter of P2SH, even without OP_P2SH. My miners are currently set to only use pools that either support or intend to support P2SH very soon and my experimental p2pool deployment tool defaults to supporting it. I trust Gavin's judgment on this, my only real disagreement is over how to sell it to the rest of the community.