mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-24 15:02:17 +01:00
* Added crypto project and decoupled BitcoinSLogger from NetworkElement Decoupled BitcoinSLogger from Factory Moved NetworkElement into crypto project Moved Factory and BitcoinSUtil (renamed to BytesUtil) to crypto project Moved MaskedToString to crypto project Added BytesUtil to imports and cleaned up CryptoUtil.recoverPoint Moved the rest of crypto stuff to the crypto project Moved crypto tests to crypto-test project * Added documentation for crypto project
63 lines
1.8 KiB
Markdown
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.{protocol, config}
|
|
import config.TestNet3
|
|
import org.bitcoins.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)
|
|
```
|