E gjithë historia e njerëzimit është një çlirim i vazhdueshëm nga zinxhirët dhe krijimi i të rejave, akoma më të forta. (Autor anonim)
Duke analizuar projekte të shumta blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin etj.), unë e kuptoj se nga pikëpamja teknike të gjitha ato janë të ndërtuara sipas të njëjtave parime. Blockchain-et duken si shtëpi, të cilat, përkundër larmisë së konstrukcioneve, dekorit dhe qëllimeve, kanë një themel, një mur, një çati, dritare, dyer, të cilat janë të lidhura me njëra-tjetrën në mënyra të caktuara. Dhe nëse kupton parimet kryesore të projektimit të ndërtesave, di të gjitha vetitë e materialeve të përdorura, atëherë mund të përcaktosh qëllimin specifik të një shtëpie të caktuar. Aktualisht, me blockchain-in ka lindur situata që të gjithë kanë dëgjuar për të, por pak kush e kupton arkitekturën dhe parimet e funksionimit të tij. Prandaj, lind moskuptim për çfarë dhe si ka kuptim të përdorim teknologjitë e blockchain-it.
Në këtë artikull do të shqyrtojmë karakteristikat dhe parimet e zakonshme për të gjitha blockchain-et. Më pas do të shohim detyrat që mund të zgjidhen me anë të blockchain-it dhe për të përforcuar materialin do të ndërtojmë një blockchain të vogël, por të vërtetë në tokën tonë virtuale!
Pra, le të kujtojmë se cilat probleme blockchain-i i zgjidhi fillimisht.
Jam i sigurt se shumë do të flasin për një bazë të dhënash të shpërndarë, të decentralizuar, publike dhe të pandryshueshme. Por pse ishte e nevojshme kjo të gjitha?
Unë preferoj të filloj studimin e çdo teknologjie duke lexuar standardet, sepse pikërisht mbi to bazohet tërë literatura dhe librat mbi temën e shqyrtuar. Por standardet e blockchain-it aktualisht mungojnë, në ISO janë krijuar vetëm për zhvillimin e tyre. Në këtë moment, çdo projekt publik blockchain ka dokumentin e vet White paper, i cili në thelb është një kërkesë teknike. Projekti i parë që është i njohur publikisht është rrjeti Bitcoin. Shkoni në faqen zyrtare të rrjetit dhe nga e filloi gjithçka.
Detyra e blockchain-it
Pra të gjithë, problemi që zgjidh blockchain në rrjetin pionier Bitcoin është transferimi i besueshëm i pronësisë mbi aktivet digjitale në një mjedis të pasigurt pa ndërmjetës. Për shembull, në rrjetin Bitcoin, aktivet digjitale janë monedhat digitale bitcoin. Të gjitha zgjidhjet teknike të Bitcoin dhe blochchain-ëve të tjerë janë të përqendruara në zgjidhjen e këtij problemi.
Problemet që zgjidh blockchain
Supozoni se një organizatë financiare thotë se ka ndërtuar një rrjet në të gjithë botën, me të cilin mund të dërgoni para tek çdo person. A do t'i besoni asaj? Nëse kjo organizatë është Visa ose MasterCard, ndoshta do t'i besoni, por nëse, për shembull, është AnonymousWorldMoney, ndoshta jo. Pse? Sepse ne e dimë shumë mirë se si ndodhin sistemet e shpërndara nga kompanitë private, me cilat qëllime, dhe në çfarë mund të çojnë ato. Le të shqyrtojmë më në detaje problemet e tillë të sistemeve dhe si mund të zgjidhen ato me përdorimin e teknologjive të blockchain.
Supozoni se në një botë të konventuar si AnonymousWorldMoney ka serverë me baza të dhënash dhe është mirë nëse ka disa në qendra të ndryshme të të dhënave. Kur dërguesi transferon para, regjistrohet një transaksion, i cili është i riprodhuar në të gjitha serverët, dhe paratë arrijnë te marrësi.

