Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 37 additions & 47 deletions c2uplc.cabal
Original file line number Diff line number Diff line change
@@ -1,37 +1,31 @@
cabal-version: 3.0
name: c2uplc
version: 1.0.0
synopsis: UPLC code generator for Covenant IR
cabal-version: 3.0
name: c2uplc
version: 1.0.0
synopsis: UPLC code generator for Covenant IR
description:
An executable converting valid Covenant IR serial forms into UPLC code.

homepage: https://github.com/mlabs-haskell/c2uplc
license: Apache-2.0
license-file: LICENSE
author: Koz Ross, Sean Hunter
maintainer: [email protected], [email protected]
bug-reports: https://github.com/mlabs-haskell/c2uplc/issues
copyright: (C) MLabs 2025
category: Covenant
tested-with: ghc ==9.8.4
build-type: Simple
homepage: https://github.com/mlabs-haskell/c2uplc
license: Apache-2.0
license-file: LICENSE
author: Koz Ross, Sean Hunter
maintainer: [email protected], [email protected]
bug-reports: https://github.com/mlabs-haskell/c2uplc/issues
copyright: (C) MLabs 2025
category: Covenant
tested-with: GHC ==9.8.4
build-type: Simple
extra-source-files:
CHANGELOG.md
README.md

-- Common sections
common lang
ghc-options:
-Wall
-Wcompat
-Wredundant-bang-patterns
-Wredundant-strictness-flags
-Wmissing-deriving-strategies
-Woperator-whitespace
-Wambiguous-fields
-Wmisplaced-pragmas
-Wmissing-export-lists
-Wmissing-import-lists
-Wall -Wcompat -Wredundant-bang-patterns
-Wredundant-strictness-flags -Wmissing-deriving-strategies
-Woperator-whitespace -Wambiguous-fields -Wmisplaced-pragmas
-Wmissing-export-lists -Wmissing-import-lists

default-extensions:
BangPatterns
Expand Down Expand Up @@ -65,37 +59,33 @@ common lang
UndecidableInstances

build-depends:
base >=4.19.0.0 && <5,
covenant ==1.3.0,
, base >=4.19.0.0 && <5
, covenant ==1.3.0

default-language: Haskell2010
default-language: Haskell2010

common test-lang
import: lang
ghc-options:
-O2
-threaded
-rtsopts
-with-rtsopts=-N

import: lang
ghc-options: -O2 -threaded -rtsopts -with-rtsopts=-N
build-depends:
QuickCheck ==2.15.0.1,
c2uplc,
containers >=0.6.8 && <0.8,
prettyprinter ==1.7.1,
tasty ==1.5.3,
tasty-expected-failure ==0.12.3,
tasty-hunit ==0.10.2,
tasty-quickcheck ==0.11.1,
, c2uplc
, containers >=0.6.8 && <0.8
, prettyprinter ==1.7.1
, QuickCheck ==2.15.0.1
, tasty ==1.5.3
, tasty-expected-failure ==0.12.3
, tasty-hunit ==0.10.2
, tasty-quickcheck ==0.11.1

-- Executable
executable c2uplc
import: lang
main-is: Main.hs
import: lang
main-is: Main.hs
hs-source-dirs: app

-- Primary library
library
import: lang
exposed-modules: Covenant.Codegen
hs-source-dirs: src
import: lang
exposed-modules: Covenant.CodeGen
hs-source-dirs: src
build-depends: plutus-core ==1.51.0.0
18 changes: 9 additions & 9 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ package c2uplc
source-repository-package
type: git
location: https://github.com/mlabs-haskell/covenant
tag: aa296816ab093700cc00c7613d428e7a779050ce
--sha256: 0csgnxxa04510giglwvqj80gfyphf77mz75zr7jffa9f36sidmbs
tag: 0c941bc8ddd2c5b498a7b66f4fee36e69d826ea1
--sha256: 0cfywnj8h01rz3pvb7w0rm3ydfa1jds9yqpms4h46ldrl964djfj

-- Note (Koz, 15/08/2025): For the next person who needs to bump Plutus
-- dependencies, this is the order of operations:
Expand Down Expand Up @@ -56,13 +56,13 @@ allow-newer:
, inline-r:bytestring
, inline-r:containers
, inline-r:primitive

