Add transparent key derivation

This commit is contained in:
Rene Vergara 2024-05-01 14:24:18 -05:00
parent 4a48769eeb
commit bc074d0386
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
2 changed files with 17 additions and 1 deletions

View file

@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Type for transaction creation errors - Type for transaction creation errors
- Types for Sapling circuit parameters - Types for Sapling circuit parameters
- Function to create transaction - Function to create transaction
- Function to derive distinct transparent spending keys
### Changed ### Changed

View file

@ -101,7 +101,22 @@ genTransparentReceiver i scope xprvk = do
ScriptAddress j -> return $ TransparentReceiver P2SH $ fromBinary j ScriptAddress j -> return $ TransparentReceiver P2SH $ fromBinary j
_anyOtherKind -> throwIO $ userError "Unsupported transparent address type" _anyOtherKind -> throwIO $ userError "Unsupported transparent address type"
-- } decode a Transparent Address in HRF and return a TransparentAddress object -- | Generate a transparent receiver
genTransparentSecretKey ::
Int -- ^ The index of the address to be created
-> Scope -- ^ `External` for wallet addresses or `Internal` for change addresses
-> XPrvKey -- ^ The transparent private key
-> IO TransparentSpendingKey
genTransparentSecretKey i scope xprvk = do
ioCtx <- createContext
let s =
case scope of
External -> 0
Internal -> 1
let path = Deriv :/ s :/ fromIntegral i :: DerivPath
return $ derivePath ioCtx path xprvk
-- | decode a Transparent Address in HRF and return a TransparentAddress object
decodeTransparentAddress :: BS.ByteString -> Maybe TransparentAddress decodeTransparentAddress :: BS.ByteString -> Maybe TransparentAddress
decodeTransparentAddress taddress = do decodeTransparentAddress taddress = do
if BS.length taddress < 34 if BS.length taddress < 34