Skip to content

Commit

Permalink
Adjusting gamma whitelist logic :)
Browse files Browse the repository at this point in the history
  • Loading branch information
joaoavf committed Jul 12, 2023
1 parent 287080c commit 512d24d
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 13 deletions.
35 changes: 22 additions & 13 deletions contracts/bridges/Gamma/GammaDepositBridge.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,34 @@ import "./interfaces/IHypervisorRouter.sol";
import "./interfaces/IHypervisor.sol";

contract GammaDepositBridge is IGammaDeposit {
address constant hypervisorRouterAddress = 0xe0A61107E250f8B5B24bf272baBFCf638569830C;
IHypervisorRouter constant hypervisorRouter = IHypervisorRouter(hypervisorRouterAddress);
function _approveTokens(
address hypervisorAddress,
address[] calldata tokens,
uint256[] calldata percentages)
internal returns (uint256[] memory) {
uint256 numTokens = uint256(tokens.length);
uint256[] memory amountsIn = new uint256[](numTokens);

for (uint256 i = 0; i < tokens.length; i++) {
amountsIn[i] = IERC20(tokens[i]).balanceOf(address(this)) * percentages[i] / 100_000;
IERC20(tokens[i]).approve(hypervisorAddress, 0);
IERC20(tokens[i]).approve(hypervisorAddress, amountsIn[i]);
}

return amountsIn;
}

Check warning

Code scanning / Slither

Unused return Medium

Check warning

Code scanning / Slither

Unused return Medium


function deposit(
address hypervisorAddress,
address[] calldata tokens,
uint256[] calldata percentages,
uint256[4] calldata minAmountsin
) external override {
uint256 numTokens = uint256(tokens.length);
uint256[] memory amountsIn = new uint256[](numTokens);
) external override {
IHypervisorRouter hypervisorRouter = IHypervisorRouter(IHypervisor(hypervisorAddress).whitelistedAddress());

for (uint256 i = 0; i < numTokens; i++) {
amountsIn[i] = IERC20(tokens[i]).balanceOf(address(this)) * percentages[i] / 100_000;
// Approve 0 first as a few ERC20 tokens are requiring this pattern.
IERC20(tokens[i]).approve(hypervisorAddress, 0);
IERC20(tokens[i]).approve(hypervisorAddress, amountsIn[i]);
}
uint256[] memory amountsIn = _approveTokens(hypervisorAddress, tokens, percentages);

(uint256 depositA, uint256 depositB) = capRatios(tokens, amountsIn, hypervisorAddress);
(uint256 depositA, uint256 depositB) = capRatios(tokens, amountsIn, hypervisorAddress, hypervisorRouter);

uint256 amountOut = hypervisorRouter.deposit(
depositA,
Expand Down Expand Up @@ -64,7 +72,8 @@ contract GammaDepositBridge is IGammaDeposit {
function capRatios(
address[] calldata tokens,
uint256[] memory amountsIn,
address hypervisorAddress
address hypervisorAddress,
IHypervisorRouter hypervisorRouter
) internal view returns (uint256, uint256) {
(uint256 startA, uint256 endA) = hypervisorRouter.getDepositAmount(
hypervisorAddress,
Expand Down
3 changes: 3 additions & 0 deletions contracts/bridges/Gamma/interfaces/IHypervisor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,7 @@ interface IHypervisor {
function balanceOf(
address account
) external view returns (uint256);

function whitelistedAddress(
) external view returns (address);
}

0 comments on commit 512d24d

Please sign in to comment.