From c51c471adeba9b308b56aaf62962c09681b68188 Mon Sep 17 00:00:00 2001 From: paweljakubas Date: Fri, 26 Jan 2024 13:50:50 +0000 Subject: [PATCH] deploy: 126964483d188c2362393d2a6eea8c65dfc43097 --- .../Cardano.Address.Derivation.hs.html | 1003 ++++++++-------- coverage/coverage.tix | 2 +- .../Cardano-Address-Derivation.html | 4 +- .../cardano-addresses.haddock | Bin 50223 -> 50225 bytes .../src/Cardano.Address.Derivation.html | 1005 +++++++++-------- 5 files changed, 1008 insertions(+), 1006 deletions(-) diff --git a/coverage/cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Derivation.hs.html b/coverage/cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Derivation.hs.html index c229b6345..27112c4b1 100644 --- a/coverage/cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Derivation.hs.html +++ b/coverage/cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Derivation.hs.html @@ -25,509 +25,510 @@ 6 {-# LANGUAGE ScopedTypeVariables #-} 7 {-# LANGUAGE TypeApplications #-} 8 {-# LANGUAGE TypeFamilies #-} - 9 - 10 {-# OPTIONS_HADDOCK prune #-} - 11 - 12 module Cardano.Address.Derivation - 13 ( - 14 -- * Overview - 15 -- $overview - 16 - 17 -- * Key Derivation - 18 -- ** Types - 19 Index - 20 , indexToWord32 - 21 , indexFromWord32 - 22 , wholeDomainIndex - 23 , coerceWholeDomainIndex - 24 , nextIndex - 25 , Depth (..) - 26 , DerivationType (..) - 27 - 28 -- * Abstractions - 29 , GenMasterKey (..) - 30 , HardDerivation (..) - 31 , SoftDerivation (..) - 32 - 33 -- * Low-Level Cryptography Primitives - 34 -- ** XPrv - 35 , XPrv - 36 , xprvFromBytes - 37 , xprvToBytes - 38 , xprvPrivateKey - 39 , xprvChainCode - 40 , toXPub - 41 - 42 -- ** XPub - 43 , XPub - 44 , xpubFromBytes - 45 , xpubToBytes - 46 , xpubPublicKey - 47 , xpubChainCode - 48 - 49 -- ** Pub - 50 , Pub - 51 , pubFromBytes - 52 , pubToBytes - 53 , xpubToPub - 54 - 55 -- ** XSignature - 56 , XSignature - 57 , sign - 58 , verify - 59 - 60 -- Internal / Not exposed by Haddock - 61 , DerivationScheme (..) - 62 , deriveXPrv - 63 , deriveXPub - 64 , generate - 65 , generateNew - 66 , hashCredential - 67 , hashWalletId - 68 , credentialHashSize - 69 , unsafeMkIndex - 70 ------------------ - 71 ) where - 72 - 73 import Prelude - 74 - 75 import Cardano.Crypto.Wallet - 76 ( DerivationScheme (..) ) - 77 import Cardano.Mnemonic - 78 ( SomeMnemonic ) - 79 import Control.DeepSeq - 80 ( NFData ) - 81 import Crypto.Error - 82 ( eitherCryptoError ) - 83 import Crypto.Hash - 84 ( hash ) - 85 import Crypto.Hash.Algorithms - 86 ( Blake2b_160 (..), Blake2b_224 (..) ) - 87 import Crypto.Hash.IO - 88 ( HashAlgorithm (hashDigestSize) ) - 89 import Data.ByteArray - 90 ( ByteArrayAccess, ScrubbedBytes ) - 91 import Data.ByteString - 92 ( ByteString ) - 93 import Data.Coerce - 94 ( coerce ) - 95 import Data.Either.Extra - 96 ( eitherToMaybe ) - 97 import Data.Kind - 98 ( Type ) - 99 import Data.String - 100 ( fromString ) - 101 import Data.Word - 102 ( Word32 ) - 103 import Fmt - 104 ( Buildable (..) ) - 105 import GHC.Generics - 106 ( Generic ) - 107 import GHC.Stack - 108 ( HasCallStack ) - 109 - 110 import qualified Cardano.Crypto.Wallet as CC - 111 import qualified Crypto.ECC.Edwards25519 as Ed25519 - 112 import qualified Data.ByteArray as BA - 113 import qualified Data.ByteString as BS - 114 - 115 -- $overview - 116 -- - 117 -- These abstractions allow generating root private key, also called /Master Key/ - 118 -- and then basing on it enable address derivation - 119 - 120 -- - 121 -- Low-Level Cryptography Primitives - 122 -- - 123 - 124 -- | An opaque type representing an extended private key. - 125 -- - 126 -- __Properties:__ - 127 -- - 128 -- ===== Roundtripping - 129 -- - 130 -- @forall xprv. 'xprvFromBytes' ('xprvToBytes' xprv) == 'Just' xprv@ - 131 -- - 132 -- ===== Chain Code Invariance - 133 -- - 134 -- @forall xprv. 'xprvChainCode' xprv == 'xpubChainCode' ('toXPub' xprv)@ - 135 -- - 136 -- ===== Public Key Signature - 137 -- - 138 -- @forall xprv msg. 'verify' ('toXPub' xprv) msg ('sign' xprv msg) == 'True'@ - 139 -- - 140 -- @since 1.0.0 - 141 type XPrv = CC.XPrv - 142 - 143 -- | An opaque type representing an extended public key. - 144 -- - 145 -- __Properties:__ - 146 -- - 147 -- ===== Roundtripping - 148 -- - 149 -- @forall xpub. 'xpubFromBytes' ('xpubToBytes' xpub) == 'Just' xpub@ - 150 -- - 151 -- @since 1.0.0 - 152 type XPub = CC.XPub - 153 - 154 -- | An opaque type representing a signature made from an 'XPrv'. - 155 -- - 156 -- @since 1.0.0 - 157 type XSignature = CC.XSignature - 158 - 159 -- | Construct an 'XPub' from raw 'ByteString' (64 bytes). - 160 -- - 161 -- @since 1.0.0 - 162 xpubFromBytes :: ByteString -> Maybe XPub - 163 xpubFromBytes = eitherToMaybe . CC.xpub - 164 - 165 -- | Convert an 'XPub' to a raw 'ByteString' (64 bytes). - 166 -- - 167 -- @since 1.0.0 - 168 xpubToBytes :: XPub -> ByteString - 169 xpubToBytes xpub = xpubPublicKey xpub <> xpubChainCode xpub - 170 - 171 -- | Extract the public key from an 'XPub' as a raw 'ByteString' (32 bytes). - 172 -- - 173 -- @since 2.0.0 - 174 xpubPublicKey :: XPub -> ByteString - 175 xpubPublicKey (CC.XPub pub _cc) = pub - 176 - 177 -- | Extract the chain code from an 'XPub' as a raw 'ByteString' (32 bytes). - 178 -- - 179 -- @since 2.0.0 - 180 xpubChainCode :: XPub -> ByteString - 181 xpubChainCode (CC.XPub _pub (CC.ChainCode cc)) = cc - 182 - 183 -- | An opaque type representing a non-extended public key. - 184 -- - 185 -- __Properties:__ - 186 -- - 187 -- ===== Roundtripping - 188 -- - 189 -- @forall pub. 'pubFromBytes' ('pubToBytes' pub) == 'Just' pub@ - 190 -- - 191 -- @since 3.12.0 - 192 newtype Pub = Pub ByteString - 193 deriving (Show, Eq) - 194 - 195 -- | Construct a 'Pub' from raw 'ByteString' (32 bytes). - 196 -- - 197 -- @since 3.12.0 - 198 pubFromBytes :: ByteString -> Maybe Pub - 199 pubFromBytes bytes - 200 | BS.length bytes /= 32 = Nothing - 201 | otherwise = Just $ Pub bytes - 202 - 203 -- | Convert an 'Pub' to a raw 'ByteString' (32 bytes). - 204 -- - 205 -- @since 3.12.0 - 206 pubToBytes :: Pub -> ByteString - 207 pubToBytes (Pub pub) = pub - 208 - 209 -- | Extract the public key from an 'XPub' as a 'Pub' (32 bytes). - 210 -- - 211 -- @since 3.12.0 - 212 xpubToPub :: XPub -> Pub - 213 xpubToPub (CC.XPub pub _cc) = Pub pub - 214 - 215 -- | Construct an 'XPrv' from raw 'ByteString' (96 bytes). - 216 -- - 217 -- @since 1.0.0 - 218 xprvFromBytes :: ByteString -> Maybe XPrv - 219 xprvFromBytes bytes - 220 | BS.length bytes /= 96 = Nothing - 221 | otherwise = do - 222 let (prv, cc) = BS.splitAt 64 bytes - 223 pub <- ed25519ScalarMult (BS.take 32 prv) - 224 eitherToMaybe $ CC.xprv $ prv <> pub <> cc - 225 where - 226 ed25519ScalarMult :: ByteString -> Maybe ByteString - 227 ed25519ScalarMult bs = do - 228 scalar <- eitherToMaybe $ eitherCryptoError $ Ed25519.scalarDecodeLong bs - 229 pure $ Ed25519.pointEncode $ Ed25519.toPoint scalar - 230 - 231 -- From < xprv | pub | cc > - 232 -- ↳ To < xprv | | cc > - 233 -- - 234 -- | Convert an 'XPrv' to a raw 'ByteString' (96 bytes). - 235 -- - 236 -- @since 1.0.0 - 237 xprvToBytes :: XPrv -> ByteString - 238 xprvToBytes xprv = - 239 xprvPrivateKey xprv <> xprvChainCode xprv - 240 - 241 -- | Extract the private key from an 'XPrv' as a raw 'ByteString' (64 bytes). - 242 -- - 243 -- @since 2.0.0 - 244 xprvPrivateKey :: XPrv -> ByteString - 245 xprvPrivateKey = BS.take 64 . CC.unXPrv - 246 - 247 -- | Extract the chain code from an 'XPrv' as a raw 'ByteString' (32 bytes). - 248 -- - 249 -- @since 2.0.0 - 250 xprvChainCode :: XPrv -> ByteString - 251 xprvChainCode = BS.drop 96 . CC.unXPrv - 252 - 253 -- | Derive the 'XPub' associated with an 'XPrv'. - 254 -- - 255 -- @since 1.0.0 - 256 toXPub :: HasCallStack => XPrv -> XPub - 257 toXPub = CC.toXPub - 258 - 259 -- | Produce a signature of the given 'msg' from an 'XPrv'. - 260 -- - 261 -- @since 1.0.0 - 262 sign - 263 :: ByteArrayAccess msg - 264 => XPrv - 265 -> msg - 266 -> XSignature - 267 sign = - 268 CC.sign (mempty :: ScrubbedBytes) - 269 - 270 -- | Verify the 'XSignature' of a 'msg' with the 'XPub' associated with the - 271 -- 'XPrv' used for signing. - 272 -- - 273 -- @since 1.0.0 - 274 verify - 275 :: ByteArrayAccess msg - 276 => XPub - 277 -> msg - 278 -> XSignature - 279 -> Bool - 280 verify = - 281 CC.verify -- re-exported for the sake of documentation. - 282 - 283 -- Derive a child extended private key from an extended private key - 284 -- - 285 -- __internal__ - 286 deriveXPrv - 287 :: DerivationScheme - 288 -> XPrv - 289 -> Index derivationType depth - 290 -> XPrv - 291 deriveXPrv ds prv (Index ix) = - 292 CC.deriveXPrv ds (mempty :: ScrubbedBytes) prv ix - 293 - 294 -- Derive a child extended public key from an extended public key - 295 -- - 296 -- __internal__ - 297 deriveXPub - 298 :: DerivationScheme - 299 -> XPub - 300 -> Index derivationType depth - 301 -> Maybe XPub - 302 deriveXPub ds pub (Index ix) = - 303 CC.deriveXPub ds pub ix - 304 - 305 -- Generate an XPrv using the legacy method (Byron). - 306 -- - 307 -- The seed needs to be at least 32 bytes, otherwise an asynchronous error is thrown. - 308 -- - 309 -- __internal__ - 310 generate - 311 :: ByteArrayAccess seed - 312 => seed - 313 -> XPrv - 314 generate seed = - 315 CC.generate seed (mempty :: ScrubbedBytes) - 316 - 317 -- Generate an XPrv using the new method (Icarus). - 318 -- - 319 -- The seed needs to be at least 16 bytes. - 320 -- - 321 -- __internal__ - 322 generateNew - 323 :: (ByteArrayAccess seed, ByteArrayAccess sndFactor) - 324 => seed - 325 -> sndFactor - 326 -> XPrv - 327 generateNew seed sndFactor = - 328 CC.generateNew seed sndFactor (mempty :: ScrubbedBytes) - 329 - 330 -- Hash a credential (pub key or script). - 331 -- - 332 -- __internal__ - 333 hashCredential :: ByteString -> ByteString - 334 hashCredential = - 335 BA.convert . hash @_ @Blake2b_224 - 336 - 337 -- Hash a extended root or account key to calculate walletid. - 338 -- - 339 -- __internal__ - 340 hashWalletId :: ByteString -> ByteString - 341 hashWalletId = - 342 BA.convert . hash @_ @Blake2b_160 - 343 - 344 -- Size, in bytes, of a hash of credential (pub key or script). - 345 -- - 346 -- __internal__ - 347 credentialHashSize :: Int - 348 credentialHashSize = hashDigestSize Blake2b_224 - 349 - 350 -- - 351 -- Key Derivation - 352 -- - 353 - 354 -- | Key Depth in the derivation path, according to BIP-0039 / BIP-0044 - 355 -- - 356 -- @ - 357 -- root | purpose' | cointype' | account' | role | address@ - 358 -- 0th 1st 2nd 3rd 4th 5th - 359 -- @ - 360 -- - 361 -- We do not manipulate purpose, cointype and change paths directly, so there - 362 -- are no constructors for these. - 363 -- - 364 -- @since 1.0.0 - 365 data Depth = RootK | AccountK | PaymentK | DelegationK | ScriptK | PolicyK - 366 - 367 -- | A derivation index, with phantom-types to disambiguate derivation type. - 368 -- - 369 -- @ - 370 -- let accountIx = Index 'Hardened 'AccountK - 371 -- let addressIx = Index 'Soft 'PaymentK - 372 -- @ - 373 -- - 374 -- @since 1.0.0 - 375 newtype Index (derivationType :: DerivationType) (depth :: Depth) = Index - 376 { indexToWord32 :: Word32 - 377 -- ^ Get the index as a 'Word32' - 378 -- @since 3.3.0 - 379 } - 380 deriving stock (Generic, Show, Eq, Ord) - 381 - 382 instance NFData (Index derivationType depth) - 383 - 384 instance Bounded (Index 'Hardened depth) where - 385 minBound = Index 0x80000000 - 386 maxBound = Index maxBound - 387 - 388 instance Bounded (Index 'Soft depth) where - 389 minBound = Index minBound - 390 maxBound = let (Index ix) = minBound @(Index 'Hardened _) in Index (ix - 1) - 391 - 392 instance Bounded (Index 'WholeDomain depth) where - 393 minBound = Index minBound - 394 maxBound = Index maxBound - 395 - 396 -- Construct an 'Index' from any Word32 value, without any validation, for - 397 -- internal use only. - 398 -- - 399 -- Always use 'indexFromWord32' or 'wholeDomainIndex' instead of this function. - 400 unsafeMkIndex :: Word32 -> Index ty depth - 401 unsafeMkIndex = Index - 402 - 403 -- | Construct derivation path indices from raw 'Word32' values. - 404 indexFromWord32 - 405 :: forall ix derivationType depth. - 406 (ix ~ Index derivationType depth, Bounded ix) - 407 => Word32 -> Maybe ix - 408 indexFromWord32 ix - 409 | ix >= indexToWord32 (minBound @ix) && ix <= indexToWord32 (maxBound @ix) = - 410 Just (Index ix) - 411 | otherwise = - 412 Nothing - 413 - 414 -- | Increment an index, if possible. - 415 -- - 416 -- @since 3.3.0 - 417 nextIndex - 418 :: forall ix derivationType depth. - 419 (ix ~ Index derivationType depth, Bounded ix) - 420 => ix -> Maybe ix - 421 nextIndex (Index ix) = indexFromWord32 (ix + 1) - 422 - 423 -- | Constructs a full domain 'Index'. This can't fail, unlike 'fromWord32'. - 424 -- - 425 -- @since 3.3.0 - 426 wholeDomainIndex :: Word32 -> Index 'WholeDomain depth - 427 wholeDomainIndex = Index - 428 - 429 -- | Upcasts an 'Index' to one with the full 'Word32' domain. - 430 -- - 431 -- @since 3.3.0 - 432 coerceWholeDomainIndex :: Index ty depth0 -> Index 'WholeDomain depth1 - 433 coerceWholeDomainIndex = coerce - 434 - 435 instance Buildable (Index derivationType depth) where - 436 build (Index ix) = fromString (show ix) - 437 + 9 {-# LANGUAGE TypeOperators #-} + 10 + 11 {-# OPTIONS_HADDOCK prune #-} + 12 + 13 module Cardano.Address.Derivation + 14 ( + 15 -- * Overview + 16 -- $overview + 17 + 18 -- * Key Derivation + 19 -- ** Types + 20 Index + 21 , indexToWord32 + 22 , indexFromWord32 + 23 , wholeDomainIndex + 24 , coerceWholeDomainIndex + 25 , nextIndex + 26 , Depth (..) + 27 , DerivationType (..) + 28 + 29 -- * Abstractions + 30 , GenMasterKey (..) + 31 , HardDerivation (..) + 32 , SoftDerivation (..) + 33 + 34 -- * Low-Level Cryptography Primitives + 35 -- ** XPrv + 36 , XPrv + 37 , xprvFromBytes + 38 , xprvToBytes + 39 , xprvPrivateKey + 40 , xprvChainCode + 41 , toXPub + 42 + 43 -- ** XPub + 44 , XPub + 45 , xpubFromBytes + 46 , xpubToBytes + 47 , xpubPublicKey + 48 , xpubChainCode + 49 + 50 -- ** Pub + 51 , Pub + 52 , pubFromBytes + 53 , pubToBytes + 54 , xpubToPub + 55 + 56 -- ** XSignature + 57 , XSignature + 58 , sign + 59 , verify + 60 + 61 -- Internal / Not exposed by Haddock + 62 , DerivationScheme (..) + 63 , deriveXPrv + 64 , deriveXPub + 65 , generate + 66 , generateNew + 67 , hashCredential + 68 , hashWalletId + 69 , credentialHashSize + 70 , unsafeMkIndex + 71 ------------------ + 72 ) where + 73 + 74 import Prelude + 75 + 76 import Cardano.Crypto.Wallet + 77 ( DerivationScheme (..) ) + 78 import Cardano.Mnemonic + 79 ( SomeMnemonic ) + 80 import Control.DeepSeq + 81 ( NFData ) + 82 import Crypto.Error + 83 ( eitherCryptoError ) + 84 import Crypto.Hash + 85 ( hash ) + 86 import Crypto.Hash.Algorithms + 87 ( Blake2b_160 (..), Blake2b_224 (..) ) + 88 import Crypto.Hash.IO + 89 ( HashAlgorithm (hashDigestSize) ) + 90 import Data.ByteArray + 91 ( ByteArrayAccess, ScrubbedBytes ) + 92 import Data.ByteString + 93 ( ByteString ) + 94 import Data.Coerce + 95 ( coerce ) + 96 import Data.Either.Extra + 97 ( eitherToMaybe ) + 98 import Data.Kind + 99 ( Type ) + 100 import Data.String + 101 ( fromString ) + 102 import Data.Word + 103 ( Word32 ) + 104 import Fmt + 105 ( Buildable (..) ) + 106 import GHC.Generics + 107 ( Generic ) + 108 import GHC.Stack + 109 ( HasCallStack ) + 110 + 111 import qualified Cardano.Crypto.Wallet as CC + 112 import qualified Crypto.ECC.Edwards25519 as Ed25519 + 113 import qualified Data.ByteArray as BA + 114 import qualified Data.ByteString as BS + 115 + 116 -- $overview + 117 -- + 118 -- These abstractions allow generating root private key, also called /Master Key/ + 119 -- and then basing on it enable address derivation + 120 + 121 -- + 122 -- Low-Level Cryptography Primitives + 123 -- + 124 + 125 -- | An opaque type representing an extended private key. + 126 -- + 127 -- __Properties:__ + 128 -- + 129 -- ===== Roundtripping + 130 -- + 131 -- @forall xprv. 'xprvFromBytes' ('xprvToBytes' xprv) == 'Just' xprv@ + 132 -- + 133 -- ===== Chain Code Invariance + 134 -- + 135 -- @forall xprv. 'xprvChainCode' xprv == 'xpubChainCode' ('toXPub' xprv)@ + 136 -- + 137 -- ===== Public Key Signature + 138 -- + 139 -- @forall xprv msg. 'verify' ('toXPub' xprv) msg ('sign' xprv msg) == 'True'@ + 140 -- + 141 -- @since 1.0.0 + 142 type XPrv = CC.XPrv + 143 + 144 -- | An opaque type representing an extended public key. + 145 -- + 146 -- __Properties:__ + 147 -- + 148 -- ===== Roundtripping + 149 -- + 150 -- @forall xpub. 'xpubFromBytes' ('xpubToBytes' xpub) == 'Just' xpub@ + 151 -- + 152 -- @since 1.0.0 + 153 type XPub = CC.XPub + 154 + 155 -- | An opaque type representing a signature made from an 'XPrv'. + 156 -- + 157 -- @since 1.0.0 + 158 type XSignature = CC.XSignature + 159 + 160 -- | Construct an 'XPub' from raw 'ByteString' (64 bytes). + 161 -- + 162 -- @since 1.0.0 + 163 xpubFromBytes :: ByteString -> Maybe XPub + 164 xpubFromBytes = eitherToMaybe . CC.xpub + 165 + 166 -- | Convert an 'XPub' to a raw 'ByteString' (64 bytes). + 167 -- + 168 -- @since 1.0.0 + 169 xpubToBytes :: XPub -> ByteString + 170 xpubToBytes xpub = xpubPublicKey xpub <> xpubChainCode xpub + 171 + 172 -- | Extract the public key from an 'XPub' as a raw 'ByteString' (32 bytes). + 173 -- + 174 -- @since 2.0.0 + 175 xpubPublicKey :: XPub -> ByteString + 176 xpubPublicKey (CC.XPub pub _cc) = pub + 177 + 178 -- | Extract the chain code from an 'XPub' as a raw 'ByteString' (32 bytes). + 179 -- + 180 -- @since 2.0.0 + 181 xpubChainCode :: XPub -> ByteString + 182 xpubChainCode (CC.XPub _pub (CC.ChainCode cc)) = cc + 183 + 184 -- | An opaque type representing a non-extended public key. + 185 -- + 186 -- __Properties:__ + 187 -- + 188 -- ===== Roundtripping + 189 -- + 190 -- @forall pub. 'pubFromBytes' ('pubToBytes' pub) == 'Just' pub@ + 191 -- + 192 -- @since 3.12.0 + 193 newtype Pub = Pub ByteString + 194 deriving (Show, Eq) + 195 + 196 -- | Construct a 'Pub' from raw 'ByteString' (32 bytes). + 197 -- + 198 -- @since 3.12.0 + 199 pubFromBytes :: ByteString -> Maybe Pub + 200 pubFromBytes bytes + 201 | BS.length bytes /= 32 = Nothing + 202 | otherwise = Just $ Pub bytes + 203 + 204 -- | Convert an 'Pub' to a raw 'ByteString' (32 bytes). + 205 -- + 206 -- @since 3.12.0 + 207 pubToBytes :: Pub -> ByteString + 208 pubToBytes (Pub pub) = pub + 209 + 210 -- | Extract the public key from an 'XPub' as a 'Pub' (32 bytes). + 211 -- + 212 -- @since 3.12.0 + 213 xpubToPub :: XPub -> Pub + 214 xpubToPub (CC.XPub pub _cc) = Pub pub + 215 + 216 -- | Construct an 'XPrv' from raw 'ByteString' (96 bytes). + 217 -- + 218 -- @since 1.0.0 + 219 xprvFromBytes :: ByteString -> Maybe XPrv + 220 xprvFromBytes bytes + 221 | BS.length bytes /= 96 = Nothing + 222 | otherwise = do + 223 let (prv, cc) = BS.splitAt 64 bytes + 224 pub <- ed25519ScalarMult (BS.take 32 prv) + 225 eitherToMaybe $ CC.xprv $ prv <> pub <> cc + 226 where + 227 ed25519ScalarMult :: ByteString -> Maybe ByteString + 228 ed25519ScalarMult bs = do + 229 scalar <- eitherToMaybe $ eitherCryptoError $ Ed25519.scalarDecodeLong bs + 230 pure $ Ed25519.pointEncode $ Ed25519.toPoint scalar + 231 + 232 -- From < xprv | pub | cc > + 233 -- ↳ To < xprv | | cc > + 234 -- + 235 -- | Convert an 'XPrv' to a raw 'ByteString' (96 bytes). + 236 -- + 237 -- @since 1.0.0 + 238 xprvToBytes :: XPrv -> ByteString + 239 xprvToBytes xprv = + 240 xprvPrivateKey xprv <> xprvChainCode xprv + 241 + 242 -- | Extract the private key from an 'XPrv' as a raw 'ByteString' (64 bytes). + 243 -- + 244 -- @since 2.0.0 + 245 xprvPrivateKey :: XPrv -> ByteString + 246 xprvPrivateKey = BS.take 64 . CC.unXPrv + 247 + 248 -- | Extract the chain code from an 'XPrv' as a raw 'ByteString' (32 bytes). + 249 -- + 250 -- @since 2.0.0 + 251 xprvChainCode :: XPrv -> ByteString + 252 xprvChainCode = BS.drop 96 . CC.unXPrv + 253 + 254 -- | Derive the 'XPub' associated with an 'XPrv'. + 255 -- + 256 -- @since 1.0.0 + 257 toXPub :: HasCallStack => XPrv -> XPub + 258 toXPub = CC.toXPub + 259 + 260 -- | Produce a signature of the given 'msg' from an 'XPrv'. + 261 -- + 262 -- @since 1.0.0 + 263 sign + 264 :: ByteArrayAccess msg + 265 => XPrv + 266 -> msg + 267 -> XSignature + 268 sign = + 269 CC.sign (mempty :: ScrubbedBytes) + 270 + 271 -- | Verify the 'XSignature' of a 'msg' with the 'XPub' associated with the + 272 -- 'XPrv' used for signing. + 273 -- + 274 -- @since 1.0.0 + 275 verify + 276 :: ByteArrayAccess msg + 277 => XPub + 278 -> msg + 279 -> XSignature + 280 -> Bool + 281 verify = + 282 CC.verify -- re-exported for the sake of documentation. + 283 + 284 -- Derive a child extended private key from an extended private key + 285 -- + 286 -- __internal__ + 287 deriveXPrv + 288 :: DerivationScheme + 289 -> XPrv + 290 -> Index derivationType depth + 291 -> XPrv + 292 deriveXPrv ds prv (Index ix) = + 293 CC.deriveXPrv ds (mempty :: ScrubbedBytes) prv ix + 294 + 295 -- Derive a child extended public key from an extended public key + 296 -- + 297 -- __internal__ + 298 deriveXPub + 299 :: DerivationScheme + 300 -> XPub + 301 -> Index derivationType depth + 302 -> Maybe XPub + 303 deriveXPub ds pub (Index ix) = + 304 CC.deriveXPub ds pub ix + 305 + 306 -- Generate an XPrv using the legacy method (Byron). + 307 -- + 308 -- The seed needs to be at least 32 bytes, otherwise an asynchronous error is thrown. + 309 -- + 310 -- __internal__ + 311 generate + 312 :: ByteArrayAccess seed + 313 => seed + 314 -> XPrv + 315 generate seed = + 316 CC.generate seed (mempty :: ScrubbedBytes) + 317 + 318 -- Generate an XPrv using the new method (Icarus). + 319 -- + 320 -- The seed needs to be at least 16 bytes. + 321 -- + 322 -- __internal__ + 323 generateNew + 324 :: (ByteArrayAccess seed, ByteArrayAccess sndFactor) + 325 => seed + 326 -> sndFactor + 327 -> XPrv + 328 generateNew seed sndFactor = + 329 CC.generateNew seed sndFactor (mempty :: ScrubbedBytes) + 330 + 331 -- Hash a credential (pub key or script). + 332 -- + 333 -- __internal__ + 334 hashCredential :: ByteString -> ByteString + 335 hashCredential = + 336 BA.convert . hash @_ @Blake2b_224 + 337 + 338 -- Hash a extended root or account key to calculate walletid. + 339 -- + 340 -- __internal__ + 341 hashWalletId :: ByteString -> ByteString + 342 hashWalletId = + 343 BA.convert . hash @_ @Blake2b_160 + 344 + 345 -- Size, in bytes, of a hash of credential (pub key or script). + 346 -- + 347 -- __internal__ + 348 credentialHashSize :: Int + 349 credentialHashSize = hashDigestSize Blake2b_224 + 350 + 351 -- + 352 -- Key Derivation + 353 -- + 354 + 355 -- | Key Depth in the derivation path, according to BIP-0039 / BIP-0044 + 356 -- + 357 -- @ + 358 -- root | purpose' | cointype' | account' | role | address@ + 359 -- 0th 1st 2nd 3rd 4th 5th + 360 -- @ + 361 -- + 362 -- We do not manipulate purpose, cointype and change paths directly, so there + 363 -- are no constructors for these. + 364 -- + 365 -- @since 1.0.0 + 366 data Depth = RootK | AccountK | PaymentK | DelegationK | ScriptK | PolicyK + 367 + 368 -- | A derivation index, with phantom-types to disambiguate derivation type. + 369 -- + 370 -- @ + 371 -- let accountIx = Index 'Hardened 'AccountK + 372 -- let addressIx = Index 'Soft 'PaymentK + 373 -- @ + 374 -- + 375 -- @since 1.0.0 + 376 newtype Index (derivationType :: DerivationType) (depth :: Depth) = Index + 377 { indexToWord32 :: Word32 + 378 -- ^ Get the index as a 'Word32' + 379 -- @since 3.3.0 + 380 } + 381 deriving stock (Generic, Show, Eq, Ord) + 382 + 383 instance NFData (Index derivationType depth) + 384 + 385 instance Bounded (Index 'Hardened depth) where + 386 minBound = Index 0x80000000 + 387 maxBound = Index maxBound + 388 + 389 instance Bounded (Index 'Soft depth) where + 390 minBound = Index minBound + 391 maxBound = let (Index ix) = minBound @(Index 'Hardened _) in Index (ix - 1) + 392 + 393 instance Bounded (Index 'WholeDomain depth) where + 394 minBound = Index minBound + 395 maxBound = Index maxBound + 396 + 397 -- Construct an 'Index' from any Word32 value, without any validation, for + 398 -- internal use only. + 399 -- + 400 -- Always use 'indexFromWord32' or 'wholeDomainIndex' instead of this function. + 401 unsafeMkIndex :: Word32 -> Index ty depth + 402 unsafeMkIndex = Index + 403 + 404 -- | Construct derivation path indices from raw 'Word32' values. + 405 indexFromWord32 + 406 :: forall ix derivationType depth. + 407 (ix ~ Index derivationType depth, Bounded ix) + 408 => Word32 -> Maybe ix + 409 indexFromWord32 ix + 410 | ix >= indexToWord32 (minBound @ix) && ix <= indexToWord32 (maxBound @ix) = + 411 Just (Index ix) + 412 | otherwise = + 413 Nothing + 414 + 415 -- | Increment an index, if possible. + 416 -- + 417 -- @since 3.3.0 + 418 nextIndex + 419 :: forall ix derivationType depth. + 420 (ix ~ Index derivationType depth, Bounded ix) + 421 => ix -> Maybe ix + 422 nextIndex (Index ix) = indexFromWord32 (ix + 1) + 423 + 424 -- | Constructs a full domain 'Index'. This can't fail, unlike 'fromWord32'. + 425 -- + 426 -- @since 3.3.0 + 427 wholeDomainIndex :: Word32 -> Index 'WholeDomain depth + 428 wholeDomainIndex = Index + 429 + 430 -- | Upcasts an 'Index' to one with the full 'Word32' domain. + 431 -- + 432 -- @since 3.3.0 + 433 coerceWholeDomainIndex :: Index ty depth0 -> Index 'WholeDomain depth1 + 434 coerceWholeDomainIndex = coerce + 435 + 436 instance Buildable (Index derivationType depth) where + 437 build (Index ix) = fromString (show ix) 438 - 439 -- | Type of derivation that should be used with the given indexes. - 440 -- - 441 -- In theory, we should only consider two derivation types: soft and hard. - 442 -- - 443 -- However, historically, addresses in Cardano used to be generated across both - 444 -- the soft and the hard domain. We therefore introduce a 'WholeDomain' derivation - 445 -- type that is the exact union of `Hardened` and `Soft`. - 446 -- - 447 -- @since 1.0.0 - 448 data DerivationType = Hardened | Soft | WholeDomain - 449 - 450 -- | An interface for doing hard derivations from the root private key, /Master Key/ - 451 -- - 452 -- @since 1.0.0 - 453 class HardDerivation (key :: Depth -> Type -> Type) where - 454 type AccountIndexDerivationType key :: DerivationType - 455 type AddressIndexDerivationType key :: DerivationType - 456 type WithRole key :: Type - 457 - 458 -- | Derives account private key from the given root private key, using - 459 -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> - 460 -- package for more details). - 461 -- - 462 -- @since 1.0.0 - 463 deriveAccountPrivateKey - 464 :: key 'RootK XPrv - 465 -> Index (AccountIndexDerivationType key) 'AccountK - 466 -> key 'AccountK XPrv - 467 - 468 -- | Derives address private key from the given account private key, using - 469 -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> - 470 -- package for more details). - 471 -- - 472 -- @since 1.0.0 - 473 deriveAddressPrivateKey - 474 :: key 'AccountK XPrv - 475 -> WithRole key - 476 -> Index (AddressIndexDerivationType key) 'PaymentK - 477 -> key 'PaymentK XPrv - 478 - 479 -- | An interface for doing soft derivations from an account public key - 480 class HardDerivation key => SoftDerivation (key :: Depth -> Type -> Type) where - 481 -- | Derives address public key from the given account public key, using - 482 -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> - 483 -- package for more details). - 484 -- - 485 -- This is the preferred way of deriving new sequential address public keys. - 486 -- - 487 -- @since 1.0.0 - 488 deriveAddressPublicKey - 489 :: key 'AccountK XPub - 490 -> WithRole key - 491 -> Index 'Soft 'PaymentK - 492 -> key 'PaymentK XPub - 493 + 439 + 440 -- | Type of derivation that should be used with the given indexes. + 441 -- + 442 -- In theory, we should only consider two derivation types: soft and hard. + 443 -- + 444 -- However, historically, addresses in Cardano used to be generated across both + 445 -- the soft and the hard domain. We therefore introduce a 'WholeDomain' derivation + 446 -- type that is the exact union of `Hardened` and `Soft`. + 447 -- + 448 -- @since 1.0.0 + 449 data DerivationType = Hardened | Soft | WholeDomain + 450 + 451 -- | An interface for doing hard derivations from the root private key, /Master Key/ + 452 -- + 453 -- @since 1.0.0 + 454 class HardDerivation (key :: Depth -> Type -> Type) where + 455 type AccountIndexDerivationType key :: DerivationType + 456 type AddressIndexDerivationType key :: DerivationType + 457 type WithRole key :: Type + 458 + 459 -- | Derives account private key from the given root private key, using + 460 -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> + 461 -- package for more details). + 462 -- + 463 -- @since 1.0.0 + 464 deriveAccountPrivateKey + 465 :: key 'RootK XPrv + 466 -> Index (AccountIndexDerivationType key) 'AccountK + 467 -> key 'AccountK XPrv + 468 + 469 -- | Derives address private key from the given account private key, using + 470 -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> + 471 -- package for more details). + 472 -- + 473 -- @since 1.0.0 + 474 deriveAddressPrivateKey + 475 :: key 'AccountK XPrv + 476 -> WithRole key + 477 -> Index (AddressIndexDerivationType key) 'PaymentK + 478 -> key 'PaymentK XPrv + 479 + 480 -- | An interface for doing soft derivations from an account public key + 481 class HardDerivation key => SoftDerivation (key :: Depth -> Type -> Type) where + 482 -- | Derives address public key from the given account public key, using + 483 -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> + 484 -- package for more details). + 485 -- + 486 -- This is the preferred way of deriving new sequential address public keys. + 487 -- + 488 -- @since 1.0.0 + 489 deriveAddressPublicKey + 490 :: key 'AccountK XPub + 491 -> WithRole key + 492 -> Index 'Soft 'PaymentK + 493 -> key 'PaymentK XPub 494 - 495 -- | Abstract interface for constructing a /Master Key/. - 496 -- - 497 -- @since 1.0.0 - 498 class GenMasterKey (key :: Depth -> Type -> Type) where - 499 type SecondFactor key :: Type - 500 - 501 -- | Generate a root key from a corresponding mnemonic. - 502 -- - 503 -- @since 1.0.0 - 504 genMasterKeyFromMnemonic - 505 :: SomeMnemonic -> SecondFactor key -> key 'RootK XPrv - 506 - 507 -- | Generate a root key from a corresponding root 'XPrv' - 508 -- - 509 -- @since 1.0.0 - 510 genMasterKeyFromXPrv - 511 :: XPrv -> key 'RootK XPrv + 495 + 496 -- | Abstract interface for constructing a /Master Key/. + 497 -- + 498 -- @since 1.0.0 + 499 class GenMasterKey (key :: Depth -> Type -> Type) where + 500 type SecondFactor key :: Type + 501 + 502 -- | Generate a root key from a corresponding mnemonic. + 503 -- + 504 -- @since 1.0.0 + 505 genMasterKeyFromMnemonic + 506 :: SomeMnemonic -> SecondFactor key -> key 'RootK XPrv + 507 + 508 -- | Generate a root key from a corresponding root 'XPrv' + 509 -- + 510 -- @since 1.0.0 + 511 genMasterKeyFromXPrv + 512 :: XPrv -> key 'RootK XPrv diff --git a/coverage/coverage.tix b/coverage/coverage.tix index 9b16e1e7b..5b5213059 100644 --- a/coverage/coverage.tix +++ b/coverage/coverage.tix @@ -1 +1 @@ -Tix [TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address" 204537156 149 [1292,1292,1292,1292,0,1292,1292,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1292,1292,1292,1292,1292,1292,0,1292,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1292,1418,1418,1418,1418,1418,402,1016,402,1016,1418,1418,24,1436,1526,1526,24,1526,1526,1526,1418,1418,1418,1418,1418,26,26,26,26,26,26,26,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,36,36,1,1,1,1,1,1,4494,4494,807,1,1,57,1,1,1,1,1,1,1,1,1,1441,1,1,1,1,1,438,438,438,438,74,75,74,74,75,74,74,75,74,74,74,74],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Compat" 3643375930 3 [0,1888,1888],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Derivation" 597551879 197 [12,12,506,506,7512,7512,7512,7512,7510,7510,7510,7510,7512,7508,2,7508,7508,7508,2,2,0,2,7512,4,4,4,4,4,2,2,0,212,212,44,44,44,44,102,102,102,102,7210,7210,7210,7210,7210,4528,4528,4528,4528,1912,2002,2002,2002,2002,14982,14982,14982,14982,14982,14982,200,200,2,200,200,5272,5272,540,540,540,540,540,540,540,540,540,540,10298,10298,10298,10298,10298,10298,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,0,4002,0,4002,4002,0,836,4002,4002,836,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,4002,0,0,0,28,28,28,28,28,28,0,28,0,28,28,0,28,28,28,28,28,5728,5728,7296,7296,5492,5492,5492,5492,5492,5492,590,590,590,590,17194,17194,1,401,1,1,1,1,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Internal" 1533403047 48 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,26,58,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Script" 2497200379 1234 [0,2,1196,1196,1196,0,0,1196,1196,0,0,1196,1196,1196,1196,2,2,2,2,2,2,2,2,2,2,2,2,30,25408,25408,25408,25408,25408,0,2,2,568,2,568,568,2,2,2,0,2,2,1148,2,1148,1148,2,2,2,0,3922,3904,2,3904,2,2758,2,2758,2758,2756,2,2756,2758,3904,3904,3922,3922,0,6518,2,6500,2,6500,6500,6500,6518,6518,0,9038,2,9020,2,9020,9020,9020,9038,9038,39216,39216,9030,9030,6514,6514,3922,3922,1166,1166,586,586,39216,39216,34,34,39216,39216,0,0,0,0,0,0,0,8,36,4,4,4,4,4,0,34,34,0,0,0,0,0,0,0,0,0,74,64,700,6,6,4,134,134,106,0,16,12,134,134,4,56,56,48,0,8,8,8,0,0,0,0,56,56,4,18,18,8,8,8,0,0,0,10,18,18,6,6,6,8,8,160,250,160,160,160,160,160,160,160,160,160,0,190,44,44,44,44,4,18,44,26,26,26,2,6,26,20,20,20,2,2,20,18,18,18,2,2,18,4,16,16,44,64,64,64,4,8,64,56,56,56,0,0,56,56,56,56,2,4,56,4,52,52,64,82,82,82,82,4,8,82,74,74,74,74,74,74,74,4,4,74,70,70,70,2,12,70,58,58,58,4,10,58,4,48,48,82,0,10,0,10,14,14,3570,2,412,412,6,442,442,520,2432,2432,2426,6,2426,6,2432,24,520,520,520,520,118,112,34,34,394,394,394,2,14,394,394,292,292,282,282,282,282,44,72,72,72,282,292,292,36,32,15102,15616,15622,15622,2848,2856,2858,2858,2858,12304,12298,12304,1060,1060,1056,1056,1172,1172,270,264,15662,15662,6170,6170,6170,6170,6170,32,38,284,284,284,32,284,284,284,2,2,284,278,220,278,278,278,278,278,278,278,6,176,278,102,102,98,98,98,98,30,38,38,38,98,284,284,2,2,2,2,860,10,212,860,860,206,206,206,206,206,210,210,210,210,210,220,2,2,220,220,220,220,26,244,250,250,250,2,220,220,220,2,210,210,210,2,208,208,208,208,208,208,2,206,206,206,206,2,16,16,16,16,250,250,0,0,0,0,0,0,0,12044,3032,2,3032,3032,3032,3032,3092,2,3092,3092,3092,3092,3024,2,3024,3024,3024,3024,2896,2,2896,2896,2896,12044,12044,9464,9464,9464,9464,0,9464,0,9464,9464,0,9464,9320,9448,9448,9464,9464,12346,12346,12346,12346,12346,9454,9454,9454,3326,3326,3326,9454,3326,6128,3184,3326,3326,3326,6128,6128,6128,3098,3098,3098,6128,3098,3030,3096,3098,3098,3098,3030,3030,3030,0,0,0,3030,0,3030,0,0,0,0,3030,3030,3030,0,0,0,3030,0,3030,0,0,0,0,3030,3030,3030,3024,3024,3024,3030,3024,6,3024,3024,3024,3024,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,6,2,2,2,6,0,6,0,0,0,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,0,6,9454,12422,12422,12422,12422,2896,2896,2896,2896,0,2896,2896,2896,2896,2896,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2896,0,0,9526,9526,9526,9526,0,9454,9454,9454,0,9454,9454,9454,9454,9454,0,9448,9448,9448,9454,9526,12422,12422,2,2,2,2,0,2,0,2,2,0,2,2,2,2,2,134,134,134,134,0,134,134,134,134,0,0,0,0,0,0,0,0,134,290,290,290,290,290,290,290,290,290,126,60,60,134,134,134,134,134,134,134,144,144,144,144,144,144,60,60,60,258,258,258,28,28,28,50,58,58,58,18,18,18,32,32,32,32,26,26,26,44,44,44,44,44,44,44,44,44,44,6,6,6,12,12,12,12,12,12,6,6,6,12,12,12,12,12,12,64,64,126,126,126,126,126,126,126,126,34,34,34,34,34,34,6132,6132,0,0,0,0,0,0,0,0,42,0,86,32,64,10,0,0,0,380,0,0,0,0,0,0,12194,0,0,0,0,0,0,25986,0,0,0,0,0,0,0,0,0,0,0,400,2,0,0,0,2,0,0,2,0,0,47356,0,2,0,0,0,2,2,2,2,2,2,2,2,16,2,16,16,2,16,16,2,16,16,16,16,16,8,8,4,4,0,0,2,2,2,2,16,16,0,0,4,4,18,34,34,15630,34,15630,15630,15630,2,2,2,2,0,2,400,400,0,0,400,400,400,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,1196,2,400,400,2,2,2,0,2,2,400,2,400,400,2,400,2,400,400,2,2,2,400,400,400,400,400,2,2,2,1196,1196,1196,1196,1196,1196,400,2,2,2,2,400,400,400,400,400,400,400,400,400,400,400,400,23586,23586,18142,18142,18142,18142,23586,23586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23586,0,23586,23586,23586,0,2,19338,19338,19338,19338,19338,19338,19338,19338,19338,19338,19338,19338,19338,0,0,19338,19338,19338,19338,19338,19338,0,0,19338,0,0,19338,2,2,2,2,2,2,2,30,30,30,30,30186,30186,2592,2592,2592,2592,2592,2592,2592,2516,2516,2516,2516,2516,2516,2516,2756,2756,2756,2756,2756,2756,2756,2756,2756,2756,2756,2756,580,580,580,580,580,552,552,552,552,552,39182],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Script.Parser" 3909177656 194 [32,10,10,10,32,32,32,32,32,50,48,48,48,50,50,50,50,50,60,60,60,26,136,136,60,60,60,60,60,22,146,146,60,60,30,30,30,30,30,30,30,6180,6180,6180,6180,6180,6180,6180,6180,30,30,122,21578,21578,17152,17152,1054,1054,1054,17152,21578,122,122,378,378,378,0,0,42,284,284,300,378,122,122,150,150,150,50,608,608,280,280,608,1082,1082,150,150,150,28,290,576,576,1224,1224,112,112,112,1826,894,894,104,104,894,9924,112,112,1816,1816,1816,894,894,150,150,150,36,324,642,642,1342,1342,304,1322,266,1200,272,1074,874,60,60,60,874,1074,1200,1322,1322,6070,6070,6070,6070,6,6,536,536,536,536,6,536,536,6,6,496,496,496,496,6,496,496,2,540,540,540,2,2,540,540,540,540,2,540,540,540,540,2,112,112,112,112,6,104,104,104,104,7858,364,364,364,364,342,342,18,22,364,364],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Byron" 1627758 381 [1,424,18,18,424,424,424,424,424,424,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,12,12,12,12,12,12,418,0,408,408,426,426,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,26,24,24,26,26,13,13,4,4,4,0,0,4,4,4,4,4,0,4,4,4,2,2,2,2,2,2,4,4,4,6,6,6,4,6,6,6,6,6,10,10,10,2,10,10,10,10,10,0,6,6,6,6,6,0,0,6,6,6,6,6,6,6,6,6,6,2,2,2,2,2,2,4,4,4,6,6,0,2,4,4,4,4,4,4,4,4,4,4,4,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,4,4,1,1,1,1,1,1,1,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1230,1230,812,812,1220,1220,400,0,1,1,1,1,1,1,1,1,0,0,0,0,4,4,4,4,4,4,4,4,4,4,2,2,4,4,4,4,4,4,4,4,4,4,2,2,4,4,4,4,0,4,4,4,4,4,4,0,0,0,0,0,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,0,0,14,14,2,2,321,321,413,413,413,413,413,413,413,413,413,413,413,321,321,321,321,321,321,321,93,93,93,93,93,413,413,413,413,413,413,413,413,413,413,413,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,801,801,425,425,425,425,425,1,1,1,1,1,1,1,1,1,425,425,425,425,425,425,425,409,409,1,417,425,425,1,1,1,3,3,3],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Icarus" 1407594951 398 [2,2,2,2,2,2,2,6,6,6,6,6,1,6,2,2,6,6,6,6,6,1,1,6,6,6,6,1,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,10,2,10,10,10,10,2,10,10,10,10,10,4,6,4,4,4,4,6,6,6,10,10,1,6,6,6,6,6,6,2,6,6,6,6,6,6,6,2,2,2,6,6,6,6,6,6,6,6,6,1,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,2,2,2,2,12,12,0,0,2,2,2,2,2,2,2,2,2,2,13,13,8,8,8,2,8,8,8,8,8,0,12,12,12,12,12,12,12,0,0,2,8,8,8,8,8,0,8,8,8,8,8,6,8,6,8,8,8,6,2,0,6,2,2,2,2,8,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,65,65,2,520,364,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,548,548,872,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,201,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,3,819,3,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,673,673,673,673,673,673,673,673,673,673,673,673,673,673,14,14,2,2,321,321,485,485,321,321,321,15,485,485,485,485,485,485,485,485,485,485,485,1,1,1,1,1,1,1,1,1,1,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,877,877,877,877,877,1,1,1,1,1,1,1,1,1,877,877,877,877,877,877,877,877,877,1,1],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Shared" 4229009544 101 [2,2,10,10,2,2,2,2,2,10,10,28,28,28,28,28,28,28,28,28,0,28,28,28,28,12,16,28,28,28,28,28,0,0,28,28,0,0,0,0,2,200,2,200,200,200,2,2,2,2,2,202,2,202,202,202,2,2,2,2,2,2,0,0,50,50,58,58,810,0,0,400,400,400,400,400,400,400,400,602,602,602,602,602,602,602,410,410,410,410,410,410,410,650,650,650,650,650,650,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Shelley" 1519858715 1081 [0,0,0,0,0,0,0,1312,4,8,0,60,60,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,0,0,2166,2166,2166,0,0,0,0,0,0,0,0,0,2166,2166,2166,2166,2166,2166,2,2,2,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,0,0,2,2,0,0,10,10,10,14,14,18,18,0,0,32,32,32,6,6,6,82,82,82,78,4,78,78,78,78,78,78,4,4,0,4,0,0,4,82,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,11,17,17,17,17,17,17,17,17,17,17,11,1249,1249,1249,1249,1249,1249,1249,1249,1249,1249,11,21,21,21,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1285,1285,1450,1450,80,1450,1450,1450,1450,1450,1450,1450,436,436,436,436,42,442,442,1434,1434,1434,1452,1452,1452,1452,1452,1452,1450,2,1450,436,436,306,1434,1450,1450,2,2,0,2,2,2,2,2,2,1452,2,0,2,2,4,4,4,4,4,4,4,4,4,80,80,80,74,74,0,6,0,0,80,80,436,436,436,436,42,42,42,42,42,436,436,436,436,436,436,436,1438,232,232,232,232,232,230,2,226,12,226,226,226,226,226,226,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,2,0,0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,0,0,0,0,0,0,0,0,0,80,80,80,80,0,80,80,74,74,74,74,74,74,74,74,74,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1076,1076,1076,1072,4,110,4,110,110,110,1072,6,6,6,2,4,2,2,2,2,2,2,18,18,18,18,0,18,18,18,18,18,18,18,16,16,16,6,10,6,6,6,6,6,6,6,2,2,30,1438,1438,1450,1450,0,2,12,12,12,4,4,6,10,10,10,12,2,436,1438,1438,1438,1450,1450,1452,1452,1450,1452,1452,0,0,0,0,0,0,0,0,0,2,1362,396,1362,1398,0,1398,1398,1398,1398,484,484,484,484,484,484,484,484,0,966,966,966,966,0,0,0,0,966,966,966,966,966,966,28,966,966,966,966,966,966,966,28,28,28,4,4,28,966,966,966,966,966,966,4,4,4,4,4,966,962,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,962,966,966,465,465,465,465,465,465,465,465,476,476,476,476,476,476,476,476,476,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,4,4,4,4,8,8,1,1,3,3,224,224,224,224,224,224,224,0,0,0,0,0,0,0,1,1,1,1,105,105,2,700,592,1182,2,2,2,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,0,0,0,0,0,0,0,0,0,0,600,600,600,600,600,600,600,600,600,600,600,600,600,400,400,2,84,2,50,2,80,2,400,400,1450,1450,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1944,1944,1856,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,201,1,1,1,1,1,2,2,1,201,0,0,0,0,0,0,442,442,442,442,0,442,442,6,6,6,6,6,442,42,2,4,442,442,442,436,2,4,442,442,442,442,442,442,442,442,436,436,2,2,4,4,442,442,442,442,442,442,442,442,442,250,74,324,670,62,670,670,670,670,42,42,42,42,42,42,42,42,670,670,670,670,670,42,670,62,670,670,670,670,2180,36,74,74,324,436,436,436,436,436,112,324,436,436,436,436,436,436,436,436,436,40,74,74,74,74,74,436,324,436,436,410,16,436,436,244,30,436,436,8,8,436,436,8,8,436,436,0,0,436,436,436,436,436,436,436,436,436,436,8,8,0,0,1425,1425,1425,1425,1425,1425,1425,1261,1261,1261,1261,1261,1261,1261,6,6,34,34,201,201,201,201,201,201,201,1517,1517,1517,1517,1517,1517,1,1],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Codec.Bech32.Prefixes" 2165507098 135 [32,32,32,12,12,12,46,46,46,14,14,14,26,26,26,118,118,118,62,62,62,62,62,62,26,26,26,34,34,34,0,0,0,20,20,20,188,188,188,18,18,18,0,0,0,2,2,2,168,168,168,120,120,120,0,0,0,2,2,2,50,50,50,42,42,42,0,0,0,26,26,26,132,132,132,112,112,112,0,0,0,74,74,74,1308,1308,1308,170,170,170,0,0,0,4,4,4,964,964,964,564,564,564,0,0,0,4,4,4,480,480,480,404,404,404,0,0,0,92,92,92,4,4,4,4,4,4,68,68,68,24,24,24,40,40,40],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Codec.Cbor" 1651274112 388 [0,0,0,0,0,0,0,408,408,408,408,408,408,10,12,66,66,12,66,66,66,622,622,622,622,622,622,0,0,0,0,622,622,4,4,4,4,4,4,210,4,4,4,4,210,210,210,210,210,0,0,0,0,0,0,0,0,210,4,4,8,8,8,8,8,8,10,434,8,434,10,10,8,8,12,12,6,6,6,6,12,12,4,6,2,4,4,0,0,2,2,4,4,12,8,8,12,12,26,26,26,26,26,26,26,26,2,2,26,22,22,12,12,2,2,400,400,400,400,400,400,400,400,0,0,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,2,2,18,18,412,412,412,412,412,412,6,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,0,202,412,210,210,412,412,6,412,412,412,4,210,210,210,210,4,4,412,412,412,6,6,412,412,412,412,412,412,0,0,0,0,0,0,0,412,412,412,2,2,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,8,8,8,8,8,612,1,0,0,0,0,0,612,612,612,612,612,612,612,612,612,14,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,14,612,612,612,612,612,612,612,612,612,14,14,14,612,612,612,612,612,612,612,2,2,2,640,640,640,640,640,640,640,640,1992,1992,1992,1992,1992,1992,1992,1992,1992,1992,26,26,26,26,26,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Mnemonic" 2554272910 252 [136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,234,234,234,234,232,232,232,232,2172,2172,2172,2172,2172,1334,1334,5602,5736,5736,12,2382,1502,2382,2382,2382,2382,10,1502,1502,1502,1502,1502,6,1492,1492,1492,1492,1474,1218,1480,1486,2382,2382,184,184,1,1,1,146,146,146,146,1,146,146,146,146,146,146,146,146,146,146,146,146,14,14,4678,4678,1346,1346,1,3,11,7,13,1,13,1,1,0,1207,1,1,26,1,14,28,28,2,2,14,1,14,14,14,16,1,16,16,16,16,16,16,16,2,14,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,2,2,2,2,2,2,14,14,14,14,8,6,8,6,14,16,16,6,6,6,866,866,866,866,866,8,8,8,998,998,998,998,998,998,8,16,866,866,128,132,998,998,2,1,2,2,2,2,2,8,2,0,12,12,12,12,12,260,1146,1146,1146,1146,1146,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Codec.Binary.Encoding" 2113528051 179 [0,0,412,412,412,412,412,412,412,412,2,2,0,0,14,14,0,4,8,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,8828,14,8828,8828,8828,8828,8828,8828,0,0,8806,7324,8806,8806,8806,8806,8806,8806,8828,8828,8828,6,6,6,122,122,122,14,14,14,14,14,14,18,18,18,12,12,18,18,48,48,48,48,58,58,66,66,66,62,56,56,62,62,62,62,62,62,62,66,66,66,66,1200,1200,1200,1200,1198,1198,1198,1198,1200,58,66,66,66,62,62,62,62,62,54,54,60,60,60,46,48,48,46,48,48,48,48,2,46,46,66,66,60,60,60,60,70,70,70,4,4,4,4,4,4,70,70,70,66,70,18,70,70,24454,5136,5136,5136,500,500,500,18818,18818,18818,18818,18818,18818,18818,24454,24454,3,1,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Data.Word7" 1576305716 112 [796,996,996,996,996,996,2,996,996,996,996,996,996,996,996,996,796,796,796,996,2,2,2,2,2,2,2,688,688,688,688,688,688,688,4,4,4,4,200,200,4696,4696,4696,4696,4696,6082,6082,6082,1852,4230,1852,1852,1852,1852,1852,1852,4230,4230,0,4230,4230,4230,4230,4230,4230,4230,4230,4230,6082,10,10,10,10,0,0,1652,1652,3434,3434,3434,3434,3434,3434,3434,5086,10,10,10,10,4,730,730,730,266,266,266,290,290,422,422,422,440,730,4,4,4,4,4,4,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command" 2550713210 108 [5652,5652,5652,5652,5652,5652,5652,5652,5652,1884,1884,1884,1884,1884,1884,1884,170,1790,134,134,1398,1398,154,154,98,98,6,1790,1790,1790,1884,1884,134,1878,1398,1878,154,1878,98,1878,1878,1878,1878,1884,1884,1884,1884,1884,1884,1884,2,1884,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1884,1884,1884,1884,1884,1884,1884,1884,1884,1884,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address" 1499056866 85 [24,24,26,26,10,10,14,24,14,14,6,56,154,154,180,24,180,26,180,10,180,24,180,14,180,56,180,180,180,180,180,1756,1878,180,154,180,180,180,182,182,2,182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,182,182,182,182,1878,1878,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Bootstrap" 1464712262 199 [25,24,24,24,24,0,24,0,0,0,0,1,0,24,24,24,24,24,25,12,12,12,12,12,12,0,0,12,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,12,12,24,24,24,24,24,24,24,24,24,24,24,12,12,28,2,28,28,28,16,28,28,28,28,28,28,28,180,28,24,28,28,28,28,28,4,28,2,28,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,28,28,28,28,180,180,1,1,1,1,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Delegation" 2098803449 193 [16,6,16,16,24,16,24,16,16,14,16,0,0,2,2,0,0,14,14,14,14,14,14,14,16,24,24,2,2,14,2,30,30,30,104,180,30,24,30,30,30,30,30,6,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,30,30,30,30,180,180,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Inspect" 2166896630 161 [6,54,54,56,56,54,54,54,46,46,46,46,8,8,8,8,8,8,54,56,56,2,2,6,4,4,6,2,58,58,58,58,180,180,58,56,58,58,58,58,58,2,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,58,58,58,58,180,180,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Payment" 2054561419 259 [24,24,24,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,8,16,8,8,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,16,16,16,8,8,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,24,24,16,8,0,24,24,25,24,24,12,12,12,12,12,0,12,24,27,26,24,0,0,0,0,0,0,0,0,0,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,26,26,26,18,32,32,32,32,32,32,60,180,32,26,32,32,32,32,32,6,32,2,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,32,32,32,32,180,180,1,1,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Pointer" 1347154629 197 [9,9,9,8,8,10,4,10,10,14,10,14,10,10,8,8,10,0,0,2,2,0,0,8,8,8,8,8,8,8,10,14,14,14,16,4,18,2,18,18,18,18,14,4,18,2,18,18,18,18,14,4,18,2,18,18,18,18,18,122,180,18,14,18,18,18,18,18,4,18,2,18,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,18,18,18,18,18,180,180,1,1,1,1,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Reward" 2915707170 273 [8,8,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,4,4,0,8,8,9,8,8,4,4,4,4,4,0,4,8,11,10,8,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,10,10,4,14,14,14,14,14,14,74,180,14,10,14,14,14,14,14,4,14,2,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,14,14,14,14,180,180,1,1,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key" 2698223830 206 [232,232,494,494,500,502,36,36,40,42,92,92,1398,1398,1416,232,1416,494,1416,504,1416,36,1416,44,1416,92,1416,1416,1416,1416,1416,1576,1878,1416,1398,1416,1416,1416,1418,1418,4,1418,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1418,1418,1418,1418,1878,1878,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Child" 2979701007 257 [40,40,40,32,8,32,32,8,8,8,8,0,8,8,76,76,76,64,12,64,64,64,2,62,2,2,62,62,64,12,12,12,12,0,12,12,42,42,42,26,16,26,26,26,4,22,4,4,22,22,22,6,16,6,6,16,16,22,26,16,16,16,16,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,242,242,242,14,228,14,14,228,228,228,114,114,114,114,114,114,114,112,2,112,112,2,2,2,2,0,2,2,0,0,0,0,0,0,0,4,4,4,2,2,2,2,2,2,2,0,2,0,0,2,2,0,2,2,404,494,356,240,38,2,0,494,494,494,494,494,203,202,202,200,202,202,202,202,112,112,112,112,112,112,112,112,112,90,90,202,202,293,292,292,288,288,288,288,130,130,130,288,14,274,14,274,288,288,966,967,966,966,966,288,288,288,288,288,288,288,276,292,292,292,292,292,292,494,494,400,400,400,400,400,494,494,494,496,496,496,736,1416,496,494,496,496,496,498,498,4,498,2,2,2,2,2,2,2,498,498,498,498,1416,1416,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.FromRecoveryPhrase" 2356692650 330 [48,182,230,0,0,0,0,6,0,6,0,6,6,6,6,6,6,0,0,0,0,6,0,6,0,6,6,6,6,6,6,6,0,0,0,0,6,0,6,0,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,6,6,6,6,6,6,6,24,24,232,208,208,206,192,206,206,208,24,0,0,0,0,0,0,0,0,0,24,24,24,0,24,24,24,24,24,24,24,24,24,24,24,24,24,232,230,216,231,230,230,230,230,230,231,230,230,230,232,232,232,238,238,238,238,238,238,238,238,238,238,238,240,1416,238,232,238,238,238,240,240,8,240,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,240,240,240,240,1416,1416,1,1,0,0,0,0,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Hash" 1610740920 131 [40,40,28,18,16,14,40,40,28,12,28,28,28,28,28,0,0,28,28,12,12,0,12,12,12,12,12,0,0,12,12,40,42,4,42,38,12,38,26,2,26,24,10,24,14,2,14,12,2,12,10,2,10,8,2,8,6,2,6,4,2,4,42,42,42,42,42,42,40,40,40,40,40,40,42,42,42,40,40,40,40,0,40,40,40,40,40,40,40,40,40,40,40,40,40,40,42,42,42,44,44,44,1322,1416,44,44,44,44,44,46,46,4,46,2,2,2,2,2,2,2,2,2,46,46,46,46,1416,1416,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Inspect" 1549134954 119 [36,36,36,36,36,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,36,34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,36,36,18,18,36,36,36,36,36,36,36,36,38,38,1278,1416,38,36,38,38,38,40,40,4,40,2,2,2,2,2,2,2,40,40,40,40,1416,1416,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Public" 3507627606 119 [446,54,500,502,28,4,32,502,470,206,4,210,470,260,164,20,184,260,76,22,10,32,76,44,0,2,2,44,42,14,2,16,42,26,6,6,12,26,14,4,4,8,14,6,2,2,4,6,502,502,502,502,502,502,500,500,500,500,500,500,500,500,500,502,502,502,500,500,500,500,446,446,54,54,500,500,500,500,500,500,500,500,500,500,502,502,504,504,504,504,1240,1416,504,504,504,504,504,506,506,4,506,2,2,2,2,2,2,2,2,2,506,506,506,506,1416,1416,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.WalletId" 2824671006 154 [44,44,40,40,36,44,44,22,22,22,22,22,22,22,0,0,22,22,22,22,0,22,22,22,22,22,0,0,22,22,44,44,44,40,36,44,44,22,22,22,22,22,22,22,22,22,0,22,22,22,0,22,44,92,88,84,80,76,62,92,92,92,92,92,44,44,44,44,44,44,44,44,44,30,44,44,28,28,44,44,0,0,44,44,44,30,44,44,28,16,28,28,28,28,28,16,16,44,44,44,44,44,44,92,92,92,94,94,94,94,94,94,94,1416,1416,94,92,94,94,94,96,96,4,96,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,96,96,96,96,1416,1416,0,0,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.RecoveryPhrase" 2107021108 27 [134,134,134,134,158,134,158,158,158,158,158,160,1878,158,134,158,158,158,160,160,4,160,160,160,1878,1878,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.RecoveryPhrase.Generate" 2525986943 62 [135,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,124,124,124,124,124,134,134,134,134,134,134,134,134,134,134,156,156,156,158,158,156,134,156,156,156,158,158,24,158,158,158,158,158,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script" 3334708401 221 [32,32,36,36,30,30,98,98,122,32,122,36,122,30,122,122,122,122,122,1878,1878,122,98,122,122,122,124,124,2,124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,124,124,124,1878,1878,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script.Hash" 1232897266 82 [32,32,32,32,32,32,32,32,32,32,42,42,42,42,122,42,32,42,42,42,42,42,10,42,2,42,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,42,42,42,42,42,122,122,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script.Preimage" 779988514 118 [30,30,30,30,30,30,30,30,40,40,40,122,122,40,30,40,40,40,40,40,10,40,2,40,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,40,40,40,40,40,122,122,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script.Validation" 2614079390 259 [0,32,32,36,36,14,14,14,14,14,14,14,22,22,22,36,36,36,40,40,40,40,40,40,82,122,40,36,40,40,40,40,40,4,40,2,40,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,40,40,40,40,40,122,122,0,0,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Version" 55342227 40 [6,6,6,6,6,6,6,6,6,6,6,6,6,6,2,2,1884,4,1884,6,1884,2,1884,1884,1884,1884,1880,1880,1880,2,2,2,4,4,1880,1880,1880,1880,1884,1884],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Credential" 359776283 63 [8,8,8,22,22,22,26,26,26,4,4,4,4,4,4,4,4,26,28,28,28,4,4,4,22,24,24,24,28,4,4,8,10,10,10,10,28,2,6,6,6,28,0,4,4,4,28,4,4,28,28,28,28,30,30,6,30,2,30,30,30,30,30],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Derivation" 4233941320 303 [84,84,84,84,0,0,0,0,0,84,84,84,76,76,76,76,34,0,0,0,0,0,0,34,76,0,42,42,42,84,84,8,10,10,4,4,4,4,4,4,0,0,4,10,10,26,28,28,4,4,4,4,0,0,4,28,28,38,40,40,32,32,20,30,0,2,32,40,40,16,16,16,86,86,34,86,6,86,4,86,86,86,86,86,86,0,0,0,0,0,0,0,0,0,0,0,0,0,5238,5238,5238,5238,0,5238,0,0,0,0,0,0,5238,5238,0,5238,5236,5236,5236,5236,5238,5238,508,508,508,5108,5108,5108,2,2,2,0,0,0,0,0,0,0,0,0,2,2,2,1878,1878,1878,1878,0,1878,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1878,1878,0,0,1878,1878,2,2,1880,1880,1880,1880,1878,1878,1878,1878,1880,1880,2,0,0,0,0,0,0,0,0,0,2,2,2,2,2,1882,1882,1882,1882,1880,1880,1880,1880,1880,1880,1882,1882,3762,3762,3762,1882,1880,1882,1882,1882,1882,1880,1880,0,1880,1880,1880,3764,1346,1346,1346,1346,1346,1346,2560,2560,2560,1346,1214,1346,1346,1346,1346,1214,1214,0,1214,1214,2560,506,506,506,506,506,506,174,200,200,200,200,200,200,908,908,908,906,508,508,508,908,908,908,908,908,908,506,506,524,524,6,524,4,524,0,0,0,0,524,524,524,524,524,524,1396,1396,1,3,1,1,1281,2,2,1,3,1,1,3,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Discrimination" 2486305075 237 [4,4,4,4,4,4,0,0,10,10,10,10,10,0,0,14,14,14,14,14,12,2,12,12,12,2,2,2,0,2,0,0,0,2,2,2,0,2,0,0,0,2,2,2,0,2,0,0,0,2,2,2,0,2,0,0,0,0,0,0,18,18,18,6,12,6,6,12,12,12,6,6,6,6,6,6,6,0,6,0,0,6,6,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,32,32,8,8,8,8,8,8,8,8,8,60,36,68,68,68,32,32,32,68,68,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,6,2,0,4,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,68,68,74,74,14,74,74,74,6,6,6,6,6,6,74,0,0,0,0,0,0,74,74,74,74,74,74,74,36,36,36,36,36,36,4,4,4,32,32,36,36],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Format" 1387670618 12 [2,2,44,44,44,44,40,44,44,44,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.MnemonicSize" 1618419563 66 [34,34,34,34,34,32,32,32,32,32,32,32,32,32,32,32,12,12,20,20,20,20,20,20,20,20,20,20,20,32,32,32,32,156,156,34,156,22,156,2,156,124,156,2,156,0,0,156,156,156,156,156,156,156,156,156,165,32,32,1,1,175,129,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Public" 1514428122 16 [450,450,450,450,450,504,504,504,504,504,504,450,504,504,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Script" 1987464891 95 [0,28,28,28,28,28,28,28,94,94,30,94,2,94,2,94,94,94,94,94,94,16,16,94,94,18,94,2,94,2,94,94,94,94,94,94,16,16,16,16,16,40,40,40,40,40,40,16,40,40,4,4,4,4,6,6,2,2,2,2,0,0,2,6,6,0,0,0,0,0,0,0,0,0,0,0,0,18,120,120,120,120,120,116,116,168,168,34,168,10,168,168,168,168,168],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Style" 2313938309 234 [24,24,238,238,30,238,6,238,2,238,238,238,238,238,238,30,30,238,2,238,238,238,238,30,30,238,2,238,238,238,238,238,238,238,0,238,238,238,24,24,24,0,24,0,0,24,24,24,6,18,6,6,18,18,18,6,12,6,6,12,12,12,6,6,6,6,6,6,6,0,6,0,0,6,6,6,6,0,6,6,0,0,0,0,24,0,0,0,0,24,24,24,24,24,2,2,2,2,2,2,2,2,2,2,24,24,238,238,30,238,6,238,2,238,238,238,238,238,238,6,6,6,6,6,6,6,6,6,6,236,236,236,14,14,64,64,104,106,48,48,4,4,4,4,4,236,236,236,236,238,238,6,238,2,238,0,0,238,238,238,238,238,238,192,6,6,18,18,216,216,14,14,14,14,14,14,14,14,64,64,64,64,64,64,64,64,64,64,64,64,104,104,104,104,104,104,104,104,104,104,104,104,48,48,48,48,48,48,48,48,48,48,48,48,230,230,1,1,1,1,1,1,1,1,1,25,1,1,25,13,1,1,6,6],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Paths_cardano_addresses_cli" 331517401 72 [1,0,1,0,1,0,1,0,1,0,1,0,7,7,7,7,7,7,6,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/System.IO.Extra" 4051149025 533 [24,24,24,2,2,7764,7764,2,2,2,2,2,7764,7764,2,19200,19200,19200,7764,11436,7764,0,7764,7398,7398,7398,7764,7764,7764,7764,7764,7764,11436,11436,0,5614,11418,11418,11418,11418,11370,11436,11436,11436,11436,302,2,19600,384,400,400,400,400,400,400,170,170,170,170,170,170,170,170,170,170,170,170,1550,1550,1550,1550,1550,36,36,36,36,36,36,36,7308,7308,1310,7308,7308,7308,7308,6,6,6,6,6,6,6,6,6,6,6,0,0,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,6,6,6,6,232,232,232,232,232,232,232,232,232,232,232,2,2,230,230,232,232,232,14,7320,7334,7334,7334,7334,52,52,52,52,1262,7260,7260,7260,7260,0,7260,7260,7260,7248,7248,7248,7248,52,52,52,52,52,52,52,52,7248,7020,7196,7196,7196,7260,7260,2502,2502,2502,2500,2500,0,0,2500,2500,2500,2500,2500,2502,2502,2024,2024,2024,2024,2024,0,0,2000,2024,2024,2024,2024,2024,2024,2530,2530,2530,2530,2530,1272,1272,2530,1150,1258,1258,1258,1258,1254,1268,1272,1272,1272,0,0,2530,2530,2530,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,18,18,18,18,18,58,68,68,68,68,68,68,68,68,68,4,4,4,44,46,0,46,46,46,46,12,12,12,4,6,68,68,68,0,0,0,0,0,0,0,0,0,0,0]] \ No newline at end of file +Tix [TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address" 1037457084 149 [1292,1292,1292,1292,0,1292,1292,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1292,1292,1292,1292,1292,1292,0,1292,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1292,1418,1418,1418,1418,1418,462,956,462,956,1418,1418,24,1436,1526,1526,24,1526,1526,1526,1418,1418,1418,1418,1418,26,26,26,26,26,26,26,138,138,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,2,2,2,2,2,2,36,36,1,1,1,1,1,1,4494,4494,807,1,1,57,1,1,1,1,1,1,1,1,1,1441,1,1,1,1,1,438,438,438,438,74,75,74,74,75,74,74,75,74,74,74,74],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Compat" 1766416135 3 [0,1896,1896],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Derivation" 1687779922 197 [12,12,510,510,7512,7512,7512,7512,7510,7510,7510,7510,7512,7508,2,7508,7508,7508,2,2,0,2,7512,4,4,4,4,4,2,2,0,212,212,44,44,44,44,102,102,102,102,7226,7226,7226,7226,7226,4424,4424,4424,4424,1916,2002,2002,2002,2002,14990,14990,14990,14990,14990,14990,200,200,2,200,200,5276,5276,544,544,544,544,544,544,544,544,544,544,10188,10188,10188,10188,10188,10188,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,0,3972,0,3972,3972,0,844,3972,3972,844,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,3972,0,0,0,28,28,28,28,28,28,0,28,0,28,28,0,28,28,28,28,28,5706,5706,7274,7274,5470,5470,5470,5470,5470,5470,594,594,594,594,17202,17202,1,401,1,1,1,1,1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Internal" 74252912 48 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,26,58,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Script" 1256471403 1234 [0,2,1128,1128,1128,0,0,1128,1128,0,0,1128,1128,1128,1128,2,2,2,2,2,2,2,2,2,2,2,2,30,25108,25108,25108,25108,25108,0,2,2,566,2,566,566,2,2,2,0,2,2,1118,2,1118,1118,2,2,2,0,3820,3802,2,3802,2,2686,2,2686,2686,2684,2,2684,2686,3802,3802,3820,3820,0,6174,2,6156,2,6156,6156,6156,6174,6174,0,8860,2,8842,2,8842,8842,8842,8860,8860,38728,38728,8852,8852,6170,6170,3820,3820,1136,1136,584,584,38728,38728,34,34,38728,38728,0,0,0,0,0,0,0,8,36,4,4,4,4,4,0,34,34,0,0,0,0,0,0,0,0,0,74,64,700,6,6,4,134,134,106,0,16,12,134,134,4,56,56,48,0,8,8,8,0,0,0,0,56,56,4,18,18,8,8,8,0,0,0,10,18,18,6,6,6,8,8,160,250,160,160,160,160,160,160,160,160,160,0,190,44,44,44,44,4,18,44,26,26,26,2,6,26,20,20,20,2,2,20,18,18,18,2,2,18,4,16,16,44,64,64,64,4,8,64,56,56,56,0,0,56,56,56,56,2,4,56,4,52,52,64,82,82,82,82,4,8,82,74,74,74,74,74,74,74,4,4,74,70,70,70,2,12,70,58,58,58,4,10,58,4,48,48,82,0,10,0,10,14,14,3594,2,418,418,6,500,500,524,2502,2502,2496,6,2496,6,2502,24,524,524,524,524,122,104,34,34,390,390,390,2,14,390,390,292,292,282,282,282,282,44,72,72,72,282,292,292,36,32,14934,15430,15436,15436,2796,2804,2806,2806,2806,12188,12182,12188,982,982,1118,1118,1136,1136,260,256,15476,15476,6092,6092,6092,6092,6092,32,38,284,284,284,32,284,284,284,2,2,284,278,222,278,278,278,278,278,278,278,6,180,278,98,98,94,94,94,94,30,38,38,38,94,284,284,2,2,2,2,864,10,212,864,864,206,206,206,206,206,210,210,210,210,210,220,2,2,220,220,220,220,26,244,250,250,250,2,220,220,220,2,210,210,210,2,208,208,208,208,208,208,2,206,206,206,206,2,20,20,20,20,250,250,0,0,0,0,0,0,0,11888,3068,2,3068,3068,3068,3068,2856,2,2856,2856,2856,2856,2848,2,2848,2848,2848,2848,3116,2,3116,3116,3116,11888,11888,9088,9088,9088,9088,0,9088,0,9088,9088,0,9088,8944,9072,9072,9088,9088,12190,12190,12190,12190,12190,9078,9078,9078,3362,3362,3362,9078,3362,5716,3220,3362,3362,3362,5716,5716,5716,2862,2862,2862,5716,2862,2854,2860,2862,2862,2862,2854,2854,2854,0,0,0,2854,0,2854,0,0,0,0,2854,2854,2854,0,0,0,2854,0,2854,0,0,0,0,2854,2854,2854,2848,2848,2848,2854,2848,6,2848,2848,2848,2848,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,6,2,2,2,6,0,6,0,0,0,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,6,6,6,0,0,0,6,0,6,0,0,0,0,0,0,0,0,6,6,0,6,9078,12266,12266,12266,12266,3116,3116,3116,3116,0,3116,3116,3116,3116,3116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3116,0,0,9150,9150,9150,9150,0,9078,9078,9078,0,9078,9078,9078,9078,9078,0,9072,9072,9072,9078,9150,12266,12266,2,2,2,2,0,2,0,2,2,0,2,2,2,2,2,134,134,134,134,0,134,134,134,134,0,0,0,0,0,0,0,0,134,290,290,290,290,290,290,290,290,290,126,60,60,134,134,134,134,134,134,134,144,144,144,144,144,144,60,60,60,258,258,258,28,28,28,50,58,58,58,18,18,18,32,32,32,32,26,26,26,44,44,44,44,44,44,44,44,44,44,6,6,6,12,12,12,12,12,12,6,6,6,12,12,12,12,12,12,64,64,126,126,126,126,126,126,126,126,34,34,34,34,34,34,6056,6056,0,0,0,0,0,0,0,0,42,0,86,32,64,10,0,0,0,376,0,0,0,0,0,0,12038,0,0,0,0,0,0,25994,0,0,0,0,0,0,0,0,0,0,0,400,2,0,0,0,2,0,0,2,0,0,46752,0,2,0,0,0,2,2,2,2,2,2,2,2,16,2,16,16,2,16,16,2,16,16,16,16,16,8,8,4,4,0,0,2,2,2,2,16,16,0,0,4,4,18,34,34,15398,34,15398,15398,15398,2,2,2,2,0,2,400,400,0,0,400,400,400,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,1128,2,400,400,2,2,2,0,2,2,400,2,400,400,2,400,2,400,400,2,2,2,400,400,400,400,400,2,2,2,1128,1128,1128,1128,1128,1128,400,2,2,2,2,400,400,400,400,400,400,400,400,400,400,400,400,23330,23330,17988,17988,17988,17988,23330,23330,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23330,0,23330,23330,23330,0,2,19116,19116,19116,19116,19116,19116,19116,19116,19116,19116,19116,19116,19116,0,0,19116,19116,19116,19116,19116,19116,0,0,19116,0,0,19116,2,2,2,2,2,2,2,30,30,30,30,29876,29876,2350,2350,2350,2350,2350,2350,2350,2682,2682,2682,2682,2682,2682,2682,2684,2684,2684,2684,2684,2684,2684,2684,2684,2684,2684,2684,552,552,552,552,552,550,550,550,550,550,38694],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Script.Parser" 1852398392 194 [32,10,10,10,32,32,32,32,32,50,48,48,48,50,50,50,50,50,60,60,60,26,150,150,60,60,60,60,60,22,138,138,60,60,30,30,30,30,30,30,30,6102,6102,6102,6102,6102,6102,6102,6102,30,30,122,21578,21578,17152,17152,1054,1054,1054,17152,21578,122,122,378,378,378,0,0,42,284,284,300,378,122,122,150,150,150,50,608,608,288,288,608,1074,1074,150,150,150,28,292,618,618,1214,1214,112,112,112,1782,872,872,104,104,872,9764,112,112,1772,1772,1772,872,872,150,150,150,36,292,556,556,1320,1320,272,1300,268,1190,280,1066,856,60,60,60,856,1066,1190,1300,1300,5992,5992,5992,5992,6,6,450,450,450,450,6,450,450,6,6,538,538,538,538,6,538,538,2,540,540,540,2,2,540,540,540,540,2,540,540,540,540,2,104,104,104,104,6,118,118,118,118,7742,364,364,364,364,342,342,18,22,364,364],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Byron" 107455215 381 [1,424,18,18,424,424,424,424,424,424,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,12,12,12,12,12,12,418,0,408,408,426,426,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,26,24,24,26,26,13,13,4,4,4,0,0,4,4,4,4,4,0,4,4,4,2,2,2,2,2,2,4,4,4,6,6,6,4,6,6,6,6,6,10,10,10,2,10,10,10,10,10,0,6,6,6,6,6,0,0,6,6,6,6,6,6,6,6,6,6,2,2,2,2,2,2,4,4,4,6,6,0,2,4,4,4,4,4,4,4,4,4,4,4,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,4,4,1,1,1,1,1,1,1,1,15,15,15,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1230,1230,812,812,1220,1220,400,0,1,1,1,1,1,1,1,1,0,0,0,0,4,4,4,4,4,4,4,4,4,4,2,2,4,4,4,4,4,4,4,4,4,4,2,2,4,4,4,4,0,4,4,4,4,4,4,0,0,0,0,0,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,0,0,14,14,2,2,309,309,413,413,413,413,413,413,413,413,413,413,413,309,309,309,309,309,309,309,105,105,105,105,105,413,413,413,413,413,413,413,413,413,413,413,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,801,801,425,425,425,425,425,1,1,1,1,1,1,1,1,1,425,425,425,425,425,425,425,409,409,1,417,425,425,1,1,1,3,3,3],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Icarus" 398395003 398 [2,2,2,2,2,2,2,6,6,6,6,6,1,6,2,2,6,6,6,6,6,1,1,6,6,6,6,1,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,10,2,10,10,10,10,2,10,10,10,10,10,4,6,4,4,4,4,6,6,6,10,10,1,6,6,6,6,6,6,2,6,6,6,6,6,6,6,2,2,2,6,6,6,6,6,6,6,6,6,1,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,2,2,2,2,12,12,0,0,2,2,2,2,2,2,2,2,2,2,13,13,8,8,8,2,8,8,8,8,8,0,12,12,12,12,12,12,12,0,0,2,8,8,8,8,8,0,8,8,8,8,8,6,8,6,8,8,8,6,2,0,6,2,2,2,2,8,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,65,65,2,500,384,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,548,548,872,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,1,201,2,2,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,3,819,3,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,673,673,673,673,673,673,673,673,673,673,673,673,673,673,14,14,2,2,309,309,485,485,309,309,309,15,485,485,485,485,485,485,485,485,485,485,485,1,1,1,1,1,1,1,1,1,1,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,877,877,877,877,877,1,1,1,1,1,1,1,1,1,877,877,877,877,877,877,877,877,877,1,1],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Shared" 878885600 101 [2,2,10,10,2,2,2,2,2,10,10,28,28,28,28,28,28,28,28,28,0,28,28,28,28,12,16,28,28,28,28,28,0,0,28,28,0,0,0,0,2,200,2,200,200,200,2,2,2,2,2,202,2,202,202,202,2,2,2,2,2,2,0,0,50,50,58,58,810,0,0,400,400,400,400,400,400,400,400,602,602,602,602,602,602,602,410,410,410,410,410,410,410,650,650,650,650,650,650,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Address.Style.Shelley" 239121521 1081 [0,0,0,0,0,0,0,1312,4,8,0,60,60,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,1292,0,0,2166,2166,2166,0,0,0,0,0,0,0,0,0,2166,2166,2166,2166,2166,2166,2,2,2,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,2026,0,0,2,2,0,0,10,10,10,14,14,18,18,0,0,32,32,32,6,6,6,82,82,82,78,4,78,78,78,78,78,78,4,4,0,4,0,0,4,82,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,11,17,17,17,17,17,17,17,17,17,17,11,1249,1249,1249,1249,1249,1249,1249,1249,1249,1249,11,21,21,21,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1285,1285,1450,1450,80,1450,1450,1450,1450,1450,1450,1450,436,436,436,436,42,442,442,1434,1434,1434,1452,1452,1452,1452,1452,1452,1450,2,1450,436,436,306,1434,1450,1450,2,2,0,2,2,2,2,2,2,1452,2,0,2,2,4,4,4,4,4,4,4,4,4,80,80,80,74,74,0,6,0,0,80,80,436,436,436,436,42,42,42,42,42,436,436,436,436,436,436,436,1438,232,232,232,232,232,230,2,226,12,226,226,226,226,226,226,230,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,0,2,0,0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,0,0,0,0,0,0,0,0,0,80,80,80,80,0,80,80,74,74,74,74,74,74,74,74,74,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1076,1076,1076,1072,4,110,4,110,110,110,1072,6,6,6,2,4,2,2,2,2,2,2,18,18,18,18,0,18,18,18,18,18,18,18,16,16,16,6,10,6,6,6,6,6,6,6,2,2,30,1438,1438,1450,1450,0,2,12,12,12,4,4,6,10,10,10,12,2,436,1438,1438,1438,1450,1450,1452,1452,1450,1452,1452,0,0,0,0,0,0,0,0,0,2,1362,396,1362,1398,0,1398,1398,1398,1398,484,484,484,484,484,484,484,484,0,966,966,966,966,0,0,0,0,966,966,966,966,966,966,28,966,966,966,966,966,966,966,28,28,28,4,4,28,966,966,966,966,966,966,4,4,4,4,4,966,962,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,962,966,966,465,465,465,465,465,465,465,465,476,476,476,476,476,476,476,476,476,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,4,4,4,4,8,8,1,1,3,3,224,224,224,224,224,224,224,0,0,0,0,0,0,0,1,1,1,1,105,105,2,736,598,1140,2,2,2,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,1670,0,0,0,0,0,0,0,0,0,0,600,600,600,600,600,600,600,600,600,600,600,600,600,400,400,2,76,2,58,2,82,2,400,400,1450,1450,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1944,1944,1856,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,0,1,201,1,1,1,1,1,2,2,1,201,0,0,0,0,0,0,442,442,442,442,0,442,442,6,6,6,6,6,442,42,2,4,442,442,442,436,2,4,442,442,442,442,442,442,442,442,436,436,2,2,4,4,442,442,442,442,442,442,442,442,442,250,74,324,670,62,670,670,670,670,42,42,42,42,42,42,42,42,670,670,670,670,670,42,670,62,670,670,670,670,2180,36,74,74,324,436,436,436,436,436,112,324,436,436,436,436,436,436,436,436,436,40,74,74,74,74,74,436,324,436,436,410,16,436,436,244,30,436,436,8,8,436,436,8,8,436,436,0,0,436,436,436,436,436,436,436,436,436,436,8,8,0,0,1425,1425,1425,1425,1425,1425,1425,1261,1261,1261,1261,1261,1261,1261,6,6,34,34,201,201,201,201,201,201,201,1517,1517,1517,1517,1517,1517,1,1],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Codec.Bech32.Prefixes" 3504711499 135 [32,32,32,12,12,12,46,46,46,14,14,14,26,26,26,118,118,118,62,62,62,62,62,62,26,26,26,34,34,34,0,0,0,20,20,20,188,188,188,18,18,18,0,0,0,2,2,2,168,168,168,120,120,120,0,0,0,2,2,2,50,50,50,42,42,42,0,0,0,26,26,26,132,132,132,112,112,112,0,0,0,74,74,74,1316,1316,1316,170,170,170,0,0,0,4,4,4,972,972,972,564,564,564,0,0,0,4,4,4,488,488,488,412,412,412,0,0,0,92,92,92,4,4,4,4,4,4,68,68,68,24,24,24,40,40,40],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Codec.Cbor" 1482737417 388 [0,0,0,0,0,0,0,408,408,408,408,408,408,10,12,66,66,12,66,66,66,622,622,622,622,622,622,0,0,0,0,622,622,4,4,4,4,4,4,210,4,4,4,4,210,210,210,210,210,0,0,0,0,0,0,0,0,210,4,4,8,8,8,8,8,8,10,434,8,434,10,10,8,8,12,12,6,6,6,6,12,12,4,6,2,4,4,0,0,2,2,4,4,12,8,8,12,12,26,26,26,26,26,26,26,26,2,2,26,22,22,12,12,2,2,400,400,400,400,400,400,400,400,0,0,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,2,2,18,18,412,412,412,412,412,412,6,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,0,202,412,210,210,412,412,6,412,412,412,4,210,210,210,210,4,4,412,412,412,6,6,412,412,412,412,412,412,0,0,0,0,0,0,0,412,412,412,2,2,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,8,8,8,8,8,612,1,0,0,0,0,0,612,612,612,612,612,612,612,612,612,14,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,14,612,612,612,612,612,612,612,612,612,14,14,14,612,612,612,612,612,612,612,2,2,2,616,616,616,616,616,616,616,616,1992,1992,1992,1992,1992,1992,1992,1992,1992,1992,26,26,26,26,26,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Cardano.Mnemonic" 822296837 252 [136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,234,234,234,234,232,232,232,232,2172,2172,2172,2172,2172,1334,1334,5602,5736,5736,12,2382,1502,2382,2382,2382,2382,10,1502,1502,1502,1502,1502,6,1492,1492,1492,1492,1474,1218,1480,1486,2382,2382,184,184,1,1,1,146,146,146,146,1,146,146,146,146,146,146,146,146,146,146,146,146,14,14,4678,4678,1346,1346,1,3,11,7,13,1,13,1,1,0,1207,1,1,26,1,14,28,28,2,2,14,1,14,14,14,16,1,16,16,16,16,16,16,16,2,14,2,2,2,2,2,2,2,2,2,2,2,2,2,0,2,0,2,2,2,2,2,2,2,2,2,2,14,14,14,14,8,6,8,6,14,16,16,6,6,6,866,866,866,866,866,8,8,8,998,998,998,998,998,998,8,16,866,866,128,132,998,998,2,1,2,2,2,2,2,8,2,0,12,12,12,12,12,260,1146,1146,1146,1146,1146,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Codec.Binary.Encoding" 3457117180 179 [0,0,412,412,412,412,412,412,412,412,2,2,0,0,14,14,0,4,8,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,14,14,14,8836,14,8836,8836,8836,8836,8836,8836,0,0,8814,7332,8814,8814,8814,8814,8814,8814,8836,8836,8836,6,6,6,122,122,122,14,14,14,14,14,14,18,18,18,12,12,18,18,48,48,48,48,58,58,66,66,66,62,56,56,62,62,62,62,62,62,62,66,66,66,66,1200,1200,1200,1200,1198,1198,1198,1198,1200,58,66,66,66,62,62,62,62,62,54,54,60,60,60,46,48,48,46,48,48,48,48,2,46,46,66,66,60,60,60,60,70,70,70,4,4,4,4,4,4,70,70,70,66,70,18,70,70,24242,5288,5288,5288,500,500,500,18454,18454,18454,18454,18454,18454,18454,24242,24242,3,1,0,0],TixModule "cardano-addresses-3.12.0-CMg5FutS6uC5Nbm8GgoOFv/Data.Word7" 1592447893 112 [800,1000,1000,1000,1000,1000,2,1000,1000,1000,1000,1000,1000,1000,1000,1000,800,800,800,1000,2,2,2,2,2,2,2,690,690,690,690,690,690,690,4,4,4,4,200,200,4726,4726,4726,4726,4726,6110,6110,6110,1852,4258,1852,1852,1852,1852,1852,1852,4258,4258,0,4258,4258,4258,4258,4258,4258,4258,4258,4258,6110,10,10,10,10,0,0,1652,1652,3458,3458,3458,3458,3458,3458,3458,5110,10,10,10,10,4,732,732,732,268,268,268,292,292,422,422,422,440,732,4,4,4,4,4,4,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command" 2837671699 108 [5676,5676,5676,5676,5676,5676,5676,5676,5676,1892,1892,1892,1892,1892,1892,1892,166,1798,134,134,1406,1406,154,154,98,98,6,1798,1798,1798,1892,1892,134,1886,1406,1886,154,1886,98,1886,1886,1886,1886,1892,1892,1892,1892,1892,1892,1892,2,1892,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1892,1892,1892,1892,1892,1892,1892,1892,1892,1892,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address" 2921150675 85 [24,24,26,26,10,10,14,24,14,14,6,56,154,154,180,24,180,26,180,10,180,24,180,14,180,56,180,180,180,180,180,1764,1886,180,154,180,180,180,182,182,2,182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,182,182,182,182,1886,1886,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Bootstrap" 1507451930 199 [25,24,24,24,24,0,24,0,0,0,0,1,0,24,24,24,24,24,25,12,12,12,12,12,12,0,0,12,13,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,12,12,24,24,24,24,24,24,24,24,24,24,24,12,12,28,2,28,28,28,16,28,28,28,28,28,28,28,180,28,24,28,28,28,28,28,4,28,2,28,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,28,28,28,28,28,180,180,1,1,1,1,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Delegation" 2168818152 193 [16,6,16,16,24,16,24,16,16,14,16,0,0,2,2,0,0,14,14,14,14,14,14,14,16,24,24,2,2,14,2,30,30,30,104,180,30,24,30,30,30,30,30,6,30,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,30,30,30,30,180,180,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Inspect" 2103012078 161 [6,54,54,56,56,54,54,54,46,46,46,46,8,8,8,8,8,8,54,56,56,2,2,6,4,4,6,2,58,58,58,58,180,180,58,56,58,58,58,58,58,2,58,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,58,58,58,58,180,180,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Payment" 1135042458 259 [24,24,24,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,8,16,8,8,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,16,16,16,8,8,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,0,8,8,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,24,24,16,8,0,24,24,25,24,24,12,12,12,12,12,0,12,24,27,26,24,0,0,0,0,0,0,0,0,0,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,26,26,26,18,32,32,32,32,32,32,60,180,32,26,32,32,32,32,32,6,32,2,32,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,32,32,32,32,32,180,180,1,1,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Pointer" 1738010238 197 [9,9,9,8,8,10,4,10,10,14,10,14,10,10,8,8,10,0,0,2,2,0,0,8,8,8,8,8,8,8,10,14,14,14,16,4,18,2,18,18,18,18,14,4,18,2,18,18,18,18,14,4,18,2,18,18,18,18,18,122,180,18,14,18,18,18,18,18,4,18,2,18,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,18,18,18,18,18,180,180,1,1,1,1,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Address.Reward" 2157032447 273 [8,8,8,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,4,4,4,4,4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,4,4,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,8,4,4,0,8,8,9,8,8,4,4,4,4,4,0,4,8,11,10,8,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,10,10,10,4,14,14,14,14,14,14,74,180,14,10,14,14,14,14,14,4,14,2,14,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,14,14,14,14,180,180,1,1,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key" 4145187011 206 [232,232,498,498,504,506,36,36,40,42,92,92,1406,1406,1424,232,1424,498,1424,508,1424,36,1424,44,1424,92,1424,1424,1424,1424,1424,1584,1886,1424,1406,1424,1424,1424,1426,1426,4,1426,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1426,1426,1426,1426,1886,1886,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Child" 2466829526 257 [40,40,40,32,8,32,32,8,8,8,8,0,8,8,76,76,76,64,12,64,64,64,2,62,2,2,62,62,64,12,12,12,12,0,12,12,42,42,42,26,16,26,26,26,4,22,4,4,22,22,22,6,16,6,6,16,16,22,26,16,16,16,16,0,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,250,250,250,14,236,14,14,236,236,236,118,118,118,118,118,118,118,116,2,116,116,2,2,2,2,0,2,2,0,0,0,0,0,0,0,4,4,4,2,2,2,2,2,2,2,0,2,0,0,2,2,0,2,2,412,498,360,240,38,2,0,498,498,498,498,498,203,202,202,200,202,202,202,202,116,116,116,116,116,116,116,116,116,86,86,202,202,297,296,296,292,292,292,292,134,134,134,292,14,278,14,278,292,292,974,975,974,974,974,292,292,292,292,292,292,292,280,296,296,296,296,296,296,498,498,408,408,408,408,408,498,498,498,500,500,500,740,1424,500,498,500,500,500,502,502,4,502,2,2,2,2,2,2,2,502,502,502,502,1424,1424,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.FromRecoveryPhrase" 2046754978 330 [48,182,230,0,0,0,0,6,0,6,0,6,6,6,6,6,6,0,0,0,0,6,0,6,0,6,6,6,6,6,6,6,0,0,0,0,6,0,6,0,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,6,0,6,6,6,6,6,6,6,24,24,232,208,208,206,192,206,206,208,24,0,0,0,0,0,0,0,0,0,24,24,24,0,24,24,24,24,24,24,24,24,24,24,24,24,24,232,230,216,231,230,230,230,230,230,231,230,230,230,232,232,232,238,238,238,238,238,238,238,238,238,238,238,240,1424,238,232,238,238,238,240,240,8,240,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,240,240,240,240,1424,1424,1,1,0,0,0,0,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Hash" 2737219398 131 [40,40,28,18,16,14,40,40,28,12,28,28,28,28,28,0,0,28,28,12,12,0,12,12,12,12,12,0,0,12,12,40,42,4,42,38,12,38,26,2,26,24,10,24,14,2,14,12,2,12,10,2,10,8,2,8,6,2,6,4,2,4,42,42,42,42,42,42,40,40,40,40,40,40,42,42,42,40,40,40,40,0,40,40,40,40,40,40,40,40,40,40,40,40,40,40,42,42,42,44,44,44,1330,1424,44,44,44,44,44,46,46,4,46,2,2,2,2,2,2,2,2,2,46,46,46,46,1424,1424,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Inspect" 2872504328 119 [36,36,36,36,36,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,36,34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,36,36,18,18,36,36,36,36,36,36,36,36,38,38,1286,1424,38,36,38,38,38,40,40,4,40,2,2,2,2,2,2,2,40,40,40,40,1424,1424,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.Public" 2395220289 119 [450,54,504,506,28,4,32,506,474,206,4,210,474,264,168,20,188,264,76,22,10,32,76,44,0,2,2,44,42,14,2,16,42,26,6,6,12,26,14,4,4,8,14,6,2,2,4,6,506,506,506,506,506,506,504,504,504,504,504,504,504,504,504,506,506,506,504,504,504,504,450,450,54,54,504,504,504,504,504,504,504,504,504,504,506,506,508,508,508,508,1248,1424,508,508,508,508,508,510,510,4,510,2,2,2,2,2,2,2,2,2,510,510,510,510,1424,1424,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Key.WalletId" 2408848647 154 [44,44,40,40,36,44,44,22,22,22,22,22,22,22,0,0,22,22,22,22,0,22,22,22,22,22,0,0,22,22,44,44,44,40,36,44,44,22,22,22,22,22,22,22,22,22,0,22,22,22,0,22,44,92,88,84,80,76,62,92,92,92,92,92,44,44,44,44,44,44,44,44,44,30,44,44,28,28,44,44,0,0,44,44,44,30,44,44,28,16,28,28,28,28,28,16,16,44,44,44,44,44,44,92,92,92,94,94,94,94,94,94,94,1424,1424,94,92,94,94,94,96,96,4,96,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,96,96,96,96,1424,1424,0,0,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.RecoveryPhrase" 2143882575 27 [134,134,134,134,158,134,158,158,158,158,158,160,1886,158,134,158,158,158,160,160,4,160,160,160,1886,1886,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.RecoveryPhrase.Generate" 1704774081 62 [135,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,124,124,124,124,124,134,134,134,134,134,134,134,134,134,134,156,156,156,158,158,156,134,156,156,156,158,158,24,158,158,158,158,158,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script" 1489712650 221 [32,32,36,36,30,30,98,98,122,32,122,36,122,30,122,122,122,122,122,1886,1886,122,98,122,122,122,124,124,2,124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,124,124,124,1886,1886,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script.Hash" 1309289273 82 [32,32,32,32,32,32,32,32,32,32,42,42,42,42,122,42,32,42,42,42,42,42,10,42,2,42,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,42,42,42,42,42,122,122,0,0,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script.Preimage" 1641105864 118 [30,30,30,30,30,30,30,30,40,40,40,122,122,40,30,40,40,40,40,40,10,40,2,40,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,40,40,40,40,40,122,122,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Script.Validation" 2830843536 259 [0,32,32,36,36,14,14,14,14,14,14,14,22,22,22,36,36,36,40,40,40,40,40,40,82,122,40,36,40,40,40,40,40,4,40,2,40,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,40,40,40,40,40,122,122,0,0,0,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Command.Version" 3986124737 40 [6,6,6,6,6,6,6,6,6,6,6,6,6,6,2,2,1892,4,1892,6,1892,2,1892,1892,1892,1892,1888,1888,1888,2,2,2,4,4,1888,1888,1888,1888,1892,1892],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Credential" 745946402 63 [8,8,8,22,22,22,26,26,26,4,4,4,4,4,4,4,4,26,28,28,28,4,4,4,22,24,24,24,28,4,4,8,10,10,10,10,28,2,6,6,6,28,0,4,4,4,28,4,4,28,28,28,28,30,30,6,30,2,30,30,30,30,30],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Derivation" 4199897000 303 [84,84,84,84,0,0,0,0,0,84,84,84,76,76,76,76,34,0,0,0,0,0,0,34,76,0,42,42,42,84,84,8,10,10,4,4,4,4,4,4,0,0,4,10,10,26,28,28,4,4,4,4,0,0,4,28,28,38,40,40,32,32,20,30,0,2,32,40,40,16,16,16,86,86,34,86,6,86,4,86,86,86,86,86,86,0,0,0,0,0,0,0,0,0,0,0,0,0,5204,5204,5204,5204,0,5204,0,0,0,0,0,0,5204,5204,0,5204,5202,5202,5202,5202,5204,5204,512,512,512,4974,4974,4974,2,2,2,0,0,0,0,0,0,0,0,0,2,2,2,1972,1972,1972,1972,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1972,1972,0,0,1972,1972,2,2,1974,1974,1974,1974,1972,1972,1972,1972,1974,1974,2,0,0,0,0,0,0,0,0,0,2,2,2,2,2,1768,1768,1768,1768,1766,1766,1766,1766,1766,1766,1768,1768,3742,3742,3742,1768,1974,1768,1768,1768,1768,1974,1974,0,1974,1974,1974,3744,1232,1232,1232,1232,1232,1232,2532,2532,2532,1232,1300,1232,1232,1232,1232,1300,1300,0,1300,1300,2532,510,510,510,510,510,510,172,200,200,200,200,200,200,912,912,912,910,512,512,512,912,912,912,912,912,912,510,510,528,528,6,528,4,528,0,0,0,0,528,528,528,528,528,528,1404,1404,1,3,1,1,1267,2,2,1,3,1,1,3,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Discrimination" 3220433048 237 [4,4,4,4,4,4,0,0,10,10,10,10,10,0,0,14,14,14,14,14,12,2,12,12,12,2,2,2,0,2,0,0,0,2,2,2,0,2,0,0,0,2,2,2,0,2,0,0,0,2,2,2,0,2,0,0,0,0,0,0,18,18,18,6,12,6,6,12,12,12,6,6,6,6,6,6,6,0,6,0,0,6,6,6,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,32,32,8,8,8,8,8,8,8,8,8,60,36,68,68,68,32,32,32,68,68,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,32,32,32,6,2,0,4,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,68,68,74,74,14,74,74,74,6,6,6,6,6,6,74,0,0,0,0,0,0,74,74,74,74,74,74,74,36,36,36,36,36,36,4,4,4,32,32,36,36],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Format" 2372657971 12 [2,2,44,44,44,44,40,44,44,44,0,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.MnemonicSize" 1212454684 66 [34,34,34,34,34,32,32,32,32,32,32,32,32,32,32,32,12,12,20,20,20,20,20,20,20,20,20,20,20,32,32,32,32,156,156,34,156,22,156,2,156,124,156,2,156,0,0,156,156,156,156,156,156,156,156,156,165,32,32,1,1,175,129,1,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Public" 3602121846 16 [454,454,454,454,454,508,508,508,508,508,508,454,508,508,1,1],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Script" 12175066 95 [0,28,28,28,28,28,28,28,94,94,30,94,2,94,2,94,94,94,94,94,94,16,16,94,94,18,94,2,94,2,94,94,94,94,94,94,16,16,16,16,16,40,40,40,40,40,40,16,40,40,4,4,4,4,6,6,2,2,2,2,0,0,2,6,6,0,0,0,0,0,0,0,0,0,0,0,0,18,120,120,120,120,120,116,116,168,168,34,168,10,168,168,168,168,168],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Options.Applicative.Style" 1086215433 234 [24,24,238,238,30,238,6,238,2,238,238,238,238,238,238,30,30,238,2,238,238,238,238,30,30,238,2,238,238,238,238,238,238,238,0,238,238,238,24,24,24,0,24,0,0,24,24,24,6,18,6,6,18,18,18,6,12,6,6,12,12,12,6,6,6,6,6,6,6,0,6,0,0,6,6,6,6,0,6,6,0,0,0,0,24,0,0,0,0,24,24,24,24,24,2,2,2,2,2,2,2,2,2,2,24,24,238,238,30,238,6,238,2,238,238,238,238,238,238,6,6,6,6,6,6,6,6,6,6,236,236,236,14,14,64,64,104,106,48,48,4,4,4,4,4,236,236,236,236,238,238,6,238,2,238,0,0,238,238,238,238,238,238,192,6,6,18,18,216,216,14,14,14,14,14,14,14,14,64,64,64,64,64,64,64,64,64,64,64,64,104,104,104,104,104,104,104,104,104,104,104,104,48,48,48,48,48,48,48,48,48,48,48,48,230,230,1,1,1,1,1,1,1,1,1,25,1,1,25,13,1,1,6,6],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/Paths_cardano_addresses_cli" 1883575283 72 [1,0,1,0,1,0,1,0,1,0,1,0,7,7,7,7,7,7,6,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0],TixModule "cardano-addresses-cli-3.12.0-4iRZ3OqQo7sC7EMxrAiFrA/System.IO.Extra" 69479557 533 [24,24,24,2,2,7402,7402,2,2,2,2,2,7402,7402,2,19246,19246,19246,7402,11844,7402,0,7402,7032,7032,7032,7402,7402,7402,7402,7402,7402,11844,11844,0,5974,11830,11830,11830,11830,11786,11844,11844,11844,11844,290,2,19646,384,400,400,400,400,400,400,166,166,166,166,166,166,166,166,166,166,166,166,1558,1558,1558,1558,1558,36,36,36,36,36,36,36,7320,7320,1322,7320,7320,7320,7320,6,6,6,6,6,6,6,6,6,6,6,0,0,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,6,6,6,6,232,232,232,232,232,232,232,232,232,232,232,2,2,230,230,232,232,232,14,7328,7342,7342,7342,7342,52,52,52,52,1270,7268,7268,7268,7268,0,7268,7268,7268,7256,7256,7256,7256,52,52,52,52,52,52,52,52,7256,7032,7204,7204,7204,7268,7268,2506,2506,2506,2504,2504,0,0,2504,2504,2504,2504,2504,2506,2506,2024,2024,2024,2024,2024,0,0,2000,2024,2024,2024,2024,2024,2024,2534,2534,2534,2534,2534,1238,1238,2534,1192,1296,1296,1296,1296,1220,1234,1238,1238,1238,0,0,2534,2534,2534,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,0,0,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,18,18,18,18,18,58,68,68,68,68,68,68,68,68,68,4,4,4,44,46,0,46,46,46,46,12,12,12,4,6,68,68,68,0,0,0,0,0,0,0,0,0,0,0]] \ No newline at end of file diff --git a/haddock/cardano-addresses-3.12.0/Cardano-Address-Derivation.html b/haddock/cardano-addresses-3.12.0/Cardano-Address-Derivation.html index 689f17485..b01c8c087 100644 --- a/haddock/cardano-addresses-3.12.0/Cardano-Address-Derivation.html +++ b/haddock/cardano-addresses-3.12.0/Cardano-Address-Derivation.html @@ -1,7 +1,7 @@ Cardano.Address.Derivation
cardano-addresses-3.12.0: Library utilities for mnemonic generation and address derivation.
Safe HaskellNone
LanguageHaskell2010

Cardano.Address.Derivation

Synopsis

Overview

These abstractions allow generating root private key, also called Master Key and then basing on it enable address derivation

Key Derivation

Types

data Index (derivationType :: DerivationType) (depth :: Depth) Source #

A derivation index, with phantom-types to disambiguate derivation type.

let accountIx = Index 'Hardened 'AccountK
 let addressIx = Index 'Soft 'PaymentK
-

Since: 1.0.0

Instances

Instances details
Bounded (Index 'Hardened depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

minBound :: Index 'Hardened depth #

maxBound :: Index 'Hardened depth #

Bounded (Index 'Soft depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

minBound :: Index 'Soft depth #

maxBound :: Index 'Soft depth #

Bounded (Index 'WholeDomain depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Eq (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

(==) :: Index derivationType depth -> Index derivationType depth -> Bool #

(/=) :: Index derivationType depth -> Index derivationType depth -> Bool #

Ord (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

compare :: Index derivationType depth -> Index derivationType depth -> Ordering #

(<) :: Index derivationType depth -> Index derivationType depth -> Bool #

(<=) :: Index derivationType depth -> Index derivationType depth -> Bool #

(>) :: Index derivationType depth -> Index derivationType depth -> Bool #

(>=) :: Index derivationType depth -> Index derivationType depth -> Bool #

max :: Index derivationType depth -> Index derivationType depth -> Index derivationType depth #

min :: Index derivationType depth -> Index derivationType depth -> Index derivationType depth #

Show (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

showsPrec :: Int -> Index derivationType depth -> ShowS #

show :: Index derivationType depth -> String #

showList :: [Index derivationType depth] -> ShowS #

Generic (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Associated Types

type Rep (Index derivationType depth) :: Type -> Type #

Methods

from :: Index derivationType depth -> Rep (Index derivationType depth) x #

to :: Rep (Index derivationType depth) x -> Index derivationType depth #

NFData (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

rnf :: Index derivationType depth -> () #

Buildable (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

build :: Index derivationType depth -> Builder

type Rep (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

type Rep (Index derivationType depth) = D1 ('MetaData "Index" "Cardano.Address.Derivation" "cardano-addresses-3.12.0-CXdZXYlvM2IBJZenPvTIY5" 'True) (C1 ('MetaCons "Index" 'PrefixI 'True) (S1 ('MetaSel ('Just "indexToWord32") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word32)))

indexToWord32 :: Index derivationType depth -> Word32 Source #

Get the index as a Word32 +

Since: 1.0.0

Instances

Instances details
Bounded (Index 'Hardened depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

minBound :: Index 'Hardened depth #

maxBound :: Index 'Hardened depth #

Bounded (Index 'Soft depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

minBound :: Index 'Soft depth #

maxBound :: Index 'Soft depth #

Bounded (Index 'WholeDomain depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Eq (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

(==) :: Index derivationType depth -> Index derivationType depth -> Bool #

(/=) :: Index derivationType depth -> Index derivationType depth -> Bool #

Ord (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

compare :: Index derivationType depth -> Index derivationType depth -> Ordering #

(<) :: Index derivationType depth -> Index derivationType depth -> Bool #

(<=) :: Index derivationType depth -> Index derivationType depth -> Bool #

(>) :: Index derivationType depth -> Index derivationType depth -> Bool #

(>=) :: Index derivationType depth -> Index derivationType depth -> Bool #

max :: Index derivationType depth -> Index derivationType depth -> Index derivationType depth #

min :: Index derivationType depth -> Index derivationType depth -> Index derivationType depth #

Show (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

showsPrec :: Int -> Index derivationType depth -> ShowS #

show :: Index derivationType depth -> String #

showList :: [Index derivationType depth] -> ShowS #

Generic (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Associated Types

type Rep (Index derivationType depth) :: Type -> Type #

Methods

from :: Index derivationType depth -> Rep (Index derivationType depth) x #

to :: Rep (Index derivationType depth) x -> Index derivationType depth #

NFData (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

rnf :: Index derivationType depth -> () #

Buildable (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

build :: Index derivationType depth -> Builder

type Rep (Index derivationType depth) Source # 
Instance details

Defined in Cardano.Address.Derivation

type Rep (Index derivationType depth) = D1 ('MetaData "Index" "Cardano.Address.Derivation" "cardano-addresses-3.12.0-CXdZXYlvM2IBJZenPvTIY5" 'True) (C1 ('MetaCons "Index" 'PrefixI 'True) (S1 ('MetaSel ('Just "indexToWord32") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Word32)))

indexToWord32 :: Index derivationType depth -> Word32 Source #

Get the index as a Word32 @since 3.3.0

indexFromWord32 :: forall ix derivationType depth. (ix ~ Index derivationType depth, Bounded ix) => Word32 -> Maybe ix Source #

Construct derivation path indices from raw Word32 values.

wholeDomainIndex :: Word32 -> Index 'WholeDomain depth Source #

Constructs a full domain Index. This can't fail, unlike fromWord32.

Since: 3.3.0

coerceWholeDomainIndex :: Index ty depth0 -> Index 'WholeDomain depth1 Source #

Upcasts an Index to one with the full Word32 domain.

Since: 3.3.0

nextIndex :: forall ix derivationType depth. (ix ~ Index derivationType depth, Bounded ix) => ix -> Maybe ix Source #

Increment an index, if possible.

Since: 3.3.0

data Depth Source #

Key Depth in the derivation path, according to BIP-0039 / BIP-0044

root | purpose' | cointype' | account' | role | address@
 0th      1st         2nd        3rd       4th     5th
 

We do not manipulate purpose, cointype and change paths directly, so there @@ -13,5 +13,5 @@ derivation scheme 2 (see cardano-crypto package for more details).

Since: 1.0.0

Instances

Instances details
HardDerivation Byron Source # 
Instance details

Defined in Cardano.Address.Style.Byron

HardDerivation Icarus Source # 
Instance details

Defined in Cardano.Address.Style.Icarus

HardDerivation Shelley Source # 
Instance details

Defined in Cardano.Address.Style.Shelley

HardDerivation Shared Source # 
Instance details

Defined in Cardano.Address.Style.Shared

class HardDerivation key => SoftDerivation (key :: Depth -> Type -> Type) where Source #

An interface for doing soft derivations from an account public key

Methods

deriveAddressPublicKey :: key 'AccountK XPub -> WithRole key -> Index 'Soft 'PaymentK -> key 'PaymentK XPub Source #

Derives address public key from the given account public key, using derivation scheme 2 (see cardano-crypto - package for more details).

This is the preferred way of deriving new sequential address public keys.

Since: 1.0.0

Low-Level Cryptography Primitives

XPrv

type XPrv = XPrv Source #

An opaque type representing an extended private key.

Properties:

Roundtripping
forall xprv. xprvFromBytes (xprvToBytes xprv) == Just xprv
Chain Code Invariance
forall xprv. xprvChainCode xprv == xpubChainCode (toXPub xprv)
Public Key Signature
forall xprv msg. verify (toXPub xprv) msg (sign xprv msg) == True

Since: 1.0.0

xprvFromBytes :: ByteString -> Maybe XPrv Source #

Construct an XPrv from raw ByteString (96 bytes).

Since: 1.0.0

xprvToBytes :: XPrv -> ByteString Source #

Convert an XPrv to a raw ByteString (96 bytes).

Since: 1.0.0

xprvPrivateKey :: XPrv -> ByteString Source #

Extract the private key from an XPrv as a raw ByteString (64 bytes).

Since: 2.0.0

xprvChainCode :: XPrv -> ByteString Source #

Extract the chain code from an XPrv as a raw ByteString (32 bytes).

Since: 2.0.0

toXPub :: HasCallStack => XPrv -> XPub Source #

Derive the XPub associated with an XPrv.

Since: 1.0.0

XPub

type XPub = XPub Source #

An opaque type representing an extended public key.

Properties:

Roundtripping
forall xpub. xpubFromBytes (xpubToBytes xpub) == Just xpub

Since: 1.0.0

xpubFromBytes :: ByteString -> Maybe XPub Source #

Construct an XPub from raw ByteString (64 bytes).

Since: 1.0.0

xpubToBytes :: XPub -> ByteString Source #

Convert an XPub to a raw ByteString (64 bytes).

Since: 1.0.0

xpubPublicKey :: XPub -> ByteString Source #

Extract the public key from an XPub as a raw ByteString (32 bytes).

Since: 2.0.0

xpubChainCode :: XPub -> ByteString Source #

Extract the chain code from an XPub as a raw ByteString (32 bytes).

Since: 2.0.0

Pub

data Pub Source #

An opaque type representing a non-extended public key.

Properties:

Roundtripping
forall pub. pubFromBytes (pubToBytes pub) == Just pub

Since: 3.12.0

Instances

Instances details
Eq Pub Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

(==) :: Pub -> Pub -> Bool #

(/=) :: Pub -> Pub -> Bool #

Show Pub Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

showsPrec :: Int -> Pub -> ShowS #

show :: Pub -> String #

showList :: [Pub] -> ShowS #

pubFromBytes :: ByteString -> Maybe Pub Source #

Construct a Pub from raw ByteString (32 bytes).

Since: 3.12.0

pubToBytes :: Pub -> ByteString Source #

Convert an Pub to a raw ByteString (32 bytes).

Since: 3.12.0

xpubToPub :: XPub -> Pub Source #

Extract the public key from an XPub as a Pub (32 bytes).

Since: 3.12.0

XSignature

type XSignature = XSignature Source #

An opaque type representing a signature made from an XPrv.

Since: 1.0.0

sign :: ByteArrayAccess msg => XPrv -> msg -> XSignature Source #

Produce a signature of the given msg from an XPrv.

Since: 1.0.0

verify :: ByteArrayAccess msg => XPub -> msg -> XSignature -> Bool Source #

Verify the XSignature of a msg with the XPub associated with the + package for more details).

This is the preferred way of deriving new sequential address public keys.

Since: 1.0.0

Low-Level Cryptography Primitives

XPrv

type XPrv = XPrv Source #

An opaque type representing an extended private key.

Properties:

Roundtripping
forall xprv. xprvFromBytes (xprvToBytes xprv) == Just xprv
Chain Code Invariance
forall xprv. xprvChainCode xprv == xpubChainCode (toXPub xprv)
Public Key Signature
forall xprv msg. verify (toXPub xprv) msg (sign xprv msg) == True

Since: 1.0.0

xprvFromBytes :: ByteString -> Maybe XPrv Source #

Construct an XPrv from raw ByteString (96 bytes).

Since: 1.0.0

xprvToBytes :: XPrv -> ByteString Source #

Convert an XPrv to a raw ByteString (96 bytes).

Since: 1.0.0

xprvPrivateKey :: XPrv -> ByteString Source #

Extract the private key from an XPrv as a raw ByteString (64 bytes).

Since: 2.0.0

xprvChainCode :: XPrv -> ByteString Source #

Extract the chain code from an XPrv as a raw ByteString (32 bytes).

Since: 2.0.0

toXPub :: HasCallStack => XPrv -> XPub Source #

Derive the XPub associated with an XPrv.

Since: 1.0.0

XPub

type XPub = XPub Source #

An opaque type representing an extended public key.

Properties:

Roundtripping
forall xpub. xpubFromBytes (xpubToBytes xpub) == Just xpub

Since: 1.0.0

xpubFromBytes :: ByteString -> Maybe XPub Source #

Construct an XPub from raw ByteString (64 bytes).

Since: 1.0.0

xpubToBytes :: XPub -> ByteString Source #

Convert an XPub to a raw ByteString (64 bytes).

Since: 1.0.0

xpubPublicKey :: XPub -> ByteString Source #

Extract the public key from an XPub as a raw ByteString (32 bytes).

Since: 2.0.0

xpubChainCode :: XPub -> ByteString Source #

Extract the chain code from an XPub as a raw ByteString (32 bytes).

Since: 2.0.0

Pub

data Pub Source #

An opaque type representing a non-extended public key.

Properties:

Roundtripping
forall pub. pubFromBytes (pubToBytes pub) == Just pub

Since: 3.12.0

Instances

Instances details
Eq Pub Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

(==) :: Pub -> Pub -> Bool #

(/=) :: Pub -> Pub -> Bool #

Show Pub Source # 
Instance details

Defined in Cardano.Address.Derivation

Methods

showsPrec :: Int -> Pub -> ShowS #

show :: Pub -> String #

showList :: [Pub] -> ShowS #

pubFromBytes :: ByteString -> Maybe Pub Source #

Construct a Pub from raw ByteString (32 bytes).

Since: 3.12.0

pubToBytes :: Pub -> ByteString Source #

Convert an Pub to a raw ByteString (32 bytes).

Since: 3.12.0

xpubToPub :: XPub -> Pub Source #

Extract the public key from an XPub as a Pub (32 bytes).

Since: 3.12.0

XSignature

type XSignature = XSignature Source #

An opaque type representing a signature made from an XPrv.

Since: 1.0.0

sign :: ByteArrayAccess msg => XPrv -> msg -> XSignature Source #

Produce a signature of the given msg from an XPrv.

Since: 1.0.0

verify :: ByteArrayAccess msg => XPub -> msg -> XSignature -> Bool Source #

Verify the XSignature of a msg with the XPub associated with the XPrv used for signing.

Since: 1.0.0

\ No newline at end of file diff --git a/haddock/cardano-addresses-3.12.0/cardano-addresses.haddock b/haddock/cardano-addresses-3.12.0/cardano-addresses.haddock index debd3629b279065d2431e9896eef9bb980787d13..fa68c87a817accc713c9c1df2e106ed37952ccb8 100644 GIT binary patch delta 179 zcmV;k08Ia{hy$^R0}amgvuGv&0GiqW0E=9)4R0SC4hI(C1Cw!0 h8IzV2Dzh7D&=>>j4C0gVav8G+f;$NTN3%nV>^LX&J*NNw delta 146 zcmV;D0B!%Vhy$;P0}amgvuGv&0GikU0E=3&4R0SA4F?w;FE~6tKfnOV0M`K70PFw& z05MP^c$0w|8?&+>lM)0P2a5%hL39g*ERtW(`vqg*SIQz;n AzyJUM diff --git a/haddock/cardano-addresses-3.12.0/src/Cardano.Address.Derivation.html b/haddock/cardano-addresses-3.12.0/src/Cardano.Address.Derivation.html index a51fb8b0a..427ed5bb1 100644 --- a/haddock/cardano-addresses-3.12.0/src/Cardano.Address.Derivation.html +++ b/haddock/cardano-addresses-3.12.0/src/Cardano.Address.Derivation.html @@ -6,161 +6,162 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} - -{-# OPTIONS_HADDOCK prune #-} - -module Cardano.Address.Derivation - ( - -- * Overview - -- $overview - - -- * Key Derivation - -- ** Types - Index - , indexToWord32 - , indexFromWord32 - , wholeDomainIndex - , coerceWholeDomainIndex - , nextIndex - , Depth (..) - , DerivationType (..) - - -- * Abstractions - , GenMasterKey (..) - , HardDerivation (..) - , SoftDerivation (..) - - -- * Low-Level Cryptography Primitives - -- ** XPrv - , XPrv - , xprvFromBytes - , xprvToBytes - , xprvPrivateKey - , xprvChainCode - , toXPub - - -- ** XPub - , XPub - , xpubFromBytes - , xpubToBytes - , xpubPublicKey - , xpubChainCode - - -- ** Pub - , Pub - , pubFromBytes - , pubToBytes - , xpubToPub - - -- ** XSignature - , XSignature - , sign - , verify - - -- Internal / Not exposed by Haddock - , DerivationScheme (..) - , deriveXPrv - , deriveXPub - , generate - , generateNew - , hashCredential - , hashWalletId - , credentialHashSize - , unsafeMkIndex - ------------------ - ) where - -import Prelude - -import Cardano.Crypto.Wallet - ( DerivationScheme (..) ) -import Cardano.Mnemonic - ( SomeMnemonic ) -import Control.DeepSeq - ( NFData ) -import Crypto.Error - ( eitherCryptoError ) -import Crypto.Hash - ( hash ) -import Crypto.Hash.Algorithms - ( Blake2b_160 (..), Blake2b_224 (..) ) -import Crypto.Hash.IO - ( HashAlgorithm (hashDigestSize) ) -import Data.ByteArray - ( ByteArrayAccess, ScrubbedBytes ) -import Data.ByteString - ( ByteString ) -import Data.Coerce - ( coerce ) -import Data.Either.Extra - ( eitherToMaybe ) -import Data.Kind - ( Type ) -import Data.String - ( fromString ) -import Data.Word - ( Word32 ) -import Fmt - ( Buildable (..) ) -import GHC.Generics - ( Generic ) -import GHC.Stack - ( HasCallStack ) - -import qualified Cardano.Crypto.Wallet as CC -import qualified Crypto.ECC.Edwards25519 as Ed25519 -import qualified Data.ByteArray as BA -import qualified Data.ByteString as BS - --- $overview --- --- These abstractions allow generating root private key, also called /Master Key/ --- and then basing on it enable address derivation - --- --- Low-Level Cryptography Primitives --- - --- | An opaque type representing an extended private key. --- --- __Properties:__ --- --- ===== Roundtripping --- --- @forall xprv. 'xprvFromBytes' ('xprvToBytes' xprv) == 'Just' xprv@ --- --- ===== Chain Code Invariance --- --- @forall xprv. 'xprvChainCode' xprv == 'xpubChainCode' ('toXPub' xprv)@ --- --- ===== Public Key Signature --- --- @forall xprv msg. 'verify' ('toXPub' xprv) msg ('sign' xprv msg) == 'True'@ --- --- @since 1.0.0 -type XPrv = CC.XPrv - --- | An opaque type representing an extended public key. --- --- __Properties:__ --- --- ===== Roundtripping --- --- @forall xpub. 'xpubFromBytes' ('xpubToBytes' xpub) == 'Just' xpub@ --- --- @since 1.0.0 -type XPub = CC.XPub - --- | An opaque type representing a signature made from an 'XPrv'. --- --- @since 1.0.0 -type XSignature = CC.XSignature - --- | Construct an 'XPub' from raw 'ByteString' (64 bytes). --- --- @since 1.0.0 -xpubFromBytes :: ByteString -> Maybe XPub -xpubFromBytes :: ByteString -> Maybe XPub +{-# LANGUAGE TypeOperators #-} + +{-# OPTIONS_HADDOCK prune #-} + +module Cardano.Address.Derivation + ( + -- * Overview + -- $overview + + -- * Key Derivation + -- ** Types + Index + , indexToWord32 + , indexFromWord32 + , wholeDomainIndex + , coerceWholeDomainIndex + , nextIndex + , Depth (..) + , DerivationType (..) + + -- * Abstractions + , GenMasterKey (..) + , HardDerivation (..) + , SoftDerivation (..) + + -- * Low-Level Cryptography Primitives + -- ** XPrv + , XPrv + , xprvFromBytes + , xprvToBytes + , xprvPrivateKey + , xprvChainCode + , toXPub + + -- ** XPub + , XPub + , xpubFromBytes + , xpubToBytes + , xpubPublicKey + , xpubChainCode + + -- ** Pub + , Pub + , pubFromBytes + , pubToBytes + , xpubToPub + + -- ** XSignature + , XSignature + , sign + , verify + + -- Internal / Not exposed by Haddock + , DerivationScheme (..) + , deriveXPrv + , deriveXPub + , generate + , generateNew + , hashCredential + , hashWalletId + , credentialHashSize + , unsafeMkIndex + ------------------ + ) where + +import Prelude + +import Cardano.Crypto.Wallet + ( DerivationScheme (..) ) +import Cardano.Mnemonic + ( SomeMnemonic ) +import Control.DeepSeq + ( NFData ) +import Crypto.Error + ( eitherCryptoError ) +import Crypto.Hash + ( hash ) +import Crypto.Hash.Algorithms + ( Blake2b_160 (..), Blake2b_224 (..) ) +import Crypto.Hash.IO + ( HashAlgorithm (hashDigestSize) ) +import Data.ByteArray + ( ByteArrayAccess, ScrubbedBytes ) +import Data.ByteString + ( ByteString ) +import Data.Coerce + ( coerce ) +import Data.Either.Extra + ( eitherToMaybe ) +import Data.Kind + ( Type ) +import Data.String + ( fromString ) +import Data.Word + ( Word32 ) +import Fmt + ( Buildable (..) ) +import GHC.Generics + ( Generic ) +import GHC.Stack + ( HasCallStack ) + +import qualified Cardano.Crypto.Wallet as CC +import qualified Crypto.ECC.Edwards25519 as Ed25519 +import qualified Data.ByteArray as BA +import qualified Data.ByteString as BS + +-- $overview +-- +-- These abstractions allow generating root private key, also called /Master Key/ +-- and then basing on it enable address derivation + +-- +-- Low-Level Cryptography Primitives +-- + +-- | An opaque type representing an extended private key. +-- +-- __Properties:__ +-- +-- ===== Roundtripping +-- +-- @forall xprv. 'xprvFromBytes' ('xprvToBytes' xprv) == 'Just' xprv@ +-- +-- ===== Chain Code Invariance +-- +-- @forall xprv. 'xprvChainCode' xprv == 'xpubChainCode' ('toXPub' xprv)@ +-- +-- ===== Public Key Signature +-- +-- @forall xprv msg. 'verify' ('toXPub' xprv) msg ('sign' xprv msg) == 'True'@ +-- +-- @since 1.0.0 +type XPrv = CC.XPrv + +-- | An opaque type representing an extended public key. +-- +-- __Properties:__ +-- +-- ===== Roundtripping +-- +-- @forall xpub. 'xpubFromBytes' ('xpubToBytes' xpub) == 'Just' xpub@ +-- +-- @since 1.0.0 +type XPub = CC.XPub + +-- | An opaque type representing a signature made from an 'XPrv'. +-- +-- @since 1.0.0 +type XSignature = CC.XSignature + +-- | Construct an 'XPub' from raw 'ByteString' (64 bytes). +-- +-- @since 1.0.0 +xpubFromBytes :: ByteString -> Maybe XPub +xpubFromBytes :: ByteString -> Maybe XPub xpubFromBytes = Either String XPub -> Maybe XPub forall a b. Either a b -> Maybe b eitherToMaybe (Either String XPub -> Maybe XPub) @@ -168,12 +169,12 @@ forall b c a. (b -> c) -> (a -> b) -> a -> c . ByteString -> Either String XPub CC.xpub - --- | Convert an 'XPub' to a raw 'ByteString' (64 bytes). --- --- @since 1.0.0 -xpubToBytes :: XPub -> ByteString -xpubToBytes :: XPub -> ByteString + +-- | Convert an 'XPub' to a raw 'ByteString' (64 bytes). +-- +-- @since 1.0.0 +xpubToBytes :: XPub -> ByteString +xpubToBytes :: XPub -> ByteString xpubToBytes XPub xpub = XPub -> ByteString xpubPublicKey XPub @@ -182,38 +183,38 @@ <> XPub -> ByteString xpubChainCode XPub xpub - --- | Extract the public key from an 'XPub' as a raw 'ByteString' (32 bytes). --- --- @since 2.0.0 -xpubPublicKey :: XPub -> ByteString -xpubPublicKey :: XPub -> ByteString + +-- | Extract the public key from an 'XPub' as a raw 'ByteString' (32 bytes). +-- +-- @since 2.0.0 +xpubPublicKey :: XPub -> ByteString +xpubPublicKey :: XPub -> ByteString xpubPublicKey (CC.XPub ByteString pub ChainCode _cc) = ByteString pub - --- | Extract the chain code from an 'XPub' as a raw 'ByteString' (32 bytes). --- --- @since 2.0.0 -xpubChainCode :: XPub -> ByteString -xpubChainCode :: XPub -> ByteString + +-- | Extract the chain code from an 'XPub' as a raw 'ByteString' (32 bytes). +-- +-- @since 2.0.0 +xpubChainCode :: XPub -> ByteString +xpubChainCode :: XPub -> ByteString xpubChainCode (CC.XPub ByteString _pub (CC.ChainCode ByteString cc)) = ByteString cc - --- | An opaque type representing a non-extended public key. --- --- __Properties:__ --- --- ===== Roundtripping --- --- @forall pub. 'pubFromBytes' ('pubToBytes' pub) == 'Just' pub@ --- --- @since 3.12.0 -newtype Pub = Pub ByteString - deriving (Int -> Pub -> ShowS + +-- | An opaque type representing a non-extended public key. +-- +-- __Properties:__ +-- +-- ===== Roundtripping +-- +-- @forall pub. 'pubFromBytes' ('pubToBytes' pub) == 'Just' pub@ +-- +-- @since 3.12.0 +newtype Pub = Pub ByteString + deriving (Int -> Pub -> ShowS [Pub] -> ShowS Pub -> String (Int -> Pub -> ShowS) @@ -234,15 +235,15 @@ == :: Pub -> Pub -> Bool $c== :: Pub -> Pub -> Bool Eq) - --- | Construct a 'Pub' from raw 'ByteString' (32 bytes). --- --- @since 3.12.0 -pubFromBytes :: ByteString -> Maybe Pub -pubFromBytes :: ByteString -> Maybe Pub + +-- | Construct a 'Pub' from raw 'ByteString' (32 bytes). +-- +-- @since 3.12.0 +pubFromBytes :: ByteString -> Maybe Pub +pubFromBytes :: ByteString -> Maybe Pub pubFromBytes ByteString bytes - | ByteString -> Int + | ByteString -> Int BS.length ByteString bytes Int -> Int -> Bool forall a. Eq a => a -> a -> Bool @@ -250,7 +251,7 @@ 32 = Maybe Pub forall a. Maybe a Nothing - | Bool + | Bool otherwise = Pub -> Maybe Pub forall a. a -> Maybe a Just (Pub -> Maybe Pub) -> Pub -> Maybe Pub @@ -258,35 +259,35 @@ $ ByteString -> Pub Pub ByteString bytes - --- | Convert an 'Pub' to a raw 'ByteString' (32 bytes). --- --- @since 3.12.0 -pubToBytes :: Pub -> ByteString -pubToBytes :: Pub -> ByteString + +-- | Convert an 'Pub' to a raw 'ByteString' (32 bytes). +-- +-- @since 3.12.0 +pubToBytes :: Pub -> ByteString +pubToBytes :: Pub -> ByteString pubToBytes (Pub ByteString pub) = ByteString pub - --- | Extract the public key from an 'XPub' as a 'Pub' (32 bytes). --- --- @since 3.12.0 -xpubToPub :: XPub -> Pub -xpubToPub :: XPub -> Pub + +-- | Extract the public key from an 'XPub' as a 'Pub' (32 bytes). +-- +-- @since 3.12.0 +xpubToPub :: XPub -> Pub +xpubToPub :: XPub -> Pub xpubToPub (CC.XPub ByteString pub ChainCode _cc) = ByteString -> Pub Pub ByteString pub - --- | Construct an 'XPrv' from raw 'ByteString' (96 bytes). --- --- @since 1.0.0 -xprvFromBytes :: ByteString -> Maybe XPrv -xprvFromBytes :: ByteString -> Maybe XPrv + +-- | Construct an 'XPrv' from raw 'ByteString' (96 bytes). +-- +-- @since 1.0.0 +xprvFromBytes :: ByteString -> Maybe XPrv +xprvFromBytes :: ByteString -> Maybe XPrv xprvFromBytes ByteString bytes - | ByteString -> Int + | ByteString -> Int BS.length ByteString bytes Int -> Int -> Bool forall a. Eq a => a -> a -> Bool @@ -294,21 +295,21 @@ 96 = Maybe XPrv forall a. Maybe a Nothing - | Bool + | Bool otherwise = do - let (ByteString + let (ByteString prv, ByteString cc) = Int -> ByteString -> (ByteString, ByteString) BS.splitAt Int 64 ByteString bytes - ByteString + ByteString pub <- ByteString -> Maybe ByteString ed25519ScalarMult (Int -> ByteString -> ByteString BS.take Int 32 ByteString prv) - Either String XPrv -> Maybe XPrv + Either String XPrv -> Maybe XPrv forall a b. Either a b -> Maybe b eitherToMaybe (Either String XPrv -> Maybe XPrv) -> Either String XPrv -> Maybe XPrv @@ -326,12 +327,12 @@ forall a. Semigroup a => a -> a -> a <> ByteString cc - where - ed25519ScalarMult :: ByteString -> Maybe ByteString - ed25519ScalarMult :: ByteString -> Maybe ByteString + where + ed25519ScalarMult :: ByteString -> Maybe ByteString + ed25519ScalarMult :: ByteString -> Maybe ByteString ed25519ScalarMult ByteString bs = do - Scalar + Scalar scalar <- Either CryptoError Scalar -> Maybe Scalar forall a b. Either a b -> Maybe b eitherToMaybe (Either CryptoError Scalar -> Maybe Scalar) @@ -346,7 +347,7 @@ forall bs. ByteArrayAccess bs => bs -> CryptoFailable Scalar Ed25519.scalarDecodeLong ByteString bs - ByteString -> Maybe ByteString + ByteString -> Maybe ByteString forall (f :: * -> *) a. Applicative f => a -> f a pure (ByteString -> Maybe ByteString) -> ByteString -> Maybe ByteString forall a b. (a -> b) -> a -> b @@ -357,30 +358,30 @@ $ Scalar -> Point Ed25519.toPoint Scalar scalar - --- From < xprv | pub | cc > --- ↳ To < xprv | | cc > --- --- | Convert an 'XPrv' to a raw 'ByteString' (96 bytes). --- --- @since 1.0.0 -xprvToBytes :: XPrv -> ByteString -xprvToBytes :: XPrv -> ByteString + +-- From < xprv | pub | cc > +-- ↳ To < xprv | | cc > +-- +-- | Convert an 'XPrv' to a raw 'ByteString' (96 bytes). +-- +-- @since 1.0.0 +xprvToBytes :: XPrv -> ByteString +xprvToBytes :: XPrv -> ByteString xprvToBytes XPrv xprv = - XPrv -> ByteString + XPrv -> ByteString xprvPrivateKey XPrv xprv ByteString -> ByteString -> ByteString forall a. Semigroup a => a -> a -> a <> XPrv -> ByteString xprvChainCode XPrv xprv - --- | Extract the private key from an 'XPrv' as a raw 'ByteString' (64 bytes). --- --- @since 2.0.0 -xprvPrivateKey :: XPrv -> ByteString -xprvPrivateKey :: XPrv -> ByteString + +-- | Extract the private key from an 'XPrv' as a raw 'ByteString' (64 bytes). +-- +-- @since 2.0.0 +xprvPrivateKey :: XPrv -> ByteString +xprvPrivateKey :: XPrv -> ByteString xprvPrivateKey = Int -> ByteString -> ByteString BS.take Int 64 (ByteString -> ByteString) @@ -388,12 +389,12 @@ forall b c a. (b -> c) -> (a -> b) -> a -> c . XPrv -> ByteString CC.unXPrv - --- | Extract the chain code from an 'XPrv' as a raw 'ByteString' (32 bytes). --- --- @since 2.0.0 -xprvChainCode :: XPrv -> ByteString -xprvChainCode :: XPrv -> ByteString + +-- | Extract the chain code from an 'XPrv' as a raw 'ByteString' (32 bytes). +-- +-- @since 2.0.0 +xprvChainCode :: XPrv -> ByteString +xprvChainCode :: XPrv -> ByteString xprvChainCode = Int -> ByteString -> ByteString BS.drop Int 96 (ByteString -> ByteString) @@ -401,66 +402,66 @@ forall b c a. (b -> c) -> (a -> b) -> a -> c . XPrv -> ByteString CC.unXPrv - --- | Derive the 'XPub' associated with an 'XPrv'. --- --- @since 1.0.0 -toXPub :: HasCallStack => XPrv -> XPub -toXPub :: XPrv -> XPub + +-- | Derive the 'XPub' associated with an 'XPrv'. +-- +-- @since 1.0.0 +toXPub :: HasCallStack => XPrv -> XPub +toXPub :: XPrv -> XPub toXPub = HasCallStack => XPrv -> XPub XPrv -> XPub CC.toXPub - --- | Produce a signature of the given 'msg' from an 'XPrv'. --- --- @since 1.0.0 -sign - :: ByteArrayAccess msg - => XPrv - -> msg - -> XSignature -sign :: XPrv -> msg -> XSignature + +-- | Produce a signature of the given 'msg' from an 'XPrv'. +-- +-- @since 1.0.0 +sign + :: ByteArrayAccess msg + => XPrv + -> msg + -> XSignature +sign :: XPrv -> msg -> XSignature sign = - ScrubbedBytes -> XPrv -> msg -> XSignature + ScrubbedBytes -> XPrv -> msg -> XSignature forall passPhrase msg. (ByteArrayAccess passPhrase, ByteArrayAccess msg) => passPhrase -> XPrv -> msg -> XSignature CC.sign (ScrubbedBytes forall a. Monoid a => a mempty :: ScrubbedBytes) - --- | Verify the 'XSignature' of a 'msg' with the 'XPub' associated with the --- 'XPrv' used for signing. --- --- @since 1.0.0 -verify - :: ByteArrayAccess msg - => XPub - -> msg - -> XSignature - -> Bool -verify :: XPub -> msg -> XSignature -> Bool + +-- | Verify the 'XSignature' of a 'msg' with the 'XPub' associated with the +-- 'XPrv' used for signing. +-- +-- @since 1.0.0 +verify + :: ByteArrayAccess msg + => XPub + -> msg + -> XSignature + -> Bool +verify :: XPub -> msg -> XSignature -> Bool verify = - XPub -> msg -> XSignature -> Bool + XPub -> msg -> XSignature -> Bool forall msg. ByteArrayAccess msg => XPub -> msg -> XSignature -> Bool CC.verify -- re-exported for the sake of documentation. - --- Derive a child extended private key from an extended private key --- --- __internal__ -deriveXPrv - :: DerivationScheme - -> XPrv - -> Index derivationType depth - -> XPrv -deriveXPrv :: DerivationScheme -> XPrv -> Index derivationType depth -> XPrv + +-- Derive a child extended private key from an extended private key +-- +-- __internal__ +deriveXPrv + :: DerivationScheme + -> XPrv + -> Index derivationType depth + -> XPrv +deriveXPrv :: DerivationScheme -> XPrv -> Index derivationType depth -> XPrv deriveXPrv DerivationScheme ds XPrv prv (Index Word32 ix) = - DerivationScheme -> ScrubbedBytes -> XPrv -> Word32 -> XPrv + DerivationScheme -> ScrubbedBytes -> XPrv -> Word32 -> XPrv forall passPhrase. ByteArrayAccess passPhrase => DerivationScheme -> passPhrase -> XPrv -> Word32 -> XPrv @@ -470,40 +471,40 @@ mempty :: ScrubbedBytes) XPrv prv Word32 ix - --- Derive a child extended public key from an extended public key --- --- __internal__ -deriveXPub - :: DerivationScheme - -> XPub - -> Index derivationType depth - -> Maybe XPub -deriveXPub :: DerivationScheme + +-- Derive a child extended public key from an extended public key +-- +-- __internal__ +deriveXPub + :: DerivationScheme + -> XPub + -> Index derivationType depth + -> Maybe XPub +deriveXPub :: DerivationScheme -> XPub -> Index derivationType depth -> Maybe XPub deriveXPub DerivationScheme ds XPub pub (Index Word32 ix) = - DerivationScheme -> XPub -> Word32 -> Maybe XPub + DerivationScheme -> XPub -> Word32 -> Maybe XPub CC.deriveXPub DerivationScheme ds XPub pub Word32 ix - --- Generate an XPrv using the legacy method (Byron). --- --- The seed needs to be at least 32 bytes, otherwise an asynchronous error is thrown. --- --- __internal__ -generate - :: ByteArrayAccess seed - => seed - -> XPrv -generate :: seed -> XPrv + +-- Generate an XPrv using the legacy method (Byron). +-- +-- The seed needs to be at least 32 bytes, otherwise an asynchronous error is thrown. +-- +-- __internal__ +generate + :: ByteArrayAccess seed + => seed + -> XPrv +generate :: seed -> XPrv generate seed seed = - seed -> ScrubbedBytes -> XPrv + seed -> ScrubbedBytes -> XPrv forall passPhrase seed. (ByteArrayAccess passPhrase, ByteArrayAccess seed) => seed -> passPhrase -> XPrv @@ -511,22 +512,22 @@ seed (ScrubbedBytes forall a. Monoid a => a mempty :: ScrubbedBytes) - --- Generate an XPrv using the new method (Icarus). --- --- The seed needs to be at least 16 bytes. --- --- __internal__ -generateNew - :: (ByteArrayAccess seed, ByteArrayAccess sndFactor) - => seed - -> sndFactor - -> XPrv -generateNew :: seed -> sndFactor -> XPrv + +-- Generate an XPrv using the new method (Icarus). +-- +-- The seed needs to be at least 16 bytes. +-- +-- __internal__ +generateNew + :: (ByteArrayAccess seed, ByteArrayAccess sndFactor) + => seed + -> sndFactor + -> XPrv +generateNew :: seed -> sndFactor -> XPrv generateNew seed seed sndFactor sndFactor = - seed -> sndFactor -> ScrubbedBytes -> XPrv + seed -> sndFactor -> ScrubbedBytes -> XPrv forall keyPassPhrase generationPassPhrase seed. (ByteArrayAccess keyPassPhrase, ByteArrayAccess generationPassPhrase, ByteArrayAccess seed) => @@ -536,14 +537,14 @@ sndFactor (ScrubbedBytes forall a. Monoid a => a mempty :: ScrubbedBytes) - --- Hash a credential (pub key or script). --- --- __internal__ -hashCredential :: ByteString -> ByteString -hashCredential :: ByteString -> ByteString + +-- Hash a credential (pub key or script). +-- +-- __internal__ +hashCredential :: ByteString -> ByteString +hashCredential :: ByteString -> ByteString hashCredential = - Digest Blake2b_224 -> ByteString + Digest Blake2b_224 -> ByteString forall bin bout. (ByteArrayAccess bin, ByteArray bout) => bin -> bout @@ -556,14 +557,14 @@ (ByteArrayAccess ba, HashAlgorithm a) => ba -> Digest a hash @_ @Blake2b_224 - --- Hash a extended root or account key to calculate walletid. --- --- __internal__ -hashWalletId :: ByteString -> ByteString -hashWalletId :: ByteString -> ByteString + +-- Hash a extended root or account key to calculate walletid. +-- +-- __internal__ +hashWalletId :: ByteString -> ByteString +hashWalletId :: ByteString -> ByteString hashWalletId = - Digest Blake2b_160 -> ByteString + Digest Blake2b_160 -> ByteString forall bin bout. (ByteArrayAccess bin, ByteArray bout) => bin -> bout @@ -576,49 +577,49 @@ (ByteArrayAccess ba, HashAlgorithm a) => ba -> Digest a hash @_ @Blake2b_160 - --- Size, in bytes, of a hash of credential (pub key or script). --- --- __internal__ -credentialHashSize :: Int -credentialHashSize :: Int + +-- Size, in bytes, of a hash of credential (pub key or script). +-- +-- __internal__ +credentialHashSize :: Int +credentialHashSize :: Int credentialHashSize = Blake2b_224 -> Int forall a. HashAlgorithm a => a -> Int hashDigestSize Blake2b_224 Blake2b_224 - --- --- Key Derivation --- - --- | Key Depth in the derivation path, according to BIP-0039 / BIP-0044 --- --- @ --- root | purpose' | cointype' | account' | role | address@ --- 0th 1st 2nd 3rd 4th 5th --- @ --- --- We do not manipulate purpose, cointype and change paths directly, so there --- are no constructors for these. --- --- @since 1.0.0 -data Depth = RootK | AccountK | PaymentK | DelegationK | ScriptK | PolicyK - --- | A derivation index, with phantom-types to disambiguate derivation type. --- --- @ --- let accountIx = Index 'Hardened 'AccountK --- let addressIx = Index 'Soft 'PaymentK --- @ --- --- @since 1.0.0 -newtype Index (derivationType :: DerivationType) (depth :: Depth) = Index - { Index derivationType depth -> Word32 + +-- +-- Key Derivation +-- + +-- | Key Depth in the derivation path, according to BIP-0039 / BIP-0044 +-- +-- @ +-- root | purpose' | cointype' | account' | role | address@ +-- 0th 1st 2nd 3rd 4th 5th +-- @ +-- +-- We do not manipulate purpose, cointype and change paths directly, so there +-- are no constructors for these. +-- +-- @since 1.0.0 +data Depth = RootK | AccountK | PaymentK | DelegationK | ScriptK | PolicyK + +-- | A derivation index, with phantom-types to disambiguate derivation type. +-- +-- @ +-- let accountIx = Index 'Hardened 'AccountK +-- let addressIx = Index 'Soft 'PaymentK +-- @ +-- +-- @since 1.0.0 +newtype Index (derivationType :: DerivationType) (depth :: Depth) = Index + { Index derivationType depth -> Word32 indexToWord32 :: Word32 - -- ^ Get the index as a 'Word32' - -- @since 3.3.0 - } - deriving stock ((forall x. + -- ^ Get the index as a 'Word32' + -- @since 3.3.0 + } + deriving stock ((forall x. Index derivationType depth -> Rep (Index derivationType depth) x) -> (forall x. Rep (Index derivationType depth) x -> Index derivationType depth) @@ -747,33 +748,33 @@ $cp1Ord :: forall (derivationType :: DerivationType) (depth :: Depth). Eq (Index derivationType depth) Ord) - -instance NFData (Index derivationType depth) - -instance Bounded (Index 'Hardened depth) where - minBound :: Index 'Hardened depth + +instance NFData (Index derivationType depth) + +instance Bounded (Index 'Hardened depth) where + minBound :: Index 'Hardened depth minBound = Word32 -> Index 'Hardened depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index Word32 0x80000000 - maxBound :: Index 'Hardened depth + maxBound :: Index 'Hardened depth maxBound = Word32 -> Index 'Hardened depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index Word32 forall a. Bounded a => a maxBound - -instance Bounded (Index 'Soft depth) where - minBound :: Index 'Soft depth + +instance Bounded (Index 'Soft depth) where + minBound :: Index 'Soft depth minBound = Word32 -> Index 'Soft depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index Word32 forall a. Bounded a => a minBound - maxBound :: Index 'Soft depth + maxBound :: Index 'Soft depth maxBound = let (Index Word32 ix) = Bounded (Index 'Hardened Any) => Index 'Hardened Any forall a. Bounded a => a @@ -785,43 +786,43 @@ forall a. Num a => a -> a -> a - Word32 1) - -instance Bounded (Index 'WholeDomain depth) where - minBound :: Index 'WholeDomain depth + +instance Bounded (Index 'WholeDomain depth) where + minBound :: Index 'WholeDomain depth minBound = Word32 -> Index 'WholeDomain depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index Word32 forall a. Bounded a => a minBound - maxBound :: Index 'WholeDomain depth + maxBound :: Index 'WholeDomain depth maxBound = Word32 -> Index 'WholeDomain depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index Word32 forall a. Bounded a => a maxBound - --- Construct an 'Index' from any Word32 value, without any validation, for --- internal use only. --- --- Always use 'indexFromWord32' or 'wholeDomainIndex' instead of this function. -unsafeMkIndex :: Word32 -> Index ty depth -unsafeMkIndex :: Word32 -> Index ty depth + +-- Construct an 'Index' from any Word32 value, without any validation, for +-- internal use only. +-- +-- Always use 'indexFromWord32' or 'wholeDomainIndex' instead of this function. +unsafeMkIndex :: Word32 -> Index ty depth +unsafeMkIndex :: Word32 -> Index ty depth unsafeMkIndex = Word32 -> Index ty depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index - --- | Construct derivation path indices from raw 'Word32' values. -indexFromWord32 - :: forall ix derivationType depth. - (ix ~ Index derivationType depth, Bounded ix) - => Word32 -> Maybe ix -indexFromWord32 :: Word32 -> Maybe ix + +-- | Construct derivation path indices from raw 'Word32' values. +indexFromWord32 + :: forall ix derivationType depth. + (ix ~ Index derivationType depth, Bounded ix) + => Word32 -> Maybe ix +indexFromWord32 :: Word32 -> Maybe ix indexFromWord32 Word32 ix - | Word32 + | Word32 ix Word32 -> Word32 -> Bool forall a. Ord a => a -> a -> Bool >= Index derivationType depth -> Word32 @@ -839,27 +840,27 @@ indexToWord32 (Bounded ix => ix forall a. Bounded a => a maxBound @ix) = - Index derivationType depth -> Maybe (Index derivationType depth) + Index derivationType depth -> Maybe (Index derivationType depth) forall a. a -> Maybe a Just (Word32 -> Index derivationType depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index Word32 ix) - | Bool + | Bool otherwise = - Maybe ix + Maybe ix forall a. Maybe a Nothing - --- | Increment an index, if possible. --- --- @since 3.3.0 -nextIndex - :: forall ix derivationType depth. - (ix ~ Index derivationType depth, Bounded ix) - => ix -> Maybe ix -nextIndex :: ix -> Maybe ix + +-- | Increment an index, if possible. +-- +-- @since 3.3.0 +nextIndex + :: forall ix derivationType depth. + (ix ~ Index derivationType depth, Bounded ix) + => ix -> Maybe ix +nextIndex :: ix -> Maybe ix nextIndex (Index ix) = Word32 -> Maybe ix forall ix (derivationType :: DerivationType) (depth :: Depth). (ix ~ Index derivationType depth, Bounded ix) => @@ -869,27 +870,27 @@ forall a. Num a => a -> a -> a + Word32 1) - --- | Constructs a full domain 'Index'. This can't fail, unlike 'fromWord32'. --- --- @since 3.3.0 -wholeDomainIndex :: Word32 -> Index 'WholeDomain depth -wholeDomainIndex :: Word32 -> Index 'WholeDomain depth + +-- | Constructs a full domain 'Index'. This can't fail, unlike 'fromWord32'. +-- +-- @since 3.3.0 +wholeDomainIndex :: Word32 -> Index 'WholeDomain depth +wholeDomainIndex :: Word32 -> Index 'WholeDomain depth wholeDomainIndex = Word32 -> Index 'WholeDomain depth forall (derivationType :: DerivationType) (depth :: Depth). Word32 -> Index derivationType depth Index - --- | Upcasts an 'Index' to one with the full 'Word32' domain. --- --- @since 3.3.0 -coerceWholeDomainIndex :: Index ty depth0 -> Index 'WholeDomain depth1 -coerceWholeDomainIndex :: Index ty depth0 -> Index 'WholeDomain depth1 + +-- | Upcasts an 'Index' to one with the full 'Word32' domain. +-- +-- @since 3.3.0 +coerceWholeDomainIndex :: Index ty depth0 -> Index 'WholeDomain depth1 +coerceWholeDomainIndex :: Index ty depth0 -> Index 'WholeDomain depth1 coerceWholeDomainIndex = Index ty depth0 -> Index 'WholeDomain depth1 coerce - -instance Buildable (Index derivationType depth) where - build :: Index derivationType depth -> Builder + +instance Buildable (Index derivationType depth) where + build :: Index derivationType depth -> Builder build (Index Word32 ix) = String -> Builder forall a. IsString a => String -> a @@ -897,79 +898,79 @@ forall a. Show a => a -> String show Word32 ix) - --- | Type of derivation that should be used with the given indexes. --- --- In theory, we should only consider two derivation types: soft and hard. --- --- However, historically, addresses in Cardano used to be generated across both --- the soft and the hard domain. We therefore introduce a 'WholeDomain' derivation --- type that is the exact union of `Hardened` and `Soft`. --- --- @since 1.0.0 -data DerivationType = Hardened | Soft | WholeDomain - --- | An interface for doing hard derivations from the root private key, /Master Key/ --- --- @since 1.0.0 -class HardDerivation (key :: Depth -> Type -> Type) where - type AccountIndexDerivationType key :: DerivationType - type AddressIndexDerivationType key :: DerivationType - type WithRole key :: Type - - -- | Derives account private key from the given root private key, using - -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> - -- package for more details). - -- - -- @since 1.0.0 - deriveAccountPrivateKey - :: key 'RootK XPrv - -> Index (AccountIndexDerivationType key) 'AccountK - -> key 'AccountK XPrv - - -- | Derives address private key from the given account private key, using - -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> - -- package for more details). - -- - -- @since 1.0.0 - deriveAddressPrivateKey - :: key 'AccountK XPrv - -> WithRole key - -> Index (AddressIndexDerivationType key) 'PaymentK - -> key 'PaymentK XPrv - --- | An interface for doing soft derivations from an account public key -class HardDerivation key => SoftDerivation (key :: Depth -> Type -> Type) where - -- | Derives address public key from the given account public key, using - -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> - -- package for more details). - -- - -- This is the preferred way of deriving new sequential address public keys. - -- - -- @since 1.0.0 - deriveAddressPublicKey - :: key 'AccountK XPub - -> WithRole key - -> Index 'Soft 'PaymentK - -> key 'PaymentK XPub - + +-- | Type of derivation that should be used with the given indexes. +-- +-- In theory, we should only consider two derivation types: soft and hard. +-- +-- However, historically, addresses in Cardano used to be generated across both +-- the soft and the hard domain. We therefore introduce a 'WholeDomain' derivation +-- type that is the exact union of `Hardened` and `Soft`. +-- +-- @since 1.0.0 +data DerivationType = Hardened | Soft | WholeDomain + +-- | An interface for doing hard derivations from the root private key, /Master Key/ +-- +-- @since 1.0.0 +class HardDerivation (key :: Depth -> Type -> Type) where + type AccountIndexDerivationType key :: DerivationType + type AddressIndexDerivationType key :: DerivationType + type WithRole key :: Type + + -- | Derives account private key from the given root private key, using + -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> + -- package for more details). + -- + -- @since 1.0.0 + deriveAccountPrivateKey + :: key 'RootK XPrv + -> Index (AccountIndexDerivationType key) 'AccountK + -> key 'AccountK XPrv + + -- | Derives address private key from the given account private key, using + -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> + -- package for more details). + -- + -- @since 1.0.0 + deriveAddressPrivateKey + :: key 'AccountK XPrv + -> WithRole key + -> Index (AddressIndexDerivationType key) 'PaymentK + -> key 'PaymentK XPrv + +-- | An interface for doing soft derivations from an account public key +class HardDerivation key => SoftDerivation (key :: Depth -> Type -> Type) where + -- | Derives address public key from the given account public key, using + -- derivation scheme 2 (see <https://github.com/input-output-hk/cardano-crypto/ cardano-crypto> + -- package for more details). + -- + -- This is the preferred way of deriving new sequential address public keys. + -- + -- @since 1.0.0 + deriveAddressPublicKey + :: key 'AccountK XPub + -> WithRole key + -> Index 'Soft 'PaymentK + -> key 'PaymentK XPub --- | Abstract interface for constructing a /Master Key/. --- --- @since 1.0.0 -class GenMasterKey (key :: Depth -> Type -> Type) where - type SecondFactor key :: Type - - -- | Generate a root key from a corresponding mnemonic. - -- - -- @since 1.0.0 - genMasterKeyFromMnemonic - :: SomeMnemonic -> SecondFactor key -> key 'RootK XPrv - - -- | Generate a root key from a corresponding root 'XPrv' - -- - -- @since 1.0.0 - genMasterKeyFromXPrv - :: XPrv -> key 'RootK XPrv - \ No newline at end of file + +-- | Abstract interface for constructing a /Master Key/. +-- +-- @since 1.0.0 +class GenMasterKey (key :: Depth -> Type -> Type) where + type SecondFactor key :: Type + + -- | Generate a root key from a corresponding mnemonic. + -- + -- @since 1.0.0 + genMasterKeyFromMnemonic + :: SomeMnemonic -> SecondFactor key -> key 'RootK XPrv + + -- | Generate a root key from a corresponding root 'XPrv' + -- + -- @since 1.0.0 + genMasterKeyFromXPrv + :: XPrv -> key 'RootK XPrv + \ No newline at end of file