Fix & Optimize contract
This commit is contained in:
@@ -2,14 +2,15 @@
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
import "forge-std/Test.sol";
|
||||
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
|
||||
import "../contracts/ytLp/tokens/USDY.sol";
|
||||
import "../contracts/ytLp/tokens/YTLPToken.sol";
|
||||
import "../contracts/ytLp/core/YTPriceFeed.sol";
|
||||
import "../contracts/ytLp/core/YTVault.sol";
|
||||
import "../contracts/ytLp/core/YTPoolManager.sol";
|
||||
import "../contracts/ytLp/core/YTRewardRouter.sol";
|
||||
import "../contracts/vault/YTAssetVault.sol";
|
||||
import "../contracts/vault/YTAssetFactory.sol";
|
||||
import "../contracts/ytVault/YTAssetVault.sol";
|
||||
import "../contracts/ytVault/YTAssetFactory.sol";
|
||||
import "../contracts/ytLp/tokens/WUSD.sol";
|
||||
|
||||
contract YTLpTest is Test {
|
||||
@@ -44,49 +45,83 @@ contract YTLpTest is Test {
|
||||
vm.deal(user2, 100 ether);
|
||||
vm.deal(user3, 100 ether);
|
||||
|
||||
// 部署WUSD
|
||||
wusd = new WUSD();
|
||||
wusd.initialize("Wrapped USD", "WUSD");
|
||||
// ✅ 使用代理模式部署 WUSD
|
||||
WUSD wusdImpl = new WUSD();
|
||||
bytes memory wusdInitData = abi.encodeWithSelector(
|
||||
WUSD.initialize.selector,
|
||||
"Wrapped USD",
|
||||
"WUSD"
|
||||
);
|
||||
ERC1967Proxy wusdProxy = new ERC1967Proxy(address(wusdImpl), wusdInitData);
|
||||
wusd = WUSD(address(wusdProxy));
|
||||
|
||||
// 部署代币(可升级合约)
|
||||
usdy = new USDY();
|
||||
usdy.initialize();
|
||||
// ✅ 使用代理模式部署 USDY
|
||||
USDY usdyImpl = new USDY();
|
||||
bytes memory usdyInitData = abi.encodeWithSelector(USDY.initialize.selector);
|
||||
ERC1967Proxy usdyProxy = new ERC1967Proxy(address(usdyImpl), usdyInitData);
|
||||
usdy = USDY(address(usdyProxy));
|
||||
|
||||
ytlp = new YTLPToken();
|
||||
ytlp.initialize();
|
||||
// ✅ 使用代理模式部署 YTLPToken
|
||||
YTLPToken ytlpImpl = new YTLPToken();
|
||||
bytes memory ytlpInitData = abi.encodeWithSelector(YTLPToken.initialize.selector);
|
||||
ERC1967Proxy ytlpProxy = new ERC1967Proxy(address(ytlpImpl), ytlpInitData);
|
||||
ytlp = YTLPToken(address(ytlpProxy));
|
||||
|
||||
// 部署核心合约(可升级合约)
|
||||
priceFeed = new YTPriceFeed();
|
||||
priceFeed.initialize(address(wusd));
|
||||
// ✅ 使用代理模式部署 YTPriceFeed
|
||||
YTPriceFeed priceFeedImpl = new YTPriceFeed();
|
||||
bytes memory priceFeedInitData = abi.encodeWithSelector(
|
||||
YTPriceFeed.initialize.selector,
|
||||
address(wusd)
|
||||
);
|
||||
ERC1967Proxy priceFeedProxy = new ERC1967Proxy(address(priceFeedImpl), priceFeedInitData);
|
||||
priceFeed = YTPriceFeed(address(priceFeedProxy));
|
||||
|
||||
vault = new YTVault();
|
||||
vault.initialize(address(usdy), address(priceFeed));
|
||||
// ✅ 使用代理模式部署 YTVault
|
||||
YTVault vaultImpl = new YTVault();
|
||||
bytes memory vaultInitData = abi.encodeWithSelector(
|
||||
YTVault.initialize.selector,
|
||||
address(usdy),
|
||||
address(priceFeed)
|
||||
);
|
||||
ERC1967Proxy vaultProxy = new ERC1967Proxy(address(vaultImpl), vaultInitData);
|
||||
vault = YTVault(address(vaultProxy));
|
||||
|
||||
poolManager = new YTPoolManager();
|
||||
poolManager.initialize(
|
||||
// ✅ 使用代理模式部署 YTPoolManager
|
||||
YTPoolManager poolManagerImpl = new YTPoolManager();
|
||||
bytes memory poolManagerInitData = abi.encodeWithSelector(
|
||||
YTPoolManager.initialize.selector,
|
||||
address(vault),
|
||||
address(usdy),
|
||||
address(ytlp),
|
||||
15 * 60
|
||||
);
|
||||
ERC1967Proxy poolManagerProxy = new ERC1967Proxy(address(poolManagerImpl), poolManagerInitData);
|
||||
poolManager = YTPoolManager(address(poolManagerProxy));
|
||||
|
||||
router = new YTRewardRouter();
|
||||
router.initialize(
|
||||
// ✅ 使用代理模式部署 YTRewardRouter
|
||||
YTRewardRouter routerImpl = new YTRewardRouter();
|
||||
bytes memory routerInitData = abi.encodeWithSelector(
|
||||
YTRewardRouter.initialize.selector,
|
||||
address(usdy),
|
||||
address(ytlp),
|
||||
address(poolManager),
|
||||
address(vault)
|
||||
);
|
||||
ERC1967Proxy routerProxy = new ERC1967Proxy(address(routerImpl), routerInitData);
|
||||
router = YTRewardRouter(address(routerProxy));
|
||||
|
||||
// 部署YTAssetVault实现合约
|
||||
YTAssetVault vaultImpl = new YTAssetVault();
|
||||
// ✅ 部署YTAssetVault实现合约(不初始化)
|
||||
YTAssetVault ytVaultImpl = new YTAssetVault();
|
||||
|
||||
// 部署YTAssetFactory
|
||||
factory = new YTAssetFactory();
|
||||
factory.initialize(
|
||||
address(vaultImpl),
|
||||
// ✅ 使用代理模式部署 YTAssetFactory
|
||||
YTAssetFactory factoryImpl = new YTAssetFactory();
|
||||
bytes memory factoryInitData = abi.encodeWithSelector(
|
||||
YTAssetFactory.initialize.selector,
|
||||
address(ytVaultImpl),
|
||||
1000000 ether // defaultHardCap
|
||||
);
|
||||
ERC1967Proxy factoryProxy = new ERC1967Proxy(address(factoryImpl), factoryInitData);
|
||||
factory = YTAssetFactory(address(factoryProxy));
|
||||
|
||||
// 通过factory创建YTAssetVault代币
|
||||
address ytTokenAAddr = factory.createVault(
|
||||
@@ -631,7 +666,7 @@ contract YTLpTest is Test {
|
||||
assertEq(ytlp.balanceOf(user1), ytLPBefore, "ytLP balance should not change");
|
||||
}
|
||||
|
||||
function test_23_GetSwapFeeBasisPoints() public {
|
||||
function test_23_GetSwapFeeBasisPoints() public view {
|
||||
uint256 usdyAmount = 1000 ether;
|
||||
|
||||
// YT代币之间互换
|
||||
@@ -778,7 +813,7 @@ contract YTLpTest is Test {
|
||||
|
||||
// ==================== 12. 动态手续费测试 ====================
|
||||
|
||||
function test_30_DynamicFeesDisabled() public {
|
||||
function test_30_DynamicFeesDisabled() public view {
|
||||
assertFalse(vault.hasDynamicFees());
|
||||
|
||||
uint256 feeBps = vault.getFeeBasisPoints(
|
||||
@@ -1196,7 +1231,7 @@ contract YTLpTest is Test {
|
||||
function test_51_GetPriceInfo() public view {
|
||||
(
|
||||
uint256 currentPrice,
|
||||
uint256 cachedPrice,
|
||||
,
|
||||
uint256 maxPrice,
|
||||
uint256 minPrice,
|
||||
uint256 spread
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
pragma solidity ^0.8.0;
|
||||
|
||||
import "forge-std/Test.sol";
|
||||
import "../contracts/vault/YTAssetVault.sol";
|
||||
import "../contracts/vault/YTAssetFactory.sol";
|
||||
import "../contracts/ytVault/YTAssetVault.sol";
|
||||
import "../contracts/ytVault/YTAssetFactory.sol";
|
||||
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
||||
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
|
||||
|
||||
@@ -100,7 +100,7 @@ contract VaultTest is Test {
|
||||
return YTAssetVault(vaultAddr);
|
||||
}
|
||||
|
||||
function test_01_FactoryInitialization() public {
|
||||
function test_01_FactoryInitialization() public view {
|
||||
assertEq(factory.vaultImplementation(), address(vaultImplementation));
|
||||
assertEq(factory.defaultHardCap(), HARD_CAP);
|
||||
assertEq(factory.owner(), owner);
|
||||
Reference in New Issue
Block a user