Merge pull request #104 from Liqwid-Labs/seungheonoh/newPlutarchCleanTree

Liqwid-Labs/Plutarch
This commit is contained in:
Emily 2022-05-27 21:03:03 +02:00 committed by GitHub
commit 45095ffc8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 6538 additions and 468 deletions

View file

@ -15,11 +15,21 @@ on:
- "flake.lock" - "flake.lock"
- "agora.cabal" - "agora.cabal"
jobs: jobs:
check-formatting: flake:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
matrix:
tasks: ["agora", "formatCheck", "benchCheck"]
steps: steps:
- uses: actions/checkout@v2.4.0 - uses: actions/checkout@v2.4.0
- uses: webfactory/ssh-agent@v0.5.4
with:
ssh-private-key: |
${{ secrets.LIQWID_PLUTARCH_EXTRA_PRIVATE }}
${{ secrets.PLUTARCH_NUMERIC_PRIVATE }}
${{ secrets.PLUTARCH_SAFE_MONEY_PRIVATE }}
- uses: cachix/install-nix-action@v16 - uses: cachix/install-nix-action@v16
name: Set up Nix and IOHK caches name: Set up Nix and IOHK caches
with: with:
@ -34,68 +44,21 @@ jobs:
name: mlabs name: mlabs
authToken: ${{ secrets.CACHIX_KEY }} authToken: ${{ secrets.CACHIX_KEY }}
- run: nix build .#checks.x86_64-linux.formatCheck - run: nix build .#checks.x86_64-linux.${{ matrix.tasks }}
name: Run 'formatCheck' from flake.nix name: Run '${{ matrix.tasks }}' from flake.nix
check-bench:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.4.0
- uses: cachix/install-nix-action@v16
name: Set up Nix and IOHK caches
with:
nix_path: nixpkgs=channel:nixos-unstable
extra_nix_config: |
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: mlabs
authToken: ${{ secrets.CACHIX_KEY }}
- run: nix build .#checks.x86_64-linux.benchCheck
name: Run 'benchCheck' from flake.nix
check-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.4.0
- uses: cachix/install-nix-action@v16
name: Set up Nix and IOHK caches
with:
nix_path: nixpkgs=channel:nixos-unstable
extra_nix_config: |
trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: mlabs
authToken: ${{ secrets.CACHIX_KEY }}
- name: Add cabal folder to cache
id: cabal
uses: actions/cache@v2.1.4
with:
path: |
~/.cabal/packages
~/.cabal/store
dist-newstyle
key: ${{ runner.os }}-cabal
- name: Build the project
run: nix build .#check.x86_64-linux
haddock: haddock:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2.4.0 - uses: actions/checkout@v2.4.0
- uses: webfactory/ssh-agent@v0.5.4
with:
ssh-private-key: |
${{ secrets.LIQWID_PLUTARCH_EXTRA_PRIVATE }}
${{ secrets.PLUTARCH_NUMERIC_PRIVATE }}
${{ secrets.PLUTARCH_SAFE_MONEY_PRIVATE }}
- uses: cachix/install-nix-action@v16 - uses: cachix/install-nix-action@v16
name: Set up Nix and IOHK caches name: Set up Nix and IOHK caches
with: with:

View file

