Generate Cryptocurrency Private Keys And Public Addresses With Golang

Overheen the past month or so I&rsquo,ve demonstrated how to generate address information for a multitude of cryptocurrency Altcoins using technologies like Knot.js, Vue.js, and Angular. The thing about my previous tutorials are that they all used the JavaScript stack ter some sense. What if wij wished to venture into other technologies like Golang?

The process for generating key and address information for Bitcoin and popular Altcoins is pretty much the same. Te reality, the difference is defined by the private key and public key prefix information, typically associated to a network.

Wij&rsquo,re going to see how to generate and invoer private keys for a multitude of cryptocurrency coins spil well spil their addresses using the Go programming language.

Getting the Go Project Dependencies

Rather than reinventing the wheel and developing our own cryptocurrency related algorithms, wij&rsquo,re going to leverage a very popular set of packages.

Assuming that Go is installed and the $GOPATH is configured, execute the following:

Wij&rsquo,ll be using the btcutil and btcd packages which are technically designed for Bitcoin, but wij&rsquo,re going to switch some things to get most other Altcoins supported.

With the adequate packages installed, wij can proceed to figuring out the cryptocurrency network information.

Obtaining and Calculating Prefix Information for Private Keys and Public Keys

When it comes to all cryptocurrency coins, there are a diverse set of key prefixes. Thesis prefixes are simply a byte that alters how the final key looks.

Take Bitcoin for example:

Before wij figure out what exactly the above values mean, you&rsquo,ll most likely be wondering how exactly I came up with them. The fair response is that I dug around official coin source code repositories for every coin I wasgoed interested ter.

If you look at the popular Bitcore repository, you&rsquo,ll notice the following ter the networks.js opstopping:

So yes, the Bitcore repository is a Knot.js project, but it is only an example. You can lightly find this information ter other repositories that are not Knot.js.

Now let&rsquo,s look at an Altcoin. Let&rsquo,s take a look at Reddcoin (RDD):

The above block wasgoed taken from the Reddcore project&rsquo,s networks.js verkeersopstopping. Spil you can see the information is a bit different. Wij weren&rsquo,t fortunate enough to have the byte information drawn out for us.

Using the Bitcoin Wiki, wij can learn about how prefixes are actually calculated. With that skill, wij can find a decimal to hexadecimal rekenmachine such spil BinaryHex Converter, to take the addressVersion and privKeyVersion above and convert it into something wij can use.

The Reddcoin values that wij want are spil goes after:

Depending on what you want to accomplish with this tutorial, do some digging around ter official cryptocurrency coin repositories. With the prefix information, wij&rsquo,ll be able to accomplish fairly a bit.

Developing the Application Logic for Generating Altcoin Keys

With the dependencies installed and the prefix information for our keys known, wij can embark developing an application. Create a main.go opstopping somewhere te a fresh project begin out with the following code:

For now I&rsquo,ve purposefully left the methods empty. Wij want to highlight that wij&rsquo,ve created a gegevens structure called Network to hold our prefix information. Wij&rsquo,re also defining our networks ter a opbergmap so that wij can lightly use them.

Before wij can use the network information to generate keys, wij need to set it. Take the GetNetworkParams function for example:

Wij can then use the GetNetworkParams function within any function that creates or imports keys. For example, if wij wished to create keys, wij would use the following:

The above code will generate a fresh private WIF key using the network parameters of the passed network. If wij desired to turn this around, wij could accept a WIF key and validate it for a particular network:

Te the above code, wij accept a WIF string. If the WIF string is malformed wij&rsquo,ll terugwedstrijd an error. Te this case, malformed does not mean incorrect for a particular network. After wij confirm the WIF key is not malformed, wij can validate that it is onberispelijk for a particular network and come back it.

Since wij&rsquo,ve most likely created or imported a WIF key by now, wij should very likely create a public address. After all, you don&rsquo,t want to share your WIF key.

The above code will take a WIF key and use it along with the network information to create a public address. The WIF key and the public address are indeed all you need when it comes to creating a cryptocurrency wallet for Bitcoin or similar Altcoins.

To test our code, wij can do the following:

See how wij made use of the schrijfmap ter the above code? Wij&rsquo,re telling that wij want to create a Bitcoin WIF key spil well spil a public address for Bitcoin and print out both. Had wij wished to use a different cryptocurrency, wij would have defined it differently te our schrijfmap variable.


You just eyed how to generate WIF keys for Bitcoin and other cryptocurrency Altcoins. By determining the network information for the desired coin, you can generate, invoer, and validate fairly a multitude of coins.

Each of the btcutil and btcd packages do fairly a bit when it comes to the blockchain, far beyond the examples used te this tutorial. If you need to create transactions and other stuff, take a look at the documentation for each of those packages.

A movie version of this article can be seen below.

Nic Raboy

Nic Raboy is an advocate of modern web and mobile development technologies. He has practice te Java, JavaScript, Golang and a multiplicity of frameworks such spil Angular, NativeScript, and Apache Cordova. Nic writes about his development practices related to making web and mobile development lighter to understand.

Related movie: How To Deposit, Buy, and Sell Crypto Currency Using Binance!

Leave a Reply

Your email address will not be published. Required fields are marked *