Në një botë ideale, një skemë e tillë do të funksiononte shkëlqyeshëm, por në të vërtetë kemi këto probleme:
- Problemi i identifikimit të pjesëmarrësve nga njëra anë dhe nevoja për anonimitet të transaksioneve nga ana tjetër. Domethënë, duhet të transferohen para një marrësi të caktuar dhe në mënyrë që askush, përveç pjesëmarrësve në marrëveshje, të mos e dijë për këtë transaksion. Bankat kanë numra llogarish dhe kartash bankare të lidhura me individë fizikë ose juridikë të përcaktuar, dhe sekreti bankar mbron informacionin mbi transaksionet. Por kush garanton që AnonimWorldMoney nuk përdor të dhënat personale dhe informacionin mbi transaksionet për interesat e saj?
- Si të sigurohemi që marrësi ka marrë saktësisht shumën e dërguar? Njësoj, dërguesi dërgoi 100 $, por marrësi mori 10 $. Dërguesi vjen në zyrën e AnonymousWorldMoney me kuitancën e tij, dhe zyrtari tregon versionin e tij, ku shkruhet se dërguesi dërgoi vetëm 10 $.
- Problemi i një mjedisi të pasigurt, për shembull, mashtrim i quajtur double-spending. Një anëtar i keq i mundshëm mund ta shpenzojë bilancin e tij disa herë, derisa pagesa të kopjohet në të gjithë serverët. , sigurisht, askush nuk e përjashton, dhe koherenca në fund do të arrihet, por dikush nuk do të marrë paratë për shërbimet ose produktet e ofruara. Prandaj, nëse nuk ka besim të plotë në organizatën e pagesave ose në pjesëmarrësit e transaksioneve, duhet të ndërtohet një rrjet i bazuar jo në besim, por në kriptografi.
- AnonymousWorldMoney ka një numër të përfunduar serverësh, të cilët mund të bëhen të paqëndrueshëm ose për arsye të këqija.
- AnonymousWorldMoney do të marrë një tarifë të dukshme.
- Pavarësia e menaxhimit. Gjatë përdorimit të Bitcoin është zbuluar se njerëzit duan jo vetëm të transferojnë monedhat njëri-tjetrit, por edhe të kontrollojnë kushte të ndryshme të transaksionit, të programojnë skenarë funksionimi, të kryejnë veprime automatikisht në varësi të kushteve, etj.
Si e zgjidh blockchain këto probleme
- Identifikimi i pjesëmarrësve bëhet përmes një çifti çelësash: privat dhe publik, dhe algoritmi i nënshkrimit digjital identifikon në mënyrë të qartë dërguesin dhe marrësin, duke e mbajtur identitetin e tyre anonime.
- Transaksionet mblidhen në blloqe, llogaritet hash-i i bllokut, i cili regjistrohet në bllokun tjetër. Kjo renditje e regjistrimit të hash-eve në blloqet e bllokut e ka dhënë emrin teknologjisë blockchain, dhe po ajo e bën të pamundur ndryshimin ose fshirjen e blloqeve ose transaksioneve të veçanta nga blloqet në fshehtësi. Kështu, nëse një transaksion kalon në blockchain, mund të jeni të sigurt se të dhënat e tij do të mbeten të pandryshuara.
- Mashtrimi i double-spending parandaloset me arritjen e konsensusit në rrjet, se cilat të dhëna të konsiderohen të sakta dhe cilat të hodhura. Në rrjetin Bitcoin, konsensusi arrihet përmes provës së punës PoW (Proof-of-Work).
- Besueshmëria e funksionimit të rrjetit arrihet përmes faktit se blockchain është publik, ku çdo pjesëmarrës mund të nisin noden e tij, të marrë një kopje të plotë të blockchain-it dhe, më shumë, të fillojë vetë të verifikojë transaksionet për saktësi. Duhet të theksohet se blockchain-et moderne lejojnë ndërtimin jo vetëm të blockchain-eve publike (të hapura), por edhe të atyre private (të mbyllura), si dhe përdorimin e skemave të kombinuara.
- Nuk është e mundur të eliminohet plotësisht komisioni në blockchain, pasi duhet të paguhen njerëzit që mbështesin rrjetin, por në blockchain nevoja për komisionin provohet kaq bindshëm saqë nuk mbeten dyshime për nevojën e saj.
- Blockchain-et moderne kanë mundësi të realizojnë logjikën e biznesit, e cila në blockchain quhet Smart Contracts. Logjika e kontratave inteligjente realizohet në gjuhë të ndryshme programimi të nivelit të lartë.
Më pas do të shqyrtojmë këto zgjidhje më në detaje.
Arkitektura e blockchain-it
Pjesët përbërëse të blockchain-it
Ădo pjesĂ«marrĂ«s mund tĂ« ngrejĂ« nodĂ«n e tij me njĂ« kopje tĂ« plotĂ« tĂ« blockchain-it (full node). Nodat e plota, tĂ« cilat mund tĂ« regjistrojnĂ« transaksione nĂ« blockchain, quhen noda konsensusi (witness) ose minatorĂ« (miner). Nodat e plota, tĂ« cilat vetĂ«m verifikojnĂ« saktĂ«sinĂ« e transaksioneve, quhen noda tĂ« audituara (audit). KlientĂ«t e lehtĂ« (light clients) nuk ruajnĂ« kopje tĂ« plota tĂ« blockchain-it, por ndĂ«rveprojnĂ« me rrjetin, duke pĂ«rdorur nodat e plota.
Shumica e përdoruesve për të kryer transaksione përdorin pikërisht klientë të lehtë ose portofolë web. Të gjitha nodat janë të lidhura me njëra-tjetrën. Me këtë grup elementesh, arkitektura e rrjetit bëhet më e qëndrueshme:

