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

Mint/burn first handle Resubscribe and then finish Hub update #189

Merged
merged 54 commits into from
Jul 12, 2022
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
e149000
fix: bug with empty `sender`
parv3213 Jun 23, 2022
e25d261
fix: remove unused parameters
parv3213 Jun 23, 2022
cc10251
fix: remove meaningless read operation
parv3213 Jun 23, 2022
f990da2
fix: add back removed upgrade test
parv3213 Jun 23, 2022
2f30005
fix: remove unused struct variables
parv3213 Jun 27, 2022
4e830e1
fix(test): remove unecessary diamond init arg
zgorizzo69 Jun 27, 2022
abb1f1a
fix: bug with empty `sender`
parv3213 Jun 23, 2022
58c11b1
fix: remove unused parameters
parv3213 Jun 23, 2022
5d13d47
fix: remove meaningless read operation
parv3213 Jun 23, 2022
bfc5e62
fix: add back removed upgrade test
parv3213 Jun 23, 2022
1202914
fix: remove unused struct variables
parv3213 Jun 27, 2022
ad3fff6
fix(test): remove unecessary diamond init arg
zgorizzo69 Jun 27, 2022
ce57bac
feat(chainlink-migration): starting conversions
pegahcarter Jun 30, 2022
c5e4444
Merge branch 'audit-fixes' into fix/chainlink
pegahcarter Jun 30, 2022
6137313
feat(chainlink): working tests
pegahcarter Jun 30, 2022
b5f6576
fix: resubscribe before update
parv3213 Jun 27, 2022
986e3cb
fix: update hubInfo after resubscribe
parv3213 Jul 1, 2022
c06f531
test: uncomment tests
parv3213 Jul 1, 2022
ee00f2e
fix: sequence and bug
parv3213 Jul 1, 2022
cc3a2eb
test: add tests for first resubscribe and then hub update
parv3213 Jul 1, 2022
11c1842
feat: optimise by removing `hubToUpdate`
parv3213 Jul 1, 2022
e0f490c
fix(config): real dai whale
pegahcarter Jul 1, 2022
c30063a
test(uniswap-chainlink): successful fail test on slippage
pegahcarter Jul 1, 2022
5732c93
fix(tests): update packages and snapshot every single curve
zgorizzo69 Jul 5, 2022
ba2c801
fix(test): flatten curves test
zgorizzo69 Jul 6, 2022
7bfcb7d
fix(migration-chainlink): proper discount rate calcs
pegahcarter Jul 6, 2022
dbb23d0
fix(migration-chainlink): handle stable => stable slippage
pegahcarter Jul 6, 2022
659d6b6
feat: remove comments
parv3213 Jul 7, 2022
4c5d2f9
test: slippage tests
parv3213 Jul 7, 2022
751063a
feat: remove onlyVault/RegistryRegistry modifiers
pegahcarter Jul 7, 2022
628a071
feat: make `endCooldown` = 0 when `cancelResubscribe`
parv3213 Jul 7, 2022
716ba58
test: remove increase time after cancelResubscribe
parv3213 Jul 7, 2022
d9f65b2
test: dai -> usdc
parv3213 Jul 8, 2022
5a402ee
test: usdc -> DAI
parv3213 Jul 8, 2022
b7027ed
test: wbtc -> usdc
parv3213 Jul 8, 2022
227d1d1
test: usdc -> wbtc
parv3213 Jul 8, 2022
178a3e1
feat: add wbtc
parv3213 Jul 8, 2022
7662e59
test: update with few fixes
parv3213 Jul 8, 2022
4899b42
fix(uniswap-migration): correct decimal conversions
pegahcarter Jul 8, 2022
772793d
test: update with few fixes
parv3213 Jul 8, 2022
cc66586
Merge remote-tracking branch 'origin/resubscribe-before-update' into …
parv3213 Jul 11, 2022
6efd03d
Merge remote-tracking branch 'origin/fix/chainlink' into fix/chainlin…
parv3213 Jul 11, 2022
aeb1f34
fix: bug fix
parv3213 Jul 11, 2022
7002fac
test: complete tests
parv3213 Jul 11, 2022
9e96460
chore: remove comment
parv3213 Jul 11, 2022
b151285
feat: remove addStable
parv3213 Jul 11, 2022
ff674dd
feat: update fork block number
parv3213 Jul 12, 2022
e6e428c
feat: add public `expectedAmountOutMinimum()`
parv3213 Jul 12, 2022
291251e
test: with `expectedAmountOutMinimum` and `receivedAmountOut`
parv3213 Jul 12, 2022
3b07a5c
fix(migration-chainlink): comparisons of swap to expect
pegahcarter Jul 12, 2022
98b6685
fix(foundry): add wethwhale to test
zgorizzo69 Jul 12, 2022
8c77709
fix(test): wethWhale transfers
pegahcarter Jul 12, 2022
a3d0552
Merge pull request #190 from meTokens/fix/chainlink-tests
pegahcarter Jul 12, 2022
0cc04af
Merge pull request #188 from meTokens/fix/chainlink
pegahcarter Jul 12, 2022
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
12 changes: 6 additions & 6 deletions contracts/DiamondInit.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ contract DiamondInit {
uint256 mintFee;
uint256 burnBuyerFee;
uint256 burnOwnerFee;
uint256 transferFee;
uint256 interestFee;
uint256 yieldFee;
// uint256 transferFee;
// uint256 interestFee;
// uint256 yieldFee;
address diamond;
IVaultRegistry vaultRegistry;
IMigrationRegistry migrationRegistry;
Expand All @@ -48,9 +48,9 @@ contract DiamondInit {
s.mintFee = _args.mintFee;
s.burnBuyerFee = _args.burnBuyerFee;
s.burnOwnerFee = _args.burnOwnerFee;
s.transferFee = _args.transferFee;
s.interestFee = _args.interestFee;
s.yieldFee = _args.yieldFee;
// s.transferFee = _args.transferFee;
// s.interestFee = _args.interestFee;
// s.yieldFee = _args.yieldFee;

s.MAX_REFUND_RATIO = 1e6;
s.PRECISION = 1e18;
Expand Down
60 changes: 30 additions & 30 deletions contracts/facets/FeesFacet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -37,26 +37,26 @@ contract FeesFacet is IFeesFacet, Modifiers {
emit SetBurnOwnerFee(rate);
}

/// @inheritdoc IFeesFacet
function setTransferFee(uint256 rate) external override onlyFeesController {
require(rate != s.transferFee && rate < s.MAX_FEE, "out of range");
s.transferFee = rate;
emit SetTransferFee(rate);
}
// /// @inheritdoc IFeesFacet
// function setTransferFee(uint256 rate) external override onlyFeesController {
// require(rate != s.transferFee && rate < s.MAX_FEE, "out of range");
// s.transferFee = rate;
// emit SetTransferFee(rate);
// }

/// @inheritdoc IFeesFacet
function setInterestFee(uint256 rate) external override onlyFeesController {
require(rate != s.interestFee && rate < s.MAX_FEE, "out of range");
s.interestFee = rate;
emit SetInterestFee(rate);
}
// /// @inheritdoc IFeesFacet
// function setInterestFee(uint256 rate) external override onlyFeesController {
// require(rate != s.interestFee && rate < s.MAX_FEE, "out of range");
// s.interestFee = rate;
// emit SetInterestFee(rate);
// }

/// @inheritdoc IFeesFacet
function setYieldFee(uint256 rate) external override onlyFeesController {
require(rate != s.yieldFee && rate < s.MAX_FEE, "out of range");
s.yieldFee = rate;
emit SetYieldFee(rate);
}
// /// @inheritdoc IFeesFacet
// function setYieldFee(uint256 rate) external override onlyFeesController {
// require(rate != s.yieldFee && rate < s.MAX_FEE, "out of range");
// s.yieldFee = rate;
// emit SetYieldFee(rate);
// }

/// @inheritdoc IFeesFacet
function mintFee() external view override returns (uint256) {
Expand All @@ -73,18 +73,18 @@ contract FeesFacet is IFeesFacet, Modifiers {
return s.burnOwnerFee;
}

/// @inheritdoc IFeesFacet
function transferFee() external view override returns (uint256) {
return s.transferFee;
}
// /// @inheritdoc IFeesFacet
// function transferFee() external view override returns (uint256) {
// return s.transferFee;
// }

/// @inheritdoc IFeesFacet
function interestFee() external view override returns (uint256) {
return s.interestFee;
}
// /// @inheritdoc IFeesFacet
// function interestFee() external view override returns (uint256) {
// return s.interestFee;
// }

/// @inheritdoc IFeesFacet
function yieldFee() external view override returns (uint256) {
return s.yieldFee;
}
// /// @inheritdoc IFeesFacet
// function yieldFee() external view override returns (uint256) {
// return s.yieldFee;
// }
}
36 changes: 18 additions & 18 deletions contracts/interfaces/IFeesFacet.sol
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,17 @@ interface IFeesFacet {
/// @param rate New fee rate
function setBurnOwnerFee(uint256 rate) external;

/// @notice Set Transfer fee for meTokens protocol
/// @param rate New fee rate
function setTransferFee(uint256 rate) external;
// /// @notice Set Transfer fee for meTokens protocol
// /// @param rate New fee rate
// function setTransferFee(uint256 rate) external;

/// @notice Set Interest fee for meTokens protocol
/// @param rate New fee rate
function setInterestFee(uint256 rate) external;
// /// @notice Set Interest fee for meTokens protocol
// /// @param rate New fee rate
// function setInterestFee(uint256 rate) external;

/// @notice Set Yield fee for meTokens protocol
/// @param rate New fee rate
function setYieldFee(uint256 rate) external;
// /// @notice Set Yield fee for meTokens protocol
// /// @param rate New fee rate
// function setYieldFee(uint256 rate) external;

/// @notice Get Mint fee
/// @return uint256 mintFee
Expand All @@ -64,15 +64,15 @@ interface IFeesFacet {
/// @return uint256 burnOwnerFee
function burnOwnerFee() external view returns (uint256);

/// @notice Get Transfer fee
/// @return uint256 transferFee
function transferFee() external view returns (uint256);
// /// @notice Get Transfer fee
// /// @return uint256 transferFee
// function transferFee() external view returns (uint256);

/// @notice Get Interest fee
/// @return uint256 interestFee
function interestFee() external view returns (uint256);
// /// @notice Get Interest fee
// /// @return uint256 interestFee
// function interestFee() external view returns (uint256);

/// @notice Get Yield fee
/// @return uint256 yieldFee
function yieldFee() external view returns (uint256);
// /// @notice Get Yield fee
// /// @return uint256 yieldFee
// function yieldFee() external view returns (uint256);
}
6 changes: 3 additions & 3 deletions contracts/libs/LibAppStorage.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ struct AppStorage {
uint256 mintFee;
uint256 burnBuyerFee;
uint256 burnOwnerFee;
uint256 transferFee;
uint256 interestFee;
uint256 yieldFee;
// uint256 transferFee;
// uint256 interestFee;
// uint256 yieldFee;
// Constants
uint256 MAX_REFUND_RATIO;
uint256 PRECISION;
Expand Down
88 changes: 42 additions & 46 deletions contracts/libs/LibFoundry.sol
Original file line number Diff line number Diff line change
Expand Up @@ -110,17 +110,18 @@ library LibFoundry {
LibMeToken.updateBalancePooled(true, meToken, amounts[2]);

// Handling changes
if (hubInfo.updating && block.timestamp > hubInfo.endTime) {
LibHub.finishUpdate(meTokenInfo.hubId);
} else if (meTokenInfo.targetHubId != 0) {
if (meTokenInfo.targetHubId != 0) {
if (block.timestamp > meTokenInfo.endTime) {
//hubInfo = s.hubs[meTokenInfo.targetHubId];
LibMeToken.finishResubscribe(meToken);
hubInfo = s.hubs[meTokenInfo.targetHubId];
meTokenInfo = LibMeToken.finishResubscribe(meToken);
} else if (block.timestamp > meTokenInfo.startTime) {
// Handle migration actions if needed
IMigration(meTokenInfo.migration).poke(meToken);
}
}
if (hubInfo.updating && block.timestamp > hubInfo.endTime) {
LibHub.finishUpdate(meTokenInfo.hubId);
}

return (asset, sender, amounts[0]);
}
Expand All @@ -136,7 +137,6 @@ library LibFoundry {
) internal {
(
address asset,
address sender,
uint256[2] memory amounts // 0-meTokensMinted 1-assetsDepositedAfterFees
) = _handleMintWithPermit(
meToken,
Expand All @@ -153,7 +153,7 @@ library LibFoundry {
emit Mint(
meToken,
asset,
sender,
LibMeta.msgSender(),
recipient,
assetsDeposited,
amounts[0]
Expand Down Expand Up @@ -202,18 +202,18 @@ library LibFoundry {
HubInfo memory hubInfo = s.hubs[meTokenInfo.hubId];

// Handling changes
if (hubInfo.updating && block.timestamp > hubInfo.endTime) {
LibHub.finishUpdate(meTokenInfo.hubId);
} else if (meTokenInfo.targetHubId != 0) {
if (meTokenInfo.targetHubId != 0) {
if (block.timestamp > meTokenInfo.endTime) {
hubInfo = s.hubs[meTokenInfo.targetHubId];
meTokenInfo = LibMeToken.finishResubscribe(meToken);
} else if (block.timestamp > meTokenInfo.startTime) {
// Handle migration actions if needed
IMigration(meTokenInfo.migration).poke(meToken);
meTokenInfo = s.meTokens[meToken];
}
}
if (hubInfo.updating && block.timestamp > hubInfo.endTime) {
LibHub.finishUpdate(meTokenInfo.hubId);
}
// Calculate how many tokens are returned
uint256 rawAssetsReturned = calculateRawAssetsReturned(
meToken,
Expand Down Expand Up @@ -324,34 +324,33 @@ library LibFoundry {
meTokenInfo.balancePooled
);

// Logic for if we're updating curveInfo
if (hubInfo.reconfigure) {
// Must mean we're updating curveInfo
uint256 targetAssetsReturned = LibCurve.viewTargetAssetsReturned(
if (meTokenInfo.targetHubId != 0) {
// Calculate return assuming meToken is resubscribing
uint256 targetAssetsReturned = LibCurve.viewAssetsReturned(
meTokensBurned,
meTokenInfo.hubId,
meTokenInfo.targetHubId,
totalSupply,
meTokenInfo.balancePooled
);
rawAssetsReturned = LibWeightedAverage.calculate(
rawAssetsReturned,
targetAssetsReturned,
hubInfo.startTime,
hubInfo.endTime
meTokenInfo.startTime,
meTokenInfo.endTime
);
} else if (meTokenInfo.targetHubId != 0) {
// Calculate return assuming meToken is resubscribing
uint256 targetAssetsReturned = LibCurve.viewAssetsReturned(
} else if (hubInfo.reconfigure) {
// Must mean we're updating curveInfo
uint256 targetAssetsReturned = LibCurve.viewTargetAssetsReturned(
meTokensBurned,
meTokenInfo.targetHubId,
meTokenInfo.hubId,
totalSupply,
meTokenInfo.balancePooled
);
rawAssetsReturned = LibWeightedAverage.calculate(
rawAssetsReturned,
targetAssetsReturned,
meTokenInfo.startTime,
meTokenInfo.endTime
hubInfo.startTime,
hubInfo.endTime
);
}
}
Expand Down Expand Up @@ -385,26 +384,26 @@ library LibFoundry {
(rawAssetsReturned * hubInfo.refundRatio) /
s.MAX_REFUND_RATIO;
} else {
if (hubInfo.targetRefundRatio > 0) {
// Hub is updating
if (meTokenInfo.targetHubId != 0) {
// meToken is resubscribing
actualAssetsReturned =
(rawAssetsReturned *
LibWeightedAverage.calculate(
hubInfo.refundRatio,
hubInfo.targetRefundRatio,
hubInfo.startTime,
hubInfo.endTime
s.hubs[meTokenInfo.targetHubId].refundRatio,
meTokenInfo.startTime,
meTokenInfo.endTime
)) /
s.MAX_REFUND_RATIO;
} else {
// meToken is resubscribing
// Hub is updating
actualAssetsReturned =
(rawAssetsReturned *
LibWeightedAverage.calculate(
hubInfo.refundRatio,
s.hubs[meTokenInfo.targetHubId].refundRatio,
meTokenInfo.startTime,
meTokenInfo.endTime
hubInfo.targetRefundRatio,
hubInfo.startTime,
hubInfo.endTime
)) /
s.MAX_REFUND_RATIO;
}
Expand All @@ -419,14 +418,7 @@ library LibFoundry {
uint8 vSig,
bytes32 rSig,
bytes32 sSig
)
private
returns (
address asset,
address sender,
uint256[2] memory amounts
)
{
) private returns (address asset, uint256[2] memory amounts) {
AppStorage storage s = LibAppStorage.diamondStorage();
// 0-meTokensMinted 1-fee 2-assetsDepositedAfterFees

Expand All @@ -450,7 +442,7 @@ library LibFoundry {
rSig,
sSig
);
return (asset, sender, amounts);
return (asset, amounts);
}

function _handlingChangesWithPermit(
Expand Down Expand Up @@ -488,16 +480,20 @@ library LibFoundry {
sSig
);
LibMeToken.updateBalancePooled(true, meToken, assetsDepositedAfterFees);
if (hubInfo.updating && block.timestamp > hubInfo.endTime) {
LibHub.finishUpdate(meTokenInfo.hubId);
} else if (meTokenInfo.targetHubId != 0) {

// Handling changes
if (meTokenInfo.targetHubId != 0) {
if (block.timestamp > meTokenInfo.endTime) {
LibMeToken.finishResubscribe(meToken);
hubInfo = s.hubs[meTokenInfo.targetHubId];
meTokenInfo = LibMeToken.finishResubscribe(meToken);
} else if (block.timestamp > meTokenInfo.startTime) {
// Handle migration actions if needed
IMigration(meTokenInfo.migration).poke(meToken);
}
}
if (hubInfo.updating && block.timestamp > hubInfo.endTime) {
LibHub.finishUpdate(meTokenInfo.hubId);
}
}

function _vaultWithdrawal(
Expand Down
3 changes: 0 additions & 3 deletions contracts/libs/LibHub.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,6 @@ struct HubInfo {
uint256 endCooldown;
uint256 refundRatio;
uint256 targetRefundRatio;
uint256 warmup;
uint256 duration;
uint256 cooldown;
address owner;
address vault;
address asset;
Expand Down
4 changes: 2 additions & 2 deletions contracts/mocks/DiamondInitMock.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ contract DiamondInitMock {

AppStorage internal s; // solhint-disable-line

function init(uint256 interestFee) external {
function init(uint256 mintFee) external {
require(msg.sender == _owner, "!owner");
s.interestFee = interestFee;
s.mintFee = mintFee;
}
}
Loading