Modify discover contract in order to remove unnecessary rows

This commit is contained in:
Lyubomir Kiprov 2019-05-19 12:27:18 +03:00
parent 6b704dc1a8
commit 6927dfb4fb
1 changed files with 39 additions and 28 deletions

View File

@ -93,9 +93,7 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
* @param _amount uint, included for approveAndCallFallBack * @param _amount uint, included for approveAndCallFallBack
*/ */
function downvote(bytes32 _id, uint _amount) external { function downvote(bytes32 _id, uint _amount) external {
(,,uint c) = downvoteCost(_id); _downvote(msg.sender, _id, _amount);
require(_amount == c, "Incorrect amount: valid iff effect on ranking is 1%");
_downvote(msg.sender, _id, c);
} }
/** /**
@ -105,9 +103,7 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
* @param _amount of tokens to withdraw from DApp's overall balance. * @param _amount of tokens to withdraw from DApp's overall balance.
*/ */
function withdraw(bytes32 _id, uint _amount) external { function withdraw(bytes32 _id, uint _amount) external {
uint dappIdx = id2index[_id]; Data storage d = _getDAppById(_id);
Data storage d = dapps[dappIdx];
require(d.id == _id, "Error fetching correct data");
require(msg.sender == d.developer, "Only the developer can withdraw SNT staked on this data"); require(msg.sender == d.developer, "Only the developer can withdraw SNT staked on this data");
require(_amount <= d.available, "You can only withdraw a percentage of the SNT staked, less what you have already received"); require(_amount <= d.available, "You can only withdraw a percentage of the SNT staked, less what you have already received");
@ -154,6 +150,14 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
emit MetadataUpdated(_id); emit MetadataUpdated(_id);
} }
/**
* @dev Used in UI in order to fetch all dapps
* @return dapps count
*/
function getDAppsCount() external view returns(uint) {
return dapps.length;
}
/** /**
* @notice Support for "approveAndCall". * @notice Support for "approveAndCall".
* @param _from Who approved. * @param _from Who approved.
@ -203,9 +207,7 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
* @return effect of donation on DApp's effectiveBalance * @return effect of donation on DApp's effectiveBalance
*/ */
function upvoteEffect(bytes32 _id, uint _amount) external view returns(uint effect) { function upvoteEffect(bytes32 _id, uint _amount) external view returns(uint effect) {
uint dappIdx = id2index[_id]; Data memory d = _getDAppById(_id);
Data memory d = dapps[dappIdx];
require(d.id == _id, "Error fetching correct data");
require(d.balance.add(_amount) <= safeMax, "You cannot upvote by this much, try with a lower amount"); require(d.balance.add(_amount) <= safeMax, "You cannot upvote by this much, try with a lower amount");
// Special case - no downvotes yet cast // Special case - no downvotes yet cast
@ -243,16 +245,8 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
* @return balance_down_by, votes_required, cost * @return balance_down_by, votes_required, cost
*/ */
function downvoteCost(bytes32 _id) public view returns(uint b, uint vR, uint c) { function downvoteCost(bytes32 _id) public view returns(uint b, uint vR, uint c) {
uint dappIdx = id2index[_id]; Data memory d = _getDAppById(_id);
Data memory d = dapps[dappIdx]; return _downvoteCost(d);
require(d.id == _id, "Error fetching correct data");
uint balanceDownBy = (d.effectiveBalance.div(100));
uint votesRequired = (balanceDownBy.mul(d.votesMinted).mul(d.rate)).div(d.available);
uint votesAvailable = d.votesMinted.sub(d.votesCast).sub(votesRequired);
uint temp = (d.available.div(votesAvailable)).mul(votesRequired);
uint cost = temp.div(decimals);
return (balanceDownBy, votesRequired, cost);
} }
function _createDApp( function _createDApp(
@ -306,9 +300,7 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
function _upvote(address _from, bytes32 _id, uint _amount) internal { function _upvote(address _from, bytes32 _id, uint _amount) internal {
require(_amount > 0, "You must send some SNT in order to upvote"); require(_amount > 0, "You must send some SNT in order to upvote");
uint dappIdx = id2index[_id]; Data storage d = _getDAppById(_id);
Data storage d = dapps[dappIdx];
require(d.id == _id, "Error fetching correct data");
require(d.balance.add(_amount) <= safeMax, "You cannot upvote by this much, try with a lower amount"); require(d.balance.add(_amount) <= safeMax, "You cannot upvote by this much, try with a lower amount");
@ -340,11 +332,8 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
} }
function _downvote(address _from, bytes32 _id, uint _amount) internal { function _downvote(address _from, bytes32 _id, uint _amount) internal {
uint dappIdx = id2index[_id]; Data storage d = _getDAppById(_id);
Data storage d = dapps[dappIdx]; (uint b, uint vR, uint c) = _downvoteCost(d);
require(d.id == _id, "Error fetching correct data");
(uint b, uint vR, uint c) = downvoteCost(_id);
require(_amount == c, "Incorrect amount: valid iff effect on ranking is 1%"); require(_amount == c, "Incorrect amount: valid iff effect on ranking is 1%");
@ -358,8 +347,30 @@ contract Discover is ApproveAndCallFallBack, BancorFormula {
emit Downvote(_id, d.effectiveBalance); emit Downvote(_id, d.effectiveBalance);
} }
function _downvoteCost(Data memory d) internal view returns(uint b, uint vR, uint c) {
uint balanceDownBy = (d.effectiveBalance.div(100));
uint votesRequired = (balanceDownBy.mul(d.votesMinted).mul(d.rate)).div(d.available);
uint votesAvailable = d.votesMinted.sub(d.votesCast).sub(votesRequired);
uint temp = (d.available.div(votesAvailable)).mul(votesRequired);
uint cost = temp.div(decimals);
return (balanceDownBy, votesRequired, cost);
}
/**
* @dev Used internally in order to get a dapp while checking if it exists
* @return existing dapp
*/
function _getDAppById(bytes32 _id) internal view returns(Data storage d) {
uint dappIdx = id2index[_id];
Data memory d = dapps[dappIdx];
require(d.id == _id, "Error fetching correct data");
return dapps[dappIdx];
}
/** /**
* @dev Decodes abi encoded data with selector for "functionName(bytes32,uint256)". * @dev Decodes abi encoded data with selector for "functionName(bytes32,uint256)".
* @param _data Abi encoded data. * @param _data Abi encoded data.
* @return Decoded registry call. * @return Decoded registry call.