Cikli jetësor i transaksionit
Le të shikojmë ciklin jetësor të transaksionit dhe ta analizojmë atë në pjesë:

Teknologjitë e blockchain-it
Të ndalemi më në detaje për zgjidhjet teknike dhe lidhjet e tyre me njëra-tjetrën.
Identifikimi
Ădo transaksion nĂ« blockchain duhet tĂ« jetĂ« i nĂ«nshkruar me njĂ« nĂ«nshkrim digjital. Prandaj, pĂ«r tĂ« kryer njĂ« transaksion, çdo pjesĂ«marrĂ«s duhet tĂ« ketĂ« njĂ« çift çelĂ«sash: privat / publik. NdonjĂ«herĂ«, çifti i çelĂ«save quhet portofol (wallet), pasi çelĂ«sat janĂ« nĂ« mĂ«nyrĂ« unike tĂ« lidhur me njĂ« adresĂ« digjitale unike dhe me bilancin e pjesĂ«marrĂ«sit. NĂ« tĂ« vĂ«rtetĂ«, çelĂ«sat dhe adresat janĂ« thjesht vargje numrash nĂ« sisteme tĂ« ndryshme numĂ«rimi. Shembuj tĂ« çelĂ«save dhe adresĂ«s sĂ« portofolit:
ĂelĂ«si privat: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
ĂelĂ«si publik: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Adresa: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27VPër krijimin e një nënshkrimi digjital në blockchain përdoret një algjoritëm, i bazuar në kurba eliptike: Algoritmi i Nënshkrimit Digjital me Kripton e Kurbës Eliptike (ECDSA). Për funksionimin e tij, çelësi privat (numër 256 bit) zakonisht merret në mënyrë të rastësishme. Numri i mundësive të çelësave është 2 në fuqinë 256, prandaj mund të flasim për pamundësinë praktike të përputhjes së vlerave të çelësave privat.
Pastaj, çelësi publik merret nga ai privat duke shumëzuar vlerën e tij me koordinatat e një pike që ndodhet në kurbën eliptike, duke rezultuar në koordinatat e një pike të re në të njëjtën kurbë. Ky veprim garanton fitimin e një çifti çelësash, të përshtatshëm për nënshkrimet dixhitale të transaksioneve. Dhe së fundi, adresa e portofolit llogaritet në mënyrë të qartë nga çelësi publik.
Ka shumë artikuj me detaje mbi kriptografinë që përdoret në blockchain, për shembull:
ĂelĂ«si privat duhet tĂ« mbetet strikt sekret dhe tĂ« ruhet nĂ« siguri. ĂelĂ«si publik njihet nga tĂ« gjithĂ«. NĂ« rast se humbet çelĂ«si privat, rikthimi i qasjes nĂ« asete (monedha) Ă«shtĂ« i pamundur dhe paratĂ« do tĂ« humbasin pĂ«rgjithmonĂ«. Prandaj, detyra e ruajtjes sĂ« sigurt tĂ« çelĂ«save privat Ă«shtĂ« jashtĂ«zakonisht e rĂ«ndĂ«sishme, sepse kjo nuk Ă«shtĂ« njĂ« bankĂ«, ku gjithmonĂ« mund tĂ« shkosh me pasaportĂ« dhe tĂ« rikthesh llogarinĂ«. Ekziston njĂ« industri e tĂ«rĂ« pĂ«r prodhimin e ashtuquajturave portofola tĂ« ftohtĂ« kriptografikĂ«, tĂ« ngjashĂ«m me USB:

