2017 m. lapkričio 28 d., antradienis

Bitcoin tinklo kūrimas

Paskutiniu metu Bitcoin susilaukė nemažo dėmesio. Nors bitcoinai egzistuoja nuo 2008 metų, gana ilgą laiko tarpą tai buvo žinoma tik labai nedideliam žmonių ratui. Šiuo metu Bitcoin įgavo pagreitį, jau egzistuoja atsiskaitymo sistemos skirtos verslui, įvairiose pasaulio šalyse kiekvieną mėnesį atsiranda naujų bankomatų, kuriuose leidžiama įsigyti ir išsigryninti bitcoinus. Bitcoin yra visiškai atviro kodo produktas, todėl yra skatinamos inovacijos, kiekvienas norintis gali peržiūrėti ir modifikuoti programinės įrangos struktūrą ar sukurti savo programinę įrangą, kuri atkartotų/praplėstų Bitcoin veikimo funkcijas.
Kadangi Bitcoin yra pakankamai nauja ir sudėtinga sistema, dar nėra detalios Bitcoin dokumentacijos. Šis darbas pateiks trumpą apžvalgą apie Bitcoin struktūrą. Analitinėje dalyje nagrinėsime Bitcoin veikimo principus. Atviras kodas leido kūrėjams keisti Bitcoin pirminį kodą ir kurti nuosavas kriptovaliutas, kurios remiasi pamatiniais Bitcoin principais, atsirado tokių kriptovaliutų kaip – Litecoin, Dogecoin, Namecoin ir daugybė kitų. Projektinėje dalyje nagrinėsime alternatyvios kriptovaliutos kūrimą. Darbo pabaigoje bus apžvelgtos projektinės dalies išvados ir rekomendacijos.




  1. ANALITINĖ DALIS



Kas yra Bitcoin ?


Bitcoin yra pirma pasaulyje decentralizuota skaitmeninė valiuta. Prieš keturis metus apie juos žinojo tik keletas entuziastų interneto diskusijų portaluose. Šiandien Bitcoin ekonomika yra didesnė negu kai kurių mažesnių pasaulio valstybių ekonomika. Bitcoin vertė išaugo ir kito dideliu mastu - nuo kelių centų iki daugiau negu 1200 dolerių (2013 lapkritį). Dabartinė Bitcoin ekonomikos vertė yra apskaičiuota ir sudaro daugiau negu 6 bilijonus dolerių. Stambus ir smulkus verslas parodė susidomėjimą integruojant Bitcoin platformą į savo operacines sistemas ir teikiant naujas paslaugas Bitcoin ekonomikos sferoje. Rizikuojantys kapitalistai taip pat noriai deda savo pinigus į augančią industriją. Bitcoin plėtra ir ankstyva sėkmė yra jaudinantis liudijimas šiuolaikiniam spekuliantui/rizikuojančiam investuotojui. Kadangi Bitcoin yra decentralizuota, ją galima naudoti pseudonimiškai, tai patraukė ir teisėtvarkos dėmesį.
Bitcoin yra atviro kodo, žmogus-žmogui skaitmeninė valiuta. Tarp kitų dalykų, kas padaro ją unikalia yra tai, jog tai pirma pasaulyje visiškai decentralizuota skaitmeninio atsiskaitymo sistema. Bitcoin išradimas yra revoliucinis, nes pirmą kartą dvigubo išleidimo problema gali būti išspręsta be trečiosios pusės. Bitcoin tai padaro išskirstydama būtinas sąskaitas (angl. ledger) tarp visų sistemos vartotojų per peer-to-peer tinklą. Kiekvienas pervedimas įvykstantis Bitcoin ekonomikoje yra registruojamas viešoje sąskaitoje, kuri yra vadinama blokų grandinė. Nauji pervedimai yra patikrinami blokų grandinės tam, kad būtų užtikrinta, jog tie patys bitcoinai nebuvo anksčiau išleisti, taip eliminuojant‚ dvigubo išleidimo problemą.
Kiekvienas bitcoin vartotojas turi privatų ir viešąjį raktą, kurie yra analogiški banko sąskaitai. Privatus raktas tai lyg slaptažodis, kai viešasis raktas yra Bitcoin piniginės adresas. Norint, kam nors išsiųsti pinigus, vartotojas sukuria transakciją ir pasirašo ją privačiu raktu. Kiekviena transakcija turi ryšį su prieš tai buvusia transakcija, tai reiškia, kad negalima išleisti daugiau valiutos vienetų nei turi sąskaitoje. Kiekviena transakcija yra transliuojama tinkle tam, kad taptų patvirtinta ir įrašyta į bendra blokų grandinę.
Nustatytu laiko intervalu, kas 10 minučių, visos transakcijos yra surenkamos į bloką. Kai transakcija tampa bloko dalimi, ji laikoma patvirtinta. Visi blokai yra susieti tarpusavyje, kuo tvirtesnis ryšys tuo didesnis atsparumas nuo suklastojimo galimybės. Blokų grandinę sudaro visų įvykusių transakcijų įrašai, kurie yra apsaugoti kriptografiniais algoritmais.
Bitcoinai yra kuriami sprendžiant kriptografines problemas, kurios susijusios su blokų generacija, taip suteikiant darbo atlikimo įrodymą (angl. proof-of-work). Šis procesas reikalauja daug skaičiavimo išteklių taip pat yra lengvai keičiamas, kad užtikrintų 10-ties minučių blokų kūrimo laiko intervalą. Vartotojai, sprendžiantys matematines užduotis, vadinami kasėjais (angl. miner), jie yra apdovanojami už savo darbą naujai pagamintais bitcoinais. Bitcoinai yra sukurti, arba „iškasti“, kai tūkstančiai skirtingų kompiuterių sprendžia sunkias matematines problemas, kurie patvirtina pervedimus blokų grandinėje. Tikrasis bitcoinų „kasimas“ yra grynai matematinis procesas. Naudinga analogija yra su pirminiais skaičiais: būdavo labai lengva surasti mažuosius skaičius. Bitcoinų atveju, ieškoma ne pirminių numerių, bet duomenų sekos. Kada atsiranda atitikmuo, „kasėjas“ gauna apdovanojimą. Laimikio dydis mažėja dėl to, jog bitcoinai yra „kasami“ visame pasaulyje. Kažkuriuo metu nauji bitcoinai nebebus gaminami ir vienintelė iniciatyva „kasėjams“ bus pavedimų užmokesčiai.
Taigi, protokolas buvo sukurtas taip, jog kiekvienas „kasėjas“ prisideda savo kompiuterio procesine galia infrastruktūros išlaikymui, reikalingos palaikyti ir autentifikuoti dabartinį tinklą. Atsisiuntus vieną iš vadinamųjų "elektroninių piniginių" į savo kompiuterį, ji visų pirma sinchronizuojasi su tinklu ir parsisiunčia visų transakcijų istoriją. Jūs tarsi atsisiunčiate milžinišką buhalterinę knygą, kurioje užkoduoti visi iki tol vykę pervedimai ir pagal ją kompiuteriui galite leisti tikrinti naujus pavedimus. Skirdami savo kompiuterio resursų dalį vykdomų pavedimų patvirtinimui, tampate ne tik vartotoju, tačiau ir sistemos dalimi, prisidedate prie sistemos saugumo ir funkcionavimo. Jūsų kompiuteriui atlikus sudėtingas matematines užduotis, jums sugeneruojamas atlygis - virtualus pinigas. „Kasėjai“ yra apdovanojami naujai sukurtais bitcoinais už savo indėlį procesine galia tam, jog būtų išlaikytas tinklas ir patvirtinti pervedimai blokų grandinėje. O kuo daugiau procesinės galios yra skirta „kasimui“, tuo protokolas didins matematinių problemų sunkumą, užtikrindamas, jog bitcoinai visada būtų „kasami“ nuspėjamu ir ribotu greičiu. Šis bitcoinų „kasimo“ procesas nesitęs amžinai. Bitcoin buvo sukurta atkartoti aukso ar kito brangaus metalo išgavimą iš žemės - tik ribotas, žinomas bitcoinų kiekis gali būti. Numatytas didžiausias skaičius yra 21 milijonas bitcoinų. Yra prognozuojama, jog „kasėjai“ gaus paskutinį ‚satoshi‘ 0,00000001 bitcoino 2140 metais. Jeigu visas kasimo jėgos kiekis
padidės iki pakankamai didelio lygio, sunkumas „kasant“ bitcoinus bus taip padidėjęs, jog šio paskutinio satoshi gavimas bus labai didelis iššūkis. Kai tik paskutinis satoshi bus atrastas, „kasėjai“, prisidedantys savo kompiuteriniais ištekliais tam, kad būtų tvirtinami pervedimai, bus toliau apdovanojami per pervedimo užmokesčius, nebe pagal iškastus bitcoinus. Tai užtikrins, jog kasėjai turės iniciatyvos toliau palaikyti tinklą, kai paskutinis bitcoinas bus atrastas.


