Skip to content

GendByteMaster/ChainForge

Repository files navigation

ChainForge (Preview Version)

ChainForge — это экспериментальный блокчейн-проект на Python, предназначенный для создания и управления транзакциями и блоками в асинхронной среде. Это предварительная версия (preview version), демонстрирующая базовую функциональность и архитектуру, с планами на дальнейшее развитие.

О проекте

ChainForge объединяет современные технологии для построения масштабируемого блокчейна:

  • FastAPI и Strawberry для GraphQL API.
  • Redis для кэширования блоков.
  • MongoDB для долговременного хранения.
  • RabbitMQ для асинхронных уведомлений.

Эта версия является прототипом, предназначенным для тестирования и обратной связи. Ожидайте обновлений с улучшениями стабильности, производительности и новыми функциями.

Ключевые особенности

  • Создание и проверка транзакций через GraphQL.
  • Асинхронная обработка событий с RabbitMQ.
  • Кэширование данных в Redis для быстрого доступа.
  • Хранение цепочки блоков в MongoDB.

Установка и запуск

  1. Клонируйте репозиторий:
    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. Ниже приведено описание основных компонентов:

Архитектура

  1. Клиентские запросы:

    • Пользователи отправляют GraphQL-запросы через endpoint /graphql (например, для добавления транзакции или создания блока).
    • FastAPI принимает запросы и передаёт их в Strawberry для выполнения GraphQL-логики.
  2. Обработка транзакций:

    • Транзакции добавляются в пул через мутацию addTransaction (см. graphql_api.py).
    • Каждая транзакция получает уникальный хэш (вычисляется в blockchain.py), а также отправляется в RabbitMQ в виде сообщения для асинхронных уведомлений.
  3. Создание блоков:

    • Мутация createBlock собирает транзакции из пула, формирует новый блок с привязкой к предыдущему (используя хэш предыдущего блока) и вычисляет новый хэш.
    • Блок добавляется в локальную цепочку BLOCKCHAIN.
  4. Хранение и кэширование:

    • Новый блок кэшируется в Redis (модуль caching.py) для быстрого доступа.
    • Одновременно блок сохраняется в MongoDB (модуль persistence.py) для долговременного хранения.
  5. Уведомления:

    • RabbitMQ (модуль messaging.py) используется для передачи сообщений о новых транзакциях или блоках другим системам или компонентам.

Поток данных

  • Добавление транзакции:

    1. Клиент отправляет GraphQL-запрос addTransaction.
    2. Транзакция записывается в пул TRANSACTION_POOL.
    3. Асинхронно отправляется сообщение в RabbitMQ.
  • Создание блока:

    1. Клиент вызывает createBlock.
    2. Блок формируется из пула транзакций и добавляется в BLOCKCHAIN.
    3. Асинхронно запускаются задачи: кэширование в Redis и сохранение в MongoDB.
  • Получение цепочки:

    1. Клиент вызывает запрос getBlockchain.
    2. Возвращается список всех блоков из BLOCKCHAIN.

Примеры взаимодействия

  1. Добавление транзакции:

    mutation {
      addTransaction(credit: "Alice", debit: "Bob", amount: 100, sign: "sig123") {
        hash
        credit
        debit
        amount
        time
      }
    }
  2. Создание блока:

    mutation {
      createBlock(validator: "Validator1", sign: "block-sig") {
        hash
        previous
        validator
        sign
      }
    }
  3. Получение всей цепочки блоков:

    query {
      getBlockchain {
        hash
        previous
        validator
        sign
        tx {
          credit
          debit
          amount
          time
        }
      }
    }

Установка и запуск

1. Клонирование репозитория

git clone https://github.com/GendByteMaster/chainforge.git
cd chainforge

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

pip 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

3. Запуск сервисов (RabbitMQ, MongoDB, Redis) с помощью Docker

docker-compose up -d

4. Запуск FastAPI сервера

uvicorn main:app --host 0.0.0.0 --port 8000 --reload

API будет доступно по адресу: 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. Вы можете свободно использовать, изменять и распространять его.

About

ChainForge A secure and scalable blockchain project built with Python, FastAPI, GraphQL, MongoDB, Redis, and RabbitMQ. This is a preview version, showcasing asynchronous transaction processing, block creation, and distributed storage. Work in progress—expect updates and enhancements!

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages