add comments to Multisig module

This commit is contained in:
Emily Martins 2022-03-15 12:12:52 +01:00
parent 461478b1b7
commit f9244aca38
2 changed files with 25 additions and 17 deletions

View file

@ -27,7 +27,8 @@ import Spec.Sample.Stake qualified as Stake
--------------------------------------------------------------------------------
tests :: [TestTree]
tests =
[ testGroup "policy" $
[ testGroup
"policy"
[ scriptTest "minting" (compile $ stakePolicy Stake.stake # pforgetData (pconstantData ()) # pconstant Stake.stakeCreation)
]
]

View file

@ -4,6 +4,8 @@
Module : Agora.MultiSig
Maintainer : riley_kilgore@outlook.com
Description: A basic N of M multisignature validation function.
A basic N of M multisignature validation function.
-}
module Agora.MultiSig (
validatedByMultisig,
@ -13,7 +15,7 @@ module Agora.MultiSig (
import Plutarch.Api.V1 (
PPubKeyHash,
PScriptContext (..),
PTxInfo (..),
)
import Plutarch.DataRepr (
DerivePConstantViaData (DerivePConstantViaData),
@ -51,6 +53,7 @@ data MultiSig = MultiSig
PlutusTx.makeLift ''MultiSig
PlutusTx.unstableMakeIsData ''MultiSig
-- | Plutarch-level MultiSig
newtype PMultiSig (s :: S) = PMultiSig
{ getMultiSig ::
Term
@ -73,20 +76,24 @@ deriving via (DerivePConstantViaData MultiSig PMultiSig) instance (PConstant Mul
--------------------------------------------------------------------------------
validatedByMultisig :: MultiSig -> Term s (PScriptContext :--> PBool)
validatedByMultisig params = pvalidatedByMultisig # pconstant params
-- | Check if a Haskell-level MultiSig signs this transaction
validatedByMultisig :: MultiSig -> Term s (PTxInfo :--> PBool)
validatedByMultisig params =
phoistAcyclic $
pvalidatedByMultisig # pconstant params
pvalidatedByMultisig :: Term s (PMultiSig :--> PScriptContext :--> PBool)
-- | Check if a Plutarch-level MultiSig signs this transaction
pvalidatedByMultisig :: Term s (PMultiSig :--> PTxInfo :--> PBool)
pvalidatedByMultisig =
plam $ \multi' ctx' -> P.do
ctx <- pletFields @'["txInfo", "purpose"] ctx'
multi <- pletFields @'["keys", "minSigs"] multi'
let signatories = pfield @"signatories" # ctx.txInfo
(pfromData multi.minSigs)
#<= ( plength #$ pfilter
# plam
( \a ->
pelem # a # pfromData signatories
)
# multi.keys
)
phoistAcyclic $
plam $ \multi' txInfo -> P.do
multi <- pletFields @'["keys", "minSigs"] multi'
let signatories = pfield @"signatories" # txInfo
pfromData multi.minSigs
#<= ( plength #$ pfilter
# plam
( \a ->
pelem # a # pfromData signatories
)
# multi.keys
)