33// (c) Gearbox Foundaiton, 2024.
44pragma solidity ^ 0.8.23 ;
55
6+ import {IBot} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IBot.sol " ;
67import {IZapper} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IZapper.sol " ;
78import {IBotListV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IBotListV3.sol " ;
89import {ICreditAccountV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditAccountV3.sol " ;
910import {ICreditFacadeV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditFacadeV3.sol " ;
1011import {ICreditManagerV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditManagerV3.sol " ;
1112
12- import {IAddressProvider} from "@gearbox-protocol/governance /contracts/interfaces/IAddressProvider.sol " ;
13- import {IMarketConfigurator} from "@gearbox-protocol/governance /contracts/interfaces/IMarketConfigurator.sol " ;
13+ import {IAddressProvider} from "@gearbox-protocol/permissionless /contracts/interfaces/IAddressProvider.sol " ;
14+ import {IMarketConfigurator} from "@gearbox-protocol/permissionless /contracts/interfaces/IMarketConfigurator.sol " ;
1415import {
1516 AP_BOT_LIST,
1617 AP_MARKET_CONFIGURATOR_FACTORY,
1718 DOMAIN_BOT,
1819 DOMAIN_ZAPPER,
1920 NO_VERSION_CONTROL
20- } from "@gearbox-protocol/governance /contracts/libraries/ContractLiterals.sol " ;
21+ } from "@gearbox-protocol/permissionless /contracts/libraries/ContractLiterals.sol " ;
2122
2223import {ITokenCompressor} from "../interfaces/ITokenCompressor.sol " ;
2324import {IPeripheryCompressor} from "../interfaces/IPeripheryCompressor.sol " ;
2425import {BaseLib} from "../libraries/BaseLib.sol " ;
2526import {AP_PERIPHERY_COMPRESSOR, AP_TOKEN_COMPRESSOR} from "../libraries/Literals.sol " ;
26- import {BotState, ZapperState} from "../types/PeripheryState.sol " ;
27+ import {BotState, ConnectedBotState, ZapperState} from "../types/PeripheryState.sol " ;
2728
2829interface IBotListV30x {
2930 function getBotStatus (address bot , address creditManager , address creditAccount )
@@ -80,23 +81,36 @@ contract PeripheryCompressor is IPeripheryCompressor {
8081 }
8182 }
8283
83- function getActiveBots (address marketConfigurator , address creditAccount )
84+ function getBots (address marketConfigurator ) external view override returns (BotState[] memory botStates ) {
85+ address [] memory bots = IMarketConfigurator (marketConfigurator).getPeripheryContracts (DOMAIN_BOT);
86+ uint256 numBots = bots.length ;
87+ botStates = new BotState [](numBots);
88+ for (uint256 i; i < numBots; ++ i) {
89+ address bot = bots[i];
90+ botStates[i].baseParams = BaseLib.getBaseParams (bot, "BOT::UNKNOWN " , address (0 ));
91+ try IBot (bot).requiredPermissions () returns (uint192 requiredPermissions ) {
92+ botStates[i].requiredPermissions = requiredPermissions;
93+ } catch {}
94+ }
95+ }
96+
97+ function getConnectedBots (address marketConfigurator , address creditAccount )
8498 external
8599 view
86100 override
87- returns (BotState [] memory bots )
101+ returns (ConnectedBotState [] memory botStates )
88102 {
89103 address creditManager = ICreditAccountV3 (creditAccount).creditManager ();
90104 address botList = ICreditFacadeV3 (ICreditManagerV3 (creditManager).creditFacade ()).botList ();
91105 uint256 botListVersion = IBotListV3 (botList).version ();
92106
93- address [] memory allBots = IMarketConfigurator (marketConfigurator).getPeripheryContracts (DOMAIN_BOT);
94- uint256 numBots = allBots .length ;
95- bots = new BotState [](numBots);
107+ address [] memory bots = IMarketConfigurator (marketConfigurator).getPeripheryContracts (DOMAIN_BOT);
108+ uint256 numBots = bots .length ;
109+ botStates = new ConnectedBotState [](numBots);
96110 uint256 num;
97111 for (uint256 i; i < numBots; ++ i) {
98- address bot = allBots [i];
99- BotState memory botState;
112+ address bot = bots [i];
113+ ConnectedBotState memory botState;
100114 if (botListVersion < 3_10 ) {
101115 (botState.permissions, botState.forbidden,) =
102116 IBotListV30x (botList).getBotStatus (bot, creditManager, creditAccount);
@@ -105,7 +119,11 @@ contract PeripheryCompressor is IPeripheryCompressor {
105119 }
106120 if (botState.permissions != 0 ) {
107121 botState.baseParams = BaseLib.getBaseParams (bot, "BOT::UNKNOWN " , address (0 ));
108- bots[num++ ] = botState;
122+ botState.creditAccount = creditAccount;
123+ try IBot (bot).requiredPermissions () returns (uint192 requiredPermissions ) {
124+ botState.requiredPermissions = requiredPermissions;
125+ } catch {}
126+ botStates[num++ ] = botState;
109127 }
110128 }
111129 assembly {
0 commit comments