Modified formatting, hopefully passes CI
This commit is contained in:
parent
9d1952e981
commit
d0595f4869
2 changed files with 93 additions and 85 deletions
|
|
@ -39,4 +39,4 @@ benchmarks =
|
||||||
]
|
]
|
||||||
|
|
||||||
authorityToken :: AuthorityToken
|
authorityToken :: AuthorityToken
|
||||||
authorityToken = AuthorityToken (Value.assetClass "" "")
|
authorityToken = AuthorityToken (Value.assetClass "" "")
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue