Skip to content

Commit

Permalink
Merge pull request #569 from IntersectMBO/cl/drepmetadata
Browse files Browse the repository at this point in the history
Remove check for DRep metadata size
  • Loading branch information
CarlosLopezDeLara authored Jul 3, 2024
2 parents 46097e3 + 1b44dd9 commit 7ceecfd
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 40 deletions.
47 changes: 9 additions & 38 deletions cardano-api/internal/Cardano/Api/DRepMetadata.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,14 @@
module Cardano.Api.DRepMetadata (
-- * DRep off-chain metadata
DRepMetadata(..),
validateAndHashDRepMetadata,
DRepMetadataValidationError(..),
hashDRepMetadata,

-- * Data family instances
AsType(..),
Hash(..),
) where

import Cardano.Api.Eras
import Cardano.Api.Error
import Cardano.Api.Hash
import Cardano.Api.HasTypeProxy
import Cardano.Api.Keys.Byron
Expand All @@ -29,9 +27,7 @@ import Cardano.Ledger.Crypto (StandardCrypto)
import qualified Cardano.Ledger.Keys as Shelley

import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Data.Either.Combinators (maybeToRight)
import Prettyprinter

-- ----------------------------------------------------------------------------
-- DRep metadata
Expand All @@ -57,37 +53,12 @@ instance SerialiseAsRawBytes (Hash DRepMetadata) where
maybeToRight (SerialiseAsRawBytesError "Unable to deserialise Hash DRepMetadata") $
DRepMetadataHash <$> Crypto.hashFromBytes bs

-- | A drep metadata validation error.
data DRepMetadataValidationError
= DRepMetadataInvalidLengthError
-- ^ The length of the JSON-encoded drep metadata exceeds the
-- maximum.
!Int
-- ^ Maximum byte length.
!Int
-- ^ Actual byte length.
deriving Show

instance Error DRepMetadataValidationError where
prettyError = \case
DRepMetadataInvalidLengthError maxLen actualLen ->
mconcat
[ "DRep metadata must consist of at most "
, pretty maxLen
, " bytes, but it consists of "
, pretty actualLen
, " bytes."
]

-- | Decode and validate the provided JSON-encoded bytes as 'DRepMetadata'.
-- Return the decoded metadata and the hash of the original bytes.
validateAndHashDRepMetadata
-- | Return the decoded metadata and the hash of the original bytes.
hashDRepMetadata
:: ByteString
-> Either DRepMetadataValidationError (DRepMetadata, Hash DRepMetadata)
validateAndHashDRepMetadata bs
-- TODO confirm if there are size limits to the DRep metadata
| BS.length bs <= 512 = do
let md = DRepMetadata bs
let mdh = DRepMetadataHash (Crypto.hashWith id bs)
return (md, mdh)
| otherwise = Left $ DRepMetadataInvalidLengthError 512 (BS.length bs)
-> (DRepMetadata, Hash DRepMetadata)
hashDRepMetadata bs =
let md = DRepMetadata bs
mdh = DRepMetadataHash (Crypto.hashWith id bs) in
(md, mdh)

3 changes: 1 addition & 2 deletions cardano-api/src/Cardano/Api.hs
Original file line number Diff line number Diff line change
Expand Up @@ -969,8 +969,7 @@ module Cardano.Api (
DRepExtendedKey,
DRepMetadata,
DRepMetadataReference,
DRepMetadataValidationError,
validateAndHashDRepMetadata,
hashDRepMetadata,

-- ** Governance related certificates
AnchorDataHash(..),
Expand Down

0 comments on commit 7ceecfd

Please sign in to comment.