Cómo enviar tokens ERC20 desde contrato

Creé un contrato de depósito en garantía y quiero que el "depósito" esté en mi propio token ERC20, así que envié los tokens ERC20 a la dirección del contrato. El contrato se puede ver a continuación:

 pragma solidity ^0.4.4;
 contract Escrow {

 address public challenger;
 address public participant;
 address public arbiter;

 function Escrow(address _participant, address _arbiter) {
   challenger = msg.sender;
   participant = _participant;
   arbiter = _arbiter;
 }

 function payoutToParticipant() {
   if(msg.sender == challenger || msg.sender == arbiter) {
     participant.send(this.balance);
   }
 }

 function refundToChallenger() {
   if(msg.sender == challenger || msg.sender == arbiter) {
     challenger.send(this.balance);
   }
 }

 function getBalance() constant returns (uint) {
   return this.balance;
 }

}

Después de enviar los tokens a la dirección, ¿simplemente llamo payoutToParticipant() desde el retador o el árbitro para enviar los tokens? ¿O simplemente enviará el 0 ETH? Además, ¿por qué el contrato no tiene que firmar la transacción como lo haría un usuario?

Gracias

Respuestas (1)

.send()La función envía Ethereum desde el saldo del contrato, no tokens. Por lo tanto, debe llamar a transferla función de token.

También le aconsejo que siempre send()funcione dentro require()porque send()no arroja una excepción y su proceso de depuración podría ser más difícil.

Además, ¿por qué el contrato no tiene que firmar la transacción como lo haría un usuario?

Porque el contrato no puede ejecutar sus propias funciones por sí mismo. Todas las funciones se pueden activar solo cuando el usuario real envía una transacción firmada con datael campo correcto (contiene información sobre la función de llamada y los argumentos) a la red Ethereum.

Muy bien, gracias, necesito cambiar el código de 'challenger.send(this.balance);' a la transferencia de llamada en el contrato. Ok eso tiene algo de sentido! Gracias :)