Skip to content

Commit 260bee8

Browse files
refactor(LinguoToken.sol): follow check-effect-interaction pattern
1 parent 52c5bfc commit 260bee8

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

contracts/standard/arbitration/LinguoToken.sol

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -260,15 +260,15 @@ contract LinguoToken is Arbitrable {
260260
task.parties[uint(Party.Translator)] = msg.sender;
261261
task.status = Status.Assigned;
262262

263-
uint remainder = task.maxPrice.subCap(price);
264-
require(task.token.transfer(task.requester, remainder), "Could not transfer tokens to the requester.");
265263
// Update requester's deposit since we reimbursed him the difference between maximal and actual price.
266264
task.requesterDeposit = price;
267265
task.sumDeposit += translatorDeposit;
268266

269-
remainder = msg.value - translatorDeposit;
267+
uint remainder = msg.value - translatorDeposit;
270268
msg.sender.send(remainder);
271269

270+
remainder = task.maxPrice.subCap(price);
271+
require(task.token.transfer(task.requester, remainder), "Could not transfer tokens to the requester.");
272272
emit TaskAssigned(_taskID, msg.sender, price, now);
273273
}
274274

@@ -300,8 +300,8 @@ contract LinguoToken is Arbitrable {
300300
task.requesterDeposit = 0;
301301
task.sumDeposit = 0;
302302
// Requester gets his deposit back and also the deposit of the translator, if there was one. Note that sumDeposit can't contain challenger's deposit until the task is in DisputeCreated status.
303-
require(task.token.transfer(task.requester, requesterDeposit), "The token transfer was unsuccessful.");
304303
task.requester.send(sumDeposit);
304+
require(task.token.transfer(task.requester, requesterDeposit), "The token transfer was unsuccessful.");
305305

306306
emit TaskResolved(_taskID, "requester-reimbursed", now);
307307
}
@@ -320,9 +320,9 @@ contract LinguoToken is Arbitrable {
320320
uint sumDeposit = task.sumDeposit;
321321
task.requesterDeposit = 0;
322322
task.sumDeposit = 0;
323-
require(task.token.transfer(translator, requesterDeposit), "The token transfer was unsuccessful.");
324323
translator.send(sumDeposit);
325-
324+
require(task.token.transfer(translator, requesterDeposit), "The token transfer was unsuccessful.");
325+
326326
emit TaskResolved(_taskID, "translation-accepted", now);
327327
}
328328

@@ -519,17 +519,19 @@ contract LinguoToken is Arbitrable {
519519
task.sumDeposit = 0;
520520

521521
if(_ruling == uint(Party.None)){
522-
require(task.token.transfer(task.requester, task.requesterDeposit), "Could not transfer tokens to requester.");
523522
// The value of sumDeposit is split among parties in this case. If the sum is uneven the value of 1 wei can be burnt.
524523
sumDeposit = sumDeposit / 2;
525524
task.parties[uint(Party.Translator)].send(sumDeposit);
526525
task.parties[uint(Party.Challenger)].send(sumDeposit);
526+
// When using a token of the advanced standard (ERC777 etc) the requester can revert this function and prevent fee reimbursement.
527+
// This is not an issue however, because "0" ruling is an edge case.
528+
require(task.token.transfer(task.requester, requesterDeposit), "Could not transfer tokens to requester.");
527529
} else if (_ruling == uint(Party.Translator)) {
528-
require(task.token.transfer(task.parties[uint(Party.Translator)], requesterDeposit), "Could not transfer tokens to translator.");
529530
task.parties[uint(Party.Translator)].send(sumDeposit);
531+
require(task.token.transfer(task.parties[uint(Party.Translator)], requesterDeposit), "Could not transfer tokens to translator.");
530532
} else {
531-
require(task.token.transfer(task.requester, requesterDeposit), "Could not transfer tokens to requester.");
532533
task.parties[uint(Party.Challenger)].send(sumDeposit);
534+
require(task.token.transfer(task.requester, requesterDeposit), "Could not transfer tokens to requester.");
533535
}
534536

535537
emit TaskResolved(taskID, "dispute-settled", now);

0 commit comments

Comments
 (0)