Kriptologijos prielaidos:
Yra trys pagrindiniai kriptologijos aspektai, kuriuos taiko Bitcoin sistema:
  • Šifravimas ir dešifravimas;
  • Maišos funkcijos (angl. hash function);
  • Skaitmeninių parašų schemos.
    1. Kriptografija

Kriptografija – tai mokslas, tiriantis metodus kaip informaciją užšifruoti ir iššifruoti. Kriptografija buvo naudojama, užtikrinti perduodamų duomenų saugumui, paprastą tekstą paverčiant užkoduotu, naudojant šifrą.
Kriptografija yra transformavimo metodai skirti dokumentų apsaugai. Tokios transformacijos išsprendžia dvi pagrindines dokumentų apsaugos problemas: konfidencialumo (saugumo) problemą (atimama iš įsilaužėlio galimybė gauti informaciją iš ryšio kanalo) ir tapatumo (vientisumo) problemą (atimama iš įsilaužėlio galimybė pakeisti dokumentą taip kad pasikeistų jo turinys arba į dokumentą įdėti klaidingą informaciją).
Užšifravimo transformacija dešifravimo transformacijos atžvilgiu gali būti simetrinė arba asimetrinė. Ši svarbi transformacijos savybė apibrėžia dvi kriptosistemų klases: simetrines (vieno rakto) ir asimetrines (dviejų raktų, viešojo rakto).
Yra trys pagrindiniai kriptologijos aspektai, kuriais naudoja Bitcoin:
  • Šifravimas ir dešifravimas
  • Maišos funkcijos (angl. hash function)
  • Skaitmeninių parašų schemos
    1. Šifravimas ir dešifravimas



Šifravimas – tai procesas, kurio metu pradinis tekstas paverčiamas į neskaitomą formą, vadinamą šifruotu tekstu. Kriptografinėje sistemoje užšifravimas dešifravimo atžvilgiu gali būti simetrinis arba asimetrinis. Asimetrinės kriptosistemos dar vadinamos viešojo rakto kriptosistemomis. Viešasis raktas, gali būti paskelbtas ir jį žino visi vartotojai. Bitcoin kontekste viešasis raktas - tai adresas, kuriuo siunčiami bitcoinai. Dokumentus dešifruoti viešuoju raktu negalima. Suprantama, dešifravimo raktas negali būti gautas iš užšifravimo rakto.


    1. Maišos funkcijos

Kriptografijoje maišos algoritmai priima tam tikrą duomenų kiekį, juos transformuoja ir grąžina fiksuoto dydžio simbolių eilutę. Tai yra vadinama maišos reikšme.
Pagrindinės maišos algoritmų savybės:
  • apibrėžimo sritis yra didelė, palyginti su fiksuoto dydžio reikšmių sritimi;
  • funkciją nesunku apskaičiuoti bet kokiam argumentui;
  • daug kartų kviečiant funkciją su įvairiais argumentais, jos rezultatai pasiskirsto tolygiai;
  • pagal rezultatą negalima vienareikšmiškai nustatyti argumento;
  • yra gana nedidelė tikimybė, jog dviejų argumentų x ir y rezultatas f(x) = f(y). Tai itin svarbu kriptografijoje.
Maišos reikšmė yra tiksli didesnio duomenų kiekio ar dokumento reprezentacija, tai yra tam tikras skaitmeninis pirštų antspaudas.
Todėl, kad šie maišos algoritmai yra vienakrypčiai, jie plačiai paplitę kriptografijoje. Taip pat šiuos algoritmus galima taikyti ir duomenų integralumui ir korektiškumui tikrinti.
Maišos funkcijos yra determinuotosios, t.y ne atsitiktinės. Skaičiuojant maišos reikšmę tai pačiai įvesčiai kelis kartus, visada bus gaunamas tas pats rezultatas. Maišos funkcijoms priskiriamas „lavinos efekto“ (angl. avalanche effect) charakteristika, kurios dėka iš pažiūros labai panašiems pirminiams tekstams yra suteikiamos visiškai skirtingos maišos reikšmės. Sakoma, kad vieno bito pasikeitimas iššaukia „laviną“ pasikeitimų visuose maišos reikšmės bituose.
Tinkamo maišos algoritmo grąžinamos reikšmės neišduoda jokios informacijos apie grynąjį tekstą.
SHA-1 (Secure Hash Algorithm) – vienas populiarus algoritmas, naudojamas įvairiose programose ir protokoluose kaip antai – TLS, SSL, PGP, SSH, S/MIME, IPSec. SHA-1 buvo laikomas pažeidžiamo MD5 algoritmo įpėdiniu, tačiau 2004 ir 2005 metais atrasti pažeidžiamumai daro šį algoritmą nerekomenduotinu. Yra sukurta saugesnių SHA-1 algoritmo variacijų (SHA-224, SHA-256, SHA-384, SHA-512) (Lentelė 1.1), kuriose pažeidžiamumų kol kas nerasta. SHA-256 apskaičiuoja 256 bitų parašą:.
1.1 Lentelė Maišos funkcijų palyginimas
Apačioje pateikti beveik identiškų žodžių ir jų SHA-256 maišos reikšmių pavyzdžiai:
KTN10→ 53eb86b5a94cd06e72be24964189b599ef0d5a120a6d1e467ba3a245b3997b25
KTN11→ 95937a416e19c227d50e6ef59d9d8b74dda55f31a1e249ac18c24516700ade59

Bitcoin naudoja SHA-256 maišos algoritmą, atsitiktinių numerių generacijai. Taip sukuriamas kripto-uždavinys, kurį išspręsti gali kompiuteris naudodamas kompiuterinius išteklius. Žemiau matome teisingai išprastą bloko maišą. Teisingas sprendinys turi turėti tam tikrą nulių skaičių, nuo kurio priklauso užduoties sudėtingumas. Visi kontrolinio parašo algoritmai turi baigtinį galimų parašų skaičių, todėl yra apskaičiuojami grubios jėgos (angl. brute force) skaičiavimais. Nonce yra sprendinys, skelbiamas kartu su išspręstu bloku, kurį naudodami klientai gali patikrinti užduoties sprendimą.
Bloko maiša: 000000000000034a7dedef4a161fa058a2d67a173a90155f3a2fe6fc132e0ebf


RIPEMD-160 (RACE Integrity Primitives Evaluation Message Digest) – sukurtas 1996 metais akademinės bendruomenės, todėl nėra suvaržytas patentų. Šis algoritmas yra mažiau populiarus nei MD5 ar SHA-1, todėl atitinkamai mažiau ir analizuotas. RIPEMD-160 apskaičiuoja 160 bitų parašą:
Adresuose naudojamas (RIPEMD-160) algoritmas, kuomet reikalinga trumpesnė maiša. Konkrečiai šis algoritmas naudojamas, kad būtų sutrumpintas Bitcoin adresas.
hello
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (pirmu etapu naudojama sha-256)
b6a9c8c230722b7c748331a8b450f05566dc7d0f (antru etapu naudojama ripemd-160)


