/testkit-core/src/main/scala/org/bitcoins/testkitcore/gen/AddressGenerator.scala

https://github.com/bitcoin-s/bitcoin-s-core · Scala · 45 lines · 34 code · 9 blank · 2 comment · 5 complexity · d051796f83139e5baad6f76958d4de51 MD5 · raw file

  1. package org.bitcoins.testkitcore.gen
  2. import org.bitcoins.core.protocol._
  3. import org.bitcoins.core.protocol.script.WitnessVersion0
  4. import org.scalacheck.Gen
  5. /** Created by chris on 6/12/17.
  6. */
  7. sealed trait AddressGenerator {
  8. def p2pkhAddress: Gen[P2PKHAddress] =
  9. for {
  10. hash <- CryptoGenerators.sha256Hash160Digest
  11. network <- ChainParamsGenerator.networkParams
  12. addr = P2PKHAddress(hash, network)
  13. } yield addr
  14. def p2shAddress: Gen[P2SHAddress] =
  15. for {
  16. hash <- CryptoGenerators.sha256Hash160Digest
  17. network <- ChainParamsGenerator.networkParams
  18. addr = P2SHAddress(hash, network)
  19. } yield addr
  20. def bech32Address: Gen[Bech32Address] =
  21. for {
  22. (witSPKV0, _) <- ScriptGenerators.witnessScriptPubKeyV0
  23. network <- ChainParamsGenerator.networkParams
  24. addr = Bech32Address(witSPKV0, network)
  25. } yield addr
  26. def bech32mAddress: Gen[Bech32mAddress] =
  27. for {
  28. (witSPK, _) <- ScriptGenerators.witnessScriptPubKey.suchThat(
  29. _._1.witnessVersion != WitnessVersion0)
  30. network <- ChainParamsGenerator.networkParams
  31. } yield Bech32mAddress(witSPK, network)
  32. def bitcoinAddress: Gen[BitcoinAddress] =
  33. Gen.oneOf(p2pkhAddress, p2shAddress, bech32Address, bech32mAddress)
  34. def address: Gen[Address] = bitcoinAddress
  35. }
  36. object AddressGenerator extends AddressGenerator