Skip to content

Releases

Antra blokų grandinės versija

Choose a tag to compare

@Athena-Verona Athena-Verona released this 08 Nov 21:27

Antros versijos pridėtinės funkcijos:

  • Vietoje visų transakcijų hash'o bloke dabar naudojamas saugesnis merkle root hash, o merkle medis sudaromas iš visų bloke esančių transakcijų. Tuo tikslu sukurtas struct HashPointer ir atnaujinta class Block member funkcija set_merkle()
  • Prieš dedant transakcijas į baseiną, patikrinama, ar siuntėjas turi pakankamai lėšų išsiųsti sumą amount. Jei ne, transakcija atmetama
  • Blokų kasimo procesas patobulintas: dabar jei kasamas blokas užtrunka ilgiau nei 5 sekundes, bandomas kitas kandidatas
  • Naudojamas geresnis hash algoritmas (kursiokės Lauritos)

Failai

  • main.h aprašo pagrindines tris klases: class User, class Transaction, class Block. Kiekviena klasė turi išsamiai aprašytas member funkcijas. Taip pat čia deklaruojamos visos kitos funkcijos ir įtrauktos bibliotekos.
  • functions.cpp arprašo kai kurias friend funkcijas bei pagrindinę hash funkciją
  • main.cpp pagrindinis failas, aprašoma programos eiga.

Naudojimas: programa paleidžiama automatiškai vykdo blokų generavimą ir skaičiavimus. Ekrane išvedami blokai, o jei procese atsirado trikdžių, tai irgi pranešama vartotojui. Programa sustoja automatiškai.

Pirma blockchain versija

Choose a tag to compare

@Athena-Verona Athena-Verona released this 02 Nov 19:40

Tai yra supaprastina decentruolizuota blokų grandinė.
Programos paleidimo metu, sugeneruojama 1200 vartotojų, o tada generuojama 10 000 transakcijų iš atsisitkinai pasirinktų transakcijų. Transakcijos po šimtą dedamos į bloką, o tada bandomas "mininimo" procesas, iki kol pasiekiama Difficulty Target. Vietoje merkle tree tiesiog realizuotas visų transakcijų hashavimas. Naudojamas (kol kas) kursiokės Sintijos hasho algoritmas. Tada transakcijos įvykdomos, vartotojų piniginės atnaujinamos, procesas kartojamas 4 kartus. Į ekraną išvedamas Genesis blokas ir visi kiti, naudojamas outstream operatorius.

Pirma hash generatoriaus versija

Choose a tag to compare

@Athena-Verona Athena-Verona released this 27 Sep 08:14

Tai yra hash generatoriaus pirma versija. Kodas gali priimti įvestį arba iš išorinio failo, arba kaip komandinės eilutės argumentą. Tada jis atlieka skaičiavimus ir ekrane parodo rezultatą: eilutę "suhashuotą".

Hash algoritmo veikimo principas:

function hash(ivedimoEilute):

dvejetaineEilute = ""
for each character c in ivedimoEilute:
    dvejetainisKodas = paverstiDvejetainiuKodu(c)
    dvejetaineEilute += dvejetainisKodas

asciiSuma = 0
for each character c in ivedimoEilute:
    asciiSuma += gautiAsciiReiksme(c)

if dvejetaineEilute.length() < 256:
    n = 256 - dvejetaineEilute.length()
    k = 0.7 * n
    y = 256 - k
    
    for i from 1 to k:
        dvejetaineEilute = "1" + dvejetaineEilute
    
    for i from 1 to y:
        dvejetaineEilute = "0" + dvejetaineEilute

blokuKiekis = dvejetaineEilute.length() / 2

while asciiSuma > 1000:
    asciiSuma = asciiSuma / 10

for i from 1 to (asciiSuma / 3) + 1:
    blokai = sukurtiBlokuMasyva(blokuKiekis)
    
    //sioje vietoje sudaromi blokai po 2 bitus: vienas is eilutes galo, kitas is priekio
    for j from 1 to blokuKiekis:
        blokai[j] = dvejetaineEilute[j] + dvejetaineEilute[dvejetaineEilute.length() - j]

    dvejetaineEilute = ""
    
    //tas pats principas kartojamas su visais blokais: vienas is priekio, vienas is galo
    while blokai is not empty:
        dvejetaineEilute += blokai.first()
        dvejetaineEilute += blokai.last()
        remove blokai.first()
        remove blokai.last()

 //imant po 7 bitukus, konvertuoi juos i desimtaini koda, tada i sesioliktaini
