Skip to content

Commit bbc2de6

Browse files
committed
Merge branch 'next' of https://github.com/Gearbox-protocol/periphery-v3 into next
2 parents 96f5f88 + 8ae4c5f commit bbc2de6

31 files changed

+7403
-401
lines changed

.github/workflows/pr.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,13 @@ jobs:
2020
fetch-depth: 0
2121
submodules: recursive
2222

23-
- name: setup corepack for pnpm
24-
run: corepack enable
23+
- name: Use Latest Corepack
24+
run: |
25+
echo "Before: corepack version => $(corepack --version || echo 'not installed')"
26+
npm install -g corepack@latest
27+
echo "After : corepack version => $(corepack --version)"
28+
corepack enable
29+
pnpm --version
2530
2631
- name: Setup node.js
2732
uses: actions/setup-node@v4

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ cache/
1313
docs/
1414

1515
# Dotenv file
16-
.env
16+
.env*
1717

1818
# Logs
1919
*.log
2020
.DS_Store
2121
address-provider.json
2222
addresses.json
23-
generated.ts
23+
24+
*.generated.ts

.gitmodules

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
[submodule "lib/@solady"]
2929
path = lib/@solady
3030
url = https://github.com/Vectorized/solady
31-
[submodule "lib/@gearbox-protocol/governance"]
32-
path = lib/@gearbox-protocol/governance
33-
url = https://github.com/Gearbox-protocol/governance
34-
branch = getter-updates
31+
[submodule "lib/@gearbox-protocol/permissionless"]
32+
path = lib/@gearbox-protocol/permissionless
33+
url = https://github.com/Gearbox-protocol/permissionless

Dockerfile

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,34 @@
11
FROM ghcr.io/foundry-rs/foundry:stable
22

33
ENV CI=true
4-
ENV PNPM_HOME="/pnpm"
5-
ENV PATH="$PNPM_HOME:$PATH"
64

75
# install node
8-
RUN apk add --no-cache \
9-
bash \
10-
nodejs npm
6+
USER root
7+
RUN apt-get update && apt-get install -y curl
8+
RUN chsh -s /bin/bash foundry
9+
10+
USER foundry
11+
SHELL ["/bin/bash", "-c"]
12+
13+
# Create a script file sourced by both interactive and non-interactive bash shells
14+
ENV BASH_ENV /home/foundry/.bash_env
15+
RUN touch "${BASH_ENV}"
16+
RUN echo '. "${BASH_ENV}"' >> ~/.bashrc
1117

12-
# install pnpm
13-
RUN wget -qO- https://get.pnpm.io/install.sh | ENV="$HOME/.bashrc" SHELL="$(which bash)" bash -
18+
# Download and install nvm
19+
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | PROFILE="${BASH_ENV}" bash
20+
21+
# Download and install pnpm
22+
ENV PNPM_HOME="/home/foundry/.pnpm"
23+
ENV PATH="$PNPM_HOME:$PATH"
24+
RUN curl -fsSL https://get.pnpm.io/install.sh | ENV="$HOME/.bashrc" SHELL="$(which bash)" bash -
1425

1526
WORKDIR /app
1627

1728
COPY . /app
1829

19-
RUN pnpm install && forge build
30+
RUN nvm install \
31+
&& pnpm install \
32+
&& forge build
2033

2134
ENTRYPOINT [ "/app/script/migrate.sh" ]

contracts/compressors/CreditAccountCompressor.sol

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ import {PERCENTAGE_FACTOR} from "@gearbox-protocol/core-v3/contracts/libraries/C
1919
import {SanityCheckTrait} from "@gearbox-protocol/core-v3/contracts/traits/SanityCheckTrait.sol";
2020
import {ICreditAccountCompressor} from "../interfaces/ICreditAccountCompressor.sol";
2121

22-
import {IContractsRegister} from "@gearbox-protocol/governance/contracts/interfaces/IContractsRegister.sol";
23-
import {IAddressProvider} from "@gearbox-protocol/governance/contracts/interfaces/IAddressProvider.sol";
24-
import {IMarketConfigurator} from "@gearbox-protocol/governance/contracts/interfaces/IMarketConfigurator.sol";
22+
import {IContractsRegister} from "@gearbox-protocol/permissionless/contracts/interfaces/IContractsRegister.sol";
23+
import {IAddressProvider} from "@gearbox-protocol/permissionless/contracts/interfaces/IAddressProvider.sol";
24+
import {IMarketConfigurator} from "@gearbox-protocol/permissionless/contracts/interfaces/IMarketConfigurator.sol";
2525
import {IMarketConfiguratorFactory} from
26-
"@gearbox-protocol/governance/contracts/interfaces/IMarketConfiguratorFactory.sol";
26+
"@gearbox-protocol/permissionless/contracts/interfaces/IMarketConfiguratorFactory.sol";
2727
import {
2828
AP_MARKET_CONFIGURATOR_FACTORY,
2929
NO_VERSION_CONTROL
30-
} from "@gearbox-protocol/governance/contracts/libraries/ContractLiterals.sol";
30+
} from "@gearbox-protocol/permissionless/contracts/libraries/ContractLiterals.sol";
3131

