Two out of Four transaction with excluding some key pairs

1

Is it in theory possible to set up a 2 out of 4 multi-sig transaction, but only allow a subset of all possible combinations?

More concrete: I want to have the keys A, B, C, D.

  • Alice controls A
  • Bob controls B
  • Charlie controls C
  • Dennis controls D

There are six ways to select 2 items from 4 items. However, the only valid combinations should be:

  • A, B
  • C, D
  • A, D

user599464

Posted 2014-10-15T19:45:23.573

Reputation: 436

1Minor justification: there are six ways to select 2 from 4.Madzi Konjo 2014-10-24T04:57:22.317

@MadziKonjo Good point. We don't care about the difference between A, B and B, A.Nick ODell 2014-10-26T15:09:13.223

This is a usecase for the question: It would be possible for an oracle to release ether key B or C. Now A OR D could access the funds. The oracle can never access the funds AND it does not need to have to know about Alice and Dennis or about the transaction. It only releases a key.user599464 2014-10-29T15:17:22.720

Answers

2

Out of curiosity, what's the use case for a configuration like this?

Is it possible to do this using the bitcoin scripting language? Yes, absolutely. Making it and actually having it included into a block is questionable, mainly because it would be a non standard transaction type.

There aren't really a lot of tools to help you do it, though. I can describe what the scripts would have to look like, but not sure how you would actually make such a transaction. This question might be of interest to you as well.

The assumed scriptSig, where we don't know what combination of signatures we have:

0 {sig1} {sig2}

The scriptPubKey would be a standard P2SH pub key script:

OP_HASH160 {hash} EQUAL

The redeemScript (in this P2SH transaction) might look something like:

3DUP 2 {A_pub} {B_pub} 2 CHECKMULTISIG DUP NOTIF
    3DUP 2 {C_pub} {D_pub} 2 CHECKMULTISIG DUP NOTIF
        3DUP 2 {A_pub} {D_pub} 2 CHECKMULTISIG 
    ENDIF 
ENDIF

I believe this would work, but if someone could check the logic of this script here, I'd appreciate it. The OP_3DUP is necessary because the scriptSig should have 3 items on it already (2 signatures and the OP_0 to satisfy the off-by-1 error in the original client), and those 3 items need to be used more than once.

morsecoder

Posted 2014-10-15T19:45:23.573

Reputation: 12 624

https://www.realitykeys.com/ Is would be possible for an oracle to release ether key C or D. Now A OR B could access the funds. The oracle can never access the funds AND it does not need to have to know about Alice and Bob or about the transaction. It only releases a key.user599464 2014-10-28T00:19:50.200

1But if the oracle has keys C and D then they will be able to spend it? And I think your configurations might have been a little off in the original question, wouldn't you be looking for any of these combinations: (A,B), (A,D), (B,C)? That way the oracle can release either D or C and doesn't have to actually go through the pains of signing the transaction.morsecoder 2014-10-28T00:28:36.830

Sorry - you are right I messed up A, B, C, and D. The question is still valid, but with the key names from the question the oracle should hold B and C.user599464 2014-10-29T15:15:23.390

Can you edit the question to have exactly what you mean? Thanks!morsecoder 2014-10-29T15:16:31.087

In my opinion the question is fine? An answer to this questions is at the same time an answer how this usecase can be handled. Or do you think I should ask for a solution for the usecase? That would be a different questions in my opinion.user599464 2014-10-29T16:25:16.443

I think my response answered the question you asked. Not sure what you mean by "how this usecase can be handled", but that soundsl like it might be a different question.morsecoder 2014-10-29T16:37:55.130