Добавить в корзинуПозвонить
Найти в Дзене
Один Rust не п...Rust

BlockChain на Rust

t.me/oneRustnoqRust Для чего нужна данная статья? :
- Узнать как создать блокчейн с ML.
- Узнать как использовать криптографию для защиты данных и обеспечения безопасности. Зачем Вам это уметь? : Создать децентрализованную систему смарт-контрактов. struct Transaction { // Транзакция
struct Block { // Блок с возможностью смарт-контрактов
struct Shard { // Шард (отдельная цепочка блоков)
struct ShardedBlockchain // Весь шардированный блокчейн async fn run(&mut self) { loop { match self.swarm.select_next_some().await { // Обработка сетевых событий SwarmEvent::NewListenAddr { address, .. } => { ... } SwarmEvent::Behaviour(event) => { ... } } } } Методы: calculate_hash: Вычисляет хеш блока. mine: Выполняет майнинг с заданной сложностью. execute_contract: Выполняет смарт-контракт через WebAssembly.
fn get_shard_id(&self, sender: &str) -> u32 { let hash = Sha256::digest(sender.as_bytes()); u32::from_be_bytes([hash[0], hash[1], hash[2], hash[3]]) % self.num_shards
Оглавление
GitHub - nicktretyakov/blockchain_ml
ML на RUST без заморочек

t.me/oneRustnoqRust

Для чего нужна данная статья? :
- Узнать как создать блокчейн с ML.
- Узнать как использовать криптографию для защиты данных и обеспечения безопасности.

Зачем Вам это уметь? :

Создать децентрализованную систему смарт-контрактов.

Структуры данных

struct Transaction { // Транзакция
struct Block { // Блок с возможностью смарт-контрактов
struct Shard { // Шард (отдельная цепочка блоков)
struct ShardedBlockchain // Весь шардированный блокчейн

🚀 Инициализация:

  1. Создается узел с заданным количеством шардов
  2. Генерируются генезис-блоки для каждого шарда
  3. Узел начинает слушать входящие соединения

async fn run(&mut self) {

loop {

match self.swarm.select_next_some().await {

// Обработка сетевых событий

SwarmEvent::NewListenAddr { address, .. } => { ... }

SwarmEvent::Behaviour(event) => { ... }

}

}

}

Обработка транзакций:

  1. Транзакция проверяется на валидность
  2. Определяется целевой шард по хешу отправителя
  3. Транзакция добавляется в pending-транзакции шарда

⛏️ Создание блока:

  1. Собираются pending-транзакции
  2. Рассчитывается адаптивная сложность майнинга
  3. Выполняется майнинг (подбор nonce)
  4. Если есть смарт-контракт - выполняется
  5. Блок распространяется через GossipSub

1. Транзакции и блоки

  • Транзакция (Transaction): Содержит отправителя, получателя, сумму и подпись. Метод is_valid проверяет базовую корректность.
  • Блок (Block): Хранит список транзакций, хеши, nonce для Proof-of-Work и опциональный смарт-контракт.

Методы:

calculate_hash: Вычисляет хеш блока.

mine: Выполняет майнинг с заданной сложностью.

execute_contract: Выполняет смарт-контракт через WebAssembly.

2. Шардинг

  • Блокчейн разделен на несколько шардов (цепочек)
  • Транзакции распределяются по шардам на основе хеша отправителя:
  • Шард (Shard): Управляет своей цепочкой блоков и пулом транзакций. Поддерживает:Добавление транзакций и блоков.Проверку валидности цепочки.Адаптивную сложность через ML.
  • Шардированный блокчейн (ShardedBlockchain): Распределяет транзакции по шардам на основе хеша отправителя.

fn get_shard_id(&self, sender: &str) -> u32 {

let hash = Sha256::digest(sender.as_bytes());

u32::from_be_bytes([hash[0], hash[1], hash[2], hash[3]]) % self.num_shards

}

3. Машинное обучение

  • Используется линейная регрессия (LinRegressor) для анализа времени между блоками и предсказания оптимальной сложности майнинга.
  • Использует линейную регрессию для предсказания оптимальной сложности
  • Цель - поддерживать время создания блока около 10 минут

4. Смарт-контракты

  • Реализованы через wasmi. Пример контракта возвращает фиксированное значение (42), но можно расширить для более сложной логики.

fn execute_contract(&self) -> Option<String> {

// Выполняет WASM код в блоке

}

5. Сетевое взаимодействие

  • Сообщения (NetworkMessage): Поддерживают запрос цепочек, их отправку и распространение новых блоков.
  • Поведение узла (BlockchainBehaviour): Использует libp2p с Mdns и Kademlia для обнаружения узлов и маршрутизации.

P2P компоненты:

  • mDNS - для обнаружения пиров в локальной сети
  • Kademlia DHT - для поиска пиров
  • GossipSub - для распространения новых блоков
  • Request-Response - для синхронизации цепочек

📨 Сетевые сообщения:

enum NetworkMessage {

RequestChain(u32), // Запрос цепочки шарда

SendChain(u32, Vec<Block>), // Отправка цепочки

NewBlock(u32, Block), // Новый блок

}

6. Узел (Node)

  • Управляет блокчейном и сетью.
  • Добавление транзакций.
  • Майнинг блоков.
  • Обработку сетевых сообщений.