Skip to content

andre1vorobei/BlockKick

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BlockKick - Децентрализованная краудфандинговая платформа на блокчейне


О проекте

BlockKick - это децентрализованная краудфандинговая платформа (аналог Kickstarter), построенная на собственном блокчейне. Проект создан в образовательных целях.

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

  • Собственный блокчейн на Rust
  • PoW консенсус
  • P2P сеть между узлами
  • Встроенный криптокошелёк с Ed25519 подписями
  • Сервис для агрегации данных о проектах

Архитектура

Общая архитектура системы

Component Diagram


Компоненты системы

1. Blockchain Core (Rust)

Ядро блокчейна: валидация транзакций, консенсус PoW, P2P протокол.

Технологии:

  • Rust
  • SHA-256 для хеширования
  • Ed25519 для цифровых подписей

2. DApp + Wallet (Python)

Интерфейс для пользователей: создание проектов, голосование, управление кошельком.

3. Aggregation Service (Python)

Сервис для сбора и агрегации данных о проектах и транзакциях.


Сценарии использования

1. Создание проекта (Crowdfunding)

Create Project Sequence

# Команда пользователя
create-project --name "Open Source Game" --goal 1000 --deadline 30

# Ответ системы
Project created! ID: proj_abc123

2. Голосование / Бэк проекта

Vote Sequence

# Команда пользователя
vote --project-id "proj_123" --amount 50

# Ответ системы
Vote submitted! TX: tx_def456
   Project raised: 800/1000 (80%)

3. Майнинг блоков

Mining Sequence

# Запуск майнинга
start-mining --threads 4

# Вывод
Mining started...
    Block 105 found! Reward: 50 coins
    Broadcast to network...

Формат транзакции

Все транзакции в BlockKick используют единый базовый формат с типизированными данными.

Базовая Структура Транзакции

{
  "id": "<tx_hash_sha256>",
  "tx_type": "<тип_транзакции>",
  "from": "<public_key_sender_hex>",
  "to": "<address_receiver_hex или null>",
  "data": { ... },
  "timestamp": <unix_timestamp>,
  "signature": "<ed25519_signature_hex>",
}
Поле Тип Описание
id String SHA-256 хеш от сериализованной транзакции
tx_type String Тип транзакции: create_project, fund_project, transfer, coinbase
from String/null Публичный ключ отправителя (hex, 64 символа), null для coinbase
to String/null Адрес получателя, null для операций с проектами
data Object Типо-специфичные данные транзакции (см. ниже)
timestamp Integer Unix timestamp создания транзакции
signature String/null Ed25519 подпись транзакции, null для coinbase

Типы Транзакций

1. create_project - Создание проекта

Создает новый краудфандинговый проект в блокчейне.

{
  "id": "tx_a1b2c3d4e5f6...",
  "tx_type": "create_project",
  "from": "04a1b2c3d4e5f6...",
  "to": null,
  "data": {
    "project_id": "proj_x7y8z9...",
    "name": "Open Source Game",
    "description": "Indie game built with Rust",
    "goal_amount": 1000,
    "deadline_timestamp": 1735689600,
    "creator_wallet": "04creator_address_hex..."
  },
  "timestamp": 1733097600,
  "signature": "3045022100a1b2c3d4..."
}
Поле в data Тип Описание
project_id String Уникальный ID проекта (SHA-256 от name + creator_wallet + timestamp)
name String Название проекта
description String Описание проекта
goal_amount Integer Целевая сумма сбора в коинах
deadline_timestamp Integer Unix timestamp дедлайна сбора
creator_wallet String Адрес кошелька создателя

2. fund_project - Взнос в проект

Переводит средства от бэкера напрямую создателю проекта. Средства не замораживаются.

{
  "id": "tx_e5f6g7h8i9j0...",
  "tx_type": "fund_project",
  "from": "04backer_public_key_hex...",
  "to": "04creator_address_hex...",
  "data": {
    "project_id": "proj_x7y8z9...",
    "amount": 50,
    "backer_note": "Good luck with the project!"
  },
  "timestamp": 1733098000,
  "signature": "3045022100b2c3d4e5..."
}
Поле в data Тип Описание
project_id String ID проекта для финансирования
amount Integer Сумма взноса в коинах
backer_note String Опциональное сообщение от бэкера

Важно: Средства переводятся напрямую на адрес создателя проекта (creator_wallet из транзакции create_project). Возврат средств не предусмотрен.