@ -22,11 +22,8 @@ import Agora.Proposal (ProposalId (..), ProposalThresholds (..))
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
import Data.Tagged (Tagged (..))
import Plutarch.Api.V1 (mkValidator, validatorHash) import Plutarch.Api.V1 (mkValidator, validatorHash)
import Plutarch.SafeMoney (Tagged (Tagged))
--------------------------------------------------------------------------------
import Plutus.V1.Ledger.Address (scriptHashAddress) import Plutus.V1.Ledger.Address (scriptHashAddress)
import Plutus.V1.Ledger.Api ( import Plutus.V1.Ledger.Api (
Address, Address,

View file

@ -14,8 +14,8 @@ module Sample.Governor (
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
import Data.Tagged (Tagged (..), untag)
import Plutarch.Api.V1 (mkValidator, validatorHash) import Plutarch.Api.V1 (mkValidator, validatorHash)
import Plutarch.SafeMoney.Tagged
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View file

@ -20,7 +20,6 @@ module Sample.Proposal (
import Plutarch.Api.V1 ( import Plutarch.Api.V1 (
validatorHash, validatorHash,
) )
import Plutarch.SafeMoney (Tagged (Tagged), untag)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -57,9 +56,7 @@ import Agora.Proposal (
) )
import Agora.Proposal.Time (ProposalStartingTime (ProposalStartingTime), ProposalTimingConfig (..)) import Agora.Proposal.Time (ProposalStartingTime (ProposalStartingTime), ProposalTimingConfig (..))
import Agora.Stake (ProposalLock (ProposalLock), Stake (..), StakeDatum (..)) import Agora.Stake (ProposalLock (ProposalLock), Stake (..), StakeDatum (..))
import Data.Tagged (Tagged (..), untag)
--------------------------------------------------------------------------------
import Sample.Shared import Sample.Shared
import Test.Util (closedBoundedInterval, datumPair, toDatumHash, updateMap) import Test.Util (closedBoundedInterval, datumPair, toDatumHash, updateMap)

View file

@ -86,13 +86,13 @@ import Agora.Stake (Stake (..))
import Agora.Treasury (treasuryValidator) import Agora.Treasury (treasuryValidator)
import Agora.Utils (validatorHashToTokenName) import Agora.Utils (validatorHashToTokenName)
import Data.Default.Class (Default (..)) import Data.Default.Class (Default (..))
import Data.Tagged (Tagged (..))
import Plutarch.Api.V1 ( import Plutarch.Api.V1 (
mintingPolicySymbol, mintingPolicySymbol,
mkMintingPolicy, mkMintingPolicy,
mkValidator, mkValidator,
validatorHash, validatorHash,
) )
import Plutarch.SafeMoney
import Plutus.V1.Ledger.Address (scriptHashAddress) import Plutus.V1.Ledger.Address (scriptHashAddress)
import Plutus.V1.Ledger.Api ( import Plutus.V1.Ledger.Api (
Address (Address), Address (Address),

View file

@ -48,7 +48,7 @@ import Plutus.V1.Ledger.Value qualified as Value
import Agora.SafeMoney (GTTag) import Agora.SafeMoney (GTTag)
import Agora.Stake import Agora.Stake
import Agora.Stake.Scripts (stakeValidator) import Agora.Stake.Scripts (stakeValidator)
import Plutarch.SafeMoney import Data.Tagged (Tagged (..), untag)
import Sample.Shared import Sample.Shared
import Test.Util (datumPair, toDatumHash) import Test.Util (datumPair, toDatumHash)

View file

@ -27,10 +27,10 @@ import Agora.Stake.Scripts (stakePolicy, stakeValidator)
import Agora.Treasury (treasuryValidator) import Agora.Treasury (treasuryValidator)
import Control.Monad ((>=>)) import Control.Monad ((>=>))
import Data.Aeson qualified as Aeson import Data.Aeson qualified as Aeson
import Data.Tagged (Tagged)
import GHC.Generics qualified as GHC import GHC.Generics qualified as GHC
import Options (Options (..), parseOptions) import Options (Options (..), parseOptions)
import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy)
import Plutarch.SafeMoney (Tagged)
import Plutus.V1.Ledger.Api (TxOutRef) import Plutus.V1.Ledger.Api (TxOutRef)
import Plutus.V1.Ledger.Value (AssetClass, CurrencySymbol) import Plutus.V1.Ledger.Value (AssetClass, CurrencySymbol)
import Plutus.V1.Ledger.Value qualified as Value import Plutus.V1.Ledger.Value qualified as Value

View file

@ -39,7 +39,7 @@ import Agora.Stake (
) )
import Agora.Stake.Scripts (stakeValidator) import Agora.Stake.Scripts (stakeValidator)
import Data.Default.Class (Default (def)) import Data.Default.Class (Default (def))
import Plutarch.SafeMoney (Tagged (Tagged)) import Data.Tagged (Tagged (Tagged))
import Plutus.V1.Ledger.Api (ScriptContext (..), ScriptPurpose (..)) import Plutus.V1.Ledger.Api (ScriptContext (..), ScriptPurpose (..))
import PlutusTx.AssocMap qualified as AssocMap import PlutusTx.AssocMap qualified as AssocMap
import Sample.Proposal qualified as Proposal import Sample.Proposal qualified as Proposal

View file

@ -62,6 +62,7 @@ common lang
NumericUnderscores NumericUnderscores
OverloadedLabels OverloadedLabels
OverloadedStrings OverloadedStrings
PackageImports
PartialTypeSignatures PartialTypeSignatures
PatternGuards PatternGuards
PolyKinds PolyKinds
@ -87,7 +88,7 @@ common deps
build-depends: build-depends:
, aeson , aeson
, ansi-terminal , ansi-terminal
, base >=4.14 && <5 , base >=4.14 && <5
, base-compat , base-compat
, bytestring , bytestring
, cardano-prelude , cardano-prelude
@ -95,10 +96,11 @@ common deps
, data-default , data-default
, data-default-class , data-default-class
, generics-sop , generics-sop
, liqwid-plutarch-extra
, plutarch , plutarch
, plutarch-extra , plutarch-extra
, plutarch-numeric , plutarch-numeric
, plutarch-safemoney , plutarch-safe-money
, plutus-core , plutus-core
, plutus-ledger-api , plutus-ledger-api
, plutus-tx , plutus-tx
@ -106,9 +108,12 @@ common deps
, prettyprinter , prettyprinter
, recursion-schemes , recursion-schemes
, serialise , serialise
, tagged
, template-haskell , template-haskell
, text , text
mixins:
common test-deps common test-deps
build-depends: build-depends:
, agora , agora
@ -147,7 +152,6 @@ library
Agora.Stake.Scripts Agora.Stake.Scripts
Agora.Treasury Agora.Treasury
Agora.Utils Agora.Utils
Agora.Utils.Value
other-modules: Agora.Aeson.Orphans other-modules: Agora.Aeson.Orphans
hs-source-dirs: agora hs-source-dirs: agora

View file

@ -24,9 +24,9 @@ import Plutarch.Api.V1 (
PTxInfo (..), PTxInfo (..),
PTxOut (..), PTxOut (..),
) )
import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf)
import Plutarch.Api.V1.AssocMap (PMap (PMap)) import Plutarch.Api.V1.AssocMap (PMap (PMap))
import Plutarch.Api.V1.Extra (passetClass, passetClassValueOf) import "plutarch" Plutarch.Api.V1.Value (PValue (PValue))
import Plutarch.Api.V1.Value (PValue (PValue))
import Plutarch.Builtin (pforgetData) import Plutarch.Builtin (pforgetData)
import Plutus.V1.Ledger.Value (AssetClass (AssetClass)) import Plutus.V1.Ledger.Value (AssetClass (AssetClass))

View file

@ -10,7 +10,7 @@ module Agora.Effect (makeEffect) where
import Agora.AuthorityToken (singleAuthorityTokenBurned) import Agora.AuthorityToken (singleAuthorityTokenBurned)
import Agora.Utils (tcassert, tclet, tcmatch, tctryFrom) import Agora.Utils (tcassert, tclet, tcmatch, tctryFrom)
import Plutarch.Api.V1 (PCurrencySymbol, PScriptPurpose (PSpending), PTxInfo, PTxOutRef, PValidator, PValue) import Plutarch.Api.V1 (PCurrencySymbol, PScriptPurpose (PSpending), PTxInfo, PTxOutRef, PValidator, PValue)
import Plutarch.TryFrom (PTryFrom) import Plutarch.TryFrom ()
import Plutus.V1.Ledger.Value (CurrencySymbol) import Plutus.V1.Ledger.Value (CurrencySymbol)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View file

@ -31,7 +31,7 @@ import Plutarch.Api.V1 (
PValidator, PValidator,
PValue, PValue,
) )
import Plutarch.Api.V1.Extra (pvalueOf) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pvalueOf)
import Plutarch.DataRepr ( import Plutarch.DataRepr (
DerivePConstantViaData (..), DerivePConstantViaData (..),
PDataFields, PDataFields,

View file

@ -48,13 +48,16 @@ import Agora.Utils (tclet)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
import Data.Tagged (Tagged (..))
import Plutarch.DataRepr ( import Plutarch.DataRepr (
DerivePConstantViaData (..), DerivePConstantViaData (..),
PDataFields, PDataFields,
PIsDataReprInstances (PIsDataReprInstances), PIsDataReprInstances (PIsDataReprInstances),
) )
import Plutarch.Extra.Comonad (pextract)
import Plutarch.Extra.TermCont (pmatchC)
import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..))
import Plutarch.SafeMoney (Tagged (..), puntag) import Plutarch.SafeMoney (PDiscrete (..))
import Plutarch.TryFrom (PTryFrom (..)) import Plutarch.TryFrom (PTryFrom (..))
import Plutarch.Unsafe (punsafeCoerce) import Plutarch.Unsafe (punsafeCoerce)
@ -188,9 +191,13 @@ governorDatumValid = phoistAcyclic $
pletFields @'["execute", "draft", "vote"] $ pletFields @'["execute", "draft", "vote"] $
pfield @"proposalThresholds" # datum pfield @"proposalThresholds" # datum
execute <- tclet $ puntag thresholds.execute PDiscrete execute' <- pmatchC thresholds.execute
draft <- tclet $ puntag thresholds.draft PDiscrete draft' <- pmatchC thresholds.draft
vote <- tclet $ puntag thresholds.vote PDiscrete vote' <- pmatchC thresholds.vote
execute <- tclet $ pextract # execute'
draft <- tclet $ pextract # draft'
vote <- tclet $ pextract # vote'
pure $ pure $
foldr1 foldr1

