Necesito ayuda con un contrato de crowdfunding

Este contrato de crowdfunding está lejos de estar completo, todavía estoy en el proceso de escribir el código y probar cada función individual. El enfoque que adopté con la función getRefund() parece funcionar perfectamente; sin embargo, me preocupa un poco que haya posibles colisiones, ya que asigné todas las direcciones de los inversores a la cantidad de ETH enviada al contrato. ¿Es posible que la dirección A y la dirección B se asignen al mismo índice dentro del mapeo? Si es así, ¿no significaría esto que si la dirección A reclamara un reembolso, la dirección A no obtendría también los fondos que se enviaron desde la dirección B?

pragma solidity ^0.4.0;

contract Crowdfunding {

    address private owner;

    mapping (address => uint) investors;

    //Constructor
    function Crowdfunding() {
        owner = msg.sender;
    }

    //Modifiers
    modifier investorsOnly {
        if(investors[msg.sender] == 0) throw;
        _;
    }

    //Events
    event PaymentReceived(uint Amount, address From, address To);
    event WithdrawalClaimed(uint Amount, address From);

    //Functions
    function() payable {
        investors[msg.sender] += msg.value;
        PaymentReceived(msg.value, msg.sender, this);
    }

    function withdrawFunds() {
        suicide(owner);
    }

    function getRefund() investorsOnly {
        uint amount = investors[msg.sender];
        investors[msg.sender] = 0;
        msg.sender.transfer(amount);
        WithdrawalClaimed(amount, msg.sender); 
    }
}

Respuestas (2)

¿Es posible que la dirección A y la dirección B se asignen al mismo índice dentro del mapeo?

No, no es posible porque con el mapeo defines un vínculo único entre la dirección y la cantidad aportada. Por lo tanto, el proceso de reembolso debería realizarse sin problemas. Para colisionar 2 direcciones deben tener la misma clave privada, y esto es casi imposible.

Consejo: use revert() en lugar de throw, eso está en desuso.

Además, el costo del gas de la función de respaldo debe ser inferior a 2300:

Asegúrese de probar su función alternativa a fondo para asegurarse de que el costo de ejecución sea inferior a 2300 de gas antes de implementar un contrato.

Muchas gracias por su ayuda. Ahora probé la función de respaldo y la tarifa estimada es de 42,980 de gasolina. No estoy muy seguro de cómo bajar esto. ¿Tienes alguna sugerencia?
Estoy tratando de resolver esto también

Desde aquí _

"La forma en que se generan las claves privadas significa que hay un" 2160 o aproximadamente 1 en 1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976 "de dos claves privadas en colisión. Como tal, en todos los sentidos y propósitos, las direcciones son únicas".