Skip to content

Commit

Permalink
Expose PlutusV3-related functions
Browse files Browse the repository at this point in the history
  • Loading branch information
koslambrou committed Dec 3, 2024
1 parent 563599c commit d64843f
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 6 deletions.
25 changes: 19 additions & 6 deletions src/base/lib/Convex/PlutusLedger.hs
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,10 @@ module Convex.PlutusLedger(
transAddressShelley,

-- * Tx IDs
unTransTxOutRef,
transTxOutRef,
unTransTxOutRefV1,
transTxOutRefV1,
unTransTxOutRefV3,
transTxOutRefV3,

-- * POSIX Time
unTransPOSIXTime,
Expand Down Expand Up @@ -86,6 +88,7 @@ import qualified PlutusLedgerApi.V1.Scripts as P
import qualified PlutusLedgerApi.V1.Value as Value
import qualified PlutusTx.AssocMap as Map
import qualified PlutusTx.Prelude as PlutusTx
import qualified PlutusLedgerApi.V3 as PV3

-- | Translate a script hash from @cardano-api@ to @plutus@
transScriptHash :: C.ScriptHash -> PV1.ScriptHash
Expand Down Expand Up @@ -212,16 +215,26 @@ unTransAddressShelley networkId (PV1.Address cred staking) =
<$> unTransCredential cred
<*> unTransStakeAddressReference staking

unTransTxOutRef :: PV1.TxOutRef -> Either C.SerialiseAsRawBytesError C.TxIn
unTransTxOutRef PV1.TxOutRef{PV1.txOutRefId=PV1.TxId bs, PV1.txOutRefIdx} =
unTransTxOutRefV1 :: PV1.TxOutRef -> Either C.SerialiseAsRawBytesError C.TxIn
unTransTxOutRefV1 PV1.TxOutRef{PV1.txOutRefId = PV1.TxId bs, PV1.txOutRefIdx} =
let i = C.deserialiseFromRawBytes C.AsTxId $ PlutusTx.fromBuiltin bs
in C.TxIn <$> i <*> pure (C.TxIx $ fromIntegral txOutRefIdx)

transTxOutRef :: C.TxIn -> PV1.TxOutRef
transTxOutRef (C.TxIn txId (C.TxIx ix)) =
unTransTxOutRefV3 :: PV3.TxOutRef -> Either C.SerialiseAsRawBytesError C.TxIn
unTransTxOutRefV3 PV3.TxOutRef{PV3.txOutRefId = PV3.TxId bs, PV3.txOutRefIdx} =
let i = C.deserialiseFromRawBytes C.AsTxId $ PlutusTx.fromBuiltin bs
in C.TxIn <$> i <*> pure (C.TxIx $ fromIntegral txOutRefIdx)

transTxOutRefV1 :: C.TxIn -> PV1.TxOutRef
transTxOutRefV1 (C.TxIn txId (C.TxIx ix)) =
let i = PV1.TxId $ PlutusTx.toBuiltin $ C.serialiseToRawBytes txId
in PV1.TxOutRef i (fromIntegral ix)

transTxOutRefV3 :: C.TxIn -> PV3.TxOutRef
transTxOutRefV3 (C.TxIn txId (C.TxIx ix)) =
let i = PV3.TxId $ PlutusTx.toBuiltin $ C.serialiseToRawBytes txId
in PV3.TxOutRef i (fromIntegral ix)

transPOSIXTime :: POSIXTime -> PV1.POSIXTime
transPOSIXTime posixTimeSeconds = PV1.POSIXTime (floor @Rational (1000 * realToFrac posixTimeSeconds))

Expand Down
11 changes: 11 additions & 0 deletions src/optics/lib/Convex/CardanoApi/Lenses.hs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ module Convex.CardanoApi.Lenses(
_ScriptWitness,
_PlutusScriptWitnessV1,
_PlutusScriptWitnessV2,
_PlutusScriptWitnessV3,

-- ** Build tx
_BuildTxWith,
Expand Down Expand Up @@ -577,6 +578,16 @@ _PlutusScriptWitnessV2 = prism' from to where
to (C.PlutusScriptWitness era C.PlutusScriptV2 i dtr red ex) = Just (era, C.PlutusScriptV2, i, dtr, red, ex)
to _ = Nothing

_PlutusScriptWitnessV3 :: forall era witctx. Prism' (C.ScriptWitness witctx era) (C.ScriptLanguageInEra C.PlutusScriptV3 era, C.PlutusScriptVersion C.PlutusScriptV3, C.PlutusScriptOrReferenceInput C.PlutusScriptV3, C.ScriptDatum witctx, C.ScriptRedeemer, C.ExecutionUnits)
_PlutusScriptWitnessV3 = prism' from to
where
from :: (C.ScriptLanguageInEra C.PlutusScriptV3 era, C.PlutusScriptVersion C.PlutusScriptV3, C.PlutusScriptOrReferenceInput C.PlutusScriptV3, C.ScriptDatum witctx, C.ScriptRedeemer, C.ExecutionUnits) -> C.ScriptWitness witctx era
from (lang, v, i, dtr, red, ex) = C.PlutusScriptWitness lang v i dtr red ex

to :: C.ScriptWitness witctx era -> Maybe (C.ScriptLanguageInEra C.PlutusScriptV3 era, C.PlutusScriptVersion C.PlutusScriptV3, C.PlutusScriptOrReferenceInput C.PlutusScriptV3, C.ScriptDatum witctx, C.ScriptRedeemer, C.ExecutionUnits)
to (C.PlutusScriptWitness era C.PlutusScriptV3 i dtr red ex) = Just (era, C.PlutusScriptV3, i, dtr, red, ex)
to _ = Nothing

_TxValidityNoLowerBound :: forall era. Prism' (C.TxValidityLowerBound era) ()
_TxValidityNoLowerBound = prism' from to where
from () = C.TxValidityNoLowerBound
Expand Down

0 comments on commit d64843f

Please sign in to comment.