vaas is a simplified implementation of the Interchain Security (ICS) protocol, derived from interchain-security. It provides core cross-chain validation functionality while removing complex features not needed for simpler deployments.
VAAS allows Cosmos blockchains to lease their proof-of-stake security to consumer chains. All active validators on the provider chain automatically validate all consumer chains - there is no opt-in/opt-out mechanism.
VAAS uses IBC v2 exclusively — no channel handshake, no port reservations.
The provider and consumer modules register on ibcRouterV2 under the
application IDs vaasprovider and vaasconsumer. After a consumer launches,
a relayer (the localnet and e2e suites use
ts-relayer) creates an
IBC v2 client on each chain pointing at the counterparty and registers the
path. The provider then discovers its consumer client at the next epoch
boundary; all VSC packets flow over that client. Wiring VAAS into a host app
just means adding the v2 routes — see app/provider/app.go
and app/consumer/app.go for reference.
| Feature | Description |
|---|---|
| Consumer Lifecycle | Full lifecycle management (REGISTERED → INITIALIZED → LAUNCHED → STOPPED → DELETED) |
| Key Assignment | Validators can use different consensus keys per consumer chain |
| Per-Consumer Infraction Parameters | Customizable slash/jail parameters per consumer |
| VSC Packets | Validator set updates sent at epoch boundaries |
| Double Voting Evidence | Handle double voting evidence from consumers |
| Light Client Misbehavior | Detection and logging of misbehavior |
| Consumer Metadata | Name, description, metadata for chain discovery |
| Client/Connection Reuse | Reuse existing IBC client when creating consumer |
| Feature | Reason |
|---|---|
| Partial Set Security (PSS) | All validators validate all consumers |
| Top N / Opt-In Chains | No validator selection per consumer |
| Power Shaping | No caps, allowlists, denylists, priority lists |
| Consumer Reward Distribution | No cross-chain rewards |
| Slash Packet Throttling | Simplified slash handling |
| Per-Consumer Commission Rates | Validators use same commission as provider |
| IBC v1 Channel Support | IBC v2 only |
| Standalone-to-Consumer Changeover | Not currently supported (future work) |
See docs/consumer-transition.md for the consequences and requirements of a future standalone-to-consumer transition.
make build # go build ./...
make test # unit tests (excludes e2e)
make lint # golangci-lint
# E2E (Docker-based, spins up provider + consumer + ts-relayer)
make docker-build-all
make test-e2e- Localnet setup — run a provider, a consumer, and
ts-relayerlocally - Consumer lifecycle — phases, on-chain effects, operator/relayer responsibilities
- Contributor guide (AGENTS.md) — architecture, build/test commands, code layout
- Design rationale (DESIGN_RATIONALE.md) — why VAAS is shaped the way it is
- Diff vs the ICS codebase VAAS ported from (REWRITE_SUMMARY.md) — what was removed/kept in the port
- PLAN.old.md — the original pre-port rewrite plan, kept for archival reference