packages feed

haskoin-core 1.2.2 → 1.3.0

raw patch · 20 files changed

+351/−105 lines, 20 filesdep +ramdep −memorydep ~secp256k1-haskellPVP ok

version bump matches the API change (PVP)

Dependencies added: ram

Dependencies removed: memory

Dependency ranges changed: secp256k1-haskell

API changes (from Hackage documentation)

- Haskoin.Address: [bytes] :: Address -> !ByteString
- Haskoin.Address: [hash160] :: Address -> !Hash160
- Haskoin.Address: [hash256] :: Address -> !Hash256
- Haskoin.Address: [version] :: Address -> !Word8
- Haskoin.Address: instance GHC.Generics.Generic Haskoin.Address.Address
- Haskoin.Address: instance GHC.Read.Read Haskoin.Address.Address
- Haskoin.Address: instance GHC.Show.Show Haskoin.Address.Address
- Haskoin.Address.Bech32: instance GHC.Enum.Enum Haskoin.Address.Bech32.Bech32Encoding
- Haskoin.Address.Bech32: instance GHC.Ix.Ix Haskoin.Address.Bech32.Word5
- Haskoin.Address.Bech32: instance GHC.Show.Show Haskoin.Address.Bech32.Bech32Encoding
- Haskoin.Block.Common: instance Data.String.IsString Haskoin.Block.Common.BlockHash
- Haskoin.Block.Common: instance GHC.Generics.Generic Haskoin.Block.Common.Block
- Haskoin.Block.Common: instance GHC.Generics.Generic Haskoin.Block.Common.BlockHash
- Haskoin.Block.Common: instance GHC.Generics.Generic Haskoin.Block.Common.BlockHeader
- Haskoin.Block.Common: instance GHC.Generics.Generic Haskoin.Block.Common.GetBlocks
- Haskoin.Block.Common: instance GHC.Generics.Generic Haskoin.Block.Common.GetHeaders
- Haskoin.Block.Common: instance GHC.Generics.Generic Haskoin.Block.Common.Headers
- Haskoin.Block.Common: instance GHC.Read.Read Haskoin.Block.Common.Block
- Haskoin.Block.Common: instance GHC.Read.Read Haskoin.Block.Common.BlockHash
- Haskoin.Block.Common: instance GHC.Read.Read Haskoin.Block.Common.BlockHeader
- Haskoin.Block.Common: instance GHC.Read.Read Haskoin.Block.Common.GetBlocks
- Haskoin.Block.Common: instance GHC.Read.Read Haskoin.Block.Common.GetHeaders
- Haskoin.Block.Common: instance GHC.Read.Read Haskoin.Block.Common.Headers
- Haskoin.Block.Common: instance GHC.Show.Show Haskoin.Block.Common.Block
- Haskoin.Block.Common: instance GHC.Show.Show Haskoin.Block.Common.BlockHash
- Haskoin.Block.Common: instance GHC.Show.Show Haskoin.Block.Common.BlockHeader
- Haskoin.Block.Common: instance GHC.Show.Show Haskoin.Block.Common.GetBlocks
- Haskoin.Block.Common: instance GHC.Show.Show Haskoin.Block.Common.GetHeaders
- Haskoin.Block.Common: instance GHC.Show.Show Haskoin.Block.Common.Headers
- Haskoin.Block.Headers: instance GHC.Base.Monad m => Haskoin.Block.Headers.BlockHeaders (Control.Monad.Trans.State.Strict.StateT Haskoin.Block.Headers.HeaderMemory m)
- Haskoin.Block.Headers: instance GHC.Generics.Generic Haskoin.Block.Headers.BlockNode
- Haskoin.Block.Headers: instance GHC.Generics.Generic Haskoin.Block.Headers.HeaderMemory
- Haskoin.Block.Headers: instance GHC.Read.Read Haskoin.Block.Headers.BlockNode
- Haskoin.Block.Headers: instance GHC.Read.Read Haskoin.Block.Headers.HeaderMemory
- Haskoin.Block.Headers: instance GHC.Show.Show Haskoin.Block.Headers.BlockNode
- Haskoin.Block.Headers: instance GHC.Show.Show Haskoin.Block.Headers.HeaderMemory
- Haskoin.Block.Merkle: instance GHC.Generics.Generic Haskoin.Block.Merkle.MerkleBlock
- Haskoin.Block.Merkle: instance GHC.Read.Read Haskoin.Block.Merkle.MerkleBlock
- Haskoin.Block.Merkle: instance GHC.Show.Show Haskoin.Block.Merkle.MerkleBlock
- Haskoin.Crypto.Hash: instance Data.String.IsString Haskoin.Crypto.Hash.Hash160
- Haskoin.Crypto.Hash: instance Data.String.IsString Haskoin.Crypto.Hash.Hash256
- Haskoin.Crypto.Hash: instance Data.String.IsString Haskoin.Crypto.Hash.Hash512
- Haskoin.Crypto.Hash: instance GHC.Generics.Generic Haskoin.Crypto.Hash.CheckSum32
- Haskoin.Crypto.Hash: instance GHC.Generics.Generic Haskoin.Crypto.Hash.Hash160
- Haskoin.Crypto.Hash: instance GHC.Generics.Generic Haskoin.Crypto.Hash.Hash256
- Haskoin.Crypto.Hash: instance GHC.Generics.Generic Haskoin.Crypto.Hash.Hash512
- Haskoin.Crypto.Hash: instance GHC.Read.Read Haskoin.Crypto.Hash.CheckSum32
- Haskoin.Crypto.Hash: instance GHC.Read.Read Haskoin.Crypto.Hash.Hash160
- Haskoin.Crypto.Hash: instance GHC.Read.Read Haskoin.Crypto.Hash.Hash256
- Haskoin.Crypto.Hash: instance GHC.Read.Read Haskoin.Crypto.Hash.Hash512
- Haskoin.Crypto.Hash: instance GHC.Show.Show Haskoin.Crypto.Hash.CheckSum32
- Haskoin.Crypto.Hash: instance GHC.Show.Show Haskoin.Crypto.Hash.Hash160
- Haskoin.Crypto.Hash: instance GHC.Show.Show Haskoin.Crypto.Hash.Hash256
- Haskoin.Crypto.Hash: instance GHC.Show.Show Haskoin.Crypto.Hash.Hash512
- Haskoin.Crypto.Keys.Common: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Common.PrivateKey
- Haskoin.Crypto.Keys.Common: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Common.PublicKey
- Haskoin.Crypto.Keys.Common: instance GHC.Read.Read Haskoin.Crypto.Keys.Common.PrivateKey
- Haskoin.Crypto.Keys.Common: instance GHC.Read.Read Haskoin.Crypto.Keys.Common.PublicKey
- Haskoin.Crypto.Keys.Common: instance GHC.Show.Show Haskoin.Crypto.Keys.Common.PrivateKey
- Haskoin.Crypto.Keys.Common: instance GHC.Show.Show Haskoin.Crypto.Keys.Common.PublicKey
- Haskoin.Crypto.Keys.Extended: instance Data.String.IsString Haskoin.Crypto.Keys.Extended.DerivPath
- Haskoin.Crypto.Keys.Extended: instance Data.String.IsString Haskoin.Crypto.Keys.Extended.HardPath
- Haskoin.Crypto.Keys.Extended: instance Data.String.IsString Haskoin.Crypto.Keys.Extended.ParsedPath
- Haskoin.Crypto.Keys.Extended: instance Data.String.IsString Haskoin.Crypto.Keys.Extended.SoftPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Exception.Type.Exception Haskoin.Crypto.Keys.Extended.DerivationException
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.AnyDeriv
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.Bip32PathIndex
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.DerivationException
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.HardDeriv
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.ParsedPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.SoftDeriv
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.XKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.XPrvKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Generics.Generic Haskoin.Crypto.Keys.Extended.XPubKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.Bip32PathIndex
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.DerivPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.DerivationException
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.HardPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.ParsedPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.SoftPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.XKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.XPrvKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Read.Read Haskoin.Crypto.Keys.Extended.XPubKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.Bip32PathIndex
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.DerivPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.DerivationException
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.HardPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.ParsedPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.SoftPath
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.XKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.XPrvKey
- Haskoin.Crypto.Keys.Extended: instance GHC.Show.Show Haskoin.Crypto.Keys.Extended.XPubKey
- Haskoin.Network.Bloom: instance GHC.Generics.Generic Haskoin.Network.Bloom.BloomFilter
- Haskoin.Network.Bloom: instance GHC.Generics.Generic Haskoin.Network.Bloom.BloomFlags
- Haskoin.Network.Bloom: instance GHC.Generics.Generic Haskoin.Network.Bloom.FilterAdd
- Haskoin.Network.Bloom: instance GHC.Generics.Generic Haskoin.Network.Bloom.FilterLoad
- Haskoin.Network.Bloom: instance GHC.Read.Read Haskoin.Network.Bloom.BloomFilter
- Haskoin.Network.Bloom: instance GHC.Read.Read Haskoin.Network.Bloom.BloomFlags
- Haskoin.Network.Bloom: instance GHC.Read.Read Haskoin.Network.Bloom.FilterAdd
- Haskoin.Network.Bloom: instance GHC.Read.Read Haskoin.Network.Bloom.FilterLoad
- Haskoin.Network.Bloom: instance GHC.Show.Show Haskoin.Network.Bloom.BloomFilter
- Haskoin.Network.Bloom: instance GHC.Show.Show Haskoin.Network.Bloom.BloomFlags
- Haskoin.Network.Bloom: instance GHC.Show.Show Haskoin.Network.Bloom.FilterAdd
- Haskoin.Network.Bloom: instance GHC.Show.Show Haskoin.Network.Bloom.FilterLoad
- Haskoin.Network.Common: instance Data.String.IsString Haskoin.Network.Common.MessageCommand
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.Addr
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.Alert
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.GetData
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.HostAddress
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.Inv
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.InvType
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.InvVector
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.MessageCommand
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.NetworkAddress
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.NotFound
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.Ping
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.Pong
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.Reject
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.RejectCode
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.VarInt
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.VarString
- Haskoin.Network.Common: instance GHC.Generics.Generic Haskoin.Network.Common.Version
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.Alert
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.InvType
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.MessageCommand
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.Ping
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.Pong
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.Reject
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.RejectCode
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.VarInt
- Haskoin.Network.Common: instance GHC.Read.Read Haskoin.Network.Common.VarString
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.Addr
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.Alert
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.GetData
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.HostAddress
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.Inv
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.InvType
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.InvVector
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.MessageCommand
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.NetworkAddress
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.NotFound
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.Ping
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.Pong
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.Reject
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.RejectCode
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.VarInt
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.VarString
- Haskoin.Network.Common: instance GHC.Show.Show Haskoin.Network.Common.Version
- Haskoin.Network.Data: instance GHC.Generics.Generic Haskoin.Network.Data.Network
- Haskoin.Network.Data: instance GHC.Read.Read Haskoin.Network.Data.Network
- Haskoin.Network.Data: instance GHC.Show.Show Haskoin.Network.Data.Network
- Haskoin.Network.Message: instance GHC.Generics.Generic Haskoin.Network.Message.Message
- Haskoin.Network.Message: instance GHC.Generics.Generic Haskoin.Network.Message.MessageHeader
- Haskoin.Network.Message: instance GHC.Show.Show Haskoin.Network.Message.Message
- Haskoin.Network.Message: instance GHC.Show.Show Haskoin.Network.Message.MessageHeader
- Haskoin.Script.Common: instance GHC.Generics.Generic Haskoin.Script.Common.PushDataType
- Haskoin.Script.Common: instance GHC.Generics.Generic Haskoin.Script.Common.Script
- Haskoin.Script.Common: instance GHC.Generics.Generic Haskoin.Script.Common.ScriptOp
- Haskoin.Script.Common: instance GHC.Read.Read Haskoin.Script.Common.PushDataType
- Haskoin.Script.Common: instance GHC.Read.Read Haskoin.Script.Common.Script
- Haskoin.Script.Common: instance GHC.Read.Read Haskoin.Script.Common.ScriptOp
- Haskoin.Script.Common: instance GHC.Show.Show Haskoin.Script.Common.PushDataType
- Haskoin.Script.Common: instance GHC.Show.Show Haskoin.Script.Common.Script
- Haskoin.Script.Common: instance GHC.Show.Show Haskoin.Script.Common.ScriptOp
- Haskoin.Script.SigHash: instance GHC.Bits.Bits Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Enum.Enum Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Enum.Enum Haskoin.Script.SigHash.SigHashFlag
- Haskoin.Script.SigHash: instance GHC.Generics.Generic Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Generics.Generic Haskoin.Script.SigHash.SigHashFlag
- Haskoin.Script.SigHash: instance GHC.Generics.Generic Haskoin.Script.SigHash.TxSignature
- Haskoin.Script.SigHash: instance GHC.Num.Num Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Read.Read Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Read.Read Haskoin.Script.SigHash.SigHashFlag
- Haskoin.Script.SigHash: instance GHC.Read.Read Haskoin.Script.SigHash.TxSignature
- Haskoin.Script.SigHash: instance GHC.Real.Integral Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Real.Real Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Show.Show Haskoin.Script.SigHash.SigHash
- Haskoin.Script.SigHash: instance GHC.Show.Show Haskoin.Script.SigHash.SigHashFlag
- Haskoin.Script.SigHash: instance GHC.Show.Show Haskoin.Script.SigHash.TxSignature
- Haskoin.Script.Standard: instance GHC.Generics.Generic Haskoin.Script.Standard.ScriptInput
- Haskoin.Script.Standard: instance GHC.Generics.Generic Haskoin.Script.Standard.ScriptOutput
- Haskoin.Script.Standard: instance GHC.Generics.Generic Haskoin.Script.Standard.SimpleInput
- Haskoin.Script.Standard: instance GHC.Read.Read Haskoin.Script.Standard.ScriptInput
- Haskoin.Script.Standard: instance GHC.Read.Read Haskoin.Script.Standard.ScriptOutput
- Haskoin.Script.Standard: instance GHC.Read.Read Haskoin.Script.Standard.SimpleInput
- Haskoin.Script.Standard: instance GHC.Show.Show Haskoin.Script.Standard.ScriptInput
- Haskoin.Script.Standard: instance GHC.Show.Show Haskoin.Script.Standard.ScriptOutput
- Haskoin.Script.Standard: instance GHC.Show.Show Haskoin.Script.Standard.SimpleInput
- Haskoin.Transaction.Builder.Sign: instance GHC.Generics.Generic Haskoin.Transaction.Builder.Sign.SigInput
- Haskoin.Transaction.Builder.Sign: instance GHC.Read.Read Haskoin.Transaction.Builder.Sign.SigInput
- Haskoin.Transaction.Builder.Sign: instance GHC.Show.Show Haskoin.Transaction.Builder.Sign.SigInput
- Haskoin.Transaction.Common: instance Data.String.IsString Haskoin.Transaction.Common.Tx
- Haskoin.Transaction.Common: instance Data.String.IsString Haskoin.Transaction.Common.TxHash
- Haskoin.Transaction.Common: instance GHC.Generics.Generic Haskoin.Transaction.Common.OutPoint
- Haskoin.Transaction.Common: instance GHC.Generics.Generic Haskoin.Transaction.Common.Tx
- Haskoin.Transaction.Common: instance GHC.Generics.Generic Haskoin.Transaction.Common.TxHash
- Haskoin.Transaction.Common: instance GHC.Generics.Generic Haskoin.Transaction.Common.TxIn
- Haskoin.Transaction.Common: instance GHC.Generics.Generic Haskoin.Transaction.Common.TxOut
- Haskoin.Transaction.Common: instance GHC.Read.Read Haskoin.Transaction.Common.OutPoint
- Haskoin.Transaction.Common: instance GHC.Read.Read Haskoin.Transaction.Common.Tx
- Haskoin.Transaction.Common: instance GHC.Read.Read Haskoin.Transaction.Common.TxHash
- Haskoin.Transaction.Common: instance GHC.Read.Read Haskoin.Transaction.Common.TxIn
- Haskoin.Transaction.Common: instance GHC.Read.Read Haskoin.Transaction.Common.TxOut
- Haskoin.Transaction.Common: instance GHC.Show.Show Haskoin.Transaction.Common.OutPoint
- Haskoin.Transaction.Common: instance GHC.Show.Show Haskoin.Transaction.Common.Tx
- Haskoin.Transaction.Common: instance GHC.Show.Show Haskoin.Transaction.Common.TxHash
- Haskoin.Transaction.Common: instance GHC.Show.Show Haskoin.Transaction.Common.TxIn
- Haskoin.Transaction.Common: instance GHC.Show.Show Haskoin.Transaction.Common.TxOut
- Haskoin.Transaction.Partial: instance GHC.Base.Monoid Haskoin.Transaction.Partial.PSBTSigner
- Haskoin.Transaction.Partial: instance GHC.Base.Monoid Haskoin.Transaction.Partial.UnknownMap
- Haskoin.Transaction.Partial: instance GHC.Base.Semigroup Haskoin.Transaction.Partial.PSBTSigner
- Haskoin.Transaction.Partial: instance GHC.Base.Semigroup Haskoin.Transaction.Partial.UnknownMap
- Haskoin.Transaction.Partial: instance GHC.Enum.Bounded Haskoin.Transaction.Partial.InputType
- Haskoin.Transaction.Partial: instance GHC.Enum.Bounded Haskoin.Transaction.Partial.OutputType
- Haskoin.Transaction.Partial: instance GHC.Enum.Enum Haskoin.Transaction.Partial.InputType
- Haskoin.Transaction.Partial: instance GHC.Enum.Enum Haskoin.Transaction.Partial.OutputType
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.Input
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.InputType
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.Key
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.Output
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.OutputType
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.PSBT
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.PSBTHDPath
- Haskoin.Transaction.Partial: instance GHC.Generics.Generic Haskoin.Transaction.Partial.UnknownMap
- Haskoin.Transaction.Partial: instance GHC.Read.Read Haskoin.Transaction.Partial.Input
- Haskoin.Transaction.Partial: instance GHC.Read.Read Haskoin.Transaction.Partial.Key
- Haskoin.Transaction.Partial: instance GHC.Read.Read Haskoin.Transaction.Partial.Output
- Haskoin.Transaction.Partial: instance GHC.Read.Read Haskoin.Transaction.Partial.PSBT
- Haskoin.Transaction.Partial: instance GHC.Read.Read Haskoin.Transaction.Partial.UnknownMap
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.Input
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.InputType
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.Key
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.Output
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.OutputType
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.PSBT
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.PSBTHDPath
- Haskoin.Transaction.Partial: instance GHC.Show.Show Haskoin.Transaction.Partial.UnknownMap
- Haskoin.Transaction.Segwit: instance GHC.Show.Show Haskoin.Transaction.Segwit.WitnessProgramSH
- Haskoin.Transaction.Taproot: instance GHC.Read.Read Haskoin.Transaction.Taproot.XOnlyPubKey
- Haskoin.Transaction.Taproot: instance GHC.Show.Show Haskoin.Transaction.Taproot.MAST
- Haskoin.Transaction.Taproot: instance GHC.Show.Show Haskoin.Transaction.Taproot.XOnlyPubKey
- Haskoin.Util.Arbitrary.Address: arbitraryAddressAll :: Gen Address
- Haskoin.Util.Arbitrary.Transaction: instance GHC.Show.Show Haskoin.Util.Arbitrary.Transaction.TestCoin
- Haskoin.Util.Arbitrary.Util: instance Data.Default.Class.Default Haskoin.Util.Arbitrary.Util.IdentityTests
- Haskoin.Util.Arbitrary.Util: instance GHC.Show.Show Crypto.Secp256k1.Internal.Context.Ctx
+ Haskoin.Address: CashAddress :: !Word8 -> !ByteString -> Address
+ Haskoin.Address: Script32Address :: !Hash256 -> Address
+ Haskoin.Address: addressBytes :: Address -> ByteString
+ Haskoin.Address: addressHash160 :: Address -> Maybe Hash160
+ Haskoin.Address: addressHash256 :: Address -> Maybe Hash256
+ Haskoin.Address: addressVersion :: Address -> Word8
+ Haskoin.Address: cashAddress :: Word8 -> ByteString -> Maybe Address
+ Haskoin.Address: instance GHC.Internal.Generics.Generic Haskoin.Address.Address
+ Haskoin.Address: instance GHC.Internal.Read.Read Haskoin.Address.Address
+ Haskoin.Address: instance GHC.Internal.Show.Show Haskoin.Address.Address
+ Haskoin.Address: isCashAddress :: Address -> Bool
+ Haskoin.Address: isScript32Address :: Address -> Bool
+ Haskoin.Address: pubKeyAddress :: Hash160 -> Address
+ Haskoin.Address: script32Address :: Hash256 -> Address
+ Haskoin.Address: scriptAddress :: Hash160 -> Address
+ Haskoin.Address: witnessAddress :: Word8 -> ByteString -> Maybe Address
+ Haskoin.Address: witnessPubKeyAddress :: Hash160 -> Address
+ Haskoin.Address: witnessScriptAddress :: Hash256 -> Address
+ Haskoin.Address.Bech32: instance GHC.Internal.Enum.Enum Haskoin.Address.Bech32.Bech32Encoding
+ Haskoin.Address.Bech32: instance GHC.Internal.Ix.Ix Haskoin.Address.Bech32.Word5
+ Haskoin.Address.Bech32: instance GHC.Internal.Show.Show Haskoin.Address.Bech32.Bech32Encoding
+ Haskoin.Address.CashAddr: decodeVersionByte :: Word8 -> Maybe (CashVersion, Int)
+ Haskoin.Address.CashAddr: encodeVersionByte :: CashVersion -> Int -> Maybe Word8
+ Haskoin.Block.Common: instance GHC.Internal.Data.String.IsString Haskoin.Block.Common.BlockHash
+ Haskoin.Block.Common: instance GHC.Internal.Generics.Generic Haskoin.Block.Common.Block
+ Haskoin.Block.Common: instance GHC.Internal.Generics.Generic Haskoin.Block.Common.BlockHash
+ Haskoin.Block.Common: instance GHC.Internal.Generics.Generic Haskoin.Block.Common.BlockHeader
+ Haskoin.Block.Common: instance GHC.Internal.Generics.Generic Haskoin.Block.Common.GetBlocks
+ Haskoin.Block.Common: instance GHC.Internal.Generics.Generic Haskoin.Block.Common.GetHeaders
+ Haskoin.Block.Common: instance GHC.Internal.Generics.Generic Haskoin.Block.Common.Headers
+ Haskoin.Block.Common: instance GHC.Internal.Read.Read Haskoin.Block.Common.Block
+ Haskoin.Block.Common: instance GHC.Internal.Read.Read Haskoin.Block.Common.BlockHash
+ Haskoin.Block.Common: instance GHC.Internal.Read.Read Haskoin.Block.Common.BlockHeader
+ Haskoin.Block.Common: instance GHC.Internal.Read.Read Haskoin.Block.Common.GetBlocks
+ Haskoin.Block.Common: instance GHC.Internal.Read.Read Haskoin.Block.Common.GetHeaders
+ Haskoin.Block.Common: instance GHC.Internal.Read.Read Haskoin.Block.Common.Headers
+ Haskoin.Block.Common: instance GHC.Internal.Show.Show Haskoin.Block.Common.Block
+ Haskoin.Block.Common: instance GHC.Internal.Show.Show Haskoin.Block.Common.BlockHash
+ Haskoin.Block.Common: instance GHC.Internal.Show.Show Haskoin.Block.Common.BlockHeader
+ Haskoin.Block.Common: instance GHC.Internal.Show.Show Haskoin.Block.Common.GetBlocks
+ Haskoin.Block.Common: instance GHC.Internal.Show.Show Haskoin.Block.Common.GetHeaders
+ Haskoin.Block.Common: instance GHC.Internal.Show.Show Haskoin.Block.Common.Headers
+ Haskoin.Block.Headers: instance GHC.Internal.Base.Monad m => Haskoin.Block.Headers.BlockHeaders (Control.Monad.Trans.State.Strict.StateT Haskoin.Block.Headers.HeaderMemory m)
+ Haskoin.Block.Headers: instance GHC.Internal.Generics.Generic Haskoin.Block.Headers.BlockNode
+ Haskoin.Block.Headers: instance GHC.Internal.Generics.Generic Haskoin.Block.Headers.HeaderMemory
+ Haskoin.Block.Headers: instance GHC.Internal.Read.Read Haskoin.Block.Headers.BlockNode
+ Haskoin.Block.Headers: instance GHC.Internal.Read.Read Haskoin.Block.Headers.HeaderMemory
+ Haskoin.Block.Headers: instance GHC.Internal.Show.Show Haskoin.Block.Headers.BlockNode
+ Haskoin.Block.Headers: instance GHC.Internal.Show.Show Haskoin.Block.Headers.HeaderMemory
+ Haskoin.Block.Merkle: instance GHC.Internal.Generics.Generic Haskoin.Block.Merkle.MerkleBlock
+ Haskoin.Block.Merkle: instance GHC.Internal.Read.Read Haskoin.Block.Merkle.MerkleBlock
+ Haskoin.Block.Merkle: instance GHC.Internal.Show.Show Haskoin.Block.Merkle.MerkleBlock
+ Haskoin.Crypto.Hash: instance GHC.Internal.Data.String.IsString Haskoin.Crypto.Hash.Hash160
+ Haskoin.Crypto.Hash: instance GHC.Internal.Data.String.IsString Haskoin.Crypto.Hash.Hash256
+ Haskoin.Crypto.Hash: instance GHC.Internal.Data.String.IsString Haskoin.Crypto.Hash.Hash512
+ Haskoin.Crypto.Hash: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Hash.CheckSum32
+ Haskoin.Crypto.Hash: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Hash.Hash160
+ Haskoin.Crypto.Hash: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Hash.Hash256
+ Haskoin.Crypto.Hash: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Hash.Hash512
+ Haskoin.Crypto.Hash: instance GHC.Internal.Read.Read Haskoin.Crypto.Hash.CheckSum32
+ Haskoin.Crypto.Hash: instance GHC.Internal.Read.Read Haskoin.Crypto.Hash.Hash160
+ Haskoin.Crypto.Hash: instance GHC.Internal.Read.Read Haskoin.Crypto.Hash.Hash256
+ Haskoin.Crypto.Hash: instance GHC.Internal.Read.Read Haskoin.Crypto.Hash.Hash512
+ Haskoin.Crypto.Hash: instance GHC.Internal.Show.Show Haskoin.Crypto.Hash.CheckSum32
+ Haskoin.Crypto.Hash: instance GHC.Internal.Show.Show Haskoin.Crypto.Hash.Hash160
+ Haskoin.Crypto.Hash: instance GHC.Internal.Show.Show Haskoin.Crypto.Hash.Hash256
+ Haskoin.Crypto.Hash: instance GHC.Internal.Show.Show Haskoin.Crypto.Hash.Hash512
+ Haskoin.Crypto.Keys.Common: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Common.PrivateKey
+ Haskoin.Crypto.Keys.Common: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Common.PublicKey
+ Haskoin.Crypto.Keys.Common: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Common.PrivateKey
+ Haskoin.Crypto.Keys.Common: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Common.PublicKey
+ Haskoin.Crypto.Keys.Common: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Common.PrivateKey
+ Haskoin.Crypto.Keys.Common: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Common.PublicKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Data.String.IsString Haskoin.Crypto.Keys.Extended.DerivPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Data.String.IsString Haskoin.Crypto.Keys.Extended.HardPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Data.String.IsString Haskoin.Crypto.Keys.Extended.ParsedPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Data.String.IsString Haskoin.Crypto.Keys.Extended.SoftPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Exception.Type.Exception Haskoin.Crypto.Keys.Extended.DerivationException
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.AnyDeriv
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.Bip32PathIndex
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.DerivationException
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.HardDeriv
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.ParsedPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.SoftDeriv
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.XKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.XPrvKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Generics.Generic Haskoin.Crypto.Keys.Extended.XPubKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.Bip32PathIndex
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.DerivPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.DerivationException
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.HardPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.ParsedPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.SoftPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.XKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.XPrvKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Read.Read Haskoin.Crypto.Keys.Extended.XPubKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.Bip32PathIndex
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.DerivPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.DerivationException
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.HardPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.ParsedPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.SoftPath
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.XKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.XPrvKey
+ Haskoin.Crypto.Keys.Extended: instance GHC.Internal.Show.Show Haskoin.Crypto.Keys.Extended.XPubKey
+ Haskoin.Network.Bloom: instance GHC.Internal.Generics.Generic Haskoin.Network.Bloom.BloomFilter
+ Haskoin.Network.Bloom: instance GHC.Internal.Generics.Generic Haskoin.Network.Bloom.BloomFlags
+ Haskoin.Network.Bloom: instance GHC.Internal.Generics.Generic Haskoin.Network.Bloom.FilterAdd
+ Haskoin.Network.Bloom: instance GHC.Internal.Generics.Generic Haskoin.Network.Bloom.FilterLoad
+ Haskoin.Network.Bloom: instance GHC.Internal.Read.Read Haskoin.Network.Bloom.BloomFilter
+ Haskoin.Network.Bloom: instance GHC.Internal.Read.Read Haskoin.Network.Bloom.BloomFlags
+ Haskoin.Network.Bloom: instance GHC.Internal.Read.Read Haskoin.Network.Bloom.FilterAdd
+ Haskoin.Network.Bloom: instance GHC.Internal.Read.Read Haskoin.Network.Bloom.FilterLoad
+ Haskoin.Network.Bloom: instance GHC.Internal.Show.Show Haskoin.Network.Bloom.BloomFilter
+ Haskoin.Network.Bloom: instance GHC.Internal.Show.Show Haskoin.Network.Bloom.BloomFlags
+ Haskoin.Network.Bloom: instance GHC.Internal.Show.Show Haskoin.Network.Bloom.FilterAdd
+ Haskoin.Network.Bloom: instance GHC.Internal.Show.Show Haskoin.Network.Bloom.FilterLoad
+ Haskoin.Network.Common: instance GHC.Internal.Data.String.IsString Haskoin.Network.Common.MessageCommand
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.Addr
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.Alert
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.GetData
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.HostAddress
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.Inv
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.InvType
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.InvVector
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.MessageCommand
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.NetworkAddress
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.NotFound
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.Ping
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.Pong
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.Reject
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.RejectCode
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.VarInt
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.VarString
+ Haskoin.Network.Common: instance GHC.Internal.Generics.Generic Haskoin.Network.Common.Version
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.Alert
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.InvType
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.MessageCommand
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.Ping
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.Pong
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.Reject
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.RejectCode
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.VarInt
+ Haskoin.Network.Common: instance GHC.Internal.Read.Read Haskoin.Network.Common.VarString
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.Addr
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.Alert
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.GetData
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.HostAddress
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.Inv
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.InvType
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.InvVector
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.MessageCommand
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.NetworkAddress
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.NotFound
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.Ping
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.Pong
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.Reject
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.RejectCode
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.VarInt
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.VarString
+ Haskoin.Network.Common: instance GHC.Internal.Show.Show Haskoin.Network.Common.Version
+ Haskoin.Network.Data: instance GHC.Internal.Generics.Generic Haskoin.Network.Data.Network
+ Haskoin.Network.Data: instance GHC.Internal.Read.Read Haskoin.Network.Data.Network
+ Haskoin.Network.Data: instance GHC.Internal.Show.Show Haskoin.Network.Data.Network
+ Haskoin.Network.Message: instance GHC.Internal.Generics.Generic Haskoin.Network.Message.Message
+ Haskoin.Network.Message: instance GHC.Internal.Generics.Generic Haskoin.Network.Message.MessageHeader
+ Haskoin.Network.Message: instance GHC.Internal.Show.Show Haskoin.Network.Message.Message
+ Haskoin.Network.Message: instance GHC.Internal.Show.Show Haskoin.Network.Message.MessageHeader
+ Haskoin.Script.Common: instance GHC.Internal.Generics.Generic Haskoin.Script.Common.PushDataType
+ Haskoin.Script.Common: instance GHC.Internal.Generics.Generic Haskoin.Script.Common.Script
+ Haskoin.Script.Common: instance GHC.Internal.Generics.Generic Haskoin.Script.Common.ScriptOp
+ Haskoin.Script.Common: instance GHC.Internal.Read.Read Haskoin.Script.Common.PushDataType
+ Haskoin.Script.Common: instance GHC.Internal.Read.Read Haskoin.Script.Common.Script
+ Haskoin.Script.Common: instance GHC.Internal.Read.Read Haskoin.Script.Common.ScriptOp
+ Haskoin.Script.Common: instance GHC.Internal.Show.Show Haskoin.Script.Common.PushDataType
+ Haskoin.Script.Common: instance GHC.Internal.Show.Show Haskoin.Script.Common.Script
+ Haskoin.Script.Common: instance GHC.Internal.Show.Show Haskoin.Script.Common.ScriptOp
+ Haskoin.Script.SigHash: instance GHC.Internal.Bits.Bits Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Enum.Enum Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Enum.Enum Haskoin.Script.SigHash.SigHashFlag
+ Haskoin.Script.SigHash: instance GHC.Internal.Generics.Generic Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Generics.Generic Haskoin.Script.SigHash.SigHashFlag
+ Haskoin.Script.SigHash: instance GHC.Internal.Generics.Generic Haskoin.Script.SigHash.TxSignature
+ Haskoin.Script.SigHash: instance GHC.Internal.Num.Num Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Read.Read Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Read.Read Haskoin.Script.SigHash.SigHashFlag
+ Haskoin.Script.SigHash: instance GHC.Internal.Read.Read Haskoin.Script.SigHash.TxSignature
+ Haskoin.Script.SigHash: instance GHC.Internal.Real.Integral Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Real.Real Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Show.Show Haskoin.Script.SigHash.SigHash
+ Haskoin.Script.SigHash: instance GHC.Internal.Show.Show Haskoin.Script.SigHash.SigHashFlag
+ Haskoin.Script.SigHash: instance GHC.Internal.Show.Show Haskoin.Script.SigHash.TxSignature
+ Haskoin.Script.Standard: PayScript32Hash :: !Hash256 -> ScriptOutput
+ Haskoin.Script.Standard: instance GHC.Internal.Generics.Generic Haskoin.Script.Standard.ScriptInput
+ Haskoin.Script.Standard: instance GHC.Internal.Generics.Generic Haskoin.Script.Standard.ScriptOutput
+ Haskoin.Script.Standard: instance GHC.Internal.Generics.Generic Haskoin.Script.Standard.SimpleInput
+ Haskoin.Script.Standard: instance GHC.Internal.Read.Read Haskoin.Script.Standard.ScriptInput
+ Haskoin.Script.Standard: instance GHC.Internal.Read.Read Haskoin.Script.Standard.ScriptOutput
+ Haskoin.Script.Standard: instance GHC.Internal.Read.Read Haskoin.Script.Standard.SimpleInput
+ Haskoin.Script.Standard: instance GHC.Internal.Show.Show Haskoin.Script.Standard.ScriptInput
+ Haskoin.Script.Standard: instance GHC.Internal.Show.Show Haskoin.Script.Standard.ScriptOutput
+ Haskoin.Script.Standard: instance GHC.Internal.Show.Show Haskoin.Script.Standard.SimpleInput
+ Haskoin.Script.Standard: isPayScript32Hash :: ScriptOutput -> Bool
+ Haskoin.Transaction.Builder.Sign: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Builder.Sign.SigInput
+ Haskoin.Transaction.Builder.Sign: instance GHC.Internal.Read.Read Haskoin.Transaction.Builder.Sign.SigInput
+ Haskoin.Transaction.Builder.Sign: instance GHC.Internal.Show.Show Haskoin.Transaction.Builder.Sign.SigInput
+ Haskoin.Transaction.Common: instance GHC.Internal.Data.String.IsString Haskoin.Transaction.Common.Tx
+ Haskoin.Transaction.Common: instance GHC.Internal.Data.String.IsString Haskoin.Transaction.Common.TxHash
+ Haskoin.Transaction.Common: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Common.OutPoint
+ Haskoin.Transaction.Common: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Common.Tx
+ Haskoin.Transaction.Common: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Common.TxHash
+ Haskoin.Transaction.Common: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Common.TxIn
+ Haskoin.Transaction.Common: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Common.TxOut
+ Haskoin.Transaction.Common: instance GHC.Internal.Read.Read Haskoin.Transaction.Common.OutPoint
+ Haskoin.Transaction.Common: instance GHC.Internal.Read.Read Haskoin.Transaction.Common.Tx
+ Haskoin.Transaction.Common: instance GHC.Internal.Read.Read Haskoin.Transaction.Common.TxHash
+ Haskoin.Transaction.Common: instance GHC.Internal.Read.Read Haskoin.Transaction.Common.TxIn
+ Haskoin.Transaction.Common: instance GHC.Internal.Read.Read Haskoin.Transaction.Common.TxOut
+ Haskoin.Transaction.Common: instance GHC.Internal.Show.Show Haskoin.Transaction.Common.OutPoint
+ Haskoin.Transaction.Common: instance GHC.Internal.Show.Show Haskoin.Transaction.Common.Tx
+ Haskoin.Transaction.Common: instance GHC.Internal.Show.Show Haskoin.Transaction.Common.TxHash
+ Haskoin.Transaction.Common: instance GHC.Internal.Show.Show Haskoin.Transaction.Common.TxIn
+ Haskoin.Transaction.Common: instance GHC.Internal.Show.Show Haskoin.Transaction.Common.TxOut
+ Haskoin.Transaction.Partial: instance GHC.Internal.Base.Monoid Haskoin.Transaction.Partial.PSBTSigner
+ Haskoin.Transaction.Partial: instance GHC.Internal.Base.Monoid Haskoin.Transaction.Partial.UnknownMap
+ Haskoin.Transaction.Partial: instance GHC.Internal.Base.Semigroup Haskoin.Transaction.Partial.PSBTSigner
+ Haskoin.Transaction.Partial: instance GHC.Internal.Base.Semigroup Haskoin.Transaction.Partial.UnknownMap
+ Haskoin.Transaction.Partial: instance GHC.Internal.Enum.Bounded Haskoin.Transaction.Partial.InputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Enum.Bounded Haskoin.Transaction.Partial.OutputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Enum.Enum Haskoin.Transaction.Partial.InputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Enum.Enum Haskoin.Transaction.Partial.OutputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.Input
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.InputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.Key
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.Output
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.OutputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.PSBT
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.PSBTHDPath
+ Haskoin.Transaction.Partial: instance GHC.Internal.Generics.Generic Haskoin.Transaction.Partial.UnknownMap
+ Haskoin.Transaction.Partial: instance GHC.Internal.Read.Read Haskoin.Transaction.Partial.Input
+ Haskoin.Transaction.Partial: instance GHC.Internal.Read.Read Haskoin.Transaction.Partial.Key
+ Haskoin.Transaction.Partial: instance GHC.Internal.Read.Read Haskoin.Transaction.Partial.Output
+ Haskoin.Transaction.Partial: instance GHC.Internal.Read.Read Haskoin.Transaction.Partial.PSBT
+ Haskoin.Transaction.Partial: instance GHC.Internal.Read.Read Haskoin.Transaction.Partial.UnknownMap
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.Input
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.InputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.Key
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.Output
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.OutputType
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.PSBT
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.PSBTHDPath
+ Haskoin.Transaction.Partial: instance GHC.Internal.Show.Show Haskoin.Transaction.Partial.UnknownMap
+ Haskoin.Transaction.Segwit: instance GHC.Internal.Show.Show Haskoin.Transaction.Segwit.WitnessProgramSH
+ Haskoin.Transaction.Taproot: instance GHC.Internal.Read.Read Haskoin.Transaction.Taproot.XOnlyPubKey
+ Haskoin.Transaction.Taproot: instance GHC.Internal.Show.Show Haskoin.Transaction.Taproot.MAST
+ Haskoin.Transaction.Taproot: instance GHC.Internal.Show.Show Haskoin.Transaction.Taproot.XOnlyPubKey
+ Haskoin.Util.Arbitrary.Address: arbitraryBitcoinAddress :: Gen Address
+ Haskoin.Util.Arbitrary.Address: arbitraryBitcoinCashAddress :: Gen Address
+ Haskoin.Util.Arbitrary.Address: arbitraryCashAddress :: Gen Address
+ Haskoin.Util.Arbitrary.Address: arbitraryScript32Address :: Gen Address
+ Haskoin.Util.Arbitrary.Transaction: instance GHC.Internal.Show.Show Haskoin.Util.Arbitrary.Transaction.TestCoin
+ Haskoin.Util.Arbitrary.Util: instance Data.Default.Internal.Default Haskoin.Util.Arbitrary.Util.IdentityTests
+ Haskoin.Util.Arbitrary.Util: instance GHC.Internal.Show.Show Crypto.Secp256k1.Internal.Context.Ctx
- Haskoin.Address: addressToOutput :: Address -> ScriptOutput
+ Haskoin.Address: addressToOutput :: Address -> Maybe ScriptOutput
- Haskoin.Address: addressToScript :: Ctx -> Address -> Script
+ Haskoin.Address: addressToScript :: Ctx -> Address -> Maybe Script
- Haskoin.Address: addressToScriptBS :: Ctx -> Address -> ByteString
+ Haskoin.Address: addressToScriptBS :: Ctx -> Address -> Maybe ByteString
- Haskoin.Util.Arbitrary.Address: arbitraryAddress :: Gen Address
+ Haskoin.Util.Arbitrary.Address: arbitraryAddress :: Network -> Gen Address

