Skip to content

Commit 1272c2f

Browse files
committed
Reviewer refactor
1 parent 8d2fbd4 commit 1272c2f

File tree

16 files changed

+83
-118
lines changed

16 files changed

+83
-118
lines changed

contracts/colony/Colony.sol

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -209,14 +209,6 @@ contract Colony is BasicMetaTransaction, Multicall, ColonyStorage, PatriciaTreeP
209209
IColonyNetwork(colonyNetworkAddress).setReputationMiningCycleReward(_amount);
210210
}
211211

212-
function setReputationMiningCycle(uint256 _amount) public
213-
stoppable
214-
auth
215-
{
216-
IColonyNetwork(colonyNetworkAddress).setReputationMiningCycleReward(_amount);
217-
}
218-
219-
220212
function addNetworkColonyVersion(uint256 _version, address _resolver) public
221213
stoppable
222214
auth
@@ -435,8 +427,6 @@ contract Colony is BasicMetaTransaction, Multicall, ColonyStorage, PatriciaTreeP
435427
}
436428

437429
function setReputationMiningCycleRewardReputationScaling(uint256 _factor) public stoppable auth {
438-
require(_factor <= WAD, "colony-invalid-scale-factor");
439430
IColonyNetwork(colonyNetworkAddress).setReputationMiningCycleRewardReputationScaling(_factor);
440-
emit MiningReputationScalingSet(_factor);
441431
}
442432
}

