Этот краудфандинговый контракт далек от завершения, я все еще нахожусь в процессе написания кода и тестирования каждой отдельной функции. Подход, который я использовал с функцией getRefund(), кажется, работает отлично, однако я немного обеспокоен потенциальными коллизиями, поскольку я сопоставил все адреса инвесторов с количеством ETH, отправленным в контракт. Возможно ли, чтобы адрес A и адрес 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);
}
}
Возможно ли, чтобы адрес A и адрес B сопоставлялись с одним и тем же индексом в сопоставлении?
Нет, это невозможно, потому что при сопоставлении вы определяете уникальную связь между адресом и внесенной суммой. Так что процесс возврата должен пройти без проблем. Чтобы столкнуться 2 адреса должны иметь одинаковый приватный ключ, а это практически невозможно.
Совет: используйте revert() вместо throw, это устарело.
Кроме того, стоимость газа для резервной функции должна быть ниже 2300:
Пожалуйста, убедитесь, что вы тщательно протестировали свою резервную функцию, чтобы убедиться, что стоимость выполнения составляет менее 2300 газа, прежде чем развертывать контракт.
Отсюда . _
«Способ генерации закрытых ключей означает, что существует «2160 или около 1 из 1 461 501 637 330 902 918 203 684 832 716 283 019 655 932 542 976» двух столкновений закрытых ключей. Таким образом, адреса во всех отношениях уникальны».
Зенос Павлаку
Паоло Герра