Files

CHANGELOG.md view
@@ -5,6 +5,20 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.3.0] - 2026-08-12++### Changed++- Make script and address parsing more strict.+- Use smart constructors for addresses to avoid inconsistent or incorrect represtentations.++### Fixed++- Support Bitcoin Cash 256-bit pay-to-script-hash scripts and addresses.+- Make addresses of incorrect length invalid.+- Avoid decoding scripts as standard when hash or public key length incorrect.+- Fix secp256 library function names.+ ## [1.2.2] - 2025-05-08  ### Changed
haskoin-core.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.38.0.+-- This file has been generated from package.yaml by hpack version 0.39.6. -- -- see: https://github.com/sol/hpack  name:           haskoin-core-version:        1.2.2+version:        1.3.0 synopsis:       Bitcoin & Bitcoin Cash library for Haskell description:    Please see the README on GitHub at <https://github.com/jprupp/haskoin-core#readme> category:       Bitcoin, Finance, Network@@ -48,7 +48,7 @@  source-repository head   type: git-  location: git://github.com/jprupp/haskoin-core.git+  location: https://github.com/jprupp/haskoin-core.git  library   exposed-modules:@@ -121,13 +121,13 @@     , entropy >=0.4.1.5     , hashable >=1.3.0.0     , hspec >=2.7.1-    , memory >=0.15.0     , mtl >=2.2.2     , murmur3 >=1.0.3     , network >=3.1.1.1+    , ram >=0.22.0     , safe >=0.3.18     , scientific >=0.3.6.2-    , secp256k1-haskell >=1.2.0+    , secp256k1-haskell >=1.5.0     , split >=0.2.3.3     , string-conversions >=0.4.0.1     , text >=1.2.3.0@@ -182,13 +182,13 @@     , hspec >=2.7.1     , lens >=4.18.1     , lens-aeson >=1.1-    , memory >=0.15.0     , mtl >=2.2.2     , murmur3 >=1.0.3     , network >=3.1.1.1+    , ram >=0.22.0     , safe >=0.3.18     , scientific >=0.3.6.2-    , secp256k1-haskell >=1.2.0+    , secp256k1-haskell >=1.5.0     , split >=0.2.3.3     , string-conversions >=0.4.0.1     , text >=1.2.3.0
src/Haskoin/Address.hs view
@@ -21,12 +21,33 @@ -- Base58, CashAddr, Bech32 address and WIF private key serialization support. module Haskoin.Address   ( -- * Addresses-    Address (..),+    Address+      ( PubKeyAddress,+        ScriptAddress,+        WitnessAddress,+        WitnessPubKeyAddress,+        WitnessScriptAddress,+        Script32Address,+        CashAddress+      ),     isPubKeyAddress,     isScriptAddress,     isWitnessAddress,     isWitnessPubKeyAddress,     isWitnessScriptAddress,+    isScript32Address,+    isCashAddress,+    pubKeyAddress,+    scriptAddress,+    witnessAddress,+    witnessPubKeyAddress,+    witnessScriptAddress,+    script32Address,+    cashAddress,+    addressHash160,+    addressHash256,+    addressVersion,+    addressBytes,     addrToText,     textToAddr,     bech32ToAddr,@@ -58,7 +79,7 @@ import Control.Applicative (Alternative ((<|>))) import Control.Arrow (second) import Control.DeepSeq (NFData)-import Control.Monad ((<=<))+import Control.Monad (guard, (<=<)) import Crypto.Secp256k1 import Data.Aeson (ToJSON (toJSON), Value, withText) import Data.Aeson.Encoding (Encoding, null_, text)@@ -66,7 +87,7 @@ import Data.Binary (Binary (..)) import Data.ByteString (ByteString) import Data.ByteString qualified as B-import Data.Bytes.Get (MonadGet (getByteString, getWord64be, getWord8), runGetS)+import Data.Bytes.Get (MonadGet (getByteString, getWord64be, getWord8), isEmpty, runGetS) import Data.Bytes.Put (MonadPut (putByteString, putWord64be, putWord8), runPutS) import Data.Bytes.Serial (Serial (..)) import Data.Hashable (Hashable)@@ -93,7 +114,7 @@       { -- | RIPEMD160 hash of public key's SHA256 hash         hash160 :: !Hash160       }-  | -- | pay to script hash+  | -- | pay to script hash (160-bit)     ScriptAddress       { -- | RIPEMD160 hash of script's SHA256 hash         hash160 :: !Hash160@@ -113,9 +134,22 @@       { version :: !Word8,         bytes :: !ByteString       }+  | -- | pay to script hash (256-bit)+    Script32Address+      { -- | HAS256 hash of script+        hash256 :: !Hash256+      }+  | -- | other CashAddr+    CashAddress+      { version :: !Word8,+        bytes :: !ByteString+      }   deriving     (Eq, Ord, Generic, Show, Read, Hashable, NFData) +-- | Binary serialization for 'Address' type is not standard.+-- Do not expect other other software to understand these.+-- Use text format or output scripts for exchange. instance Serial Address where   serialize (PubKeyAddress k) = do     putWord8 0x00@@ -134,6 +168,14 @@     putWord8 v     putWord64be (fromIntegral (B.length d))     putByteString d+  serialize (Script32Address s) = do+    putWord8 0x05+    serialize s+  serialize (CashAddress v d) = do+    putWord8 0x06+    putWord8 v+    putWord64be (fromIntegral (B.length d))+    putByteString d    deserialize =     getWord8 >>= \case@@ -145,6 +187,11 @@         WitnessAddress           <$> getWord8           <*> (getByteString . fromIntegral =<< getWord64be)+      0x05 -> Script32Address <$> deserialize+      0x06 -> do+        CashAddress+          <$> getWord8+          <*> (getByteString . fromIntegral =<< getWord64be)       b ->         fail . T.unpack $           "Could not decode address type byte: "@@ -163,7 +210,7 @@ isPubKeyAddress PubKeyAddress {} = True isPubKeyAddress _ = False --- | 'Address' pays to a script hash.+-- | 'Address' pays to a 160-bit script hash. isScriptAddress :: Address -> Bool isScriptAddress ScriptAddress {} = True isScriptAddress _ = False@@ -174,14 +221,112 @@ isWitnessPubKeyAddress WitnessPubKeyAddress {} = True isWitnessPubKeyAddress _ = False +-- | 'Address' pays to witness script hash. SegWit only. isWitnessScriptAddress :: Address -> Bool isWitnessScriptAddress WitnessScriptAddress {} = True isWitnessScriptAddress _ = False +-- | 'Address' is another type of SegWit address, not covered above. isWitnessAddress :: Address -> Bool isWitnessAddress WitnessAddress {} = True isWitnessAddress _ = False +-- | 'Address' pays to a 256-bit script hash.+isScript32Address :: Address -> Bool+isScript32Address Script32Address {} = True+isScript32Address _ = False++-- | 'Address' is another type of CashAddr, not covered above.+isCashAddress :: Address -> Bool+isCashAddress CashAddress {} = True+isCashAddress _ = False++-- | Smart constructor for P2PKH address.+pubKeyAddress :: Hash160 -> Address+pubKeyAddress = PubKeyAddress++-- | Smart constructor for P2SH address.+scriptAddress :: Hash160 -> Address+scriptAddress = ScriptAddress++-- | Smart constructor for P2WPKH address.+witnessPubKeyAddress :: Hash160 -> Address+witnessPubKeyAddress = WitnessPubKeyAddress++-- | Smart constructor for P2WSH address.+witnessScriptAddress :: Hash256 -> Address+witnessScriptAddress = WitnessScriptAddress++-- | Smart constructor for other SegWit address.+witnessAddress :: Word8 -> ByteString -> Maybe Address+witnessAddress v bs = do+  guard $ v <= 16+  guard $ B.length bs >= 2 && B.length bs <= 40+  case v of+    0 -> case B.length bs of+      20 -> do+        h <- eitherToMaybe $ runGetS deserialize bs+        return $ WitnessPubKeyAddress h+      32 -> do+        h <- eitherToMaybe $ runGetS deserialize bs+        return $ WitnessScriptAddress h+      _ -> Nothing+    _ -> return $ WitnessAddress v bs++-- | Smart constructor for P2SH32 address.+script32Address :: Hash256 -> Address+script32Address = Script32Address++-- | Smart constructor for CashAddr.+cashAddress :: Word8 -> ByteString -> Maybe Address+cashAddress v b = do+  guard $ v < 16+  guard $ B.length b `elem` [20, 24, 28, 32, 40, 48, 56, 64]+  case v of+    0 -> case B.length b of+      20 -> do+        h <- eitherToMaybe $ runGetS deserialize b+        return $ pubKeyAddress h+      _ -> return $ CashAddress v b+    1 -> case B.length b of+      20 -> do+        h <- eitherToMaybe $ runGetS deserialize b+        return $ scriptAddress h+      32 -> do+        h <- eitherToMaybe $ runGetS deserialize b+        return $ script32Address h+      _ -> return $ CashAddress v b+    _ -> return $ CashAddress v b++addressHash160 :: Address -> Maybe Hash160+addressHash160 (PubKeyAddress h) = Just h+addressHash160 (ScriptAddress h) = Just h+addressHash160 (WitnessPubKeyAddress h) = Just h+addressHash160 _ = Nothing++addressHash256 :: Address -> Maybe Hash256+addressHash256 (WitnessScriptAddress h) = Just h+addressHash256 (Script32Address h) = Just h+addressHash256 _ = Nothing++addressVersion :: Address -> Word8+addressVersion (PubKeyAddress _) = 0+addressVersion (ScriptAddress _) = 1+addressVersion (WitnessPubKeyAddress _) = 0+addressVersion (WitnessScriptAddress _) = 0+addressVersion (WitnessAddress v _) = v+addressVersion (Script32Address _) = 1+addressVersion (CashAddress v _) = v++addressBytes :: Address -> ByteString+addressBytes (PubKeyAddress h) = runPutS (serialize h)+addressBytes (ScriptAddress h) = runPutS (serialize h)+addressBytes (WitnessPubKeyAddress h) = runPutS (serialize h)+addressBytes (WitnessScriptAddress h) = runPutS (serialize h)+addressBytes (WitnessAddress _ b) = b+addressBytes (Script32Address h) = runPutS (serialize h)+addressBytes (CashAddress _ b) = runPutS (serialize b)+ instance MarshalJSON Network Address where   marshalValue net a = toJSON (addrToText net a)   marshalEncoding net = maybe null_ text . addrToText net@@ -212,6 +357,16 @@ addrToText net WitnessAddress {version = v, bytes = d} = do   hrp <- net.bech32Prefix   segwitEncode hrp v (B.unpack d)+addrToText net Script32Address {hash256 = h}+  | isNothing net.cashAddrPrefix =+      Nothing+  | otherwise =+      cashAddrEncode net 1 (runPutS $ serialize h)+addrToText net CashAddress {version = v, bytes = h}+  | isNothing net.cashAddrPrefix =+      Nothing+  | otherwise =+      cashAddrEncode net v h  -- | Parse 'Base58', 'Bech32' or 'CashAddr' address, depending on network. textToAddr :: Network -> Text -> Maybe Address@@ -222,9 +377,14 @@ cashToAddr net txt = do   (ver, bs) <- cashAddrDecode net txt   case ver of-    0 -> PubKeyAddress <$> eitherToMaybe (runGetS deserialize bs)-    1 -> ScriptAddress <$> eitherToMaybe (runGetS deserialize bs)-    _ -> Nothing+    0 -> case B.length bs of+      20 -> PubKeyAddress <$> eitherToMaybe (runGetS deserialize bs)+      _ -> return $ CashAddress ver bs+    1 -> case B.length bs of+      20 -> ScriptAddress <$> eitherToMaybe (runGetS deserialize bs)+      32 -> Script32Address <$> eitherToMaybe (runGetS deserialize bs)+      _ -> return $ CashAddress ver bs+    _ -> return $ CashAddress ver bs  bech32ToAddr :: Network -> Text -> Maybe Address bech32ToAddr net txt = do@@ -245,7 +405,9 @@ base58get net = do   pfx <- getWord8   addr <- deserialize-  f pfx addr+  isEmpty >>= \case+    True -> f pfx addr+    False -> fail "Address too long"   where     f x a       | x == net.addrPrefix = return $ PubKeyAddress a@@ -314,22 +476,24 @@  -- | Encode an output script from an address. Will fail if using a -- pay-to-witness address on a non-SegWit network.-addressToOutput :: Address -> ScriptOutput+addressToOutput :: Address -> Maybe ScriptOutput addressToOutput =   \case-    PubKeyAddress h -> PayPKHash h-    ScriptAddress h -> PayScriptHash h-    WitnessPubKeyAddress h -> PayWitnessPKHash h-    WitnessScriptAddress h -> PayWitnessScriptHash h-    WitnessAddress v d -> PayWitness v d+    PubKeyAddress h -> Just (PayPKHash h)+    ScriptAddress h -> Just (PayScriptHash h)+    WitnessPubKeyAddress h -> Just (PayWitnessPKHash h)+    WitnessScriptAddress h -> Just (PayWitnessScriptHash h)+    WitnessAddress v d -> Just (PayWitness v d)+    Script32Address h -> Just (PayScript32Hash h)+    CashAddress v a -> Nothing  -- | Get output script AST for an 'Address'.-addressToScript :: Ctx -> Address -> Script-addressToScript ctx = encodeOutput ctx . addressToOutput+addressToScript :: Ctx -> Address -> Maybe Script+addressToScript ctx addr = encodeOutput ctx <$> addressToOutput addr  -- | Encode address as output script in 'ByteString' form.-addressToScriptBS :: Ctx -> Address -> ByteString-addressToScriptBS ctx = runPutS . serialize . addressToScript ctx+addressToScriptBS :: Ctx -> Address -> Maybe ByteString+addressToScriptBS ctx addr = (runPutS . serialize) <$> addressToScript ctx addr  -- | Decode an output script into an 'Address' if it has such representation. scriptToAddress :: Ctx -> Script -> Either String Address@@ -355,6 +519,7 @@     PayWitnessPKHash h -> Just $ WitnessPubKeyAddress h     PayWitnessScriptHash h -> Just $ WitnessScriptAddress h     PayWitness v d -> Just $ WitnessAddress v d+    PayScript32Hash h -> Just $ Script32Address h     _ -> Nothing  -- | Infer the 'Address' of a 'ScriptInput'.
src/Haskoin/Address/Bech32.hs view
@@ -222,7 +222,7 @@         bits' = bits + frombits         result' =           [ (acc' .>>. b) .&. maxv-            | b <- [bits' - tobits, bits' - 2 * tobits .. 0]+          | b <- [bits' - tobits, bits' - 2 * tobits .. 0]           ]     maxv = (1 .<<. tobits) - 1 {-# INLINE convertBits #-}
src/Haskoin/Address/CashAddr.hs view
@@ -25,6 +25,8 @@     cash32encodeType,     cash32decode,     cash32encode,+    decodeVersionByte,+    encodeVersionByte,   ) where 
src/Haskoin/Block/Headers.hs view
@@ -915,9 +915,9 @@ mineBlock net seed h =   head     [ j-      | i <- (+ seed) <$> [0 .. maxBound],-        let j = h {nonce = i},-        isValidPOW net j+    | i <- (+ seed) <$> [0 .. maxBound],+      let j = h {nonce = i},+      isValidPOW net j     ]  -- | Generate and append new blocks (mining). Only practical in regtest network.
src/Haskoin/Script/Standard.hs view
@@ -30,6 +30,7 @@     isPayWitness,     isPayWitnessPKHash,     isPayWitnessScriptHash,+    isPayScript32Hash,     isDataCarrier,     encodeOutput,     decodeOutput,@@ -98,6 +99,8 @@       { version :: !Word8,         bytes :: !ByteString       }+  | -- | pay to a script hash (256-bit)+    PayScript32Hash {hash256 :: !Hash256}   | -- | provably unspendable data carrier     DataCarrier {bytes :: !ByteString}   deriving (Eq, Show, Read, Generic, NFData)@@ -148,6 +151,11 @@ isPayWitness (PayWitness _ _) = True isPayWitness _ = False +-- | Is script paying to 256-bit script hash?+isPayScript32Hash :: ScriptOutput -> Bool+isPayScript32Hash (PayScript32Hash _) = True+isPayScript32Hash _ = False+ -- | Is script a data carrier output? isDataCarrier :: ScriptOutput -> Bool isDataCarrier (DataCarrier _) = True@@ -158,24 +166,37 @@ decodeOutput :: Ctx -> Script -> Either String ScriptOutput decodeOutput ctx s = case s.ops of   -- Pay to PubKey-  [OP_PUSHDATA bs _, OP_CHECKSIG] ->-    PayPK <$> unmarshal ctx bs+  [OP_PUSHDATA bs _, OP_CHECKSIG]+    | B.length bs == 33 || B.length bs == 65 ->+        PayPK <$> unmarshal ctx bs+    | otherwise ->+        Left "decodeOutput: public key must be 33 or 65 bytes long"   -- Pay to PubKey Hash-  [OP_DUP, OP_HASH160, OP_PUSHDATA bs _, OP_EQUALVERIFY, OP_CHECKSIG] ->-    PayPKHash <$> runGetS deserialize bs+  [OP_DUP, OP_HASH160, OP_PUSHDATA bs _, OP_EQUALVERIFY, OP_CHECKSIG]+    | B.length bs == 20 ->+        PayPKHash <$> runGetS deserialize bs+    | otherwise ->+        Left "decodeOutput: public key hash must be 20 bytes long"   -- Pay to Script Hash-  [OP_HASH160, OP_PUSHDATA bs _, OP_EQUAL] ->-    PayScriptHash <$> runGetS deserialize bs+  [OP_HASH160, OP_PUSHDATA bs _, OP_EQUAL]+    | B.length bs == 20 ->+        PayScriptHash <$> runGetS deserialize bs+    | otherwise ->+        Left "decodeOutput: script hash must be 20 bytes long"+  -- Pay to 256-bit Script Hash+  [OP_HASH256, OP_PUSHDATA bs _, OP_EQUAL]+    | B.length bs == 32 ->+        PayScript32Hash <$> runGetS deserialize bs+    | otherwise ->+        Left "decodeOutput: script hash must be 32 bytes long"   -- Pay to Witness   [OP_0, OP_PUSHDATA bs OPCODE]     | B.length bs == 20 ->         PayWitnessPKHash <$> runGetS deserialize bs     | B.length bs == 32 ->         PayWitnessScriptHash <$> runGetS deserialize bs-    | B.length bs /= 20 && B.length bs /= 32 ->-        Left-          "decodeOutput: invalid version 0 segwit \-          \(must be 20 or 32 bytes)"+    | otherwise ->+        Left "decodeOutput: version 0 segwit must be 20 or 32 bytes long"   -- Other Witness   [ver, OP_PUSHDATA bs _]     | Just wv <- opWitnessVersion ver,@@ -293,8 +314,11 @@       else Left "matchPayMulSig: Invalid M or N parameters"   _ -> Left "matchPayMulSig: script did not match output template"   where-    go (OP_PUSHDATA bs _ : xs) =-      liftM2 (:) (unmarshal ctx bs) (go xs)+    go (OP_PUSHDATA bs _ : xs)+      | B.length bs == 33 || B.length bs == 65 =+          liftM2 (:) (unmarshal ctx bs) (go xs)+      | otherwise =+          Left "matchPayMulSig: public key must be 33 or 65 bytes long"     go [] =       Right []     go _ =
src/Haskoin/Transaction/Builder.hs view
@@ -210,11 +210,9 @@           -- We have reached the goal using this coin           if val + aTot >= goal (length acc + 1)             then -- If we want to continue searching for better solutions-               if continue                 then -- This solution is the first one or                 -- This solution is better than the previous one-                   if pTot == 0 || val + aTot < pTot                     then -- Continue searching for better solutions in the stream                       go [] 0 (coin : acc) (val + aTot)@@ -222,7 +220,6 @@                     -- solution                       return $ Just (ps, pTot - goal (length ps))                 else -- Otherwise, return this solution-                   return $                     Just (coin : acc, val + aTot - goal (length acc + 1))             else -- We have not yet reached the goal. Add the coin to the@@ -338,7 +335,7 @@     f (aTxt, v) =       maybeToEither ("buildAddrTx: Invalid address " <> cs aTxt) $ do         a <- textToAddr net aTxt-        let o = addressToOutput a+        o <- addressToOutput a         return (o, v)  -- | Build a transaction by providing a list of outpoints as inputs
src/Haskoin/Transaction/Builder/Sign.hs view
@@ -60,16 +60,12 @@ -- script is required. data SigInput = SigInput   { -- | output script to spend-    -- ^ output script value     script :: !ScriptOutput,     -- | output script value-    -- ^ outpoint to spend     value :: !Word64,     -- | outpoint to spend-    -- ^ signature type     outpoint :: !OutPoint,     -- | signature type-    -- ^ redeem script     sighash :: !SigHash,     -- | redeem script     redeem :: !(Maybe RedeemScript)@@ -85,7 +81,7 @@         "sighash" .= h       ]         ++ [ "redeem" .= marshalValue ctx r-             | r <- maybeToList r+           | r <- maybeToList r            ]    marshalEncoding ctx (SigInput s v o h r) =@@ -217,13 +213,13 @@   where     zipKeys =       [ (prv, pub)-        | k <- keys,-          t <- [True, False],-          let prv = wrapSecKey t k,-          let pub = derivePublicKey ctx prv+      | k <- keys,+        t <- [True, False],+        let prv = wrapSecKey t k,+        let pub = derivePublicKey ctx prv       ]     keyByHash h = fmap fst . maybeToList . findKey h $ zipKeys-    findKey h = find $ (== h) . (.hash160) . pubKeyAddr ctx . snd+    findKey h = find $ (== Just h) . addressHash160 . pubKeyAddr ctx . snd  -- | Construct an input for a transaction given a signature, public key and data -- about the previous output.
src/Haskoin/Transaction/Partial.hs view
@@ -74,7 +74,7 @@ import Data.String.Conversions (cs) import GHC.Generics (Generic) import GHC.Word (Word32, Word8)-import Haskoin.Address (Address (..), pubKeyAddr)+import Haskoin.Address (Address, pubKeyAddr, pubKeyAddress) import Haskoin.Crypto.Keys.Common import Haskoin.Crypto.Keys.Extended import Haskoin.Network.Common@@ -410,7 +410,7 @@     } completeSig ctx input (PayPKHash h)   | [(k, sig)] <- HashMap.toList input.partialSigs,-    PubKeyAddress h == pubKeyAddr ctx k =+    pubKeyAddress h == pubKeyAddr ctx k =       input         { finalScriptSig =             Just $@@ -442,7 +442,7 @@     scriptAppend (Script script1) (Script script2) = Script $ script1 <> script2 completeSig ctx input (PayWitnessPKHash h)   | [(k, sig)] <- HashMap.toList input.partialSigs,-    PubKeyAddress h == pubKeyAddr ctx k =+    pubKeyAddress h == pubKeyAddr ctx k =       input {finalScriptWitness = Just [sig, marshal ctx k]} completeSig ctx input (PayWitnessScriptHash h)   | Just witScript <- input.inputWitnessScript,
src/Haskoin/Util/Arbitrary/Address.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE OverloadedRecordDot #-} {-# LANGUAGE TupleSections #-}  -- |@@ -10,6 +12,7 @@ module Haskoin.Util.Arbitrary.Address where  import qualified Data.ByteString as B+import Data.Maybe (isJust) import Haskoin.Address import Haskoin.Network.Constants import Haskoin.Network.Data@@ -18,12 +21,18 @@ import Test.QuickCheck  -- | Arbitrary pay-to-public-key-hash or pay-to-script-hash address.-arbitraryAddress :: Gen Address-arbitraryAddress = oneof [arbitraryPubKeyAddress, arbitraryScriptAddress]+arbitraryBitcoinCashAddress :: Gen Address+arbitraryBitcoinCashAddress =+  oneof+    [ arbitraryPubKeyAddress,+      arbitraryScriptAddress,+      arbitraryScript32Address,+      arbitraryCashAddress+    ]  -- | Arbitrary address including pay-to-witness-arbitraryAddressAll :: Gen Address-arbitraryAddressAll =+arbitraryBitcoinAddress :: Gen Address+arbitraryBitcoinAddress =   oneof     [ arbitraryPubKeyAddress,       arbitraryScriptAddress,@@ -32,29 +41,34 @@       arbitraryWitnessAddress     ] +arbitraryAddress :: Network -> Gen Address+arbitraryAddress net =+  if isJust net.cashAddrPrefix+    then arbitraryBitcoinCashAddress+    else arbitraryBitcoinAddress+ -- | Arbitrary valid combination of (Network, Address) arbitraryNetAddress :: Gen (Network, Address) arbitraryNetAddress = do   net <- arbitraryNetwork-  if net `elem` [bch, bchTest, bchTest4, bchRegTest]-    then (net,) <$> arbitraryAddress-    else (net,) <$> arbitraryAddressAll+  addr <- arbitraryAddress net+  return (net, addr)  -- | Arbitrary pay-to-public-key-hash address. arbitraryPubKeyAddress :: Gen Address-arbitraryPubKeyAddress = PubKeyAddress <$> arbitraryHash160+arbitraryPubKeyAddress = pubKeyAddress <$> arbitraryHash160  -- | Arbitrary pay-to-script-hash address. arbitraryScriptAddress :: Gen Address-arbitraryScriptAddress = ScriptAddress <$> arbitraryHash160+arbitraryScriptAddress = scriptAddress <$> arbitraryHash160  -- | Arbitrary pay-to-witness public key hash arbitraryWitnessPubKeyAddress :: Gen Address-arbitraryWitnessPubKeyAddress = WitnessPubKeyAddress <$> arbitraryHash160+arbitraryWitnessPubKeyAddress = witnessPubKeyAddress <$> arbitraryHash160  -- | Arbitrary pay-to-witness script hash arbitraryWitnessScriptAddress :: Gen Address-arbitraryWitnessScriptAddress = WitnessPubKeyAddress <$> arbitraryHash160+arbitraryWitnessScriptAddress = witnessPubKeyAddress <$> arbitraryHash160  arbitraryWitnessAddress :: Gen Address arbitraryWitnessAddress = do@@ -62,4 +76,20 @@   len <- choose (2, 40)   ws <- vectorOf len arbitrary   let bs = B.pack ws-  return $ WitnessAddress ver bs+  case witnessAddress ver bs of+    Just a -> return a+    Nothing -> error "Error generating arbitrary WitnessAddress"++arbitraryScript32Address :: Gen Address+arbitraryScript32Address = script32Address <$> arbitraryHash256++arbitraryCashAddress :: Gen Address+arbitraryCashAddress = do+  ver <- choose (0, 15)+  len <- choose (0, 7)+  let lbs = [20, 24, 28, 32, 40, 48, 56, 64] !! len+  ws <- vectorOf lbs arbitrary+  let bs = B.pack ws+  case cashAddress ver bs of+    Just a -> return a+    Nothing -> error "Error generating arbitrary CashAddress"
src/Haskoin/Util/Arbitrary/Script.hs view
@@ -317,7 +317,11 @@  -- | Arbitrary 'ScriptOutput' of type 'PayScriptHash'. arbitrarySHOutput :: Gen ScriptOutput-arbitrarySHOutput = PayScriptHash . (.hash160) <$> arbitraryScriptAddress+arbitrarySHOutput = do+  address <- arbitraryScriptAddress+  case addressHash160 address of+    Just h -> return $ PayScriptHash h+    Nothing -> error "Could not get Hash160 from address"  -- | Arbitrary 'ScriptOutput' of type 'DataCarrier'. arbitraryDCOutput :: Gen ScriptOutput
src/Haskoin/Util/Arbitrary/Transaction.hs view
@@ -15,6 +15,7 @@ import Data.ByteString qualified as BS import Data.Either (fromRight) import Data.List (nub, nubBy, permutations)+import Data.Maybe (fromMaybe) import Data.Word (Word64) import Haskoin.Address import Haskoin.Crypto (Ctx)@@ -158,7 +159,9 @@ arbitraryAnyInput net ctx pkh = do   (k, p) <- arbitraryKeyPair ctx   let out-        | pkh = PayPKHash (pubKeyAddr ctx p).hash160+        | pkh = case addressHash160 (pubKeyAddr ctx p) of+            Just h -> PayPKHash h+            Nothing -> error "Could not get Hash160 from address"         | otherwise = PayPK p   (val, op, sh) <- arbitraryInputStuff net   return (SigInput out val op sh Nothing, k)@@ -192,14 +195,18 @@         wrapKey <$> arbitraryPKHashSigInput net ctx,         arbitraryMSSigInput net ctx       ]-  let out = PayScriptHash (payToScriptAddress ctx rdm).hash160+  let out = case addressHash160 (payToScriptAddress ctx rdm) of+        Just h -> PayScriptHash h+        Nothing -> error "Could not get Hash160 from address"   return (SigInput out val op sh $ Just rdm, ks)  arbitraryWPKHSigInput :: Network -> Ctx -> Gen (SigInput, PrivateKey) arbitraryWPKHSigInput net ctx = do   (k, p) <- arbitraryKeyPair ctx   (val, op, sh) <- arbitraryInputStuff net-  let out = PayWitnessPKHash (pubKeyAddr ctx p).hash160+  let out = case addressHash160 (pubKeyAddr ctx p) of+        Just h -> PayWitnessPKHash h+        Nothing -> error "Could not get Hash160 from address"   return (SigInput out val op sh Nothing, k)  arbitraryWSHSigInput :: Network -> Ctx -> Gen (SigInput, [PrivateKey])@@ -210,7 +217,9 @@         wrapKey <$> arbitraryPKHashSigInput net ctx,         arbitraryMSSigInput net ctx       ]-  let out = PayWitnessScriptHash (payToWitnessScriptAddress ctx rdm).hash256+  let out = case addressHash256 (payToWitnessScriptAddress ctx rdm) of+        Just h -> PayWitnessScriptHash h+        Nothing -> error "Could not get Hash256 from address"   return (SigInput out val op sh $ Just rdm, ks)  -- | Arbitrary 'Tx' (empty 'TxIn'), 'SigInputs' and private keys that can be@@ -268,9 +277,13 @@       let pubKeys = map snd keys           prvKeys = take nPrv $ permutations (map fst keys) !! perm       let so = PayMulSig pubKeys m+      let h =+            fromMaybe+              (error "Could not get Hash160 from address")+              (addressHash160 (payToScriptAddress ctx so))       elements         [ (so, val, Nothing, prvKeys, m, n),-          ( PayScriptHash (payToScriptAddress ctx so).hash160,+          ( PayScriptHash h,             val,             Just so,             prvKeys,
src/Haskoin/Util/Arbitrary/Util.hs view
@@ -232,17 +232,16 @@ testMarshalJson gen = do   prop ("MarshalJSON marshalValue/unmarshalValue identity for " <> name) $     forAll gen $-      \(s, a) -> a `shouldSatisfy` marshalJsonID s+      \(s, a) -> val s a `shouldBe` Just a   prop ("MarshalJSON marshalEncoding/unmarshalValue identity for " <> name) $     forAll gen $-      \(s, a) -> a `shouldSatisfy` marshalEncodingID s+      \(s, a) -> enc s a `shouldBe` Just a   where     name = show $ T.typeRep $ proxy gen     proxy :: Gen (s, a) -> Proxy a     proxy = const Proxy-    marshalJsonID s a =-      A.parseMaybe (unmarshalValue s) (marshalValue s a) == Just a-    marshalEncodingID s a = unmarshalJSON s (marshalJSON s a) == Just a+    val s a = A.parseMaybe (unmarshalValue s) (marshalValue s a)+    enc s a = unmarshalJSON s (marshalJSON s a)  toMap :: a -> Map.Map String a toMap = Map.singleton "object"
test/Haskoin/AddressSpec.hs view
@@ -3,6 +3,7 @@  module Haskoin.AddressSpec (spec) where +import Control.Monad import Data.ByteString (ByteString) import Data.ByteString qualified as B import Data.Default (def)@@ -20,30 +21,31 @@ import Test.Hspec.QuickCheck import Test.QuickCheck -identityTests :: IdentityTests-identityTests =+identityTests :: Network -> IdentityTests+identityTests net =   def-    { readTests = [ReadBox arbitraryAddressAll],-      serialTests = [SerialBox arbitraryAddressAll],+    { readTests = [ReadBox (arbitraryAddress net)],+      serialTests = [SerialBox (arbitraryAddress net)],       marshalJsonTests = [MarshalJsonBox arbitraryNetAddress]     }  spec :: Spec spec = prepareContext $ \ctx -> do-  testIdentity identityTests+  forM_ allNets $ \net -> testIdentity $ identityTests net   describe "Address properties" $ do     prop "encodes and decodes base58 bytestring" $       forAll arbitraryBS $ \bs ->-        decodeBase58 (encodeBase58 bs) == Just bs+        decodeBase58 (encodeBase58 bs) `shouldBe` Just bs     prop "encodes and decodes base58 bytestring with checksum" $       forAll arbitraryBS $ \bs ->-        decodeBase58Check (encodeBase58Check bs) == Just bs+        decodeBase58Check (encodeBase58Check bs) `shouldBe` Just bs     prop "textToAddr . addrToText identity" $       forAll arbitraryNetAddress $ \(net, a) ->-        (textToAddr net =<< addrToText net a) == Just a+        (textToAddr net =<< addrToText net a) `shouldBe` Just a     prop "outputAddress . addressToOutput identity" $-      forAll arbitraryAddress $ \a ->-        outputAddress ctx (addressToOutput a) == Just a+      forAll arbitraryNetAddress $ \(net, a) ->+        not (isCashAddress a) ==>+          (outputAddress ctx =<< addressToOutput a) `shouldBe` Just a   describe "Address vectors" $ do     it "Passes Base58 vectors 1" $       mapM_ testVector vectors
test/Haskoin/Crypto/KeysSpec.hs view
@@ -139,7 +139,8 @@   | otherwise = do       -- Test Addr to Script       let addrM = textToAddr net a-          scriptM = encodeHex . marshal ctx . addressToOutput <$> addrM+          outputM = addressToOutput =<< addrM+          scriptM = encodeHex . marshal ctx <$> outputM       assertBool ("Valid Address " <> cs a) $ isJust addrM       assertEqual "Address matches payload" (Just payload) scriptM       let pubAsWifM = fromWif net a@@ -210,7 +211,7 @@ sigMsg :: [B.ByteString] sigMsg =   [ mconcat ["Very secret message ", C.pack (show (i :: Int)), ": 11"]-    | i <- [0 .. 15]+  | i <- [0 .. 15]   ]  testSignature :: Ctx -> Hash256 -> Assertion
test/Haskoin/Crypto/SignatureSpec.hs view
@@ -250,7 +250,7 @@         "619c335025c7f4012e556c2a58b2506e30b8511b53ade95ea316fd8c3286feb9"     [op0, op1] = (.outpoint) <$> unsignedTx.inputs     sigIn0 = SigInput (PayPK pubKey0) 625000000 op0 sigHashAll Nothing-    WitnessPubKeyAddress h = pubKeyWitnessAddr ctx $ toPubKey ctx key1+    Just h = addressHash160 . pubKeyWitnessAddr ctx $ toPubKey ctx key1     sigIn1 = SigInput (PayWitnessPKHash h) 600000000 op1 sigHashAll Nothing     generatedSignedTx = signTx btc ctx unsignedTx [sigIn0, sigIn1] [key0, key1] @@ -291,7 +291,7 @@       secHexKey         "eb696a065ef48a2192da5b28b694f87544b30fae8327c4510137a922f32c6dcf"     op0 = (head unsignedTx.inputs).outpoint-    WitnessPubKeyAddress h = pubKeyWitnessAddr ctx $ toPubKey ctx key0+    Just h = addressHash160 . pubKeyWitnessAddr ctx $ toPubKey ctx key0     sigIn0 = SigInput (PayWitnessPKHash h) 1000000000 op0 sigHashAll Nothing     generatedSignedTx = signNestedWitnessTx btc ctx unsignedTx [sigIn0] [key0] 
test/Haskoin/NetworkSpec.hs view
@@ -101,7 +101,7 @@   where     f0 = bloomCreate 2 0.001 0 BloomUpdateAll     f1 = bloomInsert f0 $ marshal ctx p-    f2 = bloomInsert f1 $ runPutS $ serialize (pubKeyAddr ctx p).hash160+    f2 = bloomInsert f1 $ runPutS $ serialize $ fromJust $ addressHash160 $ pubKeyAddr ctx p     k = fromJust $ fromWif btc "5Kg1gnAjaLfKiwhhPpGS3QfRg2m6awQvaj98JCZBZQ5SuS2F15C"     p = derivePublicKey ctx k     bs = fromJust $ decodeHex "038fc16b080000000000000001"
test/Haskoin/Transaction/PartialSpec.hs view
@@ -400,7 +400,7 @@     prevTx =       testUtxo [prevOut]     prevOutScript =-      addressToScript ctx (pubKeyAddr ctx pubKey)+      fromJust $ addressToScript ctx (pubKeyAddr ctx pubKey)     prevOut =       TxOut         { value = 200000000,
test/Haskoin/TransactionSpec.hs view
@@ -72,9 +72,8 @@       forAll arbitraryTxHash $         \h -> fromString (cs $ txHashToHex h) == h     prop "building address tx" $-      forAll arbitraryNetwork $ \net ->-        forAll arbitraryAddress $-          forAll (arbitrarySatoshi net) . testBuildAddrTx net ctx+      forAll arbitraryNetAddress $ \(net, addr) ->+        forAll (arbitrarySatoshi net) $ testBuildAddrTx net ctx addr     prop "guess transaction size" $       forAll arbitraryNetwork $ \net ->         forAll (arbitraryAddrOnlyTxFull net ctx) (testGuessSize net ctx)@@ -226,11 +225,11 @@  -- Transaction Properties -- -testBuildAddrTx :: Network -> Ctx -> Address -> TestCoin -> Bool+testBuildAddrTx :: Network -> Ctx -> Address -> TestCoin -> IO () testBuildAddrTx net ctx a (TestCoin v)-  | isPubKeyAddress a = PayPKHash a.hash160 == out-  | isScriptAddress a = PayScriptHash a.hash160 == out-  | otherwise = undefined+  | isPubKeyAddress a = (PayPKHash <$> addressHash160 a) `shouldBe` Just out+  | isScriptAddress a = (PayScriptHash <$> addressHash160 a) `shouldBe` Just out+  | otherwise = discard   where     out = either error id $ do       tx <- buildAddrTx net ctx [] [(fromJust (addrToText net a), v)]