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.
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.
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
Š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.
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
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
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
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šą.
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
|
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
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.
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
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)
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:
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
}
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ų.
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
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
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.
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.
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
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..
-
Nakamoto.Satoshi „Bitcoin A Peer to-Peer Electronic Cash System“ 2008 – Tai buvo pirmasis veikalas aprašęs Bitcoin sistemą.
-
Ilya Mironov „ Hash functions: Theory, attacks, and applications“ 2005 –Maišos funkcijos.
-
https://blockchain.info -Svetainė buvo naudojama blokų grandinės pavedimų analizei.
-
https://en.bitcoin.it/wiki/Protocol_specification -Naudota informacija gilinantis į bitcoin protokolą.
-
http://www.tinklusaugumas.lt/cgi-bin/moin.py/Elliptc%20Curve%20Cryptography – Paaiškinimai apie elipsinės kreivės kriptografija.
-
http://www.oksl.ktu.lt/studijos/T120B129/skaidres/04-maisa.pdf - Apžvelgtos kriptografinės maišos funkcijos.
-
http://online.wsj.com/article/SB10001424127887323687604578469012375269952.html -Straipsnis apie tai kaip bitcoin pritraukia pinigus.
-
https://en.bitcoin.it/wiki/Vocabulary - Svetainėje pateiktas Bitcoin terminų paaiškinimas.
-
http://vddb.library.lt/fedora/get/LT-eLABa-0001:E.02~2006~D_20060608_201450-20142/DS.005.0.01.ETD - Darbe naudota informacija apie eliptinių kreives
-
http://www.srraipsniai.lt/ ergonomika/puslapis/12749 - Darbas prie stalo, ergonomika.
-
https://en.bitcoin.it/wiki/Target - Svetainėje pateikti bitcoin žinučių protokolo paaiškinimai
-
https://bitcoin.stackexchange.com/questions/21303/creating-genesis-block - Svetainėje pateikiamas pradžios bloko kūrimo paaiškinimas tesnet režime
-
https://bitcointalk.org/index.php?topic=225690.0 –Forume pateikiamas aprašas apie alternatyvios monetos kūrimą.
Komentarų nėra:
Rašyti komentarą