@@ -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 */
2425contract 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