{"id":13444339,"url":"https://github.com/OpShin/opshin-pioneer-program","last_synced_at":"2025-03-20T18:32:23.153Z","repository":{"id":142568788,"uuid":"609422283","full_name":"OpShin/opshin-pioneer-program","owner":"OpShin","description":"This repository hosts an opshin/python implementation of the lectures of the Plutus Pioneers Program, a training course for Cardano Smart Contract Engineers.","archived":false,"fork":false,"pushed_at":"2024-10-12T20:25:13.000Z","size":3102,"stargazers_count":49,"open_issues_count":11,"forks_count":12,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-18T22:52:19.378Z","etag":null,"topics":["cardano","cryptocurrency","plutus","plutus-pioneer-program","python","smart-contracts"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpShin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-04T05:47:49.000Z","updated_at":"2025-02-21T12:50:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"44f80f85-3ca2-41f4-82bf-6a1a2f3dd39f","html_url":"https://github.com/OpShin/opshin-pioneer-program","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpShin%2Fopshin-pioneer-program","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpShin%2Fopshin-pioneer-program/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpShin%2Fopshin-pioneer-program/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpShin%2Fopshin-pioneer-program/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpShin","download_url":"https://codeload.github.com/OpShin/opshin-pioneer-program/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244670525,"owners_count":20491000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cardano","cryptocurrency","plutus","plutus-pioneer-program","python","smart-contracts"],"created_at":"2024-07-31T04:00:20.287Z","updated_at":"2025-03-20T18:32:23.134Z","avatar_url":"https://github.com/OpShin.png","language":"Python","funding_links":[],"categories":["Tutorials"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/OpShin/opshin-pioneer-program\"\u003e\n    \u003cimg src=\"https://github.com/OpShin/opshin-pioneer-program/blob/main/opshin-pioneer-program.png\" width=\"200\" /\u003e\n  \u003c/a\u003e\n  \u003ch1\u003e Opshin Pioneer Program \u003c/h1\u003e\n  \u003ca href=\"https://github.com/input-output-hk/plutus-pioneer-program\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/cohort-4-red?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QAlQBsAFoq1pmxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5wQDCScJjGi5+gAABGdJREFUWMPtl9lvVWUUxX+rvYVWpjJflJZRBJFBJZRZNJBoog8mGgn4QEzUP8uYGI3GIT44JBKjGBUxFgOlQLUMQlHKIGmLBQtdPrAuOVy4Bcfw4Hm5557vfHtYe6397QP/X7ls67/2NaJP23X/RFC2Zbuu1rpsbwN+B3YCfcCQpMvVwUga/pOOb9hjuwFoAKYAq4CGEjABuAtYDxhotD2YYLolHakYsi1JvlXGklzYswCYBYyNn35gItAITFZeOC+pt2BkHNACLACagU5Ju2+FRnHN9hpgHnAa6AaOS7pYeHcOcLlChhZgM3AK2ANcAPoLxjYBc4APJfXUgFeSbHt+0NxfCLoEjAPGAG3AeOBtSf2l7J8V+OcCFwNRvW0DxyTtsD0a2G77e0nfVGVbcb4BKEt6xXa97Y3ANKAOuAQMAHfnvgXoLGaw2PYo22OLpbDdZvvFQIrtbbZXVyvF9mNBCtuP237B9lLbTQV7jbbHp+xXVVCVQRuwHBgCdgPngZ6srQYWAq8BzwM7JXVn/xLgHuBrYEvWDgS1chBdGQV8IqmrgmDpJly6HKjqgAeBdbaHgS+AI8BzuX8E6LbdCMwHOoCngNeBsu2twJWo6QTwW1RQ6Qm+hkAVmZqBEjC3QKLJyWA00APMBEaFsEQtoxLgvRUyS+rL/lXAAcCVZ9eV4CZBbM/aRODzIHIh2r0/vaMM7AtiDwBngLMh1nAY3xx1HQMGJL1braBSjX6yN/V+K5kDnIx8LgWJ9QlwTJj9XiBfkGYzF+gF3gDWxuY16EcMQFI70G77oTiYEHkORVZTgRXpbk35LSfzU5HY+ATaIenVgu3rAqirUYJJtlcAP4Y8HcChvH8u3e14+PAL8HMc96V03wE/5fmA7TVFOdbkQEGO2xJ9UxyNidOTQGuyXR7Z1QNLUvueBNKa+venlOeAs5LeH5EDBXh+iLR2SepMcNNygl2I4U5gf4ET/bHXCnxZUEBvzoSD8TE8EgLlkKs9BCKsn1c4spfnvgy8k/qvjK1+4CiwMXw5lDLWAbOT1A5J/dWdsE7SsO0nw+zZybAeOBwiXbS9BegCJkVWu7J/baQ6FRgt6YP0k8Uh5JU4P52T9Svb9ZKuVJOvyfYTtidUPW+z/bLt6bYftv1M9Uhl+2nbLbYX2n7J9uIqGy22N9muv6EEtluBDSHcnsA6I1puBA5K+tb2o8A0SW/WUM+zwAFJHXm3Jco4nJIOpic0Ax9LOlcJYEPO+3LqVtFzl6RfbU9Jnz8i6bNaU1DuN+fs/0jSYMh7X8rWkPL2haj7ixAuTfRDhWcLgWX5+6mk07c5ls0E1kUx+yQdLaxNBKZK6qoMpVvD6vZEPgOYHOKcAfZWxrXbGU6rBpWZwKJkT86KnrTjZUB9KS2zlIZxJizvlTRQa9Ac6YqalPsTwIn8H5cSN2cCawKmK2ztk3T8dkbrv/BdcFMbthcBg0UO1Aca36rGf/OLSFfBudoDVIDrX3F6J3wK3tnXHzzemiq9XlPlAAAAAElFTkSuQmCC\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.python.org/downloads/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/language-python3-3670A0?logo=python\u0026logoColor=959da5\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/OpShin/opshin-pioneer-program/actions/workflows/test.yaml\"\u003e\n    \u003cimg src=\"https://github.com/OpShin/opshin-pioneer-program/actions/workflows/test.yaml/badge.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/OpShin/opshin-pioneer-program/actions/workflows/test-solutions.yaml\"\u003e\n    \u003cimg src=\"https://github.com/OpShin/opshin-pioneer-program/actions/workflows/test-solutions.yaml/badge.svg\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://discord.com/invite/umR3A2g4uw\"\u003e\n    \u003cimg src=\"https://dcbadge.vercel.app/api/server/umR3A2g4uw?style=flat\u0026theme=default-inverted\u0026compact=true\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/OpShin/awesome-opshin\"\u003e\u003cimg src=\"https://img.shields.io/badge/awesome-opshin-blue?logo=data:image/png;base64,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\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\nThis repository implements many educational Cardano Smart Contracts in Python using [opshin](https://github.com/OpShin/opshin).\nIt also comes with off-chain code using [PyCardano](https://github.com/Python-Cardano/pycardano) and a host of test cases to ensure high quality of the resulting contracts.\nMost of the code is in a similar format to the [plutus-pioneer-program](https://github.com/input-output-hk/plutus-pioneer-program).\nJoin the opshin [discord server](https://discord.com/invite/umR3A2g4uw) for Q/A and interact with other opshin pioneers!\n\n## Installation\n\n1. Install Python 3.9, 3.10 or 3.11 (if it not already installed on your operating system).\n   Python3.11 Installer [download](https://www.python.org/downloads/release/python-3112/).\n\n2. Install python poetry.\n   Follow the official documentation [here](https://python-poetry.org/docs/#installation).\n\n3. Install a python virtual environment with poetry:\n```bash\n# clone the repository including the config submodule necessary for running the node\ngit clone --recurse-submodules -j8 https://github.com/OpShin/opshin-pioneer-program.git\ncd opshin-pioneer-program\n\n# Optional. Use a specific python version\n# replace \u003cversion\u003e with 3.8, 3.9, 3.10, or 3.11\n# for this to work, python\u003cversion\u003e must be accessible in your command line\n# alternatively provide the path to your python executable\npoetry env use \u003cversion\u003e\n\n# install python dependencies\npoetry install\n\n# run a shell with the virtual environment activated\npoetry shell\n\n# If you're not in a shell, you can run python scripts with `poetry run`\npoetry run python \u003cscript-path\u003e\n```\n\n### Cardano Node and Ogmios\n\n#### Quick setup\n\n\u003e TBD: If you would like to contribute a hosted Ogmios endpoint, please feel free to contribute!\n\n#### Local setup\n\nMinimum Specs for Preview Network:\n- 2 Core CPU\n- 4GB memory\n- 16GB free storage\n\nFirst install Docker.\nFollow the official documentation [here](https://docs.docker.com/get-docker/).\n\n\nTo start a [Cardano Node](https://github.com/input-output-hk/cardano-node) and [Ogmios API](https://ogmios.dev/) use [docker-compose](https://docs.docker.com/get-started/08_using_compose/) in your terminal:\n\n```bash\n# make sure your node configurations are up to date\ngit submodule update --init\n# starts a cardano node and ogmios api on the preview testnet\ndocker compose up\n```\n\nYou can then access the `cardano-cli` using the docker image:\n```bash\ndocker run --rm -it \\\n  --entrypoint cardano-cli \\\n  -e CARDANO_NODE_SOCKET_PATH=/ipc/node.socket \\\n  -v opshin-pioneer-program_node-db:/data \\\n  -v opshin-pioneer-program_node-ipc:/ipc \\\n  inputoutput/cardano-node\n```\n\n#### Kupo (Optional)\nKupo is a database that supports fast queries to the Cardano blockchain.\nAlthough not needed for simple use cases, it can offer more speed in exchange for more storage and memory usage.\nThis adds ~2GB storage and ~2GB memory on the preview network.\n\n```bash\n# starts the cardano node and ogmios with kupo (disabled by default)\ndocker compose --profile kupo up\n\n# set the environment variable to use the ogmios + kupo backend\nexport CHAIN_BACKEND=kupo\n```\n\nYou can check kupo synchronization by checking comparing the last slot number in http://localhost:1442/checkpoints\nto ogmios at http://localhost:1337/\n\n## How to Follow the Pioneer Lectures and Code\n\nAs mentioned before, this repository follows the official Plutus Pioneer Program. The lectures/videos are the same as in the Plutus Pioneer Program, but we have recorded custom versions for sessions that rely on writing code and provide a version that focuses on OpShin for them.\nAll covered contracts are (to be) implemented in OpShin in this repository.\nThe repository contains presented contracts and empty files for homework in the main branch and a correct solution for homework in the solution branch.\n\nHere's a mapping of the lecture videos on each week and what parts of this repository you can work on for each week.\nFeel free to follow along in your own pace.\n\nThe entire playlist for the OpShin Pioneer Program can be found [here](https://www.youtube.com/playlist?list=PLTh2dOp0i8OKn3H45KH7EqdI4wmkOjeCM).\n\n### Week 1\n\n- [Welcome and Introduction](https://youtu.be/vMTi1TS8jec)\n- [Setting up Our Development Environment](https://youtu.be/gETaVhZz0Mw)\n- [Kuber Marketplace Demo](https://youtu.be/ZaB-7ZYBi3g)\n- [Hashing \u0026 Digital Signatures](https://youtu.be/f-WKPWbk9Jg)\n- [The EUTxO-Model](https://youtu.be/ulYDNaEKf4g)\n- [Homework](https://youtu.be/9XwBk6IsNuM)\n\nRecommended Reading: [A Python Language Tour focusing on OpShin](https://book.opshin.dev/language_tour/index.html)\n\n### Week 2\n\n- [Low-Level, Untyped Validation Scripts](https://youtu.be/8oBZeOcJUTk)\n- [Using the PyCardano to Interact with Smart Contracts](https://youtu.be/TQ8VZvhivEs)\n  - [Using the Cardano CLI to Interact with Smart Contracts](https://youtu.be/2MbzKzoBiak)\n- [High-Level, Typed Validation Scripts](https://youtu.be/7XVeDXAgRPg)\n- [Summary](https://youtu.be/MLfbaBZ10qE)\n- [Homework](https://youtu.be/KFJMhNcMAuU)\n\nComplete the homework files in [`src/week02/homework/`](src/week02/homework/).\nYou can test your solution with `pytest src/week02/tests/test_homework.py`.\nThe solutions are available at on the [`solutions`](https://github.com/OpShin/opshin-pioneer-program/tree/solutions) branch.\n\n### Week 3\n\n- [Script Contexts](https://youtu.be/HJt_Oli7e10)\n- [Handling Time](https://youtu.be/gObATD-dzrA)\n- [A Vesting Example](https://youtu.be/L3NPepcqTWE)\n- [Parameterized Contracts](https://youtu.be/1cBkQIufjTA)\n- [Offchain Code with PyCardano](https://youtu.be/ILJ_mlOwuUQ)\n  - If you want to look at an example in Lucid, check out the original PPP video: [Offchain Code with Lucid](https://youtu.be/C8TuGSzhqXU)\n- [Reference Scripts](https://youtu.be/b45MMtuby-U)\n- [Homework](https://youtu.be/NQIqCozYkss)\n- [Summary](https://youtu.be/g28zeIRExeg)\n\nComplete the homework files in [`src/week03/homework/`](src/week03/homework/). Like before, you can run tests with `pytest src/week03/tests`.\n\n### Week 4\nThis week is about alternative offchain solutions.\nWe use pycardano, but you can compare and contrast alternatives.\n\n- [On-chain VS Off-chain](https://youtu.be/pTc_BJby5GU)\n- [Off-chain Code with Cardano CLI and GUI](https://youtu.be/gsgQ-xmzbpA)\n- [Off-chain Code with Kuber](https://youtu.be/fzib9ALlL2M)\n- [Off-chain Code with Lucid](https://youtu.be/BXz5V2rjbiE)\n- [Homework](https://youtu.be/2Qm2xgmtbk4)\n  - Implement the offchain code for the files in [`src/week04/homework`](src/week04/homework).\n  - Although the contracts are implemented in opshin, you can use offchain code other than pycardano to complete this.\n  - There is no correct solution for this week as solutions can very widely.\n    So make sure to test your code!\n  - Feel free to submit your solution by making a PR to the `solutions` branch!\n  - We will continue to implement off-chain code in pycardano for this repository.\n\n### Week 5\n\n- [Introduction](https://youtu.be/HgXYsMFqnb4)\n- [Values](https://youtu.be/ThYByMLC0EI)\n- [A Simple Minting Policy](https://youtu.be/g_VoKPK-tk0)\n  - [`src/week05/lecture/free.py`](src/week05/lecture/free.py)\n  - Off-chain minting script: `python src\\week05\\scripts\\mint.py --script=free WALLET_NAME TOKEN_NAME`\n- [A More Realistic Minting Policy](https://youtu.be/Faru8_Br2Xg)\n  - [`src/week05/lecture/signed.py`](src/week05/lecture/signed.py)\n  - Off-chain minting script: `python src\\week05\\scripts\\mint.py --script=signed WALLET_NAME TOKEN_NAME`\n- [NFT's](https://youtu.be/9kW-z_RuwEY)\n  - [`src/week05/lecture/nft.py`](src/week05/lecture/nft.py)\n  - Off-chain minting script: `python src\\week05\\scripts\\mint.py --script=nft WALLET_NAME TOKEN_NAME`\n- [Homework](https://youtu.be/nQC_GNPIRT8)\n  - Complete the minting policies in [`src/week05/homework`](src/week05/homework).\n  - Test your solution with `pytest src/week05/tests`\n\n### Week 6\n\n- [The State Monad in practice](https://www.youtube.com/watch?v=8tWzG0ML6Z4\u0026list=PLNEK_Ejlx3x08fHgl_ZTlowVO8bjqITEh\u0026index=1)\n  - You can skip this for opshin.\n- [Introduction to the Plutus Simple Model library](https://youtu.be/Sft02LeXA_U)\n  - We implement `MockChainContext` and `MockUser` in [`src/utils/mock.py`](src/utils/mock.py).\n    These classes allow us to easily test and evaluate our opshin contracts without the Cardano Node!\n  - Make sure you have the latest dependencies installed and pyaiken which we use to evaluate transactions without the node.\n    - `poetry install --sync --extras=pyaiken`\n  - We implement a simple test in [`src/week06/tests/test_mock.py`](src/week06/tests/test_mock.py) with simulated spending and multiple users.\n- [Unit Testing a Smart Contract](https://youtu.be/vB8hyVq3HVo)\n  - Unit tests located in [`src/week06/tests/test_negative_r_timed.py`](src/week06/tests/test_negative_r_timed.py)\n- [Property Testing a Smart Contract](https://youtu.be/pF8HpKmaQi4)\n  - Property tests also located in [`src/week06/tests/test_negative_r_timed.py`](src/week06/tests/test_negative_r_timed.py)\n  - Read the documentation on [hypothesis](https://hypothesis.readthedocs.io/en/latest/)\n    to get familiar with property testing in Python.\n- [Testing Smart Contracts with Lucid](https://youtu.be/aUrIuDQgg5c)\n  - N/A.\n- [Double Spending and Homework](https://youtu.be/AZVpkwRhEaY)\n  - Complete the following test [`src/week06/homework/test_exploitable_swap.py`](src/week06/homework/test_exploitable_swap.py)\n  - Use your completed test to implement a fix to the swap script: [`src/week06/homework/fixed_swap.py`](src/week06/homework/fixed_swap.py)\n\n\n### Week 7\nThis week introduces Marlowe. There won't be any relevant opshin code for this week.\n\n- [Introduction](https://youtu.be/KCWuj2DXEY4)\n- [Marlowe Playground Demo](https://youtu.be/fldaBHmYfqk)\n- [Homework](https://youtu.be/C4WWnQZOAAM)\n- [Marlowe Starter Kit: Docker](https://youtu.be/wgSvPlWUrf8)\n- [Marlowe Starter Kit: Preliminaries](https://youtu.be/hGBmj9ZrYHs)\n- [Marlowe Starter Kit: ZCB using the Marlowe Runtime command-line client](https://youtu.be/pjDtuD5rimI)\n- [Marlowe Starter Kit: ZCB using the Marlowe Runtime REST API](https://youtu.be/wgJVdkM2pBY)\n- [Marlowe Starter Kit: ZCB using the Marlowe Runtime CLI](https://youtu.be/ELc72BKf7ec)\n- [Marlowe Starter Kit: Escrow using the Marlowe Runtime's REST API](https://youtu.be/E8m-PKbS9TI)\n- [Marlowe Starter Kit: Swap contract using the Marlowe Runtime's REST API](https://youtu.be/sSrVCRNoytU)\n\n### Week 8\n\n- [Introduction](https://youtu.be/07ATzubeHjo)\n- [The Private Testnet](https://youtu.be/BBqOZAuMx1c)\n- [Plutus \u0026 Staking](https://youtu.be/1Hs6bU9pXi4)\n- [Trying it on the Testnet](https://youtu.be/fzYXwdrfu44)\n- [Homework](https://youtu.be/rO3FVGsuzUg)\n\n### Week 9\n\n- [Creating our own Stablecoin Dapp](https://youtu.be/KDzyMy0WN9M)\n- [Using our Stablecoin UI](https://youtu.be/MVq51lZkutA)\n- [Stablecoin's Oracle](https://youtu.be/XfbEsFPbzCI)\n- [Deploying Stablecoin's Reference scripts](https://youtu.be/AokRj-upwlY)\n- [Minting Stablecoins](https://youtu.be/mUa9sztfPKs)\n- [Burning Stablecoins and Liquidating positions](https://youtu.be/u2cUeD72MrQ)\n- [Testing our Stablecoin's scripts](https://youtu.be/-MBebK33FOU)\n- [Homework](https://youtu.be/yfmLaLcDjtc)\n\n### Week 10\n\n- [Introduction](https://www.youtube.com/watch?v=Vp4UGDUv8BM\u0026list=PLNEK_Ejlx3x0ivViR3g9lAkB4Qj3iejp1\u0026index=2)\n- [Developing a Dapp with MeshJS and PluTs (Typescript)](https://www.youtube.com/watch?v=tazyJWUL0nM\u0026list=PLNEK_Ejlx3x0ivViR3g9lAkB4Qj3iejp1\u0026index=1)\n- [Developing smart contracts with PluTs (Typescript)](https://www.youtube.com/watch?v=WN4yxa-ISyk\u0026list=PLNEK_Ejlx3x0ivViR3g9lAkB4Qj3iejp1\u0026index=5)\n- [Developing smart contracts with OpShin and PyCardano (Python)](https://www.youtube.com/watch?v=Ale01hnxZEg\u0026list=PLNEK_Ejlx3x0ivViR3g9lAkB4Qj3iejp1\u0026index=3)\n- [Developing smart contracts with Plutarch (Haskell)](https://www.youtube.com/watch?v=2PNTJLzcP2k\u0026list=PLNEK_Ejlx3x0ivViR3g9lAkB4Qj3iejp1\u0026index=4)\n- [Developing smart contracts with Aiken](https://www.youtube.com/watch?v=Y6x46s60bks\u0026list=PLNEK_Ejlx3x0ivViR3g9lAkB4Qj3iejp1\u0026index=5)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpShin%2Fopshin-pioneer-program","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOpShin%2Fopshin-pioneer-program","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpShin%2Fopshin-pioneer-program/lists"}