ose mund të përdoren mënyra më të sigurta, si p.sh. goditja e vlerës së çelësit privat në meda:

Transaksionet
Më shumë rreth strukturës së transaksionit mund të shihni në artikullin . E rëndësishme për ne është të kuptojmë se çdo transaksion ka të paktën të dhënat e mëposhtme:
Nga: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - adresa digjitale e dërguesit
Për: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - adresa digjitale e marrësit
Vlera: 0.0001 - shuma e transaksionit
Hash i transaksionit: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - hash-i i transaksionitMë pas, transaksioni nënshkruhet me çelësin privat dhe dërgohet (shih detajet për funksionimin e protokollit ) të gjithë nodave në blockchain, të cilët verifikojnë transaksionet për vlefshmëri. Algoritmi i verifikimit të transaksionit është i ndërlikuar dhe përfshin .
Blloqet e transaksioneve
Pas së kontrollit të vlefshmërisë së transaksioneve, nodet formojnë blloqe nga ato. Përveç transaksioneve, në bllok shkruhet edhe hash-i i bllokut të mëparshëm, një numër (numëruesi Nonce), dhe kalkulohet hash-i i bllokut aktual sipas algoritmit SHA-256. Hash-i duhet të përmbushë kushte të caktuara vështirësie. Për shembull, në rrjetin Bitcoin, vështirësia e hash-it ndryshon automatikisht çdo dy javë në varësi të fuqisë së rrjetit, në mënyrë që blloku të krijohet rreth çdo 10 minuta. Vështirësia përcaktohet nga kushti i mëposhtëm: hash-i i gjetur duhet të jetë më i vogël se një numër paraprakisht të caktuar. Nëse ky kusht nuk përmbushët, atëherë Nonce-i rritet me 1 dhe puna për kalkulimin e hash-it përsëritet. Për gjetjen e hash-it përdoret fusha Nonce, pasi këto janë të vetmet të dhëna në bllok që mund të ndryshohen, pjesa tjetër duhet të mbetet e pandryshuar. Hash-i i saktë duhet të ketë një numër të caktuar zerosh në fillim, për shembull, një nga hash-et aktuale:
000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91Gjetja e suksesshme e hash-it shĂ«rben si provĂ« e punĂ«s sĂ« kryer (Proof-of-Work, PoW) pĂ«r rrjetet Bitcoin ose Ethereum. Procesi i gjetjes sĂ« hash-eve quhet mining, ashtu si nxjerrja e arit. Emri pĂ«rcakton saktĂ«sisht natyrĂ«n e procesit, pasi pĂ«rfshin thjesht njĂ« provĂ« rastĂ«sish, dhe nĂ«se dikush gjen njĂ« hash tĂ« pĂ«rshtatshĂ«m, kjo Ă«shtĂ« me tĂ« vĂ«rtetĂ« njĂ« fat. ĂshtĂ« si tĂ« gjesh njĂ« copĂ« ari nĂ« tonelata shkĂ«mbinj shkretĂ«. ShpĂ«rblimi pĂ«r njĂ« bllok aktualisht Ă«shtĂ« 12.5 BTC dhe, nĂ«se shumzohet me çmimin aktual tĂ« bitcoin $3900, rezulton mĂ« shumĂ« se njĂ« kilogram ar tĂ« pastĂ«r. Ka diçka pĂ«r tĂ« luftuar!
Pas gjetjes së suksesshme të hash-it, blloku dhe hash-i i gjetur regjistrohen në blockchain si blloku i ardhshëm. Më shumë informacione mbi strukturën e blloqeve mund të kërkoni në artikullin , dhe më poshtë jap një skemë të thjeshtuar:

