Skip to content

Commit 91378ad

Browse files
Merge pull request #322 from unknownunknown1/master
refactor(LinguoToken.sol): follow check-effect-interaction pattern
2 parents 52c5bfc + f5047d1 commit 91378ad

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

contracts/standard/arbitration/LinguoToken.sol

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";
2020
* This version of the contract made for ERC-20 tokens support.
2121
* NOTE: This contract trusts that the Arbitrator is honest and will not reenter or modify its costs during a call.
2222
* The arbitrator must support appeal period.
23+
* Also note that this contract trusts that the tokens will not allow the recipients to block the transfers.
2324
*/
2425
contract LinguoToken is Arbitrable {
2526

@@ -260,15 +261,15 @@ contract LinguoToken is Arbitrable {
260261
task.parties[uint(Party.Translator)] = msg.sender;
261262
task.status = Status.Assigned;
262263

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

269-
remainder = msg.value - translatorDeposit;
268+
uint remainder = msg.value - translatorDeposit;
270269
msg.sender.send(remainder);
271270

271+
remainder = task.maxPrice.subCap(price);
272+
require(task.token.transfer(task.requester, remainder), "Could not transfer tokens to the requester.");
272273
emit TaskAssigned(_taskID, msg.sender, price, now);
273274
}
274275

@@ -300,8 +301,8 @@ contract LinguoToken is Arbitrable {
300301
task.requesterDeposit = 0;
301302
task.sumDeposit = 0;
302303
// 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.");
304304
task.requester.send(sumDeposit);
305+
require(task.token.transfer(task.requester, requesterDeposit), "The token transfer was unsuccessful.");
305306

306307
emit TaskResolved(_taskID, "requester-reimbursed", now);
307308
}
@@ -320,9 +321,9 @@ contract LinguoToken is Arbitrable {
320321
uint sumDeposit = task.sumDeposit;
321322
task.requesterDeposit = 0;
322323
task.sumDeposit = 0;
323-
require(task.token.transfer(translator, requesterDeposit), "The token transfer was unsuccessful.");
324324
translator.send(sumDeposit);
325-
325+
require(task.token.transfer(translator, requesterDeposit), "The token transfer was unsuccessful.");
326+
326327
emit TaskResolved(_taskID, "translation-accepted", now);
327328
}
328329

@@ -519,17 +520,17 @@ contract LinguoToken is Arbitrable {
519520
task.sumDeposit = 0;
520521

521522
if(_ruling == uint(Party.None)){
522-
require(task.token.transfer(task.requester, task.requesterDeposit), "Could not transfer tokens to requester.");
523523
// The value of sumDeposit is split among parties in this case. If the sum is uneven the value of 1 wei can be burnt.
524524
sumDeposit = sumDeposit / 2;
525525
task.parties[uint(Party.Translator)].send(sumDeposit);
526526
task.parties[uint(Party.Challenger)].send(sumDeposit);
527+
require(task.token.transfer(task.requester, requesterDeposit), "Could not transfer tokens to requester.");
527528
} else if (_ruling == uint(Party.Translator)) {
528-
require(task.token.transfer(task.parties[uint(Party.Translator)], requesterDeposit), "Could not transfer tokens to translator.");
529529
task.parties[uint(Party.Translator)].send(sumDeposit);
530+
require(task.token.transfer(task.parties[uint(Party.Translator)], requesterDeposit), "Could not transfer tokens to translator.");
530531
} else {
531-
require(task.token.transfer(task.requester, requesterDeposit), "Could not transfer tokens to requester.");
532532
task.parties[uint(Party.Challenger)].send(sumDeposit);
533+
require(task.token.transfer(task.requester, requesterDeposit), "Could not transfer tokens to requester.");
533534
}
534535

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

0 commit comments

Comments
 (0)