How to Create Bitcoin Blockchain Wallets using javascript?
Tags: javascript, productivity, programming, discuss
Published: 2021-06-22 16:22:18

### Introduction : 

The Bitcoin blockchain is one of the biggest and most impressive blockchains on the planet. It was planned principally to send Bitcoin, the cryptographic money. In this way, normally, to make a message in the Bitcoin blockchain, you should send some Bitcoins starting with one record then onto the next.


A Bitcoin wallet address is made out of 32 unique characters. It permits you to send and get Bitcoins. Your private key is a mysterious code related with your Bitcoin address that allows you to demonstrate your responsibility for Bitcoins connected with the location. 

**Let's start**

What will be covered in this Blog

1.Generate Address Endpoint


2.Validate address

3.Address Balance Endpoint

First of all you will need API for which you can create developer account on platform like block.io or blockcypher.com , Here i am using blockcypher [API] (https://www.blockcypher.com/dev/bitcoin/#introduction). Here you can use TESTNET (Testing) and MAINNET (Deployment).

**Different Bitcoin addresses:**

1.P2PKH which begins with the number 1, 
for e.g.: 1PkCrXg22onNePtQmiepDspLJUv7CtkACx

2.P2SH type starting with the number 3, 
for e.g.: 3PZjS8D9bA15km6vfHskNnPvHDL73QH2MN

3.Bech32 type starting with bc1, for e.g.: 
bc1qGh7s6BYhqV1R3N1qdK8P1KNJjbqmRBs

**1. Generate Address Endpoint**

API Endpoints

MAINNET

```
https://api.blockcypher.com/v1/btc/main/addrs
```

TESTNET

```
https://api.blockcypher.com/v1/btc/test3/addrs
``` 

Make HTTP request 
```
var xhr = new XMLHttpRequest();
xhr.open("POST", url);

xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
   if (xhr.readyState === 4) {
      
      var data = JSON.parse(xhr.responseText);
    
   }};

xhr.send();
```
OUTPUT :
```
{
"private": "81ee75559d37cbe4b7cbbfb9931ab1ba32172c5cdfc3ac2d020259b4c1104198",
"public": "0231ff9ec76820cb36b69061f6ffb125db3793b4aced468a1261b0680e1ef4883a",
"address": "mvpW7fMSi1nbZhJJDySNS2PUau8ppnu4kY",
"wif": "cRwGhRjCuuNtPgLcoYd1CuAqjFXCV5YNCQ1LB8RsFCvu61VfSsgR"
}
```
See demo  [here](https://shantunparmar.github.io/crypto.github.io/)  , Check MAINNET and TESTNET address

**2.Validate address**

A valid Bitcoin address resembles a ledger number utilizing which you store your bitcoins and check your balances. If you got wrong address then you might lose your money. So before assiging any address make sure it is valid or not.

To validate address we will use a library named as `wallet-address-validator`.

Installation 

NPM
```
npm install wallet-address-validator
```

Browser
```
<script src="wallet-address-validator.min.js"></script>
```
You may get js from [here](https://github.com/shantunparmar/crypto.github.io/blob/gh-pages/wallet-address-validator.min.js)

Call below function to check validation 
```
    var address = document.getElementById('addr').value;
     
    var valid = WAValidator.validate(address, 'bitcoin');
    if(valid)
        alert('This is a valid address');
    else
        alert('Address INVALID');
```

**Note **: This validation will allow you to validate MAINNET

**3. Address Balance Endpoint**

API Endpoints

TESTNET
```
https://api.blockcypher.com/v1/btc/test3/addrs/{address}/balance
```

MAINNET
```
https://api.blockcypher.com/v1/btc/test3/addrs/{address}/balance
```

OUTPUT
```
{
  "address": "mx52XPqpzygzadkk8n1rCZPrC7B4h4UcwT",
  "total_received": 2404904,
  "total_sent": 0,
  "balance": 2404904,
  "unconfirmed_balance": 0,
  "final_balance": 2404904,
  "n_tx": 4,
  "unconfirmed_n_tx": 0,
  "final_n_tx": 4
}
```

You can track down all the code in my GitHub Repository. Drop a star on the off chance that you think that its helpful.

We will continue transactions in next article.

Thank you & Take care!!