-
-
Save ajuggler/18f128fe8ba6dc20c69a2de4ab8bde29 to your computer and use it in GitHub Desktop.
Serialization of Plutus validators and minting policies
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE OverloadedStrings #-} | |
{-# LANGUAGE TypeApplications #-} | |
module Deploy | |
( writeJSON | |
, writeValidator | |
, writePolicy | |
, writeCS | |
, writeUnit | |
) where | |
import Cardano.Api | |
import Cardano.Api.Shelley (PlutusScript (..)) | |
import Codec.Serialise (serialise) | |
import Data.Aeson (encode) | |
import qualified Data.ByteString.Lazy as LBS | |
import qualified Data.ByteString.Short as SBS | |
import PlutusTx (Data (..)) | |
import qualified PlutusTx | |
-- import qualified Ledger | |
import qualified Plutus.V2.Ledger.Api as V2L | |
import qualified Plutus.Script.Utils.V2.Scripts as Scripts | |
dataToScriptData :: Data -> ScriptData | |
dataToScriptData (Constr n xs) = ScriptDataConstructor n $ dataToScriptData <$> xs | |
dataToScriptData (Map xs) = ScriptDataMap [(dataToScriptData x, dataToScriptData y) | (x, y) <- xs] | |
dataToScriptData (List xs) = ScriptDataList $ dataToScriptData <$> xs | |
dataToScriptData (I n) = ScriptDataNumber n | |
dataToScriptData (B bs) = ScriptDataBytes bs | |
writeJSON :: PlutusTx.ToData a => FilePath -> a -> IO () | |
writeJSON file = LBS.writeFile file . encode . scriptDataToJson ScriptDataJsonDetailedSchema . dataToScriptData . PlutusTx.toData | |
writeUnit :: FilePath -> IO () | |
writeUnit file = writeJSON file () | |
writeValidator :: FilePath -> Scripts.Validator -> IO (Either (FileError ()) ()) | |
writeValidator file = writeFileTextEnvelope @(PlutusScript PlutusScriptV2) file Nothing . PlutusScriptSerialised . SBS.toShort . LBS.toStrict . serialise . V2L.unValidatorScript | |
writePolicy :: FilePath -> Scripts.MintingPolicy -> IO (Either (FileError ()) ()) | |
writePolicy file = writeFileTextEnvelope @(PlutusScript PlutusScriptV2) file Nothing . PlutusScriptSerialised . SBS.toShort . LBS.toStrict . serialise . V2L.unMintingPolicyScript | |
writeCS :: FilePath -> V2L.CurrencySymbol -> IO () | |
writeCS file cs = writeFile file (show cs) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment