{"id":26905811,"url":"https://github.com/abstractsdk/cw-orch-workshop","last_synced_at":"2026-01-23T13:47:16.302Z","repository":{"id":238085936,"uuid":"795522384","full_name":"AbstractSDK/cw-orch-workshop","owner":"AbstractSDK","description":"Cw-orch Workshop. This repository is for learning cw-orch !","archived":false,"fork":false,"pushed_at":"2024-08-19T10:20:23.000Z","size":325,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"quests","last_synced_at":"2025-04-01T10:58:59.121Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AbstractSDK.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-05-03T13:15:31.000Z","updated_at":"2024-08-19T10:20:27.000Z","dependencies_parsed_at":"2024-08-19T12:04:53.375Z","dependency_job_id":"efafbfd5-ce28-4101-92e3-feb53e1f41ec","html_url":"https://github.com/AbstractSDK/cw-orch-workshop","commit_stats":null,"previous_names":["abstractsdk/cw-orch-workshop"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AbstractSDK/cw-orch-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fcw-orch-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fcw-orch-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fcw-orch-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fcw-orch-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AbstractSDK","download_url":"https://codeload.github.com/AbstractSDK/cw-orch-workshop/tar.gz/refs/heads/quests","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fcw-orch-workshop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28693331,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T11:01:27.039Z","status":"ssl_error","status_checked_at":"2026-01-23T11:00:26.909Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2025-04-01T10:59:01.834Z","updated_at":"2026-01-23T13:47:16.278Z","avatar_url":"https://github.com/AbstractSDK.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cw-orchestrator workshop\n\nThis repository contains a workshop to learn [cw-orch](https://orchestrator.abstract.money). There are 5 quests that will help you setup a smart-contract to be able to test, script, deploy and maintain it. Be ready to change the way you work with smart-contracts forever.\n\nAll the quests are explained as comment inside the code. They all start with `QUEST #x.y`. If you are looking for a quest, you can search the whole folder for those symbols ! For instance for the first quest, look for `QUEST #1.1`.\n\nThe solutions are located inside the `solution` branch of this repository. [You can access them online](https://github.com/AbstractSDK/cw-orch-workshop/tree/solution), or by running `git checkout solution` inside this repo.\n\nQuest 1 and 5 are independent of all the others, so you can complete them in any order. However, following the steps in order will help you discover cw-orch features in their order of complexity and regularity of use.\n\n## Quest 1\n\nThis quest is aimed at introducing the cw-orch setup. You have 3 different quests:\n\n1. Create the Contract interface.\n2. Implement the Uploadable trait\n3. Apply the macros that facilitate contract interactions\n\nThe contract you are touching is a simple counter contract (increment, reset, count), so nothing really interesting here.\nBut this will allow you to better understand how simple the cw-orch setup is. It's a little boilerplate code, nothing too major.\nIn case you need help, [the 2-3 first pages](https://orchestrator.abstract.money/contracts/index.html) in this part of the documentation provide all the code and pointer that you need.\n\n## Quest 2\n\n### Presentation\n\nNow let's play with a more interesting contract.\nThe `minter` or `cw721-minter` contract is a contract that allows users to mint NFTs against a payment of both cw20 and native tokens. To be a little more specific, this contract allows to:\n\n- Mint an NFT by sending native tokens to the `{\"mint\":{}}` endpoint.\n- Mint an NFT by using the `{\"send\":{}}` endpoint of a CW20 token.\n\nIn this quest, you will learn how to test your contract inside a local Rust environment. You will see what cw-orch provides and how easy it is to test your contracts! All the code in this quest is actually ran inside [`cw-multi-test`](https://github.com/CosmWasm/cw-multi-test/).\n\nWe will re-use the cw20 and cw721 standard implementations from other projects. You will learn a little about inter-operability and working with other projects.\n\n### Specifics\n\n- The native and cw20 token used for minting are whitelisted at contract instantiation.\n- The contract is only able to mint 1 NFT per block per address. So if you want to mint an NFT for the same account, you need to wait at least 1 block.\n- We won't touch at the contract code at all. Feel free to browse it though, there may be some hidden good (and maybe bad ?) practices that you can re-use in your own projects !\n\n### Sub-quests\n\nHere are the quests that you will encounter in part 2:\n\n1. Register the contract `reply` endpoint.\n2. Mint cw20 tokens\n3. Mint native tokens\n4. Mint an NFT\n5. Mint a second NFT\n\n## Quest 3\n\nNow we have seen how to test your contracts with a very straightforward and simple syntax inside cw-multi-test. Cw-orch however provides multiple other execution environments:\n\n- Test Tube: executing locally on an actual chain binaries, without leaving your code.\n- Daemon: executing on actual block-chains.\n- .. Learn more about execution environments in the [official cw-orch documentation](https://orchestrator.abstract.money/).\n\nIn this quest, we will make the code generic to be able to use it on any chain supported by cw-orch. Let's dive in:\n\n1. Create a generic function that you can call with any CwEnv environment.\n2. Call the function on a `MockBech32` environment.\n3. Call the function on a `OsmosisTestTube` environment.\n4. Call the function on a `Daemon` environment.\n\n## Quest 4\n\nYou are getting better at this! You have abstracted away the execution environment!\n\nNow let's go one step further and create a bundle that you can export for other developers and users to re-use your project!\n\nThis quest only has 1 steps, you should be good to do everything on your own now ! If you don't have everything, don't forget that the solution is available on the `solution` branch.\n\nStep 2 provides the markers for 2 tests of your implementation!\n\n## Quest 5\n\nNow that you know how to export a bundle, you need to learn how to import and work with a bundle.\n\nTo make `5-load`  and `5-deploy` examples work, after your have complete quest 5.1, the following env vars need to be defined:\n\n- `TEST_MNEMONIC`\n- `RUST_LOG`\n\nYou can defined them in a `.env` file inside the root directory of this repo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabstractsdk%2Fcw-orch-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabstractsdk%2Fcw-orch-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabstractsdk%2Fcw-orch-workshop/lists"}