Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Isolate cosmos-sdk dependency in a separate Go submodule

Aperta
#24 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
go
Ambito
build-system

Direzione di ricerca

Inizia ispezionando il go.mod root e il confine proposto di submit/go.mod, quindi esamina cmd/apex/main.go e i file submit indicati. Verifica come l’interfaccia core possa evitare i tipi cosmos-sdk e come i due moduli verrebbero testati indipendentemente. È completato quando cosmos-sdk è isolato in submit/, il core in sola lettura viene compilato senza di esso e l’interfaccia di submission rimane utilizzabile.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Summary

The core apex codebase must not import cosmos-sdk. All cosmos-sdk-dependent code (transaction construction, signing, gas estimation) must live in an isolated Go submodule with its own go.mod to prevent dependency contamination.

Problem

cosmos-sdk pulls in a massive transitive dependency tree:

  • cometbft (celestia's fork: celestiaorg/celestia-core)
  • iavl, cosmos-db, cosmos-proto
  • gRPC, protobuf, gogoproto
  • celestia-app's own forks of cosmos-sdk

Importing it into the core module would:

  • Bloat build times and binary size for read-only deployments that don't need tx submission
  • Create version pinning headaches against celestia's forked dependencies
  • Make upgrades painful — a celestia-app bump could break unrelated apex code
  • Bleed transitive deps into packages that have no business depending on them

Design

apex/
├── go.mod                      # core module — zero cosmos-sdk
├── cmd/apex/main.go
├── pkg/
│   ├── store/                  # SQLite — clean
│   ├── sync/                   # backfill, streaming — clean
│   ├── fetch/                  # DataFetcher, CelestiaNodeFetcher — clean
│   └── api/                    # JSON-RPC, gRPC server — clean
└── submit/
    ├── go.mod                  # separate Go module, imports cosmos-sdk here
    ├── go.sum
    ├── signer.go               # key loading, tx signing (SIGN_MODE_DIRECT)
    ├── msg.go                  # MsgPayForBlobs construction
    ├── gas.go                  # deterministic gas estimation
    ├── broadcast.go            # BroadcastTxSync + confirmation polling
    └── submit.go               # public API: Submit(blobs) -> TxResult
Boundary interface

The core module defines a submission interface with no cosmos-sdk types:

// In pkg/submit/iface.go (core module, no cosmos-sdk imports)
type BlobSubmitter interface {
    Submit(ctx context.Context, blobs []RawBlob, opts SubmitOpts) (*TxResult, error)
}

type RawBlob struct {
    Namespace []byte
    Data      []byte
}

type TxResult struct {
    TxHash   string
    Height   int64
    GasUsed  int64
    Code     uint32
    Error    string
}

The submit/ submodule implements this interface, converting RawBlob to cosmos-sdk types internally.

Build integration
  • cmd/apex/main.go imports submit/ only when submission is configured
  • Read-only deployments compile without the submodule (build tags or conditional import)
  • CI tests the core module and submit module independently

Related issues

  • #4 — Custom tx submission client (parent)
  • #8 — Nonce management (lives in submit/)
  • #9 — Keyring and signing (lives in submit/)
  • #17 — Gas estimation (lives in submit/)
  • #18 — Rate limiting / circuit breaker (can live in core, no cosmos-sdk needed)
  • #19 — Tx confirmation lifecycle (lives in submit/)
  • #5 — Multi-account support (lives in submit/)
Lingua principale
Go
Stelle
4
Fork
0
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di evstack/apex

Tutte le issue di evstack/apex

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.