Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PancakeConverterStrategy for zkEvm and Base-chain #125

Merged
merged 44 commits into from
Dec 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
86e2239
start to implement strategy for PancakeSwap
dvpublic Dec 12, 2023
490c3fc
Add interfaces of PancakeSwap
dvpublic Dec 12, 2023
de80df1
Pancake strategy was copied from univ3 strategy
dvpublic Dec 12, 2023
6aea519
pancake...
dvpublic Dec 13, 2023
07e0a65
Pancake strategy: enter, claimRewards...
dvpublic Dec 13, 2023
eb9b73e
Draft implementation of PancakeConverterStrategy
dvpublic Dec 14, 2023
5e85b8b
Add universal test for PancakeConverterStrategy on Base chain
dvpublic Dec 15, 2023
043e468
Add support of zkEvm. Test PancakeConverterStrategyLogicLibTest suppo…
dvpublic Dec 15, 2023
4c4b26b
imlement PancakeConverterStrategyLogicLibTest
dvpublic Dec 15, 2023
1447932
Add zkevm addresses, introduce ICoreTokens
dvpublic Dec 18, 2023
7245a34
Prepare CheckBase test to test all common actions on the given strate…
dvpublic Dec 19, 2023
625b75a
study scb-876
dvpublic Dec 19, 2023
291270c
Try to run PairBasedStrategyActionResponse-tests on Base. Create Moon…
dvpublic Dec 19, 2023
c970f54
Move checkBase to analysis folder. Add CheckPolygon
dvpublic Dec 20, 2023
6969c70
price oracle based on the pancake pool for moonwell...
dvpublic Dec 20, 2023
2b49398
scb867 - tests and more console logs
dvpublic Dec 20, 2023
86c2d2d
Fix scb-867: edge case when REPAY-SWAP-REPAY scheme uses swap B=>A. R…
dvpublic Dec 20, 2023
72f0a19
try to fix scb-873
dvpublic Dec 20, 2023
a646628
Merge branch 'dev-dvpublic-863-876' into dev-dvpublic-863
dvpublic Dec 21, 2023
521fdc4
Merge branch 'dev-dvpublic-863' of github.com:tetu-io/tetu-v2-strateg…
dvpublic Dec 21, 2023
0362c47
fix PairBasedStrategyActionResponseIntTest, add console logs
dvpublic Dec 21, 2023
948e7d9
fix tests. Change PancakeConverterStrategyLogicLib.enter: use burn if…
dvpublic Dec 21, 2023
1046f49
Fix PancakeConverterStrategyLogicLib.enter
dvpublic Dec 21, 2023
73b8be7
Move pair-tests out of polygon folder
dvpublic Dec 22, 2023
f962829
Refactoring of PairBasedStrategySetupIntTest: Pancake-strategy is sup…
dvpublic Dec 22, 2023
6ec7d38
Adapt pair-tests for Pancake
dvpublic Dec 22, 2023
22f27b8
Moonwell prices are replaced using aggregators
dvpublic Dec 22, 2023
1ee6573
remove console logs, enable yul in solcover.js to fix stack too deep …
dvpublic Dec 22, 2023
a42bb02
draft - deploy scripts for pancake strategy
dvpublic Dec 22, 2023
daa3b2d
implement callNftPositions to workaround stack-too-deepn on call of n…
dvpublic Dec 25, 2023
07d0dda
Move to TetuContracts 2.1.6. Add OpenOcean router on zkEvm to the lis…
dvpublic Dec 25, 2023
f605476
Move to TetuContracts 2.1.6, Tetu converter 1.3.1. Add OpenOcean rout…
dvpublic Dec 25, 2023
7ff163c
start to implement tests for zkevm
dvpublic Dec 25, 2023
be3e55c
prepare universal test for Pancacke-strategy on zkevm, draft
dvpublic Dec 25, 2023
c46cf29
tests for Pancake-strategy on zkevm...
dvpublic Dec 26, 2023
e976f30
Add route for tetu. Zkevm, pancake: universal tests passed
dvpublic Dec 27, 2023
657df40
Refactoring of aggregators. Add support of OpenOcean, add AggregatorType
dvpublic Dec 27, 2023
6389415
fix tests
dvpublic Dec 27, 2023
efd9384
fix tests, remove console logs
dvpublic Dec 27, 2023
3c0239c
fix deploy scripts
dvpublic Dec 28, 2023
8382186
fix test 'scb-792: Unfold debts using single iteration...' for Pancak…
dvpublic Dec 28, 2023
544148a
remove unused code
dvpublic Dec 28, 2023
a543d20
Add deploy scripts for Pancake-strategy on Base
dvpublic Dec 28, 2023
9431e4f
disable yul, fix fuse threshods for dai
dvpublic Dec 28, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions contracts/integrations/keom/IKeomApi3Server.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

