Table of Contents

Tema 2 - Implementarea CUDA a algoritmului de consens Proof of Work din cadrul Bitcoin

  • Soft deadline: 8 Mai 2024. Primiți un bonus de 10% din punctajul obtinut pentru trimiterea temei înainte de 30 aprilie 2024, ora 23:55.
  • Hard deadline: 12 Mai 2024. Veți primi o depunctare de 10% din punctajul maxim al temei pentru fiecare zi de întârziere.

  • Dată publicare: 22 Aprilie 2024
  • Dată actualizare: 22 Aprilie 2024

Enunț

Implementarea unui algoritm de consens distribuit Proof of Work pe blockchain folosind programare pe GPU în CUDA.

Disclaimer: Această temă a pornit de la algoritmul Bitcoin descris în whitepaper , însă nu replică în totalitate algoritmul și structurile de date.

Introducere

Blockchain-ul este o tehnologie care a devenit cunoscută odată cu apariția criptomonedelor, precum Bitcoin-ul, Ethereum, etc. Este o formă de înregistrare descentralizată și distribuită a tranzacțiilor și datelor, care funcționează pe baza unui lanț de blocuri. Fiecare bloc înregistrează o serie de tranzacții și este legat de blocurile anterioare printr-un proces de criptare și verificare, cunoscut sub numele de “hashing”.

Descentralizare: Datele sunt stocate și gestionate de o rețea descentralizată de noduri, eliminând astfel nevoia de o autoritate centrală.

Imutabilitate: Datele înregistrate în blocurile blockchain-ului sunt imutabile și nu pot fi modificate sau șterse ulterior.

Transparență: Tranzacțiile și înregistrările sunt publice și transparente, iar oricine poate să le verifice.

Securitate: Criptografia și algoritmii de consens asigură securitatea și integritatea datelor stocate în blockchain.

Obiectivele temei

În cadrul acestei teme veți participa ca nod într-un blockchain, unde execuția tranzacțiilor se va face pe GPU. Obiectivele temei:

Algoritmul de consens

Calculatoarele participante la consens se numesc noduri (sau mineri în cazul PoW). Aceste noduri nu se cunosc și nu au încredere unele în altele. Scopul unui mecanism de consens este de a aduce toate nodurile în acord, adică de a avea încredere unul în celălalt, într-un mediu în care nodurile nu au încredere unul în celălalt.

Minerul care a rezolvat primul problema, va propaga răspunsul în rețea, iar acest va fi validat de către ceilalți participanți la rețea. Astfel, problema are 2 proprietăți:

Minerul care a rezolvat primul problema va fi recompensat. În cazul vostru, veți primi punctaj 😁

Structura unui bloc

Un bloc este format din:

Hash-ul rezultat al blocului se va folosi în continuare pentru crearea unui alt bloc. De aici vine denumirea de blockchain: se creează un lanț de blocuri, iar fiecare bloc depinde de cel anterior.

Rezolvarea problemei

Problema de rezolvat este găsirea unei nonce care, atunci când se aplică o funcție hash, cum ar fi SHA-256, hash-ul începe cu un număr de zero biți. Munca medie necesară este exponențială în funcție de numărul de biți zero necesari și poate fi verificată prin executarea unui singur hash.

De exemplu, pornim de la “Hello world” și trebuie să găsim un nonce astfel încât hash-ul să înceapă cu un 0. Pentru nonce = 4, aplicând sha256(“Hello world4”) obținem un hash ce începe cu un 0:

Hello world4” → 09b044fe014a500edc4358d55e4b59d595b7a2c9d01143ae37c577d1f68378e4

Considerăm această problemă ca având dificultatea = 1. Pentru o problemă cu dificultatea = 3, hash-ul rezultat va începe cu trei de 0: “000”.

Cerințe ale temei

Înțelegerea algoritmului de consens pe CPU

Implementarea algoritmului de consens pe GPU

Evaluarea performanței

Unde t este timpul minim înregistrat în urma a 5 rulări succesive. Motivul pentru care rulăm de mai multe ori este că timpul poate fi diferit cu câteva zecimi de la o rulare la alta.

Această abordare o vom folosi și în testarea noastră, folosind teste private, pentru a vă oferi punctajul. Pentru a testa tema cu testele private, folositi submisia pe Moodle.

Observații

Temele vor fi testate împotriva plagiatului. Orice tentativă de copiere va fi depunctată conform regulamentului. Rezultatele notării automate este orientativă și poate fi afectată de corectarea manuală.

Notare

Toate modificările vor fi aduse fișierului gpu_miner.cu. Acest fișier îl veți submite pentru a fi evaluat și notat.

Punctajul maxim este de 100 pct distribuite astfel:

20 pct EXPLICAȚII

80 pct IMPLEMENTARE

Arhiva temei va fi încărcată pe Moodle. Aceasta va cuprinde obligatoriu:

Bonus

Pentru a primi un punctaj bonus de maxim 10 pct, va trebui să schimbați realizarea Merkle Tree-ului din metoda secvențială, pe CPU, într-una paralelă, pe GPU. Cerințe:

Resurse necesare realizării temei

Pentru a clona repo-ul și a accesa resursele temei 2:

student@asc:~$ git clone https://gitlab.cs.pub.ro/asc/asc-public.git
student@asc:~$ cd asc-public/assignments/2-cuda_proof_of_work

Suport, întrebări și clarificări

Pentru întrebări sau nelămuriri legate de temă folosiți forumul temei.

Orice intrebare e recomandat să conțină o descriere cât mai clară a eventualei probleme. Întrebări de forma: “Nu merge X. De ce?” fără o descriere mai amănunțită vor primi un răspuns mai greu.

ATENȚIE să nu postați imagini cu părți din soluția voastră pe forumul pus la dispoziție sau orice alt canal public de comunicație. Dacă veți face acest lucru, vă asumați răspunderea dacă veți primi copiat pe temă.