bitcoin-s/docs/core/addresses.md
Chris Stewart 65ddeb6798 Make imports in chain.md invisible (#1213)
* Make imports in chain.md invisible

* Hide imports in wallet.md

* Make all core module md files imports hidden

* Cleanup imports on rpc markdown docs

* Try and figure weird travis behavior

* Get rid of uneeded nest qualifiers on mdoc
2020-03-10 12:49:22 -05:00

63 lines
1.8 KiB
Markdown

---
id: addresses
title: Generating addresses
---
Almost all Bitcoin applications need to generate addresses
for their users somehow. There's a lot going on in getting
a correct bitcoin address, but our APIs make it possible to
to get started with all types of addresses in a matter of
minutes.
## Generating SegWit (bech32) addresses
Generating native SegWit addresses in the bech32 format
is something that all Bitcoin applications should enable,
as it makes the transaction fees less expensive, and also
makes the addresses more readable by humans. However, it
has seen slower than necessary adoption. With Bitcoin-S
you can generate bech32 addresses in four(!) lines of code
(not counting comments and imports), so now there's no
reason to keep using legacy transaction formats.
```scala mdoc:invisible
import org.bitcoins.core.{crypto, protocol, config}
import config.TestNet3
import crypto.ECPrivateKey
import protocol._
import protocol.script._
import org.bitcoins.core.protocol.P2PKHAddress
```
```scala mdoc:to-string
// this generates a random private key
val privkey = ECPrivateKey()
val pubkey = privkey.publicKey
val segwitAddress = {
// see https://bitcoin.org/en/glossary/pubkey-script
// for reading resources on the details of scriptPubKeys
// pay-to-witness-pubkey-hash scriptPubKey V0
val scriptPubKey = P2WPKHWitnessSPKV0(pubkey)
Bech32Address(scriptPubKey, TestNet3)
}
println(segwitAddress.toString)
```
## Generating legacy (base58) addresses
If you need to generate legacy addresses for backwards
compatability reasons, that's also a walk in the park.
Take a look:
```scala mdoc:to-string
// we're reusing the same private/public key pair
// from before. don't do this in an actual application!
val legacyAddress = P2PKHAddress(pubkey, TestNet3)
println(legacyAddress.toString)
```