Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

yatledger/l0-python

Repository files navigation

l0-python

Python License Version

Проект представляет собой реализацию открытой, неизменяемой и доказуемой бухгалтерской книги на основе направленного ациклического графа (DAG). Это децентрализованная система для обработки транзакций, использующая Memgraph (графовая база данных), MongoDB (хранилище подтверждённых транзакций), Redis (кэширование и блокировки), RabbitMQ (очереди сообщений), InfluxDB (аналитика и временные ряды) и FastAPI с GraphQL для API. Основная цель — обеспечить надёжную, масштабируемую и производительную систему для обработки криптовалютных транзакций с использованием криптографических подписей для безопасности.

Основные возможности

  • Создание и валидация транзакций с использованием библиотеки PyNaCl (Ed25519).
  • Асинхронная обработка транзакций через RabbitMQ.
  • Хранение данных в MongoDB с поддержкой асинхронных запросов.
  • Управление DAG (Directed Acyclic Graph) в Memgraph для подтверждения транзакций.
  • RESTful API (FastAPI) и GraphQL интерфейс (Strawberry).
  • Утилиты для генерации ключей, тестовых транзакций и ботов для нагрузочного тестирования.
  • Кэширование балансов в Redis для оптимизации производительности.
  • Поддержка весов транзакций для консенсуса на основе DAG.

Требования

  • Python: 3.12+
  • Docker: Для запуска MongoDB, RabbitMQ, Redis, Memgraph и InfluxDB
  • Poetry: Для управления зависимостями

Установка

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

git clone https://github.com/yatledger/l0-python.git
cd l0-python

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

Установите Poetry, если его нет:

pipx install poetry

Активируйте виртуальное окружение:

python3.12 -m venv env
source env/bin/activate

Установите зависимости проекта:

poetry install

Структура проекта

l0-python/
│
├── src/ # Основной исходный код
│ ├── api/ # API и GraphQL сервер
│ │ ├── schema.py # GraphQL схема для запросов транзакций
│ │ ├── pool.py # Эндпоинт для получения неподтверждённых транзакций
│ │ └── transactions.py # Эндпоинт для отправки транзакций
│ ├── database/ # Логика работы с базами данных
│ │ ├── mongodb.py # Асинхронные операции с MongoDB
│ │ ├── redis.py # Кэширование в Redis
│ │ ├── graph.py # Работа с Memgraph (DAG)
│ │ └── queues.py # Публикация и потребление сообщений в RabbitMQ
│ ├── models/ # Модели данных
│ │ └── tx.py # Модели транзакций (Tx, TxRead, TxStore, TxWrite, TxSend)
│ ├── utils/ # Утилиты
│ │ ├── crypto.py # Криптография (генерация ключей, подписи, верификация)
│ │ ├── data.py # Хэширование и сериализация данных
│ └── └── profile.py # Получение балансов
├── service/ # Микросервисы
│ ├── consumer.py # Consumer для RabbitMQ, добавление транзакций в граф
│ ├── writer.py # Подтверждение транзакций и запись в MongoDB
│ └── confirmer.py # Пересчёт весов транзакций в DAG
├── api.py # Точка входа в FastAPI
├── config/ # Конфигурации для docker
├── tests/ # Тесты
├── pyproject.toml # Конфигурация Poetry
├── docker-compose.yml # Docker-сервисы (MongoDB, RabbitMQ, Redis, Memgraph, InfluxDB)
├── genesis.py # Генерация начальных транзакций
├── keys.py # Тестовые ключи
├── tx_bot.py # Генерация тестовых транзакций
├── run.py # Продакшн раннер
├── run.d.py # Раннер для разработки (не работает:)
└── README.md # Документация

Запуск проекта

1. Запуск сервисов

Запустите MongoDB, RabbitMQ, Redis, Memgraph и InfluxDB через Docker:

docker compose up -d

2. Генезис

Сгенерируйте начальные транзакции:

python genesis.py

2. Запуск API

Запустите FastAPI сервер:

fastapi run api.py --workers=3 --reload
  • REST API: http://127.0.0.1:8000/docs
  • GraphQL: http://127.0.0.1:8000/graphql

3. Запуск Service

В отдельных терминалах запустите сервисы:

python run.py SERVICE N-processes

Тестирование

Бот:

python tx_bot.py N-tx N-coroutines N-processes

Сервисы

  • Memgraph Lab: http://localhost:3000 (host: memgraph)
  • RabbitMQ: http://localhost:15672 (логин/пароль: guest/guest)
  • InfluxDB: http://localhost:8086 (логин/пароль: admin/00000000)
  • MongoDB: Compass
  • Redis: Insight

Пример GraphQL запроса

Запросите транзакции через GraphQL:

query {
 getTx(addr: "EDs139V82BerHAYyJNNzxniWPE7VETnxuw4nuAxk9fU1", limit: 10) {
 credit
 debit
 amount
 uniq
 msg
 }
}

Зависимости

  • fastapi: RESTful API.
  • pynacl: Криптография (Ed25519).
  • base58: Кодирование ключей.
  • strawberry-graphql: GraphQL сервер.
  • aio-pika: Асинхронная работа с RabbitMQ.
  • pymongo: Асинхронные операции с MongoDB.
  • redis: Кэширование.
  • neo4j: Работа с Memgraph.

Полный список см. в pyproject.toml.

Алгоритм работы

  1. Отправка транзакции (/send/):
    • Проверка подписи (Ed25519).
    • Публикация в RabbitMQ.
  2. Consumer:
    • Проверяет дубликаты, баланс, наличие родителей.
    • Добавляет транзакцию в DAG (Memgraph).
    • Проверяет отсутствие циклов.
  3. Confirmer:
    • Пересчитывает веса транзакций в DAG на основе глубины и затухания.
  4. Writer:
    • Подтверждает транзакции с весом ≥ 10.
    • Записывает в MongoDB, обновляет балансы в Redis, удаляет из DAG.

Лицензия

MIT

About

Python GraphQL API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /