¿Qué hacer con los contratos inteligentes para evitar ataques de repetición?

Estoy tratando de escribir un contrato inteligente para Crowdsale. ¿Qué medidas adicionales se deben tener en cuenta durante el desarrollo de contratos inteligentes para evitar ataques de repetición (después de la bifurcación dura del bloque 1,920,000)?

¿Qué contrato estás escribiendo y cuál es tu preocupación?
He agregado en mi pregunta.
Probablemente todavía sea demasiado amplio, pero lo volveré a abrir (también puede hacer clic en "reabrir" en el futuro). Recuerde, cuanto mejor sea la pregunta, mejores serán las respuestas que probablemente obtendrá.
Gracias. En realidad, soy nuevo en esta tecnología y estoy trabajando con testnet, por lo que hacer una pregunta es la única forma de estar completamente preparado antes de usar Livenet.

Respuestas (1)

Cuando un usuario envía una transacción a su contrato usando Ethereum (ETH), si ese usuario también tiene ETC en la misma cuenta en Ethereum Classic Blockchain (ETC), entonces esa transacción podría reproducirse en Ethereum Classic Blockchain (ETC) con inesperado resultados.

Para evitar esto, puede cargar su contrato en ambas Blockchains con un modificador en sus funciones que arroja una excepción cuando se ejecuta en Ethereum Classic Blockchain (ETC).

Ejemplo:

contract AmIOnTheFork {
    function forked() constant returns(bool);
}

contract YOUR_CONTRACT{
    // Fork oracle to use
    AmIOnTheFork amIOnTheFork = AmIOnTheFork(0x2bd2326c993dfaef84f696526064ff22eba5b362);

    // Only allows execution in the forked chain (ETH)
    modifier only_eth_chain() {
        if (!amIOnTheFork.forked()) throw;
        _
    }

    function your_function()
        only_eth_chain()
    {
      // YOUR_FUNCTION_CODE
    }
}

De esta forma, si tu usuario quiere ejecutar la your_functionfunción, enviará una transacción en el Ethereum Blockchain (ETH). Esa transacción se ejecutará como de costumbre, pero si la transacción se reproduce en Ethereum Classic Blockchain (ETC), la transacción reproducida no se aceptará y se devolverá el ETC enviado.