allow-newer:
, covenant:QuickCheck
, covenant:quickcheck-instances
-- https://github.com/phadej/vec/issues/121
ral:QuickCheck,
fin:QuickCheck,
bin:QuickCheck,
, ral:QuickCheck
, fin:QuickCheck
, bin:QuickCheck
-- https://github.com/IntersectMBO/plutus/pull/7236
, turtle:optparse-applicative

-- https://github.com/IntersectMBO/plutus/pull/7236
constraints: setup.optparse-applicative >=0.19.0.0
allow-newer: turtle:optparse-applicative
1 change: 0 additions & 1 deletion flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@
cabal = { };
haskell-language-server = { };
hlint = { };
cabal-fmt = { };
fourmolu = { };
hspec-discover = { };
markdown-unlit = { };
Expand Down
109 changes: 108 additions & 1 deletion src/Covenant/CodeGen.hs
Original file line number Diff line number Diff line change
@@ -1,2 +1,109 @@
module Covenant.CodeGen where
module Covenant.CodeGen (
oneArgFuncToPlutus,
twoArgFuncToPlutus,
threeArgFuncToPlutus,
sixArgFuncToPlutus,
)
where

import Covenant.Prim (OneArgFunc, SixArgFunc, ThreeArgFunc, TwoArgFunc)
import Covenant.Prim qualified as CBuiltins
import PlutusCore.Default.Builtins (DefaultFun)
import PlutusCore.Default.Builtins qualified as PBuiltins

oneArgFuncToPlutus :: OneArgFunc -> DefaultFun
oneArgFuncToPlutus = \case
CBuiltins.LengthOfByteString -> PBuiltins.LengthOfByteString
CBuiltins.Sha2_256 -> PBuiltins.Sha2_256
CBuiltins.Sha3_256 -> PBuiltins.Sha3_256
CBuiltins.Blake2b_256 -> PBuiltins.Blake2b_256
CBuiltins.EncodeUtf8 -> PBuiltins.EncodeUtf8
CBuiltins.DecodeUtf8 -> PBuiltins.DecodeUtf8
CBuiltins.FstPair -> PBuiltins.FstPair
CBuiltins.SndPair -> PBuiltins.SndPair
CBuiltins.HeadList -> PBuiltins.HeadList
CBuiltins.TailList -> PBuiltins.TailList
CBuiltins.NullList -> PBuiltins.NullList
CBuiltins.MapData -> PBuiltins.MapData
CBuiltins.ListData -> PBuiltins.ListData
CBuiltins.IData -> PBuiltins.IData
CBuiltins.BData -> PBuiltins.BData
CBuiltins.UnConstrData -> PBuiltins.UnConstrData
CBuiltins.UnMapData -> PBuiltins.UnMapData
CBuiltins.UnListData -> PBuiltins.UnListData
CBuiltins.UnIData -> PBuiltins.UnIData
CBuiltins.UnBData -> PBuiltins.UnBData
CBuiltins.SerialiseData -> PBuiltins.SerialiseData
CBuiltins.BLS12_381_G1_neg -> PBuiltins.Bls12_381_G1_neg
CBuiltins.BLS12_381_G1_compress -> PBuiltins.Bls12_381_G1_compress
CBuiltins.BLS12_381_G1_uncompress -> PBuiltins.Bls12_381_G1_uncompress
CBuiltins.BLS12_381_G2_neg -> PBuiltins.Bls12_381_G2_neg
CBuiltins.BLS12_381_G2_compress -> PBuiltins.Bls12_381_G2_compress
CBuiltins.BLS12_381_G2_uncompress -> PBuiltins.Bls12_381_G2_uncompress
CBuiltins.Keccak_256 -> PBuiltins.Keccak_256
CBuiltins.Blake2b_224 -> PBuiltins.Blake2b_224
CBuiltins.ComplementByteString -> PBuiltins.ComplementByteString
CBuiltins.CountSetBits -> PBuiltins.CountSetBits
CBuiltins.FindFirstSetBit -> PBuiltins.FindFirstSetBit
CBuiltins.Ripemd_160 -> PBuiltins.Ripemd_160

