¿Cómo hacer que los tokens ERC20 no sean transferibles hasta una fecha determinada?

Quiero crear un token que no se pueda vender ni transferir hasta una fecha específica (para que solo los compradores iniciales puedan comprar tokens, pero no deben vender tokens hasta que se complete la ICO), ¿cuál sería la mejor manera de hacerlo?

Por ejemplo, si tuviera que implementar algo como

if(msg.sender != owner){
   require(now >= endOfICO);
}

dentro de la función de transferencia, ¿sería eso aceptable, o incluso utilizable?

Muchas gracias por cualquier ayuda o consejo, o incluso enlaces a otras discusiones, ya que no puedo encontrar información sobre cómo incorporar bloqueos basados ​​en el tiempo en las transferencias.

Respuestas (3)

Sí, puedes hacerlo. Pero debe obtener la aprobación del intercambio, si al intercambio le gusta su documento técnico/idea. Luego, el intercambio enumerará su token. Antes de implementar en la red principal. Mejor consulte algún intercambio y diga lo mismo (pueden comprar tokens, pero deberían vender tokens hasta que ICO se complete). Supongo que la mayoría de los tokens están haciendo lo mismo. Pero es mejor obtener la confirmación del intercambio.

Pero le sugiero que use el modificador para verificar la condición. Porque le dará más legibilidad y reutilización.

Adjunto un fragmento de código de muestra para el mismo:

modifier isICOCompleted() {
    require(now >= endOfICO);
    _;
}

modifier isContractOwner() {
    require(msg.sender == owner);
    _;
}

function transfer(address _to, uint _amount) isICOCompleted public {
    //Implement your logic
}
Es muy raro que un token se incluya en un intercambio justo después de su ICO. Por lo general, ocurre al revés: se organiza una ICO de token, tiene éxito y, después de un largo tiempo de crecimiento y atención, puede ser aceptada en un intercambio.

1) Su idea es correcta: solo requiere que la marca de tiempo actual sea posterior a la hora deseada

2) Cree un modificador que haga la verificación

3) Use el modificador en las funciones de envío/transferencia para restringir su uso

No hay nada lujoso o secreto en lidiar con las limitaciones de tiempo que yo sepa. Solo necesita ser codificado.

¿Quizás incluso desea que el tiempo deseado sea modificable? Agregue una función para el propietario que cambie la variable.

  1. ¿Hay alguna forma de que el propietario del contrato mueva los tokens? Manténgalos descongelados en todo momento para compartirlos con los miembros del equipo, lanzamientos desde el aire, etc.

    a. tener tokens lanzados desde el aire congelados hasta el final de la ICO (digamos el 30 de marzo de 2018)... mientras tanto
    b. miembros del equipo congelados hasta una fecha determinada, digamos 730 días después de que finalice la ICO
    c. tener asesores congelados durante 180 días después de que finalice la ICO

  2. tener tokens de venta pública congelados hasta la misma fecha que los tokens lanzados desde el aire...

  3. Entonces, ¿dónde agrego la marca de tiempo? ¿Hice esto correctamente?

Mi código :

modifier isICOCompleted() {
  require(now >= March 30, 2018);
  _;
}

modifier isContractOwner() {
  require(msg.sender == owner);
  _;
}

function transfer(address _to, uint _amount) isICOCompleted public {
  //Implement your logic
}