3232
import {CreditAccountData, TokenInfo} from "../types/CreditAccountState.sol";
3333
import {CreditAccountFilter, MarketFilter} from "../types/Filters.sol";

contracts/compressors/GaugeCompressor.sol

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@ import {IGearStakingV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IGe
1010
import {IPoolQuotaKeeperV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IPoolQuotaKeeperV3.sol";
1111
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
1212

13-
import {IAddressProvider} from "@gearbox-protocol/governance/contracts/interfaces/IAddressProvider.sol";
14-
import {IContractsRegister} from "@gearbox-protocol/governance/contracts/interfaces/IContractsRegister.sol";
15-
import {IMarketConfigurator} from "@gearbox-protocol/governance/contracts/interfaces/IMarketConfigurator.sol";
13+
import {IAddressProvider} from "@gearbox-protocol/permissionless/contracts/interfaces/IAddressProvider.sol";
14+
import {IContractsRegister} from "@gearbox-protocol/permissionless/contracts/interfaces/IContractsRegister.sol";
15+
import {IMarketConfigurator} from "@gearbox-protocol/permissionless/contracts/interfaces/IMarketConfigurator.sol";
1616
import {IMarketConfiguratorFactory} from
17-
"@gearbox-protocol/governance/contracts/interfaces/IMarketConfiguratorFactory.sol";
17+
"@gearbox-protocol/permissionless/contracts/interfaces/IMarketConfiguratorFactory.sol";
1818
import {
1919
AP_MARKET_CONFIGURATOR_FACTORY,
2020
NO_VERSION_CONTROL
21-
} from "@gearbox-protocol/governance/contracts/libraries/ContractLiterals.sol";
21+
} from "@gearbox-protocol/permissionless/contracts/libraries/ContractLiterals.sol";
2222

2323
import {MarketFilter} from "../types/Filters.sol";
2424
import {GaugeQuotaParams, GaugeInfo} from "../types/RateKeeperState.sol";
@@ -72,7 +72,6 @@ contract GaugeCompressor is IGaugeCompressor {
7272
}
7373

7474
return _trim(result, validGauges);
75-
7675
}
7776

7877
/// @dev Returns gauge info for a specific gauge