twoArgFuncToPlutus :: TwoArgFunc -> DefaultFun
twoArgFuncToPlutus = \case
CBuiltins.AddInteger -> PBuiltins.AddInteger
CBuiltins.SubtractInteger -> PBuiltins.SubtractInteger
CBuiltins.MultiplyInteger -> PBuiltins.MultiplyInteger
CBuiltins.DivideInteger -> PBuiltins.DivideInteger
CBuiltins.QuotientInteger -> PBuiltins.QuotientInteger
CBuiltins.RemainderInteger -> PBuiltins.RemainderInteger
CBuiltins.ModInteger -> PBuiltins.ModInteger
CBuiltins.EqualsInteger -> PBuiltins.EqualsInteger
CBuiltins.LessThanInteger -> PBuiltins.LessThanInteger
CBuiltins.LessThanEqualsInteger -> PBuiltins.LessThanEqualsInteger
CBuiltins.AppendByteString -> PBuiltins.AppendByteString
CBuiltins.ConsByteString -> PBuiltins.ConsByteString
CBuiltins.IndexByteString -> PBuiltins.IndexByteString
CBuiltins.EqualsByteString -> PBuiltins.EqualsByteString
CBuiltins.LessThanByteString -> PBuiltins.LessThanByteString
CBuiltins.LessThanEqualsByteString -> PBuiltins.LessThanEqualsByteString
CBuiltins.AppendString -> PBuiltins.AppendString
CBuiltins.EqualsString -> PBuiltins.EqualsString
CBuiltins.ChooseUnit -> PBuiltins.ChooseUnit
CBuiltins.Trace -> PBuiltins.Trace
CBuiltins.MkCons -> PBuiltins.MkCons
CBuiltins.ConstrData -> PBuiltins.ConstrData
CBuiltins.EqualsData -> PBuiltins.EqualsData
CBuiltins.MkPairData -> PBuiltins.MkPairData
CBuiltins.BLS12_381_G1_add -> PBuiltins.Bls12_381_G1_add
CBuiltins.BLS12_381_G1_equal -> PBuiltins.Bls12_381_G1_equal
CBuiltins.BLS12_381_G1_hashToGroup -> PBuiltins.Bls12_381_G1_hashToGroup
CBuiltins.BLS12_381_G1_scalarMul -> PBuiltins.Bls12_381_G1_scalarMul
CBuiltins.BLS12_381_G2_add -> PBuiltins.Bls12_381_G2_add
CBuiltins.BLS12_381_G2_equal -> PBuiltins.Bls12_381_G2_equal
CBuiltins.BLS12_381_G2_hashToGroup -> PBuiltins.Bls12_381_G2_hashToGroup
CBuiltins.BLS12_381_G2_scalarMul -> PBuiltins.Bls12_381_G2_scalarMul
CBuiltins.BLS12_381_millerLoop -> PBuiltins.Bls12_381_millerLoop
CBuiltins.BLS12_381_mulMlResult -> PBuiltins.Bls12_381_mulMlResult
CBuiltins.BLS12_381_finalVerify -> PBuiltins.Bls12_381_finalVerify
CBuiltins.ByteStringToInteger -> PBuiltins.ByteStringToInteger
CBuiltins.ReadBit -> PBuiltins.ReadBit
CBuiltins.ReplicateByte -> PBuiltins.ReplicateByte
CBuiltins.ShiftByteString -> PBuiltins.ShiftByteString
CBuiltins.RotateByteString -> PBuiltins.RotateByteString

threeArgFuncToPlutus :: ThreeArgFunc -> DefaultFun
threeArgFuncToPlutus = \case
CBuiltins.VerifyEd25519Signature -> PBuiltins.VerifyEd25519Signature
CBuiltins.VerifyEcdsaSecp256k1Signature -> PBuiltins.VerifyEcdsaSecp256k1Signature
CBuiltins.VerifySchnorrSecp256k1Signature -> PBuiltins.VerifySchnorrSecp256k1Signature
CBuiltins.IfThenElse -> PBuiltins.IfThenElse
CBuiltins.ChooseList -> PBuiltins.ChooseList
CBuiltins.IntegerToByteString -> PBuiltins.IntegerToByteString
CBuiltins.AndByteString -> PBuiltins.AndByteString
CBuiltins.OrByteString -> PBuiltins.OrByteString
CBuiltins.XorByteString -> PBuiltins.XorByteString
CBuiltins.WriteBits -> PBuiltins.WriteBits
CBuiltins.ExpModInteger -> PBuiltins.ExpModInteger

sixArgFuncToPlutus :: SixArgFunc -> DefaultFun
sixArgFuncToPlutus = \case
CBuiltins.ChooseData -> PBuiltins.ChooseData