Skip to content

Commit

Permalink
Final tuning
Browse files Browse the repository at this point in the history
  • Loading branch information
slivlen authored and slivlen committed Apr 6, 2018
1 parent e77563a commit 1610362
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitattributes
@@ -0,0 +1 @@
*.sol linguist-language=Solidity
2 changes: 1 addition & 1 deletion Fund.sol
Expand Up @@ -18,7 +18,7 @@ contract Fund is ICrowdsaleFund, SafeMath, MultiOwnable {
FundState public state = FundState.Crowdsale;
ManagedToken public token;

uint256 public constant INITIAL_TAP = 385802469135802; // (wei/sec) == 1000 ether/month
uint256 public constant INITIAL_TAP = 192901234567901; // (wei/sec) == 500 ether/month

address public teamWallet;
uint256 public crowdsaleEndDate;
Expand Down
28 changes: 27 additions & 1 deletion PollManagedFund.sol
Expand Up @@ -14,10 +14,12 @@ import './token/ITokenEventListener.sol';
contract PollManagedFund is Fund, DateTime, ITokenEventListener {
uint256 public constant TAP_POLL_DURATION = 3 days;
uint256 public constant REFUND_POLL_DURATION = 7 days;
uint256 public constant MAX_VOTED_TOKEN_PERC = 10;

TapPoll public tapPoll;
RefundPoll public refundPoll;

uint256 public minVotedTokensPerc = 0;
uint256 public secondRefundPollDate = 0;
bool public isWithdrawEnabled = true;

Expand All @@ -37,6 +39,11 @@ contract PollManagedFund is Fund, DateTime, ITokenEventListener {
_;
}

event TapPollCreated();
event TapPollFinished(bool approved, uint256 _tap);
event RefundPollCreated();
event RefundPollFinished(bool approved);

/**
* @dev PollManagedFund constructor
* params - see Fund constructor
Expand Down Expand Up @@ -81,6 +88,19 @@ contract PollManagedFund is Fund, DateTime, ITokenEventListener {
}
}

/**
* @dev Update minVotedTokensPerc value after tap poll.
* Set new value == 50% from current voted tokens amount
*/
function updateMinVotedTokens(uint256 _minVotedTokensPerc) internal {
uint256 newPerc = safeDiv(_minVotedTokensPerc, 2);
if(newPerc > MAX_VOTED_TOKEN_PERC) {
minVotedTokensPerc = MAX_VOTED_TOKEN_PERC;
return;
}
minVotedTokensPerc = newPerc;
}

// Tap poll
function createTapPoll(uint8 tapIncPerc) public onlyOwner {
require(state == FundState.TeamWithdraw);
Expand All @@ -90,14 +110,17 @@ contract PollManagedFund is Fund, DateTime, ITokenEventListener {
uint256 _tap = safeAdd(tap, safeDiv(safeMul(tap, tapIncPerc), 100));
uint256 startTime = now;
uint256 endTime = startTime + TAP_POLL_DURATION;
tapPoll = new TapPoll(_tap, token, this, startTime, endTime);
tapPoll = new TapPoll(_tap, token, this, startTime, endTime, minVotedTokensPerc);
TapPollCreated();
}

function onTapPollFinish(bool agree, uint256 _tap) external {
require(msg.sender == address(tapPoll) && tapPoll.finalized());
if(agree) {
tap = _tap;
}
updateMinVotedTokens(tapPoll.getVotedTokensPerc());
TapPollFinished(agree, _tap);
delete tapPoll;
}

Expand Down Expand Up @@ -137,6 +160,7 @@ contract PollManagedFund is Fund, DateTime, ITokenEventListener {
);
}
refundPoll = new RefundPoll(token, this, startTime, endTime, holdEndTime, isFirstRefund);
RefundPollCreated();
}

function onRefundPollFinish(bool agree) external {
Expand All @@ -157,6 +181,8 @@ contract PollManagedFund is Fund, DateTime, ITokenEventListener {
secondRefundPollDate = 0;
isWithdrawEnabled = true;
}
RefundPollFinished(agree);

delete refundPoll;
}

Expand Down
22 changes: 20 additions & 2 deletions TapPoll.sol
Expand Up @@ -9,7 +9,8 @@ import './fund/IPollManagedFund.sol';
* @dev Poll to increase tap amount
*/
contract TapPoll is BasePoll {
uint256 tap;
uint256 public tap;
uint256 public minTokensPerc = 0;

/**
* TapPoll constructor
Expand All @@ -18,15 +19,32 @@ contract TapPoll is BasePoll {
* @param _fundAddress Fund contract address
* @param _startTime Poll start time
* @param _endTime Poll end time
* @param _minTokensPerc - Min percent of tokens from totalSupply where poll is considered to be fulfilled
*/
function TapPoll(uint256 _tap, address _tokenAddress, address _fundAddress, uint256 _startTime, uint256 _endTime) public
function TapPoll(
uint256 _tap,
address _tokenAddress,
address _fundAddress,
uint256 _startTime,
uint256 _endTime,
uint256 _minTokensPerc
) public
BasePoll(_tokenAddress, _fundAddress, _startTime, _endTime, false)
{
tap = _tap;
minTokensPerc = _minTokensPerc;
}

function onPollFinish(bool agree) internal {
IPollManagedFund fund = IPollManagedFund(fundAddress);
fund.onTapPollFinish(agree, tap);
}

function getVotedTokensPerc() public view returns(uint256) {
return safeDiv(safeMul(safeAdd(yesCounter, noCounter), 100), token.totalSupply());
}

function isSubjectApproved() internal view returns(bool) {
return yesCounter > noCounter && getVotedTokensPerc() >= minTokensPerc;
}
}

0 comments on commit 1610362

Please sign in to comment.