Skip to content

Смарт-контракт на Ethereum (ERC-20) с стейкингом 🔒 и автоматическими вознаграждениями 💸. Для пассивного дохода и долгосрочных инвестиций 📈💰.

License

Notifications You must be signed in to change notification settings

elstrm2/CFitToken

Repository files navigation

CFITTOKEN 📄🚀

✨ Общее описание проекта

CFITTOKEN — это усовершенствованный смарт-контракт на платформе Ethereum, реализующий стандарт ERC-20 с дополнительными возможностями стейкинга и механизмами автоматического начисления вознаграждений при блокировке токенов. Проект ориентирован на пользователей, стремящихся к пассивному доходу через долгосрочные инвестиции и участие в стейкинге.

🔍 Основные возможности проекта

  • ERC-20 токен под названием CFITTOKEN с символом CFIT 🪙
  • Стейкинг токенов на период от 1 дня до 365 дней с автоматическим начислением вознаграждений 📅
  • Механизмы награждения, основанные на продолжительности блокировки и количестве стейканных токенов 💎
  • Полный функционал для перевода токенов между аккаунтами и вывода средств после завершения периода блокировки 🔄

🏗️ Ключевые функции

  • ERC-20 стандартизация: обеспечивает совместимость токена с экосистемой Ethereum и поддерживает базовые операции, такие как переводы, проверка баланса и управление одобрениями 🔗
  • Механизм стейкинга: позволяет пользователям блокировать свои токены на заданный срок и получать вознаграждения пропорционально времени и объему блокировки 📈
  • Безопасные транзакции: все операции защищены проверками и механизмами предотвращения ошибок, обеспечивая надежность и безопасность 🔒
  • Оптимизация газовых затрат: контракт спроектирован для минимизации расходов на газ, что делает его использование экономически выгодным 💰

⚙️ Технологии и инструменты

📚 Основные технологии

  • Solidity 0.8.28: современный язык программирования для разработки смарт-контрактов на платформе Ethereum 💻
  • Hardhat: мощный фреймворк для разработки, тестирования и деплоя смарт-контрактов в локальной Ethereum-сети 🛠️
  • OpenZeppelin: проверенная временем библиотека стандартных контрактов, включая ERC-20 и Ownable, обеспечивающая безопасность и стандартизацию 🏰
  • Ethers.js: лёгкая и функциональная JavaScript библиотека для взаимодействия с Ethereum 🌐

🛠️ Используемые библиотеки и фреймворки

  • @openzeppelin/contracts (v4.9.3): предоставляет стандартизированные реализации ERC-20 и механизмов управления доступом через Ownable 📦
  • ethers (v6.13.4): используется для взаимодействия с контрактами на блокчейне Ethereum ⚡
  • hardhat (v2.22.17): служит основным инструментом для разработки, тестирования и деплоя смарт-контрактов 🔨

🖥️ Конфигурация сети

  • Hardhat Network: локальная сеть для тестирования и разработки, обеспечивающая быстрый цикл разработки 🌐
  • Ethereum Mainnet: основная сеть Ethereum для развертывания контракта после успешного тестирования 🌍

📦 Директории и файлы проекта

  • contracts/CFITTOKEN.sol: основной смарт-контракт, реализующий токен и логику стейкинга 📝
  • scripts/deploy.js: скрипт для деплоя контракта в выбранную сеть 🚀
  • scripts/interact.js: скрипт для взаимодействия с контрактом — переводы, стейкинг и вывод средств 🔄
  • test/CFITTOKEN.js: набор тестов для проверки корректности работы контракта 🧪
  • hardhat.config.js: конфигурационный файл Hardhat для настройки Solidity и сетевых параметров ⚙️
  • package.json: файл зависимостей проекта 📋

💡 Описание работы контракта

Контракт CFITTOKEN наследует стандарты ERC-20 и Ownable из библиотеки OpenZeppelin, обеспечивая базовую функциональность токена и управление доступом.

📜 Структура данных

Stake: структура, представляющая отдельный стейк пользователя, содержащая:

  • amount: количество заблокированных токенов 💰
  • timestamp: время создания стейка ⏰
  • lockDuration: продолжительность блокировки в секундах 🔒

🛠️ Функции контракта

transferTokens(address to, uint256 amount)

  • Позволяет пользователям переводить токены другим адресам 🔄
  • Использует внутреннюю функцию transfer стандарта ERC-20 💫

stake(uint256 amount, uint256 lockDuration)

  • Позволяет пользователям блокировать свои токены на определённый срок 🔒
  • Проверяет достаточность баланса пользователя и корректность срока блокировки (от 1 до 365 дней) ✅
  • Переводит токены в контракт и сохраняет информацию о стейке 📝
  • Генерирует событие Staked 🎉

