Разбор кода смартконтракта EasyInvest5 и его форков

Разбор кода смартконтракта EasyInvest5 и его форков



Контракт EasyInvest5: 0x6519d6Dfd11363CF0821809b919B55F794fe0cb5

Исходный код: https://etherscan.io/address/0x6519d6Dfd11363CF0821809b919B55F794fe0cb5#code


В данной статье объясняется как работает код смартконтракта EasyInvest5 и его форков


Первой строкой мы объявляем версию компилятора для solidity, в данном случае это версия 0.4.24

Далее идет описание смартконтракта. Это комментарии, они никак не влияют на код



Следующей строчкой, по аналогии с классами, идет название контракта - EasyInvest5. В фигурных скобках заключено тело смартконтракта

Далее идет объявление маппингов (ассоциативных массивов), где ключ - это адрес пользователя. У invested значением является инвестированная сумма в wei (1 wei = 0.000000000000000001 ETH), а у atBlock номер блока транзакции, в которой была совершена прошлая инвестиция.

UPD: Маппинги invested и atBlock стали публичными. Теперь можно легко будет смотреть статистику по своим вкладам через вкладку "Read Contract" в etherscan.


На 29 строчке мы объявляем fallback функцию c публичной областью видимости (external), которая будет вызываться когда кто-то просто переводит ETH на счет контракта (даже если ETH равны нулю). Далее идет тело данной функции


Если инвестор уже инвестировал в контракт, то выполняется этот блок кода (условие проверки на 31 строчке).

На 35 строчке идет подсчет суммы для выплаты инвестору:

Сумма для выплаты = [инвестированный баланс пользователя] * 5 / 100 * ([текущий номер блока] - [номер блока прошлой инвестиции]) / 5900

5900 - Это среднее количество блоков, которые добавляются в блокчейн Ethereum за день

На 38 строчке отправляется выплата инвестору, которую ее запросил (msg.sender = адрес инвестора)

UPD: Метод для отправки транзакций вкладчикам был изменен с send на transfer. В отличии от send, transfer выбрасывает исключение, когда не хватает газа для отправки Ваших дивидентов, а не возвращает false и продолжает выполнение кода. Теперь потенциальный риск потерять свои отчисления при недостаточном gas отсутствуют.


Далее идет запись в маппинги:

В маппинг atBlock по ключу адреса инвестора записываем текущий блок

К маппингу invested по ключу адреса инвестора прибавляем новую инвестированную сумму (msg.value) к текущей (по умолчанию текущая сумма равна нулю)

На 44 строчке закрывается тело fallback функции. На 45 же строчке закрывается тело контракта EasyInvest5

Конец кода

Report Page