Skip to content

Commit

Permalink
feat: clean out usage of unsafeCoerce
Browse files Browse the repository at this point in the history
Related to #326.
  • Loading branch information
sourabhxyz committed Aug 14, 2024
1 parent 91d32c1 commit bab693a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
1 change: 0 additions & 1 deletion src/GeniusYield/Types/Certificate.hs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ module GeniusYield.Types.Certificate (

import qualified Cardano.Api as Api
import qualified Cardano.Api.ReexposeLedger as Ledger
import Cardano.Ledger.Api (ppKeyDepositL)
import qualified Cardano.Ledger.Api as Ledger
import Control.Lens ((^.))
import GeniusYield.Types.Credential (GYStakeCredential,
Expand Down
22 changes: 18 additions & 4 deletions src/GeniusYield/Types/StakeKeyHash.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,26 @@ module GeniusYield.Types.StakeKeyHash (
GYStakeKeyHash,
stakeKeyHashToApi,
stakeKeyHashFromApi,
stakeKeyHashToLedger,
stakeKeyHashFromLedger,
) where

import Control.Lens ((?~))
import GeniusYield.Imports

import qualified Cardano.Api as Api
import qualified Cardano.Api.Ledger as Ledger
import qualified Cardano.Api.Shelley as Api
import qualified Cardano.Ledger.Keys as Ledger
import qualified Data.Aeson.Types as Aeson
import qualified Data.Csv as Csv
import qualified Data.Swagger as Swagger
import qualified Data.Swagger.Internal.Schema as Swagger
import qualified Data.Text.Encoding as Text
import GeniusYield.Types.PubKeyHash (AsPubKeyHash (..), CanSignTx)
import GeniusYield.Types.PubKeyHash (AsPubKeyHash (..), CanSignTx,
pubKeyHashFromLedger,
pubKeyHashToLedger)
import qualified Text.Printf as Printf
import Unsafe.Coerce (unsafeCoerce)

-- $setup
--
Expand All @@ -38,8 +44,8 @@ newtype GYStakeKeyHash = GYStakeKeyHash (Api.Hash Api.StakeKey)
deriving newtype (Eq, Ord, IsString)

instance AsPubKeyHash GYStakeKeyHash where
toPubKeyHash = unsafeCoerce
fromPubKeyHash = unsafeCoerce
toPubKeyHash = stakeKeyHashToLedger >>> Ledger.coerceKeyRole >>> pubKeyHashFromLedger
fromPubKeyHash = pubKeyHashToLedger >>> Ledger.coerceKeyRole >>> stakeKeyHashFromLedger

instance CanSignTx GYStakeKeyHash

Expand All @@ -60,6 +66,14 @@ stakeKeyHashToApi = coerce
stakeKeyHashFromApi :: Api.Hash Api.StakeKey -> GYStakeKeyHash
stakeKeyHashFromApi = coerce

-- | Convert to corresponding ledger type.
stakeKeyHashToLedger :: GYStakeKeyHash -> Ledger.KeyHash Ledger.Staking Ledger.StandardCrypto
stakeKeyHashToLedger = stakeKeyHashToApi >>> Api.unStakeKeyHash

-- | Convert from corresponding ledger type.
stakeKeyHashFromLedger :: Ledger.KeyHash Ledger.Staking Ledger.StandardCrypto -> GYStakeKeyHash
stakeKeyHashFromLedger = Api.StakeKeyHash >>> stakeKeyHashFromApi

-- |
--
-- >>> let Just skh = Aeson.decode @GYStakeKeyHash "\"7a77d120b9e86addc7388dbbb1bd2350490b7d140ab234038632334d\""
Expand Down

0 comments on commit bab693a

Please sign in to comment.