Bitcoin protokole taip pat naudojamos maišos funkcijos, sujungiant visus pavedimus į šakninę maišą (angl. Root Hash arba Merkle root) (1.1.pav), kuri atvaizduojama bloko antraštėje. Tx0 ir Tx1 yra transakcijos, atitinkančios santraukai Hash0 ir Hash1. Jos drauge sutraukiamos į Hash01 šaką, transakcija Tx2 ir Tx3 analogiškai sutraukiama į Hash23 šaką, šis procesas kartojamas su visais pavedimais iki šakninės maišos (angl. Root Hash).
1 .1 pav. Bloko antraštės maišos generacija
Kaip pavyzdį paimkime 200000 bloką (1.2 pav) (http://blockexplorer.com/b/200000), kuriame buvo atliktos 388 pavedimai, visų transakcijų šakninė maiša, pradiniame pranešime pažymėta kaip mrkl_root.
"mrkl_root":"08f8101f50fd9c9b3e5252aff4c1c1bd668f878fffaf3d0dbddeb029c307e88"


1 .2 pav 2000-asis Bitcoin blokas

    1. Skaitmeninių parašų schemos


Skaitmeninių parašų schemos - tai technikos, naudojamos užtikrinti siuntėjo autentiškumą. Bitcoin naudoja elipsinės kreivės skaitmeninio parašo algoritmą arba ECDSA. Algoritmas užtikrina, kad lėšas gali išleisti tik teisėtas savininkas.
Raktas – tai duomenys, būtini duomenų užšifravimui ir dešifravimui. Kriptosistema – teksto transformavimas panaudojant raktą taisyklių rinkinys. Raktų aibė – visos galimo kriptosistemos raktų reikšmės. Bitcoin naudoja kriptosistemą kurioje yra du raktai, viešasis (public) ir privatusis (private), kurie susiję sudėtingais matematiniais ryšiais.
Bitcoin privačiajam raktui naudoja 256 bitus, (32 baitus). Privatusis raktas Bitcoin kontekste -tai slaptas numeris, kurio pagalba galima išsiųsti bitcoinus, pasirašant pavedimus. Žinant viešąjį raktą galima patikrinti ar siuntėjui priklauso teisėtas privatus raktas. Privatusis raktas yra matematiškai susijęs su bitcoin adresu, kuris yra suprojektuotas taip, kad iš privataus rakto būtų lengvai apskaičiuotinas, tačiau ne atvirkščiai.

Pirmiausiai sugeneruojame 256-bitų privatų raktą. Privatus raktas reikalingas pavedimų pasirašymui. Toliau eliptinių kreivių algoritmas iš privataus rakto generuoja 512-bitų viešąjį raktą. Kadangi 512-bitų raktas yra ilgas ir nepatogus, jis yra sumaišomas iki 160 bitų naudojant SHA-256 ir RIPEM maišos algoritmus. Raktas tuomet užkoduojamas ASCII naudojant Base58Check koduote. Rezultatas būna panašus į - 1KKKK6N21XKo48zWKuQKXdvSsCf95ibHFa - tai raktas, kuris skelbiamas viešai, į šį adresą galima persiųsti bitcoinus. Detalus raktų generavimo procesas tolesniame darbe nebus nagrinėjamas. Šioje svetainėje yra pateiktas Python programavimo kodas (https://github.com/weex/addrgen ), atliekantis privataus ir viešojo rakto generaciją. Raktų generacijai naudojama Python 2.7 versija, žemiau matome sėkmingai sugeneruotą privatųjį ir viešąjį raktą.

('125rRY53KR5Ua1FwXn7957S7JY582iVUSr', 'L4ABM685N9a8aP6AmX6hmquPKnR9VDDoV35GTHt4FgoqojcyD9bS')


Praradus privatųjį raktą, neturint atsarginės kopijos, visi bitcoinai yra prarandami visam laikui, be galimybės juos atgauti. Taip pat reikėtų paminėti, kad adresai turi tikrinimo algoritmą, todėl išsiųsti klaidingu adresu yra neįmanoma (1.3.pav). Tačiau jei adresas yra teisingai suformuluotas, bet neturi savininko, bitcoinai bus prarasti visam laikui.

1 .3 pav. Bitcoin Kliento neleistino adreso formuluotė

. Reikia paminėti, kad raktų generavimo funkcijas atlieka ir Bitcoin klientas. Jis raktų poras saugomo wallet.dat byloje. Taip pat yra daugybė svetainių, kurios siūlo Bitcoin raktų kūrimo paslaugas, vieną iš jų aptarsime.

Paveikslėlyje 1.4 matome sugeneruotą Bitcoin privatų ir viešąjį raktą, naudojantis (https://www.bitaddress.org) svetaine. Privatus raktas turėtu būti slaptas, viešai skelbti jo nederėtų dėl saugumo sumetimų, šiuo atvejų buvo sugeneruota demonstracinė adresų pora.


1 .4 pav. Viešojo ir privataus raktų pora


  1. PAGRINDINĖS DUOMENŲ STRUKTŪROS



Bitcoin mazgai jungiasi prie klientų naudodami TCP protokolą. Mazgai paprastai klausosi informacijos 8333 prievade. Naudodami Wireshark tinklo analizės programą (2.1 pav.) matome Comand name: tx tai reiškia, jog priimama pavedimas (transakcija).


2 .5 pav. Wireshark programa užfiksuotas Bitcoin pavedimo paketas

Lentelėje 2.1 matome aprašytą žinutės struktūrą, pateiktą su paaiškinimais.
2.1 lentele. Žinutės struktūra
Dydis
Aprašymas
Duomenų tipas
Paaiškinimas
4
magic
uint32_t
Magiškas skaičius, (f9 be b4 d9), identifikuojamas kaip Bitcoin protokolo žinutė. Pirminiame kode, nurodyta, kad reikšmė buvo pasirinkta, dėl to, kad įprastiniuose duomenyse aptinkama retai (main.cpp, 1760 eilutė).
Taip pat žinomos reikšmės:
testnet - FA BF B5 DA
testnet3- 0B 11 09 07
12
command
char[12]
ASCII eilutės duomenys nustatantys paketo turinį.
4
length
uint32_t
Payload ilgis.
4
checksum
uint32_t
Pirmi 4 baitai sha256(sha256(payload))
 ?
payload
uchar[]
Faktiniai duomenys




Pagrindinės Bitcoin duomenų struktūros yra:
  • Pavedimai;
  • Blokai ;
Blokai yra sudaryti iš bloko antraštės, po kurios seka transakcijos.Blokai atpažįstami pagal antraštės maišą.
    1. Blokai



Abstrakčiai blokas yra metodas, kuriuo duomenys visam laikui įrašomi tinkle. Tai yra visų įvykusių pavedimų sąrašas. Blokai taip pat turi nuorodas į prieš tai buvusius blokus. Visi blokai sudaro blokų grandinę. Bitcoin klientai šnekasi tarpusavyje peer-to-peer tinkle. Kai vykdomas pavedimas, jis transliuojamas klientams.
Nauji blokai negali būti paskelbti tinklui, neturėdami teisingo sprendimo. „Kasimo“ procesas yra varžymasis kuo greičiau išspręsti einantį bloką. Matematinė problema kiekviename bloke yra sudėtinga, tačiau ją išsprendus, patikrinti tampa labai paprasta, žinant nonce (Lentelė 2.2). Sėkmingai išsprendus bloką „kasėjas“ apdovanojamas tam tinka bitcoin suma, šiuo metu - 25 BTC. Apdovanojimas dalinamas pusiau kas 210 000 blokų (kas keturis metus).
2.2 lentele. Bloko antraštės struktūra
Dydis)
Aprašymas
Duomenų tipas
Paaiškinimas
4
versija
uint32_t
Bloko versijos informacija, remiantis programine įranga.
32
ankstesnis blokas
char[32]
Ankstesnio bloko maišos reikšmė, esanti blokų grandinėje. Tai užtikrina blokų eiliškumą.
32
merkle_šaknis
char[32]
Merkle šaknis nurodo visų transakcijų maišos reikšmę.Taip užtikrinama, kad transakcijos nebus pakeistos, tapusios blokų grandinės dalimi.
4
Laiko žymė
uint32_t
Laiko žymės įrašytas, nurodantis bloko sukūrimo laiką.
4
bitai
uint32_t
ff ff 00 1d (0x1d00ffff hex, 486604799 decimal) Apskaičiuotas sudėtingumas naudotas šiame bloke.
4
nonce
uint32_t
Nonce yra atsitiktinė reikšmė, sugeneruota „kasimo“ procese. . Tai reikšmė, kuria panaudojo kasėjas, sėkmingai išsprendęs bloką.
1
txn_count
var_int
Transakcijų skaičius.Blokas negali turėti 0, transakcijų, nors viena transakcija turi būti priskirta už bloko išsprendimą.


Bitcoin pasikliauja darbo-įrodymo (angl. proof-of-work) mechanizmu, kad užkirstų kelią piktybinėms Bitcoin tinklo manipuliacijoms.
Tam, kad blokas būtų išspręstas, pirmiausiai reikia surinkti naujus pavedimus į bloką. Tuomet blokas yra sumaišomas, suformuojant 256-bitų maišos reikšmę. Jei maiša prasideda su pakankamu skaičiumi nulių, blokas tampa išsprendžiamas ir siunčiamas į Bitcoin tinklą. Maiša tampa bloko unikaliu identifikatoriumi (1.2 pav). Paprastai ksi maiša būna klaidinga, tuomet blokas yra keičiamas, vėl ir vėl milijonus kartų.(Lentelė 2.3) Kas 10 minučių kas nors sėkmingai išsprendžia bloką, tuomet visas procesas kartojamas iš naujo.


2.3 lentele. Bloko sprendiniai naudojant skirtingas nonce reikšmes
nonce
Maiša
0
5c56c2883435b38aeba0e69fb2e0e3db3b22448d3e17b903d774dd5650796f76
1
28902a23a194dee94141d1b70102accd85fc2c1ead0901ba0e41ade90d38a08e
2
729577af82250aaf9e44f70a72814cf56c16d430a878bf52fdaceeb7b4bd37f4
3
8491452381016cf80562ff489e492e00331de3553178c73c5169574000f1ed1c
39
03fd5ff1048668cd3cde4f3fb5bde1ff306d26a4630f420c78df1e504e24f3c7
990
0001e3a4583f4c6d81251e8d9901dbe0df74d7144300d7c03cab15eca04bd4bb
52117
0000642411733cd63264d3bedc046a5364ff3c77d2b37ca298ad8f1b5a9f05ba
1813152
00000c94a85b5c06c9b06ace1ba7c7f759e795715f399c9c1b1b7f5d387a319f
19745650
000000cdccf49f13f5c3f14a2c12a56ae60e900c5e65bfe1cc24f038f0668a6c
243989801
0000000ce99e2a00633ca958a16e17f30085a54f04667a5492db49bcae15d190
856192328
0000000000000000e067a478024addfecdc93628978aa52d91fabd4292982a50






    1. Pavedimai

Pavedimas yra esminė Bitcoin sistemos operacija. Bitcoin pavedimai perkelia bitcoinus iš vieno adreso į kitą. Transakcija turi būti pasirašyta privačiu raktu, tam, kad tik bitcoinų savininkas galėtų juos persiųsti. Parašas įkeliamas į pavedimą ir visa transakcija yra kriptografiškai sumaišoma (2.2 pav). Galiausiai ši maiša yra naudojama atpažinti pavedimus Bitcoin sistemoje.


2 .6 pav. Bitcoin pavedimai

Kaip matome iš paveikslėlyje 2.2 pirmas pavedimas siunčiamas viešuoju adresu - Kv,B, ir pasirašomas siuntėjo Kv,A, sigA parašu. Patvirtinus pirmąjį pavedimą, Kp,B pasirašo sigB ir siunčia pavedimą Kv,C adresu.
Bitcoin transakcija perkelia bitcoinus tarp vienos ar daugiau įvesčių (angl. inputs) į išvestis (angl. outputs). Kiekviena įvestis turi būti pilnai išleista pavedime. Jeigu į adresą buvo atsiųsta 100 BTC ir norima išleisti tik 1 BTC, transakcijos metu turi būti išleistas pilna suma - 100 BTC. Siuntėjas persiunčia 1 BTC gavėjui, likusieji 99 BTC, grįžta siuntėjui kaip grąža.
Žemiau pavaizduotoje transakcijoje (2.4 pav), matome bendrą įvesčių sumą, pervedimui buvo persiųsta 0.338 BTC suma (2.3 pav).
2 .7 pav. Bitcoin kliente įvykdytų sandorių langas


19fDsgnsQrTDxCksUH16DXzbhCU34ng4PN –siuntėjo adresas. 1PqnmPLdkniQtJZ4RKYYkiyv3KMRoZZKuA – gavėjas adresas.
Iš (2.4 pav) matome, kad įvesčių suma buvo sudėta, skirtumas grįžo į kaip grąža siuntėjui -
2.1772 BTC
.
2 .8 pav.Bitcoin blokų grandinės transakcija


Lentelėje 3.3 išdėstyti paveikslėlio 2.4 reikmių vertimas ir paaiškinimas.




3.3 lentele. Bitcoin pavedimo paaiškinimai

Vertimas
Paaiškinimas
Hash
Maiša
Pavedimo maiša
Appeared in
Pasirodė
Blokas kuriame talpinama transakcija, laikas kuomet transakcija buvo aptikta
Number of inputs
Įvesčių skaičius
Tai pavedimai, kurie buvo atlikti į siuntėjo transakcijos adresą
Total BTC in
BTC įvesčių balansas
Bendra atsiųstų bitcoinų suma
Number of outputs
Išvesčių skaičius
Tai pavedimai, kurie buvo atlikti iš siuntėjo transakcijos adreso
Total BTC out
BTC išvesčių balansas
Bendra išsiųsta BTC suma
Size
Dydis
Pavedimo dydis baitais
Fee
Mokestis
Pavedimo mokestis
Inputs
Įvestys
Visi bitcoinai, kurie buvo pervesti į dabartinį adresą
Outputs
Išvestys
Vienas adresas yra gavėjo, kitame yra gavėjo adresas, BTC grįžta kaip graža.
ScriptSig

scriptSig = <parašas> <viešas raktas>, koduotė įrodo bitcoinų savininko autentiškumą

ScriptPubKey

Kai gavėjas nori išleisti lėšas, jis pateikia įvestis į ScriptPubKey
Bitcoin naudoja scenarijų sistemą (angl. scripting system). Scenarijai iš esmės yra instrukcijų rinkinys, nurodantis kaip asmuo, norintis išleisti bitcoinus, turi elgtis.
Bitcoin kuria skirtingas scriptSig/scriptPubKey poras. Yra įmanoma sukurti sudėtingas tipo transakcijas, dar kitaip vadinamas kontraktais.


  1. PROJEKTINĖ DALIS



Bitcoin sistema naudoja algoritmą atpažįstančią teisingas transakcijas ir blokus. Jei blokai ar transakcijos yra klaidingai formuojamos norint pakenkti tinklui, jos atmetamos. Projekte realizuotas tinklas, veiks šiuo algoritmo principu.




3.1 Bitcoin tinklo sandaros sudarymas



Projektinėje dalyje bus naudojamas Bitcoin kliento branduolys. Kursime alternatyvia kriptovaliutą. Projekte naudojamos operacinės sistemos Debian 7.0 - serveryje ir Ubuntu 14.10 - lokaliame kompiuteryje. Klientai bus sujungti į peer-to-peer tinklą.
Pradinio serverio IP adresas 188.226.131.112 Serveryje veiks Debian 7.0 operacinė sistema, kitame asmeniniame kompiuteryje, kurio IP adresas - 88.223.50.210, bus veiks Ubuntu 14.10 LT operacine sistema. Tinklas veiks tesnet režimu. P2P prievadas - 45884 bus skirtas bendravimui peer-to-peer tinkle, RCP 55883 prievadas skirtas kasėjams .
Internetinis forumas (bitcointalk.org) yra vienas iš geriausių šaltinių, ten rasta daug naudingos informacijos. Šiame forume galima rasti daugybę techninių temų Bitcoin tematika.






Uždavinys: reikia sukurti alternatyvią monetą (angl. alt coins). Kad pasiektume šį tikslą, naudosime, modifikuotą Bitcoin pirminį kodą.


Darbo priemonių pasirinkimas
Projektui reikalingos priemonės:
  • Kompiuteriai su Unix-tipo operacinė sistema;
  • Šaltinio pirminis kodas.




Darbo eigos aprašymas.
Projektui bus naudojamas debesų serveris (digitalocean.com).
Pirmiausiai užsiregistruojame prie serverio (3.1 pav.).
3 .9 pav. Prisijungimas prie DigitalOcean abonento

Užsiregistravus svetainėje, buvo pasirinktas serveris, turintis 2 procesorių, su 40GB SSD diskiniu kaupikliu su 3TB pralaidumu (3.2 pav.)



3 .10. pav. Serverių pasirinkimas

Buvo pasirinktas geografiškai artimiausias regionas (3.3 pav.)
3 .11. pav. Serverio vietovės pasirinkimas

Toliau pasirenkama operacinė sistema, šiame projekte buvo naudojama Debian 7.0 64, kaip matoma paveikslėlyje (3.4 pav.).
3 .12.pav. Linux distribucijos pasirinkimas


Buvo nustatyta ViTiO pasirinktys kurios pagerina tinklo ir I/O pralaidumą (3.5 pav.).




3 .13.pav Papildomi serverio nustatymai

Pasirinkus visus nustatymus ir patvirtinus, buvo gautas laiškas iš digitalocean.com su prisijungimo duomenimis (3.6 pav.).
3 .14.pav. Prisijungimo duomenys

Prisijungimui prie serverio buvo naudojama nemokama Telnet/SSH programa – putty. Suvedus IP adresą sesija buvo išsaugota ir pavadinta – Projektas, kad nereikėtų kiekvieną kartą ranka įvedinėti adresą (3.7 pav.).
3 .15.pav. Putty programos langas

Įvedus IP adresą ir paspaudus „Open“ atsidarė konsolinis langas. Prisijungimui prie serverio naudojami digitalocean atsiųsti prisijungimo prie serverio duomenys (3.8 pav.).
3 .16.pav Prisijungimo langas


Tam, kad būtų paprasčiau naudoti atvirą kodą, buvo sukurta Github paskyra. Github -tai įrankis, skirtas talpinti įvairius projektus. Šis įrankis, kaip ir kiti tokio tipo įrankiai, leidžia vartotojui kurti atsargines kopijas bei redaguoti projekto failus ir tvarkyti klaidas. Šie projektai suteikia puikią galimybę atlikti programinio kodo versijų kontrolę tiesiog internete.
Debian operacinėje sistemoje pirmiausiai reikia įdiegti papildomas programas (angl. dependencies), jas atisiunčiame įvedę komandą:
$sudo apt-get install build-essential libboost-all-dev libcurl4-openssl-dev libdb5.1-dev libdb5.1++-dev git qt-sdk libminiupnpc-dev


Sekantis žingsnis, atsisiųsti pirminį kodą, kurį modifikuosime serveryje. Pirminiu kodu pasirenkame smallchange.
root@Projektas:~# git clone https://github.com/alt-project/smallchange.git


Programai reikia sureikti unikalius prievadų ruožus. Bus keičiami prievadai RPCport, P2P PORT ir Testnet Port. RPC prievadas naudojamas jungtis prie tinklo „kasėjams“, P2P - skirtas jungtis prie peer-to-peer tinklo, Tesnet skirtas bandymams. Visi šie prievadai turi būti skirtingi.




3.2 Pirminio kodo keitimas



Kad įsitikintume, ar prievadai neužimti peržiūrime okupuotų prievadų lentelę, kurią galime rasti – (https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers) .


src/init.cpp: (P2P PORT + Testnet Port)
LINE 235 " -port= " + _("Listen for connections on (default: 55884 or testnet: 45884)") + "\n" +
src/init.cpp: (RPC PORT)
LINE 271 " -rpcport= " + _("Listen for JSON-RPC connections on (default: 55883)") + "\n" +


Tolesni nustatymai aprašo monetų generavimo intervalus, sudėtingumo perskaičiavimo laiką.
src/main.cpp: (Monetų kiekis, kurį gauna kasėjai suradę bloką)
LINE 831 int64 nSubsidy = 1 * COIN;
LINE 832 if(nHeight < 10) // pirmas motetos po 10 bloko
src/main.cpp: (Parodo kas kiek laiko keičiamas sudėtingumo lygis)
LINE 837 static const int64 nTargetTimespan = 0.35 * 24 * 60 * 60 //0.35 blokų perskaičiavimo laikas
LINE 836 static const int64 nTargetSpacing = 15; // blokų generavimas kas 15s


src/main.h: (Bendras monetų kiekis ir Blokų skaičius per parą)
LINE 43 static const int64 MAX_MONEY = 10000 * COIN; // maksimalus monetų kiekis
LINE 550 return dPriority > COIN * 720 / 250; // 720 blokai randami per parą.


Pirma adreso raidė yra parenkama naudojant base58 algoritmą. Pagal puslapį, base58 reikšmes galima rasti puslapyje (https://en.bitcoin.it/wiki/Base58Check_encoding).
src/base58.h:
LINE 280 PUBKEY_ADDRESS = 38, //Nurodomas adreso pirmas bitas
Eros laikas
Pirmas dalykas, kurį turime pakeisti prieš pradedant generuoti blokus, tai pradinis monetos gimimo laikas. Nuo vidurnakčio 1970 metų 00:00:00 Unix (Epoch ar POSIX) buvo pradėtas skaičiuoti laikas . Žemiau pateikiamas pavyzdys:
398419697 (ISO 8601:2014-04-25T09:54:57Z)
Tikslų epochos laiką randame (http://www.epochconverter.com) su galimybe apskaičiuoti būsimą epochos laiką.
Unix sistemoje laikas randamas komanda:
$ date +%s
$ 1369590088
Yra dvi pagrindinės vietos, kuriose reikia pakeisti laiką pirminiame kode.
src/main.cpp: (Tesnet laikas)
LINE 2034 block.nTime = 1398459635;
src/main.cpp: (Pagrindinis laikas)
LINE 2040 block.nTime = 1398459635;


Kompiliavimas
Dabar atlikę pakeitimus, galime pradėti sukompiliuoti barcoin failą. Kompiliuojame naudodami komandą:
barcoin/src% make -f makefile.unix USE_UPNP=-

Paleidžiame sukompiliuotą programą tesnet režimu:

root@Projektas:~/barcoin/src# ./barcoin -testnetd
barcoin: main.cpp:2082: bool LoadBlockIndex(bool): Assertion `block.GetHash() == hashGenesisBlock' failed.
Aborted
root@Projektas:~/barcoin/src# LoadBlockIndex(bool): Assertion `block.GetHash() == hashGenesisBlock' failed.


/debug.log
Gfcoin version v0.6.3.0-ga19eb2d-beta (2014-04-25 22:58:31 +0300)
Startup time: 04/26/14 10:44:51
Default data directory /root/.gfcoin
Used data directory /root/.gfcoin
Bound to [::]:29931
Bound to 0.0.0.0:29931
Loading block index...
dbenv.open LogDir=/root/.gfcoin/database ErrorFile=/root/.gfcoin/db.log
800426389bc34c1f79fe330efcc6e5f187821a4f69a7982d3c46c58df442f21f
384b060671f4a93948e9c168216dadb0ca2fbc54aa11c86b0345b6af1c59b2f5
5a2e19825b4162f68602039040f1e05d9f924ff00a3aff7327ca6abd6f3279bc
CBlock(hash=800426389bc34c1f79fe, PoW=837b089eb934d1dd50e9, ver=1, hashPrevBlock=00000000000000000000, hashMerkleRoot=5a2e19825b, nTime=1398459635, nBits=1e0ffff0, nNonce=2085386442, vtx=1)
CTransaction(hash=5a2e19825b, ver=1, vin.size=1, vout.size=1, nLockTime=0)
CTxIn(COutPoint(0000000000, -1), coinbase 04ffff001d010441746f646f3a207265706c616365207769746820736f6d657468696e67207468617420656e7375726573206e6f207072656d696e696e6720746f6f6b20706c616365)
CTxOut(error)
vMerkleTree: 5a2e19825b


Ši eilute -
800426389bc34c1f79fe330efcc6e5f187821a4f69a7982d3c46c58df442f21f - nusako bloką su neegzistuojančią Merkel maišą naudota main.cpp faile:

Žemiau nurodyta eilutė sugeneruota sugeneruoja teisingą Merkel maišą naudojant epochos laiką iš main.cpp dokumento:
5a2e19825b4162f68602039040f1e05d9f924ff00a3aff7327ca6abd6f3279bc


Įrašome teisingai sugeneruota maišą main.cpp dokumente.
src/main.cpp
LINE 2048 assert(block.hashMerkleRoot == uint256("0x5a2e19825b4162f68602039040f1e05d9f924ff00a3aff7327ca6abd6f3279bc"));


Kad būtų sukurtas Pradinis blokas, reikia pakeisti main.cpp eilutėlės reikšmę į true, ji paprastai nebūna nustatyta, nes reikalinga tik pirmojo bloko generavimui.


src/main.cpp
LINE 2034 if (true && block.GetHash() != hashGenesisBlock)


Kad pakeitimai įsigaliotų klientas turi būtų perkompiliuotas
barcoin/src$ make -f makefile.unix


Atlikus pakeitimus, programa kompiliuojama. Dar karta paleidžiame programą.
barcoin/src$ ./ barcoin –testnet

3.3 Pradžios bloko generavimas

Pradinio bloko „kasimas“, tai veiksmas reikalaujantis daug kompiuterio resursų, debug.log dokumente galime matyti, kaip yra ieškoma bloko, keičiant nonce reikšmę. Pradinio bloko sprendimas gali užtrukti ilgą laiką.
/debug.log
block.nTime = 1000000000
nonce 00115000: hash = cbf6230ccf415873cd8c10b33c092943224d04458671cff39898ffb636b865dd (target = 00000ffff0000000000000000000000000000000000000000000000000000000)
nonce 00116000: hash = 8ed7cc737432e37c2617c57b01305e3aff041479bf1d5391dc234bc9935bfa4c (target = 00000ffff0000000000000000000000000000000000000000000000000000000)
nonce 00117000: hash = a44c797fd7bd0ef7211f092cbfa0a214e74f5b16929860b7001d8725df2562a7 (target = 00000ffff0000000000000000000000000000000000000000000000000000000)
nonce 00118000: hash = b2b3ec59ea20e29ca0024cdfda994bb759b633cd12695dc1e6126fed0ab67162 (target = 00000ffff0000000000000000000000000000000000000000000000000000000)
nonce 00119000: hash = 521e992768cdd42607ae9f064e98623686fc96f33c04630f8a973c35a3e381cc (target = 00000ffff0000000000000000000000000000000000000000000000000000000)
nonce 0011A000: hash = dbb91176dc6e9ca7559bda664fa2bc854c447969a41afb9593a8a3b0b45bafea (target = 00000ffff0000000000000000000000000000000000000000000000000000000)
nonce 0011B000: hash = 2dd8fa5990dda1be7595f30ce7d801de7a457aa687700badf895a085abd8f932 (target = 00000ffff0000000000000000000000000000000000000000000000000000000)
nonce 0011C000: hash = 7fa071b3217feda33745c967cc0226b8c47269588c8cbb8d4bc69822eda31cd5 (target = 00000ffff0000000000000000000000000000000000000000000000000000000)

block.nNonce = 1167091
block.GetHash = c528c52daedce24e8d7a735e7e947946f41b3b578dfbab6de7a2e28bb713a5a1
CBlock(hash=c528c52daedce24e8d7a, PoW=00000dc4adbe12efe41a, ver=1, hashPrevBlock=00000000000000000000, hashMerkleRoot=2fc1b7ef46, nTime=1000000000, nBits=1e0ffff0, nNonce=1167091, vtx=1)
CTransaction(hash=2fc1b7ef46, ver=1, vin.size=1, vout.size=1, nLockTime=0)
CTxIn(COutPoint(0000000000, -1), coinbase 04ffff001d0104284275696c64696e67206120636f696e20746f2073686f772074686520776f726c6420686f772e2e2e)
CTxOut(error)


Kaip matome iš debug.log dokumento, buvo atrasta bloko maiša, kartu su ja matome none reikšmę.

block.nNonce = 1167091
block.GetHash = c528c52daedce24e8d7a735e7e947946f41b3b578dfbab6de7a2e28bb713a5a1


Viskas kas mums lieka padaryti, tai pakeisti pradžios bloko atraštę ir nonce main.cpp dokumente.
src/main.cpp:
LINE 1984 hashGenesisBlock = uint256("0xc528c52daedce24e8d7a735e7e947946f41b3b578dfbab6de7a2e28bb713a5a1");
Yes, you need to leave the 0x in front of the hashes. You also need to enter the nNonce:
src/main.cpp:
LINE 2024 block.nNonce = 1167091;

Dabar esame pasirengę padėti bandymus testent režime. Prisijungti prie kito kompiuterio yra gana sudėtinga. Reikės prijungti du kompiuterius su the -connect=x.x.x.x kintamuoju, įvedant IP adresą komanda:
barcoin/src% ./barcoin -testnet -connect= 88.223.50.210

barcoin/src% ./barcoin -testnet -connect= 188.226.131.112


Sėkmingai sujungus ir įvedus komanda getinfo gaunamas pranešimas.
barcoin/src%./barcoin getinfo
{
"version" : 1000000,
"protocolversion" : 60001,
"walletversion" : 60000,
"balance" : 0.00000000,
"blocks" : 0,
"connections" : 1,
"proxy" : "",
"difficulty" : 0.00024414,
"testnet" : true,
"keypoololdest" : 1369621665,
"keypoolsize" : 101,
"paytxfee" : 0.00000000,
"mininput" : 0.00010000,
"errors" : ""
}


3.4 Kriptovaliutos „kasimas“



Dabar kai klientai sujungti galima pradėti generuoti monetas naudodami komanda:
barcoin/src% ./barcoin setgenerate true 3

Skaičius 3 nurodo kiek gijų procesorius naudos blokų „kasimui“. Po kurio laiko išvysime kažką panašaus į:
barcoin/src% ./barcoin getmininginfo
{
"blocks" : 0,
"currentblocksize" : 1000,
"currentblocktx" : 0,
"difficulty" : 0.00024414,
"errors" : "",
"generate" : true,
"genproclimit" : 16,
"hashespersec" : 1432,
"networkhashps" : -9223372036854775808,
"pooledtx" : 0,
"testnet" : true
}




  1. DARBO SAUGA IR EKOLOGIJA



Siekiant produktyviai dirbti patogiomis sąlygomis, labai svarbu tinkamai suderinti savo darbo vietą.

Apšvietimas
Kuo tinkamesnis apšvietimas, tuo našesnis darbas ir didesnis darbingumas. Dirbtinė apšvieta gali būti mišri, bendra ir vietinė. Bendram apšvietimui naudojami atspindėtos ir išsklaidytos šviesos šviestuvai.Norint išvengti atspindžių ir blyksnių, apšvietimo šaltinį reikia uždengti arba išsklaidyti. Jei trukdo saulės šviesa, galima naudotis užuolaidomis, žaliuzėmis, blyksnių filtrais arba apsauginiais ekranais.
Minimalus bet kokios darbo vietos apšvietimo standartas yra 150 lux.Liuksas yra standartinės žvakės vieno metro atstumu reikiama šviesa.
Monitorius
Bene didžiausias neigiamo kompiuterio poveikio žmogaus organizmui kaltininkas yra monitorius, kitaip vaizduoklis, displėjus – įrenginys regimajai (tekstinei ir grafinei) informacijai rodyti. Ryškumas ir ženklų bei fono tarpusavio kontrastas turi būti lengvai reguliuojami. Simbolio ir ekrano fono kontrastas turi būti ne mažesnis kaip 0,8. Paprastai primtiniausias yra didelio kontrastingumo ir mažo ryškumo santykis.
Displėjaus ekranas turi būti lengvai bei laisvai pasukamas ir pakreipiamas.. Todėl displėjus turėtų turėti stovą arba reguliuojamą stalą, leidžiančius keisti ekrano padėtį. Monitoriaus viršus turi būti akių lygyje (arba truputį žemiau. Skaitant tekstą, negalima skaityti daugiau kaip 5 laipsnius aukščiau ir daugiau kaip 30 laipsnių žemiau nuo horizontalės. Žiūrint į monitorių reikia nelenkti galvos daugiau kaip 15 laipsnių .


Pelė ir kiti valdymo įrenginiai

Netinkamas pelės ar kitų valdymo įrenginių naudojimas gali tapti diskomforto ir traumos priežastimi. Norint paspausti pelės ar kito valdymo įtaiso mygtuką, visai nereikia įtempti pirštų ar naudoti jėgos. Pernelyg stiprūs paspaudimai per daug įtempia sausgysles, ne tik plaštakų, bet ir žasto bei riešo raumenis. Pelę reikia laikyti švelniai ir be įtampos, per daug nespaudžiant. Ranka turi būti atsipalaidavusi, pirštai laisvi. ir dirbant klaviatūra, plaštaką, riešus ir alkūnes reikia laikyti tiesiai. Dirbant su pele ar kitu valdymo įrenginiu, reikia stengtis jį laikyti kiek galima arčiau klaviatūros, tokiame lygyje, kad nereikėtų nuolat ištiesti rankos. Kad darbas su pele būtų efektyvesnis ir kuo mažiau judėtų plaštaka bei riešas, naudojamas kokybiškas pelės kilimėlis.


Darbo kėdė
Kėdė yra dažniausiai naudojama kompiuterizuotos darbo vietos dalis. Darbo kėdės konstrukcija turi atitikti ergonominius reikalavimus, atsižvelgiant į PEOSH ANSI/HFS 100–1988 rekomendacijas bei Lietuvos higienos normą HN 32:2004. Kėdė turi būti su keliamuoju ir sukamuoju mechanizmu, leidžiančiu keisti kėdės aukštį bei atlošo atlenkimo kampą. Kėdė turi turėti porankius. Jais naudojamasi nedirbant, ilsinant rankas. Porankiai turi būti nuimami arba reguliuojami. Pagal Europos standartą, porankių plotis – 4 cm, ilgis – 20 centimetrų. Porankiai leidžia patogiai atremti dilbius, atpalaiduoti pečius; jų aukštis turi būti
22–28 centimetrai. Netinkamo aukščio porankiai gali būti pečių, kaklo ar nugaros skausmų priežastis.
Darbo stalas
Darbo stalas turi būti pakankamai didelis, kad būtų galima patogiai išdėstyti displėjų, klaviatūrą, dokumentus ir kitus būtinus įrenginius Stalo aukštis turi atitikti kėdės aukštį: atstumas nuo kėdės iki stalo viršaus turi būti toks, kad sėdintysis galėtų laisvai užkelti koją ant kojos ir dirbant jam nereikėtų pasilenkti arba kelti rankų. Stalo aukštis reguliuojamas taip, kad viršutinė eilutė displėjuje butų dirbančiojo akių lygyje, o monitoriaus centras 5–30 laipsnių žemiau akių lygio. Monitoriaus aukštis gali būti parenkamas pagal jo įstrižainę, arba įrengus reguliuojamo aukščio monitoriaus stovą. Vietos kojoms po stalu gylis turi būti: kelių aukštyje – 40 cm, pėdų aukštyje – 60 centimetrų.


  1. EKONOMINĖ DALIS

    1. Skaitmeniniai pinigai



Kriptovaliuta, paprastai kalbant, yra internetinis atsiskaitymo vienetas. Tokia valiuta neturi fizinės išraiškos, yra perduodama internetu, laikoma skaitmeniniu būdu ir generuojama pačių vartotojų. Būtent čia ir yra pagrindinis jos skirtumas nuo kitų valiutų. Nėra konkretaus asmens ar institucijos, kuri gali užsiimti valiutos leidimu. Valiuta auga pagal nustatytą algoritmą arba tai, kiek patys vartotojai tam skiria resursų. Todėl vienai institucijai ar individui realiai neįmanoma kriptovaliutos kiekio padidinti arba sumažinti labai staigiai. Valiuta yra skaitmeninė, o perdavimas vyksta internetu. Todėl kriptovaliutos dažnai garantuoja aukštesnio ar žemesnio laipsnio anonimiškumą
Pagrindiniai reikalavimai skaitmeniniams pinigams
autentiškumas: niekas negali pasiimti skaitmeninių pinigų mūsų vardu
vientisumas: sukurtas pinigas negali būti pakeistas (prie 1 negali būti „prirašyta“ keletas nulių)
tiesioginis mokėjimas: atsiskaitant skaitmeniniais pinigais, nereikia kreiptis į banką
saugumas: tie patys skaitmeniniai pinigai negali būti išleisti pakartotinai
anonimiškumas: atsiskaitant skaitmeniniais pinigais, neturi būti reikalinga informacija apie mokėtojus


Bandymų sukurti virtualią valiutą buvo dar 1990-aisiais, tačiau šie nepasiteisino, nes buvo priklausomi ir negalėjo užtikrinti esminės paskirties – visiško nepriklausomumo, nuo vyriausybių, centrinių bankų ar kitų finansinių organizacijų. 2008m. Lapkričio 1d. anonimas pseudonimu Satoshi Nakamoto paskelbė rašto darbą, kuriame išdėstė kaip P2P protokolo pagrindu gali funkcionuoti virtuali valiuta, iš vienos pusės apsaugota nuo infliacijos, bei iš kitos – apsaugota nuo padirbinėjimo. Bitcoin vertė iš pradžių buvo niekinė, 2009m. ir 2010m. jie buvo neverti nieko, 2010m. balandžio mėnesį laikėsi žemiau $0.14. Vėliau atsiradus susidomėjimui ir dėka tuo metu nedidelės pasiūlos – BTC vertė pradėjo kilti ir 2011m. vasarį trumpam šoktelėjo iki $1.06 ir netrukus nusistovėjo ties $0.87. Tačiau informacijai plintant – kriptografinė-valiuta vis pritraukdavo daugiau susidomėjimo ir paklausos. 2013 m gruodį bitcoin vertė buvo viršijusi $1000. Vėliau kaina krito per pus užsidarius vienai iš populiariausiu keityklų Mt.Gox taip pat prie kainos kritimo prisidėjo Kinijos sankcijų įvedimas (5.1 pav). Rašant šį darbą, bitcoin vertė apytiksliai siekia 1200 litų.
5 .17 pav. Bitcoin vertė doleriais 2013-2014 metais


    1. Pinigų funkcijos ir charakteristikos



Literatūroje pinigų sąvoka paprastai apibūdinama taip:
  • Pinigai – tai tarpininkas tarp pirkėjo ir pardavėjo.
  • Pinigai – turtas, kuris yra paprastai priimtas sandoriuose arba skolų aprūpinimui.
  • Pinigai – prekių mainų produktas.
  • Pinigai – bet koks tarpininkas, paprastai naudojamas perkant prekes/paslaugas.
  • Pinigai – visuotinės vertės ekvivalentas, atliekantis mainų, kaupimo, vertės mato, cirkuliacijos ir mokėjimo priemonių funkciją.
Pinigai turi būti:
  • Stabilūs – turi išlaikyti vertę.
  • Portatyvūs – pinigai turi būti lengvi, nedideli, patogūs.
  • Tvarūs - pinigams pasirinktoji medžiaga turi būti atspari dėvėjimuisi.
  • Vienarūšiai – vienodos nominalios vertės pinigai turi būti tokios pačios vertės.
  • Dalūs - – pinigai turi būti skaidomi smulkiomis dalimis, kad būtų galima atiduoti grąžą.
  • Atpažinūs – pinigai turi būti lengvai atpažįstami ir sunkiai suklastojami.


    1. Virtuali valiuta


Virtuali valiuta – tai nereglamentuoti skaitmeniniai pinigai, kuriuos galima naudoti kaip
atsiskaitymo priemonę, tačiau šiuos pinigus į apyvartą išleidžia ir garantuoja ne centrinis bankas.


Skaitmeninės valiutos atsirasdavo ir pradingdavo nuo pat tinklo vystymosi pradžios. Dauguma skaitmeniniu valiutų tai egzistuojančiu tikrų valiutų atvaizdavimas skaitmeninėje erdvėje, prisiminkite Facebook kreditus, skaitmeninę valiutą, leidžiančią jums pirkti virtualias prekes servisuose arba Microsoft taškus ar kompiuterinių žaidimų auksą.
Tačiau skirtingai nuo grynųjų pinigų, skaitmeninei valiutai iki šiol reikėjo tarpininko transakcijų tvarkymui. Visa tai buvo dėl vieno svarbiausio skirtumo tarp dviejų valiutų: jeigu jūs mokate 100 eurų kupiūra, tai jos daugiau nebeturite. Tačiau, jeigu jūsų grynieji pinigai yra nuliai ir vienetai, tai jūs tuo ne visai esate tikras. Todėl patikimas tarpininkas buvo reikalingas tam, kad nuimti sumą nuo sąskaitos to, kuris moka ir įdėti į sąskaitą to, kuriam mokama.

    1. Virtualių valiutų klasifikavimas



Virtualios valiutos, jų veikimo principai
(Europos bankininkystės institucija, 2013 m.).
Europos Centrinis Bankas, 2012 m. išleistoje ataskaitoje „Virtualių valiutų schemos“, išskyrė tris
virtualių valiutų rūšis pagal jų sąveiką su realiąja valiuta ir realiąja ekonomika:
1. Uždaros virtualios valiutos (angl. closed virtual currency schemes ). Tokios valiutos
dažniausiai neturi jokio ryšio su realiąja ekonomika ir naudojamos virtualioje erdvėje :
virtualioms prekėms ir paslaugoms įsigyti. Tokia valiuta neturėtų būti prekiaujama už virtualios
bendruomenės ribų.
2. Virtualios valiutos su vienos krypties srautu (angl. virtual currency schemes with
unidirectional flow ). Virtualią valiutą galima įsigyti naudojant realią valiutą tam tikru kursu,
tačiau negalimas atgalinis keitimas. Tokios rūšies pinigais galima atsiskaityti už virtualias prekes
ir paslaugas, tačiau kartais įmanoma įsigyti realių prekių ir paslaugų.
3. Virtualios valiutos su dviejų krypčių srautu (angl. virtual currency schemes with
bidirectional flow ). Šias valiutas galima pirkti (parduoti) kaip ir bet kokią kitą realią valiutą.
Naudojantis tokiais virtualiais pinigais galima atsiskaityti tiek už virtualias, tiek už realias prekes
ir paslaugas.
Prie trečios rūšies virtualių valiutų galima priskirti naujos kartos decentralizuotas, tiesioginio
apsikeitimo tarp vartotojų (angl. peer-to-peer ) modelio virtualias valiutas, kurios dažnai dar
vadinamos kriptografinėmis elektroninėmis valiutomis (angl. crypto currency ). Šiuo metu


  1. DARBO REZULTATAI IR JŲ APTARIMAS. IŠVADOS IR REKOMENDACIJOS



Darbe apžvelgėme Bitcoin tinklo architektūrą, kaip generuojami blokai, skaitmeninių parašų schemos, kaip vyksta pavedimai. Projektinėje dalyje buvo paleista kriptovaliuta tesnet režimu. Sugeneruotas Pradžios blokas, sujungti klientai į peer-to-peer tinklą.
Bitcon naudoja, darbo įrodymo sistemą, užtikrinant tinklo saugumą. Pradžios blokas- tai blokų grandinės atskaitos taškas, nuo kurio pradedami generuoti nauji blokai. Bitcoin nėra visiškai anononimiški. Kiekvienas Bitcoin savininkas turėtų rūpestingai elgtis su elektroniniais pinigais, turėti atsargines kopijas, privatų raktą užkoduoti.
Bitcoin yra pakankamai nauja sąvoka. Pradedant nagrinėti protokolą pasidaro painu dėl aiškios dokumentacijos nebuvimo. Viena didžiausių problemų, su kuria buvo susidurta projekte, tai, jog Bitcoin nėra detaliai aprašytas akademiniuose darbuose, kadangi yra visai naujas reiškinys, nėra aiškiai ir detaliai susistemintos informacijos. Bitcoin patraukia savo lankstumu, paprastumu ir atvirumu ir suteikia vilties, matant kaip sparčiai kuriamos naujos modifikuotos sistemos..






  1. INFORMACIJOS ŠALTINIAI



  1. Nakamoto.Satoshi „Bitcoin A Peer to-Peer Electronic Cash System“ 2008 – Tai buvo pirmasis veikalas aprašęs Bitcoin sistemą.
  2. Ilya Mironov „ Hash functions: Theory, attacks, and applications“ 2005 –Maišos funkcijos.
  3. https://blockchain.info -Svetainė buvo naudojama blokų grandinės pavedimų analizei.
  4. https://en.bitcoin.it/wiki/Protocol_specification -Naudota informacija gilinantis į bitcoin protokolą.
  5. http://www.tinklusaugumas.lt/cgi-bin/moin.py/Elliptc%20Curve%20Cryptography – Paaiškinimai apie elipsinės kreivės kriptografija.
  6. http://www.oksl.ktu.lt/studijos/T120B129/skaidres/04-maisa.pdf - Apžvelgtos kriptografinės maišos funkcijos.
  7. http://online.wsj.com/article/SB10001424127887323687604578469012375269952.html -Straipsnis apie tai kaip bitcoin pritraukia pinigus.
  8. https://en.bitcoin.it/wiki/Vocabulary - Svetainėje pateiktas Bitcoin terminų paaiškinimas.
  9. https://en.bitcoin.it/wiki/Target - Svetainėje pateikti bitcoin žinučių protokolo paaiškinimai
  10. https://bitcoin.stackexchange.com/questions/21303/creating-genesis-block - Svetainėje pateikiamas pradžios bloko kūrimo paaiškinimas tesnet režime
  11. https://bitcointalk.org/index.php?topic=225690.0 –Forume pateikiamas aprašas apie alternatyvios monetos kūrimą.

Etiketės