3. transfer - Обычный перевод

Стандартный перевод коинов между кошельками.

{
  "id": "tx_s9t0u1v2w3x4...",
  "tx_type": "transfer",
  "from": "04sender_public_key_hex...",
  "to": "04receiver_public_key_hex...",
  "data": {
    "amount": 100,
    "message": "Thanks for your help!"
  },
  "timestamp": 1733100000,
  "signature": "3045022100e5f6g7h8..."
}
Поле в data Тип Описание
amount Integer Сумма перевода в коинах
message String Опциональное сообщение (макс. 200 символов)

4. coinbase - Награда за майнинг

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

{
  "id": "tx_coinbase_abc123...",
  "tx_type": "coinbase",
  "from": null,
  "to": "04miner_public_key_hex...",
  "data": {
    "reward": 50,
    "block_height": 105
  },
  "timestamp": 1733100000,
  "signature": null
}
Поле в data Тип Описание
reward Integer Награда майнеру в коинах (определяется протоколом)
block_height Integer Высота блока, за который выплачивается награда

Особенности:

  • Не имеет подписи (signature: null) — монеты создаются протоколом, а не тратятся
  • Поле from равно null — эмитентом является сеть
  • Создаётся майнером при нахождении блока и включается в этот блок
  • Награда проверяется нодами согласно правилам консенсуса PoW

Формат блока

Структура блока

{
  "header": {
    "index": 0,
    "timestamp": 1733100000,
    "prev_hash": "0000000000000000000000000000000000000000000000000000000000000000",
    "merkle_root": "abc123...",
    "nonce": 12345
  },
  "transactions": [ ... ]
}
Поле Тип Описание
header Object Заголовок блока (см. ниже)
transactions Array Массив транзакций (минимум 1 coinbase)

Заголовок блока (BlockHeader)

{
  "index": 0,
  "timestamp": 1733100000,
  "prev_hash": "0000000...",
  "merkle_root": "abc123...",
  "nonce": 12345
}
Поле Тип Описание
index Integer Высота блока (0 для genesis)
timestamp Integer Unix timestamp создания блока
prev_hash String SHA-256 хеш предыдущего блока (64 hex символа)
merkle_root String Корень Меркла всех транзакций в блоке
nonce Integer Число для подбора хеша (PoW)

Вычисление хеша блока

Хеш блока вычисляется как SHA-256 от сериализованного BlockHeader:

block_hash = SHA256(serialize(header))

Корень Меркла

Корень Меркла вычисляется рекурсивным хешированием пар хешей транзакций:

1. Хеш каждой транзакции = ID транзакции
2. Если нечётное количество - последний хеш дублируется
3. Пары хешей конкатенируются и хешируются
4. Повторять, пока не останется один хеш

Для пустого блока (genesis):

merkle_root = SHA256("empty")

Криптография

Хеширование

  • Алгоритм: SHA-256
  • Применение:
    • Вычисление ID транзакций
    • Вычисление ID проектов
    • Хеширование блоков

Цифровые подписи

  • Алгоритм: Ed25519
  • Ключи:
    • Приватный ключ: 32 байта
    • Публичный ключ: 32 байта (hex-кодирование, 64 символа)
  • Применение: Подпись всех транзакций кроме coinbase

Условности учебного проекта

  • Баланс пользователя вычисляется прохождением всех транзакций в блокчейне:
Баланс = (Все входящие транзакции) - (Все исходящие транзакции)
  • При краудфандинге средства не замораживаются, а сразу переводятся создателю проекта

  • Возврат средств бэкерам, если проект не набрал нужную сумму, не предусмотрен

  • Для большей простоты разрешения форков подсчет средств пользователя осуществляется по требованию, проходясь по всем блокам начиная с корневого

Технические ограничения

  • Порядок полей в структурах: ID транзакции вычисляется от JSON-сериализации. serde_json сохраняет порядок полей в том виде, в котором они объявлены в struct. Изменение порядка полей в коде сломает валидность существующих транзакций.
  • Детерминированность: При одинаковых входных данных и неизменном порядке полей ID транзакции всегда будет одинаковым.

Команда

ФИО Роль
Чернов Blockchain Core
Раздьяконов Blockchain Core
Липов DApp + Wallet + Aggregation Service

Лицензия

MIT License


Сделано для обучения блокчейн-технологиям

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors