How users collectively sign a transaction in a multisig scenario? Say there're 3 people (A,B,C) involving into a 2 of 3 multisig scenario. If A &amp; B agree to sign a transaction, what steps they should take? My guess is:


A creates a transaction with the multisig address, signs it with A's private key.
A gets the raw transaction above, somehow (via email or something else) manually sends it to B.
B signs it and broadcasts to the whole Bitcoin network.
Not exactly.

1.
First, you need to create a receiving address that holds your "2 of 3 spendable" funds.
For that, you need three pubkeys (pubA, pubB and pubC).

2.
Form a multisig script/address with those three pubkeys.
You can use Bitcoin Cores call addmultisigaddress nrequired ["key",...]. 
All three participants should do that with the exact same order of the pubkeys.

addmultisigaddress 2 &lt;pubA&gt; &lt;pubB&gt; &lt;pubC&gt;
This will spitt out a multisig address.
The 2 stands for how many signatures are required to sign the input later.

If you want the redeem-script (expert users), call validateaddress &lt;newmultisig-addr&gt;
(there is a string object called script)

3.
Receive coins with your new created multisig address.

4.
Spending the coins/inputs requires now 2 signatures. If you use bitcoin-core, you need to create a (raw)transaction spending that particular input.
For that, you need to know the transaction-id and the output index of the received coin you want to spend.

Do something like

 createrawtransaction 
      '[{
         "txid": "8b9123963a3bbeedac1469daf6111929286e57128812dc08e83a94a3c4e76e3e", 
          "vout":0
       }]'
       '{"&lt;newaddress&gt;": &lt;amount&gt;}'


You will get a raw transaction which you then can sign (on your side, first signature or two required).

signrawtransaction &lt;hex from createrawtransaction&gt;


You can pass the partial signed transaction to other participants and let them so the same thing:

signrawtransaction &lt;hex from partial signed transaction&gt;


Details:
If you use addmultisigaddress you don't need to pass around the reedem-script and signtransaction's parameters are much simpler.