I'm using NBitcoin and I created an ExtKey object. Now I need to get the Master Chain Code (see page 89 of Mastering Bitcoin for a good explanation) for this HD node. How do I do this?

According to Mastering Bitcoin a root seed is used with HMAC-SHA512 to create a 512-bits output. The left 256 bits are used for the master private key, the right 256 bits are used for the master chain code. When I call GetBytes() on my ExtKey object, however, it returns a byte[74] array. This corresponds to 592 bits. I don't know what the extra 80 bits are so I can't just take the right 256 bits.

2 Answers 2


I solved this with a pull request that adds a property to ExtKey and ExtPubKey that allows you to call the ChainCode property. See pull request 156.

It has been merged into NBitcoin which is available on NuGet.


Here are a few things what you can do, I noted what you need in comment:

var masterPrivateKey = new ExtKey();
var masterPublicKey = masterPrivateKey.Neuter();

// This is what you need:
var masterMainNetPrivateKey = masterPrivateKey.GetWif(Network.Main);
var masterTestNetPrivateKey = masterPrivateKey.GetWif(Network.TestNet);

var masterMainNetPublicKey = masterPublicKey.GetWif(Network.Main);
var masterTestNetPublicKey = masterPublicKey.GetWif(Network.TestNet);

You might want to check the corresponding section of the C# Bitcoin book.

  • 1
    No, that's not what I need. WIF and Chain Code are two completely different things. WIF is just a way to encode a private key. May 22, 2016 at 18:31
  • Anyway, I added a change to NBitcoin that exposes the chain code through a property, see PR 156 github.com/MetacoSA/NBitcoin/pull/156. It has been merged into NBitcoin, available on NuGet. May 22, 2016 at 18:32

Your Answer

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

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