Injective × Cascade
Use Lumera Cascade as the permanent storage layer for apps built on Injective.
Injective is a Cosmos Layer-1 with a native orderbook module, sub-second finality, CosmWasm 2.0 smart contracts, and full IBC connectivity. Most Injective apps keep their state on-chain and pin large supporting data such as trade receipts, NFT media and metadata, governance attachments, oracle evidence to IPFS or a cloud bucket. That supporting data lives only as long as someone keeps paying to host it.
Cascade is a permanent, decentralised storage layer. Injective stays the layer for trading, state machines, escrow, and bonds; Cascade becomes the layer for everything those state machines reference, without bloating the chain or paying a recurring hosting bill.
Why this fits
| IPFS pinning / cloud bucket | Cascade | |
|---|---|---|
| Persistence | Pin-dependent, a lapsed pin loses the data | Permanent, enforced by protocol |
| Pricing | Recurring per-month bill | Pay once, on-chain, in ulume |
| Redundancy | None by default | RaptorQ erasure coding across Supernodes |
| Self-healing | No | Yes, automatic chunk restoration |
| Verifiability | Hash-only at best | Hash and on-chain action_id |
Cascade does not replace anything on Injective. It augments contract state with permanent, content-addressed payloads that your contracts reference by action_id.
What lives where
The split is the same for every integration: Injective holds the small, consensus-critical state; Cascade holds the large, citable bytes.
| On Injective | On Cascade | |
|---|---|---|
| Order book + matching | ✓ | |
| Contract state, escrow, bonds | ✓ | |
| State-machine transitions | ✓ | |
| Trade receipts and fills | ✓ | |
| NFT media + metadata | ✓ | |
| Governance proposals + attachments | ✓ | |
| Oracle inputs / settlement evidence | ✓ | |
| Audit and compliance logs | ✓ | |
Pointers (action_id) tying the two together | ✓ |
The split makes the system both cheap to operate and permanent to read.
How the integration works
Cascade stores data as actions. A MsgRequestAction on Lumera registers the data and returns a numeric action_id, and the bytes are then streamed to the Supernode network against that ID, becoming retrievable forever.
The only design decision that varies between integrations is who signs the Cascade write. Either the backend signs through the Lumera-operated cascade-api, or the end user signs directly from a wallet. Both paths are covered in Cascade from Injective.
Reference implementation. Inscribe is a live Injective testnet dApp for permanent, re-litigatable prediction markets. If you prefer to learn from a complete worked example, read it after the primer and the integration patterns.