Bitcoin makes the easy part easy: three parties exchange extended public keys once, the wallet software derives a single shared address from a sorted 2-of-3 script, and each spend is a partially signed transaction — a PSBT, standardized in BIP-174 — passed from signer to signer. The descriptor for the whole arrangement fits on one line:
wsh(sortedmulti(2,xpubA.../0/*,xpubB.../0/*,xpubC.../0/*))
The cost is transparency. Until the first spend the address is just a hash, but the moment funds move, the witness data publishes the full 2 <A> <B> <C> 3 script for anyone to read — the escrow construction, the signing pattern, the amounts. On a transparent ledger, using multisig is itself a visible fact.
Monero inverts the trade. Its multisig is indistinguishable from an ordinary transaction on-chain — every Monero spend is already a ring signature, so observers cannot tell that an escrow ever existed. The price is a fussier setup: the three wallets must exchange cryptographic setup material over several rounds before the shared address exists:
# in each of the three wallets, monero-wallet-cli:
prepare_multisig # share the "MultisigV1..." string
make_multisig 2 <info_peer_1> <info_peer_2> # round one
exchange_multisig_keys <info_peer_1> <info_peer_2> # 2-of-3 needs this extra round
# spending: export_multisig_info → import_multisig_info → sign_multisig → submit_multisig