Blockchain fillon me një bllok, i cili nuk ka ende një hash të bllokut të mëparshëm. Një bllok i tillë në blockchain është i vetëm dhe ka emrin e vet, Blloku Genesis. Blloqet e tjera kanë një strukturë të njëjtë dhe dallohen vetëm nga numri i transaksioneve. Transaksionet reale dhe blloqet që krijohen aktualisht në Bitcoin ose Ethereum mund të shihen në .
Madhësia e blloqeve në Bitcoin është e kufizuar në 1MB dhe me një sasi minimale informacioni në transaksion prej rreth 200 byte, maksimalisht në një bllok mund të ketë rreth 6000 transaksione. Nga kjo, pasi, ndodhet edhe performanca e Bitcoin, mbi të cilën të gjithë qeshin: një bllok gjenerohet përafërsisht çdo 10 minuta * 60 sek = 600 sek, që i jep një performancë formale rreth 10 TPS. Megjithatë, në të vërtetë - kjo nuk është performancë, por një algoritëm pune i realizuar qëllimisht. Në Ethereum, për të konkuruar thjesht u bë koha e gjenerimit të bllokut 15 sekondash dhe performanca formalisht u rrit. Prandaj, në blockchain-et që përdorin PoW si konsensus, është krejtësisht pa kuptim të krahasohet performanca, pasi ajo varet drejtpërdrejt nga kompleksiteti i llogaritjes së hash-it, që mund të caktohet siç dëshirohet.
Forcat
ĂfarĂ« ndodh nĂ«se, pĂ«r shembull, disa nyje kanĂ« gjetur hash-e qĂ« pĂ«rmbushin kushtet e vĂ«shtirĂ«sisĂ«, por janĂ« tĂ« ndryshme nĂ« vlerĂ« (me fjalĂ« tĂ« tjera, kanĂ« arritur konsensa tĂ« ndryshme) dhe kanĂ« regjistruar blloqet nĂ« blockchain? Le tĂ« shohim se si blockchain mbrohet nga kjo situatĂ«. NĂ« kĂ«tĂ« rast, ndodh ajo qĂ« quhet fork (âdallimâ), dhe blockchain ka dy versione tĂ« zinxhirit:

ĂfarĂ« ndodh mĂ« pas? Pastaj njĂ« pjesĂ« e rrjetit nis tĂ« punojĂ« mbi bllokun N+2 nga njĂ« zinxhir, dhe pjesa tjetĂ«r mbi zinxhirin tjetĂ«r:

Njëri nga këto blloqe do të gjendet më parë dhe do të dërgohet në blockchain, dhe sipas rregullave, blockchain duhet të kalojë në zinxhirin më të gjatë dhe të anulojë të gjitha transaksionet nga blloku alternativ:

