Fragmento de código erc20 de contrato inteligente para evitar transferencias de tokens de compradores

Voy a iniciar una preventa de tokens y quiero poder enviar los tokens al comprador pero evitar que el comprador envíe tokens a otra billetera.

Intenté lo siguiente en mi contrato inteligente ERC20, pero en realidad me impidió a mí mismo, el creador del contrato, transferir tokens. Necesito poder enviar tokens a los compradores y evitar que los compradores transfieran tokens hasta cierto momento en el futuro.

aquí está el contrato de contrato inteligente de prueba: https://etherscan.io/address/0x5783f4e4a1bec72f41f246c50ba3d06265d984a6#code

función de transferencia (dirección _a, uint _valor) public { require( now > 1514764800 ); /* Resto de la función */ }

Puede encontrar un ejemplo completo aquí github.com/TokenMarketNet/ico/blob/master/contracts/…

Respuestas (2)

Puedes hacerlo.

modifier notPaused {
    require(now > 1514764800  || msg.sender == owner);
    _;
}

function transfer(address to, uint256 amount) public notPaused returns(bool) {
    //rest of function
}
No he implementado ninguna función IcoDuration, por lo que podría no funcionar en mi caso. Estoy usando un contrato inteligente de token ERC20 estándar y básico. ¿Puede especificar en esta casa cómo puedo agregar la función IcoDuration? Aquí está el contrato de prueba: etherscan.io/address/…
Simplemente cambie ahora> IcoDuration a ahora> 1514764800. IcoDuration no es una función, es solo un ejemplo de un campo o variable que contiene la duración de su contrato.
ok, lo pruebo y te aviso! gracias de antemano ;)
También necesitará una variable de tipo dirección llamada propietario que contendrá su dirección.
Intenté agregar este fragmento de código, pero recibo un error de compilación (identificador no declarado), por lo que no puedo implementar el contrato. ¿Podría verificar la dirección del contrato y decirme dónde debo agregar exactamente el código que proporcionó? Gracias por adelantado
Por favor, ¿puedes mostrarme el código? ¿Ha declarado propietario?
//this is where you declare the identifier owner

address owner;

//whith this modifier, only you can call the transfer function 
//when now <= 1514764800.

modifier notPaused{
    require(now > 1514764800 || msg.sender == owner);
    _;
}

//the identifier owner is initialized once the contract is deployed and 
//set to the address of the message sender. Note that this should be in 
//the constructor of the contract, which is always the function with the
//same name as the contract.

function ERC20Token() {
    owner  = msg.sender;
    //rest of constructor
}

//by adding notPaused here, the function will only successfully execute when
//A: you the owner call the function before or after the block 1514764800 or
//B: when anyone else calls the the function after the block 1514764800

function transfer(address to, uint256 amount) public notPaused returns (bool) {
    //rest of function
}
Bueno, gracias, pero eso ha hecho que sea un poco más difícil agregar el código correcto en el lugar correcto. Realmente no soy un experto en contratos inteligentes y trato de copiar y pegar instrucciones y fragmentos de código, pero esto está un poco fuera de mi alcance por ahora...
Acabo de hacer los cambios que quieres. ¿Hay alguna manera de que pueda enviarle el contrato en un mensaje privado?