withdrawStake(uint256 stakeIndex)

  • Позволяет пользователям выводить свои стейки после завершения срока блокировки 💸
  • Проверяет валидность индекса стейка и завершение срока блокировки ✅
  • Рассчитывает вознаграждение по формуле: reward = (amount _ 10 _ lockDuration) / (365 days * 100) 🧮
  • Переводит обратно пользователю сумму стейка и вознаграждение 💰
  • Генерирует событие Withdrawn 🎉
  • Удаляет стейк из массива пользователя для оптимизации хранения данных 🗑️

getStakeCount(address user)

  • Возвращает количество стейков у указанного пользователя 📊

getStake(address user, uint256 stakeIndex)

  • Возвращает детали конкретного стейка пользователя по индексу 📋

📈 Технические особенности

Безопасность

  • Использование проверок require для обеспечения корректности операций и предотвращения ошибок 🛡️
  • Наследование от Ownable позволяет ограничить доступ к определённым функциям владельцем контракта 🔐

Масштабируемость

  • Поддержка множественных стейков для одного пользователя 📈
  • Эффективное управление стейками через замену удаляемого стейка последним элементом массива, что минимизирует затраты на газ ⚡

Оптимизация газовых затрат

  • Минимизация операций хранения и обновления данных для снижения расходов на газ 💰
  • Использование эффективных структур данных и алгоритмов для обработки стейков 🔧

🏗️ Деплой и тестирование

1. Установка зависимостей

Для начала работы с проектом выполните команду для установки всех зависимостей:

npm install

2. Запуск локальной сети

Для деплоя и тестирования контракта используется локальная сеть, запущенная через Hardhat Network. Для старта локальной сети выполните:

npx hardhat node

После этого локальная сеть будет доступна на порту 8545.

3. Деплой контракта

Для деплоя контракта на локальную сеть используйте следующий скрипт:

npx hardhat run scripts/deploy.js --network localhost

Описание deploy.js

Скрипт deploy.js отвечает за деплой контракта CFITTOKEN. Он выполняет следующие шаги:

  1. Инициализация:
  • Получает аккаунт деплойера 👤
  • Выводит адрес деплойера 📝
  1. Развертывание контракта:
  • Создаёт фабрику контракта CFITTOKEN 🏭
  • Устанавливает начальное предложение токенов (initialSupply), например, 2000 CFI 💰
  • Деплоит контракт и ожидает завершения транзакции ✅
  1. Сохранение адреса контракта:
  • После успешного деплоя сохраняет адрес контракта в файл contract-address.json для последующего взаимодействия 💾
  1. Обработка ошибок:
  • В случае ошибки выводит сообщение и завершает процесс ❌

Пример параметров:

  • initialSupply: 2000 CFI (с учётом 18 десятичных знаков) 💎

4. Тестирование контракта

Для запуска тестов и проверки корректности работы функций выполните:

npx hardhat test

🧪 Основные категории тестов:

Тесты написаны с использованием библиотеки Chai и фреймворка Mocha для обеспечения корректности работы функций контракта.

🚀 Deployment Tests

  • Проверка владельца контракта: Убедиться, что контракт инициализируется с правильным владельцем
  • Проверка начального баланса: Убедиться, что владелец получает правильное количество начальных токенов

🔄 Transaction Tests

  • Перевод токенов между аккаунтами: Проверить, что токены корректно переводятся от одного пользователя к другому
  • Отказ при недостаточном балансе: Убедиться, что транзакции отклоняются, если у отправителя недостаточно токенов

⏳ Staking Tests

  • Возможность стейкинга токенов: Проверить, что пользователи могут успешно стейкать токены при соблюдении условий
  • Расчёт наград: Убедиться, что вознаграждения рассчитываются корректно при выводе стейка
  • Невозможность вывода до завершения блокировки: Проверить, что попытки вывода стейка до окончания срока блокировки отклоняются
  • Корректность работы с несколькими стейками: Убедиться, что контракт корректно обрабатывает несколько стейков от одного пользователя
  • Обработка пустых стейков: Проверить, что попытки вывода несуществующих стейков корректно обрабатываются

❌ Negative Tests

  • Вывод до завершения блокировки: Проверить, что контракт отклоняет вывод стейка до окончания срока блокировки
  • Неправильный индекс стейка: Убедиться, что контракт корректно обрабатывает попытки вывода стейков по несуществующим индексам

📊 Пример теста стейкинга:

