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)?
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_function
funció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.
ética
Aniket
ética
Aniket