From d183b919d5c1172b9b0c62284e011a2ce157ec20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Hurlin?= Date: Tue, 9 Apr 2024 12:04:56 +0200 Subject: [PATCH 1/2] Detail: prepare code for extension --- .../internal/Cardano/Api/DeserialiseAnyOf.hs | 67 ++++++++++--------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs b/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs index ddf13d6aad..32fdb099d5 100644 --- a/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs +++ b/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs @@ -235,43 +235,44 @@ deserialiseInputAnyOf bech32Types textEnvTypes inputBs = Left err -> DeserialiseInputError $ InputBech32DecodeError err data SomeAddressVerificationKey - = AByronVerificationKey (VerificationKey ByronKey) - | APaymentVerificationKey (VerificationKey PaymentKey) - | APaymentExtendedVerificationKey (VerificationKey PaymentExtendedKey) - | AGenesisUTxOVerificationKey (VerificationKey GenesisUTxOKey) - | AGenesisExtendedVerificationKey (VerificationKey GenesisExtendedKey) + = AByronVerificationKey (VerificationKey ByronKey) + | APaymentVerificationKey (VerificationKey PaymentKey) + | APaymentExtendedVerificationKey (VerificationKey PaymentExtendedKey) + | AGenesisUTxOVerificationKey (VerificationKey GenesisUTxOKey) + | AGenesisExtendedVerificationKey (VerificationKey GenesisExtendedKey) | AGenesisDelegateExtendedVerificationKey - (VerificationKey GenesisDelegateExtendedKey) - | AKesVerificationKey (VerificationKey KesKey) - | AVrfVerificationKey (VerificationKey VrfKey) - | AStakeVerificationKey (VerificationKey StakeKey) - | AStakeExtendedVerificationKey (VerificationKey StakeExtendedKey) - | ADRepVerificationKey (VerificationKey DRepKey) - | ADRepExtendedVerificationKey (VerificationKey DRepExtendedKey) + (VerificationKey GenesisDelegateExtendedKey) + | AKesVerificationKey (VerificationKey KesKey) + | AVrfVerificationKey (VerificationKey VrfKey) + | AStakeVerificationKey (VerificationKey StakeKey) + | AStakeExtendedVerificationKey (VerificationKey StakeExtendedKey) + | ADRepVerificationKey (VerificationKey DRepKey) + | ADRepExtendedVerificationKey (VerificationKey DRepExtendedKey) deriving (Show) renderSomeAddressVerificationKey :: SomeAddressVerificationKey -> Text -renderSomeAddressVerificationKey (AByronVerificationKey vk) = prettyByronVerificationKey vk -renderSomeAddressVerificationKey (APaymentVerificationKey vk) = serialiseToBech32 vk -renderSomeAddressVerificationKey (APaymentExtendedVerificationKey vk) = serialiseToBech32 vk -renderSomeAddressVerificationKey (AGenesisUTxOVerificationKey vk) = - serialiseToBech32 (castVerificationKey vk :: VerificationKey PaymentKey) -renderSomeAddressVerificationKey (AGenesisExtendedVerificationKey vk) = - let genKey = (castVerificationKey vk :: VerificationKey GenesisKey) - payKey = (castVerificationKey genKey :: VerificationKey PaymentKey) - in serialiseToBech32 payKey -renderSomeAddressVerificationKey (AGenesisDelegateExtendedVerificationKey vk) = - -- TODO: We could implement a CastVerificationKeyRole GenesisDelegateKey PaymentKey - -- if we want to avoid casting twice. - let genDelegKey = (castVerificationKey vk :: VerificationKey GenesisDelegateKey) - stakePoolKey = castVerificationKey genDelegKey :: VerificationKey StakePoolKey - in serialiseToBech32 stakePoolKey -renderSomeAddressVerificationKey (AKesVerificationKey vk) = serialiseToBech32 vk -renderSomeAddressVerificationKey (AVrfVerificationKey vk) = serialiseToBech32 vk -renderSomeAddressVerificationKey (AStakeVerificationKey vk) = serialiseToBech32 vk -renderSomeAddressVerificationKey (AStakeExtendedVerificationKey vk) = serialiseToBech32 vk -renderSomeAddressVerificationKey (ADRepVerificationKey vk) = serialiseToBech32 vk -renderSomeAddressVerificationKey (ADRepExtendedVerificationKey vk) = serialiseToBech32 vk +renderSomeAddressVerificationKey = + \case + AByronVerificationKey vk -> prettyByronVerificationKey vk + APaymentVerificationKey vk -> serialiseToBech32 vk + APaymentExtendedVerificationKey vk -> serialiseToBech32 vk + AGenesisUTxOVerificationKey vk -> serialiseToBech32 (castVerificationKey vk :: VerificationKey PaymentKey) + AGenesisExtendedVerificationKey vk -> + let genKey = (castVerificationKey vk :: VerificationKey GenesisKey) + payKey = (castVerificationKey genKey :: VerificationKey PaymentKey) + in serialiseToBech32 payKey + AGenesisDelegateExtendedVerificationKey vk -> + -- TODO: We could implement a CastVerificationKeyRole GenesisDelegateKey PaymentKey + -- if we want to avoid casting twice. + let genDelegKey = (castVerificationKey vk :: VerificationKey GenesisDelegateKey) + stakePoolKey = castVerificationKey genDelegKey :: VerificationKey StakePoolKey + in serialiseToBech32 stakePoolKey + AKesVerificationKey vk -> serialiseToBech32 vk + AVrfVerificationKey vk -> serialiseToBech32 vk + AStakeVerificationKey vk -> serialiseToBech32 vk + AStakeExtendedVerificationKey vk -> serialiseToBech32 vk + ADRepVerificationKey vk -> serialiseToBech32 vk + ADRepExtendedVerificationKey vk -> serialiseToBech32 vk mapSomeAddressVerificationKey :: () From 34b2e14562e40f7e9c25f8f7fb03a6328d0107cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Hurlin?= Date: Tue, 9 Apr 2024 12:05:19 +0200 Subject: [PATCH 2/2] Add support of CC keys as verification keys --- .../internal/Cardano/Api/DeserialiseAnyOf.hs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs b/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs index 32fdb099d5..89bf363685 100644 --- a/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs +++ b/cardano-api/internal/Cardano/Api/DeserialiseAnyOf.hs @@ -248,6 +248,10 @@ data SomeAddressVerificationKey | AStakeExtendedVerificationKey (VerificationKey StakeExtendedKey) | ADRepVerificationKey (VerificationKey DRepKey) | ADRepExtendedVerificationKey (VerificationKey DRepExtendedKey) + | ACommitteeColdVerificationKey (VerificationKey CommitteeColdKey) + | ACommitteeColdExtendedVerificationKey (VerificationKey CommitteeColdExtendedKey) + | ACommitteeHotVerificationKey (VerificationKey CommitteeHotKey) + | ACommitteeHotExtendedVerificationKey (VerificationKey CommitteeHotExtendedKey) deriving (Show) renderSomeAddressVerificationKey :: SomeAddressVerificationKey -> Text @@ -273,6 +277,10 @@ renderSomeAddressVerificationKey = AStakeExtendedVerificationKey vk -> serialiseToBech32 vk ADRepVerificationKey vk -> serialiseToBech32 vk ADRepExtendedVerificationKey vk -> serialiseToBech32 vk + ACommitteeColdVerificationKey vk -> serialiseToBech32 vk + ACommitteeColdExtendedVerificationKey vk -> serialiseToBech32 vk + ACommitteeHotVerificationKey vk -> serialiseToBech32 vk + ACommitteeHotExtendedVerificationKey vk -> serialiseToBech32 vk mapSomeAddressVerificationKey :: () @@ -292,6 +300,10 @@ mapSomeAddressVerificationKey f = \case AStakeExtendedVerificationKey vk -> f vk ADRepVerificationKey vk -> f vk ADRepExtendedVerificationKey vk -> f vk + ACommitteeColdVerificationKey vk -> f vk + ACommitteeColdExtendedVerificationKey vk -> f vk + ACommitteeHotVerificationKey vk -> f vk + ACommitteeHotExtendedVerificationKey vk -> f vk -- | Internal function to pretty render byron keys prettyByronVerificationKey :: VerificationKey ByronKey-> Text @@ -321,6 +333,10 @@ deserialiseAnyVerificationKeyBech32 = allBech32VerKey = [ FromSomeType (AsVerificationKey AsDRepKey) ADRepVerificationKey , FromSomeType (AsVerificationKey AsDRepExtendedKey) ADRepExtendedVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeColdKey) ACommitteeColdVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeColdExtendedKey) ACommitteeColdExtendedVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeHotKey) ACommitteeHotVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeHotExtendedKey) ACommitteeHotExtendedVerificationKey , FromSomeType (AsVerificationKey AsPaymentKey) APaymentVerificationKey , FromSomeType (AsVerificationKey AsPaymentExtendedKey) APaymentExtendedVerificationKey , FromSomeType (AsVerificationKey AsKesKey) AKesVerificationKey @@ -341,6 +357,10 @@ deserialiseAnyVerificationKeyTextEnvelope bs = [ FromSomeType (AsVerificationKey AsByronKey) AByronVerificationKey , FromSomeType (AsVerificationKey AsDRepKey) ADRepVerificationKey , FromSomeType (AsVerificationKey AsDRepExtendedKey) ADRepExtendedVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeColdKey) ACommitteeColdVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeColdExtendedKey) ACommitteeColdExtendedVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeHotKey) ACommitteeHotVerificationKey + , FromSomeType (AsVerificationKey AsCommitteeHotExtendedKey) ACommitteeHotExtendedVerificationKey , FromSomeType (AsVerificationKey AsPaymentKey) APaymentVerificationKey , FromSomeType (AsVerificationKey AsPaymentExtendedKey) APaymentExtendedVerificationKey , FromSomeType (AsVerificationKey AsStakeExtendedKey) AStakeExtendedVerificationKey