I was under the impression that P2SH was intended for all multi-sig transactions, though you are right there is no reason plain-text multi-sig can't be used (is there? they were probably never added to isStandard...). One reason for desiring P2SH, in general, is that very long scripts become part of the TxIns instead of the TxOuts. This means that they will never bloat a pruned version of the blockchain. If everyone only used P2SH, then no TxOut script would ever be longer than 22 bytes.
You can use plain multisig if you like, they WERE added to IsStandard.
Ahh, so it does make sense to use P2SH for paired/linked wallets, and regular multi-sig for escrow tx, etc. For some reason, I was under the impression that P2SH was intended for
everything. I do prefer plain multi-sig for those escrow tx.
@Mike,
I'm not sure the payment protocol changes this much. It means that the decision about which form to use will be irrelevant to those using the payment protocol, but there will still be users who will do it the "old" way, which should still be accommodated. Though it sounds like we already have a consensus ... it makes sense to use P2SH for linked wallets, and regular multi-sig for isolated escrows and contracts.
@Casascius: I was just about to post an expanded idea for linked wallets, but I think you already did it. I'll restate it, though, for clarity, and maybe add a little.
Let's say I make wallet A/j, and my spouse creates wallet B/j.
We exchange the root of the external/internal chains. Meaning, we exchange the data needed to not just generate one chain of addresses, but both the primary chain and change chain.
So, I give her A'/j and she gives me B'/j. All addresses generated by my wallet will be of the form 2of2([A'/j/0/x, B'/j/0/x]) and all change will go to 2of2([A'/j/1/y, B'/j/1/y]) -- external chain is 0, internal chain is 1. The order will be switched for her wallet: she will create addresses of the form 2of2([B'/j/0/x, A'/j/0/x]) and change will go to 2of2([B'/j/1/y, A'/j/1/y]). So each wallet will only
generate addresses from its own two chains, but
watching for addresses on all four chains.
I'm pretty sure that's very similar to what you suggested.
EDIT: to avoid ordering issues for 3+ wallets, the addresses should be ordered by wallet fingerprint order, and each wallet always generates addresses starting with their own in that list, wrapping around. So if the wallet fingerprints end up ordering the wallets B, A, C, then all 2-of-3 addresses generated by wallet B will be {B,A,C}, wallet A will be {A,C,B} and wallet C will be {C,B,A}. That makes sure there are only N possible address orderings (one per party), instead of N-factorial