better revert messages
This commit is contained in:
parent
f738daff96
commit
938d1eba79
2 changed files with 16 additions and 16 deletions
|
|
@ -61,7 +61,7 @@ contract Harberg is ERC20, ERC20Permit {
|
||||||
|
|
||||||
// Modifier to restrict access to the liquidity manager
|
// Modifier to restrict access to the liquidity manager
|
||||||
modifier onlyLiquidityManager() {
|
modifier onlyLiquidityManager() {
|
||||||
require(msg.sender == address(liquidityManager), "Harberg/only-lm");
|
require(msg.sender == address(liquidityManager), "only liquidity manager");
|
||||||
_;
|
_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,13 +79,13 @@ contract LiquidityManager {
|
||||||
// the minimum share of ETH that will be put into the anchor
|
// the minimum share of ETH that will be put into the anchor
|
||||||
uint256 public anchorLiquidityShare;
|
uint256 public anchorLiquidityShare;
|
||||||
// the higher the inefficiency, the more conservative the positioning of floor
|
// the higher the inefficiency, the more conservative the positioning of floor
|
||||||
uint256 public capitalInfefficiency;
|
uint256 public capitalInefficiency;
|
||||||
|
|
||||||
error ZeroAddressInSetter();
|
error ZeroAddressInSetter();
|
||||||
error AddressAlreadySet();
|
error AddressAlreadySet();
|
||||||
|
|
||||||
event EthScarcity(int24 currentTick, uint256 ethBalance, uint256 outstandingSupply, uint256 vwap, uint256 capitalInfefficiency, uint256 anchorLiquidityShare, int24 vwapTick);
|
event EthScarcity(int24 currentTick, uint256 ethBalance, uint256 outstandingSupply, uint256 vwap, uint256 capitalInefficiency, uint256 anchorLiquidityShare, int24 vwapTick);
|
||||||
event EthAbundance(int24 currentTick, uint256 ethBalance, uint256 outstandingSupply, uint256 vwap, uint256 capitalInfefficiency, uint256 anchorLiquidityShare, int24 vwapTick);
|
event EthAbundance(int24 currentTick, uint256 ethBalance, uint256 outstandingSupply, uint256 vwap, uint256 capitalInefficiency, uint256 anchorLiquidityShare, int24 vwapTick);
|
||||||
|
|
||||||
/// @dev Function modifier to ensure that the caller is the feeDestination
|
/// @dev Function modifier to ensure that the caller is the feeDestination
|
||||||
modifier onlyFeeDestination() {
|
modifier onlyFeeDestination() {
|
||||||
|
|
@ -106,7 +106,7 @@ contract LiquidityManager {
|
||||||
harb = Harberg(_harb);
|
harb = Harberg(_harb);
|
||||||
token0isWeth = _WETH9 < _harb;
|
token0isWeth = _WETH9 < _harb;
|
||||||
anchorLiquidityShare = MAX_ANCHOR_LIQ_SHARE;
|
anchorLiquidityShare = MAX_ANCHOR_LIQ_SHARE;
|
||||||
capitalInfefficiency = MIN_CAPITAL_INEFFICIENCY; // starting at 95% fuzzer passes tests
|
capitalInefficiency = MIN_CAPITAL_INEFFICIENCY; // starting at 95% fuzzer passes tests
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @notice Callback function that Uniswap V3 calls for liquidity actions requiring minting or burning of tokens.
|
/// @notice Callback function that Uniswap V3 calls for liquidity actions requiring minting or burning of tokens.
|
||||||
|
|
@ -138,15 +138,15 @@ contract LiquidityManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
function setAnchorLiquidityShare(uint256 anchorLiquidityShare_) external onlyFeeDestination {
|
function setAnchorLiquidityShare(uint256 anchorLiquidityShare_) external onlyFeeDestination {
|
||||||
require(anchorLiquidityShare_ >= MIN_ANCHOR_LIQ_SHARE, "");
|
require(anchorLiquidityShare_ >= MIN_ANCHOR_LIQ_SHARE, "anchor liquidity share too low.");
|
||||||
require(anchorLiquidityShare_ <= MAX_ANCHOR_LIQ_SHARE, "");
|
require(anchorLiquidityShare_ <= MAX_ANCHOR_LIQ_SHARE, "anchor liquidity share too high.");
|
||||||
anchorLiquidityShare = anchorLiquidityShare_;
|
anchorLiquidityShare = anchorLiquidityShare_;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setCapitalInfefficiency(uint256 capitalInfefficiency_) external onlyFeeDestination {
|
function setCapitalInfefficiency(uint256 capitalInefficiency_) external onlyFeeDestination {
|
||||||
require(capitalInfefficiency_ >= MIN_CAPITAL_INEFFICIENCY, "");
|
require(capitalInefficiency_ >= MIN_CAPITAL_INEFFICIENCY, "capital inefficiency is too low.");
|
||||||
require(capitalInfefficiency_ <= MAX_CAPITAL_INEFFICIENCY, "");
|
require(capitalInefficiency_ <= MAX_CAPITAL_INEFFICIENCY, "capital inefficiency is too high.");
|
||||||
capitalInfefficiency = capitalInfefficiency_;
|
capitalInefficiency = capitalInefficiency_;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setMinStakeSupplyFraction(uint256 mssf_) external onlyFeeDestination {
|
function setMinStakeSupplyFraction(uint256 mssf_) external onlyFeeDestination {
|
||||||
|
|
@ -239,7 +239,7 @@ contract LiquidityManager {
|
||||||
uint256 ethBalance = (address(this).balance + weth.balanceOf(address(this)));
|
uint256 ethBalance = (address(this).balance + weth.balanceOf(address(this)));
|
||||||
uint256 floorEthBalance = ethBalance * (100 - anchorLiquidityShare) / 100;
|
uint256 floorEthBalance = ethBalance * (100 - anchorLiquidityShare) / 100;
|
||||||
if (outstandingSupply > 0) {
|
if (outstandingSupply > 0) {
|
||||||
vwapTick = tickAtPrice(token0isWeth, outstandingSupply * capitalInfefficiency / 100 , floorEthBalance);
|
vwapTick = tickAtPrice(token0isWeth, outstandingSupply * capitalInefficiency / 100 , floorEthBalance);
|
||||||
} else {
|
} else {
|
||||||
vwapTick = token0isWeth ? currentTick + ANCHOR_SPACING : currentTick - ANCHOR_SPACING;
|
vwapTick = token0isWeth ? currentTick + ANCHOR_SPACING : currentTick - ANCHOR_SPACING;
|
||||||
}
|
}
|
||||||
|
|
@ -311,15 +311,15 @@ contract LiquidityManager {
|
||||||
uint256 vwapX96 = 0;
|
uint256 vwapX96 = 0;
|
||||||
uint256 requiredEthForBuyback = 0;
|
uint256 requiredEthForBuyback = 0;
|
||||||
if (cumulativeVolume > 0) {
|
if (cumulativeVolume > 0) {
|
||||||
vwapX96 = cumulativeVolumeWeightedPriceX96 * capitalInfefficiency / 100 / cumulativeVolume; // in harb/eth
|
vwapX96 = cumulativeVolumeWeightedPriceX96 * capitalInefficiency / 100 / cumulativeVolume; // in harb/eth
|
||||||
requiredEthForBuyback = outstandingSupply.mulDiv(vwapX96, (1 << 96));
|
requiredEthForBuyback = outstandingSupply.mulDiv(vwapX96, (1 << 96));
|
||||||
}
|
}
|
||||||
// make a new calculation of the vwapTick, having updated outstandingSupply
|
// make a new calculation of the vwapTick, having updated outstandingSupply
|
||||||
if (floorEthBalance < requiredEthForBuyback) {
|
if (floorEthBalance < requiredEthForBuyback) {
|
||||||
// not enough ETH, find a lower price
|
// not enough ETH, find a lower price
|
||||||
requiredEthForBuyback = floorEthBalance;
|
requiredEthForBuyback = floorEthBalance;
|
||||||
vwapTick = tickAtPrice(token0isWeth, outstandingSupply * capitalInfefficiency / 100 , requiredEthForBuyback);
|
vwapTick = tickAtPrice(token0isWeth, outstandingSupply * capitalInefficiency / 100 , requiredEthForBuyback);
|
||||||
emit EthScarcity(currentTick, ethBalance, outstandingSupply, vwapX96, capitalInfefficiency, anchorLiquidityShare, vwapTick);
|
emit EthScarcity(currentTick, ethBalance, outstandingSupply, vwapX96, capitalInefficiency, anchorLiquidityShare, vwapTick);
|
||||||
} else if (vwapX96 == 0) {
|
} else if (vwapX96 == 0) {
|
||||||
requiredEthForBuyback = floorEthBalance;
|
requiredEthForBuyback = floorEthBalance;
|
||||||
vwapTick = currentTick;
|
vwapTick = currentTick;
|
||||||
|
|
@ -328,7 +328,7 @@ contract LiquidityManager {
|
||||||
vwapTick = tickAtPriceRatio(int128(int256(vwapX96 >> 32)));
|
vwapTick = tickAtPriceRatio(int128(int256(vwapX96 >> 32)));
|
||||||
// convert to pool tick
|
// convert to pool tick
|
||||||
vwapTick = token0isWeth ? -vwapTick : vwapTick;
|
vwapTick = token0isWeth ? -vwapTick : vwapTick;
|
||||||
emit EthAbundance(currentTick, ethBalance, outstandingSupply, vwapX96, capitalInfefficiency, anchorLiquidityShare, vwapTick);
|
emit EthAbundance(currentTick, ethBalance, outstandingSupply, vwapX96, capitalInefficiency, anchorLiquidityShare, vwapTick);
|
||||||
}
|
}
|
||||||
// move floor below anchor, if needed
|
// move floor below anchor, if needed
|
||||||
if (token0isWeth) {
|
if (token0isWeth) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue