Compressors

Compressor contracts aggregate on-chain data efficiently. Instead of dozens of individual reads, a single compressor call returns complete protocol state.

Discovering Compressor Addresses

Use AddressProvider to find compressor addresses:

Solidity Usage

[address compressor] = addressProvider.getLatestAddressByContractType(
    AP_MARKET_COMPRESSOR,
    VERSION_RANGE_310
);

TypeScript Usage

import { AP_MARKET_COMPRESSOR, VERSION_RANGE_310 } from '@gearbox-protocol/sdk';

const [compressor] = sdk.addressProvider.mustGetLatest(
  AP_MARKET_COMPRESSOR,
  VERSION_RANGE_310
);

MarketCompressor

The primary data aggregation contract. Returns complete market state including pools, credit managers, and price oracles.

Interface

MarketFilter

Pass empty arrays and address(0) for no filtering.

Solidity Usage

TypeScript Usage

MarketData Structure

Key fields in PoolState:

Field
Type
Description

baseParams.addr

address

Pool contract address

availableLiquidity

uint256

Borrowable liquidity

dieselRate

uint256

Share price (RAY)

supplyRate

uint256

Lender APY (RAY)

baseInterestRate

uint256

Borrower APR (RAY)

totalAssets

uint256

Total pool value

Key fields in CreditSuiteData:

Field
Type
Description

creditManager

address

Credit Manager address

creditFacade

address

Credit Facade address

creditConfigurator

address

Configurator address

debtLimits

DebtLimits

min/max debt per account

collateralTokens

CollateralToken[]

Allowed tokens + LTs


CreditAccountCompressor

Fetches credit account data with filtering and pagination.

Interface

CreditAccountFilter

Solidity Usage

TypeScript Usage

CreditAccountData Structure

Pagination

Large result sets are paginated. Use offset to fetch subsequent pages:


PriceFeedCompressor

Aggregates price feed state for oracle updates.

Interface

TypeScript Usage


When to Use Compressors vs SDK

Scenario
Approach

General market data

SDK marketRegister

Credit account queries

SDK services

Custom filtering logic

Direct compressor calls

Liquidation bots

Direct compressor (gas-optimized)

On-chain integration

Direct compressor (no SDK in contracts)

Real-time monitoring

Direct compressor with specific filters

The SDK uses compressors internally. Use direct compressor calls when you need:

  • Custom filter combinations not exposed by SDK

  • Pagination control

  • Gas-optimized queries for bots

  • On-chain access (Solidity contracts)


Complete Example

TypeScript

Solidity

Last updated