How to get Master Chain Code

2

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.

0

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 3.0.0.28 which is available on NuGet.

-1

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.

1No, 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. – Leon Cullens – 2016-05-22T18:31:38.983

Anyway, I added a change to NBitcoin that exposes the chain code through a property, see PR 156 https://github.com/MetacoSA/NBitcoin/pull/156. It has been merged into NBitcoin 3.0.0.28, available on NuGet.

– Leon Cullens – 2016-05-22T18:32:58.303