For a token sale we want to use the MultiSigWallet from ConsenSys where all team members will registered as signer while every transaction needs to be signed by at least 2 team members.

Otherwise we also like the idea of using HD Wallets to make it easier to identify a payment with a particular purchase while using new addresses only once for every purchase.

Is there any way to combine both approaches?

  • How do you want to combine them? Do you want multiple child multisig wallets that can be signed off by the same owners? or do you want a single multisig wallet that accept signatures by any of the child keys derived from owners addresses? – Ismael Sep 16 '18 at 22:15

I think combining those scenarios is possible, but not elegant. The idea of HD-Wallets is that you can deterministically derive any key from a seed (which usually is derived from a mnemonic phrase and an optional password). If you have a team working on a project and you want to use a HD-Wallet for your project containing all keys, keys for incoming payments, keys for savings, keys for donations, and so on (which is the basic idea behind it), somebody should be in control of the mnemonic phrase and the password which can be used to reconstruct all private keys for any purpose within your project. If the tree also contains the private keys of the staff members, which they used to derive a address to register in the multisig contract, the person(s) who is/are in control of the mnemonic phrase and password have full control over all private keys of the staff members. This implies that they also could fulfill the multsig requirement by their own. I'd rather suggest the following:

  1. Every staff member creates his private key (and therefore his address) on his own. It is not important if they use a simple non-deterministic wallet or a HD-wallet to create they private key, what is important is that they use this address as their new permanent identity as a staff member. They register this address in the multisig contract for you token.
  2. For your project you create a HD-Wallet which will be able to differentiate between different account types (payments, savings, donations, project xyz, education, travel, etc.).

You should define derivation paths for the different account types and document them. BIP44 suggests the following path (https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki):

m / purpose' / coin_type' / account' / change / address_index

What you should do first is define which coin_type your token will have. You can find a free index and register it at https://github.com/satoshilabs/slips/blob/master/slip-0044.md . 0x800000d5 (alias is d5H) seems to be free, let's take it for example. Then you define different account types and store them (using backups):

  • 0H = payments
  • 1H = savings
  • 2H = donations
  • 3H = project MYTOKEN
  • 4H = education

    • 0 = Blockchain
    • 1 = AI
    • 2 = IOT
  • 5H = journey

Now you can clearly define which path you have to derive if you want to access specific funds. For example, if you want to know how much funds are left for education in the field of AI, you derive the address from the private key in the following path: m / 2CH / d5H / 4H / 0 / 1

Further, you can now give staff members who should only manage specific funds access to a partial derivation path. For example, whoever shall manage the education funds can be given access to only this derivation path by giving him the relevant private key and chaincode (both encoded in xprv format, see BIP32) at the level m / 2CH / d5H / 4H

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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