Пришло время познакомиться с mappings. Это своего рода словари для связывания уникальных ключей с соответствующими значениями. Может звучать запутанно, поэтому постарайся запомнить, что это набор пар, например, Адрес кошелька -> Баланс, только вместо таких параметров мы можем использовать что угодно.
Крайне полезная вещь, когда нужно хранить данные о пользователях, например, их очки в гильдии. В коде mapping объявляется так: mapping(address => uint256) public memberPoints;, где address - это ключ, а uint256 - значение.
Mappings можно использовать не только для хранения значений, но и для проверок. Если у адреса уже есть points, значит он уже вступал в гильдию.
В этом уроке join flow должен отклонять повторную регистрацию, а затем записывать стартовые points для нового участника.
Почему это важно
Контракт должен защищать правила нашей гильдии. Без такой проверки один пользователь мог бы добавляться несколько раз и получать бонус повторно, а гильдия не должна разориться!
Ваша цель
Добавьте в joinGuild проверку, которая требует, чтобы memberPoints[msg.sender] был равен 0, а затем сохраните entryBonus в memberPoints[msg.sender].