View file

@ -110,21 +110,19 @@ import Plutarch.Api.V1 (
mkValidator, mkValidator,
validatorHash, validatorHash,
) )
import Plutarch.Api.V1.Extra ( import Plutarch.Api.V1.AssetClass (
passetClass, passetClass,
passetClassValueOf, passetClassValueOf,
) )
import Plutarch.Map.Extra ( import Plutarch.Extra.Comonad (pextract)
import Plutarch.Extra.Map (
pkeys, pkeys,
plookup, plookup,
plookup', plookup',
) )
import Plutarch.SafeMoney ( import Plutarch.Extra.TermCont (pmatchC)
PDiscrete, import Plutarch.SafeMoney (PDiscrete (..), pvalueDiscrete')
puntag, import Plutarch.TryFrom ()
pvalueDiscrete',
)
import Plutarch.TryFrom (ptryFrom)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -629,8 +627,9 @@ governorValidator gov =
winner <- tclet $ mustBePJust # "No winning outcome" # maybeWinner winner <- tclet $ mustBePJust # "No winning outcome" # maybeWinner
PDiscrete minimumVotes' <- pmatchC $ pfromData $ pfield @"execute" # proposalInputDatumF.thresholds
let highestVote = pfromData $ psndBuiltin # winner let highestVote = pfromData $ psndBuiltin # winner
minimumVotes = puntag $ pfromData $ pfield @"execute" # proposalInputDatumF.thresholds minimumVotes = pextract # minimumVotes'
tcassert "Higgest vote doesn't meet the minimum requirement" $ minimumVotes #<= highestVote tcassert "Higgest vote doesn't meet the minimum requirement" $ minimumVotes #<= highestVote

View file

@ -51,13 +51,14 @@ import Agora.SafeMoney (GTTag)
import Agora.Utils (pkeysEqual, pmapMap, pnotNull) import Agora.Utils (pkeysEqual, pmapMap, pnotNull)
import Control.Applicative (Const) import Control.Applicative (Const)
import Control.Arrow (first) import Control.Arrow (first)
import Data.Tagged (Tagged)
import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..)) import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..))
import Plutarch.Lift ( import Plutarch.Lift (
DerivePConstantViaNewtype (..), DerivePConstantViaNewtype (..),
PConstantDecl, PConstantDecl,
PUnsafeLiftDecl (..), PUnsafeLiftDecl (..),
) )
import Plutarch.SafeMoney (PDiscrete, Tagged) import Plutarch.SafeMoney (PDiscrete)
import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom')) import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom'))
import Plutarch.Unsafe (punsafeCoerce) import Plutarch.Unsafe (punsafeCoerce)
import Plutus.V1.Ledger.Api (DatumHash, PubKeyHash, ValidatorHash) import Plutus.V1.Ledger.Api (DatumHash, PubKeyHash, ValidatorHash)

