Implement initial changes for ZIP-320 Rev1

This commit is contained in:
Rene Vergara 2024-03-08 13:35:37 -06:00
parent 6e31d83963
commit 9c4e26c9f2
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
2 changed files with 20 additions and 13 deletions

View file

@ -76,8 +76,12 @@ isValidUnifiedAddress str =
makeUA x =
UnifiedAddress
whichNet
(raw_o x)
(raw_s x)
(if BS.length (raw_o x) == 43
then Just (raw_o x)
else Nothing)
(if BS.length (raw_s x) == 43
then Just (raw_s x)
else Nothing)
(if not (BS.null (raw_t x))
then Just $ TransparentAddress P2PKH whichNet (raw_t x)
else if not (BS.null (raw_to x))
@ -98,18 +102,21 @@ encodeUnifiedAddress ua = encodeBech32m (E.encodeUtf8 hr) b
Nothing -> BS.empty
Just t ->
case ta_type t of
P2SH -> packReceiver 0x01 $ ta_bytes t
P2PKH -> packReceiver 0x00 $ ta_bytes t
P2SH -> packReceiver 0x01 $ Just $ ta_bytes t
P2PKH -> packReceiver 0x00 $ Just $ ta_bytes t
sReceiver = packReceiver 0x02 $ s_rec ua
oReceiver = packReceiver 0x03 $ o_rec ua
padding = E.encodeUtf8 $ T.justifyLeft 16 '\NUL' hr
packReceiver :: Word8 -> BS.ByteString -> BS.ByteString
packReceiver typeCode receiver =
if BS.length receiver > 1
then BS.singleton typeCode `BS.append`
(BS.singleton . toEnum . BS.length) receiver `BS.append`
receiver
else BS.empty
packReceiver :: Word8 -> Maybe BS.ByteString -> BS.ByteString
packReceiver typeCode receiver' =
case receiver' of
Just receiver ->
if BS.length receiver > 1
then BS.singleton typeCode `BS.append`
(BS.singleton . toEnum . BS.length) receiver `BS.append`
receiver
else BS.empty
Nothing -> BS.empty
-- | Attempts to decode the given bytestring into a Unified Full Viewing Key
decodeUfvk :: BS.ByteString -> Maybe UnifiedFullViewingKey

View file

@ -280,8 +280,8 @@ instance FromJSON ShieldedOutput where
-- | Type to represent a Unified Address
data UnifiedAddress = UnifiedAddress
{ ua_net :: !ZcashNet
, o_rec :: !OrchardReceiver
, s_rec :: !SaplingReceiver
, o_rec :: !(Maybe OrchardReceiver)
, s_rec :: !(Maybe SaplingReceiver)
, t_rec :: !(Maybe TransparentAddress)
} deriving (Prelude.Show, Eq, Read)