ChainForge — это экспериментальный блокчейн-проект на Python, предназначенный для создания и управления транзакциями и блоками в асинхронной среде. Это предварительная версия (preview version), демонстрирующая базовую функциональность и архитектуру, с планами на дальнейшее развитие.
ChainForge объединяет современные технологии для построения масштабируемого блокчейна:
- FastAPI и Strawberry для GraphQL API.
- Redis для кэширования блоков.
- MongoDB для долговременного хранения.
- RabbitMQ для асинхронных уведомлений.
Эта версия является прототипом, предназначенным для тестирования и обратной связи. Ожидайте обновлений с улучшениями стабильности, производительности и новыми функциями.
- Создание и проверка транзакций через GraphQL.
- Асинхронная обработка событий с RabbitMQ.
- Кэширование данных в Redis для быстрого доступа.
- Хранение цепочки блоков в MongoDB.
- Клонируйте репозиторий:
git clone https://github.com/GendByteMaster/chainforge.git cd chainforge
chainforge/
├── __init__.py
├── models.py # Определение моделей данных (Block, Tx)
├── utils.py # Вспомогательные функции (например, вычисление хэшей)
├── blockchain.py # Основная логика блокчейна (добавление транзакций, создание блоков)
├── messaging.py # Интеграция с RabbitMQ для асинхронных сообщений
├── caching.py # Работа с Redis для кэширования блоков
├── persistence.py # Сохранение данных в MongoDB
├── graphql_api.py # GraphQL API для взаимодействия с блокчейном
└── main.py # Запуск сервера FastAPI
ChainForge представляет собой асинхронный блокчейн-сервис, который обрабатывает транзакции и блоки через GraphQL API. Ниже приведено описание основных компонентов:
-
Клиентские запросы:
- Пользователи отправляют GraphQL-запросы через endpoint
/graphql(например, для добавления транзакции или создания блока). - FastAPI принимает запросы и передаёт их в Strawberry для выполнения GraphQL-логики.
- Пользователи отправляют GraphQL-запросы через endpoint
-
Обработка транзакций:
- Транзакции добавляются в пул через мутацию
addTransaction(см.graphql_api.py). - Каждая транзакция получает уникальный хэш (вычисляется в
blockchain.py), а также отправляется в RabbitMQ в виде сообщения для асинхронных уведомлений.
- Транзакции добавляются в пул через мутацию
-
Создание блоков:
- Мутация
createBlockсобирает транзакции из пула, формирует новый блок с привязкой к предыдущему (используя хэш предыдущего блока) и вычисляет новый хэш. - Блок добавляется в локальную цепочку
BLOCKCHAIN.
- Мутация
-
Хранение и кэширование:
- Новый блок кэшируется в Redis (модуль
caching.py) для быстрого доступа. - Одновременно блок сохраняется в MongoDB (модуль
persistence.py) для долговременного хранения.
- Новый блок кэшируется в Redis (модуль
-
Уведомления:
- RabbitMQ (модуль
messaging.py) используется для передачи сообщений о новых транзакциях или блоках другим системам или компонентам.
- RabbitMQ (модуль
-
Добавление транзакции:
- Клиент отправляет GraphQL-запрос
addTransaction. - Транзакция записывается в пул
TRANSACTION_POOL. - Асинхронно отправляется сообщение в RabbitMQ.
- Клиент отправляет GraphQL-запрос
-
Создание блока:
- Клиент вызывает
createBlock. - Блок формируется из пула транзакций и добавляется в
BLOCKCHAIN. - Асинхронно запускаются задачи: кэширование в Redis и сохранение в MongoDB.
- Клиент вызывает
-
Получение цепочки:
- Клиент вызывает запрос
getBlockchain. - Возвращается список всех блоков из
BLOCKCHAIN.
- Клиент вызывает запрос
-
Добавление транзакции:
mutation { addTransaction(credit: "Alice", debit: "Bob", amount: 100, sign: "sig123") { hash credit debit amount time } }
-
Создание блока:
mutation { createBlock(validator: "Validator1", sign: "block-sig") { hash previous validator sign } }
-
Получение всей цепочки блоков:
query { getBlockchain { hash previous validator sign tx { credit debit amount time } } }
git clone https://github.com/GendByteMaster/chainforge.git
cd chainforgepip install -r requirements.txtПример requirements.txt:
fastapi>=0.95.0
uvicorn>=0.21.0
strawberry-graphql>=0.208.0
motor>=3.4.0
redis>=4.2.0
aio-pika>=9.4.0
pydantic>=2.0.0
docker-compose up -duvicorn main:app --host 0.0.0.0 --port 8000 --reloadAPI будет доступно по адресу: http://localhost:8000/graphql
Для удобного развертывания используйте следующий docker-compose.yml:
version: '3.8'
services:
chainforge:
build: .
ports:
- "8000:8000"
depends_on:
- rabbitmq
- mongodb
- redis
environment:
MONGO_URI: "mongodb://mongo:27017/chainforge"
REDIS_HOST: "redis"
RABBITMQ_HOST: "rabbit"
command: ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
rabbitmq:
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
mongodb:
image: mongo:latest
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
redis:
image: redis:latest
ports:
- "6379:6379"
volumes:
mongo_data:Запуск контейнеров:
docker-compose up -dВ будущих версиях планируется:
- Поддержка смарт-контрактов.
- Интеграция с веб-интерфейсом.
- Оптимизация алгоритмов консенсуса.
Проект распространяется под лицензией MIT. Вы можете свободно использовать, изменять и распространять его.