View file

@ -44,9 +44,11 @@ import Plutarch.Api.V1 (
PTxInfo (PTxInfo), PTxInfo (PTxInfo),
PValidator, PValidator,
) )
import Plutarch.Api.V1.Extra (passetClass, passetClassValueOf) import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf)
import Plutarch.Map.Extra (plookup) import Plutarch.Extra.Comonad (pextract)
import Plutarch.SafeMoney (puntag) import Plutarch.Extra.Map (plookup)
import Plutarch.Extra.TermCont (pmatchC)
import Plutarch.SafeMoney (PDiscrete (..))
import Plutus.V1.Ledger.Value (AssetClass (AssetClass)) import Plutus.V1.Ledger.Value (AssetClass (AssetClass))
{- | Policy for Proposals. {- | Policy for Proposals.
@ -253,8 +255,9 @@ proposalValidator proposal =
PProposalVotes $ PProposalVotes $
pupdate pupdate
# plam # plam
( \votes -> ( \votes -> unTermCont $ do
pcon $ PJust $ votes + (puntag stakeInF.stakedAmount) PDiscrete v <- pmatchC stakeInF.stakedAmount
pure $ pcon $ PJust $ votes + (pextract # v)
) )
# voteFor # voteFor
# m # m

View file

@ -50,7 +50,7 @@ import Plutarch.Lift (
PConstantDecl, PConstantDecl,
PUnsafeLiftDecl (..), PUnsafeLiftDecl (..),
) )
import Plutarch.Numeric (AdditiveSemigroup ((+))) import Plutarch.Numeric.Additive (AdditiveSemigroup ((+)))
import Plutarch.Unsafe (punsafeCoerce) import Plutarch.Unsafe (punsafeCoerce)
import Plutus.V1.Ledger.Time (POSIXTime) import Plutus.V1.Ledger.Time (POSIXTime)
import PlutusTx qualified import PlutusTx qualified
@ -259,7 +259,7 @@ isDraftPeriod ::
) )
isDraftPeriod = phoistAcyclic $ isDraftPeriod = phoistAcyclic $
plam $ \config s' -> pmatch s' $ \(PProposalStartingTime s) -> plam $ \config s' -> pmatch s' $ \(PProposalStartingTime s) ->
proposalTimeWithin # s # (s + pfield @"draftTime" # config) proposalTimeWithin # s # (s + (pfield @"draftTime" # config))
-- | True if the 'PProposalTime' is in the voting period. -- | True if the 'PProposalTime' is in the voting period.
isVotingPeriod :: isVotingPeriod ::

