1

I'm trying to "manually" confirm the Bitcoin addresses that Electrum, Sparrow, and Caravan generate from a deterministic multisig addresses.

As an example, I have the following 2-of-2 wallet:

Seed words #1:

legal thumb play interest flash will lucky jar outdoor guard vendor found crucial develop spring valley example supply fortune pole right acid alert page

Seed words #2:

begin siege speak boat before mad solve dance lawsuit point machine cake tragic fiber waste equip loan syrup cloud credit shock choose chest finish

Using Ian Coleman's BIP39 Tool, I can confirm the Master Public Key (xpub) with the following steps:

  1. Enter the seed words under BIP39 Mnemonic
  2. Under Derivation Path, Select the BIP32 tab
  3. Under BIP32 Derivation Path, enter m/45'/0 (for legacy multisig)
  4. Copy the BIP32 Extended Public Key

The resulting xpub matches with what Electrum generates when entering those seed words as a 2-of-2 legacy multisig wallet. The example xpub's are:

Wallet #1 xpub:

xpub6B7nJf6xmWPjeVpdSwePjDmUJxRWSVf3vXu47AYKiLTyW7rPUyysKVU8TtRJ9VXtAVNHjx6EsueiE9Mw7JyP4dVhZjJF4ViVAJNaoZo49uw

Wallet #2 xpub:

xpub6Ab52xTpcFNYToaXBT6opdaqo18rKSYA3rnum4XuE8pLW9N748QJq1PP5z93KSfbpfMVRLqsYgZYwfNmzomqkw4kvopD1PuXS4DuNaY4ZBi

The first address in this multisig wallet is 3BWrS4WXB61sppUN7zxgAqxzjcSvML7jWC. When I enter those xpubs into Sparrow Bitcoin Wallet (with Script Type Legacy (P2SH) and Derivation m/45') I get the same address. Caravan also gives the same address.

My question is this: how do I "manually" generate that first Bitcoin address?

I've tried using Ian Coleman's Multisig Tool, Bitcore, coinbin Bitcoin Wallet, and the addmultisigaddress command from Bitcoin core. They all require "Public Keys" of the addresses from the two wallets. Where can I find/generate those Public Keys (preferably using some sort of browser-html or command line tool)? I've tried using the Public Key's generated at the bottom of the BIP39 Tool from above, but no combination of those keys in any of the tools results in the same generated address.

2 Answers 2

0

The full derivation path appears to follow BIP 45, but not quite exactly. The actual public keys are being generated from the xpub at the path m/45'/0/0. For the first address, the derivation paths for the public keys will be m/45'/0/0/0. You can get these pubkeys using Ian Coleman's BIP 39 tool by going to the BIP 32 tab and entering m/45'/0/0 as the derivation path. Then scroll down to the derived addresses and select the first one.

You should see that the first pubkey from the first mnemonic is 03ae50de983900d2898d975cd71c8520c88da868acc434e259775ee58b5e4ce311 and the first pubkey from the second mnemonic is 03c2367af137659943c11ee02aa88ec9b2ca5b424183b8d3a6990db1907bc475ae. If you enter these into any multisig generating tool, you should get the address you are expecting.

For example, Bitcoin Core's createmultisig:

$ bitcoin-cli createmultisig 2 '["03ae50de983900d2898d975cd71c8520c88da868acc434e259775ee58b5e4ce311","03c2367af137659943c11ee02aa88ec9b2ca5b424183b8d3a6990db1907bc475ae"]'
{
  "address": "3BWrS4WXB61sppUN7zxgAqxzjcSvML7jWC",
  "redeemScript": "522103ae50de983900d2898d975cd71c8520c88da868acc434e259775ee58b5e4ce3112103c2367af137659943c11ee02aa88ec9b2ca5b424183b8d3a6990db1907bc475ae52ae",
  "descriptor": "sh(multi(2,03ae50de983900d2898d975cd71c8520c88da868acc434e259775ee58b5e4ce311,03c2367af137659943c11ee02aa88ec9b2ca5b424183b8d3a6990db1907bc475ae))#eq5t5j72"
}
1
  • Perfect. Setting the derivation path to m/45'/0/0 generated the public keys that match the address generated from Electrum, etc. Sep 27, 2021 at 2:35
0

You are making multisig addresses, so the first thing to change is to select BIP141 not BIP32 tab.

Under BIP141, go to script semantics drop down menu. Select P2WSH 1-1 multisig.

Then manually adjust the derivation path just above.

You'll get 1 of 1 msig addresses below.

Use the Zpub give and enter into Electrum to generate a 1 of 1 msig wallet - not sure if Electrum allows a 1 of 1 msig wallet.

If not, you need to make 2 keys with Ian Coleman (that's one way of many), extract 2 Zpubs, ignore the addresses, make a 2 of 2 Electrum wallet with those Zpubs, print the addresses, make a duplicate wallet with those Zpubs using Sparrow or Specter, and finally compare the address list is identical to Electrum's.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.