{"id":37868,"date":"2019-10-31T22:20:16","date_gmt":"2019-10-31T19:20:16","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blokchejn-chto-nam-stoit-poc-postroit\/"},"modified":"2019-10-31T22:20:16","modified_gmt":"2019-10-31T19:20:16","slug":"blokchejn-chto-nam-stoit-poc-postroit","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/blokchejn-chto-nam-stoit-poc-postroit","title":{"rendered":"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Syt\u00eb friksohen, por duar k\u00ebrkojn\u00eb pun\u00eb!<\/i><\/p>\n<p>N\u00eb artikujt e kaluar kemi shqyrtuar teknologjit\u00eb mbi t\u00eb cilat ndodhen blockchain-\u00ebt (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443282\/\">\u00c7far\u00eb na kushton t\u00eb nd\u00ebrtojm\u00eb blockchain?<\/a><\/noindex>) dhe rastet q\u00eb mund t\u00eb realizojm\u00eb me ndihm\u00ebn e tyre (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/449986\/\">\u00c7far\u00eb na duhen p\u00ebr t\u00eb nd\u00ebrtuar nj\u00eb rast?<\/a><\/noindex>). Ka ardhur koha t\u00eb punojm\u00eb me duar! P\u00ebr t\u00eb realizuar pilote dhe PoC (Prova e Konceptit) un\u00eb preferoj t\u00eb p\u00ebrdor\u00eb cloud, pasi q\u00eb ato jan\u00eb t\u00eb qasshme nga \u00e7do pik\u00eb e bot\u00ebs dhe, shpeshher\u00eb, nuk \u00ebsht\u00eb e nevojshme t\u00eb humbasim koh\u00eb n\u00eb instalimin e bezdissh\u00ebm t\u00eb ambientit, pasi ka konfigurime t\u00eb paracaktuara. Pra, le t\u00eb b\u00ebjm\u00eb di\u00e7ka t\u00eb thjesht, si nj\u00eb rrjet p\u00ebr transferimin e monedhave midis pjes\u00ebmarr\u00ebsve dhe ta quajm\u00eb modestisht Sytcoin. P\u00ebr k\u00ebt\u00eb do t\u00eb p\u00ebrdorim cloud-in e IBM dhe blockchain-in universal Hyperledger Fabric. Fillimisht, le t\u00eb shqyrtojm\u00eb pse Hyperledger Fabric quhet nj\u00eb blockchain universal?<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/c19278d99d5b7edb9f50ea6306c2fd46.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Hyperledger Fabric \u2014 blockchain universal<\/h2>\n<p>\nN\u00eb terma t\u00eb p\u00ebrgjithsh\u00ebm, nj\u00eb sistem informatik universal \u00ebsht\u00eb:<\/p>\n<ul>\n<li>Nj\u00eb grup serverash dhe nj\u00eb b\u00ebrtham\u00eb programore q\u00eb kryen logjik\u00ebn e biznesit;<\/li>\n<li>Interfacet p\u00ebr nd\u00ebrveprimin me sistemin;<\/li>\n<li>Mjetet p\u00ebr regjistrimin, autentifikimin dhe autorizimin e pajisjeve \/ njer\u00ebzve;<\/li>\n<li>Nj\u00eb baz\u00eb t\u00eb dh\u00ebnash q\u00eb ruan t\u00eb dh\u00ebna operative dhe arkivore:<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/f11fe73de54b0573d44fae903d367df9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVersionin zyrtar, \u00e7far\u00eb \u00ebsht\u00eb Hyperledger Fabric mund ta lexoni n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.hyperledger.org\">website<\/a><\/noindex>, nd\u00ebrsa shkurtimisht, Hyperledger Fabric \u00ebsht\u00eb nj\u00eb platform\u00eb open-source q\u00eb lejon nd\u00ebrtimin e blockchain-eve t\u00eb mbyllura dhe ekzekutimin e kontratave inteligjente t\u00eb shkruara n\u00eb gjuh\u00ebt e programimit JS dhe Go. Le t\u00eb shqyrtojm\u00eb me detaje arkitektur\u00ebn e Hyperledger Fabric dhe t\u00eb bindemi se kjo \u00ebsht\u00eb nj\u00eb sistem universal, n\u00eb t\u00eb cilin ekziston vet\u00ebm specifika e ruajtjes dhe sh\u00ebnimit t\u00eb t\u00eb dh\u00ebnave. Specifika q\u00ebndron n\u00eb faktin se t\u00eb dh\u00ebnat, ashtu si n\u00eb t\u00eb gjitha blockchain-et, ruhen n\u00eb blloqe, t\u00eb cilat futen n\u00eb blockchain vet\u00ebm n\u00ebse pjes\u00ebmarr\u00ebsit arrijn\u00eb nj\u00eb konsensus dhe pas regjistrimit t\u00eb dh\u00ebnat nuk mund t\u00eb korrigjohen apo t\u00eb fshihen pa u v\u00ebn\u00eb re.<\/p>\n<h2>Arkitektura e Hyperledger Fabric<\/h2>\n<p>\nN\u00eb diagram \u00ebsht\u00eb paraqitur arkitektura e Hyperledger Fabric:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/7488d70b330af2bbae1db67005f22a3e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Organizatat <\/b> \u2014 organizatat p\u00ebrmbajn\u00eb peer, k\u00ebshtu q\u00eb blockchain ekziston fal\u00eb mb\u00ebshtetjes s\u00eb organizatave. Organizatat e ndryshme mund t\u00eb hyjn\u00eb n\u00eb nj\u00eb channel.<\/p>\n<p><b>Channel <\/b> \u2014 struktura logjike q\u00eb bashkon peer-t n\u00eb grupe, k\u00ebshtu q\u00eb krijohet blockchain. Hyperledger Fabric mund t\u00eb p\u00ebrpunoj\u00eb nj\u00ebkoh\u00ebsisht disa blockchain-e me logjik\u00eb t\u00eb ndryshme t\u00eb biznesit.<\/p>\n<p><b>Ofruesi i Sh\u00ebrbimeve t\u00eb An\u00ebtar\u00ebsis\u00eb (MSP)<\/b> \u2014 \u00ebsht\u00eb CA (Autoriteti i Certifikimit) p\u00ebr l\u00ebshimin e identitetit dhe cakimin e roleve. P\u00ebr t\u00eb krijuar nj\u00eb nod duhet t\u00eb bashk\u00ebpunoni me MSP.<\/p>\n<p><b>Peer nodes<\/b> \u2014 kontrollojn\u00eb transaksionet, ruajn\u00eb bllok\u00e7enin, realizojn\u00eb kontrata inteligjente dhe nd\u00ebrveprojn\u00eb me aplikacionet. Peer-at kan\u00eb identitet (certifikat\u00eb dixhitale), e cila jepet nga MSP. N\u00eb ndryshim nga rrjeti Bitcoin apo Ethereum, ku t\u00eb gjitha nodet jan\u00eb t\u00eb barabarta, n\u00eb Hyperledger Fabric nodet luajn\u00eb role t\u00eb ndryshme:<\/p>\n<ul>\n<li>Peer mund t\u00eb jet\u00eb <b>peer i miratuar<\/b> (EP) dhe realizon kontrata inteligjente.<\/li>\n<li><b>Peer i angazhuar<\/b> (CP) \u2014 thjesht ruajn\u00eb t\u00eb dh\u00ebnat n\u00eb bllok\u00e7en dhe azhurnojn\u00eb \"Gjendjen e Bot\u00ebs\".<\/li>\n<li><b>Peer Ankor<\/b> (AP) \u2014 n\u00ebse n\u00eb bllok\u00e7en marrin pjes\u00eb disa organizata, at\u00ebher\u00eb peer-at ankor p\u00ebrdoren p\u00ebr lidhjen mes tyre. \u00c7do organizat\u00eb duhet t\u00eb ket\u00eb nj\u00eb ose m\u00eb shum\u00eb peer ankor. Me ndihm\u00ebn e AP \u00e7do peer n\u00eb organizat\u00eb mund t\u00eb marr\u00eb informacionin p\u00ebr t\u00eb gjith\u00eb peer-at n\u00eb organizata t\u00eb tjera. P\u00ebr sinkronizimin e informacionit mes AP p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">protokolli gossip<\/a><\/noindex>.<\/li>\n<li><b>Peer Lider<\/b> \u2014 n\u00ebse organizata ka disa peer-a, vet\u00ebm peer-i lider do t\u00eb marr\u00eb blloqet nga sh\u00ebrbimi i renditjes dhe t'ua jap\u00eb atyre peer-\u00ebve t\u00eb tjer\u00eb. Lideri mund t\u00eb p\u00ebrcaktohet n\u00eb m\u00ebnyr\u00eb statike, por gjithashtu mund t\u00eb zgjidhet dinamikisht nga peer-at n\u00eb organizat\u00eb. P\u00ebr sinkronizimin e informacionit mbi lider\u00ebt p\u00ebrdoret gjithashtu protokolli gossip.<\/li>\n<\/ul>\n<p>\n<b>Aktivitetet <\/b> \u2014 entitete me vler\u00eb q\u00eb ruajn\u00eb n\u00eb bllok\u00e7en. M\u00eb konkretisht, k\u00ebto jan\u00eb t\u00eb dh\u00ebna \u00e7el\u00ebs-vler\u00eb n\u00eb formatin JSON. K\u00ebto t\u00eb dh\u00ebna regjistrohen n\u00eb bllok\u00e7en \"Blockchain\". Ato kan\u00eb nj\u00eb histori, e cila ruhet n\u00eb bllok\u00e7en dhe nj\u00eb gjendje aktuale, e cila ruhet n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave \"Gjendja e Bot\u00ebs\". Strukturat e t\u00eb dh\u00ebnave mbushen lirisht n\u00eb var\u00ebsi t\u00eb detyrave t\u00eb biznesit. Nuk ka fusha t\u00eb detyrueshme, rekomandimi i vet\u00ebm \u00ebsht\u00eb q\u00eb aktivitetet t\u00eb ken\u00eb nj\u00eb pronar dhe t\u00eb paraqesin vler\u00eb. <\/p>\n<p><b>Regjistri <\/b> \u2014 p\u00ebrb\u00ebhet nga bllok\u00e7eni \"Blockchain\" dhe baza e t\u00eb dh\u00ebnave \"Gjendja e Bot\u00ebs\", ku ruhet gjendja aktuale e aktiviteteve. Gjendja e Bot\u00ebs p\u00ebrdor LevelDB ose CouchDB.<\/p>\n<p><b>Kontrata inteligjente<\/b> \u2014 me ndihm\u00ebn e kontratave inteligjente realizohet logjika e biznesit t\u00eb sistemit. N\u00eb Hyperledger Fabric, kontratat inteligjente quhen chaincode. Me an\u00eb t\u00eb chaincode p\u00ebrcaktohen aktivitetet dhe transaksionet mbi to. N\u00ebse flasim n\u00eb gjuh\u00ebn teknike, kontratat inteligjente jan\u00eb module programi, t\u00eb realizuara n\u00eb gjuh\u00ebt programimi JS ose Go.<\/p>\n<p><b>Politika e miratimit<\/b> \u2014 p\u00ebr \u00e7do chaincode mund t\u00eb p\u00ebrcaktohen politika se sa dhe nga kush duhet pritur miratimet p\u00ebr transaksion. N\u00ebse politika nuk \u00ebsht\u00eb p\u00ebrcaktuar, at\u00ebher\u00eb p\u00ebrdoret nga e drejta: \u201ctransaksioni duhet t\u00eb miratohet nga \u00e7do an\u00ebtar (member) i \u00e7do organizate n\u00eb kanal\u201d. Shembuj t\u00eb politikave:<\/p>\n<ul>\n<li>Transaksioni duhet t\u00eb konfirmohet nga \u00e7do administrator t\u00eb organizat\u00ebs;<\/li>\n<li>Duhet t\u00eb konfirmohet nga \u00e7do an\u00ebtar ose klient i organizat\u00ebs;<\/li>\n<li>Duhet t\u00eb konfirmohet nga \u00e7do peer i organizat\u00ebs.<\/li>\n<\/ul>\n<p>\n<b>Sh\u00ebrbimi i porosis\u00eb<\/b> \u2014 paketat transaksionet n\u00eb blloqe dhe d\u00ebrgon peer-\u00ebve n\u00eb channel. Garanton dor\u00ebzimin e mesazheve p\u00ebr t\u00eb gjith\u00eb peer-\u00ebt n\u00eb rrjet. P\u00ebr sistemet industriale p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Apache_Kafka\">brokeri i mesazheve Kafka<\/a><\/noindex>, p\u00ebr zhvillim dhe testim <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hyperledger\/fabric\/tree\/master\/orderer\/consensus\/solo\">Solo<\/a><\/noindex>.<\/p>\n<h2>CallFlow<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/9060864bd1002da881d7f17ef8ec0b0c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Aplikacioni nd\u00ebrvepron me Hyperledger Fabric, duke p\u00ebrdorur Go, Node.js ose Java SDK;<\/li>\n<li>Klienti krijon transaksionin tx dhe e d\u00ebrgon at\u00eb te peer-\u00ebt e endorsimit;<\/li>\n<li>Peer-i kontrollon n\u00ebnshkrimin e klientit, ekzekuton transaksionin dhe e d\u00ebrgon n\u00ebnshkrimin e miratimit prapa klientit. Chaincode ekzekutohet vet\u00ebm n\u00eb peer-\u00ebt e endorsimit, dhe rezultati i ekzekutimi t\u00eb tij shp\u00ebrndahet te t\u00eb gjith\u00eb peer-\u00ebt. Ky algorit\u00ebm i pun\u00ebs quhet \u2014 konsensusi PBFT (Practical Byzantine Fault Tolerant). Dallohet nga <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Byzantine_fault\">BFT klasik<\/a><\/noindex> n\u00eb at\u00eb q\u00eb mesazhi shp\u00ebrndahet dhe pritet konfirmimi jo nga t\u00eb gjith\u00eb pjes\u00ebmarr\u00ebsit, por vet\u00ebm nga nj\u00eb grup t\u00eb caktuar;<\/li>\n<li>Pas marrjes s\u00eb numrit t\u00eb p\u00ebrgjigjeve, q\u00eb i p\u00ebrputhen politik\u00ebs s\u00eb miratimit, klienti e d\u00ebrgon transaksionin te sh\u00ebrbimi i porosis\u00eb;<\/li>\n<li>Sh\u00ebrbimi i porosis\u00eb formon bllokun dhe e d\u00ebrgon at\u00eb te t\u00eb gjith\u00eb peer-\u00ebt q\u00eb e miratojn\u00eb. Sh\u00ebrbimi i porosis\u00eb siguron regjistrimin e rregullt t\u00eb blloqeve, duke p\u00ebrjashtuar, at\u00eb q\u00eb quhet, fork-i i ledger-it (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443282\/\">shih seksionin 'Forks'<\/a><\/noindex>);<\/li>\n<li>Peer-\u00ebt marrin bllokun, kontrollojn\u00eb p\u00ebrs\u00ebri politikat e miratimit, regjistrojn\u00eb bllokun n\u00eb blockchain dhe ndryshojn\u00eb gjendjen n\u00eb DB 'World state'.<\/li>\n<\/ul>\n<p>\nPra, ka nj\u00eb ndarje rolesh midis nodave. Kjo siguron q\u00eb blockchain t\u00eb jet\u00eb i shkall\u00ebzuesh\u00ebm dhe i sigurt:<\/p>\n<ul>\n<li>Kontratat inteligjente (chaincode) ekzekutohen nga peer-\u00ebt e endorsimit. Kjo siguron konfidencialitetin e kontratave inteligjente, pasi ato ruhen jo te t\u00eb gjith\u00eb pjes\u00ebmarr\u00ebsit, por vet\u00ebm te peer-\u00ebt e endorsimit.<\/li>\n<li>Porosia duhet t\u00eb punoj\u00eb shpejt. Kjo sigurohet nga fakti se Porosia vet\u00ebm formon bllokun dhe e d\u00ebrgon at\u00eb te nj\u00eb grup i caktuar lider\u00ebsh peer-\u00eb.<\/li>\n<li>Peer-\u00ebt q\u00eb miratojn\u00eb thjesht ruajn\u00eb blockchain-in \u2014 ata mund t\u00eb jen\u00eb shum\u00eb dhe nuk k\u00ebrkojn\u00eb kapacitet t\u00eb madh dhe pun\u00eb menj\u00ebher\u00eb. <\/li>\n<\/ul>\n<p>\nP\u00ebr m\u00eb shum\u00eb informacion mbi zgjidhjet arkitekturore t\u00eb Hyperledger Fabric dhe pse ai funksionon k\u00ebshtu e jo ndryshe, mund t\u00eb shihni k\u00ebtu: <noindex><a rel=\"nofollow\" href=\"https:\/\/hyperledger-fabric.readthedocs.io\/en\/latest\/arch-deep-dive.html\">Origjina e Arkitektur\u00ebs<\/a><\/noindex> ose k\u00ebtu: <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1801.10228v2\">Hyperledger Fabric: Nj\u00eb Sistem t\u00eb Distribuar Operativ p\u00ebr Blockchain t\u00eb Lejuar<\/a><\/noindex>.<\/p>\n<p>Pra, Hyperledger Fabric \u00ebsht\u00eb v\u00ebrtet nj\u00eb sistem universal, me t\u00eb cilin mund t\u00eb:<\/p>\n<ul>\n<li>Implementoni logjik\u00eb t\u00eb ndryshme biznesi, duke p\u00ebrdorur mekanizmin e kontratave inteligjente;<\/li>\n<li>T\u00eb regjistrosh dhe t\u00eb marr\u00ebsh t\u00eb dh\u00ebna nga nj\u00eb baz\u00eb t\u00eb dh\u00ebnash blockchain n\u00eb formatin JSON;<\/li>\n<li>T\u00eb ofrosh dhe t\u00eb verifikosh qasje n\u00eb API, duke p\u00ebrdorur Autoritetin e Certifikimit. <\/li>\n<\/ul>\n<p>\nTani q\u00eb kemi kuptuar pak rreth specifik\u00ebs s\u00eb Hyperledger Fabric, le t\u00eb b\u00ebjm\u00eb di\u00e7ka t\u00eb dobishme!<\/p>\n<h2>Zhvillimi i blockchain<\/h2>\n<p><\/p>\n<h3>Formulimi i detyr\u00ebs<\/h3>\n<p>\nDetyra \u00ebsht\u00eb t\u00eb implementojm\u00eb nj\u00eb rrjet Citcoin me funksionet e m\u00ebposhtme: krijimi i nj\u00eb llogarie, marrja e bilancit, rimbushja e llogaris\u00eb, transferimi i monedhave nga nj\u00eb llogari n\u00eb tjetr\u00ebn. Do t\u00eb vizatojm\u00eb nj\u00eb model objektor, t\u00eb cilin m\u00eb pas do ta realizojm\u00eb n\u00eb nj\u00eb kontrat\u00eb inteligjente. Pra, do t\u00eb kemi llogari, t\u00eb cilat identifikohen me emra (name) dhe p\u00ebrmbajn\u00eb bilance (balance), si dhe nj\u00eb list\u00eb llogarish. Llogarit\u00eb dhe lista e llogarive jan\u00eb, n\u00eb terma t\u00eb Hyperledger Fabric, aset. Prandaj, ato kan\u00eb nj\u00eb histori dhe nj\u00eb gjendje aktuale. Do t\u00eb p\u00ebrpiqem ta ilustroj k\u00ebt\u00eb vizualisht:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/a4f111da59bc7982b51d583857db6d5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFigurat e sip\u00ebrme p\u00ebrfaq\u00ebsojn\u00eb gjendjen aktuale q\u00eb ruhet n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave \"World state\". Posht\u00eb tyre, figurat tregojn\u00eb historin\u00eb q\u00eb ruhet n\u00eb blockchain. Gjendja aktuale e aseteve ndryshohet nga transaksionet. Aseti ndryshohet vet\u00ebm si nj\u00eb e t\u00ebr\u00eb, prandaj n\u00eb p\u00ebrfundim t\u00eb ekzekutimit t\u00eb transaksionit krijohet nj\u00eb objekt i ri, nd\u00ebrsa vlera aktuale e asetit kalon n\u00eb histori. <\/p>\n<h3>Reketa IBM <\/h3>\n<p>\nKrijojm\u00eb nj\u00eb llogari n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.ibm.com\">reket\u00ebn IBM<\/a><\/noindex>. P\u00ebr t\u00eb p\u00ebrdorur platform\u00ebn blockchain, duhet ta p\u00ebrmir\u00ebsojm\u00eb at\u00eb n\u00eb Pay-As-You-Go. Ky proces mund t\u00eb jet\u00eb i ngadalsh\u00ebm, pasi IBM k\u00ebrkon informacion shtes\u00eb dhe e kontrollon at\u00eb manualisht. Nga ana pozitive, mund t\u00eb them se IBM ka materiale t\u00eb mira m\u00ebsimore q\u00eb lejojn\u00eb zhvillimin e Hyperledger Fabric n\u00eb reken e tyre. M\u00eb p\u00eblqeu cikli i m\u00ebposht\u00ebm i artikujve dhe shembujve:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/IBM\/Create-BlockchainNetwork-IBPV20\/blob\/master\/README.md\">Krijoni nj\u00eb rrjet baz\u00eb blockchain duke p\u00ebrdorur Platform\u00ebn Blockchain<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/IBM\/SmartContractTrading-wFabric1-4-VSCodeExt\/blob\/master\/README.md\">Krijoni dhe ekzekutoni nj\u00eb kontrat\u00eb inteligjente blockchain<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/IBM\/auction-events\/blob\/master\/README.md\">Shkaktoni ngjarje nga Platforma Blockchain<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nM\u00eb posht\u00eb jan\u00eb skrinshotet e platform\u00ebs Blockchain t\u00eb IBM. Kjo nuk \u00ebsht\u00eb nj\u00eb udh\u00ebzim p\u00ebr krijimin e blockchain, por thjesht nj\u00eb demonstrim i shkall\u00ebs s\u00eb detyr\u00ebs. Pra, p\u00ebr q\u00ebllimet tona krijojm\u00eb nj\u00eb Organizat\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/7cb30cade6315abc69f4322a2dbcd094.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb t\u00eb krijojm\u00eb node: Orderer CA, Org1 CA, Orderer Peer:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/4a2239a9b7ded8ba5a11ffad86a35094.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrijojm\u00eb p\u00ebrdoruesit:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/6792b12c9316f47b0cdfaf771dacc782.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrijojm\u00eb Channel-in dhe e quajm\u00eb citcoin:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/ea3983f209326713dcd25762c348ac96.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb thelb, Channel-i \u00ebsht\u00eb nj\u00eb blockchain, prandaj fillon me bllokun zero (Genesis block):<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/416df6b6ef832c6550a2642592e57250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Shkruajm\u00eb Smart Contract<\/h3>\n<p><\/p>\n<pre><code class=\"javascript\">\/*\n * Citcoin smart-contract v1.5 for Hyperledger Fabric\n * (c) Alexey Sushkov, 2019\n *\/\n \n'use strict';\n \nconst { Contract } = require('fabric-contract-api');\nconst maxAccounts = 5;\n \nclass CitcoinEvents extends Contract {\n \n    async instantiate(ctx) {\n        console.info('instantiate');\n        let emptyList = [];\n        await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(emptyList)));\n    }\n    \/\/ Get all accounts\n    async GetAccounts(ctx) {\n        \/\/ Get account list:\n        let accounts = '{}'\n        let accountsData = await ctx.stub.getState('accounts');\n        if (accountsData) {\n            accounts = JSON.parse(accountsData.toString());\n        } else {\n            throw new Error('accounts not found');\n        }\n        return accountsData.toString()\n    }\n     \/\/ add a account object to the blockchain state identifited by their name\n    async AddAccount(ctx, name, balance) {\n        \/\/ this is account data:\n        let account = {\n            name: name,\n            balance: Number(balance),       \n            type: 'account',\n        };\n        \/\/ create account:\n        await ctx.stub.putState(name, Buffer.from(JSON.stringify(account)));\n \n        \/\/ Add account to list:\n        let accountsData = await ctx.stub.getState('accounts');\n        if (accountsData) {\n            let accounts = JSON.parse(accountsData.toString());\n            if (accounts.length &lt; maxAccounts)\n            {\n                accounts.push(name);\n                await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(accounts)));\n            } else {\n                throw new Error('Max accounts number reached');\n            }\n        } else {\n            throw new Error('accounts not found');\n        }\n        \/\/ return  object\n        return JSON.stringify(account);\n    }\n    \/\/ Sends money from Account to Account\n    async SendFrom(ctx, fromAccount, toAccount, value) {\n        \/\/ get Account from\n        let fromData = await ctx.stub.getState(fromAccount);\n        let from;\n        if (fromData) {\n            from = JSON.parse(fromData.toString());\n            if (from.type !== 'account') {\n                throw new Error('wrong from type');\n            }   \n        } else {\n            throw new Error('Accout from not found');\n        }\n        \/\/ get Account to\n        let toData = await ctx.stub.getState(toAccount);\n        let to;\n        if (toData) {\n            to = JSON.parse(toData.toString());\n            if (to.type !== 'account') {\n                throw new Error('wrong to type');\n            }  \n        } else {\n            throw new Error('Accout to not found');\n        }\n \n        \/\/ update the balances\n        if ((from.balance - Number(value)) &gt;= 0 ) {\n            from.balance -= Number(value);\n            to.balance += Number(value);\n        } else {\n            throw new Error('From Account: not enought balance');          \n        }\n \n        await ctx.stub.putState(from.name, Buffer.from(JSON.stringify(from)));\n        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));\n                 \n        \/\/ define and set Event\n        let Event = {\n            type: \"SendFrom\",\n            from: from.name,\n            to: to.name,\n            balanceFrom: from.balance,\n            balanceTo: to.balance,\n            value: value\n        };\n        await ctx.stub.setEvent('SendFrom', Buffer.from(JSON.stringify(Event)));\n \n        \/\/ return to object\n        return JSON.stringify(from);\n    }\n \n    \/\/ get the state from key\n    async GetState(ctx, key) {\n        let data = await ctx.stub.getState(key);\n        let jsonData = JSON.parse(data.toString());\n        return JSON.stringify(jsonData);\n    }\n    \/\/ GetBalance   \n    async GetBalance(ctx, accountName) {\n        let data = await ctx.stub.getState(accountName);\n        let jsonData = JSON.parse(data.toString());\n        return JSON.stringify(jsonData);\n    }\n     \n    \/\/ Refill own balance\n    async RefillBalance(ctx, toAccount, value) {\n        \/\/ get Account to\n        let toData = await ctx.stub.getState(toAccount);\n        let to;\n        if (toData) {\n            to = JSON.parse(toData.toString());\n            if (to.type !== 'account') {\n                throw new Error('wrong to type');\n            }  \n        } else {\n            throw new Error('Accout to not found');\n        }\n \n        \/\/ update the balance\n        to.balance += Number(value);\n        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));\n                 \n        \/\/ define and set Event\n        let Event = {\n            type: \"RefillBalance\",\n            to: to.name,\n            balanceTo: to.balance,\n            value: value\n        };\n        await ctx.stub.setEvent('RefillBalance', Buffer.from(JSON.stringify(Event)));\n \n        \/\/ return to object\n        return JSON.stringify(from);\n    }\n}\nmodule.exports = CitcoinEvents;\n<\/code><\/pre>\n<p>\nIntuitivisht, k\u00ebtu duhet t\u00eb jet\u00eb gjith\u00e7ka e qart\u00eb:<\/p>\n<ul>\n<li>Ka disa funksione (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), t\u00eb cilat do t\u00eb th\u00ebrras\u00eb programi demo duke p\u00ebrdorur Hyperledger Fabric API.<\/li>\n<li>Funksionet SendFrom dhe RefillBalance gjenerojn\u00eb ngjarje (Event) q\u00eb do t\u00eb marr\u00eb programi demo.<\/li>\n<li>Funksioni instantiate thirret nj\u00eb her\u00eb kur instancohet kontrata e men\u00e7ur. N\u00eb t\u00eb v\u00ebrtet\u00eb, ai thirret jo nj\u00eb her\u00eb, por \u00e7do her\u00eb kur ndryshohet versioni i kontrat\u00ebs s\u00eb men\u00e7ur. Prandaj, inicializimi i list\u00ebs me nj\u00eb masiv t\u00eb zbraz\u00ebt \u00ebsht\u00eb nj\u00eb ide e keqe, sepse tani, kur t\u00eb ndryshohet versioni i kontrat\u00ebs s\u00eb men\u00e7ur, do t\u00eb humbim list\u00ebn aktuale. Por asgj\u00eb, un\u00eb vet\u00ebm po m\u00ebsoj).<\/li>\n<li>Account-\u00ebt dhe lista e account-eve (accounts) jan\u00eb struktura t\u00eb dh\u00ebnash JSON. P\u00ebr manipulimin e t\u00eb dh\u00ebnave p\u00ebrdoret JS.<\/li>\n<li>Vlera aktuale e asset-it mund t\u00eb merret p\u00ebrmes thirrjes s\u00eb funksionit getState, dhe p\u00ebr ta p\u00ebrdit\u00ebsuar p\u00ebrmes putState.<\/li>\n<li>Kur krijohet Account thirret funksioni AddAccount, n\u00eb t\u00eb cilin b\u00ebhet krahasimi p\u00ebr numrin maksimal t\u00eb account-eve n\u00eb blockchain (maxAccounts = 5). Dhe k\u00ebtu ka nj\u00eb gabim (e ndjet\u00eb?), i cili \u00e7on n\u00eb rritjen e pafund t\u00eb numrit t\u00eb account-eve. T\u00eb tilla gabime duhen evituar)<\/li>\n<\/ul>\n<p>\nM\u00eb pas ngarkojm\u00eb kontrat\u00ebn e men\u00e7ur n\u00eb Channel dhe e instancon:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/45ad234efc9838b711f96642988f073e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nShikojm\u00eb transaksionin p\u00ebr vendosjen e Smart Contract:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/39605b9d09468fd0c5f0557ed8b692a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nShikojm\u00eb detajet p\u00ebr Channel-in ton\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/ccaf803cf34e52f77dac448f9c83e672.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi rezultat, marrim skem\u00ebn e m\u00ebposhtme t\u00eb rrjetit blockchain n\u00eb cloud-in IBM. N\u00eb skem\u00eb \u00ebsht\u00eb gjithashtu nj\u00eb program demo, i cili \u00ebsht\u00eb aktivizuar n\u00eb cloud-in Amazon n\u00eb nj\u00eb server virtual (detaje rreth saj do t\u00eb jen\u00eb n\u00eb seksionin e ardhsh\u00ebm):<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/64e5c0f27d351ee3b60d2ea471a7f58c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Krijimi i GUI p\u00ebr thirrjet API t\u00eb Hyperledger Fabric<\/h2>\n<p>\nHyperledger Fabric ka nj\u00eb API, e cila mund t\u00eb p\u00ebrdoret p\u00ebr:<\/p>\n<ul>\n<li>Krijimin e channel-it;<\/li>\n<li>Lidhjen e peer me channel;<\/li>\n<li>Instalimin dhe instancimin e kontratave t\u00eb men\u00e7ura n\u00eb channel;<\/li>\n<li>Thirrjen e transaksioneve;<\/li>\n<li>K\u00ebrkimin e informacionit n\u00eb blockchain.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Zhvillimi i aplikacionit<\/h3>\n<p>\nN\u00eb programin ton\u00eb demo do t\u00eb p\u00ebrdorim API-n\u00eb vet\u00ebm p\u00ebr thirrjen e transaksioneve dhe k\u00ebrkimin e informacionit, pasi hapat e tjer\u00eb i kemi b\u00ebr\u00eb tashm\u00eb duke p\u00ebrdorur platform\u00ebn blockchain t\u00eb IBM. Shkruajm\u00eb GUI, duke p\u00ebrdorur teknologjit\u00eb standarde: Express.js + Vue.js + Node.js. Rreth m\u00ebnyr\u00ebs se si t\u00eb filloni t\u00eb krijoni aplikacione moderne web mund t\u00eb shkruhet nj\u00eb artikull i ve\u00e7ant\u00eb. K\u00ebtu do t\u00eb l\u00eb nj\u00eb lidhje p\u00ebr nj\u00eb seri ligj\u00ebratash, t\u00eb cilat m\u00eb p\u00eblqyen m\u00eb shum\u00eb: <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/Fa4cRMaTDUI\">Full Stack Web App using Vue.js &amp; Express.js<\/a><\/noindex>. Si rezultat, u krijua nj\u00eb aplikacion klient-server me nj\u00eb nd\u00ebrfaqe grafike t\u00eb njohur n\u00eb stilin Material Design nga Google. REST API midis klientit dhe serverit p\u00ebrb\u00ebhet nga disa thirrje:<\/p>\n<ul>\n<li>HyperledgerDemo\/v1\/init \u2014 t\u00eb inicializosh blockchain;<\/li>\n<li>HyperledgerDemo\/v1\/accounts\/list \u2014 t\u00eb marr\u00ebsh list\u00ebn e t\u00eb gjith\u00eb account-eve;<\/li>\n<li>HyperledgerDemo\/v1\/account?name=Bob&amp;balance=100 \u2014 t\u00eb krijosh account-in Bob;<\/li>\n<li>HyperledgerDemo\/v1\/info?account=Bob \u2014 t\u00eb marr\u00ebsh informacion rreth account-it Bob;<\/li>\n<li>HyperledgerDemo\/v1\/transaction?from=Bob&amp;to=Alice&amp;volume=2 \u2014 t\u00eb transferoj\u00eb dy monedha nga Bob te Alice;<\/li>\n<li>HyperledgerDemo\/v1\/disconnect \u2014 t\u00eb mbyll\u00eb lidhjen me blockchain-in.<\/li>\n<\/ul>\n<p>\nP\u00ebrshkrimi i API me shembuj e kam vendosur n\u00eb<noindex><a rel=\"nofollow\" href=\"https:\/\/documenter.getpostman.com\/view\/7152141\/SVfTNSeb\"> faqen \"Postman\"<\/a><\/noindex> \u2014 nj\u00eb program i njohur p\u00ebr testimin e HTTP API.<\/p>\n<h3>Demo aplikacioni n\u00eb cloud-in Amazon<\/h3>\n<p>\nAplikacionin e ngarkova n\u00eb Amazon, pasi IBM ende nuk ka arritur t\u00eb p\u00ebrmisoj\u00eb llogarin\u00eb time dhe t\u00eb lejoj\u00eb krijimin e server\u00ebve virtual\u00eb. Si nj\u00eb qershi mbi tort\u00eb, vendosa domenin: <noindex><a rel=\"nofollow\" href=\"http:\/\/www.citcoin.info\">www.citcoin.info<\/a><\/noindex>. Do ta mbaj pak serverin t\u00eb aktivizuar, pastaj do ta fik, sepse po paguaj qira, dhe monedhat citcoin n\u00eb burs\u00eb ende nuk jan\u00eb t\u00eb kotuara) N\u00eb artikull po vendos screenshots t\u00eb demot, n\u00eb m\u00ebnyr\u00eb q\u00eb logjika e pun\u00ebs t\u00eb jet\u00eb e qart\u00eb. Demo aplikacioni mund:<\/p>\n<ul>\n<li>T\u00eb inicializoj\u00eb blockchain-in;<\/li>\n<li>T\u00eb krijoj\u00eb nj\u00eb Account (por tani nuk mund t\u00eb krijon nj\u00eb Account t\u00eb ri, pasi numri maksimal i llogarive t\u00eb p\u00ebrshkruara n\u00eb kontrat\u00ebn inteligjente \u00ebsht\u00eb arritur);<\/li>\n<li>T\u00eb marr\u00eb nj\u00eb list\u00eb t\u00eb llogarive;<\/li>\n<li>T\u00eb transferoj\u00eb monedhat citcoin midis Alice, Bob dhe Alex;<\/li>\n<li>T\u00eb marr\u00eb ngjarje (por tani ngjarjet nuk mund t\u00eb shfaqen, k\u00ebshtu q\u00eb n\u00eb nd\u00ebrfaqe p\u00ebr thjesht\u00ebsi \u00ebsht\u00eb shkruar se ngjarjet nuk mb\u00ebshteten);<\/li>\n<li>T\u00eb regjistroj\u00eb veprimet.<\/li>\n<\/ul>\n<p>\nFillimisht e inicializojm\u00eb blockchain-in:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/773ce08270f1b22e64a79fce267bb25f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00eb pas krijojm\u00eb llogarin\u00eb ton\u00eb, pa ndonj\u00eb kursim me bilancin:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/f1cd24aedd5e9618046c5e1ab49ceede.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMarrim nj\u00eb list\u00eb t\u00eb t\u00eb gjitha llogarive t\u00eb disponueshme:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/796f897ca1345430f755055372d03421.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZgjedhim d\u00ebrguesin dhe marr\u00ebsin, marrim bilancet e tyre. N\u00ebse d\u00ebrguesi dhe marr\u00ebsi jan\u00eb nj\u00eblloj, at\u00ebher\u00eb do t\u00eb ndodh\u00eb rritja e llogaris\u00eb s\u00eb tij:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/58eb2ed4a4bac51e0dca1b0331d7910a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb log ndjekim realizimin e transaksioneve:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/528760998e8dc27a73c4409f55b22087.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb fakt, me k\u00ebt\u00eb demo programi mbaron. M\u00eb pas, mund t\u00eb shikoni transaksionin ton\u00eb n\u00eb blockchain:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/1d6bc12f3609b118472afec31b089f09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe liste e p\u00ebrgjithshme e transaksioneve:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: \u00e7far\u00eb na kushton t\u00eb ndjejm\u00eb PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/96675fcda8088307326dadf7852e6ce7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMe k\u00ebt\u00eb e p\u00ebrfunduam me sukses realizimin e PoC p\u00ebr krijimin e rrjetit Citcoin. \u00c7far\u00eb tjet\u00ebr duhet t\u00eb b\u00ebjm\u00eb q\u00eb Citcoin t\u00eb b\u00ebhet nj\u00eb rrjet i plot\u00eb p\u00ebr transferimin e monedhave? M\u00eb pak se sa mendoni:<\/p>\n<ul>\n<li>Gjat\u00eb krijimit t\u00eb llogaris\u00eb t\u00eb realizohet gjenerimi i \u00e7el\u00ebsit privat\/publik. \u00c7el\u00ebsi privat duhet t\u00eb ruhet te p\u00ebrdoruesi i llogaris\u00eb, \u00e7el\u00ebsi publik n\u00eb blockchain.<\/li>\n<li>T\u00eb b\u00ebhet transferimi i monedhave, ku identifikimi i p\u00ebrdoruesit p\u00ebrdor \u00e7el\u00ebsin publik dhe jo emrin.<\/li>\n<li>T\u00eb enkriptojm\u00eb transaksionet q\u00eb shkojn\u00eb nga p\u00ebrdoruesi n\u00eb server me \u00e7el\u00ebsin e tij privat.<\/li>\n<\/ul>\n<p><\/p>\n<h2>P\u00ebrfundim <\/h2>\n<p>\nKemi realizuar rrjetin Citcoin me funksionet: shto llogari, marr\u00eb bilancin, plot\u00ebsuar llogarin\u00eb t\u00ebnde, transferuar monedha nga nj\u00eb llogari n\u00eb tjetr\u00ebn. Pra, \u00e7far\u00eb na kostoi nd\u00ebrtimi i PoC?<\/p>\n<ul>\n<li>Duhet t\u00eb studiojm\u00eb blockchain-in n\u00eb p\u00ebrgjith\u00ebsi dhe Hyperledger Fabric n\u00eb ve\u00e7anti;<\/li>\n<li>T\u00eb m\u00ebsojm\u00eb t\u00eb p\u00ebrdorim cloud-et IBM ose Amazon;<\/li>\n<li>M\u00ebsoni nj\u00eb gjuh\u00eb programimi JS dhe ndonj\u00eb framework web;<\/li>\n<li>N\u00ebse ndonj\u00eb t\u00eb dh\u00ebn\u00eb duhet t\u00eb ruhet jo n\u00eb blockchain, por n\u00eb nj\u00eb baz\u00eb t\u00eb ve\u00e7ant\u00eb, at\u00ebher\u00eb m\u00ebsoni si t\u00eb integroni, p\u00ebr shembull, me PostgreSQL;<\/li>\n<li>Dhe e fundit n\u00eb list\u00eb, por jo nga r\u00ebnd\u00ebsia \u2014 pa dijenin\u00eb e Linux-it nuk shkon askund n\u00eb bot\u00ebn moderne!)<\/li>\n<\/ul>\n<p>\nSigurisht, nuk \u00ebsht\u00eb rocket science, por do t'ju duhet t\u00eb punoni!<\/p>\n<h3>Burimet n\u00eb GitHub<\/h3>\n<p>\nBurimet i kam vendosur n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeySushkov\/Citcoin-blockchain\">GitHub<\/a><\/noindex>. P\u00ebrshkrimi i shkurt\u00ebr i repositories:<br \/>\nKatalog &#171;<b>server<\/b>&#187; \u2014 Server Node.js<br \/>\nKatalog &#171;<b>client<\/b>&#187; \u2014 Klienti Node.js<br \/>\nKatalog &#171;<b>blockchain<\/b>&#187; (vlerat e parametrave dhe \u00e7el\u00ebsat, sigurisht, nuk funksionojn\u00eb dhe jan\u00eb dh\u00ebn\u00eb vet\u00ebm p\u00ebr shembuj):<\/p>\n<ul>\n<li>contract \u2014 burimi i kontrat\u00ebs inteligjente<\/li>\n<li>wallet \u2014 \u00e7el\u00ebsat e p\u00ebrdoruesit p\u00ebr p\u00ebrdorimin e Hyperledger Fabric API. <\/li>\n<li>*.cds \u2014 versionet e kompiluar t\u00eb kontratave inteligjente<\/li>\n<li>*.json skedar\u00ebt \u2014 shembuj skedar\u00ebsh konfigurimi p\u00ebr p\u00ebrdorimin e Hyperledger Fabric API<\/li>\n<\/ul>\n<p>\n<b>Kjo \u00ebsht\u00eb vet\u00ebm fillimi!<\/b><br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466157\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0413\u043b\u0430\u0437\u0430 \u0431\u043e\u044f\u0442\u0441\u044f, \u0430 \u0440\u0443\u043a\u0438 \u0447\u0435\u0448\u0443\u0442\u0441\u044f! \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b (\u0427\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c?) \u0438 \u043a\u0435\u0439\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c (\u0427\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u043a\u0435\u0439\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c?). \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438! \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0438\u043b\u043e\u0442\u043e\u0432 \u0438 PoC (Proof of Concept) \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u043a\u0430, \u0442.\u043a. \u043a \u043d\u0438\u043c \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28421,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37868","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0413\u043b\u0430\u0437\u0430 \u0431\u043e\u044f\u0442\u0441\u044f, \u0430 \u0440\u0443\u043a\u0438 \u0447\u0435\u0448\u0443\u0442\u0441\u044f! \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b (\u0427\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/blokchejn-chto-nam-stoit-poc-postroit\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u043b\u043e\u043a\u0447\u0435\u0439\u043d: \u0447\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 PoC \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0413\u043b\u0430\u0437\u0430 \u0431\u043e\u044f\u0442\u0441\u044f, \u0430 \u0440\u0443\u043a\u0438 \u0447\u0435\u0448\u0443\u0442\u0441\u044f! \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b (\u0427\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/blokchejn-chto-nam-stoit-poc-postroit\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:20:16+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:20:16+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Blockchain: \u00e7far\u00eb na kushton t\u00eb nd\u00ebrtojm\u00eb nj\u00eb PoC? | ProHoster","description":"Syt\u00eb kan\u00eb frik\u00eb, por duar t\u00eb l\u00ebmojn\u00eb! N\u00eb artikujt e m\u00ebparsh\u00ebm ne kemi shqyrtuar teknologjit\u00eb mbi t\u00eb cilat nd\u00ebrtohen blockchain-et (\u00c7far\u00eb na kushton blockchain.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/blokchejn-chto-nam-stoit-poc-postroit","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u043b\u043e\u043a\u0447\u0435\u0439\u043d: \u0447\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 PoC \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c? | ProHoster","og:description":"\u0413\u043b\u0430\u0437\u0430 \u0431\u043e\u044f\u0442\u0441\u044f, \u0430 \u0440\u0443\u043a\u0438 \u0447\u0435\u0448\u0443\u0442\u0441\u044f! \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u044b (\u0427\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/blokchejn-chto-nam-stoit-poc-postroit","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:20:16+00:00","article:modified_time":"2019-10-31T19:20:16+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37868","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:34:11","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:19:22","updated":"2026-01-23 19:34:11","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=37868"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37868\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/28421"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=37868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=37868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=37868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}