@@ -79,26 +79,39 @@ import Data.Aeson (KeyValue ((.=)), ToJSON (..))
7979import GHC.Generics (Generic )
8080import NoThunks.Class (NoThunks )
8181
82- data DijkstraDelegCert = DijkstraRegDelegCert ! StakeCredential ! Delegatee ! Coin
82+ data DijkstraDelegCert
83+ = DijkstraRegCert ! StakeCredential ! Coin
84+ | DijkstraUnRegCert ! StakeCredential ! Coin
85+ | DijkstraRegDelegCert ! StakeCredential ! Delegatee ! Coin
8386 deriving (Show , Generic , Eq , Ord )
8487
8588instance EncCBOR DijkstraDelegCert where
8689 encCBOR = \ case
90+ DijkstraRegCert cred deposit ->
91+ encodeListLen 3
92+ <> encodeWord8 19
93+ <> encCBOR cred
94+ <> encCBOR deposit
95+ DijkstraUnRegCert cred deposit ->
96+ encodeListLen 3
97+ <> encodeWord8 20
98+ <> encCBOR cred
99+ <> encCBOR deposit
87100 DijkstraRegDelegCert cred (DelegStake poolId) deposit ->
88101 encodeListLen 4
89- <> encodeWord8 19
102+ <> encodeWord8 21
90103 <> encCBOR cred
91104 <> encCBOR poolId
92105 <> encCBOR deposit
93106 DijkstraRegDelegCert cred (DelegVote drep) deposit ->
94107 encodeListLen 4
95- <> encodeWord8 20
108+ <> encodeWord8 22
96109 <> encCBOR cred
97110 <> encCBOR drep
98111 <> encCBOR deposit
99112 DijkstraRegDelegCert cred (DelegStakeVote poolId dRep) deposit ->
100113 encodeListLen 5
101- <> encodeWord8 21
114+ <> encodeWord8 23
102115 <> encCBOR cred
103116 <> encCBOR poolId
104117 <> encCBOR dRep
@@ -110,8 +123,21 @@ instance NoThunks DijkstraDelegCert
110123
111124instance ToJSON DijkstraDelegCert where
112125 toJSON = \ case
126+ DijkstraRegCert cred deposit ->
127+ kindObject
128+ " RegCert"
129+ [ " credential" .= toJSON cred
130+ , " deposit" .= toJSON deposit
131+ ]
132+ DijkstraUnRegCert cred refund ->
133+ kindObject
134+ " UnRegCert"
135+ [ " credential" .= toJSON cred
136+ , " refund" .= toJSON refund
137+ ]
113138 DijkstraRegDelegCert cred delegatee deposit ->
114- kindObject " RegDelegCert" $
139+ kindObject
140+ " RegDelegCert"
115141 [ " credential" .= toJSON cred
116142 , " delegatee" .= toJSON delegatee
117143 , " deposit" .= toJSON deposit
@@ -126,8 +152,6 @@ data DijkstraTxCert era
126152data DijkstraTxCertUpgradeError
127153 = RegTxCertExpunged
128154 | UnRegTxCertExpunged
129- | RegDepositTxCertExpunged
130- | UnRegDepositTxCertExpunged
131155 | DelegTxCertExpunged
132156 deriving (Eq , Show )
133157
@@ -157,20 +181,29 @@ instance
157181 where
158182 decCBOR = decodeRecordSum " DijkstraTxCert" $ \ case
159183 t
160- | 0 <= t && t < 3 -> fail " Shelley certificates are no longer supported"
184+ | 0 <= t && t < 3 -> fail " Certificates without deposits are no longer supported"
161185 | 3 <= t && t < 5 -> poolTxCertDecoder t
162186 | t == 5 -> fail " Genesis delegation certificates are no longer supported"
163187 | t == 6 -> fail " MIR certificates are no longer supported"
164- | 7 <= t && t < 11 -> fail " Certificates without deposits are no longer supported"
188+ | 7 <= t && t < 9 -> conwayTxCertDelegDecoder t
189+ | 9 <= t && t < 11 -> fail " Certificates without deposits are no longer supported"
165190 | 11 <= t && t < 19 -> conwayTxCertDelegDecoder t
166191 | 19 <= t -> dijkstraTxCertDelegDecoder t
167192 t -> invalidKey t
168193
169194dijkstraTxCertDelegDecoder :: ConwayEraTxCert era => Word -> Decoder s (Int , TxCert era )
170195dijkstraTxCertDelegDecoder = \ case
171- 19 -> regDelegCertDecoder 4 (DelegStake <$> decCBOR)
172- 20 -> regDelegCertDecoder 4 (DelegVote <$> decCBOR)
173- 21 -> regDelegCertDecoder 5 (DelegStakeVote <$> decCBOR <*> decCBOR)
196+ 19 -> do
197+ cred <- decCBOR
198+ deposit <- decCBOR
199+ pure (3 , RegDepositTxCert cred deposit)
200+ 20 -> do
201+ cred <- decCBOR
202+ deposit <- decCBOR
203+ pure (3 , UnRegDepositTxCert cred deposit)
204+ 21 -> regDelegCertDecoder 4 (DelegStake <$> decCBOR)
205+ 22 -> regDelegCertDecoder 4 (DelegVote <$> decCBOR)
206+ 23 -> regDelegCertDecoder 5 (DelegStakeVote <$> decCBOR <*> decCBOR)
174207 k -> invalidKey k
175208 where
176209 regDelegCertDecoder n decodeDelegatee = do
@@ -200,8 +233,8 @@ instance EraTxCert DijkstraEra where
200233 RetirePoolTxCert poolId epochNo -> Right $ RetirePoolTxCert poolId epochNo
201234 RegTxCert _ -> Left RegTxCertExpunged
202235 UnRegTxCert _ -> Left UnRegTxCertExpunged
203- RegDepositTxCert _ _ -> Left RegDepositTxCertExpunged
204- UnRegDepositTxCert _ _ -> Left UnRegDepositTxCertExpunged
236+ RegDepositTxCert cred c -> Right $ RegDepositTxCert cred c
237+ UnRegDepositTxCert cred c -> Right $ UnRegDepositTxCert cred c
205238 RegDepositDelegTxCert cred d c -> Right $ RegDepositDelegTxCert cred d c
206239 AuthCommitteeHotKeyTxCert ck hk -> Right $ AuthCommitteeHotKeyTxCert ck hk
207240 ResignCommitteeColdTxCert ck a -> Right $ ResignCommitteeColdTxCert ck a
@@ -242,7 +275,11 @@ instance EraTxCert DijkstraEra where
242275
243276getScriptWitnessDijkstraTxCert :: DijkstraTxCert era -> Maybe ScriptHash
244277getScriptWitnessDijkstraTxCert = \ case
245- DijkstraTxCertDeleg (DijkstraRegDelegCert cred _ _) -> credScriptHash cred
278+ DijkstraTxCertDeleg delegCert ->
279+ case delegCert of
280+ DijkstraRegCert cred _ -> credScriptHash cred
281+ DijkstraUnRegCert cred _ -> credScriptHash cred
282+ DijkstraRegDelegCert cred _ _ -> credScriptHash cred
246283 DijkstraTxCertPool {} -> Nothing
247284 DijkstraTxCertGov govCert -> govWitness govCert
248285 where
@@ -257,7 +294,11 @@ getScriptWitnessDijkstraTxCert = \case
257294
258295getVKeyWitnessDijkstraTxCert :: DijkstraTxCert era -> Maybe (KeyHash 'Witness)
259296getVKeyWitnessDijkstraTxCert = \ case
260- DijkstraTxCertDeleg (DijkstraRegDelegCert cred _ _) -> credKeyHashWitness cred
297+ DijkstraTxCertDeleg delegCert ->
298+ case delegCert of
299+ DijkstraRegCert cred _ -> credKeyHashWitness cred
300+ DijkstraUnRegCert cred _ -> credKeyHashWitness cred
301+ DijkstraRegDelegCert cred _ _ -> credKeyHashWitness cred
261302 DijkstraTxCertPool poolCert -> Just $ poolCertKeyHashWitness poolCert
262303 DijkstraTxCertGov govCert -> govWitness govCert
263304 where
@@ -287,11 +328,15 @@ instance ShelleyEraTxCert DijkstraEra where
287328 getMirTxCert = const Nothing
288329
289330instance ConwayEraTxCert DijkstraEra where
290- mkRegDepositTxCert = notSupportedInThisEra
291- getRegDepositTxCert = const Nothing
331+ mkRegDepositTxCert cred c = DijkstraTxCertDeleg $ DijkstraRegCert cred c
332+
333+ getRegDepositTxCert (DijkstraTxCertDeleg (DijkstraRegCert cred c)) = Just (cred, c)
334+ getRegDepositTxCert _ = Nothing
335+
336+ mkUnRegDepositTxCert cred c = DijkstraTxCertDeleg $ DijkstraUnRegCert cred c
292337
293- mkUnRegDepositTxCert = notSupportedInThisEra
294- getUnRegDepositTxCert = const Nothing
338+ getUnRegDepositTxCert ( DijkstraTxCertDeleg ( DijkstraUnRegCert cred c)) = Just (cred, c)
339+ getUnRegDepositTxCert _ = Nothing
295340
296341 mkDelegTxCert = notSupportedInThisEra
297342 getDelegTxCert = const Nothing
0 commit comments