View file

@ -18,7 +18,7 @@ module Agora.SafeMoney (
import Plutus.V1.Ledger.Value (AssetClass (AssetClass)) import Plutus.V1.Ledger.Value (AssetClass (AssetClass))
import Plutarch.SafeMoney import Data.Tagged (Tagged (Tagged))
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Tags -- Tags

View file

@ -66,12 +66,9 @@ import Agora.Utils (
tcmatch, tcmatch,
) )
import Control.Applicative (Const) import Control.Applicative (Const)
import Plutarch.Api.V1.Extra (PAssetClass, passetClassValueOf) import Data.Tagged (Tagged (..))
import Plutarch.Numeric () import Plutarch.Api.V1.AssetClass (PAssetClass, passetClassValueOf)
import Plutarch.SafeMoney ( import Plutarch.SafeMoney (PDiscrete)
PDiscrete,
Tagged (..),
)
import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom')) import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom'))
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View file

@ -27,6 +27,7 @@ import Agora.Utils (
tcmatch, tcmatch,
tctryFrom, tctryFrom,
) )
import Data.Tagged (Tagged (..), untag)
import Plutarch.Api.V1 ( import Plutarch.Api.V1 (
PCredential (PPubKeyCredential, PScriptCredential), PCredential (PPubKeyCredential, PScriptCredential),
PMintingPolicy, PMintingPolicy,
@ -37,14 +38,12 @@ import Plutarch.Api.V1 (
mintingPolicySymbol, mintingPolicySymbol,
mkMintingPolicy, mkMintingPolicy,
) )
import Plutarch.Api.V1.Extra (passetClass, passetClassValueOf, pvalueOf) import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf, pvalueOf)
import Plutarch.Internal (punsafeCoerce) import Plutarch.Internal (punsafeCoerce)
import Plutarch.Numeric import Plutarch.Numeric.Additive (AdditiveMonoid (zero), AdditiveSemigroup ((+)))
import Plutarch.SafeMoney ( import Plutarch.SafeMoney (
Tagged (..),
pdiscreteValue', pdiscreteValue',
pvalueDiscrete', pvalueDiscrete',
untag,
) )
import Plutus.V1.Ledger.Value (AssetClass (AssetClass)) import Plutus.V1.Ledger.Value (AssetClass (AssetClass))
import Prelude hiding (Num (..)) import Prelude hiding (Num (..))

View file

@ -16,13 +16,13 @@ import GHC.Generics qualified as GHC
import Generics.SOP import Generics.SOP
import Plutarch.Api.V1 (PValidator) import Plutarch.Api.V1 (PValidator)
import Plutarch.Api.V1.Contexts (PScriptPurpose (PMinting)) import Plutarch.Api.V1.Contexts (PScriptPurpose (PMinting))
import Plutarch.Api.V1.Value (PValue) import "plutarch" Plutarch.Api.V1.Value (PValue)
import Plutarch.DataRepr ( import Plutarch.DataRepr (
DerivePConstantViaData (..), DerivePConstantViaData (..),
PIsDataReprInstances (PIsDataReprInstances), PIsDataReprInstances (PIsDataReprInstances),
) )
import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl) import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl)
import Plutarch.TryFrom (PTryFrom) import Plutarch.TryFrom ()
import Plutus.V1.Ledger.Value (CurrencySymbol) import Plutus.V1.Ledger.Value (CurrencySymbol)
import PlutusTx qualified import PlutusTx qualified

