-
Notifications
You must be signed in to change notification settings - Fork 58
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Multi-Chain IBC Transfers Example (#54)
- Loading branch information
Showing
18 changed files
with
692 additions
and
0 deletions.
There are no files selected for viewing
33 changes: 33 additions & 0 deletions
33
Multi-Chain/osmosis-cosmos-bridge/.github/workflows/cli-deploy.yml
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,33 @@ | ||
name: "CLI deploy" | ||
|
||
on: | ||
workflow_dispatch: | ||
inputs: | ||
projectName: | ||
description: "Project name" | ||
required: true | ||
type: string | ||
jobs: | ||
deploy: | ||
name: CLI Deploy | ||
runs-on: ubuntu-latest | ||
environment: | ||
name: DEPLOYMENT | ||
env: | ||
SUBQL_ACCESS_TOKEN: ${{ secrets.SUBQL_ACCESS_TOKEN }} | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Setup Node.js environment | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: 16 | ||
- run: yarn | ||
- name: Codegen | ||
run: yarn codegen | ||
- name: Version | ||
run: npx subql --version | ||
- name: repo | ||
run: echo ${{github.repository}} | ||
- name: Publish and Deploy | ||
run: | | ||
sh .github/workflows/scripts/publish-deploy.sh -o ${{github.repository}} -p ${{github.event.inputs.projectName}} |
24 changes: 24 additions & 0 deletions
24
Multi-Chain/osmosis-cosmos-bridge/.github/workflows/pr.yml
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,24 @@ | ||
name: PR | ||
on: | ||
pull_request: | ||
paths-ignore: | ||
- ".github/workflows/**" | ||
jobs: | ||
pr: | ||
name: pr | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Setup Node.js environment | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: 16 | ||
- run: yarn | ||
- name: Codegen | ||
run: yarn codegen | ||
- name: Build | ||
run: yarn build | ||
- name: Install subql-node-cosmos | ||
run: yarn global add @subql/node-cosmos | ||
- name: Run tests with Subquery Node | ||
run: subql-node-cosmos test -f ${{ github.workspace }} |
14 changes: 14 additions & 0 deletions
14
Multi-Chain/osmosis-cosmos-bridge/.github/workflows/scripts/publish-deploy.sh
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,14 @@ | ||
#!/bin/bash | ||
|
||
while getopts p:o: flag | ||
do | ||
case "${flag}" in | ||
p) PROJECTNAME=${OPTARG};; | ||
o) ORG=${OPTARG};; | ||
*) echo "Usage: $0 [-p projectname] [-o org]" && exit 1;; | ||
esac | ||
done | ||
|
||
IPFSCID=$(npx subql publish -o -f .) | ||
|
||
npx subql deployment:deploy -d --ipfsCID="$IPFSCID" --projectName="${PROJECTNAME}" --org="${ORG%/*}" |
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,59 @@ | ||
|
||
# These are some examples of commonly ignored file patterns. | ||
# You should customize this list as applicable to your project. | ||
# Learn more about .gitignore: | ||
# https://www.atlassian.com/git/tutorials/saving-changes/gitignore | ||
|
||
# Node artifact files | ||
node_modules/ | ||
dist/ | ||
|
||
# lock files | ||
yarn.lock | ||
package-lock.json | ||
|
||
# Compiled Java class files | ||
*.class | ||
|
||
# Compiled Python bytecode | ||
*.py[cod] | ||
|
||
# Log files | ||
*.log | ||
|
||
# Package files | ||
*.jar | ||
|
||
# Generated files | ||
target/ | ||
dist/ | ||
src/types | ||
project.yaml | ||
|
||
# JetBrains IDE | ||
.idea/ | ||
|
||
# Unit test reports | ||
TEST*.xml | ||
|
||
# Generated by MacOS | ||
.DS_Store | ||
|
||
# Generated by Windows | ||
Thumbs.db | ||
|
||
# Applications | ||
*.app | ||
*.exe | ||
*.war | ||
|
||
# Large media files | ||
*.mp4 | ||
*.tiff | ||
*.avi | ||
*.flv | ||
*.mov | ||
*.wmv | ||
|
||
.data | ||
dist |
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,21 @@ | ||
MIT LICENSE | ||
|
||
Copyright 2020-2021 SubQuery Pte Ltd authors & contributors | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. |
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,79 @@ | ||
# SubQuery - Multi-Chain. Example project for IBC transfers between Osmosis and Cosmos Hub | ||
|
||
[SubQuery](https://subquery.network) is a fast, flexible, and reliable open-source data indexer that provides you with custom APIs for your web3 project across all of our supported networks. To learn about how to get started with SubQuery, [visit our docs](https://academy.subquery.network). | ||
|
||
**This SubQuery project indexes all IBC transfer events between Cosmos Hub and Osmosis** | ||
|
||
## Start | ||
|
||
First, install SubQuery CLI globally on your terminal by using NPM `npm install -g @subql/cli` | ||
|
||
You can either clone this GitHub repo, or use the `subql` CLI to bootstrap a clean project in the network of your choosing by running `subql init` and following the prompts. | ||
|
||
Don't forget to install dependencies with `npm install` or `yarn install`! | ||
|
||
## Editing your SubQuery project | ||
|
||
Although this is a working example SubQuery project, you can edit the SubQuery project by changing the following files: | ||
|
||
- The project manifest in `project.ts` defines the key project configuration and mapping handler filters | ||
- The GraphQL Schema (`schema.graphql`) defines the shape of the resulting data that you are using SubQuery to index | ||
- The Mapping functions in `src/mappings/` directory are typescript functions that handle transformation logic | ||
|
||
SubQuery supports various layer-1 blockchain networks and provides [dedicated quick start guides](https://academy.subquery.network/quickstart/quickstart.html) as well as [detailed technical documentation](https://academy.subquery.network/build/introduction.html) for each of them. | ||
|
||
## Run your project | ||
|
||
_If you get stuck, find out how to get help below._ | ||
|
||
The simplest way to run your project is by running `yarn dev` or `npm run-script dev`. This does all of the following: | ||
|
||
1. `yarn codegen` - Generates types from the GraphQL schema definition and contract ABIs and saves them in the `/src/types` directory. This must be done after each change to the `schema.graphql` file or the contract ABIs | ||
2. `yarn build` - Builds and packages the SubQuery project into the `/dist` directory | ||
3. `docker-compose pull && docker-compose up` - Runs a Docker container with an indexer, PostgeSQL DB, and a query service. This requires [Docker to be installed](https://docs.docker.com/engine/install) and running locally. The configuration for this container is set from your `docker-compose.yml` | ||
|
||
You can observe the three services start, and once all are running (it may take a few minutes on your first start), please open your browser and head to [http://localhost:3000](http://localhost:3000) - you should see a GraphQL playground showing with the schemas ready to query. [Read the docs for more information](https://academy.subquery.network/run_publish/run.html) or [explore the possible service configuration for running SubQuery](https://academy.subquery.network/run_publish/references.html). | ||
|
||
## Query your project | ||
|
||
For this project, you can try to query with the following GraphQL code to get a taste of how it works. | ||
|
||
```graphql | ||
query { | ||
BridgeEvents { | ||
nodes { | ||
id | ||
senderId | ||
receiverId | ||
sourceChain | ||
sourceChainTransaction | ||
destinationChain | ||
destinationChainTransaction | ||
amount | ||
} | ||
} | ||
} | ||
``` | ||
|
||
You can explore the different possible queries and entities to help you with GraphQL using the documentation draw on the right. | ||
|
||
## Publish your project | ||
|
||
SubQuery is open-source, meaning you have the freedom to run it in the following three ways: | ||
|
||
- Locally on your own computer (or a cloud provider of your choosing), [view the instructions on how to run SubQuery Locally](https://academy.subquery.network/run_publish/run.html) | ||
- By publishing it to our enterprise-level [Managed Service](https://managedservice.subquery.network), where we'll host your SubQuery project in production ready services for mission critical data with zero-downtime blue/green deployments. We even have a generous free tier. [Find out how](https://academy.subquery.network/run_publish/publish.html) | ||
- [Coming Soon] By publishing it to the decentralised [SubQuery Network](https://subquery.network/network), the most open, performant, reliable, and scalable data service for dApp developers. The SubQuery Network indexes and services data to the global community in an incentivised and verifiable way | ||
|
||
## What Next? | ||
|
||
Take a look at some of our advanced features to take your project to the next level! | ||
|
||
- [**Multi-chain indexing support**](https://academy.subquery.network/build/multi-chain.html) - SubQuery allows you to index data from across different layer-1 networks into the same database, this allows you to query a single endpoint to get data for all supported networks. | ||
- [**Dynamic Data Sources**](https://academy.subquery.network/build/dynamicdatasources.html) - When you want to index factory contracts, for example on a DEX or generative NFT project. | ||
- [**Project Optimisation Advice**](https://academy.subquery.network/build/optimisation.html) - Some common tips on how to tweak your project to maximise performance. | ||
- [**GraphQL Subscriptions**](https://academy.subquery.network/run_publish/subscription.html) - Build more reactive front end applications that subscribe to changes in your SubQuery project. | ||
|
||
## Need Help? | ||
|
||
The fastest way to get support is by [searching our documentation](https://academy.subquery.network), or by [joining our discord](https://discord.com/invite/subquery) and messaging us in the `#technical-support` channel. |
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 @@ | ||
specVersion: 1.0.0 | ||
name: cosmoshub-ibc | ||
version: 0.0.1 | ||
runner: | ||
node: | ||
name: "@subql/node-cosmos" | ||
version: "*" | ||
query: | ||
name: "@subql/query" | ||
version: "*" | ||
repository: "https://github.com/subquery/juno-subql-starter" | ||
schema: | ||
file: ./schema.graphql | ||
network: | ||
chainId: cosmoshub-4 | ||
# This endpoint must be a public non-pruned archive node | ||
# We recommend providing more than one endpoint for improved reliability, performance, and uptime | ||
# Public nodes may be rate limited, which can affect indexing speed | ||
# When developing your project we suggest getting a private API key | ||
endpoint: ["https://cosmos-rpc.publicnode.com:443"] | ||
# Optionally provide the HTTP endpoint of a full chain dictionary to speed up processing | ||
dictionary: "https://api.subquery.network/sq/subquery/cosmos-hub-dictionary" | ||
dataSources: | ||
- kind: cosmos/Runtime | ||
startBlock: 17934016 | ||
mapping: | ||
file: ./dist/index.js | ||
handlers: | ||
- handler: handleCosmosHubSendEvent | ||
kind: cosmos/EventHandler | ||
filter: | ||
type: send_packet | ||
messageFilter: | ||
type: /ibc.applications.transfer.v1.MsgTransfer | ||
- handler: handleCosmosHubReceiveEvent | ||
kind: cosmos/EventHandler | ||
filter: | ||
type: recv_packet | ||
messageFilter: | ||
type: /ibc.core.channel.v1.MsgRecvPacket |
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,89 @@ | ||
version: "3" | ||
|
||
services: | ||
postgres: | ||
build: | ||
context: . | ||
dockerfile: ./docker/pg-Dockerfile | ||
ports: | ||
- 5432:5432 | ||
volumes: | ||
- .data/postgres:/var/lib/postgresql/data | ||
environment: | ||
POSTGRES_PASSWORD: postgres | ||
healthcheck: | ||
test: ["CMD-SHELL", "pg_isready -U postgres"] | ||
interval: 5s | ||
timeout: 5s | ||
retries: 5 | ||
|
||
subquery-node-osmosis: | ||
image: subquerynetwork/subql-node-cosmos:latest | ||
depends_on: | ||
"postgres": | ||
condition: service_healthy | ||
restart: always | ||
environment: | ||
DB_USER: postgres | ||
DB_PASS: postgres | ||
DB_DATABASE: postgres | ||
DB_HOST: postgres | ||
DB_PORT: 5432 | ||
volumes: | ||
- ./:/app | ||
command: | ||
- ${SUB_COMMAND:-} # set SUB_COMMAND env variable to "test" to run tests | ||
- --multi-chain | ||
- --db-schema=multi-transfers | ||
- --disable-historical | ||
- -f=app/osmosis.yaml | ||
- --batch-size=1 | ||
healthcheck: | ||
test: ["CMD", "curl", "-f", "http://subquery-node:3000/ready"] | ||
interval: 3s | ||
timeout: 5s | ||
retries: 10 | ||
|
||
subquery-node-cosmoshub: | ||
image: subquerynetwork/subql-node-cosmos:latest | ||
depends_on: | ||
"postgres": | ||
condition: service_healthy | ||
restart: always | ||
environment: | ||
DB_USER: postgres | ||
DB_PASS: postgres | ||
DB_DATABASE: postgres | ||
DB_HOST: postgres | ||
DB_PORT: 5432 | ||
volumes: | ||
- ./:/app | ||
command: | ||
- ${SUB_COMMAND:-} # set SUB_COMMAND env variable to "test" to run tests | ||
- --multi-chain | ||
- --db-schema=multi-transfers | ||
- --disable-historical | ||
- -f=app/cosmoshub.yaml | ||
healthcheck: | ||
test: ["CMD", "curl", "-f", "http://subquery-node:3000/ready"] | ||
interval: 3s | ||
timeout: 5s | ||
retries: 10 | ||
|
||
graphql-engine: | ||
image: onfinality/subql-query:latest | ||
ports: | ||
- 3000:3000 | ||
depends_on: | ||
"postgres": | ||
condition: service_healthy | ||
restart: always | ||
environment: | ||
DB_USER: postgres | ||
DB_PASS: postgres | ||
DB_DATABASE: postgres | ||
DB_HOST: postgres | ||
DB_PORT: 5432 | ||
command: | ||
- --name=multi-transfers | ||
- --playground |
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,5 @@ | ||
#!/bin/sh | ||
|
||
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<EOF | ||
CREATE EXTENSION IF NOT EXISTS btree_gist; | ||
EOF |
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,12 @@ | ||
FROM postgres:16-alpine | ||
|
||
# Variables needed at runtime to configure postgres and run the initdb scripts | ||
ENV POSTGRES_DB 'postgres' | ||
ENV POSTGRES_USER 'postgres' | ||
ENV POSTGRES_PASSWORD 'postgres' | ||
|
||
# Copy in the load-extensions script | ||
COPY docker/load-extensions.sh /docker-entrypoint-initdb.d/ | ||
|
||
# Convert line endings to LF | ||
RUN sed -i 's/\r$//' /docker-entrypoint-initdb.d/load-extensions.sh && chmod +x /docker-entrypoint-initdb.d/load-extensions.sh |
Oops, something went wrong.