Modified formatting, hopefully passes CI

This commit is contained in:
Riley Kilgore 2022-03-10 06:16:33 -08:00
parent 9d1952e981
commit d0595f4869
2 changed files with 93 additions and 85 deletions

View file

@ -39,4 +39,4 @@ benchmarks =
] ]
authorityToken :: AuthorityToken authorityToken :: AuthorityToken
authorityToken = AuthorityToken (Value.assetClass "" "") authorityToken = AuthorityToken (Value.assetClass "" "")

View file

@ -1,84 +1,92 @@
{- | {-# LANGUAGE TemplateHaskell #-}
Module : Agora.MultiSig
Maintainer : riley_kilgore@outlook.com {- |
Description: A basic N of M multisignature validation function. Module : Agora.MultiSig
-} Maintainer : riley_kilgore@outlook.com
{-# LANGUAGE TemplateHaskell #-} Description: A basic N of M multisignature validation function.
-}
module Agora.MultiSig ( module Agora.MultiSig (
validatedByMultisig, validatedByMultisig,
pvalidatedByMultisig, pvalidatedByMultisig,
MultiSig (..), MultiSig (..),
) where ) where
import Plutarch.Api.V1 ( import Plutarch.Api.V1 (
PPubKeyHash, PPubKeyHash,
PScriptContext (..), PScriptContext (..),
) )
import Plutarch.DataRepr ( import Plutarch.DataRepr (
DerivePConstantViaData (DerivePConstantViaData), DerivePConstantViaData (DerivePConstantViaData),
PDataFields, PDataFields,
PIsDataReprInstances (PIsDataReprInstances), PIsDataReprInstances (PIsDataReprInstances),
) )
import Plutarch.Lift ( import Plutarch.Lift (
PLifted, PLifted,
PUnsafeLiftDecl, PUnsafeLiftDecl,
) )
import Plutarch.Monadic qualified as P import Plutarch.Monadic qualified as P
import Plutus.V1.Ledger.Crypto (PubKeyHash) import Plutus.V1.Ledger.Crypto (PubKeyHash)
import qualified PlutusTx import PlutusTx qualified
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
import GHC.Generics qualified as GHC import GHC.Generics qualified as GHC
import Generics.SOP (Generic, I (I)) import Generics.SOP (Generic, I (I))
import Prelude import Prelude
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
{- | A MultiSig represents a proof that a particular set of signatures {- | A MultiSig represents a proof that a particular set of signatures
are present on a transaction. are present on a transaction.
-} -}
data MultiSig = MultiSig data MultiSig = MultiSig
{ keys :: [PubKeyHash] { keys :: [PubKeyHash]
-- ^ List of PubKeyHashes that must be present in the list of signatories. -- ^ List of PubKeyHashes that must be present in the list of signatories.
, minSigs :: Integer , minSigs :: Integer
} deriving stock (GHC.Generic) }
deriving anyclass (Generic) deriving stock (GHC.Generic)
deriving anyclass (Generic)
PlutusTx.makeLift ''MultiSig
PlutusTx.unstableMakeIsData ''MultiSig PlutusTx.makeLift ''MultiSig
PlutusTx.unstableMakeIsData ''MultiSig
newtype PMultiSig (s :: S) = PMultiSig
{ getMultiSig :: newtype PMultiSig (s :: S) = PMultiSig
Term s (PDataRecord '[ "keys" ':= PBuiltinList (PAsData PPubKeyHash) { getMultiSig ::
, "minSigs" ':= PInteger]) Term
} s
deriving stock (GHC.Generic) ( PDataRecord
deriving anyclass (Generic) '[ "keys" ':= PBuiltinList (PAsData PPubKeyHash)
deriving anyclass (PIsDataRepr) , "minSigs" ':= PInteger
deriving ]
(PlutusType, PIsData, PDataFields) )
via (PIsDataReprInstances PMultiSig) }
deriving stock (GHC.Generic)
instance PUnsafeLiftDecl PMultiSig where type PLifted PMultiSig = MultiSig deriving anyclass (Generic)
deriving via (DerivePConstantViaData MultiSig PMultiSig) instance (PConstant MultiSig) deriving anyclass (PIsDataRepr)
deriving
-------------------------------------------------------------------------------- (PlutusType, PIsData, PDataFields)
via (PIsDataReprInstances PMultiSig)
validatedByMultisig :: MultiSig -> Term s (PScriptContext :--> PBool)
validatedByMultisig params = instance PUnsafeLiftDecl PMultiSig where type PLifted PMultiSig = MultiSig
plam $ \ctx' -> P.do deriving via (DerivePConstantViaData MultiSig PMultiSig) instance (PConstant MultiSig)
pvalidatedByMultisig # (pconstant params) # ctx'
--------------------------------------------------------------------------------
pvalidatedByMultisig :: Term s (PMultiSig :--> PScriptContext :--> PBool)
pvalidatedByMultisig = validatedByMultisig :: MultiSig -> Term s (PScriptContext :--> PBool)
plam $ \multi' ctx' -> P.do validatedByMultisig params = pvalidatedByMultisig # pconstant params
ctx <- pletFields @'["txInfo", "purpose"] ctx'
multi <- pletFields @'["keys", "minSigs"] multi' pvalidatedByMultisig :: Term s (PMultiSig :--> PScriptContext :--> PBool)
let signatories = pfield @"signatories" # ctx.txInfo pvalidatedByMultisig =
((pfromData multi.minSigs) #<= (plength #$ pfilter plam $ \multi' ctx' -> P.do
# (plam $ \a -> ctx <- pletFields @'["txInfo", "purpose"] ctx'
(pelem # a # pfromData signatories)) multi <- pletFields @'["keys", "minSigs"] multi'
# multi.keys)) let signatories = pfield @"signatories" # ctx.txInfo
( (pfromData multi.minSigs)
#<= ( plength #$ pfilter
# ( plam $ \a ->
(pelem # a # pfromData signatories)
)
# multi.keys
)
)