add comments to Multisig module

This commit is contained in:
Emily Martins 2022-03-15 12:12:52 +01:00
parent d8ae2f7b33
commit 9dc89bcf55
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 :: [TestTree]
tests = tests =
[ testGroup "policy" $ [ testGroup
"policy"
[ scriptTest "minting" (compile $ stakePolicy Stake.stake # pforgetData (pconstantData ()) # pconstant Stake.stakeCreation) [ scriptTest "minting" (compile $ stakePolicy Stake.stake # pforgetData (pconstantData ()) # pconstant Stake.stakeCreation)
] ]
] ]

View file

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