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;