Contracts discovery
Core contracts
Each interaction with Gearbox starts from retrieving the addresses of important contracts. AddressProvider stores the addresses of all core contracts.
| function | return value | 
|---|---|
| getACL() | Address of ACL contract | 
| getContractsRegister() | Address of ContractsRegister | 
| getAccountFactory() | Address of AccountFactory | 
| getDataCompressor() | Address of DataCompressor | 
| getGearToken() | Address of GEAR token | 
| getWethToken() | Address of WETH token | 
| getWETHGateway() | Address of WETH Gateway | 
| getPriceOracle() | Address of PriceOracle | 
| getTreasuryContract() | Address of DAO Treasury Multisig | 
:::note
AddressProvider stores the most up-to-date addresses. It is recommended to avoid caching Gearbox-related addresses for a long time and refresh them periodically through AddressProvider, since they can be changed by the governance.
:::
List of all deployed contracts on mainnet
Getting list of pools & credit managers
ContractsRegister keeps a list of all active pools and Credit Managers:
interface IContractsRegisterEvents {
    // emits each time when new pool was added to register
    event NewPoolAdded(address indexed pool);
 
    // emits each time when new credit Manager was added to register
    event NewCreditManagerAdded(address indexed creditManager);
}
 
/// @title Optimised for front-end Address Provider interface
interface IContractsRegister is IContractsRegisterEvents {
    //
    // POOLS
    //
 
    /// @dev Returns array of registered pool addresses
    function getPools() external view returns (address[] memory);
 
    /// @dev Returns pool address for i-element
    function pools(uint256 i) external returns (address);
 
    /// @return Returns quantity of registered pools
    function getPoolsCount() external view returns (uint256);
 
    /// @dev Returns true if address is pool
    function isPool(address) external view returns (bool);
 
    //
    // CREDIT MANAGERS
    //
 
    /// @dev Returns array of registered credit manager addresses
    function getCreditManagers() external view returns (address[] memory);
 
    /// @dev Returns pool address for i-element
    function creditManagers(uint256 i) external returns (address);
 
    /// @return Returns quantity of registered credit managers
    function getCreditManagersCount() external view returns (uint256);
 
    /// @dev Returns true if address is pool
    function isCreditManager(address) external view returns (bool);
}Versioning
Each contract in the protocol has a function version which returns the current version as a uint256 value. Contract ABIs can change between versions, so it is recommended to get and verify the value before interacting with a particular contract.
Code snippet from CreditManager:
// Contract version
uint256 public constant override version = 2;