interface IKeomApi3Server {
function readDataFeedWithId(bytes32 dataFeedId) external view returns (int224 value, uint32 timestamp);
}
174 changes: 174 additions & 0 deletions contracts/integrations/keom/IKeomComptroller.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

/// @notice Restored from 0xc145700AC0d8A59B1f64DcE35687dD7CA2BEB26A, events were removed
interface IKeomComptroller {
function _become(address unitroller) external;
function _borrowGuardianPaused() external view returns (bool);
function _grantReward(address recipient, uint256 amount) external;
function _mintGuardianPaused() external view returns (bool);
function _setBorrowPaused(address kToken, bool state) external returns (bool);

function _setCloseFactor(uint256 newCloseFactorMantissa) external returns (uint256);

function _setCollateralFactor(address kToken, uint256 newCollateralFactorMantissa) external returns (uint256);

function _setLiquidationIncentive(uint256 newLiquidationIncentiveMantissa) external returns (uint256);

function _setMarketBorrowCaps(address[] memory kTokens, uint256[] memory newBorrowCaps) external;

function _setMarketSupplyCaps(address[] memory kTokens, uint256[] memory newSupplyCaps) external;

function _setMintPaused(address kToken, bool state) external returns (bool);

function _setPauseGuardian(address newPauseGuardian) external returns (uint256);

function _setPriceOracle(address newOracle) external returns (uint256);

function _setRedeemPaused(address kToken, bool state) external returns (bool);

function _setRepayPaused(address kToken, bool state) external returns (bool);

function _setRewardSpeeds(address[] memory kTokens, uint256[] memory supplySpeeds, uint256[] memory borrowSpeeds) external;

function _setSeizePaused(bool state) external returns (bool);

function _setTransferPaused(bool state) external returns (bool);

function _supportMarket(address kToken, bool _autoCollaterize) external returns (uint256);

function accountAssets(address, uint256) external view returns (address);

function accountMembership(address, address) external view returns (bool);

function admin() external view returns (address);

function allMarkets(uint256) external view returns (address);

function boostManager() external view returns (address);

function borrowAllowed(address kToken, address borrower, uint256 borrowAmount) external returns (uint256);

function borrowCaps(address) external view returns (uint256);

function borrowState(address) external view returns (uint224 index, uint32 timestamp);

function capGuardian() external view returns (address);

function checkMembership(address account, address kToken) external view returns (bool);

function closeFactorMantissa() external view returns (uint256);

function compRate() external view returns (uint256);

function comptrollerImplementation() external view returns (address);

function enterMarkets(address[] memory kTokens) external returns (uint256[] memory);

function exitMarket(address kTokenAddress) external returns (uint256);

function getAccountLiquidity(address account) external view returns (uint256, uint256, uint256);

function getAllMarkets() external view returns (address[] memory);

function getAssetsIn(address account) external view returns (address[] memory);

function getBoostManager() external view returns (address);

function getHypotheticalAccountLiquidity(address account, address kTokenModify, uint256 redeemTokens, uint256 borrowAmount)
external view returns (uint256, uint256, uint256, uint256);

function getKeomAddress() external view returns (address);

function getTimestamp() external view returns (uint256);

function guardianPaused(address) external view returns (bool mint, bool borrow, bool redeem, bool repay);

function isComptroller() external view returns (bool);

function isDeprecated(address kToken) external view returns (bool);

function isMarket(address kToken) external view returns (bool);

function keom() external view returns (address);

function lastContributorTimestamp(address) external view returns (uint256);

function liquidateBorrowAllowed(address kTokenBorrowed, address kTokenCollateral, address liquidator, address borrower, uint256 repayAmount) external view returns (uint256, uint256);

function liquidateCalculateSeizeTokens(address kTokenBorrowed, address kTokenCollateral, uint256 actualRepayAmount, uint256 dynamicLiquidationIncentive) external view returns (uint256, uint256);

function liquidationIncentiveMantissa() external view returns (uint256);

function marketInitialIndex() external view returns (uint224);

function markets(address) external view returns (bool isListed, bool autoCollaterize, uint256 collateralFactorMantissa);

function maxAssets() external view returns (uint256);

function mintAllowed(address kToken, address minter, uint256 mintAmount) external returns (uint256);

function oracle() external view returns (address);

function pauseGuardian() external view returns (address);

function pendingAdmin() external view returns (address);

function pendingComptrollerImplementation() external view returns (address);

function redeemAllowed(address kToken, address redeemer, uint256 redeemTokens) external returns (uint256);

function redeemVerify(address kToken, address redeemer, uint256 redeemAmount, uint256 redeemTokens) external pure;

function repayBorrowAllowed(address kToken, address payer, address borrower, uint256 repayAmount) external returns (uint256);

function rewardAccrued(address) external view returns (uint256);

function rewardBorrowSpeeds(address) external view returns (uint256);

function rewardBorrowerIndex(address, address) external view returns (uint256);

function rewardContributorSpeeds(address) external view returns (uint256);

function rewardManager() external view returns (address);

function rewardReceivable(address) external view returns (uint256);

function rewardSpeeds(address) external view returns (uint256);

function rewardSupplierIndex(address, address) external view returns (uint256);

function rewardSupplySpeeds(address) external view returns (uint256);

function rewardUpdater() external view returns (address);

function seizeAllowed(address kTokenCollateral, address kTokenBorrowed, address liquidator, address borrower, uint256 seizeTokens) external returns (uint256);

function seizeGuardianPaused() external view returns (bool);

function setAutoCollaterize(address market, bool flag) external;

function setBoostManager(address newBoostManager) external;

function setKeomAddress(address newKeomAddress) external;

function setProtocolPaused(bool _paused) external;

function setRewardUpdater(address _rewardUpdater) external;

function supplyCaps(address) external view returns (uint256);

function supplyState(address) external view returns (uint224 index, uint32 timestamp);

function transferAllowed(address kToken, address src, address dst, uint256 transferTokens) external returns (uint256);

function transferGuardianPaused() external view returns (bool);

function updateAndDistributeBorrowerRewardsForToken(address kToken, address borrower) external;

function updateAndDistributeSupplierRewardsForToken(address kToken, address account) external;

function updateContributorRewards(address contributor) external;

receive() external payable;
}
33 changes: 33 additions & 0 deletions contracts/integrations/keom/IKeomPriceOracle.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

/// @notice Restored from 0x19194261d8f0599Bd079C52623C80C5150f010cF, events were removed
interface IKeomPriceOracle {
function api3() external view returns (address);

function api3Server() external view returns (address);

function feeds(address) external view returns (bytes32);

function getUnderlyingPrice(address kToken) external view returns (uint256 price);

function heartbeats(bytes32) external view returns (uint256);

function isPriceOracle() external view returns (bool);

function kNative() external view returns (address);

function owner() external view returns (address);

function renounceOwnership() external;

function setHeartbeat(address kToken, uint256 heartbeat) external;

function setKNative(address _kNative) external;

function setTokenId(address _kToken, bytes32 _tokenId, uint256 _heartbeat) external;

function transferOwnership(address newOwner) external;

function updateUnderlyingPrices(bytes[] memory) external pure;
}
32 changes: 32 additions & 0 deletions contracts/integrations/moonwell/IMoonwellAggregatorV3Interface.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

interface IMoonwellAggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);

// getRoundData and latestRoundData should both raise "No data present"
// if they do not have data to report, instead of returning unset values
// which could be misinterpreted as actual reported values.
function getRoundData(uint80 _roundId)
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
Loading
Loading