@@ -332,6 +332,48 @@ contract ColonyNetwork is ColonyDataTypes, BasicMetaTransaction, ColonyNetworkSt
332332 return factor;
333333 }
334334
335+ function setColonyReputationDecayRate (uint256 _numerator , uint256 _denominator ) public calledByColony stoppable {
336+ require (_numerator < 10 ** 15 , "colony-network-decay-numerator-too-big " );
337+ require (_numerator <= _denominator, "colony-network-decay-rate-over-1 " );
338+
339+ ColonyDecayRate storage decayRate = colonyDecayRates[msgSender ()];
340+
341+ if (activeReputationMiningCycle != decayRate.afterMiningCycle) {
342+ // Move the old-next values to current, as they are in effect
343+ decayRate.currentNumerator = decayRate.nextNumerator;
344+ decayRate.currentDenominator = decayRate.nextDenominator;
345+
346+ // Update afterMiningCycle
347+ decayRate.afterMiningCycle = activeReputationMiningCycle;
348+ }
349+
350+ // Whether we've updated the current decays rates or not, we update the next values
351+ decayRate.nextNumerator = _numerator;
352+ decayRate.nextDenominator = _denominator;
353+
354+ emit ColonyReputationDecayRateToChange (msgSender (), activeReputationMiningCycle, _numerator, _denominator);
355+ }
356+
357+ function getColonyReputationDecayRate (address _colony ) public view returns (uint256 , uint256 ) {
358+ uint256 numerator;
359+ uint256 denominator;
360+
361+ if (activeReputationMiningCycle != colonyDecayRates[_colony].afterMiningCycle) {
362+ // Then the values of interest is whatever's in nextNumerator/nextDenominator
363+ numerator = colonyDecayRates[_colony].nextNumerator;
364+ denominator = colonyDecayRates[_colony].nextDenominator;
365+ } else {
366+ numerator = colonyDecayRates[_colony].currentNumerator;
367+ denominator = colonyDecayRates[_colony].currentDenominator;
368+ }
369+
370+ if (denominator == 0 ) {
371+ // Then we return the 'default' decay rate
372+ (numerator, denominator) = IReputationMiningCycle (activeReputationMiningCycle).getDecayConstant ();
373+ }
374+ return (numerator, denominator);
375+ }
376+
335377 function incrementMetatransactionNonce (address _user ) override internal {
336378 // We need to protect the metatransaction nonce slots, otherwise those with recovery
337379 // permissions could replay metatransactions, which would be a disaster.
0 commit comments