diff --git a/foundry.toml b/foundry.toml index 0206dd6..d91f03c 100644 --- a/foundry.toml +++ b/foundry.toml @@ -5,7 +5,7 @@ out = "out" solc_version = "0.8.22" optimizer = true optimizer_runs = 200 -fs_permissions = [{ access = "read", path = "./"}] +fs_permissions = [{ access = "read", path = "./" }] libs = ['lib'] @@ -23,14 +23,14 @@ remappings = [ ] [fmt] # See https://book.getfoundry.sh/reference/config/formatter -int_types = "long" -line_length = 120 -bracket_spacing = true +int_types = "long" +line_length = 120 +bracket_spacing = true multiline_func_header = "all" -number_underscore = "thousands" -quote_style = "double" -sort_imports = true -ignore = ['./lib/**/*'] +number_underscore = "thousands" +quote_style = "double" +sort_imports = true +ignore = ['./lib/**/*'] [profile.default.rpc_endpoints] holesky = "${RPC_URL_HOLESKY}" diff --git a/script/DeploySatoshiPeriphery.s.sol b/script/DeploySatoshiPeriphery.s.sol new file mode 100644 index 0000000..7dc577b --- /dev/null +++ b/script/DeploySatoshiPeriphery.s.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { Script, console } from "forge-std/Script.sol"; + +import { SatoshiPeriphery } from "../src/core/helpers/SatoshiPeriphery.sol"; +import { ISatoshiPeriphery } from "../src/core/helpers/interfaces/ISatoshiPeriphery.sol"; +import { IDebtToken } from "../src/core/interfaces/IDebtToken.sol"; + +contract DeploySatoshiPeriphery is Script { + function run() external { + uint256 deployerKey = vm.envUint("DEPLOYMENT_PRIVATE_KEY"); + address debtToken = vm.envAddress("DEBT_TOKEN"); + address xApp = vm.envAddress("X_APP"); + address owner = vm.envAddress("OWNER"); + + vm.startBroadcast(deployerKey); + + address peripheryImpl = address(new SatoshiPeriphery()); + bytes memory data = abi.encodeCall(ISatoshiPeriphery.initialize, (IDebtToken(debtToken), xApp, owner)); + ISatoshiPeriphery periphery = ISatoshiPeriphery(address(new ERC1967Proxy(peripheryImpl, data))); + + console.log("Implementation:", peripheryImpl); + console.log("Proxy:", address(periphery)); + + vm.stopBroadcast(); + } +} diff --git a/script/strategyVault/cygnus/SetCygnusVaultConfig.s.sol b/script/strategyVault/cygnus/SetCygnusVaultConfig.s.sol index 742f211..d113857 100644 --- a/script/strategyVault/cygnus/SetCygnusVaultConfig.s.sol +++ b/script/strategyVault/cygnus/SetCygnusVaultConfig.s.sol @@ -2,9 +2,6 @@ pragma solidity ^0.8.20; import { CygnusVault } from "../../../src/vault/CygnusVault.sol"; -import { IVault } from "../../../src/vault/interfaces/IVault.sol"; -import { IVaultManager } from "../../../src/vault/interfaces/IVaultManager.sol"; -import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { Script, console2 } from "forge-std/Script.sol"; address constant CYGNUS_VAULT_ADDRESS = 0xE8c5b4517610006C1fb0eD5467E01e4bAd43558D; diff --git a/script/upgrade/UpgradeNYM.s.sol b/script/upgrade/UpgradeNYM.s.sol index bc8b685..54e4c4a 100644 --- a/script/upgrade/UpgradeNYM.s.sol +++ b/script/upgrade/UpgradeNYM.s.sol @@ -29,9 +29,7 @@ contract UpgradeNYMScript is Script { IERC2535DiamondCutInternal.FacetCut[] memory facetCuts = new IERC2535DiamondCutInternal.FacetCut[](1); facetCuts[0] = IERC2535DiamondCutInternal.FacetCut({ - target: newNYMImpl, - action: IERC2535DiamondCutInternal.FacetCutAction.ADD, - selectors: selectors + target: newNYMImpl, action: IERC2535DiamondCutInternal.FacetCutAction.ADD, selectors: selectors }); ISatoshiXApp XAPP = ISatoshiXApp(SATOSHI_X_APP_ADDRESS); diff --git a/src/OSHI/RewardManager.sol b/src/OSHI/RewardManager.sol index 572bef9..d860447 100644 --- a/src/OSHI/RewardManager.sol +++ b/src/OSHI/RewardManager.sol @@ -423,4 +423,6 @@ contract RewardManager is IRewardManager, UUPSUpgradeable, OwnableUpgradeable { ) isRegistered = true; require(isRegistered, "RewardManager: Caller is not Valid"); } + + receive() external payable { } } diff --git a/src/core/facets/FactoryFacet.sol b/src/core/facets/FactoryFacet.sol index a508335..392ff39 100644 --- a/src/core/facets/FactoryFacet.sol +++ b/src/core/facets/FactoryFacet.sol @@ -154,13 +154,7 @@ contract FactoryFacet is IFactoryFacet, AccessControlInternal { return ITroveManager(address(new BeaconProxy(address(s.troveManagerBeacon), data))); } - function setTMRewardRate( - uint128[] calldata _numerator, - uint128 _denominator - ) - external - onlyRole(Config.OWNER_ROLE) - { + function setTMRewardRate(uint128[] calldata _numerator, uint128 _denominator) external onlyRole(Config.OWNER_ROLE) { AppStorage.Layout storage s = AppStorage.layout(); // console.log("setTMRewardRate", _numerator.length, s.troveManagers.length); require(_numerator.length == s.troveManagers.length, "Factory: invalid length"); diff --git a/src/core/facets/LiquidationFacet.sol b/src/core/facets/LiquidationFacet.sol index f15fe7a..6cfaf77 100644 --- a/src/core/facets/LiquidationFacet.sol +++ b/src/core/facets/LiquidationFacet.sol @@ -121,7 +121,7 @@ contract LiquidationFacet is ILiquidationFacet, AccessControlInternal, OwnableIn if (singleLiquidation.debtToOffset == 0) continue; debtInStabPool -= singleLiquidation.debtToOffset; entireSystemColl -= (singleLiquidation.collToSendToSP + singleLiquidation.collSurplus) - * troveManagerValues.price; + * troveManagerValues.price; entireSystemDebt -= singleLiquidation.debtToOffset; _applyLiquidationValuesToTotals(totals, singleLiquidation); unchecked { diff --git a/src/core/facets/StabilityPoolFacet.sol b/src/core/facets/StabilityPoolFacet.sol index cb5810f..1d1023a 100644 --- a/src/core/facets/StabilityPoolFacet.sol +++ b/src/core/facets/StabilityPoolFacet.sol @@ -5,7 +5,6 @@ import { SatoshiMath } from "../../library/SatoshiMath.sol"; import { AppStorage } from "../AppStorage.sol"; import { Config } from "../Config.sol"; -import { IDebtToken } from "../interfaces/IDebtToken.sol"; import { AccountDeposit, IStabilityPoolFacet, diff --git a/src/core/helpers/SatoshiPeriphery.sol b/src/core/helpers/SatoshiPeriphery.sol index e04dac7..3ee7166 100644 --- a/src/core/helpers/SatoshiPeriphery.sol +++ b/src/core/helpers/SatoshiPeriphery.sol @@ -12,6 +12,7 @@ import { ILiquidationFacet } from "../interfaces/ILiquidationFacet.sol"; import { ITroveManager } from "../interfaces/ITroveManager.sol"; import { IDebtToken } from "../interfaces/IDebtToken.sol"; +import { INexusYieldManagerFacet } from "../interfaces/INexusYieldManagerFacet.sol"; import { ISatoshiPeriphery, LzSendParam } from "./interfaces/ISatoshiPeriphery.sol"; import { IWETH } from "./interfaces/IWETH.sol"; import { @@ -25,18 +26,21 @@ import { } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import { ReentrancyGuardUpgradeable } from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /** * @title Satoshi Borrower Operations Router * Handle the native token and ERC20 for the borrower operations */ -contract SatoshiPeriphery is ISatoshiPeriphery, UUPSUpgradeable, OwnableUpgradeable { +contract SatoshiPeriphery is ISatoshiPeriphery, UUPSUpgradeable, OwnableUpgradeable, ReentrancyGuardUpgradeable { using SafeERC20 for IERC20; using SafeERC20 for DebtTokenWithLz; DebtTokenWithLz public debtToken; address public xApp; + address public okxRouter; + address public okxApprove; function initialize(IDebtToken _debtToken, address _xApp, address _owner) external initializer { if (address(_debtToken) == address(0)) revert InvalidZeroAddress(); @@ -47,6 +51,7 @@ contract SatoshiPeriphery is ISatoshiPeriphery, UUPSUpgradeable, OwnableUpgradea __Ownable_init(_owner); __UUPSUpgradeable_init_unchained(); + __ReentrancyGuard_init_unchained(); } receive() external payable { @@ -97,14 +102,7 @@ contract SatoshiPeriphery is ISatoshiPeriphery, UUPSUpgradeable, OwnableUpgradea /// @param _collAmount The amount of additional collateral /// @param _upperHint The upper hint (for querying the position of the sorted trove) /// @param _lowerHint The lower hint (for querying the position of the sorted trove) - function addColl( - ITroveManager troveManager, - uint256 _collAmount, - address _upperHint, - address _lowerHint - ) - external - { + function addColl(ITroveManager troveManager, uint256 _collAmount, address _upperHint, address _lowerHint) external { IERC20 collateralToken = troveManager.collateralToken(); _beforeAddColl(collateralToken, _collAmount); @@ -346,4 +344,76 @@ contract SatoshiPeriphery is ISatoshiPeriphery, UUPSUpgradeable, OwnableUpgradea function _authorizeUpgrade(address newImplementation) internal view override onlyOwner { // No additional authorization logic is needed for this contract } + + /// @notice Set the OKX DEX router address (routerContractAddress from OKX /swap API) + function setOkxRouter(address _okxRouter) external onlyOwner { + if (_okxRouter == address(0)) revert InvalidZeroAddress(); + okxRouter = _okxRouter; + emit OkxRouterSet(_okxRouter); + } + + /// @notice Set the OKX token-approve proxy address (tokenApproveAddress from OKX /approve-transaction API) + function setOkxApprove(address _okxApprove) external onlyOwner { + if (_okxApprove == address(0)) revert InvalidZeroAddress(); + okxApprove = _okxApprove; + emit OkxApproveSet(_okxApprove); + } + + /// @notice Swap any ERC20 → stable token via OKX DEX → DebtToken via NYM.swapIn + /// @dev ERC20 only — native token input is not supported + /// @dev fromToken must be pre-approved to this contract by msg.sender + /// @dev okxCalldata must be generated with this contract address as userWalletAddress + /// @dev DebtToken is always delivered to msg.sender on the same chain + function swapInWithOkx( + address fromToken, + uint256 fromAmount, + bytes calldata okxCalldata, + address stableAsset, + uint256 minDebtAmount + ) + public + nonReentrant + { + address _okxRouter = okxRouter; + address _okxApprove = okxApprove; + require(_okxRouter != address(0), "SatoshiPeriphery: okxRouter not set"); + require(_okxApprove != address(0), "SatoshiPeriphery: okxApprove not set"); + + IERC20(fromToken).safeTransferFrom(msg.sender, address(this), fromAmount); + + uint256 fromTokenBefore = IERC20(fromToken).balanceOf(address(this)); + + // Must approve the token approve proxy, NOT the router — OKX uses a separate spender contract + IERC20(fromToken).forceApprove(_okxApprove, fromAmount); + + uint256 stableBalanceBefore = IERC20(stableAsset).balanceOf(address(this)); + + (bool success,) = _okxRouter.call(okxCalldata); + require(success, "SatoshiPeriphery: OKX swap failed"); + + IERC20(fromToken).forceApprove(_okxApprove, 0); + + uint256 fromTokenAfter = IERC20(fromToken).balanceOf(address(this)); + if (fromTokenAfter > fromTokenBefore - fromAmount) { + uint256 refund = fromTokenAfter - (fromTokenBefore - fromAmount); + IERC20(fromToken).safeTransfer(msg.sender, refund); + } + + uint256 stableReceived = IERC20(stableAsset).balanceOf(address(this)) - stableBalanceBefore; + require(stableReceived > 0, "SatoshiPeriphery: No stable tokens received from OKX"); + + IERC20(stableAsset).forceApprove(xApp, stableReceived); + + uint256 debtTokenBalanceBefore = debtToken.balanceOf(address(this)); + + INexusYieldManagerFacet(xApp).swapIn(stableAsset, address(this), stableReceived); + + uint256 debtTokenReceived = debtToken.balanceOf(address(this)) - debtTokenBalanceBefore; + + if (debtTokenReceived < minDebtAmount) { + revert SlippageTooHigh(debtTokenReceived, minDebtAmount); + } + + debtToken.safeTransfer(msg.sender, debtTokenReceived); + } } diff --git a/src/core/helpers/interfaces/ISatoshiPeriphery.sol b/src/core/helpers/interfaces/ISatoshiPeriphery.sol index 29a152e..826a57e 100644 --- a/src/core/helpers/interfaces/ISatoshiPeriphery.sol +++ b/src/core/helpers/interfaces/ISatoshiPeriphery.sol @@ -22,13 +22,25 @@ interface ISatoshiPeriphery { error InvalidZeroAddress(); error RefundFailed(); error InsufficientMsgValue(uint256 msgValue, uint256 requiredValue); + error SlippageTooHigh(uint256 actual, uint256 minimum); + + event OkxRouterSet(address indexed okxRouter); + event OkxApproveSet(address indexed okxApprove); function debtToken() external view returns (DebtTokenWithLz); function xApp() external view returns (address); + function okxRouter() external view returns (address); + + function okxApprove() external view returns (address); + function initialize(IDebtToken _debtToken, address _xApp, address _owner) external; + function setOkxRouter(address _okxRouter) external; + + function setOkxApprove(address _okxApprove) external; + function openTrove( ITroveManager troveManager, uint256 _maxFeePercentage, @@ -41,13 +53,7 @@ interface ISatoshiPeriphery { external payable; - function addColl( - ITroveManager troveManager, - uint256 _collAmount, - address _upperHint, - address _lowerHint - ) - external; + function addColl(ITroveManager troveManager, uint256 _collAmount, address _upperHint, address _lowerHint) external; function withdrawColl( ITroveManager troveManager, @@ -100,4 +106,19 @@ interface ISatoshiPeriphery { ) external payable; + + /// @notice Swap any ERC20 → stable token via OKX DEX → DebtToken via NYM.swapIn (ERC20 only) + /// @param fromToken Input ERC20 token (must be approved to this contract) + /// @param fromAmount Raw input amount + /// @param okxCalldata OKX swap calldata from backend /okx/nym-swap response + /// @param stableAsset Stable token address from backend /okx/nym-swap response + /// @param minDebtAmount Minimum DebtToken to receive; revert if below this (slippage guard) + function swapInWithOkx( + address fromToken, + uint256 fromAmount, + bytes calldata okxCalldata, + address stableAsset, + uint256 minDebtAmount + ) + external; } diff --git a/src/core/helpers/interfaces/ITroveHelper.sol b/src/core/helpers/interfaces/ITroveHelper.sol index 9b53ff5..b2db5f1 100644 --- a/src/core/helpers/interfaces/ITroveHelper.sol +++ b/src/core/helpers/interfaces/ITroveHelper.sol @@ -4,14 +4,7 @@ pragma solidity ^0.8.20; import { ITroveManager } from "../../interfaces/ITroveManager.sol"; interface ITroveHelper { - function getNicrByTime( - ITroveManager troveManager, - address _borrower, - uint256 time - ) - external - view - returns (uint256); + function getNicrByTime(ITroveManager troveManager, address _borrower, uint256 time) external view returns (uint256); function getNicrListByTime( ITroveManager troveManager, diff --git a/src/core/helpers/interfaces/ITroveManagerGetter.sol b/src/core/helpers/interfaces/ITroveManagerGetter.sol index dde2dd2..617c261 100644 --- a/src/core/helpers/interfaces/ITroveManagerGetter.sol +++ b/src/core/helpers/interfaces/ITroveManagerGetter.sol @@ -13,8 +13,5 @@ interface ITroveManagerGetter { function getAllCollateralsAndTroveManagers() external view returns (Collateral[] memory); - function getActiveTroveManagersForAccount(address account) - external - view - returns (ITroveManager[] memory, uint256); + function getActiveTroveManagersForAccount(address account) external view returns (ITroveManager[] memory, uint256); } diff --git a/src/core/libs/BorrowerOperationsLib.sol b/src/core/libs/BorrowerOperationsLib.sol index 220fd07..81c4a37 100644 --- a/src/core/libs/BorrowerOperationsLib.sol +++ b/src/core/libs/BorrowerOperationsLib.sol @@ -167,9 +167,9 @@ library BorrowerOperationsLib { uint256 loopEnd = balances.collaterals.length; for (uint256 i; i < loopEnd;) { totalPricedCollateral += (SatoshiMath._getScaledCollateralAmount( - balances.collaterals[i], balances.decimals[i] - ) - * balances.prices[i]); + balances.collaterals[i], balances.decimals[i] + ) + * balances.prices[i]); totalDebt += balances.debts[i]; unchecked { ++i; diff --git a/src/core/libs/StabilityPoolLib.sol b/src/core/libs/StabilityPoolLib.sol index c0ae066..c115c63 100644 --- a/src/core/libs/StabilityPoolLib.sol +++ b/src/core/libs/StabilityPoolLib.sol @@ -227,10 +227,7 @@ library StabilityPoolLib { return releasedToken; } - function _getCompoundedDebtDeposit( - AppStorage.Layout storage s, - address _depositor - ) + function _getCompoundedDebtDeposit(AppStorage.Layout storage s, address _depositor) internal view returns (uint256) diff --git a/src/library/interfaces/vault/IDelegationManager.sol b/src/library/interfaces/vault/IDelegationManager.sol index ed14fb4..719d5cd 100644 --- a/src/library/interfaces/vault/IDelegationManager.sol +++ b/src/library/interfaces/vault/IDelegationManager.sol @@ -287,13 +287,7 @@ interface IDelegationManager { /** * @notice Given array of strategies, returns array of shares for the operator */ - function getOperatorShares( - address operator, - IStrategy[] memory strategies - ) - external - view - returns (uint256[] memory); + function getOperatorShares(address operator, IStrategy[] memory strategies) external view returns (uint256[] memory); /** * @notice Given a list of strategies, return the minimum cooldown that must pass to withdraw diff --git a/src/library/interfaces/vault/ISlasher.sol b/src/library/interfaces/vault/ISlasher.sol index 007051c..8bbaa2f 100644 --- a/src/library/interfaces/vault/ISlasher.sol +++ b/src/library/interfaces/vault/ISlasher.sol @@ -196,13 +196,7 @@ interface ISlasher { returns (uint32); /// @notice Getter function for fetching `operatorToMiddlewareTimes[operator][index].latestServeUntil`. - function getMiddlewareTimesIndexServeUntilTimestamp( - address operator, - uint32 index - ) - external - view - returns (uint32); + function getMiddlewareTimesIndexServeUntilTimestamp(address operator, uint32 index) external view returns (uint32); /// @notice Getter function for fetching `_operatorToWhitelistedContractsByUpdate[operator].size`. function operatorWhitelistedContractsLinkedListSize(address operator) external view returns (uint256); diff --git a/src/vault/interfaces/IDelegationManager.sol b/src/vault/interfaces/IDelegationManager.sol index d3ddf22..46d5c6a 100644 --- a/src/vault/interfaces/IDelegationManager.sol +++ b/src/vault/interfaces/IDelegationManager.sol @@ -334,13 +334,7 @@ interface IDelegationManager is ISignatureUtils { /** * @notice Given array of strategies, returns array of shares for the operator */ - function getOperatorShares( - address operator, - IStrategy[] memory strategies - ) - external - view - returns (uint256[] memory); + function getOperatorShares(address operator, IStrategy[] memory strategies) external view returns (uint256[] memory); /** * @notice Given a list of strategies, return the minimum cooldown that must pass to withdraw diff --git a/src/vault/interfaces/ISlasher.sol b/src/vault/interfaces/ISlasher.sol index 007051c..8bbaa2f 100644 --- a/src/vault/interfaces/ISlasher.sol +++ b/src/vault/interfaces/ISlasher.sol @@ -196,13 +196,7 @@ interface ISlasher { returns (uint32); /// @notice Getter function for fetching `operatorToMiddlewareTimes[operator][index].latestServeUntil`. - function getMiddlewareTimesIndexServeUntilTimestamp( - address operator, - uint32 index - ) - external - view - returns (uint32); + function getMiddlewareTimesIndexServeUntilTimestamp(address operator, uint32 index) external view returns (uint32); /// @notice Getter function for fetching `_operatorToWhitelistedContractsByUpdate[operator].size`. function operatorWhitelistedContractsLinkedListSize(address operator) external view returns (uint256); diff --git a/test/DebtTokenTest.t.sol b/test/DebtTokenTest.t.sol index c2012ca..b27ea27 100644 --- a/test/DebtTokenTest.t.sol +++ b/test/DebtTokenTest.t.sol @@ -2,11 +2,9 @@ pragma solidity ^0.8.20; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; -import { Test, console } from "forge-std/Test.sol"; -import { Vm } from "forge-std/Vm.sol"; import { FlashloanTester } from "../src/test/FlashloanTester.sol"; -import { DEBT_TOKEN_NAME, DEBT_TOKEN_SYMBOL, DEPLOYER, OWNER } from "./TestConfig.sol"; +import { DEBT_TOKEN_NAME, DEBT_TOKEN_SYMBOL, OWNER } from "./TestConfig.sol"; import { DeployBase } from "./utils/DeployBase.t.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; diff --git a/test/NexusYieldTest.t.sol b/test/NexusYieldTest.t.sol index f68484e..c463918 100644 --- a/test/NexusYieldTest.t.sol +++ b/test/NexusYieldTest.t.sol @@ -1,60 +1,17 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import { CommunityIssuance } from "../src/OSHI/CommunityIssuance.sol"; - -import { OSHIToken } from "../src/OSHI/OSHIToken.sol"; -import { RewardManager } from "../src/OSHI/RewardManager.sol"; -import { ICommunityIssuance } from "../src/OSHI/interfaces/ICommunityIssuance.sol"; -import { IOSHIToken } from "../src/OSHI/interfaces/IOSHIToken.sol"; import { IRewardManager, LockDuration } from "../src/OSHI/interfaces/IRewardManager.sol"; import { Config } from "../src/core/Config.sol"; - -import { DebtToken } from "../src/core/DebtToken.sol"; -import { Initializer } from "../src/core/Initializer.sol"; -import { SatoshiXApp } from "../src/core/SatoshiXApp.sol"; - -import { SortedTroves } from "../src/core/SortedTroves.sol"; -import { TroveManager } from "../src/core/TroveManager.sol"; -import { BorrowerOperationsFacet } from "../src/core/facets/BorrowerOperationsFacet.sol"; -import { CoreFacet } from "../src/core/facets/CoreFacet.sol"; -import { FactoryFacet } from "../src/core/facets/FactoryFacet.sol"; -import { LiquidationFacet } from "../src/core/facets/LiquidationFacet.sol"; -import { NexusYieldManagerFacet } from "../src/core/facets/NexusYieldManagerFacet.sol"; -import { PriceFeedAggregatorFacet } from "../src/core/facets/PriceFeedAggregatorFacet.sol"; -import { StabilityPoolFacet } from "../src/core/facets/StabilityPoolFacet.sol"; - -import { SatoshiPeriphery } from "../src/core/helpers/SatoshiPeriphery.sol"; -import { IMultiCollateralHintHelpers } from "../src/core/helpers/interfaces/IMultiCollateralHintHelpers.sol"; -import { ISatoshiPeriphery, LzSendParam } from "../src/core/helpers/interfaces/ISatoshiPeriphery.sol"; -import { IBorrowerOperationsFacet } from "../src/core/interfaces/IBorrowerOperationsFacet.sol"; -import { ICoreFacet } from "../src/core/interfaces/ICoreFacet.sol"; -import { IDebtToken } from "../src/core/interfaces/IDebtToken.sol"; -import { DeploymentParams, IFactoryFacet } from "../src/core/interfaces/IFactoryFacet.sol"; -import { ILiquidationFacet } from "../src/core/interfaces/ILiquidationFacet.sol"; import { AssetConfig, INexusYieldManagerFacet } from "../src/core/interfaces/INexusYieldManagerFacet.sol"; -import { IPriceFeedAggregatorFacet } from "../src/core/interfaces/IPriceFeedAggregatorFacet.sol"; -import { ISatoshiXApp } from "../src/core/interfaces/ISatoshiXApp.sol"; - import { ISortedTroves } from "../src/core/interfaces/ISortedTroves.sol"; -import { IStabilityPoolFacet } from "../src/core/interfaces/IStabilityPoolFacet.sol"; -import { ITroveManager, TroveManagerOperation } from "../src/core/interfaces/ITroveManager.sol"; -import { SatoshiMath } from "../src/library/SatoshiMath.sol"; - -import { AggregatorV3Interface } from "../src/priceFeed/interfaces/AggregatorV3Interface.sol"; -import { IPriceFeed } from "../src/priceFeed/interfaces/IPriceFeed.sol"; +import { ITroveManager } from "../src/core/interfaces/ITroveManager.sol"; import "./TestConfig.sol"; import { ERC20Mock } from "./mocks/ERC20Mock.sol"; -import { OracleMock, RoundData } from "./mocks/OracleMock.sol"; -import { DeployBase, LocalVars } from "./utils/DeployBase.t.sol"; -import { HintLib } from "./utils/HintLib.sol"; +import { RoundData } from "./mocks/OracleMock.sol"; +import { DeployBase } from "./utils/DeployBase.t.sol"; import { TroveBase } from "./utils/TroveBase.t.sol"; -import { MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol"; -import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; -import { stdJson } from "forge-std/StdJson.sol"; -import { Vm } from "forge-std/Vm.sol"; -import { console } from "forge-std/console.sol"; contract mock6 is ERC20Mock { constructor() ERC20Mock("MOCK", "MOCK") { } diff --git a/test/OSHITokenTest.t.sol b/test/OSHITokenTest.t.sol index e6aeac2..147b5b2 100644 --- a/test/OSHITokenTest.t.sol +++ b/test/OSHITokenTest.t.sol @@ -52,9 +52,6 @@ import { MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.s import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { IERC20Permit } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; -import { stdJson } from "forge-std/StdJson.sol"; -import { Vm } from "forge-std/Vm.sol"; -import { console } from "forge-std/console.sol"; contract OSHITokenTest is DeployBase, TroveBase { using Math for uint256; diff --git a/test/RewardManagerTest.t.sol b/test/RewardManagerTest.t.sol index b10fcef..bf60d10 100644 --- a/test/RewardManagerTest.t.sol +++ b/test/RewardManagerTest.t.sol @@ -1,12 +1,6 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import { CommunityIssuance } from "../src/OSHI/CommunityIssuance.sol"; - -import { OSHIToken } from "../src/OSHI/OSHIToken.sol"; -import { RewardManager } from "../src/OSHI/RewardManager.sol"; -import { ICommunityIssuance } from "../src/OSHI/interfaces/ICommunityIssuance.sol"; -import { IOSHIToken } from "../src/OSHI/interfaces/IOSHIToken.sol"; import { IRewardManager, LockDuration } from "../src/OSHI/interfaces/IRewardManager.sol"; import { DebtToken } from "../src/core/DebtToken.sol"; import { Initializer } from "../src/core/Initializer.sol"; @@ -29,31 +23,17 @@ import { IBorrowerOperationsFacet } from "../src/core/interfaces/IBorrowerOperat import { ICoreFacet } from "../src/core/interfaces/ICoreFacet.sol"; import { IDebtToken } from "../src/core/interfaces/IDebtToken.sol"; import { DeploymentParams, IFactoryFacet } from "../src/core/interfaces/IFactoryFacet.sol"; -import { ILiquidationFacet } from "../src/core/interfaces/ILiquidationFacet.sol"; -import { INexusYieldManagerFacet } from "../src/core/interfaces/INexusYieldManagerFacet.sol"; -import { IPriceFeedAggregatorFacet } from "../src/core/interfaces/IPriceFeedAggregatorFacet.sol"; -import { ISatoshiXApp } from "../src/core/interfaces/ISatoshiXApp.sol"; import { ISortedTroves } from "../src/core/interfaces/ISortedTroves.sol"; -import { IStabilityPoolFacet } from "../src/core/interfaces/IStabilityPoolFacet.sol"; -import { ITroveManager, TroveManagerOperation } from "../src/core/interfaces/ITroveManager.sol"; -import { SatoshiMath } from "../src/library/SatoshiMath.sol"; +import { ITroveManager } from "../src/core/interfaces/ITroveManager.sol"; -import { AggregatorV3Interface } from "../src/priceFeed/interfaces/AggregatorV3Interface.sol"; -import { IPriceFeed } from "../src/priceFeed/interfaces/IPriceFeed.sol"; import "./TestConfig.sol"; import { ERC20Mock } from "./mocks/ERC20Mock.sol"; -import { OracleMock, RoundData } from "./mocks/OracleMock.sol"; -import { DeployBase, LocalVars } from "./utils/DeployBase.t.sol"; -import { HintLib } from "./utils/HintLib.sol"; +import { RoundData } from "./mocks/OracleMock.sol"; +import { DeployBase } from "./utils/DeployBase.t.sol"; import { TroveBase } from "./utils/TroveBase.t.sol"; -import { MessagingFee } from "@layerzerolabs/oft-evm/contracts/interfaces/IOFT.sol"; -import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; -import { stdJson } from "forge-std/StdJson.sol"; -import { Vm } from "forge-std/Vm.sol"; -import { console } from "forge-std/console.sol"; contract RewardManagerTest is DeployBase, TroveBase { using Math for uint256; diff --git a/test/StabilityPoolTest.t.sol b/test/StabilityPoolTest.t.sol index 00ee482..d5488ee 100644 --- a/test/StabilityPoolTest.t.sol +++ b/test/StabilityPoolTest.t.sol @@ -1,59 +1,16 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import { CommunityIssuance } from "../src/OSHI/CommunityIssuance.sol"; - -import { OSHIToken } from "../src/OSHI/OSHIToken.sol"; -import { RewardManager } from "../src/OSHI/RewardManager.sol"; -import { ICommunityIssuance } from "../src/OSHI/interfaces/ICommunityIssuance.sol"; -import { IOSHIToken } from "../src/OSHI/interfaces/IOSHIToken.sol"; -import { IRewardManager } from "../src/OSHI/interfaces/IRewardManager.sol"; -import { DebtToken } from "../src/core/DebtToken.sol"; -import { Initializer } from "../src/core/Initializer.sol"; -import { SatoshiXApp } from "../src/core/SatoshiXApp.sol"; - -import { SortedTroves } from "../src/core/SortedTroves.sol"; -import { TroveManager } from "../src/core/TroveManager.sol"; -import { BorrowerOperationsFacet } from "../src/core/facets/BorrowerOperationsFacet.sol"; -import { CoreFacet } from "../src/core/facets/CoreFacet.sol"; -import { FactoryFacet } from "../src/core/facets/FactoryFacet.sol"; -import { LiquidationFacet } from "../src/core/facets/LiquidationFacet.sol"; -import { NexusYieldManagerFacet } from "../src/core/facets/NexusYieldManagerFacet.sol"; -import { PriceFeedAggregatorFacet } from "../src/core/facets/PriceFeedAggregatorFacet.sol"; -import { StabilityPoolFacet } from "../src/core/facets/StabilityPoolFacet.sol"; - -import { SatoshiPeriphery } from "../src/core/helpers/SatoshiPeriphery.sol"; - -import { IMultiCollateralHintHelpers } from "../src/core/helpers/interfaces/IMultiCollateralHintHelpers.sol"; -import { ISatoshiPeriphery } from "../src/core/helpers/interfaces/ISatoshiPeriphery.sol"; -import { IWETH } from "../src/core/helpers/interfaces/IWETH.sol"; -import { IBorrowerOperationsFacet } from "../src/core/interfaces/IBorrowerOperationsFacet.sol"; -import { ICoreFacet } from "../src/core/interfaces/ICoreFacet.sol"; -import { IDebtToken } from "../src/core/interfaces/IDebtToken.sol"; -import { DeploymentParams, IFactoryFacet } from "../src/core/interfaces/IFactoryFacet.sol"; -import { ILiquidationFacet } from "../src/core/interfaces/ILiquidationFacet.sol"; -import { INexusYieldManagerFacet } from "../src/core/interfaces/INexusYieldManagerFacet.sol"; -import { IPriceFeedAggregatorFacet } from "../src/core/interfaces/IPriceFeedAggregatorFacet.sol"; -import { ISatoshiXApp } from "../src/core/interfaces/ISatoshiXApp.sol"; - import { ISortedTroves } from "../src/core/interfaces/ISortedTroves.sol"; -import { IStabilityPoolFacet } from "../src/core/interfaces/IStabilityPoolFacet.sol"; import { ITroveManager } from "../src/core/interfaces/ITroveManager.sol"; import { SatoshiMath } from "../src/library/SatoshiMath.sol"; -import { AggregatorV3Interface } from "../src/priceFeed/interfaces/AggregatorV3Interface.sol"; -import { IPriceFeed } from "../src/priceFeed/interfaces/IPriceFeed.sol"; import "./TestConfig.sol"; -import { OracleMock, RoundData } from "./mocks/OracleMock.sol"; +import { RoundData } from "./mocks/OracleMock.sol"; import { DeployBase } from "./utils/DeployBase.t.sol"; -import { HintLib } from "./utils/HintLib.sol"; import { TroveBase } from "./utils/TroveBase.t.sol"; import { IERC20Errors } from "@openzeppelin/contracts/interfaces/draft-IERC6093.sol"; -import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import { stdJson } from "forge-std/StdJson.sol"; -import { Vm } from "forge-std/Vm.sol"; -import { console } from "forge-std/console.sol"; contract StabilityPoolTest is DeployBase, TroveBase { uint256 maxFeePercentage = 0.05e18; // 5% diff --git a/test/TroveManagerTest.t.sol b/test/TroveManagerTest.t.sol index 5f119ca..93836ed 100644 --- a/test/TroveManagerTest.t.sol +++ b/test/TroveManagerTest.t.sol @@ -1,8 +1,6 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.20; -import { CommunityIssuance } from "../src/OSHI/CommunityIssuance.sol"; - import { OSHIToken } from "../src/OSHI/OSHIToken.sol"; import { RewardManager } from "../src/OSHI/RewardManager.sol"; import { ICommunityIssuance } from "../src/OSHI/interfaces/ICommunityIssuance.sol"; @@ -30,28 +28,16 @@ import { IWETH } from "../src/core/helpers/interfaces/IWETH.sol"; import { IBorrowerOperationsFacet } from "../src/core/interfaces/IBorrowerOperationsFacet.sol"; import { ICoreFacet } from "../src/core/interfaces/ICoreFacet.sol"; import { IDebtToken } from "../src/core/interfaces/IDebtToken.sol"; -import { DeploymentParams, IFactoryFacet } from "../src/core/interfaces/IFactoryFacet.sol"; -import { ILiquidationFacet } from "../src/core/interfaces/ILiquidationFacet.sol"; -import { INexusYieldManagerFacet } from "../src/core/interfaces/INexusYieldManagerFacet.sol"; -import { IPriceFeedAggregatorFacet } from "../src/core/interfaces/IPriceFeedAggregatorFacet.sol"; -import { ISatoshiXApp } from "../src/core/interfaces/ISatoshiXApp.sol"; +import { DeploymentParams } from "../src/core/interfaces/IFactoryFacet.sol"; import { ISortedTroves } from "../src/core/interfaces/ISortedTroves.sol"; -import { IStabilityPoolFacet } from "../src/core/interfaces/IStabilityPoolFacet.sol"; import { ITroveManager } from "../src/core/interfaces/ITroveManager.sol"; -import { AggregatorV3Interface } from "../src/priceFeed/interfaces/AggregatorV3Interface.sol"; -import { IPriceFeed } from "../src/priceFeed/interfaces/IPriceFeed.sol"; import "./TestConfig.sol"; -import { OracleMock, RoundData } from "./mocks/OracleMock.sol"; +import { RoundData } from "./mocks/OracleMock.sol"; import { DeployBase } from "./utils/DeployBase.t.sol"; -import { HintLib } from "./utils/HintLib.sol"; import { TroveBase } from "./utils/TroveBase.t.sol"; -import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; -import { stdJson } from "forge-std/StdJson.sol"; -import { Vm } from "forge-std/Vm.sol"; -import { console } from "forge-std/console.sol"; contract TroveManagerTest is DeployBase, TroveBase { uint256 maxFeePercentage = 0.05e18; // 5%