View file

@ -96,13 +96,13 @@ import Plutarch.Api.V1 (
mintingPolicySymbol, mintingPolicySymbol,
mkMintingPolicy, mkMintingPolicy,
) )
import Plutarch.Api.V1.AssetClass (PAssetClass, passetClassValueOf, pvalueOf)
import Plutarch.Api.V1.AssocMap (PMap (PMap)) import Plutarch.Api.V1.AssocMap (PMap (PMap))
import Plutarch.Api.V1.Extra (PAssetClass, passetClassValueOf, pvalueOf) import "plutarch" Plutarch.Api.V1.Value (PValue (PValue))
import Plutarch.Api.V1.Value (PValue (PValue))
import Plutarch.Builtin (pforgetData, ppairDataBuiltin) import Plutarch.Builtin (pforgetData, ppairDataBuiltin)
import Plutarch.Map.Extra (pkeys) import Plutarch.Extra.Map (pkeys)
import Plutarch.Reducible (Reducible (Reduce)) import Plutarch.Reducible (Reducible (Reduce))
import Plutarch.TryFrom (PTryFrom (PTryFromExcess), ptryFrom) import Plutarch.TryFrom (PTryFrom (PTryFromExcess))
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- TermCont-based combinators. Some of these will live in plutarch eventually. -- TermCont-based combinators. Some of these will live in plutarch eventually.

View file

