diff --git a/CHANGELOG.md b/CHANGELOG.md index f339b8c..9646ccd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Rearranged modules for cleaner dependencies. - Upgrade to Haskell LTS 21.6 ## [0.1.0] - 2023-06-14 diff --git a/src/ZcashHaskell/Types.hs b/src/ZcashHaskell/Types.hs index 03d7d13..f03eaab 100644 --- a/src/ZcashHaskell/Types.hs +++ b/src/ZcashHaskell/Types.hs @@ -97,12 +97,12 @@ instance FromJSON ShieldedOutput where p <- obj .: "proof" pure $ ShieldedOutput - (C.pack cv) - (C.pack cmu) - (C.pack ephKey) - (C.pack encText) - (C.pack outText) - (C.pack p) + (decodeHexText cv) + (decodeHexText cmu) + (decodeHexText ephKey) + (decodeHexText encText) + (decodeHexText outText) + (decodeHexText p) -- * Orchard -- | Type to represent a Unified Full Viewing Key @@ -144,14 +144,14 @@ instance FromJSON OrchardAction where a <- obj .: "spendAuthSig" pure $ OrchardAction - (C.pack n) - (C.pack r) - (C.pack c) - (C.pack ephKey) - (C.pack encText) - (C.pack outText) - (C.pack cval) - (C.pack a) + (decodeHexText n) + (decodeHexText r) + (decodeHexText c) + (decodeHexText ephKey) + (decodeHexText encText) + (decodeHexText outText) + (decodeHexText cval) + (decodeHexText a) -- | Type to represent a decoded Orchard Action data OrchardDecodedAction = OrchardDecodedAction @@ -162,3 +162,15 @@ data OrchardDecodedAction = OrchardDecodedAction deriving anyclass (SOP.Generic, SOP.HasDatatypeInfo) deriving anyclass (Data.Structured.Show) deriving (BorshSize, ToBorsh, FromBorsh) via AsStruct OrchardDecodedAction + +-- * Helpers +-- | Helper function to turn a hex-encoded string to bytestring +decodeHexText :: String -> BS.ByteString +decodeHexText h = BS.pack $ hexRead h + where + hexRead hexText + | null chunk = [] + | otherwise = + fromIntegral (read ("0x" <> chunk)) : hexRead (drop 2 hexText) + where + chunk = take 2 hexText diff --git a/src/ZcashHaskell/Utils.hs b/src/ZcashHaskell/Utils.hs index c56a368..5f9362b 100644 --- a/src/ZcashHaskell/Utils.hs +++ b/src/ZcashHaskell/Utils.hs @@ -16,22 +16,10 @@ import C.Zcash , rustWrapperF4Jumble , rustWrapperF4UnJumble ) - import qualified Data.ByteString as BS import Foreign.Rust.Marshall.Variable import ZcashHaskell.Types --- | Helper function to turn a hex-encoded string to bytestring -decodeHexText :: String -> BS.ByteString -decodeHexText h = BS.pack $ hexRead h - where - hexRead hexText - | null chunk = [] - | otherwise = - fromIntegral (read ("0x" <> chunk)) : hexRead (drop 2 hexText) - where - chunk = take 2 hexText - -- | Decode the given bytestring using Bech32 decodeBech32 :: BS.ByteString -> RawData decodeBech32 = withPureBorshVarBuffer . rustWrapperBech32Decode diff --git a/test/Spec.hs b/test/Spec.hs index 36def01..a9999b9 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -23,6 +23,7 @@ import ZcashHaskell.Types , RawTxResponse(..) , ShieldedOutput(s_cmu) , UnifiedFullViewingKey(..) + , decodeHexText ) import ZcashHaskell.Utils @@ -309,6 +310,10 @@ main = do let fakeUvk = "uview1u83changinga987bundchofch4ract3r5x8hqsw6vzw63n24atxpcatws82z092kryazuu6d7rayyut8m36wm4wpjy2z8r9hj48fx5pf49gw4sjrq8503qpz3vqj5hg0vg9vsqeasg5qjuyh94uyfm7v76udqcm2m0wfc25hcyqswcn56xxduq3xkgxkr0l73cjy88fdvf90eq5fda9g6x7yv7d0uckpevxg6540wc76xrc4axxvlt03ptaa2a0rektglmdy68656f3uzcdgqqyu0t7wk5cvwghyyvgqc0rp3vgu5ye4nd236ml57rjh083a2755qemf6dk6pw0qrnfm7246s8eg2hhzkzpf9h73chhng7xhmyem2sjh8rs2m9nhfcslsgenm" decodeUfvk fakeUvk `shouldBe` Nothing + describe "Decode Sapling tx" $ do + let svk = + "zxviews1qvapd723qqqqpqq09ldgykvyusthmkky2w062esx5xg3nz4m29qxcvndyx6grrhrdepu4ns88sjr3u6mfp2hhwj5hfd6y24r0f64uwq65vjrmsh9mr568kenk33fcumag6djcjywkm5v295egjuk3qdd47atprs0j33nhaaqep3uqspzp5kg4mthugvug0sc3gc83atkrgmguw9g7gkvh82tugrntf66lnvyeh6ufh4j2xt0xr2r4zujtm3qvrmd3vvnulycuwqtetg2jk384" + it "succeeds with correct key" pending describe "Decode Orchard tx" $ do let uvk = "uview1u833rp8yykd7h4druwht6xp6k8krle45fx8hqsw6vzw63n24atxpcatws82z092kryazuu6d7rayyut8m36wm4wpjy2z8r9hj48fx5pf49gw4sjrq8503qpz3vqj5hg0vg9vsqeasg5qjuyh94uyfm7v76udqcm2m0wfc25hcyqswcn56xxduq3xkgxkr0l73cjy88fdvf90eq5fda9g6x7yv7d0uckpevxg6540wc76xrc4axxvlt03ptaa2a0rektglmdy68656f3uzcdgqqyu0t7wk5cvwghyyvgqc0rp3vgu5ye4nd236ml57rjh083a2755qemf6dk6pw0qrnfm7246s8eg2hhzkzpf9h73chhng7xhmyem2sjh8rs2m9nhfcslsgenm"