@@ -168,11 +168,44 @@ contract ColonyNetwork is ColonyDataTypes, BasicMetaTransaction, ColonyNetworkSt
168168 return payoutWhitelist[_token];
169169 }
170170
171- function setColonyReputationDecayRate (uint256 _numerator , uint256 _denominator ) public calledByColony stoppable {
171+ function setColonyReputationDecayRate (uint256 _numerator , uint256 _denominator ) public stoppable calledByColony {
172172 require (_numerator < 10 ** 15 , "colony-network-decay-numerator-too-big " );
173173 require (_numerator <= _denominator, "colony-network-decay-rate-over-1 " );
174174
175- ColonyDecayRate storage decayRate = colonyDecayRates[msgSender ()];
175+ if (isMiningChain ()){
176+ setColonyReputationDecayRateInternal (0 , msgSender (), _numerator, _denominator);
177+ } else {
178+ bridgeColonyDecayRate (_numerator, _denominator);
179+ }
180+ }
181+
182+ function bridgeColonyDecayRate (uint256 _numerator , uint256 _denominator ) internal {
183+ // Build the transaction we're going to send to the bridge to register the
184+ // creation of this skill on the home chain
185+
186+ bytes memory payload = abi.encodePacked (
187+ bridgeData[miningBridgeAddress].setColonyDecayRateBefore,
188+ abi.encodeWithSignature ("setColonyReputationDecayRateFromBridge(address,uint256,uint256) " , msgSender (), _numerator, _denominator),
189+ bridgeData[miningBridgeAddress].setColonyDecayRateAfter
190+ );
191+
192+ // Send bridge transaction
193+ // slither-disable-next-line unchecked-lowlevel
194+ (bool success , ) = miningBridgeAddress.call (payload);
195+ require (success, "colony-network-bridging-transaction-failed " );
196+ }
197+
198+ function setColonyReputationDecayRateFromBridge (address _colony , uint256 _numerator , uint256 _denominator ) public always
199+ onlyMiningChain
200+ {
201+ uint256 bridgeChainId = bridgeData[msgSender ()].chainId;
202+ require (bridgeChainId != 0 , "colony-network-not-known-bridge " );
203+
204+ setColonyReputationDecayRateInternal (bridgeChainId, _colony, _numerator, _denominator);
205+ }
206+
207+ function setColonyReputationDecayRateInternal (uint256 _chainId , address _colony , uint256 _numerator , uint256 _denominator ) internal {
208+ ColonyDecayRate storage decayRate = colonyDecayRates[_chainId][_colony];
176209
177210 if (activeReputationMiningCycle != decayRate.afterMiningCycle) {
178211 // Move the old-next values to current, as they are in effect
@@ -187,20 +220,25 @@ contract ColonyNetwork is ColonyDataTypes, BasicMetaTransaction, ColonyNetworkSt
187220 decayRate.nextNumerator = _numerator;
188221 decayRate.nextDenominator = _denominator;
189222
190- emit ColonyReputationDecayRateToChange (msgSender () , activeReputationMiningCycle, _numerator, _denominator);
223+ emit ColonyReputationDecayRateToChange (_chainId, _colony , activeReputationMiningCycle, _numerator, _denominator);
191224 }
192225
193- function getColonyReputationDecayRate (address _colony ) public view returns (uint256 , uint256 ) {
226+ function getColonyReputationDecayRate (uint256 _chainId , address _colony ) public view returns (uint256 , uint256 ) {
194227 uint256 numerator;
195228 uint256 denominator;
196229
197- if (activeReputationMiningCycle != colonyDecayRates[_colony].afterMiningCycle) {
230+ uint256 chainId = _chainId;
231+ if (isMiningChainId (_chainId)){
232+ chainId = 0 ;
233+ }
234+
235+ if (activeReputationMiningCycle != colonyDecayRates[chainId][_colony].afterMiningCycle) {
198236 // Then the values of interest is whatever's in nextNumerator/nextDenominator
199- numerator = colonyDecayRates[_colony].nextNumerator;
200- denominator = colonyDecayRates[_colony].nextDenominator;
237+ numerator = colonyDecayRates[chainId][ _colony].nextNumerator;
238+ denominator = colonyDecayRates[chainId][ _colony].nextDenominator;
201239 } else {
202- numerator = colonyDecayRates[_colony].currentNumerator;
203- denominator = colonyDecayRates[_colony].currentDenominator;
240+ numerator = colonyDecayRates[chainId][ _colony].currentNumerator;
241+ denominator = colonyDecayRates[chainId][ _colony].currentDenominator;
204242 }
205243
206244 if (denominator == 0 ) {
0 commit comments