@@ -11,7 +11,6 @@ import "../votingMachines/VotingMachineCallbacks.sol";
11
11
* @dev An agent can ask an organization to recognize a contribution and reward
12
12
* him with token, reputation, ether or any combination.
13
13
*/
14
-
15
14
contract ContributionReward is UniversalScheme , VotingMachineCallbacks , ProposalExecuteInterface {
16
15
using SafeMath for uint ;
17
16
@@ -82,8 +81,10 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal
82
81
*/
83
82
function executeProposal (bytes32 _proposalId , int256 _param ) external onlyVotingMachine (_proposalId) returns (bool ) {
84
83
ProposalInfo memory proposal = proposalsInfo[msg .sender ][_proposalId];
85
- require (organizationsProposals[address (proposal.avatar)][_proposalId].executionTime == 0 );
86
- require (organizationsProposals[address (proposal.avatar)][_proposalId].beneficiary != address (0 ));
84
+ require (organizationsProposals[address (proposal.avatar)][_proposalId].executionTime == 0 ,
85
+ "cannot execute twice " );
86
+ require (organizationsProposals[address (proposal.avatar)][_proposalId].beneficiary != address (0 ),
87
+ "proposal must exist " );
87
88
// Check if vote was successful:
88
89
if (_param == 1 ) {
89
90
// solhint-disable-next-line not-rely-on-time
@@ -192,7 +193,7 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal
192
193
193
194
ContributionProposal memory _proposal = organizationsProposals[address (_avatar)][_proposalId];
194
195
ContributionProposal storage proposal = organizationsProposals[address (_avatar)][_proposalId];
195
- require (proposal.executionTime != 0 );
196
+ require (proposal.executionTime != 0 , " cannot execute unapproved proposal " );
196
197
uint256 periodsToPay = getPeriodsToPay (_proposalId, address (_avatar), 0 );
197
198
198
199
//set proposal reward to zero to prevent reentrancy attack.
@@ -201,11 +202,13 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal
201
202
if (reputation > 0 ) {
202
203
require (
203
204
Controller (
204
- _avatar.owner ()).mintReputation (uint (reputation), _proposal.beneficiary, address (_avatar)));
205
+ _avatar.owner ()).mintReputation (uint (reputation), _proposal.beneficiary, address (_avatar)),
206
+ "failed to mint reputation " );
205
207
} else if (reputation < 0 ) {
206
208
require (
207
209
Controller (
208
- _avatar.owner ()).burnReputation (uint (reputation* (- 1 )), _proposal.beneficiary, address (_avatar)));
210
+ _avatar.owner ()).burnReputation (uint (reputation* (- 1 )), _proposal.beneficiary, address (_avatar)),
211
+ "failed to burn reputation " );
209
212
}
210
213
if (reputation != 0 ) {
211
214
proposal.redeemedPeriods[0 ] = proposal.redeemedPeriods[0 ].add (periodsToPay);
@@ -225,14 +228,15 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal
225
228
226
229
ContributionProposal memory _proposal = organizationsProposals[address (_avatar)][_proposalId];
227
230
ContributionProposal storage proposal = organizationsProposals[address (_avatar)][_proposalId];
228
- require (proposal.executionTime != 0 );
231
+ require (proposal.executionTime != 0 , " cannot execute unapproved proposal " );
229
232
uint256 periodsToPay = getPeriodsToPay (_proposalId, address (_avatar), 1 );
230
233
//set proposal rewards to zero to prevent reentrancy attack.
231
234
proposal.nativeTokenReward = 0 ;
232
235
233
236
amount = periodsToPay.mul (_proposal.nativeTokenReward);
234
237
if (amount > 0 ) {
235
- require (Controller (_avatar.owner ()).mintTokens (amount, _proposal.beneficiary, address (_avatar)));
238
+ require (Controller (_avatar.owner ()).mintTokens (amount, _proposal.beneficiary, address (_avatar)),
239
+ "failed to mint tokens " );
236
240
proposal.redeemedPeriods[1 ] = proposal.redeemedPeriods[1 ].add (periodsToPay);
237
241
emit RedeemNativeToken (address (_avatar), _proposalId, _proposal.beneficiary, amount);
238
242
}
@@ -251,14 +255,15 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal
251
255
252
256
ContributionProposal memory _proposal = organizationsProposals[address (_avatar)][_proposalId];
253
257
ContributionProposal storage proposal = organizationsProposals[address (_avatar)][_proposalId];
254
- require (proposal.executionTime != 0 );
258
+ require (proposal.executionTime != 0 , " cannot execute unapproved proposal " );
255
259
uint256 periodsToPay = getPeriodsToPay (_proposalId, address (_avatar), 2 );
256
260
//set proposal rewards to zero to prevent reentrancy attack.
257
261
proposal.ethReward = 0 ;
258
262
amount = periodsToPay.mul (_proposal.ethReward);
259
263
260
264
if (amount > 0 ) {
261
- require (Controller (_avatar.owner ()).sendEther (amount, _proposal.beneficiary, _avatar));
265
+ require (Controller (_avatar.owner ()).sendEther (amount, _proposal.beneficiary, _avatar),
266
+ "failed to send ether " );
262
267
proposal.redeemedPeriods[2 ] = proposal.redeemedPeriods[2 ].add (periodsToPay);
263
268
emit RedeemEther (address (_avatar), _proposalId, _proposal.beneficiary, amount);
264
269
}
@@ -277,7 +282,7 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal
277
282
278
283
ContributionProposal memory _proposal = organizationsProposals[address (_avatar)][_proposalId];
279
284
ContributionProposal storage proposal = organizationsProposals[address (_avatar)][_proposalId];
280
- require (proposal.executionTime != 0 );
285
+ require (proposal.executionTime != 0 , " cannot execute unapproved proposal " );
281
286
uint256 periodsToPay = getPeriodsToPay (_proposalId, address (_avatar), 3 );
282
287
//set proposal rewards to zero to prevent reentrancy attack.
283
288
proposal.externalTokenReward = 0 ;
@@ -288,7 +293,8 @@ contract ContributionReward is UniversalScheme, VotingMachineCallbacks, Proposal
288
293
require (
289
294
Controller (
290
295
_avatar.owner ())
291
- .externalTokenTransfer (_proposal.externalToken, _proposal.beneficiary, amount, _avatar));
296
+ .externalTokenTransfer (_proposal.externalToken, _proposal.beneficiary, amount, _avatar),
297
+ "failed to transfer external token " );
292
298
proposal.redeemedPeriods[3 ] = proposal.redeemedPeriods[3 ].add (periodsToPay);
293
299
emit RedeemExternalToken (address (_avatar), _proposalId, _proposal.beneficiary, amount);
294
300
}
0 commit comments