The 0x in Publish0x - BTC Addresses
TheNextWeb BTC fork Image

The 0x in Publish0x - BTC Addresses

By bar93 | KBC | 10 Mar 2020


Image source: thenextweb.com

The concept of using a long address code for payments are a function similar to e-mail. For instance - PayPal uses e-mail addresses to send money between registered users. BTC wallets do the same in conceptual terms. I am not going to show you how to generate different kinds of addresses. If you need one, you can generate it from Electrum Wallet. Don't lose it. Always ensure you keep your seed phrase/mnemonic phrase/private keys or get a hardware wallet.

Bitcoin address is a 160-bit hash of the public portion of a public/private ECDSA keypair. Using public-key cryptography, you can "sign" data with your private key and anyone who knows your public key can verify that the signature is valid. Pubkey Privkey

P2PKH

P2PKH addresses begin with the number '1' and are also known as version 1 addresses or legacy addresses. P2PKH is an abbreviation of "Pays To PubKey Hash". Legacy address transactions are usually large and fees are higher than other types of addresses.

P2SH

A "Pay To Script Hash", my personal favorite. They begin with the number '3' and has more functions than legacy addresses. P2SH have a multisig protocol which specifies that multiple digital signatures are required to authorize a transaction. Funds can be sent to P2PKH and bech32 addresses from this wallet. It makes use of a redeem script in order to get paid. If someone having a P2SH address hasn't paid you, it might be an issue with the multisig, segwit (Segregated Witness) or consensus layer.

P2SH Scripts

Bech32

Addresses are longer than legacy or P2SH. They are also known as 'bc1-addresses'. This type of address is not so highly adopted than the two named above - see the adoption stats here. This makes it difficult to do transactions over exchanges. Some exchanges accept payments from bech32 but do not allow payment to bech32. It is relatively 'new' {December'17}. Bech32 addresses are cheaper to spend from and offer better protection against typing errors. Unspent outputs save 22 bytes as their ScriptSigs are empty instead of 0x0014{20-byte-key-hash}. So, the amount of saving is insignificant. The newer checksum algorithm is faster with a higher probability of error detection guaranteed. For more information, you can read this thread.

How addresses are generated

The correct way of generating bitcoin addresses must be followed, otherwise you will lose your funds in the process. You will generally lose it when funds are paid into an invalid/non-existent wallet address. This is an example of how the process works:

  • Step 0 - Having a private ECDSA key
   18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725
  • Step 1 - Take the corresponding public key generated with it (33 bytes, 1 byte 0x02 (y-coord is even), and 32 bytes corresponding to X coordinate)
   0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352
  • Step 2 - Perform SHA-256 hashing on the public key
   0b7c28c9b7290c98d7438e70b3d3f7c848fbd7d1dc194ff83f4f7cc9b1378e98
  • Step 3 - Perform RIPEMD-160 hashing on the result of SHA-256
   f54a5851e9372b87810a8e60cdd2e7cfd80b6e31
  • Step 4 - Add version byte in front of RIPEMD-160 hash (0x00 for Main Network)
   00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31

(note that below steps are the Base58Check encoding, which has multiple library options available implementing it)

  • Step 5 - Perform SHA-256 hash on the extended RIPEMD-160 result
   ad3c854da227c7e99c4abfad4ea41d71311160df2e415e713318c70d67c6b41c
  • Step 6 - Perform SHA-256 hash on the result of the previous SHA-256 hash
   c7f18fe8fcbed6396741e58ad259b5cb16b7fd7f041904147ba1dcffabf747fd
  • Step 7 - Take the first 4 bytes of the second SHA-256 hash. This is the address checksum
   c7f18fe8
  • Step 8 - Add the 4 checksum bytes from stage 7 at the end of extended RIPEMD-160 hash from stage 4. This is the 25-byte binary Bitcoin Address.
   00f54a5851e9372b87810a8e60cdd2e7cfd80b6e31c7f18fe8
  • Step 9 - Convert the result from a byte string into a base58 string using Base58Check encoding. This is the most commonly used Bitcoin Address format
   1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs

Code Source: en.bitcoin.it

For an overview on how the Public Key is converted to a BTC address, check out this process diagram.

PubKey to Address Conversion

 

It's complicated, but I often find myself coming back to the basics to determine where my BTC went, how to get paid in BTC, or where the 0x fits in.


bar93
bar93

Firm believer in liberty and commercial freedom. Crypto enthusiast.


KBC
KBC

This blog solely provides information on the blockchain and cryptocurrencies

Send a $0.01 microtip in crypto to the author, and earn yourself as you read!

20% to author / 80% to me.
We pay the tips from our rewards pool.