@@ -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