@ -1,93 +0,0 @@
{-# OPTIONS_GHC -Wno-unused-imports #-}
{-# OPTIONS_GHC -Wno-unused-top-binds #-}
module Agora.Utils.Value (pgeq, pleq, pgt, plt) where
import Agora.Utils (tcmatch)
import Plutarch.Api.V1.AssocMap (PMap (PMap))
import Plutarch.Api.V1.These (PTheseData (..))
import Plutarch.Api.V1.Tuple (ptupleFromBuiltin)
import Plutarch.Api.V1.Value (PCurrencySymbol, PTokenName, PValue)
import Plutarch.Lift (PUnsafeLiftDecl)
import Plutarch.List (pconvertLists)
import Plutarch.Monadic qualified as P
punionVal ::
Term
s
( PValue
:--> PValue
:--> PMap
PCurrencySymbol
(PMap PTokenName (PTheseData PInteger PInteger))
)
punionVal = undefined
-- | Determines if a condition is true for all values in a map.
pmapAll ::
(PUnsafeLiftDecl v, PIsData v) =>
Term s ((v :--> PBool) :--> PMap k v :--> PBool)
pmapAll = plam $ \f m -> unTermCont $ do
PMap builtinMap <- tcmatch m
let getV = plam $ \bip ->
let tuple = pfromData $ ptupleFromBuiltin (pdata bip)
in pfromData $ pfield @"_1" # tuple
let vs = pmap # getV # builtinMap
pure $ pall # f # vs
pcheckPred ::
forall {s :: S}.
Term
s
( (PTheseData PInteger PInteger :--> PBool)
:--> PValue
:--> PValue
:--> PBool
)
pcheckPred = plam $ \_f _l _r -> undefined
-- let inner :: Term s (PMap PTokenName (PTheseData PInteger PInteger) :--> PBool)
-- inner = pmapAll # f
-- pmapAll # inner # (punionVal # l # r)
pcheckBinRel ::
forall {s :: S}.
Term
s
( (PInteger :--> PInteger :--> PBool)
:--> PValue
:--> PValue
:--> PBool
)
pcheckBinRel = plam $ \f l r ->
let unThese :: Term s (PTheseData PInteger PInteger :--> PBool)
unThese = plam $ \k' ->
pmatch k' $ \case
PDThis r -> f # (pfield @"_0" # r) # 0
PDThat r -> f # 0 # (pfield @"_0" # r)
PDThese r -> f # (pfield @"_0" # r) # (pfield @"_1" # r)
in pcheckPred # unThese # l # r
-- | Establishes if a value is less than or equal to another.
pleq :: Term s (PValue :--> PValue :--> PBool)
pleq = plam $ \v0 v1 -> (pcheckBinRel # pleq') # v0 # v1
pleq' :: Term s (PInteger :--> PInteger :--> PBool)
pleq' = plam $ \m n -> m #<= n
-- | Establishes if a value is strictly less than another.
plt :: Term s (PValue :--> PValue :--> PBool)
plt = plam $ \v0 v1 -> (pcheckBinRel # plt') # v0 # v1
plt' :: Term s (PInteger :--> PInteger :--> PBool)
plt' = plam $ \m n -> m #< n
-- | Establishes if a value is greater than or equal to another.
pgeq :: Term s (PValue :--> PValue :--> PBool)
pgeq = plam $ \v0 v1 -> pnot #$ plt # v0 # v1
-- | Establishes if a value is strictly greater than another.
pgt :: Term s (PValue :--> PValue :--> PBool)
pgt = plam $ \v0 v1 -> pnot #$ pleq # v0 # v1

View file

@ -2,22 +2,22 @@ name,cpu,mem,size
Agora/Effects/Treasury Withdrawal Effect/effect/Simple,340268715,724428,3050 Agora/Effects/Treasury Withdrawal Effect/effect/Simple,340268715,724428,3050
Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,570029812,1211300,3377 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,570029812,1211300,3377
Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,502351827,1071087,3242 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,502351827,1071087,3242
Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,103651824,228328,7681 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,103830462,228928,7628
Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,126986096,263635,3357 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,127968605,266935,3358
Agora/Stake/policy/stakeCreation,60250773,128585,2144 Agora/Stake/policy/stakeCreation,59776675,126049,2116
Agora/Stake/validator/stakeDepositWithdraw deposit,275919558,599033,4063 Agora/Stake/validator/stakeDepositWithdraw deposit,276249331,599197,4024
Agora/Stake/validator/stakeDepositWithdraw withdraw,275919558,599033,4055 Agora/Stake/validator/stakeDepositWithdraw withdraw,276249331,599197,4016
Agora/Proposal/policy/proposalCreation,34571405,70066,1585 Agora/Proposal/policy/proposalCreation,34784356,68894,1523
Agora/Proposal/validator/cosignature/proposal,240007066,509127,4892 Agora/Proposal/validator/cosignature/proposal,241204796,510319,4812
Agora/Proposal/validator/cosignature/stake,185913543,402497,4600 Agora/Proposal/validator/cosignature/stake,186332635,402961,4561
Agora/Proposal/validator/voting/proposal,238383906,489848,4900 Agora/Proposal/validator/voting/proposal,239645722,489368,4820
Agora/Proposal/validator/voting/stake,153804848,328239,4653 Agora/Proposal/validator/voting/stake,154223940,328703,4614
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,25177457,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,25177457,55883,806
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,40266637,88241,900 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,40266637,88241,900
Agora/Treasury/Validator/Positive/Allows for effect changes,37343572,79744,1841 Agora/Treasury/Validator/Positive/Allows for effect changes,37343572,79744,1841
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,25177457,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,25177457,55883,806
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,40266637,88241,900 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,40266637,88241,900
Agora/Governor/policy/GST minting,57648280,119961,1851 Agora/Governor/policy/GST minting,57978053,120125,1833
Agora/Governor/validator/proposal creation,329287002,679689,8196 Agora/Governor/validator/proposal creation,330344593,681815,8143
Agora/Governor/validator/GATs minting,430385143,929607,8319 Agora/Governor/validator/GATs minting,431952116,934409,8266
Agora/Governor/validator/mutate governor state,100840784,222602,7738 Agora/Governor/validator/mutate governor state,101019422,223202,7685

1 name cpu mem size
2 Agora/Effects/Treasury Withdrawal Effect/effect/Simple 340268715 724428 3050
3 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries 570029812 1211300 3377
4 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets 502351827 1071087 3242
5 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass 103651824 103830462 228328 228928 7681 7628
6 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass 126986096 127968605 263635 266935 3357 3358
7 Agora/Stake/policy/stakeCreation 60250773 59776675 128585 126049 2144 2116
8 Agora/Stake/validator/stakeDepositWithdraw deposit 275919558 276249331 599033 599197 4063 4024
9 Agora/Stake/validator/stakeDepositWithdraw withdraw 275919558 276249331 599033 599197 4055 4016
10 Agora/Proposal/policy/proposalCreation 34571405 34784356 70066 68894 1585 1523
11 Agora/Proposal/validator/cosignature/proposal 240007066 241204796 509127 510319 4892 4812
12 Agora/Proposal/validator/cosignature/stake 185913543 186332635 402497 402961 4600 4561
13 Agora/Proposal/validator/voting/proposal 238383906 239645722 489848 489368 4900 4820
14 Agora/Proposal/validator/voting/stake 153804848 154223940 328239 328703 4653 4614
15 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple 25177457 55883 806
16 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs 40266637 88241 900
17 Agora/Treasury/Validator/Positive/Allows for effect changes 37343572 79744 1841
18 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple 25177457 55883 806
19 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs 40266637 88241 900
20 Agora/Governor/policy/GST minting 57648280 57978053 119961 120125 1851 1833
21 Agora/Governor/validator/proposal creation 329287002 330344593 679689 681815 8196 8143
22 Agora/Governor/validator/GATs minting 430385143 431952116 929607 934409 8319 8266
23 Agora/Governor/validator/mutate governor state 100840784 101019422 222602 223202 7738 7685

6644
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -7,13 +7,21 @@
# see https://github.com/NixOS/nix/issues/6013 # see https://github.com/NixOS/nix/issues/6013
inputs.nixpkgs-2111 = { url = "github:NixOS/nixpkgs/nixpkgs-21.11-darwin"; }; inputs.nixpkgs-2111 = { url = "github:NixOS/nixpkgs/nixpkgs-21.11-darwin"; };
# Plutarch and its friends
inputs.plutarch.url = inputs.plutarch.url =
"github:peter-mlabs/plutarch?rev=6ef18aacd02050fc07398e399cff5e8734c1045e"; "github:liqwid-labs/plutarch/staging";
inputs.plutarch.inputs.emanote.follows = inputs.plutarch.inputs.emanote.follows =
"plutarch/haskell-nix/nixpkgs-unstable"; "plutarch/haskell-nix/nixpkgs-unstable";
inputs.plutarch.inputs.nixpkgs.follows = inputs.plutarch.inputs.nixpkgs.follows =
"plutarch/haskell-nix/nixpkgs-unstable"; "plutarch/haskell-nix/nixpkgs-unstable";
inputs.liqwid-plutarch-extra.url =
"git+ssh://git@github.com/Liqwid-Labs/liqwid-plutarch-extra?ref=main";
inputs.plutarch-numeric.url =
"git+ssh://git@github.com/Liqwid-Labs/plutarch-numeric?ref=main";
inputs.plutarch-safe-money.url =
"git+ssh://git@github.com/Liqwid-Labs/plutarch-safe-money?ref=main";
# Follows jhodgdev's forks of apropos and apropos-tx, as these # Follows jhodgdev's forks of apropos and apropos-tx, as these
# are not constrained to `base ^>= 4.14`. Once these are merged # are not constrained to `base ^>= 4.14`. Once these are merged
# to their respective master branches, we should change the # to their respective master branches, we should change the
@ -66,12 +74,21 @@
src = inputs.plutarch; src = inputs.plutarch;
subdirs = [ subdirs = [
"." "."
"plutarch-test"
"plutarch-extra" "plutarch-extra"
"plutarch-numeric"
"plutarch-safemoney"
]; ];
} }
{
src = inputs.liqwid-plutarch-extra;
subdirs = [ "." ];
}
{
src = inputs.plutarch-numeric;
subdirs = [ "." ];
}
{
src = inputs.plutarch-safe-money;
subdirs = [ "." ];
}
{ {
src = inputs.apropos-tx; src = inputs.apropos-tx;
subdirs = [ "." ]; subdirs = [ "." ];
@ -82,9 +99,7 @@
} }
{ {
src = inputs.purescript-bridge; src = inputs.purescript-bridge;
subdirs = [ subdirs = [ "." ];
"."
];
} }
]; ];
modules = [ (plutarch.haskellModule system) ]; modules = [ (plutarch.haskellModule system) ];
@ -110,16 +125,21 @@
inherit (plutarch) tools; inherit (plutarch) tools;
additional = ps: [ additional = ps: [
# plutarch
ps.plutarch ps.plutarch
ps.liqwid-plutarch-extra
ps.plutarch-numeric
ps.plutarch-safe-money
# purescript
ps.purescript-bridge
# testing
ps.tasty-quickcheck ps.tasty-quickcheck
ps.apropos-tx ps.apropos-tx
ps.apropos ps.apropos
ps.plutarch-extra
ps.plutarch-numeric
ps.plutarch-safemoney
ps.plutarch-test
ps.apropos ps.apropos
ps.purescript-bridge
]; ];
}; };
}; };