Skip to content

Commit d3f4b03

Browse files
authored
Merge pull request #24 from Gearbox-protocol/adapter_compressor
feat: adapter compressor
2 parents 273e1d2 + ca40c83 commit d3f4b03

File tree

6 files changed

+104
-31
lines changed

6 files changed

+104
-31
lines changed

contracts/compressors/AdapterCompressor.sol

Lines changed: 75 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,63 @@
33
// (c) Gearbox Holdings, 2024
44
pragma solidity ^0.8.17;
55

6-
import {IStateSerializer} from "../interfaces/IStateSerializer.sol";
6+
import {AdapterType} from "@gearbox-protocol/sdk-gov/contracts/AdapterType.sol";
77
import {ContractAdapter} from "../types/MarketData.sol";
8-
import {ICreditManagerV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditManagerV3.sol";
8+
import {IAdapterCompressor} from "../interfaces/IAdapterCompressor.sol";
99
import {ICreditConfiguratorV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditConfiguratorV3.sol";
10-
import {IAdapter} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IAdapter.sol";
10+
import {ICreditManagerV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditManagerV3.sol";
11+
import {IStateSerializer} from "../interfaces/IStateSerializer.sol";
12+
import {IVersion} from "../interfaces/IVersion.sol";
13+
14+
interface ILegacyAdapter {
15+
function _gearboxAdapterVersion() external view returns (uint16);
16+
function _gearboxAdapterType() external view returns (uint8);
17+
}
1118

12-
/// @title Adapter compressor 3.0.
13-
/// @notice Collects data from different adapter types
14-
contract AdaptgerCompressorV3 {
15-
// Contract version
19+
contract AdapterCompressor is IAdapterCompressor {
1620
uint256 public constant version = 3_10;
21+
bytes32 public constant override contractType = "ADAPTER_COMPRESSOR";
22+
23+
mapping(uint8 => bytes32) public contractTypes;
1724

18-
function getContractAdapters(
19-
address creditManager
20-
) external view returns (ContractAdapter[] memory adapters) {
21-
ICreditConfiguratorV3 creditConfigurator = ICreditConfiguratorV3(
22-
ICreditManagerV3(creditManager).creditConfigurator()
23-
);
25+
constructor() {
26+
contractTypes[uint8(AdapterType.ABSTRACT)] = "AD_ABSTRACT";
27+
contractTypes[uint8(AdapterType.UNISWAP_V2_ROUTER)] = "AD_UNISWAP_V2_ROUTER";
28+
contractTypes[uint8(AdapterType.UNISWAP_V3_ROUTER)] = "AD_UNISWAP_V3_ROUTER";
29+
contractTypes[uint8(AdapterType.CURVE_V1_EXCHANGE_ONLY)] = "AD_CURVE_V1_EXCHANGE_ONLY";
30+
contractTypes[uint8(AdapterType.YEARN_V2)] = "AD_YEARN_V2";
31+
contractTypes[uint8(AdapterType.CURVE_V1_2ASSETS)] = "AD_CURVE_V1_2ASSETS";
32+
contractTypes[uint8(AdapterType.CURVE_V1_3ASSETS)] = "AD_CURVE_V1_3ASSETS";
33+
contractTypes[uint8(AdapterType.CURVE_V1_4ASSETS)] = "AD_CURVE_V1_4ASSETS";
34+
contractTypes[uint8(AdapterType.CURVE_V1_STECRV_POOL)] = "AD_CURVE_V1_STECRV_POOL";
35+
contractTypes[uint8(AdapterType.CURVE_V1_WRAPPER)] = "AD_CURVE_V1_WRAPPER";
36+
contractTypes[uint8(AdapterType.CONVEX_V1_BASE_REWARD_POOL)] = "AD_CONVEX_V1_BASE_REWARD_POOL";
37+
contractTypes[uint8(AdapterType.CONVEX_V1_BOOSTER)] = "AD_CONVEX_V1_BOOSTER";
38+
contractTypes[uint8(AdapterType.CONVEX_V1_CLAIM_ZAP)] = "AD_CONVEX_V1_CLAIM_ZAP";
39+
contractTypes[uint8(AdapterType.LIDO_V1)] = "AD_LIDO_V1";
40+
contractTypes[uint8(AdapterType.UNIVERSAL)] = "AD_UNIVERSAL";
41+
contractTypes[uint8(AdapterType.LIDO_WSTETH_V1)] = "AD_LIDO_WSTETH_V1";
42+
contractTypes[uint8(AdapterType.BALANCER_VAULT)] = "AD_BALANCER_VAULT";
43+
contractTypes[uint8(AdapterType.AAVE_V2_LENDING_POOL)] = "AD_AAVE_V2_LENDING_POOL";
44+
contractTypes[uint8(AdapterType.AAVE_V2_WRAPPED_ATOKEN)] = "AD_AAVE_V2_WRAPPED_ATOKEN";
45+
contractTypes[uint8(AdapterType.COMPOUND_V2_CERC20)] = "AD_COMPOUND_V2_CERC20";
46+
contractTypes[uint8(AdapterType.COMPOUND_V2_CETHER)] = "AD_COMPOUND_V2_CETHER";
47+
contractTypes[uint8(AdapterType.ERC4626_VAULT)] = "AD_ERC4626_VAULT";
48+
contractTypes[uint8(AdapterType.VELODROME_V2_ROUTER)] = "AD_VELODROME_V2_ROUTER";
49+
contractTypes[uint8(AdapterType.CURVE_STABLE_NG)] = "AD_CURVE_STABLE_NG";
50+
contractTypes[uint8(AdapterType.CAMELOT_V3_ROUTER)] = "AD_CAMELOT_V3_ROUTER";
51+
contractTypes[uint8(AdapterType.CONVEX_L2_BOOSTER)] = "AD_CONVEX_L2_BOOSTER";
52+
contractTypes[uint8(AdapterType.CONVEX_L2_REWARD_POOL)] = "AD_CONVEX_L2_REWARD_POOL";
53+
contractTypes[uint8(AdapterType.AAVE_V3_LENDING_POOL)] = "AD_AAVE_V3_LENDING_POOL";
54+
contractTypes[uint8(AdapterType.ZIRCUIT_POOL)] = "AD_ZIRCUIT_POOL";
55+
contractTypes[uint8(AdapterType.SYMBIOTIC_DEFAULT_COLLATERAL)] = "AD_SYMBIOTIC_DEFAULT_COLLATERAL";
56+
contractTypes[uint8(AdapterType.MELLOW_LRT_VAULT)] = "AD_MELLOW_LRT_VAULT";
57+
contractTypes[uint8(AdapterType.PENDLE_ROUTER)] = "AD_PENDLE_ROUTER";
58+
}
59+
60+
function getContractAdapters(address creditManager) external view returns (ContractAdapter[] memory adapters) {
61+
ICreditConfiguratorV3 creditConfigurator =
62+
ICreditConfiguratorV3(ICreditManagerV3(creditManager).creditConfigurator());
2463

2564
address[] memory allowedAdapters = creditConfigurator.allowedAdapters();
2665
uint256 len = allowedAdapters.length;
@@ -30,17 +69,31 @@ contract AdaptgerCompressorV3 {
3069

3170
unchecked {
3271
for (uint256 i = 0; i < len; ++i) {
33-
address allowedAdapter = allowedAdapters[i];
72+
address adapter = allowedAdapters[i];
73+
adapters[i].baseParams.addr = adapter;
74+
try IVersion(adapter).contractType() returns (bytes32 adapterType) {
75+
adapters[i].baseParams.contractType = adapterType;
76+
} catch {
77+
try ILegacyAdapter(adapter)._gearboxAdapterType() returns (uint8 adapterType) {
78+
adapters[i].baseParams.contractType = contractTypes[adapterType];
79+
} catch {
80+
adapters[i].baseParams.contractType = "AD_ABSTRACT";
81+
}
82+
}
83+
84+
try IVersion(adapter).version() returns (uint256 v) {
85+
adapters[i].baseParams.version = v;
86+
} catch {
87+
try ILegacyAdapter(adapter)._gearboxAdapterVersion() returns (uint16 v) {
88+
adapters[i].baseParams.version = uint256(v);
89+
} catch {}
90+
}
3491

35-
/// add try{} catch for serialisation
92+
try IStateSerializer(adapter).serialize() returns (bytes memory serializedParams) {
93+
adapters[i].baseParams.serializedParams = serializedParams;
94+
} catch {}
3695

37-
// adapters[i] = ContractAdapter({
38-
// targetContract: ICreditManagerV3(creditManager).adapterToContract(allowedAdapter),
39-
// adapter: allowedAdapter,
40-
// adapterType: uint8(IAdapter(allowedAdapter)._gearboxAdapterType()),
41-
// version: IAdapter(allowedAdapter)._gearboxAdapterVersion(),
42-
// stateSerialised: stateSerialised
43-
// });
96+
adapters[i].targetContract = ICreditManagerV3(creditManager).adapterToContract(adapter);
4497
}
4598
}
4699
}

contracts/compressors/PoolCompressor.sol

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import {BaseLib} from "../libraries/BaseLib.sol";
3131
import {GaugeSerializer} from "../serializers/pool/GaugeSerializer.sol";
3232
import {LinearInterestModelSerializer} from "../serializers/pool/LinearInterestModelSerializer.sol";
3333

34+
import {AdapterCompressor} from "./AdapterCompressor.sol";
35+
3436
/// @title Pool compressor
3537
/// @notice Collects data from pool related contracts
3638
/// Do not use for data from data compressor for state-changing functions
@@ -42,9 +44,12 @@ contract PoolCompressorV3 {
4244
address public immutable gaugeSerializer;
4345
address public immutable linearInterestModelSerializer;
4446

47+
AdapterCompressor adapterCompressor;
48+
4549
constructor() {
4650
gaugeSerializer = address(new GaugeSerializer());
4751
linearInterestModelSerializer = address(new LinearInterestModelSerializer());
52+
adapterCompressor = new AdapterCompressor();
4853
}
4954

5055
function getPoolState(address pool) public view returns (PoolState memory result) {
@@ -172,8 +177,6 @@ contract PoolCompressorV3 {
172177
function getRateKeeperState(address rateKeeper) external view returns (RateKeeperState memory result) {
173178
IRateKeeper _rateKeeper = IRateKeeper(rateKeeper);
174179

175-
bytes32 contractType;
176-
177180
result.baseParams = BaseLib.getBaseParams(rateKeeper, "GAUGE", gaugeSerializer);
178181

179182
IPoolQuotaKeeperV3 _pqk = IPoolQuotaKeeperV3(PoolV3(_rateKeeper.pool()).poolQuotaKeeper());
@@ -292,5 +295,7 @@ contract PoolCompressorV3 {
292295
result.totalDebt = _pool.creditManagerBorrowed(creditManager);
293296
result.totalDebtLimit = _pool.creditManagerDebtLimit(creditManager);
294297
result.availableToBorrow = _pool.creditManagerBorrowable(creditManager);
298+
299+
result.adapters = adapterCompressor.getContractAdapters(creditManager);
295300
}
296301
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
// Gearbox Protocol. Generalized leverage for DeFi protocols
3+
// (c) Gearbox Holdings, 2024
4+
pragma solidity ^0.8.10;
5+
6+
import {ContractAdapter} from "../types/MarketData.sol";
7+
import {IVersion} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IVersion.sol";
8+
9+
/// @title Adapter compressor 3.1
10+
interface IAdapterCompressor is IVersion {
11+
function getContractAdapters(address creditManager) external view returns (ContractAdapter[] memory result);
12+
}

contracts/interfaces/IMarketCompressor.sol

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
// SPDX-License-Identifier: BUSL-1.1
2+
// Gearbox Protocol. Generalized leverage for DeFi protocols
3+
// (c) Gearbox Holdings, 2024
4+
pragma solidity ^0.8.10;
5+
16
import {MarketData} from "../types/MarketData.sol";
27
import {PoolState} from "../types/PoolState.sol";
38
import {IVersion} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IVersion.sol";

contracts/types/MarketData.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ struct MarketData {
1919
// Owner who manages market
2020
address owner;
2121
// Syntax sugar ?
22-
address underlying;
22+
// address underlying;
2323
// Risk curator name
2424
string name;
2525
PoolState pool;

script/Migrate.sol

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,13 @@ contract Migrate2 is Migrate {
8585
AddressProviderV3_1(_deployGovernance3_1(oldAddressProvider, vetoAdmin, deployer));
8686

8787
address priceFeedCompressor = address(new PriceFeedCompressor());
88-
console.log("PriceFeedCompressor: ", priceFeedCompressor);
89-
9088
_addressProvider.setAddress(priceFeedCompressor, true);
9189

92-
address newContract = address(new MarketCompressor(address(_addressProvider), priceFeedCompressor));
93-
_addressProvider.setAddress(newContract, true);
90+
address marketCompressor = address(new MarketCompressor(address(_addressProvider), priceFeedCompressor));
91+
_addressProvider.setAddress(marketCompressor, true);
9492

95-
newContract = address(new CreditAccountCompressor(address(_addressProvider)));
96-
_addressProvider.setAddress(newContract, true);
93+
address creditAccountCompressor = address(new CreditAccountCompressor(address(_addressProvider)));
94+
_addressProvider.setAddress(creditAccountCompressor, true);
9795

9896
vm.stopBroadcast();
9997

0 commit comments

Comments
 (0)