packages feed

haskoin-core 0.9.2 → 0.9.3

raw patch · 5 files changed

+50/−12 lines, 5 files

Files

CHANGELOG.md view
@@ -4,6 +4,10 @@ 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). +## 0.9.3+### Added+- Some support for P2WPKH-over-P2SH addresses.+ ## 0.9.2 ### Removed - Disable unnecessary `-O2` optimisation added in previous version.
haskoin-core.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: f8c182a15da9f3c4eb348dd84d0794720d0b89acf7981b7a317785f2e4196c96+-- hash: 02eeb8fb9ab57329c99198da0834bf37562983ad0cae7f6b3185fa6d95dc919b  name:           haskoin-core-version:        0.9.2+version:        0.9.3 synopsis:       Bitcoin & Bitcoin Cash library for Haskell description:    Haskoin Core is a complete Bitcoin and Bitcoin Cash library of functions and data types for Haskell developers. category:       Bitcoin, Finance, Network
src/Network/Haskoin/Address.hs view
@@ -24,6 +24,7 @@     , addrFromJSON     , pubKeyAddr     , pubKeyWitnessAddr+    , pubKeyWitnessP2SHAddr     , p2pkhAddr     , p2wpkhAddr     , p2shAddr@@ -196,6 +197,12 @@ -- | Obtain a P2WPKH address from a public key. Only on SegWit networks. pubKeyWitnessAddr :: PubKeyI -> Address pubKeyWitnessAddr = WitnessPubKeyAddress . addressHash . S.encode++-- | Obtain a W2WPKH P2SH address. Only on SegWit networks.+pubKeyWitnessP2SHAddr :: PubKeyI -> Address+pubKeyWitnessP2SHAddr =+    p2shAddr .+    addressHash . encodeOutputBS . PayWitnessPKHash . addressHash . S.encode  -- | Obtain a P2WPKH address from a 'Hash160'. p2wpkhAddr :: Hash160 -> Address
src/Network/Haskoin/Keys/Extended.hs view
@@ -310,6 +310,12 @@ xPubAddr :: XPubKey -> Address xPubAddr xkey = pubKeyAddr (wrapPubKey True (xPubKey xkey)) +xPubWitnessAddr :: XPubKey -> Address+xPubWitnessAddr xkey = pubKeyWitnessAddr (wrapPubKey True (xPubKey xkey))++xPubWitnessP2SHAddr :: XPubKey -> Address+xPubWitnessP2SHAddr xkey = pubKeyWitnessP2SHAddr (wrapPubKey True (xPubKey xkey))+ -- | Exports an extended private key to the BIP32 key export format ('Base58'). xPrvExport :: Network -> XPrvKey -> Base58 xPrvExport net = encodeBase58Check . runPut . putXPrvKey net
test/Network/Haskoin/AddressSpec.hs view
@@ -5,27 +5,32 @@ import           Data.Aeson.Types import           Data.ByteString                (ByteString) import qualified Data.ByteString                as BS (append, empty, pack)+import           Data.Either                    (isRight)+import           Data.Maybe                     (isJust, fromJust)+import qualified Data.Serialize                 as S import           Data.Text                      (Text) import           Network.Haskoin.Address import           Network.Haskoin.Address.Base58 import           Network.Haskoin.Constants+import           Network.Haskoin.Keys           (derivePubKeyI) import           Network.Haskoin.Test import           Test.Hspec-import           Test.HUnit                     (Assertion, assertBool)+import           Test.HUnit                     (Assertion, assertBool,+                                                 assertEqual) import           Test.QuickCheck  spec :: Spec spec = do     let net = btc-    describe "btc address" $-        it "base58 encodings" $ mapM_ runVector vectors+    describe "btc address" . it "base58 encodings" $ mapM_ runVector vectors     describe "btc-test address" $ props btcTest     describe "bch address" $ props bch     describe "bch-test address" $ props bchTest     describe "bch-regtest address" $ props bchRegTest-    describe "json serialization" $-        it "encodes and decodes address" $-            forAll arbitraryAddress (testCustom (addrFromJSON net) (addrToJSON net))+    describe "json serialization" . it "encodes and decodes address" $+        forAll arbitraryAddress (testCustom (addrFromJSON net) (addrToJSON net))+    describe "witness address vectors" . it "p2sh(pwpkh)" $+        mapM_ testCompatWitness compatWitnessVectors  props :: Network -> Spec props net = do@@ -45,10 +50,10 @@  runVector :: (ByteString, Text, Text) -> Assertion runVector (bs, e, chk) = do-    assertBool "encodeBase58" $ e == b58-    assertBool "encodeBase58Check" $ chk == b58Chk-    assertBool "decodeBase58" $ Just bs == decodeBase58 b58-    assertBool "decodeBase58Check" $ Just bs == decodeBase58Check b58Chk+    assertEqual "encodeBase58" e b58+    assertEqual "encodeBase58Check" chk b58Chk+    assertEqual "decodeBase58" (Just bs) (decodeBase58 b58)+    assertEqual "decodeBase58Check" (Just bs) (decodeBase58Check b58Chk)   where     b58    = encodeBase58 bs     b58Chk = encodeBase58Check bs@@ -68,3 +73,19 @@  testCustom :: Eq a => (Value -> Parser a) -> (a -> Value) -> a -> Bool testCustom f g x = parseMaybe f (g x) == Just x++compatWitnessVectors :: [(Network, Text, Text)]+compatWitnessVectors =+    [ ( btcTest+      , "cNUnpYpMsJXYCERYBciJnsWBpcYEFjdcbq6dxj4SskGhs7uHuJ7Q"+      , "2N6PDTueBHvXzW61B4oe5SW1D3v2Z3Vpbvw")+    ]++testCompatWitness :: (Network, Text, Text) -> Assertion+testCompatWitness (net, seckey, addr) = do+    let seckeyM = fromWif net seckey+    assertBool "decode seckey" (isJust seckeyM)+    let pubkey = derivePubKeyI (fromJust seckeyM)+    let addrM = addrToString btcTest (pubKeyWitnessP2SHAddr pubkey)+    assertBool "address can be encoded" (isJust addrM)+    assertEqual "witness address matches" addr (fromJust addrM)