diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2d60d55ff5..dea0ca05c3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,3 +20,17 @@ jobs: - uses: actions/checkout@v2.3.4 - uses: nixbuild/nix-quick-install-action@v9 - run: nix-build -A tests.nixpkgsFmt -A tests.purty -A tests.shellcheck -A tests.stylishHaskell --arg supportedSystems '[ builtins.currentSystem ]' --restrict-eval -I . --allowed-uris 'https://github.com/NixOS/nixpkgs https://github.com/input-output-hk https://github.com/NixOS/nixpkgs-channels' --option 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=" --option substituters "https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/" + check-for-updates: + strategy: + matrix: + os: [ubuntu-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2.3.4 + - uses: nixbuild/nix-quick-install-action@v9 + - run: | + nix --extra-experimental-features 'nix-command flakes' flake lock --option 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=" --option substituters "https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/" + nix-shell --command "cd plutus-playground-client && (update-client-deps || update-client-deps)" --option 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=" --option substituters "https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/" # Double-call to work around bug in spago2nix on first fetch + # Disabled until we can find a way to run it only for Linux + # nix-shell --command "updateMaterialized" --option 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=" --option substituters "https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/" + git diff --exit-code diff --git a/cabal.project b/cabal.project index 5af812f54c..f39fdefc4f 100644 --- a/cabal.project +++ b/cabal.project @@ -10,6 +10,7 @@ packages: doc plutus-ledger plutus-ledger-constraints plutus-pab + plutus-pab-executables plutus-playground-server plutus-use-cases quickcheck-dynamic diff --git a/default.nix b/default.nix index 9334e3b565..69ba4601b5 100644 --- a/default.nix +++ b/default.nix @@ -33,7 +33,7 @@ rec { inherit (plutus-apps) web-ghc; - inherit (haskell.packages.plutus-pab.components.exes) + inherit (haskell.packages.plutus-pab-executables.components.exes) plutus-pab-examples plutus-uniswap; @@ -51,12 +51,12 @@ rec { }; # TODO: Fails for now because of webpack can't include `nami-wallet` lib in it's bundle. - # To reproduce the error, run `npm run build:webpack:prod` in `plutus-pab/demo/pab-nami/client` + # To reproduce the error, run `npm run build:webpack:prod` in `plutus-pab-executables/demo/pab-nami/client` pab-nami-demo = pkgs.recurseIntoAttrs rec { - inherit (pkgs.callPackage ./plutus-pab/demo/pab-nami/client { + inherit (pkgs.callPackage ./plutus-pab-executables/demo/pab-nami/client { inherit pkgs haskell webCommon; inherit (plutus-apps.lib) buildPursPackage buildNodeModules filterNpm gitignore-nix; - }) client pab-setup-invoker pab-nami-demo-invoker generate-purescript generated-purescript start-backend; + }) client pab-setup-invoker pab-nami-demo-invoker pab-nami-demo-generator generate-purescript generated-purescript start-backend; }; plutus-use-cases = pkgs.recurseIntoAttrs (pkgs.callPackage ./plutus-use-cases { diff --git a/doc/plutus/explanations/hosted-pab-browser-wallet.dia b/doc/plutus/explanations/hosted-pab-browser-wallet.dia new file mode 100644 index 0000000000..b182345b36 Binary files /dev/null and b/doc/plutus/explanations/hosted-pab-browser-wallet.dia differ diff --git a/doc/plutus/explanations/hosted-pab-browser-wallet.png b/doc/plutus/explanations/hosted-pab-browser-wallet.png new file mode 100644 index 0000000000..dc791b637d Binary files /dev/null and b/doc/plutus/explanations/hosted-pab-browser-wallet.png differ diff --git a/doc/plutus/explanations/hosted-pab-cardano-wallet.dia b/doc/plutus/explanations/hosted-pab-cardano-wallet.dia new file mode 100644 index 0000000000..df3f38eee9 Binary files /dev/null and b/doc/plutus/explanations/hosted-pab-cardano-wallet.dia differ diff --git a/doc/plutus/explanations/hosted-pab-cardano-wallet.png b/doc/plutus/explanations/hosted-pab-cardano-wallet.png new file mode 100644 index 0000000000..6508c65cac Binary files /dev/null and b/doc/plutus/explanations/hosted-pab-cardano-wallet.png differ diff --git a/doc/plutus/explanations/hosted-pab-wbe.dia b/doc/plutus/explanations/hosted-pab-wbe.dia new file mode 100644 index 0000000000..a43529c899 Binary files /dev/null and b/doc/plutus/explanations/hosted-pab-wbe.dia differ diff --git a/doc/plutus/explanations/hosted-pab-wbe.png b/doc/plutus/explanations/hosted-pab-wbe.png new file mode 100644 index 0000000000..de92a92979 Binary files /dev/null and b/doc/plutus/explanations/hosted-pab-wbe.png differ diff --git a/doc/plutus/explanations/in-browser-pab-browser-wallet.dia b/doc/plutus/explanations/in-browser-pab-browser-wallet.dia new file mode 100644 index 0000000000..aadfcd43f2 Binary files /dev/null and b/doc/plutus/explanations/in-browser-pab-browser-wallet.dia differ diff --git a/doc/plutus/explanations/in-browser-pab-browser-wallet.png b/doc/plutus/explanations/in-browser-pab-browser-wallet.png new file mode 100644 index 0000000000..f5dd1aa863 Binary files /dev/null and b/doc/plutus/explanations/in-browser-pab-browser-wallet.png differ diff --git a/doc/plutus/explanations/in-browser-pab-cardano-wallet.dia b/doc/plutus/explanations/in-browser-pab-cardano-wallet.dia new file mode 100644 index 0000000000..a7777fd93c Binary files /dev/null and b/doc/plutus/explanations/in-browser-pab-cardano-wallet.dia differ diff --git a/doc/plutus/explanations/in-browser-pab-cardano-wallet.png b/doc/plutus/explanations/in-browser-pab-cardano-wallet.png new file mode 100644 index 0000000000..ad8c4242fc Binary files /dev/null and b/doc/plutus/explanations/in-browser-pab-cardano-wallet.png differ diff --git a/doc/plutus/explanations/pab.rst b/doc/plutus/explanations/pab.rst index 668c2f0aa7..044e080a4b 100644 --- a/doc/plutus/explanations/pab.rst +++ b/doc/plutus/explanations/pab.rst @@ -52,7 +52,7 @@ The PAB subscribes to ledger state updates from the node, using a socket protoco Wallet ~~~~~~ -A Cardano wallet is required for balancing and signing transactions. +A Cardano wallet is required for balancing and signing transactions (and optionnaly submitting transactions). Balancing means taking a partial transaction and adding inputs and outputs to make the transaction valid. Take :ref:`Marlowe` as an example. @@ -63,6 +63,14 @@ When the Marlowe contract has finished, funds are transferred back to the user's The PAB sends another partial transaction, this time with a single script input and no outputs. The wallet then adds an output at one of its own addresses to receive the funds. +There are multiple ways to setup a wallet: + +1. Host a cardano wallet backend instance (WBE) using `cardano-wallet `_ +2. Setup a desktop wallet application (ex. `Daedalus `_) +3. Setup a browser wallet application (ex. `Nami `_, `Yoroi `_, etc.) + +These different wallet setups each imply a different use-case of the PAB. + Deployment Scenarios -------------------- @@ -76,12 +84,70 @@ Hosted In the “Hosted PAB” scenario, the dApp provider / developer hosts an instance of the PAB alongside the :ref:`chain index` and an Alonzo node. The off-chain code of the Plutus app is run on the dApp provider’s infrastructure. -.. figure:: ./hosted-pab.png +In the following sections, we illustrate the ways a hosted PAB can be used with the different type of wallets. + +WBE (Supported) +^^^^^^^^^^^^^^^ + +In this wallet scenario, the dApp provider /developer also hosts an instance of the WBE, which handles the wallets for each user. +The WBE handles balancing, signing and submitting transaction requests from the PAB. + +.. figure:: ./hosted-pab-wbe.png + + The hosted deployment scenario for the PAB with the WBE - The hosted deployment scenario for the PAB. +This is currently used for testing purposes and shouldn't be used in a production setting, because we wallets are normally controlled by the users themselves. -Coin selection and transaction signing (in short: anything that deals with the user’s money) happens on the user’s machine. -The PAB produces a link (URI) for each partial transaction that needs to be balanced and signed. +A simple demo of this scenario is available here: ``_. + +Desktop wallet (Not yet supported) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this wallet scenario, the user has setup a desktop wallet (light or full node) such as Daedalus. +Transaction balancing (coin selection) and transaction signing (in short: anything that deals with the user’s money) happens on the user’s machine. +The PAB produces a link (URI) for each partial transaction that needs to be balanced, signed and submitted. When the user clicks the link, the user's operating system opens the wallet that is registered to handle the link schema. -This scheme is not restricted to Daedalus, or even to full wallets. +This scheme is not restricted to Daedalus, or even to full node wallets. Any wallet that implements a handler for the link schema can be used to balance, sign and submit Plutus transactions. + +.. figure:: ./hosted-pab-cardano-wallet.png + + The hosted deployment scenario for the PAB communicating with a desktop wallet. + +Browser wallet (In progress) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this wallet scenario, the user has setup a browser wallet such as Nami or Yoroi. +The PAB updates it's contract instance status endpoint for each partial transaction that needs to be balanced, signed and submitted. +Transaction signing happens on the user's machine. +However, transaction balancing (coin selection) is handled by the PAB as it is not currently possible to balance transaction that contain script inputs in the browser (i.e. browser wallets can't balance transactions until it is possible to execute Plutus script in the browser). +Therefore, browser wallets will need to call a PAB helper endpoint which can balance the transaction using funds from the user's browser wallet. + +.. figure:: ./hosted-pab-browser-wallet.png + + The hosted deployment scenario for the PAB communicating with a browser wallet. + +A simple demo of this scenario is available here: ``_. +This demo is a work in progress. + +In-browser +~~~~~~~~~~ + +In the “In-browser PAB” scenario, the dApp provider / developer hosts an instance of the :ref:`chain index` and an Alonzo node. +The dApp users work with a browser interface which uses a light version of the PAB. + +Similary to the hosted PAB scenario, we illustrate the ways it can be used the different type of wallets. + +Desktop wallet (Not yet supported) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: ./in-browser-pab-cardano-wallet.png + + The in-browser PAB communicating with a desktop wallet. + +Browser wallet (Not yet supported) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: ./in-browser-pab-browser-wallet.png + + The in-browser PAB communicating with a browser wallet. diff --git a/doc/reference/examples.rst b/doc/reference/examples.rst index 1f05c35860..79a128e854 100644 --- a/doc/reference/examples.rst +++ b/doc/reference/examples.rst @@ -3,7 +3,7 @@ Examples ======== -Full examples of Plutus Applications can be found in the ``plutus`` `repository `_. +Full examples of Plutus Applications can be found in the ``plutus-apps`` `repository `_. The source code can be found in the ``src`` and the tests in the ``test`` folder. The examples are a mixture of simple examples and more complex ones, including: @@ -14,4 +14,4 @@ The examples are a mixture of simple examples and more complex ones, including: - A uniswap clone .. important:: - Make sure to look at the same version of the `plutus` repository as you are using, to ensure that the examples work. + Make sure to look at the same version of the `plutus-apps` repository as you are using, to ensure that the examples work. diff --git a/flake.lock b/flake.lock index b24801b709..809833bdf9 100644 --- a/flake.lock +++ b/flake.lock @@ -82,16 +82,16 @@ "haskell-language-server": { "flake": false, "locked": { - "lastModified": 1627623934, - "narHash": "sha256-RjPRzpcfL2UNGp2IYEh3rIrBeSnpdafdJhMAvrtXrbA=", + "lastModified": 1638136578, + "narHash": "sha256-Reo9BQ12O+OX7tuRfaDPZPBpJW4jnxZetm63BxYncoM=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "e7c5e90b6df5dff2760d76169eddaea3bdd6a831", + "rev": "745ef26f406dbdd5e4a538585f8519af9f1ccb09", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.3.0", + "ref": "1.5.1", "repo": "haskell-language-server", "type": "github" } diff --git a/flake.nix b/flake.nix index f4bc9b1b9b..1b035bbc1c 100644 --- a/flake.nix +++ b/flake.nix @@ -42,7 +42,7 @@ }; haskell-language-server = { # Pinned to a release - url = "github:haskell/haskell-language-server?ref=1.3.0"; + url = "github:haskell/haskell-language-server?ref=1.5.1"; flake = false; }; iohk-nix = { diff --git a/nix/pkgs/haskell/haskell.nix b/nix/pkgs/haskell/haskell.nix index a4106c253a..3c94a7563f 100644 --- a/nix/pkgs/haskell/haskell.nix +++ b/nix/pkgs/haskell/haskell.nix @@ -83,6 +83,7 @@ let plutus-ledger.package.buildable = false; plutus-ledger-constraints.package.buildable = false; plutus-pab.package.buildable = false; + plutus-pab-executables.package.buildable = false; plutus-playground-server.package.buildable = false; # Would also require libpq plutus-tx-plugin.package.buildable = false; plutus-use-cases.package.buildable = false; @@ -140,7 +141,7 @@ let # Relies on cabal-doctest, just turn it off in the Nix build prettyprinter-configurable.components.tests.prettyprinter-configurable-doctest.buildable = lib.mkForce false; - plutus-pab.components.tests.plutus-pab-test-full-long-running = { + plutus-pab-executables.components.tests.plutus-pab-test-full-long-running = { platforms = lib.platforms.linux; }; @@ -156,6 +157,7 @@ let plutus-ledger-constraints.ghcOptions = [ "-Werror" ]; plutus-playground-server.ghcOptions = [ "-Werror" ]; plutus-pab.ghcOptions = [ "-Werror" ]; + plutus-pab-executables.ghcOptions = [ "-Werror" ]; plutus-doc.ghcOptions = [ "-Werror" ]; plutus-use-cases.ghcOptions = [ "-Werror" ]; diff --git a/nix/pkgs/haskell/hls-darwin.sha b/nix/pkgs/haskell/hls-darwin.sha index 3d93c0966d..c32a9733ee 100644 --- a/nix/pkgs/haskell/hls-darwin.sha +++ b/nix/pkgs/haskell/hls-darwin.sha @@ -1 +1 @@ -00r15hn2q609j59ajgn3bdq6vlzh426sjhb0war8wj5dbz5z5zis +0jjn7a2infis7mfjda7zpz2jwhgc7y8qwn54a2wqn08dk76v9kzm diff --git a/nix/pkgs/haskell/hls-linux.sha b/nix/pkgs/haskell/hls-linux.sha index 62e7bb9606..20f8ee16d2 100644 --- a/nix/pkgs/haskell/hls-linux.sha +++ b/nix/pkgs/haskell/hls-linux.sha @@ -1 +1 @@ -1gk5ispzwn3yv3z9583xg86w0ih3j7ac65bnaxjn6gb1lr530v6y +08g0pbrqzw55l8cam8qq4v0q0gyrqv84z5y1zgzynkg9i709ypwy diff --git a/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-pab-executables.nix b/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-pab-executables.nix new file mode 100644 index 0000000000..95ce66d85e --- /dev/null +++ b/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-pab-executables.nix @@ -0,0 +1,486 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { defer-plugin-errors = false; }; + package = { + specVersion = "3.0"; + identifier = { name = "plutus-pab-executables"; version = "0.1.0.0"; }; + license = "Apache-2.0"; + copyright = ""; + maintainer = "jann.mueller@iohk.io"; + author = "Jann Müller"; + homepage = "https://github.com/iohk/plutus#readme"; + url = ""; + synopsis = ""; + description = "Please see the README on GitHub at "; + buildType = "Simple"; + isLocal = true; + detailLevel = "FullDetails"; + licenseFiles = [ "LICENSE" "NOTICE" ]; + dataDir = "."; + dataFiles = []; + extraSrcFiles = []; + extraTmpFiles = []; + extraDocFiles = []; + }; + components = { + "library" = { + depends = [ + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."servant" or (errorHandler.buildDepError "servant")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "Plutus/PAB/Run/PSGenerator" ]; + hsSourceDirs = [ "src" ]; + }; + exes = { + "plutus-pab-setup" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) + (hsPkgs."unliftio-core" or (errorHandler.buildDepError "unliftio-core")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + ]; + buildable = true; + modules = [ "CommandParser" ]; + hsSourceDirs = [ "app" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-examples" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "ContractExample/WaitForTx" + "ContractExample" + ]; + hsSourceDirs = [ "examples" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-uniswap" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + hsSourceDirs = [ "examples/uniswap" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-local-cluster" = { + depends = [ + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."text-class" or (errorHandler.buildDepError "text-class")) + (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) + (hsPkgs."sqlite-simple" or (errorHandler.buildDepError "sqlite-simple")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) + (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) + (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) + (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) + (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) + (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."servant-client-core" or (errorHandler.buildDepError "servant-client-core")) + (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "ContractExample/WaitForTx" + ]; + hsSourceDirs = [ "local-cluster" "examples" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-test-psgenerator" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + ]; + buildable = true; + modules = [ + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test-psgenerator" "test/full" "examples" ]; + mainPath = [ "TestPSGenerator.hs" ]; + }; + "tx-inject" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."clock" or (errorHandler.buildDepError "clock")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."mwc-random" or (errorHandler.buildDepError "mwc-random")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."pretty-simple" or (errorHandler.buildDepError "pretty-simple")) + (hsPkgs."rate-limit" or (errorHandler.buildDepError "rate-limit")) + (hsPkgs."signal" or (errorHandler.buildDepError "signal")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."hedgehog" or (errorHandler.buildDepError "hedgehog")) + (hsPkgs."primitive" or (errorHandler.buildDepError "primitive")) + ]; + buildable = true; + modules = [ "TxInject/RandomTx" ]; + hsSourceDirs = [ "tx-inject" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "sync-client" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."either" or (errorHandler.buildDepError "either")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + hsSourceDirs = [ "sync-client" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "plutus-pab-nami-demo" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "DemoContract" ]; + hsSourceDirs = [ "demo/pab-nami/pab/app" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "plutus-pab-nami-demo-generator" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "DemoContract" ]; + hsSourceDirs = [ "demo/pab-nami/pab/app" ]; + mainPath = [ + "Generator.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + }; + tests = { + "plutus-pab-test-full" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/WaitForTx" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/CoreSpec" + "Plutus/PAB/CliSpec" + "Plutus/PAB/Effects/Contract/BuiltinSpec" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test/full" "examples" ]; + mainPath = [ "Spec.hs" ]; + }; + "plutus-pab-test-full-long-running" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/WaitForTx" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/CliSpec" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test/full" "examples" ]; + mainPath = [ "SpecLongRunning.hs" ]; + }; + }; + }; + } // rec { src = (pkgs.lib).mkDefault ../plutus-pab-executables; } \ No newline at end of file diff --git a/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-pab.nix b/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-pab.nix index 5c1267c21b..6c3bc232ed 100644 --- a/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-pab.nix +++ b/nix/pkgs/haskell/materialized-darwin/.plan.nix/plutus-pab.nix @@ -35,9 +35,11 @@ depends = [ (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) (hsPkgs."plutus-tx-plugin" or (errorHandler.buildDepError "plutus-tx-plugin")) @@ -50,15 +52,22 @@ (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) + (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) + (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) + (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) + (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) (hsPkgs."containers" or (errorHandler.buildDepError "containers")) (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) (hsPkgs."cryptonite" or (errorHandler.buildDepError "cryptonite")) (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) (hsPkgs."either" or (errorHandler.buildDepError "either")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) (hsPkgs."generic-arbitrary" or (errorHandler.buildDepError "generic-arbitrary")) (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) @@ -74,16 +83,13 @@ (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) (hsPkgs."ouroboros-network" or (errorHandler.buildDepError "ouroboros-network")) (hsPkgs."ouroboros-network-framework" or (errorHandler.buildDepError "ouroboros-network-framework")) - (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) (hsPkgs."servant" or (errorHandler.buildDepError "servant")) (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) (hsPkgs."servant-openapi3" or (errorHandler.buildDepError "servant-openapi3")) (hsPkgs."servant-options" or (errorHandler.buildDepError "servant-options")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) (hsPkgs."servant-swagger-ui" or (errorHandler.buildDepError "servant-swagger-ui")) (hsPkgs."servant-websockets" or (errorHandler.buildDepError "servant-websockets")) @@ -152,6 +158,7 @@ "Plutus/PAB/Events/Contract" "Plutus/PAB/Events/ContractInstanceState" "Plutus/PAB/Instances" + "Plutus/PAB/LocalCluster/Run" "Plutus/PAB/Monitoring/Config" "Plutus/PAB/Monitoring/Monitoring" "Plutus/PAB/Monitoring/PABLogMsg" @@ -159,7 +166,6 @@ "Plutus/PAB/Run/Cli" "Plutus/PAB/Run/Command" "Plutus/PAB/Run/CommandParser" - "Plutus/PAB/Run/PSGenerator" "Plutus/PAB/Simulator" "Plutus/PAB/Timeout" "Plutus/PAB/Types" @@ -172,280 +178,6 @@ ]; hsSourceDirs = [ "src" ]; }; - exes = { - "plutus-pab-setup" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) - (hsPkgs."unliftio-core" or (errorHandler.buildDepError "unliftio-core")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - ]; - buildable = true; - modules = [ "CommandParser" ]; - hsSourceDirs = [ "app" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-examples" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "ContractExample/WaitForTx" - "ContractExample" - ]; - hsSourceDirs = [ "examples" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-uniswap" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - hsSourceDirs = [ "examples/uniswap" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-local-cluster" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."directory" or (errorHandler.buildDepError "directory")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."text-class" or (errorHandler.buildDepError "text-class")) - (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) - (hsPkgs."sqlite-simple" or (errorHandler.buildDepError "sqlite-simple")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) - (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) - (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) - (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) - (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."servant-client-core" or (errorHandler.buildDepError "servant-client-core")) - (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "ContractExample/WaitForTx" - ]; - hsSourceDirs = [ "local-cluster" "examples" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-test-psgenerator" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - ]; - buildable = true; - modules = [ - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test-psgenerator" "test/full" "examples" ]; - mainPath = [ "TestPSGenerator.hs" ]; - }; - "tx-inject" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."clock" or (errorHandler.buildDepError "clock")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."mwc-random" or (errorHandler.buildDepError "mwc-random")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."pretty-simple" or (errorHandler.buildDepError "pretty-simple")) - (hsPkgs."rate-limit" or (errorHandler.buildDepError "rate-limit")) - (hsPkgs."signal" or (errorHandler.buildDepError "signal")) - (hsPkgs."stm" or (errorHandler.buildDepError "stm")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."hedgehog" or (errorHandler.buildDepError "hedgehog")) - (hsPkgs."primitive" or (errorHandler.buildDepError "primitive")) - ]; - buildable = true; - modules = [ "TxInject/RandomTx" ]; - hsSourceDirs = [ "tx-inject" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - "sync-client" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."either" or (errorHandler.buildDepError "either")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ]; - buildable = true; - hsSourceDirs = [ "sync-client" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - "plutus-pab-nami-demo" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ]; - buildable = true; - modules = [ "DemoContract" ]; - hsSourceDirs = [ "demo/pab-nami/pab/app" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - }; tests = { "plutus-pab-test-light" = { depends = [ @@ -466,7 +198,6 @@ (hsPkgs."lens" or (errorHandler.buildDepError "lens")) (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) @@ -498,127 +229,6 @@ hsSourceDirs = [ "test/light" ]; mainPath = [ "Spec.hs" ]; }; - "plutus-pab-test-full" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."stm" or (errorHandler.buildDepError "stm")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/WaitForTx" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/CoreSpec" - "Plutus/PAB/CliSpec" - "Plutus/PAB/Effects/Contract/BuiltinSpec" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test/full" "examples" ]; - mainPath = [ "Spec.hs" ]; - }; - "plutus-pab-test-full-long-running" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/WaitForTx" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/CliSpec" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test/full" "examples" ]; - mainPath = [ "SpecLongRunning.hs" ]; - }; }; }; } // rec { src = (pkgs.lib).mkDefault ../plutus-pab; } \ No newline at end of file diff --git a/nix/pkgs/haskell/materialized-darwin/default.nix b/nix/pkgs/haskell/materialized-darwin/default.nix index 02ed493e76..118e7514a7 100644 --- a/nix/pkgs/haskell/materialized-darwin/default.nix +++ b/nix/pkgs/haskell/materialized-darwin/default.nix @@ -809,6 +809,7 @@ io-classes = ./.plan.nix/io-classes.nix; ouroboros-consensus-byron = ./.plan.nix/ouroboros-consensus-byron.nix; contra-tracer = ./.plan.nix/contra-tracer.nix; + plutus-pab-executables = ./.plan.nix/plutus-pab-executables.nix; orphans-deriving-via = ./.plan.nix/orphans-deriving-via.nix; dbvar = ./.plan.nix/dbvar.nix; plutus-ledger = ./.plan.nix/plutus-ledger.nix; @@ -991,6 +992,9 @@ flags = { "asserts" = lib.mkOverride 900 false; }; }; "contra-tracer" = { flags = {}; }; + "plutus-pab-executables" = { + flags = { "defer-plugin-errors" = lib.mkOverride 900 false; }; + }; "orphans-deriving-via" = { flags = { "development" = lib.mkOverride 900 false; }; }; @@ -1070,7 +1074,6 @@ "iohk-monitoring".components.library.planned = lib.mkOverride 900 true; "insert-ordered-containers".components.library.planned = lib.mkOverride 900 true; "non-integral".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.tests."plutus-pab-test-full-long-running".planned = lib.mkOverride 900 true; "Win32-network".components.exes."named-pipe-demo".planned = lib.mkOverride 900 true; "criterion-measurement".components.library.planned = lib.mkOverride 900 true; "silently".components.library.planned = lib.mkOverride 900 true; @@ -1089,6 +1092,7 @@ "fmt".components.library.planned = lib.mkOverride 900 true; "web-ghc".components.tests."web-ghc-test".planned = lib.mkOverride 900 true; "old-time".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."tx-inject".planned = lib.mkOverride 900 true; "base-deriving-via".components.library.planned = lib.mkOverride 900 true; "beam-migrate".components.library.planned = lib.mkOverride 900 true; "openapi3".components.library.planned = lib.mkOverride 900 true; @@ -1111,6 +1115,7 @@ "openapi3".components.setup.planned = lib.mkOverride 900 true; "socks".components.library.planned = lib.mkOverride 900 true; "cryptohash-sha1".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.tests."plutus-pab-test-full".planned = lib.mkOverride 900 true; "plutus-ledger".components.tests."plutus-ledger-test".planned = lib.mkOverride 900 true; "command".components.library.planned = lib.mkOverride 900 true; "formatting".components.library.planned = lib.mkOverride 900 true; @@ -1171,6 +1176,7 @@ "signal".components.exes."test".planned = lib.mkOverride 900 true; "indexed-traversable-instances".components.library.planned = lib.mkOverride 900 true; "appar".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.tests."plutus-pab-test-full-long-running".planned = lib.mkOverride 900 true; "hspec-discover".components.exes."hspec-discover".planned = lib.mkOverride 900 true; "prettyprinter-configurable".components.setup.planned = lib.mkOverride 900 true; "MonadRandom".components.library.planned = lib.mkOverride 900 true; @@ -1232,6 +1238,7 @@ "network-mux".components.exes."cardano-ping".planned = lib.mkOverride 900 true; "safe-exceptions".components.library.planned = lib.mkOverride 900 true; "blaze-html".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-uniswap".planned = lib.mkOverride 900 true; "syb".components.library.planned = lib.mkOverride 900 true; "transformers".components.library.planned = lib.mkOverride 900 true; "monad-logger".components.library.planned = lib.mkOverride 900 true; @@ -1249,6 +1256,7 @@ "parallel".components.library.planned = lib.mkOverride 900 true; "uuid-types".components.library.planned = lib.mkOverride 900 true; "QuickCheck".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.library.planned = lib.mkOverride 900 true; "haskell-src-meta".components.library.planned = lib.mkOverride 900 true; "cborg".components.library.planned = lib.mkOverride 900 true; "time-manager".components.library.planned = lib.mkOverride 900 true; @@ -1314,13 +1322,13 @@ "HUnit".components.library.planned = lib.mkOverride 900 true; "tree-diff".components.library.planned = lib.mkOverride 900 true; "cardano-wallet".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-setup".planned = lib.mkOverride 900 true; "fast-logger".components.library.planned = lib.mkOverride 900 true; "vector".components.library.planned = lib.mkOverride 900 true; "template-haskell".components.library.planned = lib.mkOverride 900 true; "http-date".components.library.planned = lib.mkOverride 900 true; "concurrent-output".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-framework".components.exes."demo-ping-pong".planned = lib.mkOverride 900 true; - "plutus-pab".components.tests."plutus-pab-test-full".planned = lib.mkOverride 900 true; "path-pieces".components.library.planned = lib.mkOverride 900 true; "mono-traversable".components.library.planned = lib.mkOverride 900 true; "integer-gmp".components.library.planned = lib.mkOverride 900 true; @@ -1348,7 +1356,6 @@ "servant-swagger-ui-core".components.library.planned = lib.mkOverride 900 true; "servant".components.library.planned = lib.mkOverride 900 true; "ListLike".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."tx-inject".planned = lib.mkOverride 900 true; "conduit-extra".components.library.planned = lib.mkOverride 900 true; "criterion".components.exes."criterion-report".planned = lib.mkOverride 900 true; "cardano-crypto-wrapper".components.library.planned = lib.mkOverride 900 true; @@ -1361,18 +1368,16 @@ "cardano-api".components.sublibs."gen".planned = lib.mkOverride 900 true; "parsers".components.library.planned = lib.mkOverride 900 true; "base-compat".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."sync-client".planned = lib.mkOverride 900 true; "bech32-th".components.library.planned = lib.mkOverride 900 true; "mtl-compat".components.library.planned = lib.mkOverride 900 true; "cassava".components.library.planned = lib.mkOverride 900 true; "Only".components.library.planned = lib.mkOverride 900 true; "groups".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-test-psgenerator".planned = lib.mkOverride 900 true; "warp".components.library.planned = lib.mkOverride 900 true; "terminal-size".components.library.planned = lib.mkOverride 900 true; "wl-pprint-annotated".components.library.planned = lib.mkOverride 900 true; "string-conv".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-examples".planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-nami-demo".planned = lib.mkOverride 900 true; "servant-blaze".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-testing".components.library.planned = lib.mkOverride 900 true; "free".components.library.planned = lib.mkOverride 900 true; @@ -1433,9 +1438,11 @@ "witherable".components.library.planned = lib.mkOverride 900 true; "snap-core".components.library.planned = lib.mkOverride 900 true; "servant-websockets".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."sync-client".planned = lib.mkOverride 900 true; "aeson-casing".components.library.planned = lib.mkOverride 900 true; "cardano-crypto-tests".components.library.planned = lib.mkOverride 900 true; "cardano-wallet".components.exes."cardano-wallet".planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-nami-demo-generator".planned = lib.mkOverride 900 true; "servant-foreign".components.library.planned = lib.mkOverride 900 true; "contravariant".components.library.planned = lib.mkOverride 900 true; "optparse-generic".components.library.planned = lib.mkOverride 900 true; @@ -1447,18 +1454,19 @@ "data-fix".components.library.planned = lib.mkOverride 900 true; "dependent-sum-template".components.library.planned = lib.mkOverride 900 true; "sop-core".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-nami-demo".planned = lib.mkOverride 900 true; "text-short".components.library.planned = lib.mkOverride 900 true; "vault".components.library.planned = lib.mkOverride 900 true; "zlib-bindings".components.library.planned = lib.mkOverride 900 true; "freer-extras".components.library.planned = lib.mkOverride 900 true; "plutus-tx".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-test-psgenerator".planned = lib.mkOverride 900 true; "logict".components.library.planned = lib.mkOverride 900 true; "unliftio".components.library.planned = lib.mkOverride 900 true; "wcwidth".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-framework".components.exes."demo-connection-manager".planned = lib.mkOverride 900 true; "http-client-tls".components.library.planned = lib.mkOverride 900 true; "extensible-effects".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-examples".planned = lib.mkOverride 900 true; "constraints-extras".components.exes."readme".planned = lib.mkOverride 900 true; "typed-process".components.library.planned = lib.mkOverride 900 true; "mersenne-random-pure64".components.library.planned = lib.mkOverride 900 true; @@ -1492,7 +1500,6 @@ "persistent".components.library.planned = lib.mkOverride 900 true; "data-default-class".components.library.planned = lib.mkOverride 900 true; "easy-file".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-local-cluster".planned = lib.mkOverride 900 true; "time-units".components.library.planned = lib.mkOverride 900 true; "parser-combinators".components.library.planned = lib.mkOverride 900 true; "pretty-simple".components.library.planned = lib.mkOverride 900 true; @@ -1531,7 +1538,6 @@ "plutus-playground-server".components.sublibs."plutus-playground-usecases".planned = lib.mkOverride 900 true; "megaparsec".components.library.planned = lib.mkOverride 900 true; "th-orphans".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-setup".planned = lib.mkOverride 900 true; "base64-bytestring-type".components.library.planned = lib.mkOverride 900 true; "hspec-golden-aeson".components.library.planned = lib.mkOverride 900 true; "generic-deriving".components.library.planned = lib.mkOverride 900 true; @@ -1555,6 +1561,7 @@ "semirings".components.library.planned = lib.mkOverride 900 true; "system-filepath".components.library.planned = lib.mkOverride 900 true; "list-t".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-local-cluster".planned = lib.mkOverride 900 true; "Unique".components.library.planned = lib.mkOverride 900 true; "asn1-types".components.library.planned = lib.mkOverride 900 true; "vector-th-unbox".components.library.planned = lib.mkOverride 900 true; @@ -1607,7 +1614,6 @@ "resourcet".components.library.planned = lib.mkOverride 900 true; "microlens-mtl".components.library.planned = lib.mkOverride 900 true; "microlens".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-uniswap".planned = lib.mkOverride 900 true; "smallcheck".components.library.planned = lib.mkOverride 900 true; "OddWord".components.library.planned = lib.mkOverride 900 true; "profunctors".components.library.planned = lib.mkOverride 900 true; diff --git a/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-pab-executables.nix b/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-pab-executables.nix new file mode 100644 index 0000000000..95ce66d85e --- /dev/null +++ b/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-pab-executables.nix @@ -0,0 +1,486 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { defer-plugin-errors = false; }; + package = { + specVersion = "3.0"; + identifier = { name = "plutus-pab-executables"; version = "0.1.0.0"; }; + license = "Apache-2.0"; + copyright = ""; + maintainer = "jann.mueller@iohk.io"; + author = "Jann Müller"; + homepage = "https://github.com/iohk/plutus#readme"; + url = ""; + synopsis = ""; + description = "Please see the README on GitHub at "; + buildType = "Simple"; + isLocal = true; + detailLevel = "FullDetails"; + licenseFiles = [ "LICENSE" "NOTICE" ]; + dataDir = "."; + dataFiles = []; + extraSrcFiles = []; + extraTmpFiles = []; + extraDocFiles = []; + }; + components = { + "library" = { + depends = [ + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."servant" or (errorHandler.buildDepError "servant")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "Plutus/PAB/Run/PSGenerator" ]; + hsSourceDirs = [ "src" ]; + }; + exes = { + "plutus-pab-setup" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) + (hsPkgs."unliftio-core" or (errorHandler.buildDepError "unliftio-core")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + ]; + buildable = true; + modules = [ "CommandParser" ]; + hsSourceDirs = [ "app" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-examples" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "ContractExample/WaitForTx" + "ContractExample" + ]; + hsSourceDirs = [ "examples" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-uniswap" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + hsSourceDirs = [ "examples/uniswap" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-local-cluster" = { + depends = [ + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."text-class" or (errorHandler.buildDepError "text-class")) + (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) + (hsPkgs."sqlite-simple" or (errorHandler.buildDepError "sqlite-simple")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) + (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) + (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) + (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) + (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) + (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."servant-client-core" or (errorHandler.buildDepError "servant-client-core")) + (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "ContractExample/WaitForTx" + ]; + hsSourceDirs = [ "local-cluster" "examples" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-test-psgenerator" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + ]; + buildable = true; + modules = [ + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test-psgenerator" "test/full" "examples" ]; + mainPath = [ "TestPSGenerator.hs" ]; + }; + "tx-inject" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."clock" or (errorHandler.buildDepError "clock")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."mwc-random" or (errorHandler.buildDepError "mwc-random")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."pretty-simple" or (errorHandler.buildDepError "pretty-simple")) + (hsPkgs."rate-limit" or (errorHandler.buildDepError "rate-limit")) + (hsPkgs."signal" or (errorHandler.buildDepError "signal")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."hedgehog" or (errorHandler.buildDepError "hedgehog")) + (hsPkgs."primitive" or (errorHandler.buildDepError "primitive")) + ]; + buildable = true; + modules = [ "TxInject/RandomTx" ]; + hsSourceDirs = [ "tx-inject" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "sync-client" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."either" or (errorHandler.buildDepError "either")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + hsSourceDirs = [ "sync-client" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "plutus-pab-nami-demo" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "DemoContract" ]; + hsSourceDirs = [ "demo/pab-nami/pab/app" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "plutus-pab-nami-demo-generator" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "DemoContract" ]; + hsSourceDirs = [ "demo/pab-nami/pab/app" ]; + mainPath = [ + "Generator.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + }; + tests = { + "plutus-pab-test-full" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/WaitForTx" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/CoreSpec" + "Plutus/PAB/CliSpec" + "Plutus/PAB/Effects/Contract/BuiltinSpec" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test/full" "examples" ]; + mainPath = [ "Spec.hs" ]; + }; + "plutus-pab-test-full-long-running" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/WaitForTx" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/CliSpec" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test/full" "examples" ]; + mainPath = [ "SpecLongRunning.hs" ]; + }; + }; + }; + } // rec { src = (pkgs.lib).mkDefault ../plutus-pab-executables; } \ No newline at end of file diff --git a/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-pab.nix b/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-pab.nix index 5c1267c21b..6c3bc232ed 100644 --- a/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-pab.nix +++ b/nix/pkgs/haskell/materialized-linux/.plan.nix/plutus-pab.nix @@ -35,9 +35,11 @@ depends = [ (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) (hsPkgs."plutus-tx-plugin" or (errorHandler.buildDepError "plutus-tx-plugin")) @@ -50,15 +52,22 @@ (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) + (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) + (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) + (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) + (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) (hsPkgs."containers" or (errorHandler.buildDepError "containers")) (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) (hsPkgs."cryptonite" or (errorHandler.buildDepError "cryptonite")) (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) (hsPkgs."either" or (errorHandler.buildDepError "either")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) (hsPkgs."generic-arbitrary" or (errorHandler.buildDepError "generic-arbitrary")) (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) @@ -74,16 +83,13 @@ (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) (hsPkgs."ouroboros-network" or (errorHandler.buildDepError "ouroboros-network")) (hsPkgs."ouroboros-network-framework" or (errorHandler.buildDepError "ouroboros-network-framework")) - (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) (hsPkgs."servant" or (errorHandler.buildDepError "servant")) (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) (hsPkgs."servant-openapi3" or (errorHandler.buildDepError "servant-openapi3")) (hsPkgs."servant-options" or (errorHandler.buildDepError "servant-options")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) (hsPkgs."servant-swagger-ui" or (errorHandler.buildDepError "servant-swagger-ui")) (hsPkgs."servant-websockets" or (errorHandler.buildDepError "servant-websockets")) @@ -152,6 +158,7 @@ "Plutus/PAB/Events/Contract" "Plutus/PAB/Events/ContractInstanceState" "Plutus/PAB/Instances" + "Plutus/PAB/LocalCluster/Run" "Plutus/PAB/Monitoring/Config" "Plutus/PAB/Monitoring/Monitoring" "Plutus/PAB/Monitoring/PABLogMsg" @@ -159,7 +166,6 @@ "Plutus/PAB/Run/Cli" "Plutus/PAB/Run/Command" "Plutus/PAB/Run/CommandParser" - "Plutus/PAB/Run/PSGenerator" "Plutus/PAB/Simulator" "Plutus/PAB/Timeout" "Plutus/PAB/Types" @@ -172,280 +178,6 @@ ]; hsSourceDirs = [ "src" ]; }; - exes = { - "plutus-pab-setup" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) - (hsPkgs."unliftio-core" or (errorHandler.buildDepError "unliftio-core")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - ]; - buildable = true; - modules = [ "CommandParser" ]; - hsSourceDirs = [ "app" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-examples" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "ContractExample/WaitForTx" - "ContractExample" - ]; - hsSourceDirs = [ "examples" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-uniswap" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - hsSourceDirs = [ "examples/uniswap" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-local-cluster" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."directory" or (errorHandler.buildDepError "directory")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."text-class" or (errorHandler.buildDepError "text-class")) - (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) - (hsPkgs."sqlite-simple" or (errorHandler.buildDepError "sqlite-simple")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) - (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) - (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) - (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) - (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."servant-client-core" or (errorHandler.buildDepError "servant-client-core")) - (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "ContractExample/WaitForTx" - ]; - hsSourceDirs = [ "local-cluster" "examples" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-test-psgenerator" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - ]; - buildable = true; - modules = [ - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test-psgenerator" "test/full" "examples" ]; - mainPath = [ "TestPSGenerator.hs" ]; - }; - "tx-inject" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."clock" or (errorHandler.buildDepError "clock")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."mwc-random" or (errorHandler.buildDepError "mwc-random")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."pretty-simple" or (errorHandler.buildDepError "pretty-simple")) - (hsPkgs."rate-limit" or (errorHandler.buildDepError "rate-limit")) - (hsPkgs."signal" or (errorHandler.buildDepError "signal")) - (hsPkgs."stm" or (errorHandler.buildDepError "stm")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."hedgehog" or (errorHandler.buildDepError "hedgehog")) - (hsPkgs."primitive" or (errorHandler.buildDepError "primitive")) - ]; - buildable = true; - modules = [ "TxInject/RandomTx" ]; - hsSourceDirs = [ "tx-inject" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - "sync-client" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."either" or (errorHandler.buildDepError "either")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ]; - buildable = true; - hsSourceDirs = [ "sync-client" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - "plutus-pab-nami-demo" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ]; - buildable = true; - modules = [ "DemoContract" ]; - hsSourceDirs = [ "demo/pab-nami/pab/app" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - }; tests = { "plutus-pab-test-light" = { depends = [ @@ -466,7 +198,6 @@ (hsPkgs."lens" or (errorHandler.buildDepError "lens")) (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) @@ -498,127 +229,6 @@ hsSourceDirs = [ "test/light" ]; mainPath = [ "Spec.hs" ]; }; - "plutus-pab-test-full" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."stm" or (errorHandler.buildDepError "stm")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/WaitForTx" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/CoreSpec" - "Plutus/PAB/CliSpec" - "Plutus/PAB/Effects/Contract/BuiltinSpec" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test/full" "examples" ]; - mainPath = [ "Spec.hs" ]; - }; - "plutus-pab-test-full-long-running" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/WaitForTx" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/CliSpec" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test/full" "examples" ]; - mainPath = [ "SpecLongRunning.hs" ]; - }; }; }; } // rec { src = (pkgs.lib).mkDefault ../plutus-pab; } \ No newline at end of file diff --git a/nix/pkgs/haskell/materialized-linux/default.nix b/nix/pkgs/haskell/materialized-linux/default.nix index 8c3ebfc7c9..ef5fa1432d 100644 --- a/nix/pkgs/haskell/materialized-linux/default.nix +++ b/nix/pkgs/haskell/materialized-linux/default.nix @@ -814,6 +814,7 @@ io-classes = ./.plan.nix/io-classes.nix; ouroboros-consensus-byron = ./.plan.nix/ouroboros-consensus-byron.nix; contra-tracer = ./.plan.nix/contra-tracer.nix; + plutus-pab-executables = ./.plan.nix/plutus-pab-executables.nix; orphans-deriving-via = ./.plan.nix/orphans-deriving-via.nix; dbvar = ./.plan.nix/dbvar.nix; plutus-ledger = ./.plan.nix/plutus-ledger.nix; @@ -996,6 +997,9 @@ flags = { "asserts" = lib.mkOverride 900 false; }; }; "contra-tracer" = { flags = {}; }; + "plutus-pab-executables" = { + flags = { "defer-plugin-errors" = lib.mkOverride 900 false; }; + }; "orphans-deriving-via" = { flags = { "development" = lib.mkOverride 900 false; }; }; @@ -1075,7 +1079,6 @@ "iohk-monitoring".components.library.planned = lib.mkOverride 900 true; "insert-ordered-containers".components.library.planned = lib.mkOverride 900 true; "non-integral".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.tests."plutus-pab-test-full-long-running".planned = lib.mkOverride 900 true; "Win32-network".components.exes."named-pipe-demo".planned = lib.mkOverride 900 true; "criterion-measurement".components.library.planned = lib.mkOverride 900 true; "silently".components.library.planned = lib.mkOverride 900 true; @@ -1094,6 +1097,7 @@ "fmt".components.library.planned = lib.mkOverride 900 true; "web-ghc".components.tests."web-ghc-test".planned = lib.mkOverride 900 true; "old-time".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."tx-inject".planned = lib.mkOverride 900 true; "base-deriving-via".components.library.planned = lib.mkOverride 900 true; "beam-migrate".components.library.planned = lib.mkOverride 900 true; "openapi3".components.library.planned = lib.mkOverride 900 true; @@ -1116,6 +1120,7 @@ "openapi3".components.setup.planned = lib.mkOverride 900 true; "socks".components.library.planned = lib.mkOverride 900 true; "cryptohash-sha1".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.tests."plutus-pab-test-full".planned = lib.mkOverride 900 true; "plutus-ledger".components.tests."plutus-ledger-test".planned = lib.mkOverride 900 true; "command".components.library.planned = lib.mkOverride 900 true; "formatting".components.library.planned = lib.mkOverride 900 true; @@ -1177,6 +1182,7 @@ "indexed-traversable-instances".components.library.planned = lib.mkOverride 900 true; "libsystemd-journal".components.library.planned = lib.mkOverride 900 true; "appar".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.tests."plutus-pab-test-full-long-running".planned = lib.mkOverride 900 true; "hspec-discover".components.exes."hspec-discover".planned = lib.mkOverride 900 true; "prettyprinter-configurable".components.setup.planned = lib.mkOverride 900 true; "MonadRandom".components.library.planned = lib.mkOverride 900 true; @@ -1239,6 +1245,7 @@ "network-mux".components.exes."cardano-ping".planned = lib.mkOverride 900 true; "safe-exceptions".components.library.planned = lib.mkOverride 900 true; "blaze-html".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-uniswap".planned = lib.mkOverride 900 true; "syb".components.library.planned = lib.mkOverride 900 true; "transformers".components.library.planned = lib.mkOverride 900 true; "monad-logger".components.library.planned = lib.mkOverride 900 true; @@ -1256,6 +1263,7 @@ "parallel".components.library.planned = lib.mkOverride 900 true; "uuid-types".components.library.planned = lib.mkOverride 900 true; "QuickCheck".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.library.planned = lib.mkOverride 900 true; "haskell-src-meta".components.library.planned = lib.mkOverride 900 true; "cborg".components.library.planned = lib.mkOverride 900 true; "time-manager".components.library.planned = lib.mkOverride 900 true; @@ -1322,13 +1330,13 @@ "HUnit".components.library.planned = lib.mkOverride 900 true; "tree-diff".components.library.planned = lib.mkOverride 900 true; "cardano-wallet".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-setup".planned = lib.mkOverride 900 true; "fast-logger".components.library.planned = lib.mkOverride 900 true; "vector".components.library.planned = lib.mkOverride 900 true; "template-haskell".components.library.planned = lib.mkOverride 900 true; "http-date".components.library.planned = lib.mkOverride 900 true; "concurrent-output".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-framework".components.exes."demo-ping-pong".planned = lib.mkOverride 900 true; - "plutus-pab".components.tests."plutus-pab-test-full".planned = lib.mkOverride 900 true; "path-pieces".components.library.planned = lib.mkOverride 900 true; "mono-traversable".components.library.planned = lib.mkOverride 900 true; "integer-gmp".components.library.planned = lib.mkOverride 900 true; @@ -1356,7 +1364,6 @@ "servant-swagger-ui-core".components.library.planned = lib.mkOverride 900 true; "servant".components.library.planned = lib.mkOverride 900 true; "ListLike".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."tx-inject".planned = lib.mkOverride 900 true; "conduit-extra".components.library.planned = lib.mkOverride 900 true; "criterion".components.exes."criterion-report".planned = lib.mkOverride 900 true; "cardano-crypto-wrapper".components.library.planned = lib.mkOverride 900 true; @@ -1369,18 +1376,16 @@ "cardano-api".components.sublibs."gen".planned = lib.mkOverride 900 true; "parsers".components.library.planned = lib.mkOverride 900 true; "base-compat".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."sync-client".planned = lib.mkOverride 900 true; "bech32-th".components.library.planned = lib.mkOverride 900 true; "mtl-compat".components.library.planned = lib.mkOverride 900 true; "cassava".components.library.planned = lib.mkOverride 900 true; "Only".components.library.planned = lib.mkOverride 900 true; "groups".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-test-psgenerator".planned = lib.mkOverride 900 true; "warp".components.library.planned = lib.mkOverride 900 true; "terminal-size".components.library.planned = lib.mkOverride 900 true; "wl-pprint-annotated".components.library.planned = lib.mkOverride 900 true; "string-conv".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-examples".planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-nami-demo".planned = lib.mkOverride 900 true; "servant-blaze".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-testing".components.library.planned = lib.mkOverride 900 true; "free".components.library.planned = lib.mkOverride 900 true; @@ -1441,9 +1446,11 @@ "witherable".components.library.planned = lib.mkOverride 900 true; "snap-core".components.library.planned = lib.mkOverride 900 true; "servant-websockets".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."sync-client".planned = lib.mkOverride 900 true; "aeson-casing".components.library.planned = lib.mkOverride 900 true; "cardano-crypto-tests".components.library.planned = lib.mkOverride 900 true; "cardano-wallet".components.exes."cardano-wallet".planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-nami-demo-generator".planned = lib.mkOverride 900 true; "servant-foreign".components.library.planned = lib.mkOverride 900 true; "contravariant".components.library.planned = lib.mkOverride 900 true; "optparse-generic".components.library.planned = lib.mkOverride 900 true; @@ -1455,18 +1462,19 @@ "data-fix".components.library.planned = lib.mkOverride 900 true; "dependent-sum-template".components.library.planned = lib.mkOverride 900 true; "sop-core".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-nami-demo".planned = lib.mkOverride 900 true; "text-short".components.library.planned = lib.mkOverride 900 true; "vault".components.library.planned = lib.mkOverride 900 true; "zlib-bindings".components.library.planned = lib.mkOverride 900 true; "freer-extras".components.library.planned = lib.mkOverride 900 true; "plutus-tx".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-test-psgenerator".planned = lib.mkOverride 900 true; "logict".components.library.planned = lib.mkOverride 900 true; "unliftio".components.library.planned = lib.mkOverride 900 true; "wcwidth".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-framework".components.exes."demo-connection-manager".planned = lib.mkOverride 900 true; "http-client-tls".components.library.planned = lib.mkOverride 900 true; "extensible-effects".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-examples".planned = lib.mkOverride 900 true; "constraints-extras".components.exes."readme".planned = lib.mkOverride 900 true; "typed-process".components.library.planned = lib.mkOverride 900 true; "mersenne-random-pure64".components.library.planned = lib.mkOverride 900 true; @@ -1500,7 +1508,6 @@ "persistent".components.library.planned = lib.mkOverride 900 true; "data-default-class".components.library.planned = lib.mkOverride 900 true; "easy-file".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-local-cluster".planned = lib.mkOverride 900 true; "time-units".components.library.planned = lib.mkOverride 900 true; "parser-combinators".components.library.planned = lib.mkOverride 900 true; "pretty-simple".components.library.planned = lib.mkOverride 900 true; @@ -1539,7 +1546,6 @@ "plutus-playground-server".components.sublibs."plutus-playground-usecases".planned = lib.mkOverride 900 true; "megaparsec".components.library.planned = lib.mkOverride 900 true; "th-orphans".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-setup".planned = lib.mkOverride 900 true; "base64-bytestring-type".components.library.planned = lib.mkOverride 900 true; "hspec-golden-aeson".components.library.planned = lib.mkOverride 900 true; "generic-deriving".components.library.planned = lib.mkOverride 900 true; @@ -1563,6 +1569,7 @@ "semirings".components.library.planned = lib.mkOverride 900 true; "system-filepath".components.library.planned = lib.mkOverride 900 true; "list-t".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-local-cluster".planned = lib.mkOverride 900 true; "Unique".components.library.planned = lib.mkOverride 900 true; "asn1-types".components.library.planned = lib.mkOverride 900 true; "vector-th-unbox".components.library.planned = lib.mkOverride 900 true; @@ -1616,7 +1623,6 @@ "resourcet".components.library.planned = lib.mkOverride 900 true; "microlens-mtl".components.library.planned = lib.mkOverride 900 true; "microlens".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-uniswap".planned = lib.mkOverride 900 true; "smallcheck".components.library.planned = lib.mkOverride 900 true; "OddWord".components.library.planned = lib.mkOverride 900 true; "profunctors".components.library.planned = lib.mkOverride 900 true; diff --git a/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-pab-executables.nix b/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-pab-executables.nix new file mode 100644 index 0000000000..95ce66d85e --- /dev/null +++ b/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-pab-executables.nix @@ -0,0 +1,486 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { defer-plugin-errors = false; }; + package = { + specVersion = "3.0"; + identifier = { name = "plutus-pab-executables"; version = "0.1.0.0"; }; + license = "Apache-2.0"; + copyright = ""; + maintainer = "jann.mueller@iohk.io"; + author = "Jann Müller"; + homepage = "https://github.com/iohk/plutus#readme"; + url = ""; + synopsis = ""; + description = "Please see the README on GitHub at "; + buildType = "Simple"; + isLocal = true; + detailLevel = "FullDetails"; + licenseFiles = [ "LICENSE" "NOTICE" ]; + dataDir = "."; + dataFiles = []; + extraSrcFiles = []; + extraTmpFiles = []; + extraDocFiles = []; + }; + components = { + "library" = { + depends = [ + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."servant" or (errorHandler.buildDepError "servant")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "Plutus/PAB/Run/PSGenerator" ]; + hsSourceDirs = [ "src" ]; + }; + exes = { + "plutus-pab-setup" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) + (hsPkgs."unliftio-core" or (errorHandler.buildDepError "unliftio-core")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + ]; + buildable = true; + modules = [ "CommandParser" ]; + hsSourceDirs = [ "app" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-examples" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "ContractExample/WaitForTx" + "ContractExample" + ]; + hsSourceDirs = [ "examples" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-uniswap" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + hsSourceDirs = [ "examples/uniswap" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-local-cluster" = { + depends = [ + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."text-class" or (errorHandler.buildDepError "text-class")) + (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) + (hsPkgs."sqlite-simple" or (errorHandler.buildDepError "sqlite-simple")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) + (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) + (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) + (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) + (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) + (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."servant-client-core" or (errorHandler.buildDepError "servant-client-core")) + (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "ContractExample/WaitForTx" + ]; + hsSourceDirs = [ "local-cluster" "examples" ]; + mainPath = [ "Main.hs" ]; + }; + "plutus-pab-test-psgenerator" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + ]; + buildable = true; + modules = [ + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test-psgenerator" "test/full" "examples" ]; + mainPath = [ "TestPSGenerator.hs" ]; + }; + "tx-inject" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."clock" or (errorHandler.buildDepError "clock")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."mwc-random" or (errorHandler.buildDepError "mwc-random")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."pretty-simple" or (errorHandler.buildDepError "pretty-simple")) + (hsPkgs."rate-limit" or (errorHandler.buildDepError "rate-limit")) + (hsPkgs."signal" or (errorHandler.buildDepError "signal")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."hedgehog" or (errorHandler.buildDepError "hedgehog")) + (hsPkgs."primitive" or (errorHandler.buildDepError "primitive")) + ]; + buildable = true; + modules = [ "TxInject/RandomTx" ]; + hsSourceDirs = [ "tx-inject" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "sync-client" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) + (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) + (hsPkgs."either" or (errorHandler.buildDepError "either")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + hsSourceDirs = [ "sync-client" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "plutus-pab-nami-demo" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "DemoContract" ]; + hsSourceDirs = [ "demo/pab-nami/pab/app" ]; + mainPath = [ + "Main.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + "plutus-pab-nami-demo-generator" = { + depends = [ + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + ]; + buildable = true; + modules = [ "DemoContract" ]; + hsSourceDirs = [ "demo/pab-nami/pab/app" ]; + mainPath = [ + "Generator.hs" + ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; + }; + }; + tests = { + "plutus-pab-test-full" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/WaitForTx" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/CoreSpec" + "Plutus/PAB/CliSpec" + "Plutus/PAB/Effects/Contract/BuiltinSpec" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test/full" "examples" ]; + mainPath = [ "Spec.hs" ]; + }; + "plutus-pab-test-full-long-running" = { + depends = [ + (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) + (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) + (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) + (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) + (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) + (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) + (hsPkgs."lens" or (errorHandler.buildDepError "lens")) + (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) + (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) + (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) + (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) + (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) + (hsPkgs."plutus-pab-executables" or (errorHandler.buildDepError "plutus-pab-executables")) + (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) + (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) + (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) + (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) + (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) + (hsPkgs."text" or (errorHandler.buildDepError "text")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) + (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) + (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) + (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) + (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) + (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) + (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) + (hsPkgs."async" or (errorHandler.buildDepError "async")) + (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) + (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) + (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) + ]; + buildable = true; + modules = [ + "ContractExample" + "ContractExample/WaitForTx" + "ContractExample/AtomicSwap" + "ContractExample/IntegrationTest" + "ContractExample/PayToWallet" + "Plutus/PAB/CliSpec" + "Plutus/PAB/Effects/Contract/ContractTest" + "Plutus/PAB/Simulator/Test" + ]; + hsSourceDirs = [ "test/full" "examples" ]; + mainPath = [ "SpecLongRunning.hs" ]; + }; + }; + }; + } // rec { src = (pkgs.lib).mkDefault ../plutus-pab-executables; } \ No newline at end of file diff --git a/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-pab.nix b/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-pab.nix index 5c1267c21b..6c3bc232ed 100644 --- a/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-pab.nix +++ b/nix/pkgs/haskell/materialized-windows/.plan.nix/plutus-pab.nix @@ -35,9 +35,11 @@ depends = [ (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) + (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) + (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) (hsPkgs."plutus-tx-plugin" or (errorHandler.buildDepError "plutus-tx-plugin")) @@ -50,15 +52,22 @@ (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) + (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) + (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) + (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) + (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) (hsPkgs."containers" or (errorHandler.buildDepError "containers")) (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) (hsPkgs."cryptonite" or (errorHandler.buildDepError "cryptonite")) (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) (hsPkgs."either" or (errorHandler.buildDepError "either")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) (hsPkgs."generic-arbitrary" or (errorHandler.buildDepError "generic-arbitrary")) (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) @@ -74,16 +83,13 @@ (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) (hsPkgs."ouroboros-network" or (errorHandler.buildDepError "ouroboros-network")) (hsPkgs."ouroboros-network-framework" or (errorHandler.buildDepError "ouroboros-network-framework")) - (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) (hsPkgs."servant" or (errorHandler.buildDepError "servant")) (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) (hsPkgs."servant-openapi3" or (errorHandler.buildDepError "servant-openapi3")) (hsPkgs."servant-options" or (errorHandler.buildDepError "servant-options")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) (hsPkgs."servant-swagger-ui" or (errorHandler.buildDepError "servant-swagger-ui")) (hsPkgs."servant-websockets" or (errorHandler.buildDepError "servant-websockets")) @@ -152,6 +158,7 @@ "Plutus/PAB/Events/Contract" "Plutus/PAB/Events/ContractInstanceState" "Plutus/PAB/Instances" + "Plutus/PAB/LocalCluster/Run" "Plutus/PAB/Monitoring/Config" "Plutus/PAB/Monitoring/Monitoring" "Plutus/PAB/Monitoring/PABLogMsg" @@ -159,7 +166,6 @@ "Plutus/PAB/Run/Cli" "Plutus/PAB/Run/Command" "Plutus/PAB/Run/CommandParser" - "Plutus/PAB/Run/PSGenerator" "Plutus/PAB/Simulator" "Plutus/PAB/Timeout" "Plutus/PAB/Types" @@ -172,280 +178,6 @@ ]; hsSourceDirs = [ "src" ]; }; - exes = { - "plutus-pab-setup" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) - (hsPkgs."unliftio-core" or (errorHandler.buildDepError "unliftio-core")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - ]; - buildable = true; - modules = [ "CommandParser" ]; - hsSourceDirs = [ "app" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-examples" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "ContractExample/WaitForTx" - "ContractExample" - ]; - hsSourceDirs = [ "examples" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-uniswap" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - hsSourceDirs = [ "examples/uniswap" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-local-cluster" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."directory" or (errorHandler.buildDepError "directory")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."text-class" or (errorHandler.buildDepError "text-class")) - (hsPkgs."beam-sqlite" or (errorHandler.buildDepError "beam-sqlite")) - (hsPkgs."sqlite-simple" or (errorHandler.buildDepError "sqlite-simple")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."beam-migrate" or (errorHandler.buildDepError "beam-migrate")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."cardano-wallet" or (errorHandler.buildDepError "cardano-wallet")) - (hsPkgs."cardano-wallet-cli" or (errorHandler.buildDepError "cardano-wallet-cli")) - (hsPkgs."cardano-wallet-launcher" or (errorHandler.buildDepError "cardano-wallet-launcher")) - (hsPkgs."cardano-wallet-core" or (errorHandler.buildDepError "cardano-wallet-core")) - (hsPkgs."cardano-wallet-core-integration" or (errorHandler.buildDepError "cardano-wallet-core-integration")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."lobemo-backend-ekg" or (errorHandler.buildDepError "lobemo-backend-ekg")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-api" or (errorHandler.buildDepError "plutus-ledger-api")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."servant-client-core" or (errorHandler.buildDepError "servant-client-core")) - (hsPkgs."cardano-addresses" or (errorHandler.buildDepError "cardano-addresses")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "ContractExample/WaitForTx" - ]; - hsSourceDirs = [ "local-cluster" "examples" ]; - mainPath = [ "Main.hs" ]; - }; - "plutus-pab-test-psgenerator" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."servant-purescript" or (errorHandler.buildDepError "servant-purescript")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - ]; - buildable = true; - modules = [ - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test-psgenerator" "test/full" "examples" ]; - mainPath = [ "TestPSGenerator.hs" ]; - }; - "tx-inject" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."clock" or (errorHandler.buildDepError "clock")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."mwc-random" or (errorHandler.buildDepError "mwc-random")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."pretty-simple" or (errorHandler.buildDepError "pretty-simple")) - (hsPkgs."rate-limit" or (errorHandler.buildDepError "rate-limit")) - (hsPkgs."signal" or (errorHandler.buildDepError "signal")) - (hsPkgs."stm" or (errorHandler.buildDepError "stm")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."time-units" or (errorHandler.buildDepError "time-units")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."hedgehog" or (errorHandler.buildDepError "hedgehog")) - (hsPkgs."primitive" or (errorHandler.buildDepError "primitive")) - ]; - buildable = true; - modules = [ "TxInject/RandomTx" ]; - hsSourceDirs = [ "tx-inject" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - "sync-client" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."cardano-slotting" or (errorHandler.buildDepError "cardano-slotting")) - (hsPkgs."contra-tracer" or (errorHandler.buildDepError "contra-tracer")) - (hsPkgs."either" or (errorHandler.buildDepError "either")) - (hsPkgs."optparse-applicative" or (errorHandler.buildDepError "optparse-applicative")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ]; - buildable = true; - hsSourceDirs = [ "sync-client" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - "plutus-pab-nami-demo" = { - depends = [ - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - (hsPkgs."plutus-chain-index" or (errorHandler.buildDepError "plutus-chain-index")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ]; - buildable = true; - modules = [ "DemoContract" ]; - hsSourceDirs = [ "demo/pab-nami/pab/app" ]; - mainPath = [ - "Main.hs" - ] ++ (pkgs.lib).optional (flags.defer-plugin-errors) ""; - }; - }; tests = { "plutus-pab-test-light" = { depends = [ @@ -466,7 +198,6 @@ (hsPkgs."lens" or (errorHandler.buildDepError "lens")) (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) @@ -498,127 +229,6 @@ hsSourceDirs = [ "test/light" ]; mainPath = [ "Spec.hs" ]; }; - "plutus-pab-test-full" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."stm" or (errorHandler.buildDepError "stm")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/WaitForTx" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/CoreSpec" - "Plutus/PAB/CliSpec" - "Plutus/PAB/Effects/Contract/BuiltinSpec" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test/full" "examples" ]; - mainPath = [ "Spec.hs" ]; - }; - "plutus-pab-test-full-long-running" = { - depends = [ - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."aeson" or (errorHandler.buildDepError "aeson")) - (hsPkgs."aeson-pretty" or (errorHandler.buildDepError "aeson-pretty")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."cardano-api" or (errorHandler.buildDepError "cardano-api")) - (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - (hsPkgs."data-default" or (errorHandler.buildDepError "data-default")) - (hsPkgs."freer-extras" or (errorHandler.buildDepError "freer-extras")) - (hsPkgs."freer-simple" or (errorHandler.buildDepError "freer-simple")) - (hsPkgs."http-client" or (errorHandler.buildDepError "http-client")) - (hsPkgs."http-client-tls" or (errorHandler.buildDepError "http-client-tls")) - (hsPkgs."lens" or (errorHandler.buildDepError "lens")) - (hsPkgs."monad-logger" or (errorHandler.buildDepError "monad-logger")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."plutus-chain-index-core" or (errorHandler.buildDepError "plutus-chain-index-core")) - (hsPkgs."plutus-contract" or (errorHandler.buildDepError "plutus-contract")) - (hsPkgs."plutus-pab" or (errorHandler.buildDepError "plutus-pab")) - (hsPkgs."plutus-use-cases" or (errorHandler.buildDepError "plutus-use-cases")) - (hsPkgs."plutus-ledger" or (errorHandler.buildDepError "plutus-ledger")) - (hsPkgs."plutus-ledger-constraints" or (errorHandler.buildDepError "plutus-ledger-constraints")) - (hsPkgs."quickcheck-instances" or (errorHandler.buildDepError "quickcheck-instances")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."smallcheck" or (errorHandler.buildDepError "smallcheck")) - (hsPkgs."tasty-smallcheck" or (errorHandler.buildDepError "tasty-smallcheck")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."prettyprinter" or (errorHandler.buildDepError "prettyprinter")) - (hsPkgs."row-types" or (errorHandler.buildDepError "row-types")) - (hsPkgs."plutus-tx" or (errorHandler.buildDepError "plutus-tx")) - (hsPkgs."playground-common" or (errorHandler.buildDepError "playground-common")) - (hsPkgs."yaml" or (errorHandler.buildDepError "yaml")) - (hsPkgs."iohk-monitoring" or (errorHandler.buildDepError "iohk-monitoring")) - (hsPkgs."servant-server" or (errorHandler.buildDepError "servant-server")) - (hsPkgs."purescript-bridge" or (errorHandler.buildDepError "purescript-bridge")) - (hsPkgs."async" or (errorHandler.buildDepError "async")) - (hsPkgs."servant-client" or (errorHandler.buildDepError "servant-client")) - (hsPkgs."uuid" or (errorHandler.buildDepError "uuid")) - (hsPkgs."openapi3" or (errorHandler.buildDepError "openapi3")) - ]; - buildable = true; - modules = [ - "ContractExample" - "ContractExample/WaitForTx" - "ContractExample/AtomicSwap" - "ContractExample/IntegrationTest" - "ContractExample/PayToWallet" - "Plutus/PAB/CliSpec" - "Plutus/PAB/Effects/Contract/ContractTest" - "Plutus/PAB/Simulator/Test" - ]; - hsSourceDirs = [ "test/full" "examples" ]; - mainPath = [ "SpecLongRunning.hs" ]; - }; }; }; } // rec { src = (pkgs.lib).mkDefault ../plutus-pab; } \ No newline at end of file diff --git a/nix/pkgs/haskell/materialized-windows/default.nix b/nix/pkgs/haskell/materialized-windows/default.nix index 64dc9397bb..65148ac901 100644 --- a/nix/pkgs/haskell/materialized-windows/default.nix +++ b/nix/pkgs/haskell/materialized-windows/default.nix @@ -797,6 +797,7 @@ io-classes = ./.plan.nix/io-classes.nix; ouroboros-consensus-byron = ./.plan.nix/ouroboros-consensus-byron.nix; contra-tracer = ./.plan.nix/contra-tracer.nix; + plutus-pab-executables = ./.plan.nix/plutus-pab-executables.nix; orphans-deriving-via = ./.plan.nix/orphans-deriving-via.nix; dbvar = ./.plan.nix/dbvar.nix; plutus-ledger = ./.plan.nix/plutus-ledger.nix; @@ -979,6 +980,9 @@ flags = { "asserts" = lib.mkOverride 900 false; }; }; "contra-tracer" = { flags = {}; }; + "plutus-pab-executables" = { + flags = { "defer-plugin-errors" = lib.mkOverride 900 false; }; + }; "orphans-deriving-via" = { flags = { "development" = lib.mkOverride 900 false; }; }; @@ -1056,7 +1060,6 @@ "iohk-monitoring".components.library.planned = lib.mkOverride 900 true; "insert-ordered-containers".components.library.planned = lib.mkOverride 900 true; "non-integral".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.tests."plutus-pab-test-full-long-running".planned = lib.mkOverride 900 true; "Win32-network".components.exes."named-pipe-demo".planned = lib.mkOverride 900 true; "criterion-measurement".components.library.planned = lib.mkOverride 900 true; "silently".components.library.planned = lib.mkOverride 900 true; @@ -1075,6 +1078,7 @@ "fmt".components.library.planned = lib.mkOverride 900 true; "web-ghc".components.tests."web-ghc-test".planned = lib.mkOverride 900 true; "old-time".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."tx-inject".planned = lib.mkOverride 900 true; "base-deriving-via".components.library.planned = lib.mkOverride 900 true; "beam-migrate".components.library.planned = lib.mkOverride 900 true; "openapi3".components.library.planned = lib.mkOverride 900 true; @@ -1097,6 +1101,7 @@ "openapi3".components.setup.planned = lib.mkOverride 900 true; "socks".components.library.planned = lib.mkOverride 900 true; "cryptohash-sha1".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.tests."plutus-pab-test-full".planned = lib.mkOverride 900 true; "plutus-ledger".components.tests."plutus-ledger-test".planned = lib.mkOverride 900 true; "command".components.library.planned = lib.mkOverride 900 true; "formatting".components.library.planned = lib.mkOverride 900 true; @@ -1156,6 +1161,7 @@ "signal".components.exes."test".planned = lib.mkOverride 900 true; "indexed-traversable-instances".components.library.planned = lib.mkOverride 900 true; "appar".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.tests."plutus-pab-test-full-long-running".planned = lib.mkOverride 900 true; "hspec-discover".components.exes."hspec-discover".planned = lib.mkOverride 900 true; "prettyprinter-configurable".components.setup.planned = lib.mkOverride 900 true; "MonadRandom".components.library.planned = lib.mkOverride 900 true; @@ -1213,6 +1219,7 @@ "colour".components.library.planned = lib.mkOverride 900 true; "safe-exceptions".components.library.planned = lib.mkOverride 900 true; "blaze-html".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-uniswap".planned = lib.mkOverride 900 true; "syb".components.library.planned = lib.mkOverride 900 true; "transformers".components.library.planned = lib.mkOverride 900 true; "monad-logger".components.library.planned = lib.mkOverride 900 true; @@ -1230,6 +1237,7 @@ "parallel".components.library.planned = lib.mkOverride 900 true; "uuid-types".components.library.planned = lib.mkOverride 900 true; "QuickCheck".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.library.planned = lib.mkOverride 900 true; "haskell-src-meta".components.library.planned = lib.mkOverride 900 true; "cborg".components.library.planned = lib.mkOverride 900 true; "time-manager".components.library.planned = lib.mkOverride 900 true; @@ -1294,13 +1302,13 @@ "HUnit".components.library.planned = lib.mkOverride 900 true; "tree-diff".components.library.planned = lib.mkOverride 900 true; "cardano-wallet".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-setup".planned = lib.mkOverride 900 true; "fast-logger".components.library.planned = lib.mkOverride 900 true; "vector".components.library.planned = lib.mkOverride 900 true; "template-haskell".components.library.planned = lib.mkOverride 900 true; "http-date".components.library.planned = lib.mkOverride 900 true; "concurrent-output".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-framework".components.exes."demo-ping-pong".planned = lib.mkOverride 900 true; - "plutus-pab".components.tests."plutus-pab-test-full".planned = lib.mkOverride 900 true; "path-pieces".components.library.planned = lib.mkOverride 900 true; "mono-traversable".components.library.planned = lib.mkOverride 900 true; "integer-gmp".components.library.planned = lib.mkOverride 900 true; @@ -1328,7 +1336,6 @@ "servant-swagger-ui-core".components.library.planned = lib.mkOverride 900 true; "servant".components.library.planned = lib.mkOverride 900 true; "ListLike".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."tx-inject".planned = lib.mkOverride 900 true; "conduit-extra".components.library.planned = lib.mkOverride 900 true; "criterion".components.exes."criterion-report".planned = lib.mkOverride 900 true; "cardano-crypto-wrapper".components.library.planned = lib.mkOverride 900 true; @@ -1341,18 +1348,16 @@ "cardano-api".components.sublibs."gen".planned = lib.mkOverride 900 true; "parsers".components.library.planned = lib.mkOverride 900 true; "base-compat".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."sync-client".planned = lib.mkOverride 900 true; "bech32-th".components.library.planned = lib.mkOverride 900 true; "mtl-compat".components.library.planned = lib.mkOverride 900 true; "cassava".components.library.planned = lib.mkOverride 900 true; "Only".components.library.planned = lib.mkOverride 900 true; "groups".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-test-psgenerator".planned = lib.mkOverride 900 true; "warp".components.library.planned = lib.mkOverride 900 true; "terminal-size".components.library.planned = lib.mkOverride 900 true; "wl-pprint-annotated".components.library.planned = lib.mkOverride 900 true; "string-conv".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-examples".planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-nami-demo".planned = lib.mkOverride 900 true; "servant-blaze".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-testing".components.library.planned = lib.mkOverride 900 true; "free".components.library.planned = lib.mkOverride 900 true; @@ -1411,9 +1416,11 @@ "witherable".components.library.planned = lib.mkOverride 900 true; "snap-core".components.library.planned = lib.mkOverride 900 true; "servant-websockets".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."sync-client".planned = lib.mkOverride 900 true; "aeson-casing".components.library.planned = lib.mkOverride 900 true; "cardano-crypto-tests".components.library.planned = lib.mkOverride 900 true; "cardano-wallet".components.exes."cardano-wallet".planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-nami-demo-generator".planned = lib.mkOverride 900 true; "servant-foreign".components.library.planned = lib.mkOverride 900 true; "contravariant".components.library.planned = lib.mkOverride 900 true; "optparse-generic".components.library.planned = lib.mkOverride 900 true; @@ -1425,17 +1432,18 @@ "data-fix".components.library.planned = lib.mkOverride 900 true; "dependent-sum-template".components.library.planned = lib.mkOverride 900 true; "sop-core".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-nami-demo".planned = lib.mkOverride 900 true; "text-short".components.library.planned = lib.mkOverride 900 true; "vault".components.library.planned = lib.mkOverride 900 true; "zlib-bindings".components.library.planned = lib.mkOverride 900 true; "freer-extras".components.library.planned = lib.mkOverride 900 true; "plutus-tx".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-test-psgenerator".planned = lib.mkOverride 900 true; "logict".components.library.planned = lib.mkOverride 900 true; "unliftio".components.library.planned = lib.mkOverride 900 true; "ouroboros-network-framework".components.exes."demo-connection-manager".planned = lib.mkOverride 900 true; "http-client-tls".components.library.planned = lib.mkOverride 900 true; "extensible-effects".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-examples".planned = lib.mkOverride 900 true; "constraints-extras".components.exes."readme".planned = lib.mkOverride 900 true; "typed-process".components.library.planned = lib.mkOverride 900 true; "mersenne-random-pure64".components.library.planned = lib.mkOverride 900 true; @@ -1468,7 +1476,6 @@ "persistent".components.library.planned = lib.mkOverride 900 true; "data-default-class".components.library.planned = lib.mkOverride 900 true; "easy-file".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-local-cluster".planned = lib.mkOverride 900 true; "time-units".components.library.planned = lib.mkOverride 900 true; "parser-combinators".components.library.planned = lib.mkOverride 900 true; "pretty-simple".components.library.planned = lib.mkOverride 900 true; @@ -1507,7 +1514,6 @@ "plutus-playground-server".components.sublibs."plutus-playground-usecases".planned = lib.mkOverride 900 true; "megaparsec".components.library.planned = lib.mkOverride 900 true; "th-orphans".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-pab-setup".planned = lib.mkOverride 900 true; "base64-bytestring-type".components.library.planned = lib.mkOverride 900 true; "hspec-golden-aeson".components.library.planned = lib.mkOverride 900 true; "generic-deriving".components.library.planned = lib.mkOverride 900 true; @@ -1532,6 +1538,7 @@ "system-filepath".components.library.planned = lib.mkOverride 900 true; "mintty".components.library.planned = lib.mkOverride 900 true; "list-t".components.library.planned = lib.mkOverride 900 true; + "plutus-pab-executables".components.exes."plutus-pab-local-cluster".planned = lib.mkOverride 900 true; "Unique".components.library.planned = lib.mkOverride 900 true; "asn1-types".components.library.planned = lib.mkOverride 900 true; "vector-th-unbox".components.library.planned = lib.mkOverride 900 true; @@ -1584,7 +1591,6 @@ "resourcet".components.library.planned = lib.mkOverride 900 true; "microlens-mtl".components.library.planned = lib.mkOverride 900 true; "microlens".components.library.planned = lib.mkOverride 900 true; - "plutus-pab".components.exes."plutus-uniswap".planned = lib.mkOverride 900 true; "smallcheck".components.library.planned = lib.mkOverride 900 true; "OddWord".components.library.planned = lib.mkOverride 900 true; "profunctors".components.library.planned = lib.mkOverride 900 true; diff --git a/playground-common/src/PSGenerator/Common.hs b/playground-common/src/PSGenerator/Common.hs index 2ef27af4de..3eea3b1031 100644 --- a/playground-common/src/PSGenerator/Common.hs +++ b/playground-common/src/PSGenerator/Common.hs @@ -156,6 +156,12 @@ someCardanoApiTxBridge = do typeModule ^== "Ledger.Tx.CardanoAPI" pure psJson +exportTxBridge :: BridgePart +exportTxBridge = do + typeName ^== "ExportTx" + typeModule ^== "Plutus.Contract.Wallet" + pure psJson + miscBridge :: BridgePart miscBridge = bultinByteStringBridge @@ -168,6 +174,7 @@ miscBridge = <|> satIntBridge <|> exBudgetBridge <|> someCardanoApiTxBridge + <|> exportTxBridge ------------------------------------------------------------ diff --git a/plutus-contract/README.md b/plutus-contract/README.md index 732f77a181..62da797b12 100644 --- a/plutus-contract/README.md +++ b/plutus-contract/README.md @@ -1,29 +1,12 @@ # plutus-contract -A library for writing Plutus contracts and transforming them into executables that run on the app platform. The high-level workflow is this: +A library for writing Plutus contracts. -* Write a contract using the `Plutus.Contract` module. The type of contracts is `ContractActions r => Contract r ()`, where `PlutusContract r` describes the actions it can perform. `ContractActions` is a list of common contract actions that includes waiting for blockchain events, exposing endpoints, and waiting for user actions. See the definition of `Examples.Crowdfunding.crowdfunding` for an example. -* (optional) Write traces for the contract using the `Plutus.Contract.Emulator` module. Traces are sequences of actions by simulated wallets that use the contract. Their signature is `(MonadEmulator m) => ContractTrace m a ()`. See `Examples.Game.lockTrace` for an example. -* (optional) Write unit tests for the contract, using the `Spec.HUnit` module to make make assertions about traces. -* Turn the contract into an executable using the `Plutus.Contract.App` module. `run :: Contract (ContractEffects '[]) () -> IO ()` takes a contract and turns it into an HTTP server with two routes, `initialise` and `run`. `initialise` responds to `GET` requests with the initial state of the contract. `run` expects POST requests of the old state together with an input event, and produces the new state. `Plutus.Contract.App.runWithTraces` takes a list of named traces whose intermediate states can be printed by calling the program with the `trace` argument and the name of a trace. The intermediate states so printed are JSON values that can be used as arguments for the `run` endpoint. +The high-level workflow is this: -The `/examples` folder contains some hand-written examples for the use cases we currently have. +* Write a contract using the `Plutus.Contract` module. The type of contract is `Contract w s e a` with schema 's', producing a value of type 'a' or an error 'e'. +* (optional) Write traces for the contract using the `Plutus.Trace` module. Traces are sequences of actions by simulated wallets that use the contract. See `Spec.Emulator` for an example. +* (optional) Write unit tests for the contract, using the `Plutus.Contract.Test` module to make assertions about traces. +* Turn the contract into an executable using the `plutus-pab` package. -Contracts are represented by the `Resumable f a` type from `Plutus.Contract.Resumable`. `f` describes the effects that the contract can have. From the user's point of view, `f` is a list of effects (from `extensible-effects`) defined in `Plutus.Contract.Effects` and sub-modules. Internally, before running the contract, the entire list of effects is converted to a single `Maybe i -> Either o a` function, where `i` is a union of all possible inputs to the contract, and `o` is an output describing what inputs are currently expected. For example, `o` could say "I am currently waiting to be notified of a change to address XYZ". In the `Plutus.Contract.App` module, as well as in the unit tests, `i` is fixed to `Plutus.Contract.Prompt.Event.Event` and `o` is `Plutus.Contract.Prompt.Hooks.Hooks`. Each instance of a contract is represented by a `Plutus.Contract.Record.Record` value, and the state can be advanced using `Plutus.Contract.Resumable.updateRecord`. See the note `[Handling state in contracts]` for details. - -## Building the examples - -1. `nix build -f default.nix localPackages.plutus-contract` - -Alternatively: - -1. `cd plutus-contract` -2. `nix-shell` -3. `cabal build ` for example `cabal build contract-exe-guessing-game` - -## Docker - -To build the docker image for the guessing game contract: - -1. `nix build -f default.nix plutus-contract.docker` -2. `docker load -i result` +The `plutus-use-cases` package contains some hand-written examples for the use cases we currently have. diff --git a/plutus-contract/src/Plutus/Contract/Test.hs b/plutus-contract/src/Plutus/Contract/Test.hs index 14987ed011..772afe4dd0 100644 --- a/plutus-contract/src/Plutus/Contract/Test.hs +++ b/plutus-contract/src/Plutus/Contract/Test.hs @@ -65,6 +65,7 @@ module Plutus.Contract.Test( , defaultCheckOptions , minLogLevel , emulatorConfig + , changeInitialWalletValue -- * Etc , goldenPir ) where @@ -73,7 +74,7 @@ import Control.Applicative (liftA2) import Control.Arrow ((>>>)) import Control.Foldl (FoldM) import Control.Foldl qualified as L -import Control.Lens (at, makeLenses, preview, to, (&), (.~), (^.)) +import Control.Lens (_Left, at, ix, makeLenses, over, preview, to, (&), (.~), (^.)) import Control.Monad (unless) import Control.Monad.Freer (Eff, reinterpret, runM, sendM) import Control.Monad.Freer.Error (Error, runError) @@ -163,6 +164,10 @@ defaultCheckOptions = , _emulatorConfig = def } +-- | Modify the value assigned to the given wallet in the initial distribution. +changeInitialWalletValue :: Wallet -> (Value -> Value) -> CheckOptions -> CheckOptions +changeInitialWalletValue wallet = over (emulatorConfig . initialChainState . _Left . ix wallet) + type TestEffects = '[Reader InitialDistribution, Error EmulatorFoldErr, Writer (Doc Void)] -- | Check if the emulator trace meets the condition diff --git a/plutus-contract/src/Wallet/Emulator/LogMessages.hs b/plutus-contract/src/Wallet/Emulator/LogMessages.hs index 2ea2eb5a6d..00c67b4e35 100644 --- a/plutus-contract/src/Wallet/Emulator/LogMessages.hs +++ b/plutus-contract/src/Wallet/Emulator/LogMessages.hs @@ -62,7 +62,7 @@ instance Pretty TxBalanceMsg where AddingInputsFor vl -> "Adding inputs for" <+> pretty vl NoCollateralInputsAdded -> "No collateral inputs added" AddingCollateralInputsFor vl -> "Adding collateral inputs for" <+> pretty vl - FinishedBalancing tx -> "Finished balancing." <+> pretty (txId tx) + FinishedBalancing tx -> hang 2 $ vsep ["Finished balancing:", pretty tx] SubmittingTx tx -> "Submitting tx:" <+> pretty (txId tx) ValidationFailed p i _ e _ -> "Validation error:" <+> pretty p <+> pretty i <> colon <+> pretty e diff --git a/plutus-contract/src/Wallet/Emulator/Wallet.hs b/plutus-contract/src/Wallet/Emulator/Wallet.hs index 4f32d95d00..fc457f6398 100644 --- a/plutus-contract/src/Wallet/Emulator/Wallet.hs +++ b/plutus-contract/src/Wallet/Emulator/Wallet.hs @@ -46,8 +46,8 @@ import Ledger (Address (addressCredential), CardanoTx, ChainIndexTxOut, PaymentPrivateKey (PaymentPrivateKey, unPaymentPrivateKey), PaymentPubKey (PaymentPubKey, unPaymentPubKey), PaymentPubKeyHash (PaymentPubKeyHash, unPaymentPubKeyHash), PubKeyHash, - ScriptValidationEvent (sveScript), StakePubKey, Tx (txFee, txMint), TxIn (TxIn, txInRef), TxOut, - TxOutRef, UtxoIndex (UtxoIndex, getIndex), ValidationCtx (ValidationCtx), ValidatorHash, Value) + ScriptValidationEvent (sveScript), StakePubKey, Tx (txFee, txMint), TxIn (TxIn, txInRef), TxOutRef, + UtxoIndex (UtxoIndex, getIndex), ValidationCtx (ValidationCtx), ValidatorHash, Value) import Ledger qualified import Ledger.Ada qualified as Ada import Ledger.CardanoWallet (MockWallet, WalletNumber) @@ -380,7 +380,7 @@ handleBalanceTx utxo UnbalancedTx{unBalancedTxTx} = do pure filteredUnbalancedTxTx else do logDebug $ AddingPublicKeyOutputFor pos - pure $ addOutputs ownPaymentPubKey ownStakePubKey pos filteredUnbalancedTxTx + pure $ addOutput ownPaymentPubKey ownStakePubKey pos filteredUnbalancedTxTx tx'' <- if Value.isZero neg then do @@ -443,7 +443,7 @@ adjustBalanceWithMissingLovelace utxo ownPaymentPubKey unBalancedTx (neg, pos) = -- minted, and if the positive balance is > 0 and < 'Ledger.minAdaTxOut', -- then we adjust it to the minimum Ada. missingLovelaceFromPosValue = - if Ada.isZero (Ada.fromValue posWithMintAda) || Ada.fromValue posWithMintAda >= Ledger.minAdaTxOut + if valueIsZeroOrHasMinAda posWithMintAda then 0 else max 0 (Ledger.minAdaTxOut - Ada.fromValue posWithMintAda) -- We calculate the final negative and positive balances @@ -452,8 +452,8 @@ adjustBalanceWithMissingLovelace utxo ownPaymentPubKey unBalancedTx (neg, pos) = pure (newNeg, newPos) -addOutputs :: PaymentPubKey -> Maybe StakePubKey -> Value -> Tx -> Tx -addOutputs pk sk vl tx = tx & over Tx.outputs (pko :) where +addOutput :: PaymentPubKey -> Maybe StakePubKey -> Value -> Tx -> Tx +addOutput pk sk vl tx = tx & over Tx.outputs (pko :) where pko = Tx.pubKeyTxOut vl pk sk addCollateral @@ -486,20 +486,16 @@ addInputs mp pk sk vl tx = do (spend, change) <- selectCoin (second (view Ledger.ciTxOutValue) <$> Map.toList mp) vl let - addTxIns = + addTxIns = let ins = Set.fromList (Tx.pubKeyTxIn . fst <$> spend) in over Tx.inputs (Set.union ins) - addTxOuts = if Value.isZero change - then id - else addOutputs pk sk change + addTxOut = + if Value.isZero change + then id + else addOutput pk sk change - pure $ tx & addTxOuts & addTxIns - --- Make a transaction output from a positive value. -mkChangeOutput :: PaymentPubKey -> Maybe StakePubKey -> Value -> Maybe TxOut -mkChangeOutput pubK sk v = - if Value.isZero v then Nothing else Just (Ledger.pubKeyTxOut v pubK sk) + pure $ tx & addTxOut & addTxIns -- | Given a set of @a@s with coin values, and a target value, select a number -- of @a@ such that their total value is greater than or equal to the target. @@ -529,18 +525,20 @@ selectCoin fnds vl = -- that it's geq the target value, and if the resulting change -- is not between 0 and the minimum Ada per tx output. isTotalValueEnough totalVal = - let adaChange = Ada.fromValue totalVal PlutusTx.- Ada.fromValue vl - in vl `Value.leq` totalVal && (adaChange == 0 || adaChange >= Ledger.minAdaTxOut) + vl `Value.leq` totalVal && valueIsZeroOrHasMinAda (totalVal PlutusTx.- vl) fundsWithTotal = zip fnds (drop 1 $ scanl (<>) mempty $ fmap snd fnds) fundsToSpend = takeUntil (isTotalValueEnough . snd) fundsWithTotal totalSpent = maybe PlutusTx.zero snd $ listToMaybe $ reverse fundsToSpend change = totalSpent PlutusTx.- vl - changeAda = Ada.fromValue change -- Make sure that the change is not less than the minimum amount -- of lovelace per tx output. - in if changeAda > 0 && changeAda < Ledger.minAdaTxOut - then throwError $ WAPI.ChangeHasLessThanNAda change Ledger.minAdaTxOut - else pure (fst <$> fundsToSpend, change) + in if valueIsZeroOrHasMinAda change + then pure (fst <$> fundsToSpend, change) + else throwError $ WAPI.ChangeHasLessThanNAda change Ledger.minAdaTxOut + +-- | Check that a value is a proper TxOut value or is zero (i.e. the absence of a TxOut) +valueIsZeroOrHasMinAda :: Value -> Bool +valueIsZeroOrHasMinAda v = Value.isZero v || Ada.fromValue v >= Ledger.minAdaTxOut -- | Removes transaction outputs with empty datum and empty value. removeEmptyOutputs :: Tx -> Tx diff --git a/plutus-contract/test/Spec/Contract.hs b/plutus-contract/test/Spec/Contract.hs index 659c0eda0a..62b3d872e5 100644 --- a/plutus-contract/test/Spec/Contract.hs +++ b/plutus-contract/test/Spec/Contract.hs @@ -25,19 +25,21 @@ import Data.Map qualified as Map import Data.Void (Void) import Test.Tasty (TestTree, testGroup) -import Ledger (Address, PaymentPubKeyHash) +import Ledger (Address, PaymentPubKeyHash, Validator, validatorHash) import Ledger qualified import Ledger.Ada qualified as Ada import Ledger.Constraints qualified as Constraints -import Ledger.Scripts (datumHash) +import Ledger.Scripts (datumHash, mintingPolicyHash, unitDatum, unitRedeemer) import Ledger.Tx (getCardanoTxId) +import Ledger.Typed.Scripts.MonetaryPolicies qualified as MPS +import Ledger.Value qualified as Value import Plutus.Contract as Con import Plutus.Contract.State qualified as State import Plutus.Contract.Test (Shrinking (DoShrink, DontShrink), TracePredicate, assertAccumState, assertContractError, assertDone, assertInstanceLog, assertNoFailedTransactions, assertResumableResult, - assertUserLog, checkEmulatorFails, checkPredicateOptions, defaultCheckOptions, - endpointAvailable, minLogLevel, mockWalletPaymentPubKeyHash, not, w1, w2, waitingForSlot, - walletFundsChange, (.&&.)) + assertUserLog, changeInitialWalletValue, checkEmulatorFails, checkPredicateOptions, + defaultCheckOptions, endpointAvailable, minLogLevel, mockWalletPaymentPubKeyHash, not, w1, + w2, waitingForSlot, walletFundsChange, (.&&.)) import Plutus.Contract.Types (ResumableResult (ResumableResult, _finalState), responses) import Plutus.Contract.Util (loopM) import Plutus.Trace qualified as Trace @@ -314,8 +316,80 @@ tests = in run "mustSatisfyAnyOf [mempty] works" ( assertDone c tag (const True) "should be done" ) (void $ activateContract w1 c tag) + + , balanceTxnMinAda + , balanceTxnMinAda2 ] +balanceTxnMinAda :: TestTree +balanceTxnMinAda = + let ee = Value.singleton "ee" "ee" 1 + ff = Value.singleton "ff" "ff" 1 + options = defaultCheckOptions + & changeInitialWalletValue w1 (Value.scale 1000 (ee <> ff) <>) + vHash = validatorHash someValidator + + contract :: Contract () EmptySchema ContractError () + contract = do + let constraints1 = Constraints.mustPayToOtherScript vHash unitDatum (Value.scale 100 ff <> Ada.toValue Ledger.minAdaTxOut) + utx1 = either (error . show) id $ Constraints.mkTx @Void mempty constraints1 + submitTxConfirmed utx1 + utxo <- utxosAt someAddress + let txOutRef = head (Map.keys utxo) + constraints2 = Constraints.mustSpendScriptOutput txOutRef unitRedeemer + <> Constraints.mustPayToOtherScript vHash unitDatum (Value.scale 200 ee) + lookups2 = Constraints.unspentOutputs utxo <> Constraints.otherScript someValidator + utx2 = Constraints.adjustUnbalancedTx $ either (error . show) id $ Constraints.mkTx @Void lookups2 constraints2 + submitTxConfirmed utx2 + + trace = do + Trace.activateContractWallet w1 contract + Trace.waitNSlots 2 + + in checkPredicateOptions options "balancing doesn't create outputs with no Ada" assertNoFailedTransactions (void trace) + +balanceTxnMinAda2 :: TestTree +balanceTxnMinAda2 = + let vA n = Value.singleton "ee" "A" n + vB n = Value.singleton "ff" "B" n + mps = MPS.mkForwardingMintingPolicy vHash + vL n = Value.singleton (Value.mpsSymbol $ mintingPolicyHash mps) "L" n + options = defaultCheckOptions + & changeInitialWalletValue w1 (<> vA 1 <> vB 2) + vHash = validatorHash someValidator + payToWallet w = Constraints.mustPayToPubKey (EM.mockWalletPaymentPubKeyHash w) + mkTx lookups constraints = Constraints.adjustUnbalancedTx . either (error . show) id $ Constraints.mkTx @Void lookups constraints + + setupContract :: Contract () EmptySchema ContractError () + setupContract = do + -- Make sure there is a utxo with 1 A, 1 B, and 4 ada at w2 + submitTxConfirmed $ mkTx mempty (payToWallet w2 (vA 1 <> vB 1 <> Value.scale 2 (Ada.toValue Ledger.minAdaTxOut))) + -- Make sure there is a UTxO with 1 B and datum () at the script + submitTxConfirmed $ mkTx mempty (Constraints.mustPayToOtherScript vHash unitDatum (vB 1)) + -- utxo0 @ wallet2 = 1 A, 1 B, 4 Ada + -- utxo1 @ script = 1 B, 2 Ada + + wallet2Contract :: Contract () EmptySchema ContractError () + wallet2Contract = do + utxos <- utxosAt someAddress + let txOutRef = head (Map.keys utxos) + lookups = Constraints.unspentOutputs utxos + <> Constraints.otherScript someValidator + <> Constraints.mintingPolicy mps + constraints = Constraints.mustSpendScriptOutput txOutRef unitRedeemer -- spend utxo1 + <> Constraints.mustPayToOtherScript vHash unitDatum (vB 1) -- 2 ada and 1 B to script + <> Constraints.mustPayToOtherScript vHash (Datum $ PlutusTx.toBuiltinData (0 :: Integer)) (vB 1) -- 2 ada and 1 B to script (different datum) + <> Constraints.mustMintValue (vL 1) -- 1 L and 2 ada to wallet2 + submitTxConfirmed $ mkTx lookups constraints + + trace = do + Trace.activateContractWallet w1 setupContract + Trace.waitNSlots 10 + Trace.activateContractWallet w2 wallet2Contract + Trace.waitNSlots 10 + + in checkPredicateOptions options "balancing doesn't create outputs with no Ada (2)" assertNoFailedTransactions (void trace) + checkpointContract :: Contract () Schema ContractError () checkpointContract = void $ do checkpoint $ awaitPromise $ endpoint @"1" @Int pure .> endpoint @"2" @Int pure @@ -340,8 +414,10 @@ errorContract = do (\_ -> checkpoint $ awaitPromise $ endpoint @"2" @Int pure .> endpoint @"3" @Int pure) someAddress :: Address -someAddress = Ledger.scriptAddress $ - Ledger.mkValidatorScript $$(PlutusTx.compile [|| \(_ :: PlutusTx.BuiltinData) (_ :: PlutusTx.BuiltinData) (_ :: PlutusTx.BuiltinData) -> () ||]) +someAddress = Ledger.scriptAddress someValidator + +someValidator :: Validator +someValidator = Ledger.mkValidatorScript $$(PlutusTx.compile [|| \(_ :: PlutusTx.BuiltinData) (_ :: PlutusTx.BuiltinData) (_ :: PlutusTx.BuiltinData) -> () ||]) type Schema = Endpoint "1" Int diff --git a/plutus-ledger-constraints/src/Ledger/Constraints/OffChain.hs b/plutus-ledger-constraints/src/Ledger/Constraints/OffChain.hs index 0248626f7c..40b04040b6 100644 --- a/plutus-ledger-constraints/src/Ledger/Constraints/OffChain.hs +++ b/plutus-ledger-constraints/src/Ledger/Constraints/OffChain.hs @@ -378,11 +378,8 @@ mkTx lookups txc = mkSomeTx [SomeLookupsAndConstraints lookups txc] -- -- TODO: In the future, the minimum Ada value should be configurable. adjustUnbalancedTx :: UnbalancedTx -> UnbalancedTx -adjustUnbalancedTx = over (tx . Tx.outputs) adjustTxOuts +adjustUnbalancedTx = over (tx . Tx.outputs . traverse) adjustTxOut where - adjustTxOuts :: [TxOut] -> [TxOut] - adjustTxOuts = fmap adjustTxOut . filter (not . Value.isZero . txOutValue) - adjustTxOut :: TxOut -> TxOut adjustTxOut txOut = let missingLovelace = max 0 (Ledger.minAdaTxOut - Ada.fromValue (txOutValue txOut)) diff --git a/plutus-ledger/src/Ledger/Index.hs b/plutus-ledger/src/Ledger/Index.hs index 45e057cbb4..6cad8841ea 100644 --- a/plutus-ledger/src/Ledger/Index.hs +++ b/plutus-ledger/src/Ledger/Index.hs @@ -57,7 +57,7 @@ import Control.Monad.Except (ExceptT, MonadError (..), runExcept, runExceptT) import Control.Monad.Reader (MonadReader (..), ReaderT (..), ask) import Control.Monad.Writer (MonadWriter, Writer, runWriter, tell) import Data.Aeson (FromJSON, ToJSON) -import Data.Foldable (asum, fold, foldl', traverse_) +import Data.Foldable (asum, fold, foldl', for_, traverse_) import Data.Map qualified as Map import Data.OpenApi.Schema qualified as OpenApi import Data.Set qualified as Set @@ -140,8 +140,8 @@ data ValidationError = -- ^ The amount spent by the transaction differs from the amount consumed by it. | NegativeValue Tx -- ^ The transaction produces an output with a negative value. - | ValueContainsLessThanMinAda Tx Ada - -- ^ The transaction produces an output with a value containing less than one Ada. + | ValueContainsLessThanMinAda Tx TxOut + -- ^ The transaction produces an output with a value containing less than the minimum required Ada. | NonAdaFees Tx -- ^ The fee is not denominated entirely in Ada. | ScriptFailure ScriptError @@ -205,7 +205,7 @@ validateTransactionOffChain :: ValidationMonad m validateTransactionOffChain t = do checkValuePreserved t checkPositiveValues t - checkMinAdaInTxOutputs t minAdaTxOut + checkMinAdaInTxOutputs t checkFeeIsAda t -- see note [Minting of Ada] @@ -384,11 +384,12 @@ minAdaTxOut = Ada.lovelaceOf 2_000_000 -- Normally, the minimum is 1 Ada, but transaction outputs that have datum are -- slightly more expensive than 1 Ada. So, to be on the safe side, we set the -- minimum Ada of each transaction output to 2 Ada. -checkMinAdaInTxOutputs :: ValidationMonad m => Tx -> Ada -> m () -checkMinAdaInTxOutputs t@Tx { txOutputs } ada = - if all (\txOut -> Ada.fromValue (txOutValue txOut) >= ada) txOutputs - then pure () - else throwError $ ValueContainsLessThanMinAda t ada +checkMinAdaInTxOutputs :: ValidationMonad m => Tx -> m () +checkMinAdaInTxOutputs t@Tx { txOutputs } = + for_ txOutputs $ \txOut -> + if Ada.fromValue (txOutValue txOut) >= minAdaTxOut + then pure () + else throwError $ ValueContainsLessThanMinAda t txOut -- | Check if the fees are paid exclusively in Ada. checkFeeIsAda :: ValidationMonad m => Tx -> m () diff --git a/plutus-pab-executables/LICENSE b/plutus-pab-executables/LICENSE new file mode 100644 index 0000000000..0c8a80022e --- /dev/null +++ b/plutus-pab-executables/LICENSE @@ -0,0 +1,53 @@ +Apache License + +Version 2.0, January 2004 + +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of this License; and +You must cause any modified files to carry prominent notices stating that You changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS diff --git a/plutus-pab-executables/NOTICE b/plutus-pab-executables/NOTICE new file mode 100644 index 0000000000..9d9ec7aa57 --- /dev/null +++ b/plutus-pab-executables/NOTICE @@ -0,0 +1,14 @@ +Copyright 2020 Input Output (Hong Kong) Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/plutus-pab-executables/README.md b/plutus-pab-executables/README.md new file mode 100644 index 0000000000..b1260d17ae --- /dev/null +++ b/plutus-pab-executables/README.md @@ -0,0 +1,273 @@ +## Table of Contents + +- [Building](#building) +- [Running](#running) +- [PAB Components](#pab-components) + +## Building + +_PAB_ is a Cabal based Haskell project. Production builds are done with Nix using [haskell.nix](https://github.com/input-output-hk/haskell.nix) + +### Cabal + +``` +$ cabal build +``` + +### Nix + +``` +$ nix-build ../default.nix -A plutus-apps.haskell.packages.plutus-pab +``` + +## PAB Components +PAB contains several commands and services, which are outlined below. + +- [pab-local-cluster](#pab-local-cluster) +- [psgenerator](#psgenerator) +- [migrate](#migrate) +- [all-servers](#all-servers) +- [client-services](#client-services) +- [wallet-server](#wallet-server) +- [webserver](#webserver) +- [node-server](#node-server) +- [chain-index](#chain-index) +- [default-logging-config](#default-logging-config) + + +### pab-local-cluster + +#### Description + +Can be used to run end-to-end tests using a private local testnet. + +#### Example + +1. Build necessary components: + +``` +> cabal build plutus-pab-local-cluster +``` + +2. Get config data: + + Clone to $DIR and set the + `SHELLEY_TEST_DATA` environment variable: + + ``` + export SHELLEY_TEST_DATA=$DIR/lib/shelley/test/data/cardano-node-shelley + ``` + +3. Run the local cluster: + +``` +> cabal exec plutus-pab-local-cluster +``` + +4. Wait until the message `Starting PAB backend server on port 9080` appears. + +5. Run the integration test: + +``` +curl -H "Content-Type: application/json" -v \ + -X POST \ + -d '{"caID":{"tag":"IntegrationTest"},"caWallet":{"getWalletId":"2d4cc31a4b3116ab86bfe529d30d9c362acd0b44"}}' \ + localhost:9080/api/contract/activate +``` + +A couple of log messages appear, the last one should say something like "Tx +confirmed. Integration test complete." + + +### psgenerator + +``` +$ cabal exec plutus-pab-setup -- psgenerator generated +``` + +#### Description + +Generates the purescript bridge code. + +`psgenerator` generates only default types. If you want to generate types for your contracts you have to write your own small generator. Take a look at `plutus-pab-nami-demo-generator` for an example. It's a small executable that calls `PSGenerator.generateAPIModule` and `PSGenerator.generateWith` with a custom contract type. + +#### Source + +- [src/Plutus/PAB/Run/PSGenerator.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Run/PSGenerator.hs) + +### migrate + +``` +$ cabal exec plutus-pab-examples -- migrate --config plutus-pab.yaml.sample +``` + +#### Description + +Migrates the database in `pab-core.db` to the current schema. The database contains the state for the contract instances. + +#### Source +[Plutus.PAB.App.migrate](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/App.hs#L260) + + +### all-servers + +``` +$ cabal exec plutus-pab-examples -- all-servers --config plutus-pab.yaml.sample +``` + +#### Description + +Combines the execution of all services in the appropriate order: + +* node (mock or real) +* wallet (mock, local or remote) +* PAB webserver +* chain index + +#### Dependencies + +- plutus-pab.yaml +- sqlite database + + +#### Source + +- [src/Plutus/PAB/Run/CommandParser.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs#L155-L164) + +### client-services + +``` +$ cabal exec plutus-pab-examples -- client-services --config plutus-pab.yaml.sample +``` + +#### Description + +Starts all services *except for* the node service: + +* wallet (mock, local or remote) +* PAB webserver +* chain index + +#### Dependencies + +- plutus-pab.yaml +- sqlite database + + +#### Source + +- [src/Plutus/PAB/Run/CommandParser.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs#L166-L175) + +### wallet-server + +``` +$ cabal exec plutus-pab-examples -- wallet-server --config plutus-pab.yaml.sample +``` + +#### Description + +Plutus specific wallet implementation for managing user funds on the blockchain. Clients to this service are: + +- PAB: adding funds to transactions & signing transactions +- user: making payments + +#### Dependencies + +- plutus-pab.yaml +- node + +#### Source + +- [Cardano.Wallet.Types.WalletConfig](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/Types.hs) + +Mock wallet: +- [Cardano.Wallet.Mock.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/Mock/API.hs) +- [Cardano.Wallet.Mock.Server.main](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/Mock/Server.hs) + +Local wallet: +- [Cardano.Wallet.LocalClient](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/LocalClient.hs) + +Remote wallet: +- [Cardano.Wallet.RemoteClient](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/RemoteClient.hs) + +### webserver + +``` +$ cabal exec plutus-pab-examples -- webserver --config plutus-pab.yaml.sample +``` + +#### Description + +Serves the PAB user interface + +#### Dependencies + +- plutus-pab.yaml +- sqlite database +- pab-client + +#### Source + +- [Plutus.PAB.Webserver.API.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Webserver/API.hs#L35) +- [Plutus.PAB.Webserver.Server](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Webserver/Server.hs) + +### node-server + +``` +$ cabal exec plutus-pab-examples -- node-server --config plutus-pab.yaml.sample +``` + +#### Description + +Mock or real implementation of a Goguen node. Clients to this service are: + +- chain-index +- webserver +- wallet + +#### Dependencies + +- plutus-pab.yaml + +#### Source + +- [Cardano.Node.API.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Node/API.hs#L14) +- [Cardano.Node.Server.main](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Node/Server.hs#L56) + +### chain-index + +``` +$ cabal exec plutus-pab-examples -- chain-index --config plutus-pab.yaml.sample +``` + +#### Description + +Provides a consistent view of the current state of the blockchain including a key-value store +for datum and script hashes. Clients to this service are: + +- process-outboxes + +#### Dependencies + +- plutus-pab.yaml +- node + +#### Source + +- [Plutus.ChainIndex.Api.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-chain-index/src/Plutus/ChainIndex/Api.hs#L106) +- [Cardano.ChainIndex.Server.main](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/ChainIndex/Server.hs#L37) + +### default-logging-config + +``` +$ cabal exec plutus-pab-setup -- default-logging-config +``` + +#### Description + +Prints the default logging configuration to STDOUT + +#### Source + +- [app/CommandParser.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/app/CommandParser.hs#L59) +- [app/Main.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/app/Main.hs#L28) diff --git a/plutus-pab/app/CommandParser.hs b/plutus-pab-executables/app/CommandParser.hs similarity index 81% rename from plutus-pab/app/CommandParser.hs rename to plutus-pab-executables/app/CommandParser.hs index 20a01f9c84..c70b44b401 100644 --- a/plutus-pab/app/CommandParser.hs +++ b/plutus-pab-executables/app/CommandParser.hs @@ -1,5 +1,7 @@ {-# LANGUAGE ApplicativeDo #-} {-# LANGUAGE DataKinds #-} +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingVia #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} @@ -8,13 +10,24 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} -module CommandParser (parseOptions, AppOpts(..)) where +module CommandParser (parseOptions, AppOpts(..), NoConfigCommand(..)) where import Cardano.BM.Data.Severity (Severity (..)) +import Data.Aeson qualified as JSON +import GHC.Generics (Generic) import Options.Applicative (CommandFields, Mod, Parser, argument, command, customExecParser, disambiguate, flag, fullDesc, help, helper, idm, info, long, metavar, option, prefs, progDesc, short, showHelpOnEmpty, showHelpOnError, str, subparser, value) -import Plutus.PAB.Run.Command (NoConfigCommand (..)) + +data NoConfigCommand = + PSGenerator -- ^ Generate purescript bridge code + { psGenOutputDir :: !FilePath -- ^ Path to write generated code to + } + | WriteDefaultConfig -- ^ Write default logging configuration + { outputFile :: !FilePath -- ^ Path to write configuration to + } + deriving stock (Show, Eq, Generic) + deriving anyclass JSON.ToJSON data AppOpts = AppOpts { minLogLevel :: Maybe Severity , logConfigPath :: Maybe FilePath diff --git a/plutus-pab/app/Main.hs b/plutus-pab-executables/app/Main.hs similarity index 60% rename from plutus-pab/app/Main.hs rename to plutus-pab-executables/app/Main.hs index 61c13c9af7..8c678d3623 100644 --- a/plutus-pab/app/Main.hs +++ b/plutus-pab-executables/app/Main.hs @@ -3,6 +3,7 @@ {-# LANGUAGE DerivingVia #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} @@ -12,14 +13,29 @@ module Main ( main ) where -import CommandParser (AppOpts (..), parseOptions) -import Plutus.PAB.Run.Cli (runNoConfigCommand) +import CommandParser (AppOpts (..), NoConfigCommand (..), parseOptions) +import Cardano.BM.Configuration.Model qualified as CM import Control.Monad.Logger (logErrorN, runStdoutLoggingT) import Data.Text.Extras (tshow) +import Plutus.PAB.Monitoring.Monitoring qualified as LM +import Plutus.PAB.Run.PSGenerator qualified as PSGenerator import Plutus.PAB.Types (PABError) + import System.Exit (ExitCode (ExitFailure), exitSuccess, exitWith) +runNoConfigCommand :: + NoConfigCommand + -> IO () +runNoConfigCommand = \case + + -- Generate PureScript bridge code + PSGenerator {psGenOutputDir} -> do + PSGenerator.generateDefault psGenOutputDir + + -- Get default logging configuration + WriteDefaultConfig{outputFile} -> LM.defaultConfig >>= flip CM.exportConfiguration outputFile + main :: IO () main = do AppOpts { cmd } <- parseOptions diff --git a/plutus-pab/demo/pab-nami/README.md b/plutus-pab-executables/demo/pab-nami/README.md similarity index 86% rename from plutus-pab/demo/pab-nami/README.md rename to plutus-pab-executables/demo/pab-nami/README.md index 67cfdc0b2e..016bba5c15 100644 --- a/plutus-pab/demo/pab-nami/README.md +++ b/plutus-pab-executables/demo/pab-nami/README.md @@ -17,12 +17,12 @@ In this demo, we want to showcase a very minimal example of how to integrate the The instructions were tested inside the `plutus-apps`'s `nix-shell`. -The demo contains two parts: the PAB application in `plutus-pab/demo/pab-nami/pab` and the frontend application in `plutus-pab/demo/pab-nami/client` which interacts with the PAB and the Nami wallet. +The demo contains two parts: the PAB application in `plutus-pab-executables/demo/pab-nami/pab` and the frontend application in `plutus-pab-executables/demo/pab-nami/client` which interacts with the PAB and the Nami wallet. The first thing to do is to go to the frontend application's directory: ``` -$ cd plutus-pab/demo/pab-nami/client +$ cd plutus-pab-executables/demo/pab-nami/client ``` ### Setup Nami wallet @@ -44,10 +44,10 @@ You have two options: # Go to the root folder of the `plutus-apps` repository # 'Migrate' command to initialise the PAB database. -$ cabal run plutus-pab:exe:plutus-pab-nami-demo -- migrate --config plutus-pab/demo/pab-nami/pab/plutus-pab.yaml +$ cabal run plutus-pab-executables:exe:plutus-pab-nami-demo -- migrate --config plutus-pab-executables/demo/pab-nami/pab/plutus-pab.yaml # Run the PAB webserver -$ cabal run plutus-pab:exe:plutus-pab-nami-demo -- webserver --config plutus-pab/demo/pab-nami/pab/plutus-pab.yaml +$ cabal run plutus-pab-executables:exe:plutus-pab-nami-demo -- webserver --config plutus-pab-executables/demo/pab-nami/pab/plutus-pab.yaml ``` @@ -64,7 +64,7 @@ From a command line interface, make sure you're in the root folder of the `plutu From another command line interface, run the following command to launch the frontend application: ``` -# Go the frontend application's directory (plutus-pab/demo/pab-nami/client) +# Go the frontend application's directory (plutus-pab-executables/demo/pab-nami/client) # This is a temporary measure for using function in Nami's non-public api. # This will be removed in the next iterations. diff --git a/plutus-pab/demo/pab-nami/client/.gitignore b/plutus-pab-executables/demo/pab-nami/client/.gitignore similarity index 100% rename from plutus-pab/demo/pab-nami/client/.gitignore rename to plutus-pab-executables/demo/pab-nami/client/.gitignore diff --git a/plutus-pab/demo/pab-nami/client/default.nix b/plutus-pab-executables/demo/pab-nami/client/default.nix similarity index 74% rename from plutus-pab/demo/pab-nami/client/default.nix rename to plutus-pab-executables/demo/pab-nami/client/default.nix index 1b556e58cc..6e5248a2aa 100644 --- a/plutus-pab/demo/pab-nami/client/default.nix +++ b/plutus-pab-executables/demo/pab-nami/client/default.nix @@ -1,22 +1,22 @@ { pkgs, gitignore-nix, haskell, webCommon, buildPursPackage, buildNodeModules, filterNpm }: let - pab-nami-demo-invoker = haskell.packages.plutus-pab.components.exes.plutus-pab-nami-demo; + pab-nami-demo-invoker = haskell.packages.plutus-pab-executables.components.exes.plutus-pab-nami-demo; + pab-nami-demo-generator = haskell.packages.plutus-pab-executables.components.exes.plutus-pab-nami-demo-generator; - pab-setup-invoker = haskell.packages.plutus-pab.components.exes.plutus-pab-setup; + pab-setup-invoker = haskell.packages.plutus-pab-executables.components.exes.plutus-pab-setup; # TODO: Use the PS generator in the demo app generated-purescript = pkgs.runCommand "pab-nami-demo-purescript" { } '' mkdir $out ${pab-setup-invoker}/bin/plutus-pab-setup psgenerator $out - ln -s ${../pab/plutus-pab.yaml} plutus-pab.yaml - ${pab-nami-demo-invoker}/bin/plutus-pab-nami-demo --config ../pab/plutus-pab.yaml psapigenerator $out + ${pab-nami-demo-generator}/bin/plutus-pab-nami-demo-generator --output-dir $out ''; generate-purescript = pkgs.writeShellScriptBin "pab-nami-demo-generate-purs" '' generatedDir=./generated rm -rf $generatedDir $(nix-build ../../../../default.nix -A pab-nami-demo.pab-setup-invoker)/bin/plutus-pab-setup psgenerator $generatedDir - $(nix-build ../../../../default.nix -A pab-nami-demo.pab-nami-demo-invoker)/bin/plutus-pab-nami-demo --config ../pab/plutus-pab.yaml psapigenerator $generatedDir + $(nix-build ../../../../default.nix -A pab-nami-demo.pab-nami-demo-generator)/bin/plutus-pab-nami-demo-generator --output-dir $generatedDir ''; start-backend = pkgs.writeShellScriptBin "pab-nami-demo-server" '' @@ -53,5 +53,5 @@ let }); in { - inherit client pab-nami-demo-invoker pab-setup-invoker generate-purescript generated-purescript start-backend; + inherit client pab-nami-demo-invoker pab-nami-demo-generator pab-setup-invoker generate-purescript generated-purescript start-backend; } diff --git a/plutus-pab/demo/pab-nami/client/entry.js b/plutus-pab-executables/demo/pab-nami/client/entry.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/entry.js rename to plutus-pab-executables/demo/pab-nami/client/entry.js diff --git a/plutus-pab/demo/pab-nami/client/index.html b/plutus-pab-executables/demo/pab-nami/client/index.html similarity index 100% rename from plutus-pab/demo/pab-nami/client/index.html rename to plutus-pab-executables/demo/pab-nami/client/index.html diff --git a/plutus-pab/demo/pab-nami/client/package-lock.json b/plutus-pab-executables/demo/pab-nami/client/package-lock.json similarity index 100% rename from plutus-pab/demo/pab-nami/client/package-lock.json rename to plutus-pab-executables/demo/pab-nami/client/package-lock.json diff --git a/plutus-pab/demo/pab-nami/client/package.json b/plutus-pab-executables/demo/pab-nami/client/package.json similarity index 100% rename from plutus-pab/demo/pab-nami/client/package.json rename to plutus-pab-executables/demo/pab-nami/client/package.json diff --git a/plutus-pab/demo/pab-nami/client/spago-packages.nix b/plutus-pab-executables/demo/pab-nami/client/spago-packages.nix similarity index 100% rename from plutus-pab/demo/pab-nami/client/spago-packages.nix rename to plutus-pab-executables/demo/pab-nami/client/spago-packages.nix diff --git a/plutus-pab/demo/pab-nami/client/spago.dhall b/plutus-pab-executables/demo/pab-nami/client/spago.dhall similarity index 100% rename from plutus-pab/demo/pab-nami/client/spago.dhall rename to plutus-pab-executables/demo/pab-nami/client/spago.dhall diff --git a/plutus-pab/demo/pab-nami/client/src/AppM.purs b/plutus-pab-executables/demo/pab-nami/client/src/AppM.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/AppM.purs rename to plutus-pab-executables/demo/pab-nami/client/src/AppM.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Cardano/Wallet/Nami.js b/plutus-pab-executables/demo/pab-nami/client/src/Cardano/Wallet/Nami.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Cardano/Wallet/Nami.js rename to plutus-pab-executables/demo/pab-nami/client/src/Cardano/Wallet/Nami.js diff --git a/plutus-pab/demo/pab-nami/client/src/Cardano/Wallet/Nami.purs b/plutus-pab-executables/demo/pab-nami/client/src/Cardano/Wallet/Nami.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Cardano/Wallet/Nami.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Cardano/Wallet/Nami.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/Address.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Address.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/Address.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Address.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/Address.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Address.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/Address.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Address.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/BaseAddress.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/BaseAddress.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/BaseAddress.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/BaseAddress.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/BaseAddress.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/BaseAddress.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/BaseAddress.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/BaseAddress.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Ed25519KeyHash.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/StakeCredential.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/StakeCredential.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/StakeCredential.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/StakeCredential.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/StakeCredential.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/StakeCredential.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/StakeCredential.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/StakeCredential.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/Transaction.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Transaction.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/Transaction.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Transaction.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/Transaction.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Transaction.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/Transaction.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/Transaction.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionBody.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionBody.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionBody.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionBody.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionBody.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionBody.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionBody.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionBody.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionOutputs.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionUnspentOutput.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.js b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.js rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.js diff --git a/plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.purs b/plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Data/Cardano/TransactionWitnessSet.purs diff --git a/plutus-pab/demo/pab-nami/client/src/Main.purs b/plutus-pab-executables/demo/pab-nami/client/src/Main.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/Main.purs rename to plutus-pab-executables/demo/pab-nami/client/src/Main.purs diff --git a/plutus-pab/demo/pab-nami/client/src/PaymentForm.purs b/plutus-pab-executables/demo/pab-nami/client/src/PaymentForm.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/src/PaymentForm.purs rename to plutus-pab-executables/demo/pab-nami/client/src/PaymentForm.purs diff --git a/plutus-pab/demo/pab-nami/client/static/main.css b/plutus-pab-executables/demo/pab-nami/client/static/main.css similarity index 100% rename from plutus-pab/demo/pab-nami/client/static/main.css rename to plutus-pab-executables/demo/pab-nami/client/static/main.css diff --git a/plutus-pab/demo/pab-nami/client/test/Main.purs b/plutus-pab-executables/demo/pab-nami/client/test/Main.purs similarity index 100% rename from plutus-pab/demo/pab-nami/client/test/Main.purs rename to plutus-pab-executables/demo/pab-nami/client/test/Main.purs diff --git a/plutus-pab/demo/pab-nami/client/webpack.config.js b/plutus-pab-executables/demo/pab-nami/client/webpack.config.js similarity index 100% rename from plutus-pab/demo/pab-nami/client/webpack.config.js rename to plutus-pab-executables/demo/pab-nami/client/webpack.config.js diff --git a/plutus-pab/demo/pab-nami/pab/app/DemoContract.hs b/plutus-pab-executables/demo/pab-nami/pab/app/DemoContract.hs similarity index 100% rename from plutus-pab/demo/pab-nami/pab/app/DemoContract.hs rename to plutus-pab-executables/demo/pab-nami/pab/app/DemoContract.hs diff --git a/plutus-pab-executables/demo/pab-nami/pab/app/Generator.hs b/plutus-pab-executables/demo/pab-nami/pab/app/Generator.hs new file mode 100644 index 0000000000..88d5470211 --- /dev/null +++ b/plutus-pab-executables/demo/pab-nami/pab/app/Generator.hs @@ -0,0 +1,28 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeApplications #-} + +module Main + ( main + ) where + +import Data.Proxy +import DemoContract (DemoContract) +import Options.Applicative +import Plutus.PAB.Run.PSGenerator qualified as PSGenerator + +parseOptions :: IO FilePath +parseOptions = customExecParser + (prefs $ disambiguate <> showHelpOnEmpty <> showHelpOnError) + (info (helper <*> psGenOutputDirParser) idm) + +psGenOutputDirParser :: Parser FilePath +psGenOutputDirParser = option str + (long "output-dir" <> + metavar "OUTPUT_DIR" <> + help "Output directory to write PureScript files to.") + +main :: IO () +main = do + psGenOutputDir <- parseOptions + PSGenerator.generateAPIModule (Proxy :: Proxy DemoContract) psGenOutputDir + PSGenerator.generateWith @DemoContract psGenOutputDir diff --git a/plutus-pab/demo/pab-nami/pab/app/Main.hs b/plutus-pab-executables/demo/pab-nami/pab/app/Main.hs similarity index 100% rename from plutus-pab/demo/pab-nami/pab/app/Main.hs rename to plutus-pab-executables/demo/pab-nami/pab/app/Main.hs diff --git a/plutus-pab/demo/pab-nami/pab/plutus-pab.yaml b/plutus-pab-executables/demo/pab-nami/pab/plutus-pab.yaml similarity index 100% rename from plutus-pab/demo/pab-nami/pab/plutus-pab.yaml rename to plutus-pab-executables/demo/pab-nami/pab/plutus-pab.yaml diff --git a/plutus-pab/examples/ContractExample.hs b/plutus-pab-executables/examples/ContractExample.hs similarity index 80% rename from plutus-pab/examples/ContractExample.hs rename to plutus-pab-executables/examples/ContractExample.hs index d047b645e4..225fae075c 100644 --- a/plutus-pab/examples/ContractExample.hs +++ b/plutus-pab-executables/examples/ContractExample.hs @@ -11,7 +11,7 @@ {-# LANGUAGE TypeFamilies #-} module ContractExample( - ExampleContracts(..) + ContractExample(..) , handlers ) where @@ -46,36 +46,36 @@ import Plutus.PAB.Simulator (SimulatorEffectHandlers) import Plutus.PAB.Simulator qualified as Simulator import Schema (FormSchema) -data ExampleContracts = UniswapInit - | UniswapOwner - | UniswapUser Contracts.Uniswap.Uniswap - | GameStateMachine - | PayToWallet - | AtomicSwap - | Currency - | PrismMirror - | PrismUnlockExchange - | PrismUnlockSto - | PingPong - | PingPongAuto -- ^ Variant of 'PingPong' that starts the initialise phase automatically - | WaitForTx TxId - | IntegrationTest -- ^ Contract that runs a number of transactions (no user input) +data ContractExample = UniswapInit + | UniswapOwner + | UniswapUser Contracts.Uniswap.Uniswap + | GameStateMachine + | PayToWallet + | AtomicSwap + | Currency + | PrismMirror + | PrismUnlockExchange + | PrismUnlockSto + | PingPong + | PingPongAuto -- ^ Variant of 'PingPong' that starts the initialise phase automatically + | WaitForTx TxId + | IntegrationTest -- ^ Contract that runs a number of transactions (no user input) deriving (Eq, Ord, Show, Generic) deriving anyclass (FromJSON, ToJSON, OpenApi.ToSchema) -instance Pretty ExampleContracts where +instance Pretty ContractExample where pretty = viaShow -instance HasPSTypes ExampleContracts where +instance HasPSTypes ContractExample where psTypes = - [ equal . genericShow . argonaut $ mkSumType @ExampleContracts + [ equal . genericShow . argonaut $ mkSumType @ContractExample -- These types come from the Uniswap contract and need to be available in PS , equal . genericShow . argonaut $ mkSumType @Uniswap , equal . genericShow . argonaut $ mkSumType @(Coin A) , order . equal . genericShow $ argonaut $ mkSumType @U ] -instance HasDefinitions ExampleContracts where +instance HasDefinitions ContractExample where getDefinitions = [ UniswapInit , UniswapOwner , GameStateMachine @@ -89,11 +89,11 @@ instance HasDefinitions ExampleContracts where , PingPongAuto , IntegrationTest ] - getContract = getExampleContracts - getSchema = getExampleContractsSchema + getContract = getContractExample + getSchema = getContractExampleSchema -getExampleContractsSchema :: ExampleContracts -> [FunctionSchema FormSchema] -getExampleContractsSchema = \case +getContractExampleSchema :: ContractExample -> [FunctionSchema FormSchema] +getContractExampleSchema = \case UniswapInit -> Builtin.endpointsToSchemas @Empty UniswapUser _ -> Builtin.endpointsToSchemas @Contracts.Uniswap.UniswapUserSchema UniswapOwner -> Builtin.endpointsToSchemas @Contracts.Uniswap.UniswapOwnerSchema @@ -109,8 +109,8 @@ getExampleContractsSchema = \case WaitForTx{} -> Builtin.endpointsToSchemas @Empty IntegrationTest{} -> Builtin.endpointsToSchemas @Empty -getExampleContracts :: ExampleContracts -> SomeBuiltin -getExampleContracts = \case +getContractExample :: ContractExample -> SomeBuiltin +getContractExample = \case UniswapInit -> SomeBuiltin Contracts.Uniswap.setupTokens UniswapUser us -> SomeBuiltin $ Contracts.Uniswap.userEndpoints us UniswapOwner -> SomeBuiltin Contracts.Uniswap.ownerEndpoint @@ -126,7 +126,7 @@ getExampleContracts = \case WaitForTx txi -> SomeBuiltin (Contracts.WaitForTx.waitForTx txi) IntegrationTest -> SomeBuiltin Contracts.IntegrationTest.run -handlers :: SimulatorEffectHandlers (Builtin ExampleContracts) +handlers :: SimulatorEffectHandlers (Builtin ContractExample) handlers = Simulator.mkSimulatorHandlers def def $ interpret (contractHandler Builtin.handleBuiltin) diff --git a/plutus-pab/examples/ContractExample/AtomicSwap.hs b/plutus-pab-executables/examples/ContractExample/AtomicSwap.hs similarity index 100% rename from plutus-pab/examples/ContractExample/AtomicSwap.hs rename to plutus-pab-executables/examples/ContractExample/AtomicSwap.hs diff --git a/plutus-pab/examples/ContractExample/IntegrationTest.hs b/plutus-pab-executables/examples/ContractExample/IntegrationTest.hs similarity index 100% rename from plutus-pab/examples/ContractExample/IntegrationTest.hs rename to plutus-pab-executables/examples/ContractExample/IntegrationTest.hs diff --git a/plutus-pab/examples/ContractExample/PayToWallet.hs b/plutus-pab-executables/examples/ContractExample/PayToWallet.hs similarity index 100% rename from plutus-pab/examples/ContractExample/PayToWallet.hs rename to plutus-pab-executables/examples/ContractExample/PayToWallet.hs diff --git a/plutus-pab/examples/ContractExample/WaitForTx.hs b/plutus-pab-executables/examples/ContractExample/WaitForTx.hs similarity index 100% rename from plutus-pab/examples/ContractExample/WaitForTx.hs rename to plutus-pab-executables/examples/ContractExample/WaitForTx.hs diff --git a/plutus-pab/examples/Main.hs b/plutus-pab-executables/examples/Main.hs similarity index 66% rename from plutus-pab/examples/Main.hs rename to plutus-pab-executables/examples/Main.hs index 7660fa2db0..c9a57330cc 100644 --- a/plutus-pab/examples/Main.hs +++ b/plutus-pab-executables/examples/Main.hs @@ -4,10 +4,10 @@ module Main ( main ) where -import ContractExample (ExampleContracts) +import ContractExample (ContractExample) import Plutus.PAB.Effects.Contract.Builtin qualified as Builtin import Plutus.PAB.Run (runWith) main :: IO () main = do - runWith (Builtin.handleBuiltin @ExampleContracts) + runWith (Builtin.handleBuiltin @ContractExample) diff --git a/plutus-pab/examples/README.md b/plutus-pab-executables/examples/README.md similarity index 100% rename from plutus-pab/examples/README.md rename to plutus-pab-executables/examples/README.md diff --git a/plutus-pab/examples/uniswap/Main.hs b/plutus-pab-executables/examples/uniswap/Main.hs similarity index 100% rename from plutus-pab/examples/uniswap/Main.hs rename to plutus-pab-executables/examples/uniswap/Main.hs diff --git a/plutus-pab-executables/local-cluster/Main.hs b/plutus-pab-executables/local-cluster/Main.hs new file mode 100644 index 0000000000..97aca1b5e5 --- /dev/null +++ b/plutus-pab-executables/local-cluster/Main.hs @@ -0,0 +1,10 @@ +{-# LANGUAGE TypeApplications #-} +-- | Start a local cluster of cardano nodes and PAB(s) +module Main where + +import ContractExample (ContractExample) +import Plutus.PAB.Effects.Contract.Builtin (handleBuiltin) +import Plutus.PAB.LocalCluster.Run (runWith) + +main :: IO () +main = runWith @ContractExample handleBuiltin diff --git a/plutus-pab-executables/plutus-pab-executables.cabal b/plutus-pab-executables/plutus-pab-executables.cabal new file mode 100644 index 0000000000..bbcf1aecd8 --- /dev/null +++ b/plutus-pab-executables/plutus-pab-executables.cabal @@ -0,0 +1,547 @@ +cabal-version: 3.0 +name: plutus-pab-executables +version: 0.1.0.0 +license: Apache-2.0 +license-files: + LICENSE + NOTICE + +maintainer: jann.mueller@iohk.io +author: Jann Müller +homepage: https://github.com/iohk/plutus#readme +bug-reports: https://github.com/iohk/plutus/issues +description: + Please see the README on GitHub at + +build-type: Simple + +source-repository head + type: git + location: https://github.com/input-output-hk/plutus-apps + +flag defer-plugin-errors + description: + Defer errors from the plugin, useful for things like Haddock that can't handle it. + + default: False + manual: True + +common lang + default-language: Haskell2010 + default-extensions: + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveLift + DeriveTraversable + ExplicitForAll + GeneralizedNewtypeDeriving + ImportQualifiedPost + ScopedTypeVariables + StandaloneDeriving + + ghc-options: + -Wall -Wnoncanonical-monad-instances -Wincomplete-uni-patterns + -Wincomplete-record-updates -Wredundant-constraints -Widentities + -fobject-code -fno-ignore-interface-pragmas + -fno-omit-interface-pragmas + + -- See Plutus Tx readme + if flag(defer-plugin-errors) + ghc-options: -fplugin-opt PlutusTx.Plugin:defer-errors + +library + import: lang + ghc-options: + -Wunused-packages + + exposed-modules: + Plutus.PAB.Run.PSGenerator + hs-source-dirs: src + build-depends: + , freer-extras + , playground-common + , plutus-contract + , plutus-pab + + build-depends: + base >=4.7 && <5, + lens -any, + playground-common -any, + purescript-bridge -any, + servant -any, + servant-purescript -any, + servant-server -any, + text -any, + +executable plutus-pab-setup + main-is: Main.hs + hs-source-dirs: app + other-modules: + CommandParser + + default-language: Haskell2010 + default-extensions: ImportQualifiedPost + ghc-options: + -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat + -Wincomplete-uni-patterns -Wincomplete-record-updates + -Wno-missing-import-lists -Wredundant-constraints -O0 + + build-depends: + aeson -any, + aeson-pretty -any, + async -any, + base >=4.9 && <5, + bytestring -any, + containers -any, + contra-tracer -any, + filepath -any, + freer-extras -any, + freer-simple -any, + iohk-monitoring -any, + lens -any, + lobemo-backend-ekg -any, + monad-logger -any, + mtl -any, + optparse-applicative -any, + playground-common -any, + plutus-contract -any, + plutus-ledger -any, + plutus-pab -any, + plutus-pab-executables -any, + plutus-use-cases -any, + prettyprinter >=1.1.0.1, + purescript-bridge -any, + row-types -any, + servant-client -any, + servant-purescript -any, + servant-server -any, + text -any, + time-units -any, + unliftio-core -any, + uuid -any, + yaml -any, + +-- TODO: This needs to be moved to plutus-use-cases once plutus-pab doesn't +-- depend on plutus-use-cases anymore. +executable plutus-pab-examples + main-is: Main.hs + hs-source-dirs: examples + other-modules: + ContractExample.AtomicSwap + ContractExample.IntegrationTest + ContractExample.PayToWallet + ContractExample.WaitForTx + ContractExample + default-language: Haskell2010 + default-extensions: ImportQualifiedPost + ghc-options: + -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat + -Wincomplete-uni-patterns -Wincomplete-record-updates + -Wno-missing-import-lists -Wredundant-constraints -O0 + + build-depends: + , aeson + , base >=4.9 && <5 + , containers + , data-default + , freer-extras + , freer-simple + , lens + , playground-common + , plutus-contract + , plutus-ledger + , plutus-ledger-constraints + , plutus-pab + , plutus-pab-executables + , plutus-use-cases + , prettyprinter + , purescript-bridge + , row-types + , servant-purescript + , text + , openapi3 + +-- TODO: This needs to be moved to plutus-use-cases once plutus-pab doesn't +-- depend on plutus-use-cases anymore. +executable plutus-uniswap + main-is: Main.hs + hs-source-dirs: examples/uniswap + other-modules: + default-language: Haskell2010 + default-extensions: ImportQualifiedPost + ghc-options: + -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat + -Wincomplete-uni-patterns -Wincomplete-record-updates + -Wno-missing-import-lists -Wredundant-constraints -O0 + + build-depends: + , aeson + , base >=4.9 && <5 + , containers + , data-default -any + , freer-extras + , freer-simple + , plutus-contract + , plutus-ledger + , plutus-pab + , plutus-use-cases + , prettyprinter + , text + , openapi3 + +-- TODO: This needs to be moved to plutus-use-cases once plutus-pab doesn't +-- depend on plutus-use-cases anymore. +executable plutus-pab-local-cluster + main-is: Main.hs + hs-source-dirs: + local-cluster + examples + other-modules: + ContractExample + ContractExample.AtomicSwap + ContractExample.IntegrationTest + ContractExample.PayToWallet + ContractExample.WaitForTx + default-language: Haskell2010 + default-extensions: ImportQualifiedPost + ghc-options: + -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat + -Wincomplete-uni-patterns -Wincomplete-record-updates + -Wno-missing-import-lists -Wredundant-constraints -O0 + + build-depends: + , playground-common + , plutus-chain-index + , plutus-chain-index-core + , plutus-contract + , plutus-ledger + , plutus-ledger-api + , plutus-ledger-constraints + , plutus-pab + , plutus-pab-executables + , plutus-use-cases + + build-depends: + , aeson + , base >=4.9 && <5 + , containers + , directory + , filepath + , text + , text-class + , beam-sqlite + , sqlite-simple + , freer-extras + , beam-migrate + , cardano-wallet + , cardano-wallet-cli + , cardano-wallet-launcher + , cardano-wallet-core + , cardano-wallet-core-integration + , iohk-monitoring + , lobemo-backend-ekg + , contra-tracer + , cardano-api + , lens + , prettyprinter + , freer-simple + , data-default + , row-types + , purescript-bridge + , openapi3 + , async + , servant-client + , http-client + , servant-client-core + , cardano-addresses + +executable plutus-pab-test-psgenerator + default-language: Haskell2010 + default-extensions: ImportQualifiedPost + hs-source-dirs: + test-psgenerator + test/full + examples + + main-is: TestPSGenerator.hs + other-modules: + ContractExample.AtomicSwap + ContractExample.IntegrationTest + ContractExample.PayToWallet + Plutus.PAB.Effects.Contract.ContractTest + Plutus.PAB.Simulator.Test + + -- TODO plutus-use-cases dep needs to be removed + build-depends: + QuickCheck -any, + aeson -any, + aeson-pretty -any, + base >=4.9 && <5, + bytestring -any, + containers -any, + data-default -any, + freer-extras -any, + freer-simple -any, + http-client -any, + http-client-tls -any, + lens -any, + monad-logger -any, + mtl -any, + plutus-contract -any, + plutus-pab, + plutus-pab-executables -any, + plutus-use-cases -any, + plutus-ledger -any, + plutus-ledger-constraints -any, + quickcheck-instances -any, + servant-client -any, + tasty -any, + smallcheck -any, + tasty-smallcheck -any, + tasty-quickcheck -any, + text -any, + transformers -any, + prettyprinter -any, + row-types -any, + plutus-tx -any, + playground-common -any, + servant-purescript -any, + purescript-bridge -any, + filepath -any + +test-suite plutus-pab-test-full + default-language: Haskell2010 + default-extensions: ImportQualifiedPost + hs-source-dirs: + test/full + examples + + type: exitcode-stdio-1.0 + main-is: Spec.hs + other-modules: + ContractExample + ContractExample.WaitForTx + ContractExample.AtomicSwap + ContractExample.IntegrationTest + ContractExample.PayToWallet + Plutus.PAB.CoreSpec + Plutus.PAB.CliSpec + Plutus.PAB.Effects.Contract.BuiltinSpec + Plutus.PAB.Effects.Contract.ContractTest + Plutus.PAB.Simulator.Test + + -- TODO plutus-use-cases dep needs to be removed + build-depends: + QuickCheck -any, + aeson -any, + aeson-pretty -any, + base >=4.9 && <5, + bytestring -any, + containers -any, + data-default -any, + freer-extras -any, + freer-simple -any, + http-client -any, + http-client-tls -any, + lens -any, + monad-logger -any, + mtl -any, + plutus-chain-index-core -any, + plutus-contract -any, + plutus-pab, + plutus-pab-executables, + plutus-use-cases -any, + plutus-ledger -any, + plutus-ledger-constraints -any, + quickcheck-instances -any, + servant-client -any, + tasty -any, + tasty-hunit -any, + smallcheck -any, + stm -any, + tasty-smallcheck -any, + tasty-quickcheck -any, + text -any, + transformers -any, + prettyprinter -any, + row-types -any, + plutus-tx -any, + playground-common -any, + yaml -any, + iohk-monitoring -any, + servant-server -any, + purescript-bridge -any, + async -any, + servant-client -any, + uuid -any, + openapi3, + +test-suite plutus-pab-test-full-long-running + default-language: Haskell2010 + default-extensions: ImportQualifiedPost + hs-source-dirs: + test/full + examples + + type: exitcode-stdio-1.0 + main-is: SpecLongRunning.hs + other-modules: + ContractExample + ContractExample.WaitForTx + ContractExample.AtomicSwap + ContractExample.IntegrationTest + ContractExample.PayToWallet + Plutus.PAB.CliSpec + Plutus.PAB.Effects.Contract.ContractTest + Plutus.PAB.Simulator.Test + + -- TODO plutus-use-cases dep needs to be removed + build-depends: + QuickCheck -any, + aeson -any, + aeson-pretty -any, + base >=4.9 && <5, + bytestring -any, + containers -any, + data-default -any, + freer-extras -any, + freer-simple -any, + http-client -any, + http-client-tls -any, + lens -any, + monad-logger -any, + mtl -any, + plutus-contract -any, + plutus-chain-index-core -any, + plutus-pab, + plutus-pab-executables -any, + plutus-use-cases -any, + plutus-ledger -any, + plutus-ledger-constraints -any, + quickcheck-instances -any, + servant-client -any, + tasty -any, + tasty-hunit -any, + smallcheck -any, + tasty-smallcheck -any, + tasty-quickcheck -any, + text -any, + transformers -any, + prettyprinter -any, + row-types -any, + plutus-tx -any, + playground-common -any, + yaml -any, + iohk-monitoring -any, + servant-server -any, + purescript-bridge -any, + async -any, + servant-client -any, + uuid -any, + openapi3 -any, + +executable tx-inject + import: lang + main-is: Main.hs + hs-source-dirs: tx-inject + other-modules: + TxInject.RandomTx + default-language: Haskell2010 + build-depends: + base >=4.9 && <5, + plutus-pab, + containers -any, + clock -any, + lens -any, + mwc-random -any, + optparse-applicative -any, + plutus-contract -any, + plutus-ledger -any, + pretty-simple -any, + rate-limit -any, + signal -any, + stm -any, + text -any, + time-units -any, + yaml -any, + hedgehog -any, + primitive -any + +executable sync-client + import: lang + main-is: Main.hs + hs-source-dirs: sync-client + default-language: Haskell2010 + build-depends: + base >=4.9 && <5, + cardano-api -any, + cardano-slotting -any, + contra-tracer -any, + either -any, + optparse-applicative -any, + plutus-chain-index-core, + plutus-ledger, + plutus-pab, + text + +executable plutus-pab-nami-demo + import: lang + main-is: Main.hs + hs-source-dirs: demo/pab-nami/pab/app + other-modules: + DemoContract + ghc-options: + -threaded + build-depends: + aeson -any, + async -any, + base >= 4.9 && < 5, + cardano-api -any, + data-default -any, + filepath -any, + freer-extras -any, + freer-simple -any, + openapi3 -any, + plutus-chain-index -any, + plutus-contract -any, + plutus-pab -any, + plutus-pab-executables -any, + playground-common -any, + prettyprinter -any, + purescript-bridge -any, + plutus-ledger -any, + plutus-ledger-constraints -any, + row-types -any, + text -any, + +executable plutus-pab-nami-demo-generator + import: lang + main-is: Generator.hs + hs-source-dirs: demo/pab-nami/pab/app + other-modules: + DemoContract + ghc-options: + -threaded + build-depends: + aeson -any, + async -any, + base >= 4.9 && < 5, + cardano-api -any, + data-default -any, + filepath -any, + freer-extras -any, + freer-simple -any, + openapi3 -any, + optparse-applicative -any, + plutus-chain-index -any, + plutus-contract -any, + plutus-pab -any, + plutus-pab-executables -any, + playground-common -any, + prettyprinter -any, + purescript-bridge -any, + plutus-ledger -any, + plutus-ledger-constraints -any, + row-types -any, + text -any, diff --git a/plutus-pab/plutus-pab.yaml.sample b/plutus-pab-executables/plutus-pab.yaml.sample similarity index 100% rename from plutus-pab/plutus-pab.yaml.sample rename to plutus-pab-executables/plutus-pab.yaml.sample diff --git a/plutus-pab/src/Plutus/PAB/Run/PSGenerator.hs b/plutus-pab-executables/src/Plutus/PAB/Run/PSGenerator.hs similarity index 98% rename from plutus-pab/src/Plutus/PAB/Run/PSGenerator.hs rename to plutus-pab-executables/src/Plutus/PAB/Run/PSGenerator.hs index 347c802877..9e6ec6ff38 100644 --- a/plutus-pab/src/Plutus/PAB/Run/PSGenerator.hs +++ b/plutus-pab-executables/src/Plutus/PAB/Run/PSGenerator.hs @@ -41,7 +41,6 @@ import Plutus.PAB.Webserver.API qualified as API import Plutus.PAB.Webserver.Types (ChainReport, CombinedWSStreamToClient, CombinedWSStreamToServer, ContractActivationArgs, ContractInstanceClientState, ContractReport, ContractSignatureResponse, FullReport, InstanceStatusToClient) -import Servant ((:<|>)) import Servant.PureScript (HasBridge, Settings, apiModuleName, defaultBridge, defaultSettings, languageBridge, writeAPIModuleWithSettings) @@ -126,8 +125,7 @@ generateAPIModule _ outputDir = do mySettings outputDir pabBridgeProxy - ( Proxy @(API.API (Contract.ContractDef (Builtin a)) Text.Text - :<|> API.WalletProxy Text.Text) + ( Proxy @(API.API (Contract.ContractDef (Builtin a)) Text.Text) ) -- | Generate PS modules in 'outputDir' which includes common types for the PAB. diff --git a/plutus-pab/sync-client/Main.hs b/plutus-pab-executables/sync-client/Main.hs similarity index 100% rename from plutus-pab/sync-client/Main.hs rename to plutus-pab-executables/sync-client/Main.hs diff --git a/plutus-pab/test-psgenerator/TestPSGenerator.hs b/plutus-pab-executables/test-psgenerator/TestPSGenerator.hs similarity index 100% rename from plutus-pab/test-psgenerator/TestPSGenerator.hs rename to plutus-pab-executables/test-psgenerator/TestPSGenerator.hs diff --git a/plutus-pab-executables/test/README.md b/plutus-pab-executables/test/README.md new file mode 100644 index 0000000000..ab00a3700b --- /dev/null +++ b/plutus-pab-executables/test/README.md @@ -0,0 +1,5 @@ +# plutus-pab-executables tests + +There is a test suite in `plutus-pab.cabal`: + +* `plutus-pab-test-full` has the main PAB tests (for `Plutus.PAB.Core` and related modules). It depends on `plutus-use-cases`. diff --git a/plutus-pab/test/full/Plutus/PAB/CliSpec.hs b/plutus-pab-executables/test/full/Plutus/PAB/CliSpec.hs similarity index 97% rename from plutus-pab/test/full/Plutus/PAB/CliSpec.hs rename to plutus-pab-executables/test/full/Plutus/PAB/CliSpec.hs index 15e151c62b..92110d8bbe 100644 --- a/plutus-pab/test/full/Plutus/PAB/CliSpec.hs +++ b/plutus-pab-executables/test/full/Plutus/PAB/CliSpec.hs @@ -104,7 +104,7 @@ defaultPabConfig -- TODO: Note: If it exceeds 900, Hydra assumes the CI is unresponsive -- (not unreasonably...) { pabWebserverConfig = def { PAB.Types.endpointTimeout = Just 60 } - , nodeServerConfig = def { Node.Types.mscSocketPath = "/tmp/node-server.sock" } + , nodeServerConfig = def { Node.Types.pscSocketPath = "/tmp/node-server.sock" } } -- | Bump all the default ports, and any other needed things so that we @@ -116,7 +116,7 @@ bumpConfig -> Config -- ^ Bumped config! bumpConfig x dbName conf@Config{ pabWebserverConfig = p@PAB.Types.WebserverConfig{PAB.Types.baseUrl=p_u} , walletServerConfig - , nodeServerConfig = n@Node.Types.MockServerConfig{Node.Types.mscBaseUrl=n_u,Node.Types.mscSocketPath=soc} + , nodeServerConfig = n@Node.Types.PABServerConfig{Node.Types.pscBaseUrl=n_u,Node.Types.pscSocketPath=soc} , chainIndexConfig = c@ChainIndex.Types.ChainIndexConfig{ChainIndex.Types.ciBaseUrl=c_u} , dbConfig = db@PAB.Types.DbConfig{PAB.Types.dbConfigFile=dbFile} } = newConf @@ -125,7 +125,7 @@ bumpConfig x dbName conf@Config{ pabWebserverConfig = p@PAB.Types.WebserverCon newConf = conf { pabWebserverConfig = p { PAB.Types.baseUrl = bump p_u } , walletServerConfig = over (Wallet.Types.walletSettingsL . Wallet.Types.baseUrlL) (coerce . bump . coerce) walletServerConfig - , nodeServerConfig = n { Node.Types.mscBaseUrl = bump n_u, Node.Types.mscSocketPath = soc ++ "." ++ show x } + , nodeServerConfig = n { Node.Types.pscBaseUrl = bump n_u, Node.Types.pscSocketPath = soc ++ "." ++ show x } , chainIndexConfig = c { ChainIndex.Types.ciBaseUrl = coerce $ bump $ coerce c_u } , dbConfig = db { PAB.Types.dbConfigFile = "file::" <> dbName <> "?mode=memory&cache=shared" } } diff --git a/plutus-pab/test/full/Plutus/PAB/CoreSpec.hs b/plutus-pab-executables/test/full/Plutus/PAB/CoreSpec.hs similarity index 100% rename from plutus-pab/test/full/Plutus/PAB/CoreSpec.hs rename to plutus-pab-executables/test/full/Plutus/PAB/CoreSpec.hs diff --git a/plutus-pab/test/full/Plutus/PAB/Effects/Contract/BuiltinSpec.hs b/plutus-pab-executables/test/full/Plutus/PAB/Effects/Contract/BuiltinSpec.hs similarity index 100% rename from plutus-pab/test/full/Plutus/PAB/Effects/Contract/BuiltinSpec.hs rename to plutus-pab-executables/test/full/Plutus/PAB/Effects/Contract/BuiltinSpec.hs diff --git a/plutus-pab/test/full/Plutus/PAB/Effects/Contract/ContractTest.hs b/plutus-pab-executables/test/full/Plutus/PAB/Effects/Contract/ContractTest.hs similarity index 100% rename from plutus-pab/test/full/Plutus/PAB/Effects/Contract/ContractTest.hs rename to plutus-pab-executables/test/full/Plutus/PAB/Effects/Contract/ContractTest.hs diff --git a/plutus-pab/test/full/Plutus/PAB/Effects/ContractTest/Uniswap.hs b/plutus-pab-executables/test/full/Plutus/PAB/Effects/ContractTest/Uniswap.hs similarity index 90% rename from plutus-pab/test/full/Plutus/PAB/Effects/ContractTest/Uniswap.hs rename to plutus-pab-executables/test/full/Plutus/PAB/Effects/ContractTest/Uniswap.hs index 3f40bbb175..f2dbad6b9c 100644 --- a/plutus-pab/test/full/Plutus/PAB/Effects/ContractTest/Uniswap.hs +++ b/plutus-pab-executables/test/full/Plutus/PAB/Effects/ContractTest/Uniswap.hs @@ -1,14 +1,10 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE DeriveAnyClass #-} -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeOperators #-} module Plutus.PAB.Effects.ContractTest.Uniswap where diff --git a/plutus-pab/test/full/Plutus/PAB/Simulator/Test.hs b/plutus-pab-executables/test/full/Plutus/PAB/Simulator/Test.hs similarity index 100% rename from plutus-pab/test/full/Plutus/PAB/Simulator/Test.hs rename to plutus-pab-executables/test/full/Plutus/PAB/Simulator/Test.hs diff --git a/plutus-pab/test/full/Spec.hs b/plutus-pab-executables/test/full/Spec.hs similarity index 100% rename from plutus-pab/test/full/Spec.hs rename to plutus-pab-executables/test/full/Spec.hs diff --git a/plutus-pab/test/full/SpecLongRunning.hs b/plutus-pab-executables/test/full/SpecLongRunning.hs similarity index 100% rename from plutus-pab/test/full/SpecLongRunning.hs rename to plutus-pab-executables/test/full/SpecLongRunning.hs diff --git a/plutus-pab/tx-inject/Main.hs b/plutus-pab-executables/tx-inject/Main.hs similarity index 97% rename from plutus-pab/tx-inject/Main.hs rename to plutus-pab-executables/tx-inject/Main.hs index 35f698b6e6..beb8a59fb8 100644 --- a/plutus-pab/tx-inject/Main.hs +++ b/plutus-pab-executables/tx-inject/Main.hs @@ -32,7 +32,7 @@ import System.Random.MWC (GenIO, createSystemRandom) import System.Signal (installHandler, sigINT) import Text.Pretty.Simple (pPrint) -import Cardano.Node.Types (MockServerConfig (..)) +import Cardano.Node.Types (PABServerConfig (..)) import Cardano.Protocol.Socket.Mock.Client (TxSendHandle (..), queueTx, runTxSender) import Ledger.Ada qualified as Ada import Ledger.Blockchain (OnChainTx (..)) @@ -70,7 +70,7 @@ data AppEnv = AppEnv initialUtxoIndex :: Config -> UtxoIndex initialUtxoIndex config = let dist = Map.fromList $ - zip (config & nodeServerConfig & mscInitialTxWallets & fmap fromWalletNumber) + zip (config & nodeServerConfig & pscInitialTxWallets & fmap fromWalletNumber) (repeat (Ada.adaValueOf 1000_000_000)) initialTxs = view (chainState . txPool) $ @@ -191,7 +191,7 @@ initializeInterruptHandler stats = do -- | Build a client environment for servant. initializeClient :: Config -> IO TxSendHandle initializeClient cfg = do - let serverSocket = mscSocketPath $ nodeServerConfig cfg + let serverSocket = pscSocketPath $ nodeServerConfig cfg runTxSender serverSocket main :: IO () diff --git a/plutus-pab/tx-inject/TxInject/RandomTx.hs b/plutus-pab-executables/tx-inject/TxInject/RandomTx.hs similarity index 100% rename from plutus-pab/tx-inject/TxInject/RandomTx.hs rename to plutus-pab-executables/tx-inject/TxInject/RandomTx.hs diff --git a/plutus-pab/tx-inject/config.yaml b/plutus-pab-executables/tx-inject/config.yaml similarity index 100% rename from plutus-pab/tx-inject/config.yaml rename to plutus-pab-executables/tx-inject/config.yaml diff --git a/plutus-pab/tx-inject/start-all-servers.sh b/plutus-pab-executables/tx-inject/start-all-servers.sh similarity index 100% rename from plutus-pab/tx-inject/start-all-servers.sh rename to plutus-pab-executables/tx-inject/start-all-servers.sh diff --git a/plutus-pab/README.md b/plutus-pab/README.md index 67ccb40360..8547a44170 100644 --- a/plutus-pab/README.md +++ b/plutus-pab/README.md @@ -3,274 +3,4 @@ _PAB_ (Plutus Application Backend) is an Off-Chain application for managing the state of Plutus contract instances. -## Table of Contents - -- [Building](#building) -- [Running](#running) -- [PAB Components](#pab-components) - -## Building - -_PAB_ is a Cabal based Haskell project. Production builds are done with Nix using [haskell.nix](https://github.com/input-output-hk/haskell.nix) - -### Cabal - -``` -$ cabal build -``` - -### Nix - -``` -$ nix-build ../default.nix -A plutus-apps.haskell.packages.plutus-pab -``` - -## PAB Components -PAB contains several commands and services, which are outlined below. - -- [pab-local-cluster](#pab-local-cluster) -- [psgenerator](#psgenerator) -- [migrate](#migrate) -- [all-servers](#all-servers) -- [client-services](#client-services) -- [wallet-server](#wallet-server) -- [webserver](#webserver) -- [node-server](#node-server) -- [chain-index](#chain-index) -- [default-logging-config](#default-logging-config) - - -### pab-local-cluster - -#### Description - -Can be used to run end-to-end tests using a private local testnet. - -#### Example - -1. Build necessary components: - -``` -> cabal build plutus-pab-local-cluster -``` - -2. Get config data: - - Clone to $DIR and set the - `SHELLEY_TEST_DATA` environment variable: - - ``` - export SHELLEY_TEST_DATA=$DIR/lib/shelley/test/data/cardano-node-shelley - ``` - -3. Run the local cluster: - -``` -> cabal exec plutus-pab-local-cluster -``` - -4. Wait until the message `Starting PAB backend server on port 9080` appears. - -5. Run the integration test: - -``` -curl -H "Content-Type: application/json" -v \ - -X POST \ - -d '{"caID":{"tag":"IntegrationTest"},"caWallet":{"getWalletId":"2d4cc31a4b3116ab86bfe529d30d9c362acd0b44"}}' \ - localhost:9080/api/contract/activate -``` - -A couple of log messages appear, the last one should say something like "Tx -confirmed. Integration test complete." - - -### psgenerator - -``` -$ cabal exec plutus-pab-setup -- psgenerator generated -``` - -#### Description - -Generates the purescript bridge code. - -#### Source - -- [src/Plutus/PAB/Run/PSGenerator.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Run/PSGenerator.hs) - -### migrate - -``` -$ cabal exec plutus-pab-examples -- migrate --config plutus-pab.yaml.sample -``` - -#### Description - -Migrates the database in `pab-core.db` to the current schema. The database contains the state for the contract instances. - -#### Source -[Plutus.PAB.App.migrate](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/App.hs#L260) - - -### all-servers - -``` -$ cabal exec plutus-pab-examples -- all-servers --config plutus-pab.yaml.sample -``` - -#### Description - -Combines the execution of all services in the appropriate order: - -* node (mock or real) -* wallet (mock, local or remote) -* PAB webserver -* chain index - -#### Dependencies - -- plutus-pab.yaml -- sqlite database - - -#### Source - -- [src/Plutus/PAB/Run/CommandParser.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs#L155-L164) - -### client-services - -``` -$ cabal exec plutus-pab-examples -- client-services --config plutus-pab.yaml.sample -``` - -#### Description - -Starts all services *except for* the node service: - -* wallet (mock, local or remote) -* PAB webserver -* chain index - -#### Dependencies - -- plutus-pab.yaml -- sqlite database - - -#### Source - -- [src/Plutus/PAB/Run/CommandParser.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs#L166-L175) - -### wallet-server - -``` -$ cabal exec plutus-pab-examples -- wallet-server --config plutus-pab.yaml.sample -``` - -#### Description - -Plutus specific wallet implementation for managing user funds on the blockchain. Clients to this service are: - -- PAB: adding funds to transactions & signing transactions -- user: making payments - -#### Dependencies - -- plutus-pab.yaml -- node - -#### Source - -- [Cardano.Wallet.Types.WalletConfig](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/Types.hs) - -Mock wallet: -- [Cardano.Wallet.Mock.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/Mock/API.hs) -- [Cardano.Wallet.Mock.Server.main](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/Mock/Server.hs) - -Local wallet: -- [Cardano.Wallet.LocalClient](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/LocalClient.hs) - -Remote wallet: -- [Cardano.Wallet.RemoteClient](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Wallet/RemoteClient.hs) - -### webserver - -``` -$ cabal exec plutus-pab-examples -- webserver --config plutus-pab.yaml.sample -``` - -#### Description - -Serves the PAB user interface - -#### Dependencies - -- plutus-pab.yaml -- sqlite database -- pab-client - -#### Source - -- [Plutus.PAB.Webserver.API.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Webserver/API.hs#L35) -- [Plutus.PAB.Webserver.Server](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Plutus/PAB/Webserver/Server.hs) - -### node-server - -``` -$ cabal exec plutus-pab-examples -- node-server --config plutus-pab.yaml.sample -``` - -#### Description - -Mock or real implementation of a Goguen node. Clients to this service are: - -- chain-index -- webserver -- wallet - -#### Dependencies - -- plutus-pab.yaml - -#### Source - -- [Cardano.Node.API.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Node/API.hs#L14) -- [Cardano.Node.Server.main](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/Node/Server.hs#L56) - -### chain-index - -``` -$ cabal exec plutus-pab-examples -- chain-index --config plutus-pab.yaml.sample -``` - -#### Description - -Provides a consistent view of the current state of the blockchain including a key-value store -for datum and script hashes. Clients to this service are: - -- process-outboxes - -#### Dependencies - -- plutus-pab.yaml -- node - -#### Source - -- [Plutus.ChainIndex.Api.API](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-chain-index/src/Plutus/ChainIndex/Api.hs#L106) -- [Cardano.ChainIndex.Server.main](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/src/Cardano/ChainIndex/Server.hs#L37) - -### default-logging-config - -``` -$ cabal exec plutus-pab-setup -- default-logging-config -``` - -#### Description - -Prints the default logging configuration to STDOUT - -#### Source - -- [app/CommandParser.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/app/CommandParser.hs#L59) -- [app/Main.hs](https://github.com/input-output-hk/plutus-apps/blob/main/plutus-pab/app/Main.hs#L28) +This is a library. Take a look at `plutus-pab-executables` for executables. diff --git a/plutus-pab/plutus-pab.cabal b/plutus-pab/plutus-pab.cabal index 7c1046b338..65f1a45c7c 100644 --- a/plutus-pab/plutus-pab.cabal +++ b/plutus-pab/plutus-pab.cabal @@ -99,6 +99,7 @@ library Plutus.PAB.Events.Contract Plutus.PAB.Events.ContractInstanceState Plutus.PAB.Instances + Plutus.PAB.LocalCluster.Run Plutus.PAB.Monitoring.Config Plutus.PAB.Monitoring.Monitoring Plutus.PAB.Monitoring.PABLogMsg @@ -106,7 +107,6 @@ library Plutus.PAB.Run.Cli Plutus.PAB.Run.Command Plutus.PAB.Run.CommandParser - Plutus.PAB.Run.PSGenerator Plutus.PAB.Simulator Plutus.PAB.Timeout Plutus.PAB.Types @@ -122,9 +122,11 @@ library build-depends: , freer-extras , playground-common + , plutus-chain-index , plutus-chain-index-core , plutus-contract , plutus-ledger + , plutus-ledger-api , plutus-ledger-constraints , plutus-tx , plutus-tx-plugin @@ -139,15 +141,22 @@ library beam-migrate -any, beam-sqlite -any, bytestring -any, + cardano-addresses -any, cardano-api -any, cardano-slotting -any, + cardano-wallet -any, + cardano-wallet-cli -any, cardano-wallet-core -any, + cardano-wallet-core-integration -any, + cardano-wallet-launcher -any, containers -any, contra-tracer -any, cryptonite -any, data-default -any, either -any, + directory -any, exceptions -any, + filepath -any, freer-simple -any, generic-arbitrary -any, http-client -any, @@ -163,17 +172,13 @@ library optparse-applicative -any, ouroboros-network -any, ouroboros-network-framework -any, - playground-common -any, - plutus-ledger-api -any, prettyprinter >=1.1.0.1, - purescript-bridge -any, quickcheck-instances -any, row-types -any, servant -any, servant-client -any, servant-openapi3, servant-options -any, - servant-purescript -any, servant-server -any, servant-swagger-ui, servant-websockets -any, @@ -194,229 +199,6 @@ library Win32-network -any, yaml -any, -executable plutus-pab-setup - main-is: Main.hs - hs-source-dirs: app - other-modules: - CommandParser - - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - ghc-options: - -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat - -Wincomplete-uni-patterns -Wincomplete-record-updates - -Wno-missing-import-lists -Wredundant-constraints -O0 - - build-depends: - aeson -any, - aeson-pretty -any, - async -any, - base >=4.9 && <5, - bytestring -any, - containers -any, - contra-tracer -any, - filepath -any, - freer-extras -any, - freer-simple -any, - iohk-monitoring -any, - lens -any, - lobemo-backend-ekg -any, - monad-logger -any, - mtl -any, - optparse-applicative -any, - playground-common -any, - plutus-contract -any, - plutus-ledger -any, - plutus-pab -any, - plutus-use-cases -any, - prettyprinter >=1.1.0.1, - purescript-bridge -any, - row-types -any, - servant-client -any, - servant-purescript -any, - servant-server -any, - text -any, - time-units -any, - unliftio-core -any, - uuid -any, - yaml -any, - -executable plutus-pab-examples - main-is: Main.hs - hs-source-dirs: examples - other-modules: - ContractExample.AtomicSwap - ContractExample.IntegrationTest - ContractExample.PayToWallet - ContractExample.WaitForTx - ContractExample - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - ghc-options: - -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat - -Wincomplete-uni-patterns -Wincomplete-record-updates - -Wno-missing-import-lists -Wredundant-constraints -O0 - - build-depends: - , aeson - , base >=4.9 && <5 - , containers - , data-default - , freer-extras - , freer-simple - , lens - , playground-common - , plutus-contract - , plutus-ledger - , plutus-ledger-constraints - , plutus-pab - , plutus-use-cases - , prettyprinter - , purescript-bridge - , row-types - , servant-purescript - , text - , openapi3 - -executable plutus-uniswap - main-is: Main.hs - hs-source-dirs: examples/uniswap - other-modules: - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - ghc-options: - -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat - -Wincomplete-uni-patterns -Wincomplete-record-updates - -Wno-missing-import-lists -Wredundant-constraints -O0 - - build-depends: - , aeson - , base >=4.9 && <5 - , containers - , data-default -any - , freer-extras - , freer-simple - , plutus-contract - , plutus-ledger - , plutus-pab - , plutus-use-cases - , prettyprinter - , text - , openapi3 - -executable plutus-pab-local-cluster - main-is: Main.hs - hs-source-dirs: - local-cluster - examples - other-modules: - ContractExample - ContractExample.AtomicSwap - ContractExample.IntegrationTest - ContractExample.PayToWallet - ContractExample.WaitForTx - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - ghc-options: - -threaded -rtsopts -with-rtsopts=-N -Wall -Wcompat - -Wincomplete-uni-patterns -Wincomplete-record-updates - -Wno-missing-import-lists -Wredundant-constraints -O0 - - build-depends: - , aeson - , base >=4.9 && <5 - , containers - , directory - , filepath - , text - , text-class - , beam-sqlite - , sqlite-simple - , freer-extras - , plutus-pab - , beam-migrate - , plutus-use-cases - , cardano-wallet - , cardano-wallet-cli - , cardano-wallet-launcher - , cardano-wallet-core - , cardano-wallet-core-integration - , iohk-monitoring - , lobemo-backend-ekg - , contra-tracer - , plutus-chain-index-core - , plutus-chain-index - , cardano-api - , lens - , prettyprinter - , playground-common - , plutus-ledger - , plutus-ledger-api - , plutus-ledger-constraints - , plutus-contract - , freer-simple - , data-default - , row-types - , purescript-bridge - , openapi3 - , async - , servant-client - , http-client - , servant-client-core - , cardano-addresses - -executable plutus-pab-test-psgenerator - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - hs-source-dirs: - test-psgenerator - test/full - examples - - main-is: TestPSGenerator.hs - other-modules: - ContractExample.AtomicSwap - ContractExample.IntegrationTest - ContractExample.PayToWallet - Plutus.PAB.Effects.Contract.ContractTest - Plutus.PAB.Simulator.Test - - build-depends: - QuickCheck -any, - aeson -any, - aeson-pretty -any, - base >=4.9 && <5, - bytestring -any, - containers -any, - data-default -any, - freer-extras -any, - freer-simple -any, - http-client -any, - http-client-tls -any, - lens -any, - monad-logger -any, - mtl -any, - plutus-contract -any, - plutus-pab, - plutus-use-cases -any, - plutus-ledger -any, - plutus-ledger-constraints -any, - quickcheck-instances -any, - servant-client -any, - tasty -any, - smallcheck -any, - tasty-smallcheck -any, - tasty-quickcheck -any, - text -any, - transformers -any, - prettyprinter -any, - row-types -any, - plutus-tx -any, - playground-common -any, - servant-purescript -any, - purescript-bridge -any, - filepath -any - test-suite plutus-pab-test-light default-language: Haskell2010 default-extensions: ImportQualifiedPost @@ -448,7 +230,6 @@ test-suite plutus-pab-test-light lens -any, monad-logger -any, mtl -any, - plutus-chain-index-core -any, plutus-contract -any, plutus-pab, plutus-ledger -any, @@ -468,205 +249,3 @@ test-suite plutus-pab-test-light prettyprinter -any, stm -any, async -any, - -test-suite plutus-pab-test-full - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - hs-source-dirs: - test/full - examples - - type: exitcode-stdio-1.0 - main-is: Spec.hs - other-modules: - ContractExample - ContractExample.WaitForTx - ContractExample.AtomicSwap - ContractExample.IntegrationTest - ContractExample.PayToWallet - Plutus.PAB.CoreSpec - Plutus.PAB.CliSpec - Plutus.PAB.Effects.Contract.BuiltinSpec - Plutus.PAB.Effects.Contract.ContractTest - Plutus.PAB.Simulator.Test - - build-depends: - QuickCheck -any, - aeson -any, - aeson-pretty -any, - base >=4.9 && <5, - bytestring -any, - cardano-api -any, - containers -any, - data-default -any, - freer-extras -any, - freer-simple -any, - http-client -any, - http-client-tls -any, - lens -any, - monad-logger -any, - mtl -any, - plutus-chain-index-core -any, - plutus-contract -any, - plutus-pab, - plutus-use-cases -any, - plutus-ledger -any, - plutus-ledger-constraints -any, - quickcheck-instances -any, - servant-client -any, - tasty -any, - tasty-hunit -any, - smallcheck -any, - stm -any, - tasty-smallcheck -any, - tasty-quickcheck -any, - text -any, - transformers -any, - prettyprinter -any, - row-types -any, - plutus-tx -any, - playground-common -any, - yaml -any, - iohk-monitoring -any, - servant-server -any, - purescript-bridge -any, - async -any, - servant-client -any, - uuid -any, - openapi3, - -test-suite plutus-pab-test-full-long-running - default-language: Haskell2010 - default-extensions: ImportQualifiedPost - hs-source-dirs: - test/full - examples - - type: exitcode-stdio-1.0 - main-is: SpecLongRunning.hs - other-modules: - ContractExample - ContractExample.WaitForTx - ContractExample.AtomicSwap - ContractExample.IntegrationTest - ContractExample.PayToWallet - Plutus.PAB.CliSpec - Plutus.PAB.Effects.Contract.ContractTest - Plutus.PAB.Simulator.Test - - build-depends: - QuickCheck -any, - aeson -any, - aeson-pretty -any, - base >=4.9 && <5, - bytestring -any, - cardano-api -any, - containers -any, - data-default -any, - freer-extras -any, - freer-simple -any, - http-client -any, - http-client-tls -any, - lens -any, - monad-logger -any, - mtl -any, - plutus-chain-index-core -any, - plutus-contract -any, - plutus-pab, - plutus-use-cases -any, - plutus-ledger -any, - plutus-ledger-constraints -any, - quickcheck-instances -any, - servant-client -any, - tasty -any, - tasty-hunit -any, - smallcheck -any, - tasty-smallcheck -any, - tasty-quickcheck -any, - text -any, - transformers -any, - prettyprinter -any, - row-types -any, - plutus-tx -any, - playground-common -any, - yaml -any, - iohk-monitoring -any, - servant-server -any, - purescript-bridge -any, - async -any, - servant-client -any, - uuid -any, - openapi3 -any, - -executable tx-inject - import: lang - main-is: Main.hs - hs-source-dirs: tx-inject - other-modules: - TxInject.RandomTx - default-language: Haskell2010 - build-depends: - base >=4.9 && <5, - plutus-pab, - containers -any, - clock -any, - lens -any, - mwc-random -any, - optparse-applicative -any, - plutus-contract -any, - plutus-ledger -any, - pretty-simple -any, - rate-limit -any, - signal -any, - stm -any, - text -any, - time-units -any, - yaml -any, - hedgehog -any, - primitive -any - -executable sync-client - import: lang - main-is: Main.hs - hs-source-dirs: sync-client - default-language: Haskell2010 - build-depends: - base >=4.9 && <5, - cardano-api -any, - cardano-slotting -any, - contra-tracer -any, - either -any, - optparse-applicative -any, - plutus-chain-index-core, - plutus-ledger, - plutus-pab, - text - -executable plutus-pab-nami-demo - import: lang - main-is: Main.hs - hs-source-dirs: demo/pab-nami/pab/app - other-modules: - DemoContract - ghc-options: - -threaded - build-depends: - aeson -any, - async -any, - base >= 4.9 && < 5, - cardano-api -any, - data-default -any, - filepath -any, - freer-extras -any, - freer-simple -any, - openapi3 -any, - plutus-chain-index -any, - plutus-contract -any, - plutus-pab -any, - playground-common -any, - prettyprinter -any, - purescript-bridge -any, - plutus-ledger -any, - plutus-ledger-constraints -any, - row-types -any, - text -any, diff --git a/plutus-pab/src/Cardano/Node/API.hs b/plutus-pab/src/Cardano/Node/API.hs index 5b8e8352f6..99ec661b45 100644 --- a/plutus-pab/src/Cardano/Node/API.hs +++ b/plutus-pab/src/Cardano/Node/API.hs @@ -8,7 +8,7 @@ module Cardano.Node.API import Servant.API (Get, JSON, NoContent, Post, (:<|>), (:>)) -import Cardano.Node.Types (MockServerLogMsg) +import Cardano.Node.Types (PABServerLogMsg) import Control.Monad.Freer.Extras.Log (LogMessage) type API @@ -17,4 +17,4 @@ type API -- Routes that are not guaranteed to exist on the real node type NodeAPI - = "consume-event-history" :> Post '[JSON] [LogMessage MockServerLogMsg] + = "consume-event-history" :> Post '[JSON] [LogMessage PABServerLogMsg] diff --git a/plutus-pab/src/Cardano/Node/Client.hs b/plutus-pab/src/Cardano/Node/Client.hs index 3d0cca3a93..3c9f1fab3e 100644 --- a/plutus-pab/src/Cardano/Node/Client.hs +++ b/plutus-pab/src/Cardano/Node/Client.hs @@ -1,7 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} -{-# LANGUAGE LambdaCase #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeOperators #-} @@ -18,14 +17,14 @@ import Servant (NoContent, (:<|>) (..)) import Servant.Client (ClientM, client) import Cardano.Node.API (API) -import Cardano.Node.Types (MockServerLogMsg) +import Cardano.Node.Types (PABServerLogMsg) import Cardano.Protocol.Socket.Client qualified as Client import Cardano.Protocol.Socket.Mock.Client qualified as MockClient import Control.Monad.Freer.Extras.Log (LogMessage) import Wallet.Effects (NodeClientEffect (..)) healthcheck :: ClientM NoContent -consumeEventHistory :: ClientM [LogMessage MockServerLogMsg] +consumeEventHistory :: ClientM [LogMessage PABServerLogMsg] (healthcheck, consumeEventHistory) = ( healthcheck_ , consumeEventHistory_ diff --git a/plutus-pab/src/Cardano/Node/Mock.hs b/plutus-pab/src/Cardano/Node/Mock.hs index 2de425ae8c..3dbaec0722 100644 --- a/plutus-pab/src/Cardano/Node/Mock.hs +++ b/plutus-pab/src/Cardano/Node/Mock.hs @@ -40,7 +40,7 @@ import Wallet.Emulator.Chain qualified as Chain healthcheck :: Monad m => m NoContent healthcheck = pure NoContent -consumeEventHistory :: MonadIO m => MVar AppState -> m [LogMessage MockServerLogMsg] +consumeEventHistory :: MonadIO m => MVar AppState -> m [LogMessage PABServerLogMsg] consumeEventHistory stateVar = liftIO $ do oldState <- takeMVar stateVar @@ -50,7 +50,7 @@ consumeEventHistory stateVar = pure events addTx :: - ( Member (LogMsg MockServerLogMsg) effs + ( Member (LogMsg PABServerLogMsg) effs , Member (Reader Client.TxSendHandle) effs , MonadIO m , LastMember m effs @@ -64,12 +64,12 @@ addTx tx = do -- | Run all chain effects in the IO Monad runChainEffects :: - Trace IO MockServerLogMsg + Trace IO PABServerLogMsg -> SlotConfig -> Client.TxSendHandle -> MVar AppState -> Eff (NodeServerEffects IO) a - -> IO ([LogMessage MockServerLogMsg], a) + -> IO ([LogMessage PABServerLogMsg], a) runChainEffects trace slotCfg clientHandler stateVar eff = do oldAppState <- liftIO $ takeMVar stateVar ((a, events), newState) <- liftIO @@ -92,12 +92,12 @@ runChainEffects trace slotCfg clientHandler stateVar eff = do mergeState = interpret (handleZoomedState chainState) - toWriter = Eff.runWriter . reinterpret (handleLogWriter @MockServerLogMsg @[LogMessage MockServerLogMsg] (unto return)) + toWriter = Eff.runWriter . reinterpret (handleLogWriter @PABServerLogMsg @[LogMessage PABServerLogMsg] (unto return)) runReaders s = Eff.runState s . Eff.runReader clientHandler processChainEffects :: - Trace IO MockServerLogMsg + Trace IO PABServerLogMsg -> SlotConfig -> Client.TxSendHandle -> MVar AppState diff --git a/plutus-pab/src/Cardano/Node/Server.hs b/plutus-pab/src/Cardano/Node/Server.hs index 0d929acee9..3718ee9288 100644 --- a/plutus-pab/src/Cardano/Node/Server.hs +++ b/plutus-pab/src/Cardano/Node/Server.hs @@ -35,7 +35,7 @@ import Servant.Client (BaseUrl (baseUrlPort)) import Wallet.Emulator.Wallet (fromWalletNumber) app :: - Trace IO MockServerLogMsg + Trace IO PABServerLogMsg -> SlotConfig -> Client.TxSendHandle -> MVar AppState @@ -50,27 +50,27 @@ app trace slotCfg clientHandler stateVar = data Ctx = Ctx { serverHandler :: Server.ServerHandler , txSendHandle :: Client.TxSendHandle , serverState :: MVar AppState - , mockTrace :: Trace IO MockServerLogMsg + , mockTrace :: Trace IO PABServerLogMsg } -main :: Trace IO MockServerLogMsg -> MockServerConfig -> Availability -> IO () -main trace MockServerConfig { mscBaseUrl - , mscKeptBlocks - , mscSlotConfig - , mscInitialTxWallets - , mscSocketPath } availability = LM.runLogEffects trace $ do +main :: Trace IO PABServerLogMsg -> PABServerConfig -> Availability -> IO () +main trace PABServerConfig { pscBaseUrl + , pscKeptBlocks + , pscSlotConfig + , pscInitialTxWallets + , pscSocketPath } availability = LM.runLogEffects trace $ do -- make initial distribution of 1 billion Ada to all configured wallets - let dist = Map.fromList $ zip (fromWalletNumber <$> mscInitialTxWallets) (repeat (Ada.adaValueOf 1000_000_000)) + let dist = Map.fromList $ zip (fromWalletNumber <$> pscInitialTxWallets) (repeat (Ada.adaValueOf 1000_000_000)) initialState <- initialChainState dist let appState = AppState { _chainState = initialState , _eventHistory = mempty } - serverHandler <- liftIO $ Server.runServerNode trace mscSocketPath mscKeptBlocks (_chainState appState) mscSlotConfig + serverHandler <- liftIO $ Server.runServerNode trace pscSocketPath pscKeptBlocks (_chainState appState) pscSlotConfig serverState <- liftIO $ newMVar appState handleDelayEffect $ delayThread (2 :: Second) - clientHandler <- liftIO $ Client.runTxSender mscSocketPath + clientHandler <- liftIO $ Client.runTxSender pscSocketPath let ctx = Ctx { serverHandler = serverHandler , txSendHandle = clientHandler @@ -80,14 +80,14 @@ main trace MockServerConfig { mscBaseUrl runSlotCoordinator ctx - logInfo $ StartingMockServer $ baseUrlPort mscBaseUrl - liftIO $ Warp.runSettings warpSettings $ app trace mscSlotConfig clientHandler serverState + logInfo $ StartingPABServer $ baseUrlPort pscBaseUrl + liftIO $ Warp.runSettings warpSettings $ app trace pscSlotConfig clientHandler serverState where - warpSettings = Warp.defaultSettings & Warp.setPort (baseUrlPort mscBaseUrl) & Warp.setBeforeMainLoop (available availability) + warpSettings = Warp.defaultSettings & Warp.setPort (baseUrlPort pscBaseUrl) & Warp.setBeforeMainLoop (available availability) runSlotCoordinator (Ctx serverHandler _ _ _) = do - let SlotConfig{scSlotZeroTime, scSlotLength} = mscSlotConfig + let SlotConfig{scSlotZeroTime, scSlotLength} = pscSlotConfig logInfo $ StartingSlotCoordination (posixSecondsToUTCTime $ realToFrac scSlotZeroTime / 1000) (fromInteger scSlotLength :: Millisecond) - void $ liftIO $ forkIO $ slotCoordinator mscSlotConfig serverHandler + void $ liftIO $ forkIO $ slotCoordinator pscSlotConfig serverHandler diff --git a/plutus-pab/src/Cardano/Node/Types.hs b/plutus-pab/src/Cardano/Node/Types.hs index 814fc399fc..e6ff0c37da 100644 --- a/plutus-pab/src/Cardano/Node/Types.hs +++ b/plutus-pab/src/Cardano/Node/Types.hs @@ -16,7 +16,7 @@ module Cardano.Node.Types ( -- * Logging types - MockServerLogMsg (..) + PABServerLogMsg (..) -- * Event types , BlockEvent (..) @@ -34,7 +34,7 @@ module Cardano.Node.Types , eventHistory -- * Config types - , MockServerConfig (..) + , PABServerConfig (..) , NodeMode (..) -- * newtype wrappers @@ -105,81 +105,81 @@ data NodeMode = deriving stock (Show, Eq, Generic) deriving anyclass (FromJSON, ToJSON) --- | Mock Node server configuration -data MockServerConfig = - MockServerConfig - { mscBaseUrl :: BaseUrl +-- | Node server configuration +data PABServerConfig = + PABServerConfig + { pscBaseUrl :: BaseUrl -- ^ base url of the service - , mscInitialTxWallets :: [WalletNumber] + , pscInitialTxWallets :: [WalletNumber] -- ^ The wallets that receive money from the initial transaction. - , mscSocketPath :: FilePath + , pscSocketPath :: FilePath -- ^ Path to the socket used to communicate with the server. - , mscKeptBlocks :: Integer + , pscKeptBlocks :: Integer -- ^ The number of blocks to keep for replaying to a newly connected clients - , mscSlotConfig :: SlotConfig + , pscSlotConfig :: SlotConfig -- ^ Beginning of slot 0. - , mscFeeConfig :: FeeConfig + , pscFeeConfig :: FeeConfig -- ^ Configure constant fee per transaction and ratio by which to -- multiply size-dependent scripts fee. - , mscNetworkId :: NetworkIdWrapper + , pscNetworkId :: NetworkIdWrapper -- ^ NetworkId that's used with the CardanoAPI. - , mscProtocolParametersJsonPath :: Maybe FilePath + , pscProtocolParametersJsonPath :: Maybe FilePath -- ^ Path to a JSON file containing the protocol parameters - , mscPassphrase :: Maybe Text + , pscPassphrase :: Maybe Text -- ^ Wallet passphrase - , mscNodeMode :: NodeMode + , pscNodeMode :: NodeMode -- ^ Whether to connect to an Alonzo node or a mock node } deriving stock (Show, Eq, Generic) deriving anyclass (FromJSON) -defaultMockServerConfig :: MockServerConfig -defaultMockServerConfig = - MockServerConfig +defaultPABServerConfig :: PABServerConfig +defaultPABServerConfig = + PABServerConfig -- See Note [pab-ports] in 'test/full/Plutus/PAB/CliSpec.hs'. - { mscBaseUrl = BaseUrl Http "localhost" 9082 "" - , mscInitialTxWallets = + { pscBaseUrl = BaseUrl Http "localhost" 9082 "" + , pscInitialTxWallets = [ WalletNumber 1 , WalletNumber 2 , WalletNumber 3 ] - , mscSocketPath = "./node-server.sock" - , mscKeptBlocks = 100 - , mscSlotConfig = def - , mscFeeConfig = def - , mscNetworkId = testnetNetworkId - , mscProtocolParametersJsonPath = Nothing - , mscPassphrase = Nothing - , mscNodeMode = MockNode + , pscSocketPath = "./node-server.sock" + , pscKeptBlocks = 100 + , pscSlotConfig = def + , pscFeeConfig = def + , pscNetworkId = testnetNetworkId + , pscProtocolParametersJsonPath = Nothing + , pscPassphrase = Nothing + , pscNodeMode = MockNode } -instance Default MockServerConfig where - def = defaultMockServerConfig +instance Default PABServerConfig where + def = defaultPABServerConfig -- Logging ------------------------------------------------------------------------------------------------------------ -- | Top-level logging data type for structural logging --- inside the Mock Node server. -data MockServerLogMsg = +-- inside the PAB server. +data PABServerLogMsg = StartingSlotCoordination UTCTime Millisecond | NoRandomTxGeneration | StartingRandomTx | KeepingOldBlocks | RemovingOldBlocks - | StartingMockServer Int + | StartingPABServer Int | ProcessingChainEvent ChainEvent | BlockOperation BlockEvent | CreatingRandomTransaction deriving (Generic, Show, ToJSON, FromJSON) -instance Pretty MockServerLogMsg where +instance Pretty PABServerLogMsg where pretty = \case NoRandomTxGeneration -> "Not creating random transactions" StartingRandomTx -> "Starting random transaction generation thread" KeepingOldBlocks -> "Not starting block reaper thread (old blocks will be retained in-memory forever" RemovingOldBlocks -> "Starting block reaper thread (old blocks will be removed)" - StartingMockServer p -> "Starting Mock Node Server on port" <+> pretty p + StartingPABServer p -> "Starting PAB Server on port" <+> pretty p StartingSlotCoordination initialSlotTime slotLength -> "Starting slot coordination thread." <+> "Initial slot time:" <+> pretty (F.iso8601Show initialSlotTime) @@ -188,13 +188,13 @@ instance Pretty MockServerLogMsg where BlockOperation e -> "Block operation" <+> pretty e CreatingRandomTransaction -> "Generating a random transaction" -instance ToObject MockServerLogMsg where +instance ToObject PABServerLogMsg where toObject _ = \case NoRandomTxGeneration -> mkObjectStr "Not creating random transactions" () StartingRandomTx -> mkObjectStr "Starting random transaction generation thread" () KeepingOldBlocks -> mkObjectStr "Not starting block reaper thread (old blocks will be retained in-memory forever" () RemovingOldBlocks -> mkObjectStr "Starting block reaper thread (old blocks will be removed)" () - StartingMockServer p -> mkObjectStr "Starting Mock Node Server on port " (Tagged @"port" p) + StartingPABServer p -> mkObjectStr "Starting PAB Server on port " (Tagged @"port" p) StartingSlotCoordination i l -> mkObjectStr "Starting slot coordination thread" (Tagged @"initial-slot-time" (F.iso8601Show i), Tagged @"slot-length" l) ProcessingChainEvent e -> mkObjectStr "Processing chain event" (Tagged @"event" e) BlockOperation e -> mkObjectStr "Block operation" (Tagged @"event" e) @@ -216,7 +216,7 @@ instance Pretty BlockEvent where data AppState = AppState { _chainState :: MockNodeServerChainState -- ^ blockchain state - , _eventHistory :: [LogMessage MockServerLogMsg] -- ^ history of all log messages + , _eventHistory :: [LogMessage PABServerLogMsg] -- ^ history of all log messages } deriving (Show) @@ -244,8 +244,8 @@ type NodeServerEffects m = '[ ChainControlEffect , ChainEffect , State MockNodeServerChainState - , LogMsg MockServerLogMsg + , LogMsg PABServerLogMsg , Reader Client.TxSendHandle , State AppState - , LogMsg MockServerLogMsg + , LogMsg PABServerLogMsg , m] diff --git a/plutus-pab/src/Cardano/Protocol/Socket/Mock/Server.hs b/plutus-pab/src/Cardano/Protocol/Socket/Mock/Server.hs index 70068f4d32..753b30370b 100644 --- a/plutus-pab/src/Cardano/Protocol/Socket/Mock/Server.hs +++ b/plutus-pab/src/Cardano/Protocol/Socket/Mock/Server.hs @@ -11,7 +11,7 @@ module Cardano.Protocol.Socket.Mock.Server where import Cardano.BM.Data.Trace (Trace) -import Cardano.Node.Types (MockServerLogMsg (..)) +import Cardano.Node.Types (PABServerLogMsg (..)) import Data.ByteString.Lazy qualified as LBS import Data.List (intersect) import Data.Maybe (listToMaybe) @@ -144,7 +144,7 @@ pruneChain k original = do handleCommand :: MonadIO m - => Trace IO MockServerLogMsg + => Trace IO PABServerLogMsg -> CommandChannel -> MVar MockNodeServerChainState -> SlotConfig @@ -178,7 +178,7 @@ handleCommand trace CommandChannel {ccCommand, ccResponse} mvChainState slotCfg used to control the server -} runServerNode :: MonadIO m - => Trace IO MockServerLogMsg + => Trace IO PABServerLogMsg -> FilePath -> Integer -> MockNodeServerChainState diff --git a/plutus-pab/src/Cardano/Wallet/LocalClient.hs b/plutus-pab/src/Cardano/Wallet/LocalClient.hs index 5a000f8e1a..1bbcdb33ab 100644 --- a/plutus-pab/src/Cardano/Wallet/LocalClient.hs +++ b/plutus-pab/src/Cardano/Wallet/LocalClient.hs @@ -12,7 +12,7 @@ module Cardano.Wallet.LocalClient where import Cardano.Api qualified import Cardano.Api.NetworkId.Extra (NetworkIdWrapper (NetworkIdWrapper)) import Cardano.Api.Shelley qualified as Cardano.Api -import Cardano.Node.Types (MockServerConfig (mscNetworkId, mscPassphrase)) +import Cardano.Node.Types (PABServerConfig (pscNetworkId, pscPassphrase)) import Cardano.Wallet.Api qualified as C import Cardano.Wallet.Api.Client qualified as C import Cardano.Wallet.Api.Types (ApiVerificationKeyShelley (getApiVerificationKey), ApiWallet (assets, balance)) @@ -69,13 +69,13 @@ handleWalletClient , Member (Reader Cardano.Api.ProtocolParameters) effs , Member (LogMsg WalletClientMsg) effs ) - => MockServerConfig -- TODO: Rename. Not mock + => PABServerConfig -- TODO: Rename. Not mock -> Wallet -> WalletEffect ~> Eff effs handleWalletClient config (Wallet (WalletId walletId)) event = do - let NetworkIdWrapper networkId = mscNetworkId config - let mpassphrase = mscPassphrase config + let NetworkIdWrapper networkId = pscNetworkId config + let mpassphrase = pscPassphrase config clientEnv <- ask @ClientEnv protocolParams <- ask @Cardano.Api.ProtocolParameters let diff --git a/plutus-pab/src/Cardano/Wallet/RemoteClient.hs b/plutus-pab/src/Cardano/Wallet/RemoteClient.hs index 607fffa0d7..ef020645df 100644 --- a/plutus-pab/src/Cardano/Wallet/RemoteClient.hs +++ b/plutus-pab/src/Cardano/Wallet/RemoteClient.hs @@ -12,7 +12,7 @@ module Cardano.Wallet.RemoteClient import Cardano.Api.NetworkId.Extra (NetworkIdWrapper (NetworkIdWrapper)) import Cardano.Api.Shelley qualified as Cardano.Api -import Cardano.Node.Types (MockServerConfig (mscNetworkId)) +import Cardano.Node.Types (PABServerConfig (pscNetworkId)) import Control.Concurrent.STM qualified as STM import Control.Monad.Freer (Eff, LastMember, Member, type (~>)) import Control.Monad.Freer.Error (Error, throwError) @@ -40,12 +40,12 @@ handleWalletClient , Member (Reader Cardano.Api.ProtocolParameters) effs , Member (Reader InstancesState) effs ) - => MockServerConfig + => PABServerConfig -> Maybe ContractInstanceId -> WalletEffect ~> Eff effs handleWalletClient config cidM event = do - let NetworkIdWrapper networkId = mscNetworkId config + let NetworkIdWrapper networkId = pscNetworkId config protocolParams <- ask @Cardano.Api.ProtocolParameters case event of OwnPaymentPubKeyHash -> do diff --git a/plutus-pab/src/Plutus/PAB/App.hs b/plutus-pab/src/Plutus/PAB/App.hs index a73f579c82..44335db95b 100644 --- a/plutus-pab/src/Plutus/PAB/App.hs +++ b/plutus-pab/src/Plutus/PAB/App.hs @@ -35,8 +35,8 @@ import Cardano.BM.Trace (Trace, logDebug) import Cardano.ChainIndex.Types qualified as ChainIndex import Cardano.Node.Client (handleNodeClientClient) import Cardano.Node.Client qualified as NodeClient -import Cardano.Node.Types (MockServerConfig (MockServerConfig, mscBaseUrl, mscNetworkId, mscNodeMode, mscProtocolParametersJsonPath, mscSlotConfig, mscSocketPath), - NodeMode (AlonzoNode, MockNode)) +import Cardano.Node.Types (NodeMode (AlonzoNode, MockNode), + PABServerConfig (PABServerConfig, pscBaseUrl, pscNetworkId, pscNodeMode, pscProtocolParametersJsonPath, pscSlotConfig, pscSocketPath)) import Cardano.Protocol.Socket.Mock.Client qualified as MockClient import Cardano.Wallet.LocalClient qualified as LocalWalletClient import Cardano.Wallet.Mock.Client qualified as WalletMockClient @@ -123,10 +123,10 @@ appEffectHandlers storageBackend config trace BuiltinHandler{contractHandler} = EffectHandlers { initialiseEnvironment = do env <- liftIO $ mkEnv trace config - let Config { nodeServerConfig = MockServerConfig{mscSocketPath, mscSlotConfig, mscNodeMode, mscNetworkId = NetworkIdWrapper networkId} + let Config { nodeServerConfig = PABServerConfig{pscSocketPath, pscSlotConfig, pscNodeMode, pscNetworkId = NetworkIdWrapper networkId} , developmentOptions = DevelopmentOptions{pabRollbackHistory, pabResumeFrom} } = config instancesState <- liftIO $ STM.atomically Instances.emptyInstancesState - blockchainEnv <- liftIO $ BlockchainEnv.startNodeClient mscSocketPath mscNodeMode pabRollbackHistory mscSlotConfig networkId pabResumeFrom instancesState + blockchainEnv <- liftIO $ BlockchainEnv.startNodeClient pscSocketPath pscNodeMode pabRollbackHistory pscSlotConfig networkId pabResumeFrom instancesState pure (instancesState, blockchainEnv, env) , handleLogMessages = @@ -171,7 +171,7 @@ appEffectHandlers storageBackend config trace BuiltinHandler{contractHandler} = . reinterpret (Core.handleMappedReader @(AppEnv a) @MockClient.TxSendHandle txSendHandle) . interpret (Core.handleUserEnvReader @(Builtin a) @(AppEnv a)) . reinterpret (Core.handleMappedReader @(AppEnv a) @ClientEnv nodeClientEnv) - . reinterpretN @'[_, _, _, _] (handleNodeClientClient @IO $ mscSlotConfig $ nodeServerConfig config) + . reinterpretN @'[_, _, _, _] (handleNodeClientClient @IO $ pscSlotConfig $ nodeServerConfig config) -- handle 'ChainIndexEffect' . flip handleError (throwError . ChainIndexError) @@ -206,18 +206,18 @@ handleWalletEffect , Member (LogMsg WalletClientMsg) effs , Member (Reader InstancesState) effs ) - => MockServerConfig + => PABServerConfig -> Maybe ContractInstanceId -> Wallet -> WalletEffect ~> Eff effs -handleWalletEffect MockServerConfig { mscNodeMode = MockNode } _ w eff = do +handleWalletEffect PABServerConfig { pscNodeMode = MockNode } _ w eff = do clientEnvM <- ask @(Maybe ClientEnv) case clientEnvM of Nothing -> throwError RemoteWalletWithMockNodeError Just clientEnv -> runReader clientEnv $ WalletMockClient.handleWalletClient @IO w eff -handleWalletEffect nodeCfg@MockServerConfig { mscNodeMode = AlonzoNode } cidM w eff = do +handleWalletEffect nodeCfg@PABServerConfig { pscNodeMode = AlonzoNode } cidM w eff = do clientEnvM <- ask @(Maybe ClientEnv) case clientEnvM of Nothing -> RemoteWalletClient.handleWalletClient nodeCfg cidM eff @@ -251,19 +251,19 @@ data StorageBackend = BeamSqliteBackend | InMemoryBackend mkEnv :: Trace IO (PABLogMsg (Builtin a)) -> Config -> IO (AppEnv a) mkEnv appTrace appConfig@Config { dbConfig - , nodeServerConfig = MockServerConfig{mscBaseUrl, mscSocketPath, mscSlotConfig, mscProtocolParametersJsonPath} + , nodeServerConfig = PABServerConfig{pscBaseUrl, pscSocketPath, pscSlotConfig, pscProtocolParametersJsonPath} , walletServerConfig , chainIndexConfig } = do walletClientEnv <- maybe (pure Nothing) (fmap Just . clientEnv) $ preview Wallet._LocalWalletConfig walletServerConfig - nodeClientEnv <- clientEnv mscBaseUrl + nodeClientEnv <- clientEnv pscBaseUrl chainIndexEnv <- clientEnv (ChainIndex.ciBaseUrl chainIndexConfig) dbConnection <- dbConnect appTrace dbConfig - txSendHandle <- liftIO $ MockClient.runTxSender mscSocketPath + txSendHandle <- liftIO $ MockClient.runTxSender pscSocketPath -- This is for access to the slot number in the interpreter - chainSyncHandle <- Left <$> (liftIO $ MockClient.runChainSync' mscSocketPath mscSlotConfig) + chainSyncHandle <- Left <$> (liftIO $ MockClient.runChainSync' pscSocketPath pscSlotConfig) appInMemContractStore <- liftIO initialInMemInstances - protocolParameters <- maybe (pure def) readPP mscProtocolParametersJsonPath + protocolParameters <- maybe (pure def) readPP pscProtocolParametersJsonPath pure AppEnv {..} where clientEnv baseUrl = mkClientEnv <$> liftIO mkManager <*> pure (coerce baseUrl) @@ -276,7 +276,7 @@ mkEnv appTrace appConfig@Config { dbConfig bs <- BSL.readFile path case eitherDecode bs of Left err -> error $ "Error reading protocol parameters JSON file: " - ++ show mscProtocolParametersJsonPath ++ " (" ++ err ++ ")" + ++ show pscProtocolParametersJsonPath ++ " (" ++ err ++ ")" Right params -> pure params diff --git a/plutus-pab/src/Plutus/PAB/Core/ContractInstance/BlockchainEnv.hs b/plutus-pab/src/Plutus/PAB/Core/ContractInstance/BlockchainEnv.hs index b01ffc5122..6ea2f06850 100644 --- a/plutus-pab/src/Plutus/PAB/Core/ContractInstance/BlockchainEnv.hs +++ b/plutus-pab/src/Plutus/PAB/Core/ContractInstance/BlockchainEnv.hs @@ -46,7 +46,7 @@ import Plutus.Contract.CardanoAPI (fromCardanoTx) -- | Connect to the node and write node updates to the blockchain -- env. startNodeClient :: - FilePath -- ^ Socket to connect to node + FilePath -- ^ Socket to connect to node -> NodeMode -- ^ Whether to connect to real node or mock node -> Maybe Int -- ^ How much history do we remember for rollbacks -> SlotConfig -- ^ Slot config used by the node diff --git a/plutus-pab/local-cluster/Main.hs b/plutus-pab/src/Plutus/PAB/LocalCluster/Run.hs similarity index 86% rename from plutus-pab/local-cluster/Main.hs rename to plutus-pab/src/Plutus/PAB/LocalCluster/Run.hs index ae23913e6c..abce85fa83 100644 --- a/plutus-pab/local-cluster/Main.hs +++ b/plutus-pab/src/Plutus/PAB/LocalCluster/Run.hs @@ -1,5 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NumericUnderscores #-} @@ -8,7 +9,7 @@ {-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeApplications #-} -- | Start a local cluster of cardano nodes and PAB(s) -module Main where +module Plutus.PAB.LocalCluster.Run where import Cardano.Api qualified as CAPI import Cardano.Api.NetworkId.Extra (NetworkIdWrapper (NetworkIdWrapper)) @@ -22,7 +23,7 @@ import Cardano.CLI (LogOutput (LogToFile, LogToStdStreams), Port, ekgEnabled, ge import Cardano.ChainIndex.Types qualified as PAB.CI import Cardano.Launcher.Node (nodeSocketFile) import Cardano.Mnemonic (SomeMnemonic (SomeMnemonic)) -import Cardano.Node.Types (MockServerConfig (mscNetworkId, mscNodeMode, mscSocketPath), NodeMode (AlonzoNode)) +import Cardano.Node.Types (NodeMode (AlonzoNode), PABServerConfig (pscNetworkId, pscNodeMode, pscSocketPath)) import Cardano.Startup (installSignalHandlers, setDefaultFilePermissions, withUtf8Encoding) import Cardano.Wallet.Api.Client qualified as WalletClient import Cardano.Wallet.Api.Server (Listen (ListenOnPort)) @@ -44,14 +45,15 @@ import Cardano.Wallet.Shelley.Launch.Cluster (ClusterLog, Credential (KeyCredent tokenMetadataServerFromEnv, walletMinSeverityFromEnv, withCluster) import Cardano.Wallet.Types (WalletUrl (WalletUrl)) import Cardano.Wallet.Types qualified as Wallet.Config -import ContractExample (ExampleContracts) import Control.Arrow (first) import Control.Concurrent (threadDelay) import Control.Concurrent.Async (async) import Control.Lens (contramap, set, (&), (.~), (^.)) import Control.Monad (void, when) import Control.Tracer (traceWith) +import Data.Aeson (FromJSON, ToJSON) import Data.Default (Default (def)) +import Data.OpenApi.Schema qualified as OpenApi import Data.Proxy (Proxy (Proxy)) import Data.String (IsString (fromString)) import Data.Text (Text) @@ -63,7 +65,7 @@ import Plutus.ChainIndex.Config qualified as CI import Plutus.ChainIndex.Logging qualified as ChainIndex.Logging import Plutus.ChainIndex.Types (Point (..)) import Plutus.PAB.App (StorageBackend (BeamSqliteBackend)) -import Plutus.PAB.Effects.Contract.Builtin (handleBuiltin) +import Plutus.PAB.Effects.Contract.Builtin (BuiltinHandler, HasDefinitions) import Plutus.PAB.Run qualified as PAB.Run import Plutus.PAB.Run.Command (ConfigCommand (Migrate, PABWebserver)) import Plutus.PAB.Run.CommandParser (AppOpts (AppOpts, cmd, configPath, logConfigPath, minLogLevel, resumeFrom, rollbackHistory, runEkgServer, storageBackend)) @@ -71,6 +73,8 @@ import Plutus.PAB.Run.CommandParser qualified as PAB.Command import Plutus.PAB.Types (Config (chainIndexConfig, dbConfig, nodeServerConfig, walletServerConfig), DbConfig (dbConfigFile)) import Plutus.PAB.Types qualified as PAB.Config +import Prettyprinter (Pretty) +import Servant qualified import Servant.Client (BaseUrl (BaseUrl, baseUrlHost, baseUrlPath, baseUrlPort, baseUrlScheme), Scheme (Http), mkClientEnv, runClientM) import System.Directory (createDirectory) @@ -116,8 +120,19 @@ withLocalClusterSetup action = do action dir lops -main :: IO () -main = withLocalClusterSetup $ \dir lo@LogOutputs{loCluster} -> +runWith :: forall a. + ( Show a + , Ord a + , FromJSON a + , ToJSON a + , Pretty a + , Servant.MimeUnrender Servant.JSON a + , HasDefinitions a + , OpenApi.ToSchema a + ) + => BuiltinHandler a + -> IO () +runWith userContractHandler = withLocalClusterSetup $ \dir lo@LogOutputs{loCluster} -> withLoggingNamed "cluster" loCluster $ \(_, (_, trCluster)) -> do let tr' = contramap MsgCluster $ trMessageText trCluster clusterCfg <- localClusterConfigFromEnv @@ -143,7 +158,7 @@ main = withLocalClusterSetup $ \dir lo@LogOutputs{loCluster} -> let walletHost = "127.0.0.1" walletPort = 46493 - setupPABServices walletHost walletPort dir rn + setupPABServices userContractHandler walletHost walletPort dir rn ekgEnabled >>= flip when (EKG.plugin cfg tr sb >>= loadPlugin sb) @@ -178,11 +193,22 @@ main = withLocalClusterSetup $ \dir lo@LogOutputs{loCluster} -> newtype ChainIndexPort = ChainIndexPort Int -setupPABServices :: String -> Int -> FilePath -> RunningNode -> IO () -setupPABServices walletHost walletPort dir rn = void $ async $ do -- TODO: better types for arguments +setupPABServices + :: forall a. + ( Show a + , Ord a + , FromJSON a + , ToJSON a + , Pretty a + , Servant.MimeUnrender Servant.JSON a + , HasDefinitions a + , OpenApi.ToSchema a + ) + => BuiltinHandler a -> String -> Int -> FilePath -> RunningNode -> IO () +setupPABServices userContractHandler walletHost walletPort dir rn = void $ async $ do -- TODO: better types for arguments walletUrl <- restoreWallets walletHost walletPort chainIndexPort <- launchChainIndex dir rn - launchPAB fixturePassphrase dir walletUrl rn chainIndexPort + launchPAB userContractHandler fixturePassphrase dir walletUrl rn chainIndexPort {-| Launch the chain index in a separate thread. -} @@ -199,27 +225,38 @@ launchChainIndex dir (RunningNode socketPath _block0 (_gp, _vData)) = do {-| Launch the PAB in a separate thread. -} -launchPAB :: - Text -- ^ Passphrase +launchPAB + :: forall a. + ( Show a + , Ord a + , FromJSON a + , ToJSON a + , Pretty a + , Servant.MimeUnrender Servant.JSON a + , HasDefinitions a + , OpenApi.ToSchema a + ) + => BuiltinHandler a + -> Text -- ^ Passphrase -> FilePath -- ^ Temp directory -> BaseUrl -- ^ wallet url -> RunningNode -- ^ Socket path -> ChainIndexPort -- ^ Port of the chain index -> IO () -launchPAB passPhrase dir walletUrl (RunningNode socketPath _block0 (_gp, _vData)) (ChainIndexPort chainIndexPort) = do +launchPAB userContractHandler passPhrase dir walletUrl (RunningNode socketPath _block0 (_gp, _vData)) (ChainIndexPort chainIndexPort) = do let opts = AppOpts{minLogLevel = Nothing, logConfigPath = Nothing, configPath = Nothing, rollbackHistory = Nothing, resumeFrom = PointAtGenesis, runEkgServer = False, storageBackend = BeamSqliteBackend, cmd = PABWebserver, PAB.Command.passphrase = Just passPhrase} networkID = NetworkIdWrapper CAPI.Mainnet config = PAB.Config.defaultConfig - { nodeServerConfig = def{mscSocketPath=nodeSocketFile socketPath,mscNodeMode=AlonzoNode,mscNetworkId=networkID} + { nodeServerConfig = def{pscSocketPath=nodeSocketFile socketPath,pscNodeMode=AlonzoNode,pscNetworkId=networkID} , dbConfig = def{dbConfigFile = T.pack (dir "plutus-pab.db")} , chainIndexConfig = def{PAB.CI.ciBaseUrl = PAB.CI.ChainIndexUrl $ BaseUrl Http "localhost" chainIndexPort ""} , walletServerConfig = set (Wallet.Config.walletSettingsL . Wallet.Config.baseUrlL) (WalletUrl walletUrl) def } -- TODO: For some reason this has to be async - program terminates if it's done synchronously??? - void . async $ PAB.Run.runWithOpts @ExampleContracts handleBuiltin (Just config) opts{cmd=Migrate} + void . async $ PAB.Run.runWithOpts userContractHandler (Just config) opts{cmd=Migrate} sleep 2 - void . async $ PAB.Run.runWithOpts @ExampleContracts handleBuiltin (Just config) opts{cmd=PABWebserver} + void . async $ PAB.Run.runWithOpts userContractHandler (Just config) opts{cmd=PABWebserver} {-| Set up wallets -} @@ -278,3 +315,4 @@ instance HasSeverityAnnotation TestsLog where MsgSettingUpFaucet -> Notice MsgBaseUrl {} -> Notice MsgCluster msg -> getSeverityAnnotation msg + diff --git a/plutus-pab/src/Plutus/PAB/Monitoring/PABLogMsg.hs b/plutus-pab/src/Plutus/PAB/Monitoring/PABLogMsg.hs index 80ba5182f2..f60433b082 100644 --- a/plutus-pab/src/Plutus/PAB/Monitoring/PABLogMsg.hs +++ b/plutus-pab/src/Plutus/PAB/Monitoring/PABLogMsg.hs @@ -13,7 +13,7 @@ module Plutus.PAB.Monitoring.PABLogMsg( PABLogMsg(..), ChainIndexServerMsg, WalletMsg, - MockServerLogMsg, + PABServerLogMsg, AppMsg(..), CoreMsg(..), PABMultiAgentMsg(..), @@ -24,7 +24,7 @@ module Plutus.PAB.Monitoring.PABLogMsg( import Cardano.BM.Data.Tracer (ToObject (..), TracingVerbosity (..)) import Cardano.BM.Data.Tracer.Extras (StructuredLog, Tagged (..), mkObjectStr) import Cardano.ChainIndex.Types (ChainIndexServerMsg) -import Cardano.Node.Types (MockServerLogMsg) +import Cardano.Node.Types (PABServerLogMsg) import Cardano.Wallet.Mock.Types (WalletMsg) import Control.Monad.Freer.Extras.Beam (BeamLog) import Data.Aeson (FromJSON, ToJSON, Value) @@ -82,7 +82,7 @@ data PABLogMsg t = SCoreMsg (CoreMsg t) | SChainIndexServerMsg ChainIndexServerMsg | SWalletMsg WalletMsg - | SMockserverLogMsg MockServerLogMsg + | SMockserverLogMsg PABServerLogMsg | SMultiAgent (PABMultiAgentMsg t) deriving stock (Generic) @@ -179,7 +179,7 @@ instance Pretty (ContractDef t) => Pretty (PABMultiAgentMsg t) where UserLog m -> pretty m BeamLogItem b -> pretty b RestoringPABState -> "Restoring PAB state ..." - PABStateRestored 0 -> "No constract instance were restored in the PAB state." + PABStateRestored 0 -> "No contract instance were restored in the PAB state." PABStateRestored 1 -> "PAB state restored with 1 contract instance." PABStateRestored n -> "PAB state restored with" <+> pretty n diff --git a/plutus-pab/src/Plutus/PAB/Run.hs b/plutus-pab/src/Plutus/PAB/Run.hs index 5fc4254a2f..64662ef39c 100644 --- a/plutus-pab/src/Plutus/PAB/Run.hs +++ b/plutus-pab/src/Plutus/PAB/Run.hs @@ -19,7 +19,7 @@ import Cardano.BM.Configuration.Model qualified as CM import Cardano.BM.Data.Trace (Trace) import Cardano.BM.Plugin (loadPlugin) import Cardano.BM.Setup (setupTrace_) -import Cardano.Node.Types (mscPassphrase) +import Cardano.Node.Types (pscPassphrase) import Control.Applicative (Alternative ((<|>))) import Control.Concurrent.Availability (newToken) import Control.Monad (when) @@ -36,7 +36,6 @@ import Plutus.PAB.Monitoring.Config (defaultConfig, loadConfig) import Plutus.PAB.Monitoring.PABLogMsg (AppMsg (..)) import Plutus.PAB.Run.Cli import Plutus.PAB.Run.CommandParser -import Plutus.PAB.Run.PSGenerator (HasPSTypes) import Plutus.PAB.Types (Config (..), DevelopmentOptions (..), PABError (MissingConfigFileOption)) import Prettyprinter (Pretty (pretty)) import Servant qualified @@ -51,7 +50,6 @@ runWith :: forall a. , Pretty a , Servant.MimeUnrender Servant.JSON a , HasDefinitions a - , HasPSTypes a , OpenApi.ToSchema a ) => BuiltinHandler a -- ^ Builtin contract handler. Can be created with 'Plutus.PAB.Effects.Contract.Builtin.handleBuiltin'. @@ -69,7 +67,6 @@ runWithOpts :: forall a. , Pretty a , Servant.MimeUnrender Servant.JSON a , HasDefinitions a - , HasPSTypes a , OpenApi.ToSchema a ) => BuiltinHandler a @@ -98,7 +95,7 @@ runWithOpts userContractHandler mc AppOpts { minLogLevel, rollbackHistory, resum let mkArgs config@Config{nodeServerConfig, developmentOptions} = ConfigCommandArgs { ccaTrace = convertLog PrettyObject trace , ccaLoggingConfig = logConfig - , ccaPABConfig = config { nodeServerConfig = nodeServerConfig { mscPassphrase = passphrase <|> mscPassphrase nodeServerConfig } + , ccaPABConfig = config { nodeServerConfig = nodeServerConfig { pscPassphrase = passphrase <|> pscPassphrase nodeServerConfig } , developmentOptions = developmentOptions { pabRollbackHistory = rollbackHistory <|> pabRollbackHistory developmentOptions , pabResumeFrom = max resumeFrom (pabResumeFrom developmentOptions) } } diff --git a/plutus-pab/src/Plutus/PAB/Run/Cli.hs b/plutus-pab/src/Plutus/PAB/Run/Cli.hs index d53cf5f17b..61ee02b529 100644 --- a/plutus-pab/src/Plutus/PAB/Run/Cli.hs +++ b/plutus-pab/src/Plutus/PAB/Run/Cli.hs @@ -5,7 +5,6 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} -{-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} @@ -15,19 +14,18 @@ {-# LANGUAGE StrictData #-} {-# LANGUAGE TypeApplications #-} -module Plutus.PAB.Run.Cli (ConfigCommandArgs(..), runConfigCommand, runNoConfigCommand) where +module Plutus.PAB.Run.Cli (ConfigCommandArgs(..), runConfigCommand) where ----------------------------------------------------------------------------------------------------------------------- -- Command interpretation ----------------------------------------------------------------------------------------------------------------------- import Cardano.BM.Configuration (Configuration) -import Cardano.BM.Configuration.Model qualified as CM import Cardano.BM.Data.Trace (Trace) import Cardano.ChainIndex.Server qualified as ChainIndex import Cardano.Node.Server qualified as NodeServer -import Cardano.Node.Types (MockServerConfig (mscFeeConfig, mscNodeMode, mscSlotConfig, mscSocketPath), - NodeMode (AlonzoNode, MockNode)) +import Cardano.Node.Types (NodeMode (AlonzoNode, MockNode), + PABServerConfig (pscFeeConfig, pscNodeMode, pscSlotConfig, pscSocketPath)) import Cardano.Wallet.Mock.Server qualified as WalletServer import Cardano.Wallet.Mock.Types (WalletMsg) import Cardano.Wallet.Types (WalletConfig (LocalWalletConfig, RemoteWalletConfig)) @@ -63,10 +61,7 @@ import Plutus.PAB.Db.Beam qualified as Beam import Plutus.PAB.Effects.Contract qualified as Contract import Plutus.PAB.Effects.Contract.Builtin (Builtin, BuiltinHandler, HasDefinitions, SomeBuiltinState, getResponse) import Plutus.PAB.Monitoring.Monitoring qualified as LM -import Plutus.PAB.Run.Command (ConfigCommand (ChainIndex, ContractState, ForkCommands, Migrate, MockWallet, PABWebserver, PSApiGenerator, ReportActiveContracts, ReportAvailableContracts, ReportContractHistory, StartMockNode, psApiGenOutputDir), - NoConfigCommand (PSGenerator, WriteDefaultConfig, outputFile, psGenOutputDir)) -import Plutus.PAB.Run.PSGenerator (HasPSTypes) -import Plutus.PAB.Run.PSGenerator qualified as PSGenerator +import Plutus.PAB.Run.Command (ConfigCommand (ChainIndex, ContractState, ForkCommands, Migrate, MockWallet, PABWebserver, ReportActiveContracts, ReportAvailableContracts, ReportContractHistory, StartNode)) import Plutus.PAB.Types (Config (Config, dbConfig, pabWebserverConfig), chainIndexConfig, nodeServerConfig, walletServerConfig) import Plutus.PAB.Webserver.Server qualified as PABServer @@ -78,18 +73,6 @@ import System.Exit (ExitCode (ExitFailure), exitWith) import Wallet.Emulator.Wallet qualified as Wallet import Wallet.Types qualified as Wallet -runNoConfigCommand :: - NoConfigCommand - -> IO () -runNoConfigCommand = \case - - -- Generate PureScript bridge code - PSGenerator {psGenOutputDir} -> do - PSGenerator.generateDefault psGenOutputDir - - -- Get default logging configuration - WriteDefaultConfig{outputFile} -> LM.defaultConfig >>= flip CM.exportConfiguration outputFile - data ConfigCommandArgs a = ConfigCommandArgs { ccaTrace :: Trace IO (LM.AppMsg (Builtin a)) -- ^ PAB Tracer logging instance @@ -109,7 +92,6 @@ runConfigCommand :: forall a. , Pretty a , Servant.MimeUnrender Servant.JSON a , HasDefinitions a - , HasPSTypes a , OpenApi.ToSchema a ) => BuiltinHandler a @@ -126,9 +108,9 @@ runConfigCommand _ ConfigCommandArgs{ccaTrace, ccaPABConfig = Config {nodeServer liftIO $ WalletServer.main (toWalletLog ccaTrace) ws - (mscFeeConfig nodeServerConfig) - (mscSocketPath nodeServerConfig) - (mscSlotConfig nodeServerConfig) + (pscFeeConfig nodeServerConfig) + (pscSocketPath nodeServerConfig) + (pscSlotConfig nodeServerConfig) (ChainIndex.ciBaseUrl chainIndexConfig) ccaAvailability @@ -137,8 +119,8 @@ runConfigCommand _ ConfigCommandArgs{ccaPABConfig = Config {walletServerConfig = error "Plutus.PAB.Run.Cli.runConfigCommand: Can't run mock wallet in remote wallet config." -- Run mock node server -runConfigCommand _ ConfigCommandArgs{ccaTrace, ccaPABConfig = Config {nodeServerConfig},ccaAvailability} StartMockNode = - case mscNodeMode nodeServerConfig of +runConfigCommand _ ConfigCommandArgs{ccaTrace, ccaPABConfig = Config {nodeServerConfig},ccaAvailability} StartNode = + case pscNodeMode nodeServerConfig of MockNode -> do liftIO $ NodeServer.main (toMockNodeServerLog ccaTrace) @@ -187,8 +169,7 @@ runConfigCommand contractHandler ConfigCommandArgs{ccaTrace, ccaPABConfig=config logInfo @(LM.PABMultiAgentMsg (Builtin a)) (LM.PABStateRestored $ length ts) -- then, actually start the server. - let walletClientEnv = App.walletClientEnv (Core.appEnv env) - (mvar, _) <- PABServer.startServer pabWebserverConfig (Left walletClientEnv) ccaAvailability + (mvar, _) <- PABServer.startServer pabWebserverConfig ccaAvailability liftIO $ takeMVar mvar either handleError return result where @@ -197,12 +178,20 @@ runConfigCommand contractHandler ConfigCommandArgs{ccaTrace, ccaPABConfig=config exitWith (ExitFailure 2) -- Fork a list of commands -runConfigCommand contractHandler c@ConfigCommandArgs{ccaAvailability} (ForkCommands commands) = - void $ do - threads <- traverse forkCommand commands - putStrLn "Started all commands." - waitAny threads +runConfigCommand contractHandler c@ConfigCommandArgs{ccaAvailability, ccaPABConfig=Config {nodeServerConfig} } (ForkCommands commands) = + let shouldStartMocks = case pscNodeMode nodeServerConfig of + MockNode -> True + AlonzoNode -> False + in void $ do + threads <- traverse forkCommand + $ filter (mockedServices shouldStartMocks) commands + putStrLn "Started all commands." + waitAny threads where + mockedServices :: Bool -> ConfigCommand -> Bool + mockedServices shouldStartMocks ChainIndex = shouldStartMocks + mockedServices shouldStartMocks MockWallet = shouldStartMocks + mockedServices _ _ = True forkCommand :: ConfigCommand -> IO (Async ()) forkCommand subcommand = do putStrLn $ "Starting: " <> show subcommand @@ -216,8 +205,8 @@ runConfigCommand _ ConfigCommandArgs{ccaTrace, ccaPABConfig=Config { nodeServerC ChainIndex.main (toChainIndexLog ccaTrace) chainIndexConfig - (mscSocketPath nodeServerConfig) - (mscSlotConfig nodeServerConfig) + (pscSocketPath nodeServerConfig) + (pscSlotConfig nodeServerConfig) -- Get the state of a contract runConfigCommand _ ConfigCommandArgs{ccaTrace, ccaPABConfig=Config{dbConfig}} (ContractState contractInstanceId) = do @@ -273,10 +262,6 @@ runConfigCommand _ ConfigCommandArgs{ccaTrace, ccaPABConfig=Config{dbConfig}} (R logStep response = logInfo @(LM.AppMsg (Builtin a)) $ LM.ContractHistoryItem contractInstanceId (snd <$> response) -runConfigCommand _ _ PSApiGenerator {psApiGenOutputDir} = do - PSGenerator.generateAPIModule (Proxy @a) psApiGenOutputDir - PSGenerator.generateWith @a psApiGenOutputDir - toPABMsg :: Trace m (LM.AppMsg (Builtin a)) -> Trace m (LM.PABLogMsg (Builtin a)) toPABMsg = LM.convertLog LM.PABMsg @@ -286,7 +271,7 @@ toChainIndexLog = LM.convertLog $ LM.PABMsg . LM.SChainIndexServerMsg toWalletLog :: Trace m (LM.AppMsg (Builtin a)) -> Trace m WalletMsg toWalletLog = LM.convertLog $ LM.PABMsg . LM.SWalletMsg -toMockNodeServerLog :: Trace m (LM.AppMsg (Builtin a)) -> Trace m LM.MockServerLogMsg +toMockNodeServerLog :: Trace m (LM.AppMsg (Builtin a)) -> Trace m LM.PABServerLogMsg toMockNodeServerLog = LM.convertLog $ LM.PABMsg . LM.SMockserverLogMsg -- | Wait for some time to allow all log messages to be printed to diff --git a/plutus-pab/src/Plutus/PAB/Run/Command.hs b/plutus-pab/src/Plutus/PAB/Run/Command.hs index 4be9ba8e44..e936151fe2 100644 --- a/plutus-pab/src/Plutus/PAB/Run/Command.hs +++ b/plutus-pab/src/Plutus/PAB/Run/Command.hs @@ -10,7 +10,6 @@ module Plutus.PAB.Run.Command ( ConfigCommand(..) - , NoConfigCommand(..) , allServices ) where @@ -21,7 +20,7 @@ import Wallet.Types (ContractInstanceId) -- | A command for which a config.yaml file is required data ConfigCommand = Migrate - | StartMockNode -- ^ Run the mock node service + | StartNode -- ^ Run the mock node service | MockWallet -- ^ Run the mock wallet service | ChainIndex -- ^ Run the chain index service | ForkCommands [ConfigCommand] -- ^ Fork a list of commands @@ -30,9 +29,6 @@ data ConfigCommand = | ReportAvailableContracts -- ^ Get all available contracts | ReportActiveContracts -- ^ Get active contracts | PABWebserver -- ^ Run the PAB webserver - | PSApiGenerator -- ^ Generate purescript bridge code - { psApiGenOutputDir :: !FilePath -- ^ Path to write generated code to - } deriving stock (Show, Eq, Generic) deriving anyclass JSON.ToJSON @@ -41,19 +37,8 @@ data ConfigCommand = allServices :: ConfigCommand allServices = ForkCommands - [ StartMockNode + [ StartNode , MockWallet , PABWebserver , ChainIndex ] - - -data NoConfigCommand = - PSGenerator -- ^ Generate purescript bridge code - { psGenOutputDir :: !FilePath -- ^ Path to write generated code to - } - | WriteDefaultConfig -- ^ Write default logging configuration - { outputFile :: !FilePath -- ^ Path to write configuration to - } - deriving stock (Show, Eq, Generic) - deriving anyclass JSON.ToJSON diff --git a/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs b/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs index 1cba5efa15..482c8fd8a2 100644 --- a/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs +++ b/plutus-pab/src/Plutus/PAB/Run/CommandParser.hs @@ -159,7 +159,6 @@ commandParser = , reportAvailableContractsParser ])) (fullDesc <> progDesc "Manage your smart contracts.")) - , psGeneratorCommandParser ] migrationParser :: Mod CommandFields ConfigCommand @@ -168,22 +167,11 @@ migrationParser = flip info (fullDesc <> progDesc "Update the database with the latest schema.") $ pure Migrate -psGeneratorCommandParser :: Mod CommandFields ConfigCommand -psGeneratorCommandParser = - command "psapigenerator" $ - flip info (fullDesc <> progDesc "Generate the frontend's PureScript files for the webserver API.") $ do - psApiGenOutputDir <- - argument - str - (metavar "OUTPUT_DIR" <> - help "Output directory to write PureScript files to.") - pure $ PSApiGenerator {psApiGenOutputDir} - mockNodeParser :: Mod CommandFields ConfigCommand mockNodeParser = command "node-server" $ info - (pure StartMockNode) + (pure StartNode) (fullDesc <> progDesc "Run a mock version of the Cardano node API server.") mockWalletParser :: Mod CommandFields ConfigCommand @@ -204,7 +192,7 @@ allServersParser = command "all-servers" $ flip info (fullDesc <> progDesc "Run all the mock servers needed.") $ do pure (ForkCommands - [ StartMockNode + [ StartNode , MockWallet , PABWebserver , ChainIndex diff --git a/plutus-pab/src/Plutus/PAB/Types.hs b/plutus-pab/src/Plutus/PAB/Types.hs index de4524b838..aa756ef641 100644 --- a/plutus-pab/src/Plutus/PAB/Types.hs +++ b/plutus-pab/src/Plutus/PAB/Types.hs @@ -12,7 +12,7 @@ module Plutus.PAB.Types where import Cardano.ChainIndex.Types qualified as ChainIndex -import Cardano.Node.Types (MockServerConfig) +import Cardano.Node.Types (PABServerConfig) import Cardano.Wallet.Types qualified as Wallet import Control.Lens.TH (makePrisms) import Control.Monad.Freer.Extras.Beam (BeamError) @@ -115,7 +115,7 @@ data Config = Config { dbConfig :: DbConfig , walletServerConfig :: Wallet.WalletConfig - , nodeServerConfig :: MockServerConfig + , nodeServerConfig :: PABServerConfig , pabWebserverConfig :: WebserverConfig , chainIndexConfig :: ChainIndex.ChainIndexConfig , requestProcessingConfig :: RequestProcessingConfig diff --git a/plutus-pab/src/Plutus/PAB/Webserver/API.hs b/plutus-pab/src/Plutus/PAB/Webserver/API.hs index ab9b5c1e97..3a6ed5028c 100644 --- a/plutus-pab/src/Plutus/PAB/Webserver/API.hs +++ b/plutus-pab/src/Plutus/PAB/Webserver/API.hs @@ -6,11 +6,9 @@ module Plutus.PAB.Webserver.API ( API , WSAPI - , WalletProxy , SwaggerAPI ) where -import Cardano.Wallet.Mock.API qualified as Wallet import Data.Aeson qualified as JSON import Data.Text (Text) import Plutus.PAB.Webserver.Types (ContractActivationArgs, ContractInstanceClientState, ContractSignatureResponse, @@ -20,9 +18,6 @@ import Servant.API.WebSocket (WebSocketPending) import Servant.Swagger.UI (SwaggerSchemaUI) import Wallet.Types (ContractInstanceId) --- TODO: This wallet proxy will be eventually removed. See SCP-3096. -type WalletProxy walletId = "wallet" :> Wallet.API walletId - type WSAPI = "ws" :> (Capture "contract-instance-id" ContractInstanceId :> WebSocketPending -- Websocket for a specific contract instance diff --git a/plutus-pab/src/Plutus/PAB/Webserver/Handler.hs b/plutus-pab/src/Plutus/PAB/Webserver/Handler.hs index eb24c388b7..681213eb6a 100644 --- a/plutus-pab/src/Plutus/PAB/Webserver/Handler.hs +++ b/plutus-pab/src/Plutus/PAB/Webserver/Handler.hs @@ -17,51 +17,38 @@ module Plutus.PAB.Webserver.Handler ( apiHandler , swagger - , walletProxy - , walletProxyClientEnv -- * Reports , getFullReport , contractSchema ) where -import Cardano.Wallet.Mock.Client qualified as Wallet.Client -import Cardano.Wallet.Mock.Types (WalletInfo (WalletInfo, wiPaymentPubKeyHash, wiWallet)) import Control.Lens (preview) import Control.Monad (join) -import Control.Monad.Freer (sendM) import Control.Monad.Freer.Error (throwError) -import Control.Monad.IO.Class (MonadIO (liftIO)) import Data.Aeson qualified as JSON -import Data.Either (fromRight) import Data.Foldable (traverse_) import Data.Map qualified as Map import Data.Maybe (fromMaybe, mapMaybe) import Data.OpenApi.Schema (ToSchema) import Data.Proxy (Proxy (Proxy)) import Data.Text (Text) -import Ledger (Value) -import Ledger.Constraints.OffChain (UnbalancedTx) -import Ledger.Tx (Tx) import Plutus.Contract.Effects (PABReq, _ExposeEndpointReq) import Plutus.Contract.Wallet (ExportTx) import Plutus.PAB.Core (PABAction) import Plutus.PAB.Core qualified as Core import Plutus.PAB.Effects.Contract qualified as Contract import Plutus.PAB.Events.ContractInstanceState (PartiallyDecodedResponse (hooks), fromResp) -import Plutus.PAB.Types (PABError (ContractInstanceNotFound, EndpointCallError, WalletClientError)) +import Plutus.PAB.Types (PABError (ContractInstanceNotFound, EndpointCallError)) import Plutus.PAB.Webserver.API (API) import Plutus.PAB.Webserver.Types (ContractActivationArgs (ContractActivationArgs, caID, caWallet), ContractInstanceClientState (ContractInstanceClientState, cicContract, cicCurrentState, cicDefinition, cicStatus, cicWallet, cicYieldedExportTxs), ContractReport (ContractReport, crActiveContractStates, crAvailableContracts), ContractSignatureResponse (ContractSignatureResponse), FullReport (FullReport, chainReport, contractReport), emptyChainReport) -import Servant (NoContent (NoContent), (:<|>) ((:<|>))) -import Servant.Client (ClientEnv, ClientM, runClientM) +import Servant ((:<|>) ((:<|>))) import Servant.OpenApi (toOpenApi) import Servant.Server qualified as Servant import Servant.Swagger.UI (SwaggerSchemaUI', swaggerSchemaUIServer) -import Wallet.Effects qualified -import Wallet.Emulator.Error (WalletAPIError) import Wallet.Emulator.Wallet (Wallet (Wallet), WalletId, knownWallet) import Wallet.Types (ContractActivityStatus, ContractInstanceId, parseContractActivityStatus) @@ -194,48 +181,3 @@ availableContracts = do shutdown :: forall t env. ContractInstanceId -> PABAction t env () shutdown = Core.stopInstance - --- | Proxy for the wallet API -walletProxyClientEnv :: - forall t env. - ClientEnv -> - (PABAction t env WalletInfo -- Create new wallet - :<|> (WalletId -> Tx -> PABAction t env NoContent) -- Submit txn - :<|> (WalletId -> PABAction t env WalletInfo) - :<|> (WalletId -> UnbalancedTx -> PABAction t env (Either WalletAPIError Tx)) - :<|> (WalletId -> PABAction t env Value) - :<|> (WalletId -> Tx -> PABAction t env Tx)) -walletProxyClientEnv clientEnv = - let createWallet = runWalletClientM clientEnv Wallet.Client.createWallet - in walletProxy createWallet - --- | Run a 'ClientM' action against a remote host using the given 'ClientEnv'. -runWalletClientM :: forall t env a. ClientEnv -> ClientM a -> PABAction t env a -runWalletClientM clientEnv action = do - x <- sendM $ liftIO $ runClientM action clientEnv - case x of - Left err -> throwError @PABError (WalletClientError err) - Right result -> pure result - --- | Proxy for the wallet API -walletProxy :: - forall t env. - PABAction t env WalletInfo -> -- default action for creating a new wallet - (PABAction t env WalletInfo -- Create new wallet - :<|> (WalletId -> Tx -> PABAction t env NoContent) -- Submit txn - :<|> (WalletId -> PABAction t env WalletInfo) - :<|> (WalletId -> UnbalancedTx -> PABAction t env (Either WalletAPIError Tx)) - :<|> (WalletId -> PABAction t env Value) - :<|> (WalletId -> Tx -> PABAction t env Tx)) -walletProxy createNewWallet = - createNewWallet - :<|> (\w tx -> fmap (const NoContent) (Core.handleAgentThread (Wallet w) Nothing $ Wallet.Effects.submitTxn $ Right tx)) - :<|> (\w -> (\pkh -> WalletInfo{wiWallet=Wallet w, wiPaymentPubKeyHash = pkh }) - <$> Core.handleAgentThread (Wallet w) Nothing Wallet.Effects.ownPaymentPubKeyHash) - :<|> (\w -> fmap (fmap (fromRight (error "Plutus.PAB.Webserver.Handler: Expecting a mock tx, not an Alonzo tx when submitting it."))) - . Core.handleAgentThread (Wallet w) Nothing . Wallet.Effects.balanceTx) - :<|> (\w -> Core.handleAgentThread (Wallet w) Nothing Wallet.Effects.totalFunds) - :<|> (\w tx -> fmap (fromRight (error "Plutus.PAB.Webserver.Handler: Expecting a mock tx, not an Alonzo tx when adding a signature.")) - $ Core.handleAgentThread (Wallet w) Nothing - $ Wallet.Effects.walletAddSignature - $ Right tx) diff --git a/plutus-pab/src/Plutus/PAB/Webserver/Server.hs b/plutus-pab/src/Plutus/PAB/Webserver/Server.hs index b4cddfd5ed..cb7a08e345 100644 --- a/plutus-pab/src/Plutus/PAB/Webserver/Server.hs +++ b/plutus-pab/src/Plutus/PAB/Webserver/Server.hs @@ -18,7 +18,6 @@ module Plutus.PAB.Webserver.Server , startServerDebug' ) where -import Cardano.Wallet.Mock.Types (WalletInfo (WalletInfo, wiPaymentPubKeyHash, wiWallet)) import Control.Concurrent (MVar, forkFinally, forkIO, newEmptyMVar, putMVar) import Control.Concurrent.Availability (Availability, available, newToken) import Control.Concurrent.STM qualified as STM @@ -42,16 +41,15 @@ import Plutus.PAB.Core qualified as Core import Plutus.PAB.Effects.Contract qualified as Contract import Plutus.PAB.Monitoring.PABLogMsg qualified as LM import Plutus.PAB.Simulator (Simulation) -import Plutus.PAB.Simulator qualified as Simulator import Plutus.PAB.Types (PABError, WebserverConfig (WebserverConfig, endpointTimeout, permissiveCorsPolicy, staticDir), baseUrl, defaultWebServerConfig) -import Plutus.PAB.Webserver.API (API, SwaggerAPI, WSAPI, WalletProxy) -import Plutus.PAB.Webserver.Handler (apiHandler, swagger, walletProxy, walletProxyClientEnv) +import Plutus.PAB.Webserver.API (API, SwaggerAPI, WSAPI) +import Plutus.PAB.Webserver.Handler (apiHandler, swagger) import Plutus.PAB.Webserver.WebSocket qualified as WS import Servant (Application, Handler (Handler), Raw, ServerT, err500, errBody, hoistServer, serve, serveDirectoryFileServer, (:<|>) ((:<|>))) import Servant qualified -import Servant.Client (BaseUrl (baseUrlPort), ClientEnv) +import Servant.Client (BaseUrl (baseUrlPort)) import Wallet.Emulator.Wallet (WalletId) asHandler :: forall t env a. PABRunner t env -> PABAction t env a -> Handler a @@ -74,10 +72,9 @@ app :: , OpenApi.ToSchema (Contract.ContractDef t) ) => Maybe FilePath - -> Either (Maybe ClientEnv) (PABAction t env WalletInfo) -- ^ wallet client (if wallet proxy is enabled) -> PABRunner t env -> Application -app fp walletClient pabRunner = do +app fp pabRunner = do let apiServer :: ServerT (CombinedAPI t) Handler apiServer = Servant.hoistServer @@ -87,33 +84,12 @@ app fp walletClient pabRunner = do case fp of Nothing -> do - let wpM = either (fmap walletProxyClientEnv) (Just . walletProxy) walletClient - case wpM of - Nothing -> do - Servant.serve (Proxy @(CombinedAPI t)) apiServer - Just wp -> do - let wpServer = - Servant.hoistServer - (Proxy @(WalletProxy WalletId)) - (asHandler pabRunner) - wp - rest = Proxy @(CombinedAPI t :<|> WalletProxy WalletId) - Servant.serve rest (apiServer :<|> wpServer) + Servant.serve (Proxy @(CombinedAPI t)) apiServer Just filePath -> do let fileServer :: ServerT Raw Handler fileServer = serveDirectoryFileServer filePath - case either (fmap walletProxyClientEnv) (Just . walletProxy) walletClient of - Nothing -> do - Servant.serve (Proxy @(CombinedAPI t :<|> Raw)) (apiServer :<|> fileServer) - Just wp -> do - let wpServer = - Servant.hoistServer - (Proxy @(WalletProxy WalletId)) - (asHandler pabRunner) - wp - rest = Proxy @(CombinedAPI t :<|> WalletProxy WalletId :<|> Raw) - Servant.serve rest (apiServer :<|> wpServer :<|> fileServer) + Servant.serve (Proxy @(CombinedAPI t :<|> Raw)) (apiServer :<|> fileServer) -- | Start the server using the config. Returns an action that shuts it down -- again, and an MVar that is filled when the webserver @@ -127,14 +103,12 @@ startServer :: , OpenApi.ToSchema (Contract.ContractDef t) ) => WebserverConfig -- ^ Optional file path for static assets - -> Either (Maybe ClientEnv) (PABAction t env WalletInfo) - -- ^ How to generate a new wallet, either by proxying the request to the wallet API, or by running the PAB action -> Availability -> PABAction t env (MVar (), PABAction t env ()) -startServer WebserverConfig{baseUrl, staticDir, permissiveCorsPolicy, endpointTimeout} walletClient availability = do +startServer WebserverConfig{baseUrl, staticDir, permissiveCorsPolicy, endpointTimeout} availability = do when permissiveCorsPolicy $ logWarn @(LM.PABMultiAgentMsg t) (LM.UserLog "Warning: Using a very permissive CORS policy! *Any* website serving JavaScript can interact with these endpoints.") - startServer' middlewares (baseUrlPort baseUrl) walletClient staticDir availability (timeout endpointTimeout) + startServer' middlewares (baseUrlPort baseUrl) staticDir availability (timeout endpointTimeout) where middlewares = if permissiveCorsPolicy then corsMiddlewares else [] corsMiddlewares = @@ -163,12 +137,11 @@ startServer' :: ) => [Middleware] -- ^ Optional wai middleware -> Int -- ^ Port - -> Either (Maybe ClientEnv) (PABAction t env WalletInfo) -- ^ How to generate a new wallet, either by proxying the request to the wallet API, or by running the PAB action -> Maybe FilePath -- ^ Optional file path for static assets -> Availability -> Int -> PABAction t env (MVar (), PABAction t env ()) -startServer' waiMiddlewares port walletClient staticPath availability timeout = do +startServer' waiMiddlewares port staticPath availability timeout = do simRunner <- Core.pabRunner shutdownVar <- liftIO $ STM.atomically $ STM.newEmptyTMVar @() mvar <- liftIO newEmptyMVar @@ -190,7 +163,7 @@ startServer' waiMiddlewares port walletClient staticPath availability timeout = void $ liftIO $ forkFinally (Warp.runSettings warpSettings $ middleware - $ app staticPath walletClient simRunner) + $ app staticPath simRunner) (\_ -> putMVar mvar ()) pure (mvar, liftIO $ STM.atomically $ STM.putTMVar shutdownVar ()) @@ -219,7 +192,4 @@ startServerDebug' :: -> Simulation t (Simulation t ()) startServerDebug' conf = do tk <- newToken - let mkWalletInfo = do - (wllt, pk) <- Simulator.addWallet - pure $ WalletInfo{wiWallet = wllt, wiPaymentPubKeyHash = pk} - snd <$> startServer conf (Right mkWalletInfo) tk + snd <$> startServer conf tk diff --git a/plutus-pab/test/README.md b/plutus-pab/test/README.md index c12a5f0461..6a477dc1b5 100644 --- a/plutus-pab/test/README.md +++ b/plutus-pab/test/README.md @@ -1,6 +1,5 @@ # plutus-pab tests -There are two test suites in `plutus-pab.cabal`: +There is a test suite in `plutus-pab.cabal`: -* `plutus-pab-test-full` has the main PAB tests (for `Plutus.PAB.Core` and related modules). It depends on `plutus-use-cases`. * `plutus-pab-test-light` has some tests that don't depend on `plutus-use-cases` \ No newline at end of file diff --git a/plutus-playground-client/README.md b/plutus-playground-client/README.md index 7f9f9f1f9d..c63ffbab74 100644 --- a/plutus-playground-client/README.md +++ b/plutus-playground-client/README.md @@ -3,7 +3,7 @@ simulate Plutus Applications. ## Getting started -The Plutus Playground is written in [PureScript](https://www.purescript.org/) and uses npm and [spago](https://github.com/purescript/spago) for managing dependencies. It talks to the [plutus-playground-server](https://github.com/input-output-hk/plutus/tree/master/plutus-playground-server) which also needs to be up and running during development. The client build also depends on purescript files that are generated by the backend service using [purescript-bridge](https://github.com/eskimor/purescript-bridge). +The Plutus Playground is written in [PureScript](https://www.purescript.org/) and uses npm and [spago](https://github.com/purescript/spago) for managing dependencies. It talks to the [plutus-playground-server](https://github.com/input-output-hk/plutus-apps/tree/master/plutus-playground-server) which also needs to be up and running during development. The client build also depends on purescript files that are generated by the backend service using [purescript-bridge](https://github.com/eskimor/purescript-bridge). **Note**: _The workflow described here relies heavily on Nix. This means you should either be working inside a nix-shell environment or use tools such as [lorri](https://github.com/target/lorri) or [nix-direnv](https://github.com/nix-community/nix-direnv) or similar to provide a suitable environment._ @@ -14,7 +14,7 @@ $ plutus-playground-server ``` The `plutus-playground-server` script is provided by the global [shell.nix](../shell.nix) and starts the server (If the command -is not available make sure you are in a nix-shell session or that lorri is ready). For additional information on invoking the backend server please refer to its [README.md](https://github.com/input-output-hk/plutus/blob/master/plutus-playground-server/README.md). +is not available make sure you are in a nix-shell session or that lorri is ready). For additional information on invoking the backend server please refer to its [README.md](https://github.com/input-output-hk/plutus-apps/tree/main/plutus-playground-server). ### Starting the frontend server @@ -31,7 +31,7 @@ The `start` script will: - Compile the purescript code - Start the webkpack server -Once the `start` script completes you can access the frontend via [http://localhost:8009](http://localhost:8009) +Once the `start` script completes you can access the frontend via [https://localhost:8009](https://localhost:8009) > **Note**: You may need to adjust `webpack.config.js` to serve non-SSL content; set > `module.exports.devServer.https` to `false`. @@ -45,7 +45,7 @@ The following outlines some essentials for actually working on the plutus playgr Apart from the `start` script introduced above there are a couple of scripts for the most frequent tasks during development. In order to run a webpack server in development mode with automatic reloading use **webpack:server**: ``` -$ npm webpack:server +$ npm run build:webpack:dev ``` Please refer to [package.json](./package.json) for the full set of provided scripts. @@ -112,10 +112,5 @@ You can run the following command (from the repository root) to build the client backend server with Nix: ```sh -$ nix-build \ - --option trusted-public-keys "hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ=" \ - --option substituters https://hydra.iohk.io \ - -A plutus-playground.client -A plutus-playground.server +$ nix-build -A plutus-playground.client -A plutus-playground.server ``` - -**Note**: When building the client make sure that the generated directory is removed completely or you will get _Duplicate module_ errors. diff --git a/plutus-playground-client/package.json b/plutus-playground-client/package.json index 7c582e1e25..cb5eaaded9 100644 --- a/plutus-playground-client/package.json +++ b/plutus-playground-client/package.json @@ -6,7 +6,7 @@ "build:spago:watch": "spago build --purs-args \"--strict --censor-lib --stash --is-lib=generated --is-lib=.spago\" --watch --clear-screen", "build:webpack": "webpack-cli serve --progress --inline --hot --mode=development --node-env=development", "build:webpack:prod": "webpack --progress --bail --mode=production --node-env=production", - "build:webpack:dev": "webpack-cli serve --progress --inline --hot --mode=development --node-env=development", + "build:webpack:dev": "webpack-cli serve --progress --inline --hot --mode=development --node-env=development --host 0.0.0.0", "install:spago": "spago install", "docs": "spago docs", "repl": "spago repl", diff --git a/plutus-playground-client/spago-packages.nix b/plutus-playground-client/spago-packages.nix index 5deba33666..f36b736ea8 100644 --- a/plutus-playground-client/spago-packages.nix +++ b/plutus-playground-client/spago-packages.nix @@ -619,11 +619,11 @@ let "json-helpers" = pkgs.stdenv.mkDerivation { name = "json-helpers"; - version = "895db00f2fe97ee56b866bf1582b303d029c216a"; + version = "60615c36abaee16d8dbe09cdd0e772e6d523d024"; src = pkgs.fetchgit { url = "https://github.com/input-output-hk/purescript-bridge-json-helpers.git"; - rev = "895db00f2fe97ee56b866bf1582b303d029c216a"; - sha256 = "0jwhv9a4xhc65hxas8d00g6ax10q3w4xvlm8bp3dl1p6vav98988"; + rev = "60615c36abaee16d8dbe09cdd0e772e6d523d024"; + sha256 = "0b5wpdgy2pgk5r97ln3sql4h2c2v45h3jl2262gzqchhgvi3n4kb"; }; phases = "installPhase"; installPhase = "ln -s $src $out"; @@ -1279,11 +1279,11 @@ let "web-common" = pkgs.stdenv.mkDerivation { name = "web-common"; - version = "v1.0.0"; + version = "v1.1.3"; src = pkgs.fetchgit { url = "https://github.com/input-output-hk/purescript-web-common"; - rev = "91d74fcb5eafd13237f07320a3f7e142b5a9dc2b"; - sha256 = "1xxr2q95w42l1d1fqindn16flxfx53bwaga538sh7a0ajs2ff69m"; + rev = "f6ba33c8543e5c830592f86e94b3e89ca117e602"; + sha256 = "10hsvndlvag0c89gwn6hmiiar45cifl1416b0psbvqjdjqbmhvv0"; }; phases = "installPhase"; installPhase = "ln -s $src $out"; diff --git a/plutus-use-cases/scripts/Main.hs b/plutus-use-cases/scripts/Main.hs index d7b615b891..b56c986c92 100644 --- a/plutus-use-cases/scripts/Main.hs +++ b/plutus-use-cases/scripts/Main.hs @@ -92,8 +92,8 @@ writeScripts config = do [ -- TODO: The revert of input-output-hk/cardano-node#3206 prevents us from using traces -- for the auction contract for now. Uncomment the following code whenever we -- have a proper implementation. - -- ("auction_1", Auction.auctionTrace1, Auction.auctionEmulatorCfg) - --, ("auction_2", Auction.auctionTrace2, Auction.auctionEmulatorCfg) + -- ("auction_1", Auction.auctionTrace1, view emulatorConfig Auction.options) + --, ("auction_2", Auction.auctionTrace2, view emulatorConfig Auction.options) ("crowdfunding-success", Crowdfunding.successfulCampaign, def) , ("currency", Currency.currencyTrace, def) , ("escrow-redeem_1", Escrow.redeemTrace, def) diff --git a/plutus-use-cases/src/Plutus/Contracts/Auction.hs b/plutus-use-cases/src/Plutus/Contracts/Auction.hs index fa7a9b6f19..4ce32b96ad 100644 --- a/plutus-use-cases/src/Plutus/Contracts/Auction.hs +++ b/plutus-use-cases/src/Plutus/Contracts/Auction.hs @@ -126,7 +126,7 @@ auctionTransition AuctionParams{apOwner, apAsset, apEndTime} State{stateData=old case (oldStateData, input) of (Ongoing HighestBid{highestBid, highestBidder}, Bid{newBid, newBidder}) | newBid > highestBid -> -- if the new bid is higher, - let constraints = + let constraints = if highestBid == 0 then mempty else Constraints.mustPayToPubKey highestBidder (Ada.toValue highestBid) -- we pay back the previous highest bid <> Constraints.mustValidateIn (Interval.to $ apEndTime - 1) -- but only if we haven't gone past 'apEndTime' newState = diff --git a/plutus-use-cases/test/Spec/Auction.hs b/plutus-use-cases/test/Spec/Auction.hs index a23d6f1ada..8bf16fb6a7 100644 --- a/plutus-use-cases/test/Spec/Auction.hs +++ b/plutus-use-cases/test/Spec/Auction.hs @@ -9,7 +9,7 @@ {-# LANGUAGE TypeFamilies #-} module Spec.Auction ( tests - , auctionEmulatorCfg + , options , auctionTrace1 , auctionTrace2 , prop_Auction @@ -68,15 +68,10 @@ theToken = -- This currency is created by the initial transaction. Value.singleton mpsHash "token" 1 --- | 'EmulatorConfig' that includes 'theToken' in the initial distribution of Wallet 1. -auctionEmulatorCfg :: Trace.EmulatorConfig -auctionEmulatorCfg = - let initialDistribution = defaultDist & over (ix w1) ((<>) theToken) - in (def & Trace.initialChainState .~ Left initialDistribution) & Trace.slotConfig .~ slotCfg - --- | 'CheckOptions' that includes our own 'auctionEmulatorCfg'. +-- | 'CheckOptions' that includes 'theToken' in the initial distribution of Wallet 1. options :: CheckOptions -options = set emulatorConfig auctionEmulatorCfg defaultCheckOptions +options = defaultCheckOptions + & changeInitialWalletValue w1 ((<>) theToken) seller :: Contract AuctionOutput SellerSchema AuctionError () seller = auctionSeller (apAsset params) (apEndTime params) diff --git a/plutus-use-cases/test/Spec/Future.hs b/plutus-use-cases/test/Spec/Future.hs index 28c71e0dde..6c0178c3e3 100644 --- a/plutus-use-cases/test/Spec/Future.hs +++ b/plutus-use-cases/test/Spec/Future.hs @@ -43,14 +43,11 @@ import Wallet.Emulator.Folds qualified as Folds import Wallet.Emulator.Stream qualified as Stream import Wallet.Emulator.Wallet qualified as Wallet -futureEmulatorCfg :: Trace.EmulatorConfig -futureEmulatorCfg = - let initialDistribution = fmap (const $ Ada.lovelaceValueOf 1_000_000_000) defaultDist - in def & Trace.initialChainState .~ Left initialDistribution - --- | 'CheckOptions' that includes our own 'auctionEmulatorCfg'. +-- | 'CheckOptions' that assigns 1000 Ada to Wallets 1 and 2. options :: CheckOptions -options = set emulatorConfig futureEmulatorCfg defaultCheckOptions +options = defaultCheckOptions + & changeInitialWalletValue w1 (const $ Ada.adaValueOf 1000) + & changeInitialWalletValue w2 (const $ Ada.adaValueOf 1000) tests :: TestTree tests = @@ -217,5 +214,5 @@ testAccounts = $ Freer.runError @Folds.EmulatorFoldErr $ Stream.foldEmulatorStreamM fld $ Stream.takeUntilSlot 10 - $ Trace.runEmulatorStream futureEmulatorCfg F.setupTokensTrace + $ Trace.runEmulatorStream (view emulatorConfig options) F.setupTokensTrace diff --git a/plutus-use-cases/test/Spec/SealedBidAuction.hs b/plutus-use-cases/test/Spec/SealedBidAuction.hs index e9bf8bc9ad..1a49366265 100644 --- a/plutus-use-cases/test/Spec/SealedBidAuction.hs +++ b/plutus-use-cases/test/Spec/SealedBidAuction.hs @@ -50,15 +50,10 @@ theToken = Value.singleton mpsHash "token" 1 mpsHash :: Value.CurrencySymbol mpsHash = Value.CurrencySymbol $ PlutusTx.toBuiltin $ Crypto.hashToBytes $ Crypto.hashWith @Crypto.Blake2b_256 id "ffff" --- | 'EmulatorConfig' that includes 'theToken' in the initial distribution of Wallet 1. -auctionEmulatorCfg :: Trace.EmulatorConfig -auctionEmulatorCfg = - let initialDistribution = defaultDist & over (ix w1) ((<>) theToken) - in (def & Trace.initialChainState .~ Left initialDistribution) & Trace.slotConfig .~ def - --- | 'CheckOptions' that includes our own 'auctionEmulatorCfg'. +-- | 'CheckOptions' that includes 'theToken' in the initial distribution of Wallet 1. options :: CheckOptions -options = set emulatorConfig auctionEmulatorCfg defaultCheckOptions +options = defaultCheckOptions + & changeInitialWalletValue w1 ((<>) theToken) -- * QuickCheck model diff --git a/plutus-use-cases/test/Spec/SimpleEscrow.hs b/plutus-use-cases/test/Spec/SimpleEscrow.hs index ca85047f37..ce6aaf0851 100644 --- a/plutus-use-cases/test/Spec/SimpleEscrow.hs +++ b/plutus-use-cases/test/Spec/SimpleEscrow.hs @@ -100,9 +100,9 @@ token2 = Value.singleton "2222" "Token2" options :: CheckOptions options = - let initialDistribution = defaultDist & over (ix w1) ((<>) (token1 500)) - & over (ix w2) ((<>) (token2 500)) - in defaultCheckOptions & emulatorConfig . Trace.initialChainState .~ Left initialDistribution + defaultCheckOptions + & changeInitialWalletValue w1 ((<>) (token1 500)) + & changeInitialWalletValue w2 ((<>) (token2 500)) mkEscrowParams :: POSIXTime -> Value -> Value -> EscrowParams mkEscrowParams startTime p e = diff --git a/plutus-use-cases/test/Spec/crowdfundingEmulatorTestOutput.txt b/plutus-use-cases/test/Spec/crowdfundingEmulatorTestOutput.txt index 4830ab5181..b10aed7bcd 100644 --- a/plutus-use-cases/test/Spec/crowdfundingEmulatorTestOutput.txt +++ b/plutus-use-cases/test/Spec/crowdfundingEmulatorTestOutput.txt @@ -36,7 +36,27 @@ Slot 1: W7ce812d: Balancing an unbalanced transaction: Utxo index: Validity range: (-∞ , POSIXTime 1596059111000 ] -Slot 1: W7ce812d: Finished balancing. e9628f4a7231fbe76f221ae02309b0d44df8d902154ab1bd93e38a274d52f370 +Slot 1: W7ce812d: Finished balancing: + Tx e9628f4a7231fbe76f221ae02309b0d44df8d902154ab1bd93e38a274d52f370: + {inputs: + - 98d5fbcefe21113b3f0390c1441e075b8a870cc5a8fa2a56dcde1d8247e41715!2 + + collateral inputs: + - 98d5fbcefe21113b3f0390c1441e075b8a870cc5a8fa2a56dcde1d8247e41715!2 + + outputs: + - Value (Map [(,Map [("",89999990)])]) addressed to + PubKeyCredential: 80a4f45b56b88d1139da23bc4c3c75ec6d32943c087f250b86193ca7 (no staking credential) + - Value (Map [(,Map [("",10000000)])]) addressed to + ScriptCredential: 845f884d10feb1d0e664ebcde25320391e85c179e3f53c875583bf3b (no staking credential) + mint: Value (Map []) + fee: Value (Map [(,Map [("",10)])]) + mps: + signatures: + 98c77c40ccc536e0d433874dae97d4a0787b10b3bca0dc2e1bdc7be0a544f0ac + validity range: Interval {ivFrom = LowerBound NegInf True, ivTo = UpperBound (Finite (Slot {getSlot = 20})) False} + data: + "\128\164\244[V\184\141\DC19\218#\188L\222\136\166\254\253 ="} Slot 1: W5f5a4f5: Submitting tx: c351875a8d5d26a87f1cf365f007f8a543040e9d8d182d608223edd245c5ea9e Slot 1: W5f5a4f5: TxSubmit: c351875a8d5d26a87f1cf365f007f8a543040e9d8d182d608223edd245c5ea9e Slot 1: TxnValidate c351875a8d5d26a87f1cf365f007f8a543040e9d8d182d608223edd245c5ea9e @@ -125,7 +185,28 @@ Slot 20: W872cb83: Balancing an unbalanced transaction: 845f884d10feb1d0e664ebcde25320391e85c179e3f53c875583bf3b ) Validity range: [ POSIXTime 1596059111000 , POSIXTime 1596059120999 ] -Slot 20: W872cb83: Finished balancing. 3a20125dbda70ddc4408207505e362966252b6941ec7eb334ca11f11fc96ac35 +Slot 20: W872cb83: Finished balancing: + Tx 3a20125dbda70ddc4408207505e362966252b6941ec7eb334ca11f11fc96ac35: + {inputs: + - 2f869889c09e76fb2cbfe2a3a0d512bfc86fe515d0cee53ecea4a79d3e695029!1 + <> + - c351875a8d5d26a87f1cf365f007f8a543040e9d8d182d608223edd245c5ea9e!1 + <> + - e9628f4a7231fbe76f221ae02309b0d44df8d902154ab1bd93e38a274d52f370!1 + <> + collateral inputs: + - 98d5fbcefe21113b3f0390c1441e075b8a870cc5a8fa2a56dcde1d8247e41715!5 + + outputs: + - Value (Map [(,Map [("",22486334)])]) addressed to + PubKeyCredential: a2c20c77887ace1cd986193e4e75babd8993cfd56995cd5cfce609c2 (no staking credential) + mint: Value (Map []) + fee: Value (Map [(,Map [("",13666)])]) + mps: + signatures: + 8d9de88fbf445b7f6c3875a14daba94caee2ffcbc9ac211c95aba0a2f5711853 + validity range: Interval {ivFrom = LowerBound (Finite (Slot {getSlot = 20})) True, ivTo = UpperBound (Finite (Slot {getSlot = 29})) True} + data:} Slot 20: W872cb83: Submitting tx: 3a20125dbda70ddc4408207505e362966252b6941ec7eb334ca11f11fc96ac35 Slot 20: W872cb83: TxSubmit: 3a20125dbda70ddc4408207505e362966252b6941ec7eb334ca11f11fc96ac35 Slot 20: 00000000-0000-4000-8000-000000000000 {Wallet W872c}: diff --git a/shell.nix b/shell.nix index 9b2993a1fe..85b9ca1ed7 100644 --- a/shell.nix +++ b/shell.nix @@ -6,14 +6,24 @@ let inherit (packages) pkgs plutus-apps plutus-playground pab-nami-demo docs webCommon; inherit (pkgs) stdenv lib utillinux python3 nixpkgs-fmt; inherit (plutus-apps) haskell stylish-haskell sphinxcontrib-haddock sphinx-markdown-tables sphinxemoji nix-pre-commit-hooks; - inherit (haskell.project.hsPkgs.cardano-wallet.components.exes) cardano-wallet; - # A standard release to feed cardano-cli & cardano-node to our shell + # Feed cardano-wallet, cardano-cli & cardano-node to our shell. + # This is stable as it doesn't mix dependencies with this code-base; + # the fetched binaries are the "standard" builds that people test. + # This should be fast as it mostly fetches Hydra caches without building much. + cardano-wallet = import + (pkgs.fetchgit { + url = "https://github.com/input-output-hk/cardano-wallet"; + rev = "2fdc9a5aa44d8bc8bed0da74151ea1016fc30508"; + sha256 = "09zz1488as64l8w6kk1ijhs4y4rsi47ashsb3gbikq3fn22mc8xb"; + }) + { }; cardano-node = import (pkgs.fetchgit { url = "https://github.com/input-output-hk/cardano-node"; - rev = "1.32.1"; - sha256 = "00k9fqrm0gphjji23x0nc9z6bqh8bqrncgivn3mi3csacjzicrrx"; + # A standard release compatible with the cardano-wallet commit above is always preferred. + rev = "1.33.0"; + sha256 = "1hr00wqzmcyc3x0kp2hyw78rfmimf6z4zd4vv85b9zv3nqbjgrik"; }) { }; @@ -86,7 +96,7 @@ let cabal-install cardano-node.cardano-cli cardano-node.cardano-node - cardano-wallet + cardano-wallet.cardano-wallet cardano-repo-tool fixPngOptimization fixPurty