
Aim: To promote rapid, easy learning, simplification, and development on Cardano. Just like a greek messanger Pheidippides, who ran to deliver good news of victory, rPAD aims to quickly deliver quick dApps to Cardano communities.
Welcome to the Plutus development onboarding guide! This document will walk you through setting up a local Plutus development environment using Nix and Cabal, and understanding the Vesting
contract structure, utilities, and key Haskell/Plutus concepts.
- π§° Prerequisites
- βοΈ Environment Setup
- π¦ Building the Project
- π Folder Structure
- π Understanding the Contracts
- 5.1 Basic Vesting
- 5.2 Parameterized Vesting
- π§ Utilities Breakdown
- π§ͺ Testing and Debugging
- π Glossary of Terms
- π License and Contributions
From Zero to Hero Haskell Plutus Flake.nix Template
- Nix
- Git CLI
- Optional: VSCode with Haskell extension
git clone <your-repo-url>
cd plutus-nix
nix develop
If you're not using flakes, you can run:
nix-shell
cabal update
cabal build all
This will build both the Utilities
library and the wspace
smart contract/test modules.
plutus-nix/
βββ .devcontainer/
βββ .vscode/
βββ code/
β βββ dist-newstyle/
β βββ nix/
β βββ Utilities/
β β βββ src/
β β β βββ Utilities/
β β β βββ Conversions.hs
β β β βββ PlutusTx.hs
β β β βββ Serialise.hs
β β β βββ Utilities.hs
β β βββ Utilities.cabal
β β βββ hie.yaml
β βββ wspace/
β β βββ assets/
β β βββ lecture/
β β β βββ CGPlutusUtilsv1.hs
β β β βββ CGTime.hs
β β β βββ ParameterizedVesting.hs
β β β βββ Vesting.hs
β β βββ test/
β β β βββ CGPlutusUtilsSpec.hs
β β β βββ CGTimeSpec.hs
β β β βββ VestingSpec.hs
β β β βββ ParameterizedVestingSpec.hs
β β β βββ Spec.hs
β β β βββ Main.hs
β β βββ docs/
β β βββ Tutorials.md
β β βββ cabal.project
β β βββ wspace.cabal
βββ .gitignore
βββ flake.nix
βββ README.md
- File:
lecture/Vesting.hs
- Validates that:
- A transaction is signed by the beneficiary
- The deadline has been reached
- File:
lecture/ParameterizedVesting.hs
- Accepts:
beneficiary :: PubKeyHash
deadline :: POSIXTime
- Uses
liftCode
to embed these at compile time
- File:
lecture/CGPlutusUtilsv1.hs
- Decode Bech32 β PubKeyHash
- Encode PubKeyHash β Bech32 (mainnet/testnet)
- File:
lecture/CGTime.hs
- POSIX, ISO8601, UTC conversions
- Time arithmetic: add/diff/getNow
main :: IO ()
main = defaultMain tests
test/
βββ CGPlutusUtilsSpec.hs
βββ CGTimeSpec.hs
βββ VestingSpec.hs
βββ ParameterizedVestingSpec.hs
βββ Spec.hs
βββ Main.hs
Run tests via:
cabal test all
Term | Description |
---|---|
POSIXTime | Seconds since the Unix epoch |
PubKeyHash (PKH) | Hash of a wallet's public key |
Validator | The on-chain logic for validation |
ScriptContext | Transaction context during validation |
liftCode / applyCode | Embeds values directly into compiled code |
Bech32 | Human-readable address format for Cardano |
txSignedBy | Checks if a transaction is signed by a specific PKH |
Utilities Library | Helper functions for off-chain dev/test |
Cabal / Nix | Build and environment tools for Haskell & Plutus |
Term | Description |
---|---|
Bech32 | A human-readable encoding for addresses. |
PubKeyHash | A 28-byte hash of a public key used to identify wallets. |
POSIXTime | Seconds since Unix epoch (1970β01β01 UTC). |
UTCTime | Coordinated Universal Time representation in Haskell. |
HRP | HumanβReadable Part of a Bech32 string, indicates network. |
GADT | Generalized Algebraic Data Type, a Haskell feature for precise typing. |
Datum | On-chain data attached to UTxOs. |
Validator | A script that checks whether a transaction is allowed. |
On-chain | Code that runs in the blockchainβs validation. |
Off-chain | Code that runs in a userβs wallet or backend. |
CGTime | Coxygen Global Time module. |
CGPlutusUtils | Coxygen Global Plutus Utils module. |
MIT License
Copyright (c) 2025 Women In Move Solutions (Pty) Ltd
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
- Author: Bernard Sibanda
- Company: Coxygen Global
- Date: May 05, 2025
Whos is Bernard Sibanda?
I am Bernard Sibanda, a technologist, educator, and blockchain advocate with a diverse academic and technical background. I hold a BSc in Computing, a BTech in Education, and a Diploma in Philosophy, complemented by certifications including Microsoft Certified Professional (MCP), CompTIA A+, and Haskell Plutus from the European Business University of Luxembourg (EBU). I have upskilled on the professional AI Engineer Path via Scrimba, reflecting my deep commitment to continuous learning and innovation at the intersection of education, blockchain, and artificial intelligence.
I serve as the Founder, Chief Technology Officer (CTO), and Intersect Developer Advocate at:
- WIMS-Cardano Global
- Coxygen Global
- Satoshi Africa
- Tobb Technologies
My primary focus is on strengthening and scaling the Cardano blockchain ecosystem, working closely with Intersect MBO and Project Catalyst. I actively promote tools, strategies, and learning pathways that enhance usability, utility, and developer onboarding across Cardano.
- Empowering developer productivity with Haskell/Plutus, Plutus Core, and Plinth
- Training alternative smart contract languages: Helios, PHP, Rust, Aiken, and Lucidβacross the world
- Contributing to Plutus HA development and formal verification methods
- Supporting the broader Cardano roadmap through inclusive, community-led innovation
My mission is to democratize access to smart contract development by building an ecosystem that is accessible, fast, and developer-friendly on a global scale. I aim to:
-
Deliver live technical training and support for Cardano smart contract development
-
Recruit thousands of university and college students worldwide into the Cardano ecosystem
-
Onboard new developers with practical, language-inclusive training approaches
-
Build and maintain open-source libraries, templates, and documentation such as:
coxylib.js
β a utility library for Cardano developersjimba.js
β tools for interactive learning and prototypingpheidippides (rPAD)
β a toolkit for rapid Plutus App Development
-
Promote fast learning, easy onboarding, and streamlined development workflows
-
Apply formal methods and property-based testing to ensure secure and reliable smart contracts
-
Collaborate with non-technical stakeholdersβfrom business leaders to promotersβto align technology with real-world needs
-
Continuously enhance the Cardano developer experience by identifying friction points and developing effective solutions
I envision a world where every developer can contribute to and benefit from Cardanoβone of the top 10 blockchains in the world.