generated from AbstractSDK/templates
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 6df24f8
Showing
77 changed files
with
5,545 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
[alias] | ||
wasm = "build --release --target wasm32-unknown-unknown" | ||
unit-test = "test --lib" | ||
|
||
# You can specify your package with `--package` option | ||
schema = "run --bin schema --features schema" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
root = true | ||
|
||
[*] | ||
indent_style = space | ||
indent_size = 2 | ||
charset = utf-8 | ||
trim_trailing_whitespace = true | ||
insert_final_newline = true | ||
|
||
[*.rs] | ||
indent_size = 4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
schema/*.json linguist-generated=true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
version: 2 | ||
updates: | ||
- package-ecosystem: github-actions | ||
directory: / | ||
schedule: | ||
interval: daily | ||
- package-ecosystem: cargo | ||
directory: / | ||
schedule: | ||
interval: daily | ||
ignore: | ||
- dependency-name: "*" | ||
# patch and minor updates don't matter for libraries | ||
# remove this ignore rule if your package has binaries | ||
update-types: | ||
- "version-update:semver-patch" | ||
- "version-update:semver-minor" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
permissions: | ||
contents: read | ||
on: | ||
push: | ||
branches: [main] | ||
pull_request: | ||
name: check | ||
jobs: | ||
fmt: | ||
runs-on: ubuntu-latest | ||
name: stable / fmt | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install stable | ||
uses: dtolnay/rust-toolchain@stable | ||
with: | ||
components: rustfmt | ||
- name: cargo fmt --check | ||
run: cargo fmt --check | ||
- name: install taplo-cli | ||
run: cargo install taplo-cli --locked | ||
- name: taplo fmt --check | ||
run: find . -type f -iname "*.toml" -print0 | xargs -0 taplo format --check | ||
clippy: | ||
runs-on: ubuntu-latest | ||
name: ${{ matrix.toolchain }} / clippy | ||
permissions: | ||
contents: read | ||
checks: write | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
toolchain: [stable, beta] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install ${{ matrix.toolchain }} | ||
uses: dtolnay/rust-toolchain@master | ||
with: | ||
toolchain: ${{ matrix.toolchain }} | ||
components: clippy | ||
- name: cargo clippy | ||
uses: actions-rs/clippy-check@v1 | ||
with: | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
args: --all-features -- -D warnings | ||
doc: | ||
runs-on: ubuntu-latest | ||
name: nightly / doc | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install nightly | ||
uses: dtolnay/rust-toolchain@nightly | ||
- name: cargo doc | ||
run: cargo doc --no-deps --lib --all-features | ||
env: | ||
RUSTDOCFLAGS: --cfg docsrs | ||
hack: | ||
runs-on: ubuntu-latest | ||
name: ubuntu / stable / features | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install stable | ||
uses: dtolnay/rust-toolchain@stable | ||
- name: cargo install cargo-hack | ||
uses: taiki-e/install-action@cargo-hack | ||
- name: cargo hack | ||
run: cargo hack --feature-powerset check --lib --tests | ||
msrv: | ||
runs-on: ubuntu-latest | ||
# we use a matrix here just because env can't be used in job names | ||
# https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability | ||
strategy: | ||
matrix: | ||
msrv: [1.72.0] # cosmrs v0.15.0 requires 1.72.0 or newer | ||
name: ubuntu / ${{ matrix.msrv }} | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install ${{ matrix.msrv }} | ||
uses: dtolnay/rust-toolchain@master | ||
with: | ||
toolchain: ${{ matrix.msrv }} | ||
- name: cargo +${{ matrix.msrv }} check | ||
run: cargo check |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
permissions: | ||
contents: read | ||
on: | ||
push: | ||
branches: [main] | ||
pull_request: | ||
schedule: | ||
- cron: "7 7 * * *" | ||
name: rolling | ||
jobs: | ||
# https://twitter.com/mycoliza/status/1571295690063753218 | ||
nightly: | ||
runs-on: ubuntu-latest | ||
name: ubuntu / nightly | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install nightly | ||
uses: dtolnay/rust-toolchain@nightly | ||
- name: cargo generate-lockfile | ||
if: hashFiles('Cargo.lock') == '' | ||
run: cargo generate-lockfile | ||
- name: cargo test --locked | ||
run: cargo test --locked --all-features --all-targets | ||
# https://twitter.com/alcuadrado/status/1571291687837732873 | ||
update: | ||
runs-on: ubuntu-latest | ||
name: ubuntu / beta / updated | ||
# There's no point running this if no Cargo.lock was checked in in the | ||
# first place, since we'd just redo what happened in the regular test job. | ||
# Unfortunately, hashFiles only works in if on steps, so we reepeat it. | ||
# if: hashFiles('Cargo.lock') != '' | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install beta | ||
if: hashFiles('Cargo.lock') != '' | ||
uses: dtolnay/rust-toolchain@beta | ||
- name: cargo update | ||
if: hashFiles('Cargo.lock') != '' | ||
run: cargo update | ||
- name: cargo test | ||
if: hashFiles('Cargo.lock') != '' | ||
run: cargo test --locked --all-features --all-targets | ||
env: | ||
RUSTFLAGS: -D deprecated |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
permissions: | ||
contents: read | ||
on: | ||
push: | ||
branches: [main] | ||
pull_request: | ||
name: test | ||
jobs: | ||
required: | ||
runs-on: ubuntu-latest | ||
name: ubuntu / ${{ matrix.toolchain }} | ||
strategy: | ||
matrix: | ||
toolchain: [stable, beta] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- name: Install ${{ matrix.toolchain }} | ||
uses: dtolnay/rust-toolchain@master | ||
with: | ||
toolchain: ${{ matrix.toolchain }} | ||
- name: cargo generate-lockfile | ||
if: hashFiles('Cargo.lock') == '' | ||
run: cargo generate-lockfile | ||
- name: cargo test --locked | ||
run: cargo test --locked --all-features --all-targets |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
/target | ||
|
||
artifacts | ||
|
||
Cargo.lock | ||
|
||
.env | ||
|
||
.vscode | ||
.idea | ||
|
||
state.json | ||
|
||
typescript/node_modules | ||
|
||
contracts/**/schema |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
[workspace] | ||
members = ["contracts/*"] | ||
resolver = "2" | ||
|
||
[profile.release] | ||
rpath = false | ||
lto = true | ||
overflow-checks = true | ||
opt-level = 3 | ||
debug = false | ||
debug-assertions = false | ||
codegen-units = 1 | ||
panic = 'abort' | ||
incremental = false | ||
|
||
[workspace.dependencies] | ||
cosmwasm-std = { version = "1.5.3" } | ||
cosmwasm-schema = { version = "1.5.3" } | ||
cw-controllers = { version = "1.1.2" } | ||
cw-storage-plus = "1.2.0" | ||
thiserror = { version = "1.0.50" } | ||
schemars = "0.8" | ||
cw-asset = { version = "3.0.0" } | ||
abstract-app = { version = "0.22.2" } | ||
abstract-adapter = { version = "0.22.2" } | ||
abstract-interface = { version = "0.22.0" } | ||
abstract-client = { version = "0.22.0" } | ||
lazy_static = "1.4.0" | ||
|
||
|
||
cw-orch = { version = "0.22.2" } | ||
const_format = "0.2.32" | ||
|
||
my-app = { path = "contracts/my-app" } | ||
my-adapter = { path = "contracts/my-adapter" } | ||
speculoos = "0.11.0" | ||
semver = "1.0" | ||
dotenv = "0.15.0" | ||
env_logger = "0.11.3" | ||
clap = { version = "4.3.7" } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# Abstract App Module Template | ||
|
||
The Abstract Module Template is a starting point for developing composable smart-contracts, or "Apps" on the Abstract platform. An App is instantiated for each Account individually and is migratable. Apps are allowed to perform actions on Abstract Accounts and can integrate with other Apps and Adapters installed on the Account. To learn more about Abstract Accounts, please see the [abstract accounts documentation](https://docs.abstract.money/3_framework/3_architecture.html). To read more about apps, please see the [app module documentation](https://docs.abstract.money/3_framework/6_module_types.html). | ||
|
||
This template includes examples for both an app and adapter in a workspace. | ||
|
||
## Getting Started | ||
|
||
### Requirements | ||
|
||
Learn more about the requirements for developing Abstract apps in the [getting started documentation](https://docs.abstract.money/4_get_started/1_index.html). | ||
|
||
### Setup | ||
|
||
To get started, clone this repository and run the following command: | ||
|
||
```shell | ||
chmod +x ./template-setup.sh | ||
./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. | ||
|
||
### Updating Names | ||
|
||
We recommend updating the names of the packages and variables to be custom to your application. You should be able to do this easily with a global replace. | ||
|
||
For example: | ||
|
||
- ~~my-app~~ -> ibcmail-client | ||
- ~~my_app~~ -> ibcmail_client | ||
- ~~MyApp~~ -> IbcMailClient | ||
- ~~my-adapter~~ -> ibcmail-server | ||
- ~~my_adapter~~ -> ibcmail_server | ||
- ~~MyAdapter~~ -> IbcMailServer | ||
|
||
## Using the Justfile | ||
|
||
This repository comes with a [`justfile`](https://github.com/casey/just), which is a handy task runner that helps with building, testing, and publishing your Abstract app module. | ||
|
||
### Installing Tools | ||
|
||
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](https://docs.abstract.money/3_get_started/2_installation.html?#tools-used-in-the-template) for more information. | ||
|
||
### Available Tasks | ||
|
||
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 run `cargo 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 | ||
<!-- - `ts-codegen`: Generate the typescript app code for the contract --> | ||
<!-- - `ts-publish`: Publish the typescript app code to npm --> | ||
- `publish-schemas`: Publish the schemas by creating a PR on the Abstract [schemas](https://github.com/AbstractSDK/schemas) repository. | ||
|
||
You can see the full list of tasks available by running `just --list`. | ||
|
||
### Compiling | ||
|
||
You can compile your module(s) by running the following command: | ||
|
||
```sh | ||
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. | ||
|
||
### Testing | ||
|
||
You can test the module using the different provided methods. | ||
|
||
1. **Integration testing:** We provide an integration testing setup in both contracts. The App tests can be found here [here](./contracts/app/tests/integration.rs). 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. | ||
2. **Local Daemon (Optional):** Once you have confirmed that your module works as expected you can spin up a local node and deploy Abstract + your app onto the chain. You need [Docker](https://www.docker.com/) installed for this step. You can do this by running the [test-local](./contracts/app/examples/test-local.rs) example, which uses a locally running juno daemon to deploy to. You can setup local juno using `just juno-local` command. At this point you can also test your front-end with the contracts. | ||
|
||
Once testing is done you can attempt an actual deployment on test and mainnet. | ||
|
||
### Publishing | ||
|
||
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.** | ||
|
||
<!-- It's also assumed that you have an account and module namespace claimed with this account before publishing. You can read how to do that [here](https://docs.abstract.money/4_get_started/5_abstract_client.html). --> | ||
Select from a wide range of [supported chains](https://orchestrator.abstract.money/chains/index.html) 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`](./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. | ||
|
||
### Publishing Module Schemas | ||
|
||
To publish your module schemas, we provide the `publish-schemas` command, which creates a pull request on the Abstract [schemas](https://github.com/AbstractSDK/schemas) repository. | ||
|
||
Please install [github cli](https://cli.github.com/) before proceeding. Also login and setup your github auth by `gh auth login`. Now, we're ready to proceed. | ||
|
||
```bash | ||
just publish-schemas <namespace> <name> <version> | ||
``` | ||
|
||
- `namespace`: Your module's namespace | ||
- `name`: Your module's name | ||
- `version`: 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: | ||
|
||
```bash | ||
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. | ||
|
||
## Contributing | ||
|
||
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. | ||
|
||
## Community | ||
|
||
Check out the following places for support, discussions & feedback: | ||
|
||
- Join our [Discord server](https://discord.com/invite/uch3Tq3aym) |
Oops, something went wrong.