Проект представляет собой реализацию открытой, неизменяемой и доказуемой бухгалтерской книги на основе направленного ациклического графа (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: Для управления зависимостями
git clone https://github.com/yatledger/l0-python.git
cd l0-pythonУстановите Poetry, если его нет:
pipx install poetryАктивируйте виртуальное окружение:
python3.12 -m venv env
source env/bin/activateУстановите зависимости проекта:
poetry installl0-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 # Документация
Запустите MongoDB, RabbitMQ, Redis, Memgraph и InfluxDB через Docker:
docker compose up -dСгенерируйте начальные транзакции:
python genesis.pyЗапустите 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
В отдельных терминалах запустите сервисы:
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:
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.
- Отправка транзакции (
/send/):- Проверка подписи (Ed25519).
- Публикация в RabbitMQ.
- Consumer:
- Проверяет дубликаты, баланс, наличие родителей.
- Добавляет транзакцию в DAG (Memgraph).
- Проверяет отсутствие циклов.
- Confirmer:
- Пересчитывает веса транзакций в DAG на основе глубины и затухания.
- Writer:
- Подтверждает транзакции с весом ≥ 10.
- Записывает в MongoDB, обновляет балансы в Redis, удаляет из DAG.
MIT