Skip to content

Commit 36809e0

Browse files
committed
Optimize bytecode for Tasks.sol
1 parent 3c47435 commit 36809e0

File tree

2 files changed

+114
-121
lines changed

2 files changed

+114
-121
lines changed

contracts/extensions/Tasks.sol

+54-46
Original file line numberDiff line numberDiff line change
@@ -116,33 +116,33 @@ contract Tasks is DSMath {
116116
}
117117

118118
modifier self() {
119-
require(address(this) == msg.sender, "colony-task-not-self");
119+
require(address(this) == msg.sender, "task-not-self");
120120
_;
121121
}
122122

123+
ColonyDataTypes.ColonyRole constant ADMIN = ColonyDataTypes.ColonyRole.Administration;
123124
modifier isAdmin(address _user, uint256 _permissionDomainId, uint256 _childSkillIndex, uint256 _domainId) {
124-
ColonyDataTypes.ColonyRole admin = ColonyDataTypes.ColonyRole.Administration;
125-
require(colony.hasInheritedUserRole(_user, _permissionDomainId, admin, _childSkillIndex, _domainId), "colony-task-not-admin");
125+
require(colony.hasInheritedUserRole(_user, _permissionDomainId, ADMIN, _childSkillIndex, _domainId), "task-not-admin");
126126
_;
127127
}
128128

129129
modifier taskExists(uint256 _id) {
130-
require(_id > 0 && _id <= taskCount, "colony-task-does-not-exist");
130+
require(doesTaskExist(_id), "task-does-not-exist");
131131
_;
132132
}
133133

134134
modifier taskComplete(uint256 _id) {
135-
require(tasks[_id].completionTimestamp > 0, "colony-task-not-complete");
135+
require(isTaskComplete(_id), "task-not-complete");
136136
_;
137137
}
138138

139139
modifier taskNotComplete(uint256 _id) {
140-
require(tasks[_id].completionTimestamp == 0, "colony-task-complete");
140+
require(!isTaskComplete(_id), "task-complete");
141141
_;
142142
}
143143

144144
modifier confirmTaskRoleIdentity(uint256 _id, address _user, TaskRole _role) {
145-
require(msg.sender == getTaskRoleUser(_id, _role), "colony-task-role-identity-mismatch");
145+
require(getTaskRoleUser(_id, _role) == msg.sender, "task-role-identity-mismatch");
146146
_;
147147
}
148148

@@ -156,17 +156,17 @@ contract Tasks is DSMath {
156156
)
157157
public
158158
{
159-
require(_value == 0, "colony-task-change-non-zero-value");
160-
require(_sigR.length == _sigS.length && _sigR.length == _sigV.length, "colony-task-change-signatures-count-do-not-match");
159+
require(_value == 0, "task-change-non-zero-value");
160+
require(_sigR.length == _sigS.length && _sigR.length == _sigV.length, "task-change-sig-count-no-match");
161161

162162
bytes4 sig;
163163
uint256 taskId;
164164
(sig, taskId) = deconstructCall(_data);
165-
require(taskId > 0 && taskId <= taskCount, "colony-task-does-not-exist");
166-
require(!roleAssignmentSigs[sig], "colony-task-change-is-role-assignment");
165+
require(taskId > 0 && taskId <= taskCount, "task-does-not-exist");
166+
require(!roleAssignmentSigs[sig], "task-change-is-role-assign");
167167

168168
ColonyDataTypes.ExpenditureStatus status = colony.getExpenditure(tasks[taskId].expenditureId).status;
169-
require(status != ColonyDataTypes.ExpenditureStatus.Finalized, "colony-task-finalized");
169+
require(status != ColonyDataTypes.ExpenditureStatus.Finalized, "task-finalized");
170170

171171
uint8 nSignaturesRequired;
172172
address taskRole1User = getTaskRoleUser(taskId, TaskRole(reviewers[sig][0]));
@@ -180,26 +180,26 @@ contract Tasks is DSMath {
180180
} else {
181181
nSignaturesRequired = 2;
182182
}
183-
require(_sigR.length == nSignaturesRequired, "colony-task-change-does-not-meet-signatures-required");
183+
require(_sigR.length == nSignaturesRequired, "task-change-wrong-num-sigs");
184184

185185
bytes32 msgHash = keccak256(abi.encodePacked(address(this), address(this), _value, _data, tasks[taskId].changeNonce));
186186
address[] memory reviewerAddresses = getReviewerAddresses(_sigV, _sigR, _sigS, _mode, msgHash);
187187

188188
require(
189189
reviewerAddresses[0] == taskRole1User || reviewerAddresses[0] == taskRole2User,
190-
"colony-task-signatures-do-not-match-reviewer-1"
190+
"task-sigs-no-match-reviewer-1"
191191
);
192192

193193
if (nSignaturesRequired == 2) {
194-
require(reviewerAddresses[0] != reviewerAddresses[1], "colony-task-duplicate-reviewers");
194+
require(reviewerAddresses[0] != reviewerAddresses[1], "task-duplicate-reviewers");
195195
require(
196196
reviewerAddresses[1] == taskRole1User || reviewerAddresses[1] == taskRole2User,
197-
"colony-task-signatures-do-not-match-reviewer-2"
197+
"task-sigs-no-match-reviewer-2"
198198
);
199199
}
200200

201201
tasks[taskId].changeNonce += 1;
202-
require(executeCall(address(this), _value, _data), "colony-task-change-execution-failed");
202+
require(executeCall(address(this), _value, _data), "task-change-execution-failed");
203203
}
204204

205205
function executeTaskRoleAssignment(
@@ -212,18 +212,18 @@ contract Tasks is DSMath {
212212
)
213213
public
214214
{
215-
require(_value == 0, "colony-task-role-assignment-non-zero-value");
216-
require(_sigR.length == _sigS.length && _sigR.length == _sigV.length, "colony-task-role-assignment-signatures-count-do-not-match");
215+
require(_value == 0, "task-role-assign-non-zero-value");
216+
require(_sigR.length == _sigS.length && _sigR.length == _sigV.length, "task-role-assign-sig-count-no-match");
217217

218218
bytes4 sig;
219219
uint256 taskId;
220220
address userAddress;
221221
(sig, taskId, userAddress) = deconstructRoleChangeCall(_data);
222-
require(taskId > 0 && taskId <= taskCount, "colony-task-does-not-exist");
223-
require(roleAssignmentSigs[sig], "colony-task-change-is-not-role-assignment");
222+
require(taskId > 0 && taskId <= taskCount, "task-does-not-exist");
223+
require(roleAssignmentSigs[sig], "task-change-is-not-role-assign");
224224

225225
ColonyDataTypes.ExpenditureStatus status = colony.getExpenditure(tasks[taskId].expenditureId).status;
226-
require(status != ColonyDataTypes.ExpenditureStatus.Finalized, "colony-task-finalized");
226+
require(status != ColonyDataTypes.ExpenditureStatus.Finalized, "task-finalized");
227227

228228
uint8 nSignaturesRequired;
229229
address manager = getTaskRoleUser(taskId, TaskRole.Manager);
@@ -233,36 +233,36 @@ contract Tasks is DSMath {
233233
} else {
234234
nSignaturesRequired = 2;
235235
}
236-
require(_sigR.length == nSignaturesRequired, "colony-task-role-assignment-does-not-meet-required-signatures");
236+
require(_sigR.length == nSignaturesRequired, "task-role-assign-wrong-num-sigs");
237237

238238
bytes32 msgHash = keccak256(abi.encodePacked(address(this), address(this), _value, _data, tasks[taskId].changeNonce));
239239
address[] memory reviewerAddresses = getReviewerAddresses(_sigV, _sigR, _sigS, _mode, msgHash);
240240

241241
if (nSignaturesRequired == 1) {
242242
// Since we want to set a manager as an evaluator, require just manager's signature
243-
require(reviewerAddresses[0] == manager, "colony-task-role-assignment-not-signed-by-manager");
243+
require(reviewerAddresses[0] == manager, "task-role-assign-no-manager-sig");
244244
} else {
245245
// One of signers must be a manager
246246
require(
247247
reviewerAddresses[0] == manager ||
248248
reviewerAddresses[1] == manager,
249-
"colony-task-role-assignment-not-signed-by-manager"
249+
"task-role-assign-no-manager-sig"
250250
);
251251

252252
// One of the signers must be an address we want to set here
253253
require(
254254
userAddress == reviewerAddresses[0] || userAddress == reviewerAddresses[1],
255-
"colony-task-role-assignment-not-signed-by-new-user-for-role"
255+
"task-role-assign-no-new-user-sig"
256256
);
257257
// Require that signatures are not from the same address
258258
// This will never throw, because we require that manager is one of the signers,
259259
// and if manager is both signers, then `userAddress` must also be a manager, and if
260260
// `userAddress` is a manager, then we require 1 signature (will be kept for possible future changes)
261-
require(reviewerAddresses[0] != reviewerAddresses[1], "colony-task-role-assignment-duplicate-signatures");
261+
require(reviewerAddresses[0] != reviewerAddresses[1], "task-role-assign-duplicate-sigs");
262262
}
263263

264264
tasks[taskId].changeNonce += 1;
265-
require(executeCall(address(this), _value, _data), "colony-task-role-assignment-execution-failed");
265+
require(executeCall(address(this), _value, _data), "task-role-assign-exec-failed");
266266
}
267267

268268
// Permissions pertain to the Administration role here
@@ -302,15 +302,15 @@ contract Tasks is DSMath {
302302
taskComplete(_id)
303303
{
304304
if (_role == TaskRole.Manager) { // Manager rated by worker
305-
require(msg.sender == getTaskRoleUser(_id, TaskRole.Worker), "colony-user-cannot-rate-task-manager");
305+
require(msg.sender == getTaskRoleUser(_id, TaskRole.Worker), "task-user-cannot-rate-manager");
306306
} else if (_role == TaskRole.Worker) { // Worker rated by evaluator
307-
require(msg.sender == getTaskRoleUser(_id, TaskRole.Evaluator), "colony-user-cannot-rate-task-worker");
307+
require(msg.sender == getTaskRoleUser(_id, TaskRole.Evaluator), "task-user-cannot-rate-worker");
308308
} else {
309-
revert("colony-unsupported-role-to-rate");
309+
revert("task-unsupported-role-to-rate");
310310
}
311311

312-
require(sub(now, tasks[_id].completionTimestamp) <= RATING_COMMIT_TIMEOUT, "colony-task-rating-secret-submit-period-closed");
313-
require(ratingSecrets[_id].secret[uint8(_role)] == "", "colony-task-rating-secret-already-exists");
312+
require(sub(now, tasks[_id].completionTimestamp) <= RATING_COMMIT_TIMEOUT, "task-secret-submissions-closed");
313+
require(ratingSecrets[_id].secret[uint8(_role)] == "", "task-secret-already-exists");
314314

315315
ratingSecrets[_id].count += 1;
316316
ratingSecrets[_id].timestamp = now;
@@ -326,18 +326,18 @@ contract Tasks is DSMath {
326326
// Otherwise start the reveal period after the commit period has expired
327327
// In both cases, keep reveal period open for 5 days
328328
if (ratingSecrets[_id].count == 2) {
329-
require(sub(now, ratingSecrets[_id].timestamp) <= RATING_REVEAL_TIMEOUT, "colony-task-rating-secret-reveal-period-closed");
329+
require(sub(now, ratingSecrets[_id].timestamp) <= RATING_REVEAL_TIMEOUT, "task-secret-reveal-closed");
330330
} else {
331331
uint taskCompletionTime = tasks[_id].completionTimestamp;
332-
require(sub(now, taskCompletionTime) > RATING_COMMIT_TIMEOUT, "colony-task-rating-secret-reveal-period-not-open");
333-
require(sub(now, taskCompletionTime) <= add(RATING_COMMIT_TIMEOUT, RATING_REVEAL_TIMEOUT), "colony-task-rating-secret-reveal-period-closed");
332+
require(sub(now, taskCompletionTime) > RATING_COMMIT_TIMEOUT, "task-secret-reveal-not-open");
333+
require(sub(now, taskCompletionTime) <= add(RATING_COMMIT_TIMEOUT, RATING_REVEAL_TIMEOUT), "task-secret-reveal-closed");
334334
}
335335

336336
bytes32 secret = generateSecret(_salt, _rating);
337-
require(secret == ratingSecrets[_id].secret[uint8(_role)], "colony-task-rating-secret-mismatch");
337+
require(secret == ratingSecrets[_id].secret[uint8(_role)], "task-secret-mismatch");
338338

339339
TaskRatings rating = TaskRatings(_rating);
340-
require(rating != TaskRatings.None, "colony-task-rating-missing");
340+
require(rating != TaskRatings.None, "task-rating-missing");
341341
taskRoles[_id][uint8(_role)].rating = rating;
342342

343343
emit TaskWorkRatingRevealed(_id, _role, _rating);
@@ -366,15 +366,15 @@ contract Tasks is DSMath {
366366

367367
function setTaskEvaluatorRole(uint256 _id, address payable _user) public self {
368368
// Can only assign role if no one is currently assigned to it
369-
require(getTaskRoleUser(_id, TaskRole.Evaluator) == address(0x0), "colony-task-evaluator-role-already-assigned");
369+
require(getTaskRoleUser(_id, TaskRole.Evaluator) == address(0x0), "task-evaluator-role-assigned");
370370
setTaskRoleUser(_id, TaskRole.Evaluator, _user);
371371
}
372372

373373
function setTaskWorkerRole(uint256 _id, address payable _user) public self {
374374
// Can only assign role if no one is currently assigned to it
375-
require(getTaskRoleUser(_id, TaskRole.Worker) == address(0x0), "colony-task-worker-role-already-assigned");
375+
require(getTaskRoleUser(_id, TaskRole.Worker) == address(0x0), "task-worker-role-assigned");
376376
uint256[] memory skills = colony.getExpenditureSlot(tasks[_id].expenditureId, uint256(TaskRole.Worker)).skills;
377-
require(skills[0] > 0, "colony-task-skill-not-set"); // ignore-swc-110
377+
require(skills.length > 0 && skills[0] > 0, "task-skill-not-set"); // ignore-swc-110
378378
setTaskRoleUser(_id, TaskRole.Worker, _user);
379379
}
380380

@@ -413,8 +413,8 @@ contract Tasks is DSMath {
413413
address evaluator = getTaskRoleUser(_id, TaskRole.Evaluator);
414414
address worker = getTaskRoleUser(_id, TaskRole.Worker);
415415

416-
require(evaluator == manager || evaluator == address(0x0), "colony-funding-evaluator-already-set");
417-
require(worker == manager || worker == address(0x0), "colony-funding-worker-already-set");
416+
require(evaluator == manager || evaluator == address(0x0), "task-evaluator-already-set");
417+
require(worker == manager || worker == address(0x0), "task-worker-already-set");
418418

419419
this.setTaskManagerPayout(_id, _token, _managerAmount);
420420
this.setTaskEvaluatorPayout(_id, _token, _evaluatorAmount);
@@ -471,7 +471,7 @@ contract Tasks is DSMath {
471471
taskNotComplete(_id)
472472
confirmTaskRoleIdentity(_id, msg.sender, TaskRole.Manager)
473473
{
474-
require(now >= tasks[_id].dueDate, "colony-task-due-date-in-future");
474+
require(now >= tasks[_id].dueDate, "task-due-date-in-future");
475475
tasks[_id].completionTimestamp = now;
476476

477477
emit TaskCompleted(_id);
@@ -643,7 +643,7 @@ contract Tasks is DSMath {
643643
}
644644

645645
function assignWorkRatings(uint256 _id) internal {
646-
require(taskWorkRatingsAssigned(_id) || taskWorkRatingsClosed(_id), "colony-task-ratings-not-closed");
646+
require(taskWorkRatingsAssigned(_id) || taskWorkRatingsClosed(_id), "task-ratings-not-closed");
647647

648648
// In the event of a user not committing/revealing within the rating window,
649649
// their rating of their counterpart is assumed to be the maximum
@@ -668,7 +668,7 @@ contract Tasks is DSMath {
668668
}
669669

670670
function setTaskRoleUser(uint256 _id, TaskRole _role, address payable _user)
671-
private
671+
internal
672672
taskExists(_id)
673673
taskNotComplete(_id)
674674
{
@@ -679,4 +679,12 @@ contract Tasks is DSMath {
679679

680680
colony.setExpenditureRecipient(tasks[_id].expenditureId, uint256(_role), _user);
681681
}
682+
683+
function doesTaskExist(uint256 _id) internal view returns (bool) {
684+
return _id > 0 && _id <= taskCount;
685+
}
686+
687+
function isTaskComplete(uint256 _id) internal view returns (bool) {
688+
return tasks[_id].completionTimestamp > 0;
689+
}
682690
}

0 commit comments

Comments
 (0)