contracts/compressors/MarketCompressor.sol

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,19 @@ import {ICreditManagerV3} from "@gearbox-protocol/core-v3/contracts/interfaces/I
1010
import {IPoolQuotaKeeperV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IPoolQuotaKeeperV3.sol";
1111
import {IPoolV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IPoolV3.sol";
1212

13-
import {IACL} from "@gearbox-protocol/governance/contracts/interfaces/IACL.sol";
14-
import {IContractsRegister} from "@gearbox-protocol/governance/contracts/interfaces/IContractsRegister.sol";
15-
import {IAddressProvider} from "@gearbox-protocol/governance/contracts/interfaces/IAddressProvider.sol";
16-
import {IMarketConfigurator} from "@gearbox-protocol/governance/contracts/interfaces/IMarketConfigurator.sol";
13+
import {IACL} from "@gearbox-protocol/permissionless/contracts/interfaces/IACL.sol";
14+
import {IContractsRegister} from "@gearbox-protocol/permissionless/contracts/interfaces/IContractsRegister.sol";
15+
import {IAddressProvider} from "@gearbox-protocol/permissionless/contracts/interfaces/IAddressProvider.sol";
16+
import {IMarketConfigurator} from "@gearbox-protocol/permissionless/contracts/interfaces/IMarketConfigurator.sol";
1717
import {IMarketConfiguratorFactory} from
18-
"@gearbox-protocol/governance/contracts/interfaces/IMarketConfiguratorFactory.sol";
18+
"@gearbox-protocol/permissionless/contracts/interfaces/IMarketConfiguratorFactory.sol";
1919
import {
2020
AP_MARKET_CONFIGURATOR_FACTORY,
2121
NO_VERSION_CONTROL,
2222
ROLE_EMERGENCY_LIQUIDATOR,
2323
ROLE_PAUSABLE_ADMIN,
2424
ROLE_UNPAUSABLE_ADMIN
25-
} from "@gearbox-protocol/governance/contracts/libraries/ContractLiterals.sol";
25+
} from "@gearbox-protocol/permissionless/contracts/libraries/ContractLiterals.sol";
2626

2727
import {Contains} from "../libraries/Contains.sol";
2828

contracts/compressors/PeripheryCompressor.sol

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,28 @@
33
// (c) Gearbox Foundaiton, 2024.
44
pragma solidity ^0.8.23;
55

6+
import {IBot} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IBot.sol";
67
import {IZapper} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IZapper.sol";
78
import {IBotListV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IBotListV3.sol";
89
import {ICreditAccountV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditAccountV3.sol";
910
import {ICreditFacadeV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditFacadeV3.sol";
1011
import {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";
1415
import {
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

2223
import {ITokenCompressor} from "../interfaces/ITokenCompressor.sol";
2324
import {IPeripheryCompressor} from "../interfaces/IPeripheryCompressor.sol";
2425
import {BaseLib} from "../libraries/BaseLib.sol";
2526
import {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

2829
interface 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 {

contracts/compressors/PoolCompressor.sol

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {PoolQuotaKeeperState, QuotaTokenParams} from "../types/PoolQuotaKeeperSt
1616
import {RateKeeperState, Rate} from "../types/RateKeeperState.sol";
1717

1818
import {RAY} from "@gearbox-protocol/core-v3/contracts/libraries/Constants.sol";
19+
import {OptionalCall} from "@gearbox-protocol/core-v3/contracts/libraries/OptionalCall.sol";
1920
import {IRateKeeper} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IRateKeeper.sol";
2021

2122
import {IPoolCompressor} from "../interfaces/IPoolCompressor.sol";
@@ -46,9 +47,12 @@ contract PoolCompressor is IPoolCompressor {
4647
// CONTRACT PARAMETERS
4748
//
4849
bytes32 defaultContractType = "POOL";
49-
try IUSDT(_pool.underlyingToken()).basisPointsRate() {
50-
defaultContractType = "POOL::USDT";
51-
} catch {}
50+
(bool success,) = OptionalCall.staticCallOptionalSafe({
51+
target: _pool.underlyingToken(),
52+
data: abi.encodeWithSelector(IUSDT.basisPointsRate.selector),
53+
gasAllowance: 10000
54+
});
55+
if (success) defaultContractType = "POOL::USDT";
5256
result.baseParams = BaseLib.getBaseParams(pool, defaultContractType, address(0));
5357

5458
//

contracts/data/DataCompressorV3.sol

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import {
2020
} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditManagerV3.sol";
2121
import {ICreditFacadeV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditFacadeV3.sol";
2222
import {ICreditConfiguratorV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditConfiguratorV3.sol";
23-
import {IPriceOracleV3, PriceUpdate} from "@gearbox-protocol/core-v3/contracts/interfaces/IPriceOracleV3.sol";
23+
import {PriceUpdate} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IPriceFeedStore.sol";
24+
import {IUpdatablePriceFeed} from "@gearbox-protocol/core-v3/contracts/interfaces/base/IPriceFeed.sol";
25+
import {IPriceOracleV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IPriceOracleV3.sol";
2426
import {ICreditAccountV3} from "@gearbox-protocol/core-v3/contracts/interfaces/ICreditAccountV3.sol";
2527
import {IPoolQuotaKeeperV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IPoolQuotaKeeperV3.sol";
2628
import {IPoolV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IPoolV3.sol";
@@ -484,8 +486,10 @@ contract DataCompressorV3 is IDataCompressorV3, ContractsRegisterTrait {
484486
}
485487
}
486488

487-
function _updatePrices(address creditManager, PriceUpdate[] memory priceUpdates) internal {
488-
_getPriceOracle(creditManager).updatePrices(priceUpdates);
489+
function _updatePrices(address, PriceUpdate[] memory priceUpdates) internal {
490+
for (uint256 i; i < priceUpdates.length; ++i) {
491+
IUpdatablePriceFeed(priceUpdates[i].priceFeed).updatePrice(priceUpdates[i].data);
492+
}
489493
}
490494

491495
function _getPriceFeedFailedList(address _cm, TokenBalance[] memory balances)

0 commit comments

Comments
 (0)