{"id":26905835,"url":"https://github.com/abstractsdk/dca-module-workshop","last_synced_at":"2025-04-01T10:59:05.882Z","repository":{"id":180135263,"uuid":"664590213","full_name":"AbstractSDK/dca-module-workshop","owner":"AbstractSDK","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-10T14:46:13.000Z","size":934,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"quests","last_synced_at":"2024-05-10T15:51:14.412Z","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":"2023-07-10T10:08:54.000Z","updated_at":"2024-05-10T14:39:24.000Z","dependencies_parsed_at":"2024-04-16T20:25:38.210Z","dependency_job_id":"3fe3994e-59ac-498c-b7bb-90e39b1fd59d","html_url":"https://github.com/AbstractSDK/dca-module-workshop","commit_stats":null,"previous_names":["abstractsdk/awesomewasm-workshop"],"tags_count":0,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fdca-module-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fdca-module-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fdca-module-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AbstractSDK%2Fdca-module-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AbstractSDK","download_url":"https://codeload.github.com/AbstractSDK/dca-module-workshop/tar.gz/refs/heads/quests","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246628226,"owners_count":20808106,"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":[],"created_at":"2025-04-01T10:59:05.376Z","updated_at":"2025-04-01T10:59:05.876Z","avatar_url":"https://github.com/AbstractSDK.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Abstract App Building Workshop\n\nThis workshop will be a hands-on introduction to building apps with [Abstract](https://abstract.money). We'll be completing a dollar-cost-averaging app that will allow users to set up recurring purchases of a token of the\nir choice. The goal of the workshop is to have the app's tests passing by the end of the workshop, setting you up to build your own apps with Abstract.\n\n\u003e `solution` branch contains the quests with the solutions. `quests` branch contains the quests without the solutions.\n\n## Prerequisites\n\nHave a brief look at the required prerequisites [here](https://docs.abstract.money/4_get_started/2_installation.html). The recommended tools won't be required for this workshop.\n\n\u003e You can run `cargo check` to make sure that the application compiles.\n\u003e You can then run `cargo test` to see the failing tests.\n\n## Outline\n\nA high-level introduction to Abstract will be given, followed by the use-case of the application and a brief overview of the codebase. We'll then dive into the code and complete the app together in Quests.\n\n## Application\n\nThe application we're building is a dollar-cost-averaging application that allows the owner of an Abstract smart-contract wallet to set up recurring purchases of a token of their choice. The user will be able to set the amount of tokens they want to purchase, the frequency of the purchases, and the token they want to purchase. The application will then automatically purchase the tokens for the user at the specified frequency.\n\n## Codebase\n\nThe working codebase can be found in [our monorepo](https://github.com/AbstractSDK/abstract/tree/main/modules/contracts/apps/dca).\n\n## Quests\n\nThe quests consist of a series of missing code snippets that you'll need to complete in order to get the application to work. The quests are numbered by `#{quest_number}`. At the beginning of each quest you can search for that and find the locations that need fixing.\n\n## Quest 0: Module Dependencies\n\nModule dependencies define what other modules the application requires to perform its logic. This segregation of concerns allows for more modular applications that can be reused in different contexts.\n\n\u003e To find the code that needs work, search for `#0` in your IDE of choice.\n\n## Quest 1: Admin Validation\n\nEach application has an `admin` that is able to perform administrative actions on the application. In this case, the `admin` is the owner of the Abstract smart-contract wallet that the application is installed on. We need to make sure that the `admin` is the one calling the administrative functions.\n\n\u003e To find the code that needs work, search for `#1` in your IDE of choice.\n\n## Quest 2: Abstract SDK composable APIs\n\nThe [`abstract-sdk`](https://docs.abstract.money/4_get_started/4_sdk.html) allows developers to create APIs for their modules. These APIs allow users (contracts) of that module to interact with it in an intuitive way. In this quest we'll be using the Dex and CronCat APIs to set up token swaps and schedule recurring transactions.\n\n## Quest 3: Module Message Types\n\nAbstract applications have some base functionality that is shared across all applications. This includes the ability to set the `admin` of the application, and the ability to transfer ownership of the application. In this quest we'll see how that effects the entry point messages that the application exposes, which is important to know for interacting with the application.\n\n## Quest 4: DCA App Testing Setup\n\nTesting is an important part of building applications. In this quest you'll deploy the required infrastructure to test the application.\n\n\u003e Testing abstract modules is made easy through the use of [`cw-orchestrator`](https://github.com/AbstractSDK/cw-orchestrator), our flagship dev-tooling product.\n\n## Quest 5: Easily interacting with the DCA App\n\nIn order to speed up both deployment and testing of the application, we've created [`cw-orchestrator`](https://github.com/AbstractSDK/cw-orchestrator). In this quest you'll use the auto-generated methods on the app interface to interact with it in a testing environment. The same interactions can be executed on any other CosmWasm-supporting environment!\n\n## Quest 6: Deploying the DCA App. (bonus)\n\nWow, congrats you got this far!\n\nThis task will show you how you can use [`cw-orchestrator`](https://github.com/AbstractSDK/cw-orchestrator) to deploy your application to any testnet or mainnet. You'll need to have some tokens to complete this quest.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabstractsdk%2Fdca-module-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabstractsdk%2Fdca-module-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabstractsdk%2Fdca-module-workshop/lists"}