it("Should allow users to stake tokens", async function () {
  await cfiToken.transfer(addr1.address, ethers.parseUnits("100", 18));
  await cfiToken.connect(addr1).stake(ethers.parseUnits("50", 18), 30 * 24 * 60 * 60);

  const stakeCount = await cfiToken.getStakeCount(addr1.address);
  expect(stakeCount).to.equal(1);

  const stake = await cfiToken.getStake(addr1.address, 0);
  expect(stake.amount).to.equal(ethers.parseUnits("50", 18));
  expect(stake.lockDuration).to.equal(30 * 24 * 60 * 60);
});

5. Взаимодействие с контрактом

С помощью interact.js вы можете выполнять различные действия с контрактом:

  • Переводить токены между пользователями 🔄
  • Стейкать токены и проверять баланс стейков 📊
  • Выводить свои токены и получать вознаграждения после окончания срока блокировки 💰

Для взаимодействия выполните следующий скрипт:

node scripts/interact.js

Описание interact.js

Скрипт interact.js обеспечивает взаимодействие с развернутым контрактом CFITTOKEN. Основные шаги скрипта:

Инициализация:

  • Получает аккаунты (owner, addr1, addr2) 👥
  • Подключается к контракту по сохранённому адресу из contract-address.json 🔗

Проверка балансов:

  • Выводит текущие балансы владельца и других аккаунтов 💰

Переводы токенов:

  • Переводит 100 CFI от владельца к addr1 💸
  • Переводит 1000 CFI от владельца к контракту для покрытия наград 🎁

Стейкинг:

  • addr1 стейкает 50 CFI на 30 дней 📈
  • Выводит информацию о стейке 📋

Увеличение времени:

  • Имитирует прохождение времени на 30 дней для тестирования вывода стейка ⏳

Вывод стейка:

  • addr1 выводит стейк и получает вознаграждение 💎
  • Проверяет обновлённые балансы 📊

Обработка ошибок:

  • Выводит ошибки при возникновении исключений ❌

🧑‍💻 Как пользователи могут взаимодействовать с контрактом

Через скрипты

Перевод токенов:

  • Используйте функцию transferTokens для отправки токенов другому адресу
  • Пример: await cfiToken.transferTokens("адрес_получателя", количество);

Стейкинг токенов:

  • Используйте функцию stake для блокировки токенов на определённый срок
  • Пример: await cfiToken.stake(количество, длительностьблокировкив_секундах);

Вывод стейка:

  • Используйте функцию withdrawStake для вывода заблокированных токенов и вознаграждений после окончания срока блокировки
  • Пример: await cfiToken.withdrawStake(индекс_стейка);

Через пользовательский интерфейс

Если в будущем планируется разработка пользовательского интерфейса, пользователи смогут взаимодействовать с контрактом через веб-приложение, предоставляющее удобные формы для переводов, стейкинга и вывода средств.

Через консольные команды

Используя ethers.js или другие библиотеки, пользователи могут писать собственные скрипты для взаимодействия с контрактом, интегрируя его в свои приложения или автоматизируя процессы.

🏆 Заключение

Проект CFITTOKEN представляет собой надёжный и функциональный смарт-контракт, объединяющий стандарт ERC-20 и продвинутую систему стейкинга. Контракт предоставляет пользователям возможность не только управлять токенами, но и получать вознаграждения за их долгосрочное хранение, стимулируя устойчивые и выгодные инвестиции.

Проект тщательно протестирован, деплоится и используется на платформе Ethereum с помощью Hardhat и OpenZeppelin, обеспечивая безопасность и эффективность.

🌟 Преимущества проекта:

  • Безопасность: Надежные проверки и стандартизированные контракты обеспечивают защиту средств пользователей
  • Гибкость: Возможность выбора срока стейкинга и соответствующих вознаграждений
  • Прозрачность: Все операции и состояния стейков доступны для проверки, обеспечивая доверие пользователей
  • Экономическая эффективность: Оптимизация газовых затрат делает использование контракта доступным и выгодным

🚀 Удачи в стейкинге! Пусть ваши инвестиции растут вместе с CFITTOKEN! 🌱💰

Контакты и поддержка

Если у вас возникли вопросы или предложения, пожалуйста, свяжитесь с нами через GitHub Issues или напишите на [email protected].

Лицензия

Этот проект лицензирован под лицензией MIT. См. LICENSE для подробностей.

🔗 Ссылки


Спасибо за использование CFITTOKEN! Мы постоянно работаем над улучшением нашего продукта и ценим вашу поддержку. 🙏✨

About

Смарт-контракт на Ethereum (ERC-20) с стейкингом 🔒 и автоматическими вознаграждениями 💸. Для пассивного дохода и долгосрочных инвестиций 📈💰.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published