Разбор кода краудфандинга. Часть 2
В самом начале создаются переменные: продолжительность, цель, взнос, id, организатор, родительский контракт и статус исполнения.
Родительский контракт нам тут потребуется для того, чтобы вызвать там функцию onClaimed(), в случае успешного сбора средств в текущей кампании.
Далее создаем mapping, куда записываем информацию о взносах.
В конструкторе получаем необходимые аргументы из родительского контракта и записываем значения в переменные.
Функция pledge() позволяет сторонним пользователям делать взносы. Тут нужны проверки на продолжительность кампании и размер взноса, чтобы он не был нулевым. В конце просто добавляем записи в mapping.
refundPledge() - позволяет забрать свой взнос пользователю. Однако нужны проверки, чтобы он не забрал больше, чем внес (в контракте этого нет) и чтобы кампания не была закончена.
Функция claim() может вызывать только создатель кампании в случае ее успеха. Тут устанавливается статус, выполняется перевод на счет организатора и вызывается функция onClaimed() в родительском контракте.
Также есть fullRefund(), которую, по сути, также должен вызывать только организатор, или она должна выполняться автоматически по прошествии времени, в случае неудачи сбора средств. Она возвращает деньги всем пользователям, кто ранее совершал взнос.
Вот и все. Достаточно простые контракты. Надеюсь, вы также смогли быстро в них разобраться. Далее перейдем к тестам.
#croudfunding
Post #342
151
- 👍 1