@@ -15,6 +15,8 @@ module Cardano.Api.Experimental.Tx.Internal.Certificate.Compatible
1515 , makeStakeAddressDelegationCertificate
1616 , makeStakeAddressRegistrationCertificate
1717 , makeStakeAddressUnregistrationCertificate
18+ , StakeCredentialAndDeposit (.. )
19+ , StakeRegistrationRequirements
1820
1921 -- * Registering stake pools
2022 , makeStakePoolRegistrationCertificate
@@ -79,16 +81,47 @@ makeStakeAddressDelegationCertificate sCred delegatee =
7981 Certificate $
8082 Ledger. mkDelegStakeTxCert (toShelleyStakeCredential sCred) (Api. unStakePoolKeyHash delegatee')
8183
84+ data StakeCredentialAndDeposit = StakeCredentialAndDeposit StakeCredential Ledger. Coin
85+
86+ type family StakeRegistrationRequirements era where
87+ StakeRegistrationRequirements DijkstraEra = StakeCredentialAndDeposit
88+ StakeRegistrationRequirements ConwayEra = StakeCredentialAndDeposit
89+ StakeRegistrationRequirements BabbageEra = StakeCredential
90+ StakeRegistrationRequirements AlonzoEra = StakeCredential
91+ StakeRegistrationRequirements MaryEra = StakeCredential
92+ StakeRegistrationRequirements AllegraEra = StakeCredential
93+ StakeRegistrationRequirements ShelleyEra = StakeCredential
94+
8295makeStakeAddressRegistrationCertificate
8396 :: forall era
8497 . IsShelleyBasedEra era
85- => StakeCredential
98+ => StakeRegistrationRequirements era
8699 -> Certificate (ShelleyLedgerEra era )
87100makeStakeAddressRegistrationCertificate scred =
88- shelleyBasedEraConstraints (shelleyBasedEra @ era ) $
101+ case shelleyBasedEra @ era of
102+ ShelleyBasedEraDijkstra ->
103+ createRegCertWithDeposit scred
104+ ShelleyBasedEraConway ->
105+ createRegCertWithDeposit scred
106+ ShelleyBasedEraBabbage ->
107+ createRegCertNoDeposit scred
108+ ShelleyBasedEraAlonzo ->
109+ createRegCertNoDeposit scred
110+ ShelleyBasedEraMary ->
111+ createRegCertNoDeposit scred
112+ ShelleyBasedEraAllegra ->
113+ createRegCertNoDeposit scred
114+ ShelleyBasedEraShelley ->
115+ createRegCertNoDeposit scred
116+ where
117+ createRegCertWithDeposit stakeCredWithDeposit =
118+ let StakeCredentialAndDeposit cred dep = stakeCredWithDeposit
119+ in Certificate $
120+ Ledger. mkRegDepositTxCert (toShelleyStakeCredential cred) dep
121+ createRegCertNoDeposit stakeCredential =
89122 Certificate $
90123 Ledger. mkRegTxCert $
91- toShelleyStakeCredential scred
124+ toShelleyStakeCredential stakeCredential
92125
93126makeStakeAddressUnregistrationCertificate
94127 :: forall era
0 commit comments