NĂ« kĂ«tĂ« rast, mund tĂ« ndodhĂ« njĂ« situatĂ« ku transaksioni i njĂ« pĂ«rdoruesi ndodhej vetĂ«m nĂ« njĂ« nga blloqet e forkut, i cili Ă«shtĂ« anuluar. Prandaj, pĂ«r t'u siguruar qĂ« transaksioni i nevojshĂ«m Ă«shtĂ« regjistruar nĂ« blockchain, ka njĂ« rekomandim tĂ« pĂ«rgjithshĂ«m â para se tĂ« besoni njĂ« transaksion, prisni qĂ« disa blloqe tĂ« tjerĂ« tĂ« shtohen nĂ« blockchain. Rekomandimet pĂ«r numrin e blloqeve qĂ« duhet pritur ndryshojnĂ« pĂ«r blockchain tĂ« ndryshme. PĂ«r shembull, pĂ«r rrjetin Bitcoin, minimumi Ă«shtĂ« 2 blloqe, maksimumi 6.
I njĂ«jti fenomen me forkun e blloqeve do tĂ« vĂ«rehet edhe gjatĂ« asaj qĂ« quhet sulmi 51% â kjo ndodh kur njĂ« grup minierĂ«sh pĂ«rpiqet tĂ« krijojĂ« njĂ« zinxhir alternativ blloqesh, duke synuar tĂ« anulojĂ« zinxhirin me transaksionet e tyre mashtruese. MegjithatĂ«, nĂ« kĂ«tĂ« kohĂ«, nĂ« vend tĂ« mashtrimit, Ă«shtĂ« mĂ« e arsyeshme tĂ« shpenzohet kapaciteti pĂ«r minimin e ndershĂ«m.
Konsensusi
Për të regjistruar një bllok në blockchain, rrjeti duhet të arrijë konsensusin. Le të kujtojmë detyrën e arritjes së konsensusit në rrjetet kompjuterike të komunikimit. Problemi formulohet si detyra e gjeneralëve bizantinë BFT (). Duke lënë pas përshkrimin e pikturës së problemeve të ushtrisë bizantine, detyra mund të formulohet kështu: si mund të arrijnë nyjet e rrjetit në një rezultat të përbashkët, nëse një pjesë e nyjeve të rrjetit mund ta deformojnë atë me vetëdije. Algoritmet ekzistuese për zgjidhjen e problemit BFT tregojnë se rrjeti mund të funksionojë në mënyrë të saktë, nëse mashtruesit janë më pak se 1/3. Pse në rrjetin Bitcoin nuk u përdor konsensusi BFT? Pse ishte e nevojshme të përdoret PoW? Ka disa arsye:
- BFT funksionon mirë me një grup të vogël dhe të fixuar nyjesh, ndërsa në blockchain publik numri i nyjeve është i paparashikueshëm dhe, më tepër, nyjet mund të aktivizohen dhe çaktivizohen në mënyrë arbitrare.
- ĂshtĂ« e nevojshme tĂ« motivohet njerĂ«zit tĂ« aktivizojnĂ« nyjet e blockchain. PĂ«r kĂ«tĂ«, njerĂ«zit duhet tĂ« marrin shpĂ«rblim. NĂ« BFT formal dhe gjithĂ«pĂ«rfshirĂ«s nuk ka asgjĂ« pĂ«r tĂ« marrĂ« shpĂ«rblim, ndryshe nga çfarĂ« Ă«shtĂ« shpĂ«rblimi nĂ« PoW, i cili kuptohet intuitivisht nga tĂ« gjithĂ«: pĂ«r energjinĂ« elektrike qĂ« pĂ«rdoret nga procesori gjatĂ« gjenerimit tĂ« hash-it tĂ« bllokut.
Përveç PoW, ekzistojnë disa konsensa të tjera që përdoren në blockchain-të moderne, për shembull:
- PoS (Proof-of-Stake) â nĂ« blockchain
- DPoS (Delegated Proof-of-Stake) â nĂ« blockchain
- Modifikimet BFT: SBFT (BFT i thjeshtuar) dhe PBFT (BFT praktik), për shembull, në blockchain
Le të ndalemi pak te konsensusi PoS, pasi PoS dhe variantet e tij kanë përfituar më shumë popullaritet në blockchain-et private. Pse pikërisht në ato private? Nga njëra anë, karakteristikat e PoS janë më të mira krahasuar me PoW, pasi për arritjen e konsensusit kërkohen burime të vogla kompjuterike, duke rritur kështu shpejtësinë e regjistrimit të të dhënave në blockchain. Por nga ana tjetër, në PoS ka më shumë mundësi për mashtrim, kështu që për të neutralizuar këtë, të gjithë pjesëmarrësit në blockchain duhet të jenë të njohur.
Konsensusi PoS bazohet në zgjedhjen e nyjës, e cila mund të regjistrojë një bllok me transaksione në blockchain në varësi të shumës së mjeteve në llogari, në fakt, jo në llogari, por në kolateral. Më saktë, sa më shumë mjete të kesh në kolateral, aq më shumë probabilitet ka që rrjeti të zgjedhë nyjën tënde për regjistrimin e bllokut. Kolaterali nuk do të kthehet nëse blloku rezulton të jetë i pavlefshëm. Kështu realizohet mbrojtja nga mashtrimi. Ka variante të ndryshme të PoS:
- Konsensusi Delegated PoS (DPoS) ndanë pjesëmarrësit në "votues" dhe "validues". Mbajtësit e monedhave (pjesëmarrësit që votojnë) i delegojnë të drejtat e tyre për të verifikuar dhe regjistruar transaksionet në blockchain tek pjesëmarrës të tjerë. kështu, validuesit e kryejnë të gjithë punën llogariten dhe marrin shpërblim për këtë, ndërsa prania e votuesve garanton ndershmërinë e validuesve, pasi ata mund të shkarkohen në çdo moment.
- Konsensusi LPoS (Leased Proof-of-Stake) lejon transferimin e fondeve të tyre në huazim te node të tjera, në mënyrë që ato të kenë më shumë mundësi për të verifikuar blloqet. Kështu, mund të fitoni komision për transaksionet, duke mos marrë pjesë në verifikimin e vetë transaksioneve dhe minimin e blloqeve.
Ekziston njĂ« numĂ«r tjetĂ«r konsensusi qĂ« ende nuk kanĂ« marrĂ« shumĂ« pĂ«rhapje; kĂ«tu thjesht do tâi pĂ«rmend pĂ«r informacion, ndĂ«rsa njĂ« pĂ«rmbledhje e algoritmeve tĂ« konsensusit mund tĂ« shihet, pĂ«r shembull, nĂ« artikullin: .
- PoET ( Proof-of-Elapsed Time )
- PoC ( Proof-of-Capacity )
- PoB ( Proof-of-Burn )
- PoWeight ( Proof-of-Weight )
- PoA ( Proof-of-Activity ) â PoW + PoS
- PoI ( Proof-of-Importans )
Besueshmëria dhe modelet e implementimit të blockchain-eve
Blockchain publik
Qëndrueshmëria Publik ose emri tjetër Blockchain pa paftuar arrihet duke qenë se të gjithë mund të lidhen dhe të shohin informacionin apo madje të lidhin nodin e tyre, dhe besimi ndërtohet mbi konsensusin PoW.
Blockchain privat
Privat ose Blockchain privat me leje. Në këto blockchain, vetëm një grup i caktuar pjesëmarrësish (organizata ose individë) kanë qasje në informacion. Këto blockchain ndërtohen nga organizata me qëllim rritjen e përfitimit të përgjithshëm ose efikasitetit. Besueshmëria e tyre sigurohet nga qëllimet e përbashkëta të pjesëmarrësve dhe algoritmet e konsensusit PoS dhe BFT.
Konsorciumi i blockchain
Ekzistojnë Konsorcium ose Blockchain publik me leje. Këto janë blockchain ku çdo person mund të lidhet për të parë, por për të shtuar informacionin ose për të lidhur nodin e tij, një pjesëmarrës mund të bëjë vetëm me lejen e pjesëmarrësve të tjerë. Këto blockchain ndërtohen nga organizata me qëllim rritjen e besimit nga klientët apo konsumatorët e produkteve ose shoqërisë në tërësi. Këtu, besueshmëria gjithashtu arrihet nga prania e besimit ndërmjet pjesëmarrësve dhe të njëjtave algoritme konsensusi PoS dhe BFT.
Kontratë të mençura
Në blockchain-et e realizuara pas Bitcoin, është e shtuar ndonjëherë mundësia për ekzekutimin e kontratave inteligjente. Në thelb, një kontratë inteligjente është një transaksion që përmban një kod programimi për ekzekutimin. Kontratate inteligjente në rrjetin Ethereum ekzekutohen në EVM (Ethereum Virtual Machine). Për të filluar ekzekutimin e një kontrate inteligjente, duhet ta aktivizosh atë me një transaksion tjetër, ose duhet të përmbushen kushtet për ekzekutim. Rezultatet e ekzekutimit të kontratës inteligjente gjithashtu do të regjistrohen në blockchain. Marrja e të dhënave nga jashtë blockchain-it është e mundur, por shumë e kufizuar.
Cilën logjikë biznesi mund të realizosh me anë të një kontrate inteligjente? Në të vërtetë, nuk ka shumë mundësi, për shembull, kontrolli i kushteve në të dhënat nga blockchain-i, ndryshimi i pronarëve të aseteve digjitale në varësi të këtyre kushteve, regjistrimi i të dhënave në një depo të përhershme brenda blockchain-it. Logjika realizohet në një gjuhë të veçantë të nivelit të lartë, Solidity.
Një shembull klasik i funksionalitetit që realizohet me përdorimin e kontratave inteligjente është lëshimi i tokeneve për zhvillimin e ICO. Për shembull, unë kam realizuar një kontratë inteligjente për lëshimin e 500,000,000 AlexToken. Për në
kodin burimor të kontratës së mençur në gjuhën Solidity
pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart,
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance);
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}dhe përfaqësimi binar, siç e sheh rrjeti
60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029Më shumë detaje rreth kontratave smart mund të gjenden në artikullin: .
Përfundimi
Ne kemi listuar teknologjitë mbi të cilat janë ndërtuar bllokçinat moderne dhe si janë të lidhura me njëra-tjetrën. Tani le të formulojmë se cilat probleme mund të zgjidhen me anë të bllokçinave, dhe të cilat kanë për t'u provuar, në më të mirën e rasteve, si joefektive. Pra, përdorimi i bllokçinave nuk është domosdoshmërisht i nevojshëm nëse:
- Transaksionet kryhen në një mjedis të besueshëm;
- Prania e komisioneve të ndërmjetësve nuk e përkeqëson jetën e pjesëmarrësve;
- Pjesëmarrësit nuk kanë pasuri që mund të paraqiten si aktive digjitale;
- Nuk ka shpërndarje në aktive digjitale, dmth, vlera kontrollohet ose ofrohet vetëm nga një pjesëmarrës.
Cila është e ardhmja që pret bllokçinat? Tani për tani, mund të supozojmë vetëm mundësitë e zhvillimit të teknologjive bllokçin:
- Bllokçinat do të bëhen teknologji të zakonshme të bazës së të dhënave, si p.sh., SQL ose NoSQL për zgjidhjen e një rrethi të caktuar problemesh;
- Bllokçinat do të bëhen një protokoll shumë të përhapur, si HTTP për Internetin;
- Bllokçinat do të jenë baza e një sistemi të ri financiar dhe politik të planetit!
Në pjesën e ardhshme, ne do të shikojmë se cilat blockchain janë aktualisht dhe për çfarë qëllimi përdoren në industri të ndryshme.
Kjo është vetëm fillimi!
Burimi: habr.com
