Plutip is a Cardano tool for spawning local clusters. You can use it to start up disposable private network with an arbitrary amount of funded addresses (Plutip will provide corresponding key pairs as well).
For smart contract testing see CTL integration with Plutip.
TL;DR: plutip gets you a cardano node socket where the node belongs to a small cluster on a private network, and you can prefund addresses with ADA.
Table of Contents
If your project is importing and making use of Plutip
s library you will need to make sure that the following executables are present in your PATH
:
cardano-cli
executable available in the environmentcardano-node
executable available in the environment
The following GHC flags must be used in order for Plutip to run: -threaded -rtsopts
.
NOTE: This branch launches local network in Vasil
.
It was tested with node 1.35.4
(this node version is used in the Nix environment as well).
Please use an appropriate node version when setting up own binaries in PATH
.
nix run github:mlabs-haskell/plutip#plutip-core:exe:local-cluster -- --help
# start local network with 2 funded addresses 10,000 ADA each
nix run github:mlabs-haskell/plutip#plutip-core:exe:local-cluster -- -n 2
# or if you want to use the local version, clone the repo and then
nix run .#plutip-core:exe:local-cluster -- --help
Launch local cluster with:
withCluster :: PlutipConfig -> (ClusterEnv -> IO a) -> IO a
withCluster conf action
Use withFundedCluster
to additionally receive pre-funded keys.
Cluster shuts down when the user action (second argument to withCluster
) completes.
Use startCluster
/startFundedCluster
and stopCluster
variants to keep the cluster running.
Plutip is in essence a simpler wrapper over some cardano-wallet
code for spawning private disposable Cardano clusters.
It can be used in a few ways:
- as a library,
- as an executable,
- indirectly via cardano-transaction-lib (CTL) smart contract tests. This is a facility for testing contracts in an isolated environment: with wallet mocks and a private plutip cluster. See CTL and their documentation on Plutip tests. That's very much the recommended way if you're a CTL user.
- Historical mention: you could test PAB
Contract
s with Plutip itself, but this functionality is unmantained and was removed as most users switched to CTL. If you're interested check out the archive branchplutip-bpi
and the old tutorial.
Launch local cluster with
withCluster :: PlutipConfig -> (ClusterEnv -> IO a) -> IO a
withCluster conf action
where:
conf :: PlutipConfig
specifies the working directory of a spawned cluster (can be temporary) and in some capacity the parameters of the cluster. UseData.Default (def)
to spawn default cluster in a temporary directory.ClusterEnv
is essentially a wrapper around the node socket. The socket belongs to one of the nodes.action :: ClusterEnv -> IO a
is a user action which has access to acardano-node
in a cluster viaCardano.Api
.
Use
withFundedCluster :: PlutipConfig -> [[Lovelace]] -> (ClusterEnv -> [KeyPair] -> IO a) -> IO a
to additionally receive keys prefunded with specified fund distributions (e.g. Key 1 with [1 Lovelace]
and Key 2 with [2 Lovelace, 4 Lovelace]
).
Additionally there are helpers startCluster
, startFundedCluster
, stopCluster
which are useful when you want your cluster to keep running, instead of shutting down after the IO action is completed.
Example:
import Data.Default (Default (def))
import Plutip.CardanoApi (currentBlock)
import Plutip.Cluster (withFundedCluster)
import Plutip.Keys (cardanoMainnetAddress)
main = withFundedCluster def [[ada 1], [ada 2, ada 4]] $ \cenv [key1, key2] -> do
-- You have a default cluster using a temporary directory for storage and 7 Ada to use wisely.
-- You can query the node for block number with
res <- currentBlock cenv
...
-- See Plutip.CardanoApi for example queries and construct your own queries with Cardano.Api.
-- To make use of your keys, also use Cardano.Api.
ada = (*) 1_000_000
Plutip provides a local-cluster
executable.
You can build it and run with Nix:
nix run github:mlabs-haskell/plutip#plutip-core:exe:local-cluster -- --help
Available options mostly match the withFundedCluster
interface, see --help
and local-cluster README for detailed description of the arguments.
CTL is a PureScript SDK for creating DApps. One of its features is the ability to test contracts on disposable private networks which Plutip sets up, see plutip-testing. CTL provides (via Nix) a runtime environment containing several services, including plutip-server which allows to control Plutip via HTTP. As long as you are using CTL's Nix environment (or your setup is based on it) there's no need to install Plutip separately.
- Template for setting up a Nix flake that includes Plutip. Kudos to @MitchyCola
If your goal is to:
- run tests with the
tasty
Haskell framework where user can run Plutus contracts (Contract w s e a
) using the disposable private network set up by Plutip, - run contracts in REPL on a local network,
then check out CTL or a legacy Plutip revision (plutip-bpi
) or Plutip v1.3.1 and older releases.