The Abstract Module Template is a starting point for developing composable smart-contracts, or "Modules" on the Abstract platform. To learn more about Abstract Accounts, please see the abstract accounts documentation. To read more about modules, please see the module documentation.
This template includes examples for both an app, adapter and standalone in a workspace.
Learn more about the requirements for developing Abstract apps in the getting started documentation.
To get started, the following commands:
cargo generate --git https://github.com/AbstractSDK/templates.git
It will prompt Project Name (will be used for namespace), App Name, Adapter Name and Standalone Name. It will also prompt for including IBC related code. You can do this if you aim to build an IBC-enabled application on an App module.
cd {{project-name}}
to go to your newly created project and finish setup by running the following command:
./template-setup.sh
The setup will suggest you to install a few tools that are used in the template. You can skip this step if you already have them installed or if you're not planning on using them.
This repository comes with a justfile
, which is a handy task runner that helps with building, testing, and publishing your Abstract app module.
To fully make use of the justfile
, you need to install a few tools first. You can do this by simply running just install-tools
. See tools used the template for more information.
Here are some of the tasks available in the justfile
:
install-tools
: Install all the tools needed to run the tasks.wasm
: Optimize the contract.test
: Run all tests.fmt
: Format the codebase (including .toml).lint
: Lint-check the codebase.lintfix
: Fix linting errors automatically.watch
: Watch the codebase and runcargo check
on changes.watch-test
: Watch the codebase and run tests on changes.publish CHAIN_ID
: Publish the App to a network.schema
: Generate the json schemas for the contract
publish-schemas
: Publish the schemas by creating a PR on the Abstract schemas repository.
You can see the full list of tasks available by running just --list
.
You can compile your module(s) by running the following command:
just wasm
This should result in an artifacts directory being created in your project root. Inside you will find a my_module.wasm
file that is your module’s binary.
You can test the module using the different provided methods.
- Integration testing: We provide an integration testing setup in both contracts. The App tests can be found here here. You can re-use the setup provided in this file to test different execution and query entry-points of your module. Once you are satisfied with the results you can try publishing it to a real chain.
Once testing is done you can attempt an actual deployment on test and mainnet.
Before attempting to publish your app you need to add your mnemonic to the .env
file. Don't use a mnemonic that has mainnet funds for testing.
Select from a wide range of supported chains before proceeding. Make sure you've some balance enough to pay gas for the transaction.
You can now use just publish CHAIN_ID
to run the examples/publish.rs
script. The script will publish the app to the networks that you provided. Make sure you have enough funds in your wallet on the different networks you aim to publish on.
To publish your module schemas, we provide the publish-schemas
command, which creates a pull request on the Abstract schemas repository.
Please install github cli before proceeding. Also login and setup your github auth by gh auth login
. Now, we're ready to proceed.
just publish-schemas <namespace> <name> <version>
namespace
: Your module's namespace({{project-name}})name
: Your module's nameversion
: Your module's version. Note that if you only include the minor version (e.g.,0.1
), you don't have to reupload the schemas for every patch version.
The command will automatically clone the Abstract Schemas repository, create a new branch with the given namespace, name, and version, and copy the schemas and metadata from your module to the appropriate directory.
For this command to work properly, please make sure that your metadata.json
file is located at the root of your module's directory. This file is necessary for the Abstract Frontend to correctly interpret and display information about your module.
Example:
just publish-schemas my-namespace my-module 0.0.1
In the example above, my-namespace
is the namespace, my-module
is the module's name, and 0.1
is the minor version. If you create a patch for your module (e.g., 0.1.1
), you don't need to run publish-schemas
again unless the schemas have changed.
We welcome contributions to the Abstract App Module Template! To contribute, fork this repository and submit a pull request with your changes. If you have any questions or issues, please open an issue in the repository and we will be happy to assist you.
Check out the following places for support, discussions & feedback:
- Join our Discord server