contracts/colony/ColonyDataTypes.sol

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,9 +349,7 @@ interface ColonyDataTypes {
349349

350350
event ArbitraryTransaction(address target, bytes data, bool success);
351351

352-
event DomainReputationScalingSet(uint256 domainId, bool enabled, uint256 factor);
353-
354-
event MiningReputationScalingSet(uint256 factor);
352+
event DomainReputationScalingSet(uint256 domainId, uint256 factor);
355353

356354
struct RewardPayoutCycle {
357355
// Reputation root hash at the time of reward payout creation

contracts/colony/ColonyDomains.sol

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,13 +127,11 @@ contract ColonyDomains is ColonyStorage {
127127
return domainCount;
128128
}
129129

130-
function setDomainReputationScaling(uint256 _domainId, bool _enabled, uint256 _factor) public stoppable auth {
130+
function setDomainReputationScaling(uint256 _domainId, uint256 _factor) public stoppable auth {
131131
require(domainExists(_domainId), "colony-domain-does-not-exist");
132-
require(_factor <= WAD, "colony-invalid-scale-factor");
133-
require(_enabled || _factor == 0, "colony-invalid-configuration");
132+
IColonyNetwork(colonyNetworkAddress).setSkillReputationScaling(domains[_domainId].skillId, _factor);
134133

135-
IColonyNetwork(colonyNetworkAddress).setDomainReputationScaling(_domainId, _enabled, _factor);
136-
emit DomainReputationScalingSet(_domainId, _enabled, _factor);
134+
emit DomainReputationScalingSet(_domainId, _factor);
137135
}
138136

139137
// Internal

contracts/colony/ColonyExpenditure.sol

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,6 @@ contract ColonyExpenditure is ColonyStorage {
175175
expenditureOnlyOwner(_id)
176176
{
177177
require(_slots.length == _skillIds.length, "colony-expenditure-bad-slots");
178-
IColonyNetwork colonyNetworkContract = IColonyNetwork(colonyNetworkAddress);
179178

180179
for (uint256 i; i < _slots.length; i++) {
181180
require(isValidGlobalOrLocalSkill(_skillIds[i]), "colony-not-valid-global-or-local-skill");
@@ -316,10 +315,11 @@ contract ColonyExpenditure is ColonyStorage {
316315

317316
// Validate payout modifier
318317
if (offset == 2) {
319-
if (!ColonyAuthority(address(authority)).hasUserRole(msgSender(), 1, uint8(ColonyDataTypes.ColonyRole.Root))){
320-
require(int256(uint256(_value)) <= 0, "colony-expenditure-bad-payout-modifier");
321-
}
322-
require(int256(uint256(_value)) >= MIN_PAYOUT_MODIFIER, "colony-expenditure-bad-payout-modifier");
318+
require(
319+
(int256(uint256(_value)) <= 0 || IColony(address(this)).hasUserRole(msgSender(), 1, ColonyRole.Root)) &&
320+
int256(uint256(_value)) >= MIN_PAYOUT_MODIFIER,
321+
"colony-expenditure-bad-payout-modifier"
322+
);
323323
}
324324

325325
} else {
@@ -361,11 +361,11 @@ contract ColonyExpenditure is ColonyStorage {
361361
internal
362362
{
363363
for (uint256 i; i < _tokens.length; i++) {
364-
(bool success, bytes memory returndata) = address(this).delegatecall(
364+
(bool success, bytes memory returndata) = address(this).delegatecall( // solhint-disable-line avoid-low-level-calls
365365
abi.encodeWithSignature("setExpenditurePayouts(uint256,uint256[],address,uint256[])", _id, _slots[i], _tokens[i], _values[i])
366366
);
367367
if (!success) {
368-
if (returndata.length == 0) revert();
368+
if (returndata.length == 0) revert("colony-expenditure-null-return");
369369
assembly {
370370
revert(add(32, returndata), mload(returndata))
371371
}

contracts/colony/IColony.sol

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1112,10 +1112,8 @@ interface IColony is ColonyDataTypes, IRecovery, IBasicMetaTransaction, IMultica
11121112

11131113
/// @notice Call to set the reputation scaling applied to reputation earned in a domain
11141114
/// @param domainId The domain to set the value of scaling in
1115-
/// @param enabled bool Whether we're enabling or disabling reputation scaling for this domain
1116-
/// If disabling, bool must be false
11171115
/// @param factor The scale factor to apply, as a WAD
1118-
function setDomainReputationScaling(uint256 domainId, bool enabled, uint256 factor) external;
1116+
function setDomainReputationScaling(uint256 domainId, uint256 factor) external;
11191117

11201118
/// @notice Call to set the reputation scaling applied to payouts made in a particular token
11211119
/// @param _token The token we wish to apply scaling to

contracts/colonyNetwork/ColonyNetwork.sol

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -278,32 +278,20 @@ contract ColonyNetwork is ColonyDataTypes, BasicMetaTransaction, ColonyNetworkSt
278278
return payoutWhitelist[_token];
279279
}
280280

281-
function setDomainReputationScaling(uint256 _domainId, bool _enabled, uint256 _factor) public calledByColony stoppable
282-
{
281+
function setSkillReputationScaling(uint256 _skillId, uint256 _factor) public calledByColony stoppable {
283282
require(_factor <= WAD, "colony-network-invalid-reputation-scale-factor");
284-
uint256 skillId = IColony(msgSender()).getDomain(_domainId).skillId;
285-
skills[skillId].reputationScalingFactorComplement = WAD - _factor;
283+
skills[_skillId].reputationScalingFactorComplement = WAD - _factor;
286284
}
287285

288286
function getSkillReputationScaling(uint256 _skillId) public view returns (uint256) {
289-
uint256 factor;
290-
Skill storage s = skills[_skillId];
291-
factor = WAD - s.reputationScalingFactorComplement;
292-
293-
while (s.nParents > 0) {
294-
s = skills[s.parents[0]];
295-
// If reputation scaling is in effect for this skill, then take the value for this skill in to
296-
// account. Otherwise, no effect and continue walking up the tree
297-
if (s.reputationScalingFactorComplement > 0) {
298-
if (s.reputationScalingFactorComplement == 1){
299-
// If scaling is in effect and is 0 (because factor = 1 - complement), we can short circuit - regardless of the rest of the tree
300-
// the scaling factor will be 0
301-
return 0;
302-
} else {
303-
factor = wmul(factor, WAD - s.reputationScalingFactorComplement);
304-
}
305-
}
287+
Skill storage skill = skills[_skillId];
288+
uint256 factor = WAD - skill.reputationScalingFactorComplement;
289+
290+
while (skill.nParents > 0 && factor > 0) {
291+
skill = skills[skill.parents[0]];
292+
factor = wmul(factor, WAD - skill.reputationScalingFactorComplement);
306293
}
294+
307295
return factor;
308296
}
309297

contracts/colonyNetwork/ColonyNetworkDataTypes.sol

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,9 @@ interface ColonyNetworkDataTypes {
152152
/// @param denominator The new denominator of the decay rate
153153
event ColonyReputationDecayRateToChange(address colony, address fromCycleCompleted, uint256 numerator, uint256 denominator);
154154

155+
/// @notice Event logged when the reputation scaling factor for miners is set
156+
/// @param factor The factor (from 0 to WAD) governing how reputation awards for miners is scaled
157+
event MiningReputationScalingSet(uint256 factor);
155158

156159
struct Skill {
157160
// total number of parent skills

contracts/colonyNetwork/ColonyNetworkMining.sol

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,15 @@ contract ColonyNetworkMining is ColonyNetworkStorage, MultiChain, ScaleReputatio
197197
ITokenLocking(tokenLocking).depositFor(clnyToken, wmul(totalMinerRewardPerCycle, minerWeights[i]), stakers[i]);
198198
}
199199

200+
uint256 scaleFactor = WAD - skills[reputationMiningSkillId].reputationScalingFactorComplement;
201+
uint256 scaledReward = uint256(scaleReputation(int256(totalMinerRewardPerCycle), scaleFactor));
202+
200203
// This gives them reputation in the next update cycle.
201204
IReputationMiningCycle(inactiveReputationMiningCycle).rewardStakersWithReputation(
202205
stakers,
203206
minerWeights,
204207
metaColony,
205-
// totalMinerRewardPerCycle,
206-
uint256(scaleReputation(int256(totalMinerRewardPerCycle), WAD - skills[reputationMiningSkillId].reputationScalingFactorComplement)),
208+
scaledReward,
207209
reputationMiningSkillId
208210
);
209211
}
@@ -287,10 +289,11 @@ contract ColonyNetworkMining is ColonyNetworkStorage, MultiChain, ScaleReputatio
287289
return totalMinerRewardPerCycle;
288290
}
289291

290-
function setReputationMiningCycleRewardReputationScaling(uint256 _factor) public calledByMetaColony stoppable
291-
{
292+
function setReputationMiningCycleRewardReputationScaling(uint256 _factor) public calledByMetaColony stoppable {
292293
require(_factor <= WAD, "colony-network-invalid-reputation-scale-factor");
293294
skills[reputationMiningSkillId].reputationScalingFactorComplement = WAD - _factor;
295+
296+
emit MiningReputationScalingSet(_factor);
294297
}
295298

296299
uint256 constant UINT192_MAX = 2**192 - 1; // Used for updating the stake timestamp

contracts/colonyNetwork/IColonyNetwork.sol

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -469,13 +469,11 @@ interface IColonyNetwork is ColonyNetworkDataTypes, IRecovery, IBasicMetaTransac
469469
/// @return scaleFactor Returns the scale factor applied to reputation earned in this skill, as a WAD.
470470
function getSkillReputationScaling(uint256 _skillId) external view returns (uint256 scaleFactor);
471471

472-
/// @notice Call to set the reputation scaling applied to reputation earned in a domain.
472+
/// @notice Call to set the reputation scaling applied to reputation earned in a skill
473473
/// @dev Only callable by a colony
474-
/// @param _domainId The domain to set the value of scaling in
475-
/// @param _enabled bool Whether we're enabling or disabling reputation scaling for this domain
476-
/// If disabling, bool must be false
474+
/// @param _skillId The skill to set the value of scaling in
477475
/// @param _factor The scale factor to apply, as a WAD
478-
function setDomainReputationScaling(uint256 _domainId, bool _enabled, uint256 _factor) external;
476+
function setSkillReputationScaling(uint256 _skillId, uint256 _factor) external;
479477

480478
/// @notice Called by a colony to set the rate at which reputation in that colony decays
481479
/// @param _numerator The numerator of the fraction reputation does down by every reputation cycle
@@ -492,4 +490,4 @@ interface IColonyNetwork is ColonyNetworkDataTypes, IRecovery, IBasicMetaTransac
492490
/// @dev Calls the corresponding function on the ColonyNetwork.
493491
/// @param _factor The scale factor to apply to reputation mining rewards
494492
function setReputationMiningCycleRewardReputationScaling(uint256 _factor) external;
495-
}
493+
}

contracts/common/ScaleReputation.sol

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,26 @@ import "../../lib/dappsys/math.sol";
2020

2121
contract ScaleReputation is DSMath {
2222
// Note that scaleFactor should be a WAD.
23-
function scaleReputation(int256 reputationAmount, uint256 scaleFactor) internal pure returns (int256) {
24-
if (reputationAmount == 0 || scaleFactor == 0) {
25-
return 0;
26-
}
27-
28-
int256 scaledReputation;
29-
int256 absAmount;
30-
31-
if (reputationAmount == type(int256).min){
32-
absAmount = type(int256).max; // Off by one, but best we can do - probably gets capped anyway
33-
} else {
34-
absAmount = reputationAmount >= 0 ? reputationAmount : -reputationAmount;
35-
}
36-
37-
int256 sgnAmount = reputationAmount >= 0 ? int(1) : -1;
23+
function scaleReputation(int256 reputationAmount, uint256 scaleFactor)
24+
internal
25+
pure
26+
returns (int256 scaledReputation)
27+
{
28+
if (reputationAmount == 0 || scaleFactor == 0) { return 0; }
29+
30+
int256 sgnAmount = (reputationAmount >= 0) ? int256(1) : -1;
31+
int256 absAmount = (reputationAmount == type(int256).min)
32+
? type(int256).max // Off by one, but best we can do - probably gets capped anyway
33+
: (reputationAmount >= 0) ? reputationAmount : -reputationAmount;
3834

3935
// Guard against overflows during calculation with wmul
40-
if (type(uint256).max / scaleFactor < uint256(absAmount)){
41-
if (sgnAmount == 1){
42-
scaledReputation = type(int128).max;
43-
} else {
44-
scaledReputation = type(int128).min;
45-
}
36+
if (type(uint256).max / scaleFactor < uint256(absAmount)) {
37+
scaledReputation = (sgnAmount == 1) ? type(int128).max : type(int128).min;
4638
} else {
4739
scaledReputation = int256(wmul(scaleFactor, uint256(absAmount))) * sgnAmount;
4840
// Cap inside the range of int128, as we do for all reputations
4941
scaledReputation = imax(type(int128).min, scaledReputation);
5042
scaledReputation = imin(type(int128).max, scaledReputation);
5143
}
52-
return scaledReputation;
5344
}
5445
}

0 commit comments

Comments
 (0)