reimplement mustFindDatum' with PTryFrom
This commit is contained in:
parent
3da721b876
commit
750761ed0d
2 changed files with 10 additions and 14 deletions
|
|
@ -119,7 +119,7 @@ import Plutarch.Map.Extra (pkeys, plookup, plookup')
|
||||||
import Plutarch.Monadic qualified as P
|
import Plutarch.Monadic qualified as P
|
||||||
import Plutarch.SafeMoney (PDiscrete, Tagged (..), puntag, pvalueDiscrete)
|
import Plutarch.SafeMoney (PDiscrete, Tagged (..), puntag, pvalueDiscrete)
|
||||||
import Plutarch.Unsafe (punsafeCoerce)
|
import Plutarch.Unsafe (punsafeCoerce)
|
||||||
import Plutarch.TryFrom(PTryFrom(..))
|
import Plutarch.TryFrom(PTryFrom(..), ptryFrom)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -356,8 +356,7 @@ In this case, the script will check
|
||||||
governorValidator :: Governor -> ClosedTerm PValidator
|
governorValidator :: Governor -> ClosedTerm PValidator
|
||||||
governorValidator gov =
|
governorValidator gov =
|
||||||
plam $ \datum' redeemer' ctx' -> P.do
|
plam $ \datum' redeemer' ctx' -> P.do
|
||||||
-- TODO: use ptryFrom
|
(pfromData -> redeemer, _) <- ptryFrom redeemer'
|
||||||
redeemer <- pmatch $ pfromData @PGovernorRedeemer $ punsafeCoerce redeemer'
|
|
||||||
ctx <- pletFields @'["txInfo", "purpose"] ctx'
|
ctx <- pletFields @'["txInfo", "purpose"] ctx'
|
||||||
|
|
||||||
txInfo' <- plet $ pfromData $ ctx.txInfo
|
txInfo' <- plet $ pfromData $ ctx.txInfo
|
||||||
|
|
@ -374,8 +373,7 @@ governorValidator gov =
|
||||||
ownInput <- pletFields @'["address", "value"] ownInput'
|
ownInput <- pletFields @'["address", "value"] ownInput'
|
||||||
let selfAddress = pfromData $ ownInput.address
|
let selfAddress = pfromData $ ownInput.address
|
||||||
|
|
||||||
-- TODO: use ptryFrom
|
(pfromData -> (oldParams' :: Term _ PGovernorDatum), _) <- ptryFrom datum'
|
||||||
let oldParams' = pfromData @PGovernorDatum $ punsafeCoerce datum'
|
|
||||||
oldParams <- pletFields @'["proposalThresholds", "nextProposalId"] oldParams'
|
oldParams <- pletFields @'["proposalThresholds", "nextProposalId"] oldParams'
|
||||||
|
|
||||||
let ownInputGSTAmount = stateTokenValueOf # ownInput.value
|
let ownInputGSTAmount = stateTokenValueOf # ownInput.value
|
||||||
|
|
@ -402,7 +400,7 @@ governorValidator gov =
|
||||||
mustBePJust # "Ouput governor state datum not found"
|
mustBePJust # "Ouput governor state datum not found"
|
||||||
#$ pfindDatum # outputGovernorStateDatumHash # txInfo'
|
#$ pfindDatum # outputGovernorStateDatumHash # txInfo'
|
||||||
|
|
||||||
case redeemer of
|
pmatch redeemer $ \case
|
||||||
PCreateProposal _ -> P.do
|
PCreateProposal _ -> P.do
|
||||||
let expectedNextProposalId = pgetNextProposalId # oldParams.nextProposalId
|
let expectedNextProposalId = pgetNextProposalId # oldParams.nextProposalId
|
||||||
expectedNewDatum =
|
expectedNewDatum =
|
||||||
|
|
|
||||||
|
|
@ -529,13 +529,10 @@ hasOnlyOneTokenOfCurrencySymbol = phoistAcyclic $
|
||||||
psymbolValueOf # cs # vs #== 1
|
psymbolValueOf # cs # vs #== 1
|
||||||
#&& (plength #$ pto $ pto $ pto vs) #== 1
|
#&& (plength #$ pto $ pto $ pto vs) #== 1
|
||||||
|
|
||||||
{- Find datum given a maybe datum hash, in an unsafe manner.
|
-- | Find datum given a maybe datum hash
|
||||||
|
|
||||||
FIXME: reimplement using 'ptryFrom'.
|
|
||||||
-}
|
|
||||||
mustFindDatum' ::
|
mustFindDatum' ::
|
||||||
forall (datum :: PType).
|
forall (datum :: PType).
|
||||||
PIsData datum =>
|
(PIsData datum, PTryFrom PData (PAsData datum))=>
|
||||||
forall s.
|
forall s.
|
||||||
Term
|
Term
|
||||||
s
|
s
|
||||||
|
|
@ -545,9 +542,10 @@ mustFindDatum' ::
|
||||||
)
|
)
|
||||||
mustFindDatum' = phoistAcyclic $
|
mustFindDatum' = phoistAcyclic $
|
||||||
plam $ \mdh datums -> P.do
|
plam $ \mdh datums -> P.do
|
||||||
PDJust ((pfield @"_0" #) -> dh) <- pmatch mdh
|
let dh = mustBePDJust # "Given TxOut dones't have a datum" # mdh
|
||||||
PJust dt <- pmatch $ plookupTuple # dh # datums
|
dt = mustBePJust # "Datum not found in the transaction" #$ plookupTuple # dh # datums
|
||||||
punsafeCoerce dt
|
(d, _ ) <- ptryFrom $ pforgetData $ pdata dt
|
||||||
|
pfromData d
|
||||||
|
|
||||||
{- | Extract the value stored in a PMaybe container.
|
{- | Extract the value stored in a PMaybe container.
|
||||||
If there's no value, throw an error with the given message.
|
If there's no value, throw an error with the given message.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue