update cpV2

This commit is contained in:
owen05
2021-11-29 17:19:41 +08:00
parent af762c3999
commit 63c1d9c70c
7 changed files with 94 additions and 248 deletions

View File

@@ -59,10 +59,11 @@ contract CP is CPVesting {
2. phase calm duration
3. freeze duration
4. vesting duration
5. claim lock duration
5. claim freeze duration
6. claim vesting duration
*/
require(timeLine.length == 6, "LIST_LENGTH_WRONG");
require(timeLine.length == 7, "LIST_LENGTH_WRONG");
_PHASE_BID_STARTTIME_ = timeLine[0];
_PHASE_BID_ENDTIME_ = _PHASE_BID_STARTTIME_.add(timeLine[1]);
@@ -70,7 +71,8 @@ contract CP is CPVesting {
_FREEZE_DURATION_ = timeLine[3];
_VESTING_DURATION_ = timeLine[4];
_CLAIM_LOCK_DURATION_ = timeLine[5];
_TOKEN_CLAIM_DURATION_ = timeLine[5];
_TOKEN_VESTING_DURATION_ = timeLine[6];
require(block.timestamp <= _PHASE_BID_STARTTIME_, "TIMELINE_WRONG");
/*
@@ -78,19 +80,22 @@ contract CP is CPVesting {
0. pool quote cap
1. k
2. i
3. cliff rate
3. lp cliff rate
4. base token cliff rate
*/
require(valueList.length == 4, "LIST_LENGTH_WRONG");
require(valueList.length == 5, "LIST_LENGTH_WRONG");
_POOL_QUOTE_CAP_ = valueList[0];
_K_ = valueList[1];
_I_ = valueList[2];
_CLIFF_RATE_ = valueList[3];
_TOKEN_CLIFF_RATE_ = valueList[4];
require(_I_ > 0 && _I_ <= 1e36, "I_VALUE_WRONG");
require(_K_ <= 1e18, "K_VALUE_WRONG");
require(_CLIFF_RATE_ <= 1e18, "CLIFF_RATE_WRONG");
require(_TOKEN_CLIFF_RATE_ <= 1e18, "TOKEN_CLIFF_RATE_WRONG");
_TOTAL_BASE_ = _BASE_TOKEN_.balanceOf(address(this));

View File

@@ -52,7 +52,7 @@ contract CPStorage is InitializableOwnable, ReentrancyGuard {
uint256 public _TOTAL_SHARES_;
mapping(address => uint256) internal _SHARES_;
mapping(address => bool) public _CLAIMED_;
mapping(address => bool) public _CLAIMED_QUOTE_;
address public _POOL_FACTORY_;
address public _POOL_;
@@ -75,7 +75,11 @@ contract CPStorage is InitializableOwnable, ReentrancyGuard {
uint256 public _FREEZE_DURATION_;
uint256 public _VESTING_DURATION_;
uint256 public _CLIFF_RATE_;
uint256 public _CLAIM_LOCK_DURATION_;
uint256 public _TOKEN_CLAIM_DURATION_;
uint256 public _TOKEN_VESTING_DURATION_;
uint256 public _TOKEN_CLIFF_RATE_;
mapping(address => uint256) _CLAIMED_BASE_TOKEN_;
// ============ Modifiers ============

View File

@@ -29,7 +29,8 @@ contract CPVesting is CPFunding {
// ============ Events ============
event Claim(address user, uint256 baseAmount, uint256 quoteAmount);
event ClaimBaseToken(address user, uint256 baseAmount);
event ClaimQuoteToken(address user, uint256 quoteAmount);
event ClaimLP(uint256 amount);
@@ -40,33 +41,59 @@ contract CPVesting is CPFunding {
_;
}
modifier afterClaimLockDuration() {
require(_SETTLED_ && block.timestamp >= _SETTLED_TIME_.add(_CLAIM_LOCK_DURATION_), "CLAIM_LOCKED");
_;
}
modifier afterFreeze() {
require(_SETTLED_ && block.timestamp >= _SETTLED_TIME_.add(_FREEZE_DURATION_), "FREEZED");
_;
}
modifier afterClaimFreeze() {
require(_SETTLED_ && block.timestamp >= _SETTLED_TIME_.add(_TOKEN_CLAIM_DURATION_), "CLAIM_FREEZED");
_;
}
// ============ Bidder Functions ============
function bidderClaim(address to,bytes calldata data) external afterClaimLockDuration {
require(!_CLAIMED_[msg.sender], "ALREADY_CLAIMED");
_CLAIMED_[msg.sender] = true;
function claimQuoteToken(address to,bytes calldata data) external afterSettlement {
require(!_CLAIMED_QUOTE_[msg.sender], "ALREADY_CLAIMED_FUND");
_CLAIMED_QUOTE_[msg.sender] = true;
uint256 baseAmount = _UNUSED_BASE_.mul(_SHARES_[msg.sender]).div(_TOTAL_SHARES_);
uint256 quoteAmount = _UNUSED_QUOTE_.mul(_SHARES_[msg.sender]).div(_TOTAL_SHARES_);
_transferBaseOut(to, baseAmount);
_transferQuoteOut(to, quoteAmount);
if(data.length>0){
IDODOCallee(to).CPClaimBidCall(msg.sender,baseAmount,quoteAmount,data);
IDODOCallee(to).CPClaimBidCall(msg.sender,0,quoteAmount,data);
}
emit Claim(msg.sender, baseAmount, quoteAmount);
emit ClaimQuoteToken(msg.sender, quoteAmount);
}
function claimBaseToken() external afterClaimFreeze {
uint256 claimableBaseAmount = getClaimableBaseToken(msg.sender);
_transferBaseOut(msg.sender, claimableBaseAmount);
_CLAIMED_BASE_TOKEN_[msg.sender] = _CLAIMED_BASE_TOKEN_[msg.sender].add(claimableBaseAmount);
emit ClaimBaseToken(msg.sender, claimableBaseAmount);
}
function getClaimableBaseToken(address user) public view afterClaimFreeze returns (uint256) {
uint256 baseTotalAmount = _UNUSED_BASE_.mul(_SHARES_[user]).div(_TOTAL_SHARES_);
uint256 remainingBaseToken = DecimalMath.mulFloor(
getRemainingBaseTokenRatio(block.timestamp),
baseTotalAmount
);
return baseTotalAmount.sub(remainingBaseToken).sub(_CLAIMED_BASE_TOKEN_[user]);
}
function getRemainingBaseTokenRatio(uint256 timestamp) public view afterClaimFreeze returns (uint256) {
uint256 timePast = timestamp.sub(_SETTLED_TIME_.add(_TOKEN_CLAIM_DURATION_));
if (timePast < _TOKEN_VESTING_DURATION_) {
uint256 remainingTime = _TOKEN_VESTING_DURATION_.sub(timePast);
return DecimalMath.ONE.sub(_TOKEN_CLIFF_RATE_).mul(remainingTime).div(_TOKEN_VESTING_DURATION_);
} else {
return 0;
}
}
// ============ Owner Functions ============