for i from 0 to dvejetaineEilute.length() - 1, incrementing by 7:
    dvejetainisKodukas = dvejetaineEilute.substr(i, 7)
    desimtainisKodukas = keisti_Is_Dvejetainio_I_Desimtaini(dvejetainisKodukas)
    hexKodas += keisti_Is_Desimtainio_I_Sesioliktaini(desimtainisKodukas)

//sumazinti hex koda iki 64 ilgio
if hexKodas.length() > 64:
    hexKodas = hexKodas.substr(0, 64)

return hexString

Eksperimentiniai tyrimai

Deterministiškumas, hex kodo ilgis

Kodui patikrinti buvo sukurti keli failai patikrinti, kaip gerai jis veikia.
Pirmasis failas buvo 2000.txt, sukurtas iš daug atsitiktinių simbolių patikrinti, ar kelis kart suvedus daug simbolių turinčią eilutę, rezultatas būtų toks pat. Rezultatai:

2000.txt pirma kart: 1940595c6e56b604f1c2e5b743b41456386b3c284b5d266b43687d2875c7e5a4
2000.txt antra kart : 1940595c6e56b604f1c2e5b743b41456386b3c284b5d266b43687d2875c7e5a4

Reiškia, algoritmas yra deterministinis ir tikrai sukuria 64 simbolių eilutę

Antrieji failai word1.txt ir word2.txt turi tik po vieną žodį, kuris skiriasi viena raide: Karolis ir karolis. Rezultatai tokie:

word1.txt (Karolis) : 255b2b2c477b5d796d563c3c786b333b26f747452526470211c764b5d476f758
word2.txt (karolis): 161b556353162b4a365b65775584233664606e4f9225d45363e6c8476b56795d

Abu žodžiai yra 64 simbolių ilgio (galite patikrinti, tikrai), taip pat visai skiriasi, čia matosi avalanche effect.

Tretieji failai buvo 1000originalus.txt ir 1000pakeistas.txt su daugiau nei 1000 atsitiktinių simbolių, tačiau antrasis failas turėjo tik vieną pakeistą simbolį, 438 vietoje. Rezultatai:

1000originalus.txt : 2358496e58237c67064b1310624a1f0677a391954ec3c3f17452614d14744335
1000pakeistas.txt : 2358496e58237c67064b1310624a1f0677a391954ec3c3f17452614d14744335

Hash kodas lygiai toks pats, reiškia, veikia netobulai.

Hash algoritmo efektyvumas

Čia buvo tirta hash kodo skaičiavimų trukmė priklausomai nuo hash eilutės ilgio/kiekio. Tam sukurtas atskiras kodas (nesantis repozitorijoje) ir testuota su konstitucija.txt. Rezultatai pavaizduoti grafiškai paveikslėlyje

| 2 | 1,987 |
| 4 | 0,678 |
| 8 | 3,026 |
| 16 | 38,127 |
| 32 | 26,356 |
| 64 | 229,377 |

Panašu, kad rezultatai nėra kylantys tolygiai.

Collision

Deja, paskutinio eksperimento nepavyko atlikti iki galo. Vien tam, kad kodas patikrinų 25 000 porų po 10 simbolių, prireikė kelių valandų skaičiavimų. Rezultatas buvo 0 sutapimų.
O 25 000 porų po 10 simbolių, kurie skiriasi tik vienu simboliu, buvo rasti 82 sutapimai

Išvados

Šis hash algoritmas beveik veikia taip, kaip turėtų. Kodas yra deterministinis ir visada 64 simbolių ilgio, netgi veikia avalanche effect su nedideliais kiekiais duomenų. Tačiau jei turime identiškas ilgas eilutes su minimaliais pakeitimais tarpusavy, hash kodas būna toks pat. Taip pat algoritmas veikia ganėtinai lėtai.