Skip to content

[Devnet] Local development environment setup#3

Draft
crucible-burnt wants to merge 16 commits into
mainfrom
chore/devnet-v28
Draft

[Devnet] Local development environment setup#3
crucible-burnt wants to merge 16 commits into
mainfrom
chore/devnet-v28

Conversation

@crucible-burnt

Copy link
Copy Markdown

Devnet Full Stack

Part of the Devnet Full Stack project — complete local dev environment via docker-compose.

Changes

  • Dockerfile for local dev (if applicable)
  • .env.devnet with local service endpoints
  • Branch synced to latest default

Testing

docker build -t burnt-labs/devnet:devnet .
docker run --rm burnt-labs/devnet:devnet

Parent

  • burnt-labs/devnet branch: chore/devnet-v28

- Update XIOND_VERSION from 20.0.0 to 28.1.0
- Update xion submodule branch from release/v20 to release/v28
- Add 'zk' module to IMPORT_MODULES array in entrypoint.sh
- SOURCE_CHAIN_CODE_IDS unchanged (1=account, 1260=treasury on testnet-2)

Ref: DO-239
New x/dkim module in xion v28 needs params imported from source chain.

Ref: DO-239
…ing)

Phase 2 (DO-240):
- Add account-abstraction-api and xion-indexer as new submodules
- Update xion-dashboard-app and xion-staking submodule pointers
- Add docker-compose services: AA API, Indexer (Postgres + SubQuery node + GraphQL), Dashboard, Staking
- Add HAProxy backends for all new services (ports 3001-3004)
- Add indexer-db volume for Postgres persistence

Submodule changes:
- xion-indexer: added xion-devnet-1 network config in project.ts
- xion-staking: switched to standalone output for Docker compatibility
- Osmosis entrypoint: single validator, localosmo-1, fast blocks, API/gRPC enabled
- Noble entrypoint: single validator, noble-devnet-1, USDC fiat-tokenfactory genesis config, auto-mint after start
- Hermes config.toml: three-chain relay (xion, osmosis, noble)
- Hermes entrypoint: waits for chains, imports keys, creates clients/connections/channels
- HAProxy IBC config: osmosis RPC:26757/API:1417, noble RPC:26857/API:1517
- Shared relayer mnemonic across all chains for Hermes key import
Services (25+):
- Core: xion (3 validators), haproxy, explorer, faucet
- Apps: AA API, dashboard, staking, dev-portal, indexer (SubQuery), assets
- OAuth: oauth3, oauth2-api-service, oauth2-clients-dashboard
- ZK: zk-email-backend, zk-email-prover, zk-email-worker
- IBC: osmosis (v28.0.0), noble (v11.3.0), hermes relayer (v1.12.0)
- Infra: postgresql

Profiles: core, apps, oauth, zk, ibc, full
HAProxy: routes for all 20+ backends
Hermes: config for xion↔osmosis, xion↔noble IBC
.gitmodules: 17 submodules (7 new)
.env.example, Makefile, README updated
Adds scripts/init/deploy-contracts.sh that runs after the chain starts
producing blocks to:
- Instantiate abstract account contract (code_id=1)
- Instantiate treasury/fee-granter contract (code_id=2)
- Fund the treasury for gasless UX
- Output contract addresses for downstream services

Also adds deploy-contracts service to docker-compose.yml that runs as
a one-shot init container in the apps/oauth/zk/full profiles.
… audience

- Uncomment abstractaccount.params.allowed_code_ids = ["1"] (required for AA)
- Add allow_all_code_ids = false per e2e test reference
- Configure JWK audience for Stytch test project
- Fetch and embed Stytch JWKS public key for JWT validation
- Update entrypoint.sh to pass Stytch/abstraxion args to jq
- Fix jq syntax (missing pipe operator before abstractaccount line)
Not needed — use Stytch directly for OAuth2 flows.
Only xion-indexer was removed — xion-indexer-proxy is a separate service.
…al refs (DO-273)

Register xion-indexer-proxy, oauth2-api-service, oauth2-clients-dashboard,
zk-email-backend, zk-email-prover, zk-email-worker as proper submodules
(replacing .gitkeep placeholders). Update xion-assets .gitmodules branch
to main (chore/devnet doesn't exist upstream). Update xion-developer-portal
to chore/devnet HEAD.
…s (DO-273)

Both xion-developer-portal and xion-assets Dockerfiles expose port 3000,
but compose had 3002 and 3003 respectively. Aligns ports and healthchecks.
Avoid host bind mounts for validator init scripts by copying them through a busybox init container into a named volume. Validators and deploy-contracts mount the resulting volume read-only, which keeps local compose behavior compatible with DinD environments.

Co-authored-by: Crucible <crucible@burnt.com>
@crucible-burnt

Copy link
Copy Markdown
Author

DO-272 update: replaced the ./scripts/init host bind mount for xion validators with an init-scripts busybox init container that copies scripts into a named Docker volume. xion and deploy-contracts now mount that volume read-only.

Verification:

  • docker compose --profile core config --services succeeds after checking out the core submodules (xion, xion-explorer, xion-faucet).
  • Rendered compose config confirms xion depends on init-scripts with service_completed_successfully and mounts init-scripts:/home/xiond/init:ro.

Blocked verification:

  • Could not run docker compose --profile core up in this gateway because Docker API access is denied: permission denied while trying to connect to the docker API at unix:///var/run/docker.sock.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants