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);
}
}
¿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.
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".
Zenós Pavlakou
paolo guerra