{"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: what will it cost us to build PoC?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Syt\u00eb friksohen, por duar jan\u00eb t\u00eb gatshme p\u00ebr pun\u00eb!<\/i><\/p>\n<p>N\u00eb artikujt e m\u00ebparsh\u00ebm, ne u merem me teknologjit\u00eb mbi t\u00eb cilat nd\u00ebrtohen blockchain-et (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443282\/\">\u00c7far\u00eb na kushton t\u00eb nd\u00ebrtuam nj\u00eb blockchain?<\/a><\/noindex>) dhe rastet e p\u00ebrdorimit q\u00eb mund t\u00eb realizohen me ndihm\u00ebn e tyre (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/449986\/\">\u00c7far\u00eb duhet p\u00ebr t\u00eb nd\u00ebrtuar nj\u00eb rast?<\/a><\/noindex>). Ka ardhur koha t\u00eb punojm\u00eb me duar! P\u00ebr realizimin e piloteve dhe PoC (Proof of Concept), un\u00eb preferoj t\u00eb p\u00ebrdor re, pasi aksesin n\u00eb to e kam nga \u00e7do cep i bot\u00ebs, dhe shpesh nuk \u00ebsht\u00eb nevoja t\u00eb harxhoj koh\u00eb p\u00ebr instalimin e mjedisit, pasi ka konfiguracione t\u00eb parapara. Pra, le t\u00eb b\u00ebjm\u00eb di\u00e7ka t\u00eb thjesht\u00eb, p.sh., nj\u00eb rrjet p\u00ebr transferimin e monedhave nd\u00ebrmjet an\u00ebtar\u00ebve dhe ta quajm\u00eb modestisht Sytcoin. P\u00ebr k\u00ebt\u00eb do t\u00eb p\u00ebrdorim re IBM dhe blockchain-in universale Hyperledger Fabric. Fillimisht, le t\u00eb kuptojm\u00eb pse Hyperledger Fabric quhet nj\u00eb blockchain universal?<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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 p\u00ebrgjith\u00ebsi, nj\u00eb sistem informacioni universale \u00ebsht\u00eb:<\/p>\n<ul>\n<li>Nj\u00eb grup serverash dhe nj\u00eb b\u00ebrtham\u00eb programore q\u00eb ekzekuton logjik\u00ebn e biznesit;<\/li>\n<li>Interfazat p\u00ebr nd\u00ebrveprim me sistemin;<\/li>\n<li>Mjetet p\u00ebr regjistrimin, autentifikimin dhe autorizimin e pajisjeve\/njerezve;<\/li>\n<li>Nj\u00eb baz\u00eb t\u00eb dh\u00ebnash q\u00eb ruan t\u00eb dh\u00ebnat operative dhe ato arkiv:<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/f11fe73de54b0573d44fae903d367df9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMund t\u00eb lexoni versionin zyrtar p\u00ebr at\u00eb \u00e7far\u00eb \u00ebsht\u00eb Hyperledger Fabric n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.hyperledger.org\">t\u00eb internetit<\/a><\/noindex>, dhe n\u00ebse flasim shkurt, Hyperledger Fabric \u00ebsht\u00eb nj\u00eb platform\u00eb opensource q\u00eb lejon nd\u00ebrtimin e blockchain-ve t\u00eb mbyllur dhe ekzekutimin e kontratave inteligjente t\u00eb shkruara n\u00eb gjuh\u00ebt programuese JS dhe Go. Le t\u00eb shohim n\u00eb detaje arkitektur\u00ebn e Hyperledger Fabric dhe t\u00eb konfirmojm\u00eb se \u00ebsht\u00eb nj\u00eb sistem universal, ku ka vet\u00ebm specifika p\u00ebr ruajtjen dhe regjistrimin e 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 vendosen n\u00eb blockchain vet\u00ebm kur pjes\u00ebmarr\u00ebsit arrijn\u00eb nj\u00eb konsensus dhe pas regjistrimit, t\u00eb dh\u00ebnat nuk mund t\u00eb korrigjohen ose fshihen pa u v\u00ebn\u00eb re.<\/p>\n<h2>Arkitektura e Hyperledger Fabric<\/h2>\n<p>\nN\u00eb diagram paraqitet arkitektura e Hyperledger Fabric:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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-i ekziston p\u00ebr shkak t\u00eb mb\u00ebshtetjes s\u00eb organizatave. Organizata t\u00eb ndryshme mund t\u00eb p\u00ebrfshihen n\u00eb nj\u00eb kanal.<\/p>\n<p><b>Kanal <\/b> \u2014 nj\u00eb struktur\u00eb logjike q\u00eb bashkon peer n\u00eb grupe, k\u00ebshtu q\u00eb p\u00ebrcaktohet blockchain-i. Hyperledger Fabric mund t\u00eb p\u00ebrpunoj\u00eb nj\u00ebkoh\u00ebsisht disa blockchain-e me logjik\u00eb t\u00eb ndryshme biznesi.<\/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 caktimin e roleve. P\u00ebr t\u00eb krijuar nj\u00eb nod, duhet t\u00eb bashk\u00ebpunoni me MSP.<\/p>\n<p><b>Nj\u00ebsi peer<\/b> \u2014 kontrollojn\u00eb transaksionet, ruajn\u00eb blockchain, ekzekutojn\u00eb kontrata inteligjente dhe ndihmojn\u00eb aplikacionet. Nj\u00ebsit\u00eb peer kan\u00eb identitet (certifikat\u00eb digjitale) q\u00eb jepet nga MSP. Ndryshe nga rrjeti Bitcoin ose 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>Nj\u00ebsi peer mund t\u00eb jet\u00eb <b>endorsing peer<\/b> (EP) dhe t\u00eb ekzekutoj\u00eb kontrata inteligjente.<\/li>\n<li><b>Committing peer<\/b> (CP) \u2014 ruajn\u00eb vet\u00ebm t\u00eb dh\u00ebnat n\u00eb blockchain dhe p\u00ebrdit\u00ebsojn\u00eb \"Statin e Bot\u00ebs\".<\/li>\n<li><b>Anchor Peer<\/b> (AP) \u2014 n\u00ebse n\u00eb blockchain marrin pjes\u00eb disa organizata, at\u00ebher\u00eb ankor p\u00ebr jan\u00eb p\u00ebrdorur p\u00ebr lidhjen midis tyre. \u00c7do organizat\u00eb duhet t\u00eb ket\u00eb nj\u00eb ose disa ankor p\u00ebr. Me ndihm\u00ebn e AP, \u00e7do peer n\u00eb organizat\u00eb mund t\u00eb marr\u00eb informacion rreth t\u00eb gjith\u00eb peer-ave n\u00eb organizatat e tjera. P\u00ebr t\u00eb sinkronizuar informacionin midis AP p\u00ebrdoret <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Gossip_protocol\">protokolli gossip<\/a><\/noindex>.<\/li>\n<li><b>Leader Peer<\/b> \u2014 n\u00ebse organizata ka disa peer, at\u00ebher\u00eb lideri peer do t\u00eb marr\u00eb blloqe nga sh\u00ebrbimi i porositjes dhe do t'i jap\u00eb ato p\u00ebr peer-t e tjera. Lideri mund t\u00eb vendoset n\u00eb m\u00ebnyr\u00eb statike ose t\u00eb zgjidhet dinamikisht nga peer-t n\u00eb organizat\u00eb. P\u00ebr sinkronizimin e informacionit mbi lider\u00ebt p\u00ebrdoret gjithashtu protokolli gossip.<\/li>\n<\/ul>\n<p>\n<b>Aktivat <\/b> \u2014 entitete me vler\u00eb q\u00eb ruhen n\u00eb bllok\u00e7en. M\u00eb konkretisht \u2014 kjo \u00ebsht\u00eb t\u00eb dh\u00ebna key-value n\u00eb formatin JSON. K\u00ebto t\u00eb dh\u00ebna shkruhen n\u00eb bllok\u00e7en \"Blockchain\". Ato kan\u00eb histori q\u00eb ruhet n\u00eb bllok\u00e7en dhe nj\u00eb gjendje aktuale q\u00eb ruhet n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave \"World state\". Strukturat e t\u00eb dh\u00ebnave mbushen n\u00eb m\u00ebnyr\u00eb t\u00eb rast\u00ebsishme n\u00eb var\u00ebsi t\u00eb detyrave t\u00eb biznesit. Nuk ka asnj\u00eb fush\u00eb t\u00eb detyrueshme, rekomandimi i vet\u00ebm \u00ebsht\u00eb q\u00eb asetet t\u00eb ken\u00eb pronar dhe t\u00eb paraqesin vler\u00eb. <\/p>\n<p><b>Ledger <\/b> \u2014 p\u00ebrb\u00ebhet nga bllok\u00e7ena \"Blockchain\" dhe baza e t\u00eb dh\u00ebnave \"World state\", n\u00eb t\u00eb cil\u00ebn ruhen gjendja aktuale e aseteve. World state p\u00ebrdor LevelDB ose CouchDB.<\/p>\n<p><b>Kontrata Smart<\/b> \u2014 me kontratat smart realizohet logjika e biznesit t\u00eb sistemit. N\u00eb Hyperledger Fabric, kontratat smart quhen chaincode. N\u00ebp\u00ebrmjet chaincode p\u00ebrcaktohen asset-et dhe transaksionet mbi to. N\u00eb nj\u00eb term teknik, kontratat smart jan\u00eb module t\u00eb programit, t\u00eb realizuara n\u00eb gjuh\u00ebt e programimit 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 k\u00eb duhet t\u00eb priten miratime p\u00ebr transaksionin. N\u00ebse politika nuk p\u00ebrcaktohet, at\u00ebher\u00eb p\u00ebrdoret si parazgjedhje: \u201ctransaksioni duhet t\u00eb miratohet nga \u00e7do an\u00ebtar (member) i \u00e7do organizate n\u00eb channel\u201d. Shembuj t\u00eb politikave:<\/p>\n<ul>\n<li>Transaksioni duhet t\u00eb miratohet nga nj\u00eb administrator i organizat\u00ebs;<\/li>\n<li>Duhet t\u00eb miratohet nga \u00e7do an\u00ebtar (member) ose klient i organizat\u00ebs;<\/li>\n<li>Duhet t\u00eb miratohet nga \u00e7do peer i organizat\u00ebs.<\/li>\n<\/ul>\n<p>\n<b>Sh\u00ebrbimi i renditjes<\/b> \u2014 paketat e transaksioneve n\u00eb blloqe dhe i d\u00ebrgon peer-ave n\u00eb channel. Garanton d\u00ebrgimin e mesazheve p\u00ebr t\u00eb gjith\u00eb peer-at 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>Fluksi i thirrjeve<\/h2>\n<p>\n<img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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-at q\u00eb miratojn\u00eb;<\/li>\n<li>Peer verifikon n\u00ebnshkrimin e klientit, realizon transaksionin dhe d\u00ebrgon n\u00ebnshkrimin e miratimit p\u00ebrs\u00ebri tek klienti. Chaincode ekzekutohet vet\u00ebm n\u00eb peer-in e miratimit, dhe rezultati i ekzekutimit t\u00eb tij shp\u00ebrndahet n\u00eb t\u00eb gjitha peer-at. Ky algorit\u00ebm funksionimi quhet - PBFT (Practical Byzantine Fault Tolerant) konsensus. Dallimi nga <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Byzantine_fault\">klasik BFT<\/a><\/noindex> \u00ebsht\u00eb se mesazhi d\u00ebrgohet dhe pritet konfirmimi vet\u00ebm nga nj\u00eb grup i caktuar, jo nga t\u00eb gjith\u00eb pjes\u00ebmarr\u00ebsit;<\/li>\n<li>Pasi klienti t\u00eb marr\u00eb numrin e p\u00ebrgjigjeve q\u00eb korrespondon me politik\u00ebn e miratimit, ai d\u00ebrgon transaksionin n\u00eb Ordering service;<\/li>\n<li>Ordering service formon bllokun dhe e d\u00ebrgon at\u00eb tek t\u00eb gjith\u00eb peer-at q\u00eb angazhohen. Ordering service garanton regjistrimin n\u00eb radh\u00eb t\u00eb blloqeve, duke eliminuar, at\u00eb q\u00eb quhet, ledger fork (<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443282\/\">shih seksionin \"Forks\"<\/a><\/noindex>);<\/li>\n<li>Peer-at marrin bllokun, kontrollojn\u00eb p\u00ebrs\u00ebri politik\u00ebn e miratimit, regjistrojn\u00eb bllokun n\u00eb blockchain dhe ndryshojn\u00eb gjendjen n\u00eb DB-n\u00eb \"World state\".<\/li>\n<\/ul>\n<p>\nPra, ndodh ndarja e rolit mes node-ve. Kjo siguron t\u00eb shkall\u00ebzohet dhe sigurin\u00eb e blockchain-it:<\/p>\n<ul>\n<li>Kontrat\u00ebt e zgjuar (chaincode) ekzekutohen nga peer-at e miratimit. Kjo garanton konfidencialitetin e kontratave t\u00eb zgjuara, pasi ato ruhen vet\u00ebm te peer-at e miratimit, jo te t\u00eb gjith\u00eb pjes\u00ebmarr\u00ebsit.<\/li>\n<li>Porositja duhet t\u00eb funkcionalizoj\u00eb shpejt. Kjo sigurohet nga fakti se Porositja formon vet\u00ebm bllokun dhe e d\u00ebrgon at\u00eb n\u00eb nj\u00eb grup t\u00eb fiksur lider\u00ebsh peers.<\/li>\n<li>Peers q\u00eb e angazhojn\u00eb vet\u00ebm ruajn\u00eb blockchain-in \u2014 ata mund t\u00eb jen\u00eb shum\u00eb dhe nuk k\u00ebrkojn\u00eb fuqin\u00eb e madhe dhe pun\u00eb t\u00eb menj\u00ebhershme. <\/li>\n<\/ul>\n<p>\nP\u00ebr m\u00eb shum\u00eb detaje mbi zgjidhjet arkitekturore t\u00eb Hyperledger Fabric dhe pse funksionon k\u00ebshtu, jo ndryshe, mund t\u00eb shikoni k\u00ebtu: <noindex><a rel=\"nofollow\" href=\"https:\/\/hyperledger-fabric.readthedocs.io\/en\/latest\/arch-deep-dive.html\">Origjinat e Arkitektur\u00ebs<\/a><\/noindex> ose k\u00ebtu: <noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1801.10228v2\">Hyperledger Fabric: Nj\u00eb Sistemi t\u00eb Distribuar p\u00ebr Blockchain-et me Leje<\/a><\/noindex>.<\/p>\n<p>Prandaj, Hyperledger Fabric \u00ebsht\u00eb v\u00ebrtet nj\u00eb sistem universale, me t\u00eb cilin mund t\u00eb:<\/p>\n<ul>\n<li>Implementoni logjik\u00ebn e biznesit t\u00eb rastit duke p\u00ebrdorur mekanizmin e kontratave t\u00eb men\u00e7ura;<\/li>\n<li>Regjistroni dhe merrni t\u00eb dh\u00ebna nga databaza blockchain n\u00eb formatin JSON;<\/li>\n<li>Siguroni dhe verifikoni qasje n\u00eb API, duke p\u00ebrdorur Autoritetin e Certifikimit. <\/li>\n<\/ul>\n<p>\nTani q\u00eb b\u00ebm\u00eb pak njohuri me specifikat e Hyperledger Fabric, le t\u00eb b\u00ebjm\u00eb p\u00ebrfundimisht di\u00e7ka t\u00eb dobishme!<\/p>\n<h2>Zhvillojm\u00eb blockchain-in<\/h2>\n<p><\/p>\n<h3>Vendosja e detyr\u00ebs<\/h3>\n<p>\nQ\u00ebllimi \u00ebsht\u00eb t\u00eb realizoj\u00eb nj\u00eb rrjet Citcoin me funksionalitete si: krijimi i nj\u00eb llogarie, marrja e bilancit, mbushja e llogaris\u00eb, transferimi i monedhave nga nj\u00eb llogari n\u00eb tjetr\u00ebn. Do t\u00eb vizatojm\u00eb nj\u00eb model objektiv, t\u00eb cilin m\u00eb pas do ta realizojm\u00eb n\u00eb kontrat\u00ebn e zgjuar. K\u00ebshtu, do t\u00eb kemi llogari q\u00eb identifikohen me emra (name) dhe kan\u00eb nj\u00eb bilanc (balance), si dhe nj\u00eb list\u00eb llogarish. Llogarit\u00eb dhe lista e llogarive jan\u00eb n\u00eb terma t\u00eb Hyperledger Fabric asete. Prandaj, ato kan\u00eb nj\u00eb histori dhe nj\u00eb gjendje aktuale. Do t\u00eb p\u00ebrpiqem ta tregoj k\u00ebt\u00eb qart\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/a4f111da59bc7982b51d583857db6d5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFigurat e sip\u00ebrme paraqesin gjendjen aktuale, e cila ruhet n\u00eb baz\u00ebn e t\u00eb dh\u00ebnave \"World state\". N\u00ebn to, figurat tregojn\u00eb historin\u00eb, e cila ruhet n\u00eb blockchain. Gjendja aktuale e aseteve ndryshon nga transaksionet. Nj\u00eb aset ndryshohet vet\u00ebm n\u00eb t\u00ebr\u00ebsi, prandaj pas p\u00ebrfundimit t\u00eb transaksionit krijohet nj\u00eb objekt i ri, nd\u00ebrsa vlera aktuale e aset-it kalon n\u00eb histori. <\/p>\n<h3>Revoli i IBM <\/h3>\n<p>\nKrijojm\u00eb nj\u00eb llogari n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.ibm.com\">revolin IBM<\/a><\/noindex>. P\u00ebr t\u00eb p\u00ebrdorur platform\u00ebn blockchain, duhet ta azhurnoni at\u00eb n\u00eb Pay-As-You-Go. Ky proces nuk mund t\u00eb jet\u00eb i shpejt\u00eb, pasi IBM k\u00ebrkon informacion t\u00eb m\u00ebtejsh\u00ebm dhe e kontrollon at\u00eb manualisht. Pozitivisht, mund t\u00eb them se IBM ofron materiale mjaft t\u00eb mira m\u00ebsimore q\u00eb lejojn\u00eb implementimin e Hyperledger Fabric n\u00eb cloud-in e tyre. M\u00eb p\u00eblqeu seria e artikujve dhe shembujve t\u00eb m\u00ebposht\u00ebm:<\/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 bazik 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 t\u00eb men\u00e7ur blockchain<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/IBM\/auction-events\/blob\/master\/README.md\">Emitoni ngjarje nga Platforma Blockchain<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nT\u00eb dh\u00ebnat n\u00eb vijim jan\u00eb shk\u00ebmbime nga platforma Blockchain e IBM. Kjo nuk \u00ebsht\u00eb nj\u00eb udh\u00ebzues p\u00ebr krijimin e blockchain-it, por thjesht nj\u00eb demonstruese e v\u00ebllimit t\u00eb detyr\u00ebs. Prandaj, p\u00ebr q\u00ebllimet tona krijojm\u00eb nj\u00eb Organizat\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/4a2239a9b7ded8ba5a11ffad86a35094.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVendosim p\u00ebrdorues:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/6792b12c9316f47b0cdfaf771dacc782.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKrijojm\u00eb Kanal dhe e quajm\u00eb citcoin:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/ea3983f209326713dcd25762c348ac96.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb thelb, Kanal \u00ebsht\u00eb blockchain, prandaj fillon me bllokun zero (Genesis block):<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/416df6b6ef832c6550a2642592e57250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Shkruajm\u00eb Kontrat\u00ebn e Men\u00e7ur<\/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 kuptueshme:<\/p>\n<ul>\n<li>Ekzistojn\u00eb disa funksione (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), t\u00eb cilat do t\u00eb th\u00ebrriten nga programi demo p\u00ebrmes API-t Hyperledger Fabric.<\/li>\n<li>Funksionet SendFrom dhe RefillBalance gjenerojn\u00eb ngjarje (Event), t\u00eb cilat programi demo do t'i marr\u00eb.<\/li>\n<li>Funksioni instantiate \u2014 thirret nj\u00ebher\u00eb kur instancohet kontrata e men\u00e7ur. N\u00eb t\u00eb v\u00ebrtet\u00eb, ai nuk thirret nj\u00ebher\u00eb, por \u00e7do her\u00eb kur ndodhin ndryshime n\u00eb versionin e kontrat\u00ebs. Prandaj, inicializimi i list\u00ebs me nj\u00eb array t\u00eb zbraz\u00ebt \u00ebsht\u00eb nj\u00eb ide e keqe, sepse tani kur ndryshojm\u00eb versionin e kontrat\u00ebs s\u00eb men\u00e7ur, do t\u00eb humbasim list\u00ebn aktuale. Por asgj\u00eb, un\u00eb po m\u00ebsoj).<\/li>\n<li>Account-\u00ebt dhe lista e account-\u00ebve (accounts) jan\u00eb struktura t\u00eb dh\u00ebnash JSON. P\u00ebrdoren JS p\u00ebr manipulimin e t\u00eb dh\u00ebnave.<\/li>\n<li>Vler\u00ebn aktuale t\u00eb asset-it mund ta marrim duke thirrur funksionin getState dhe ta p\u00ebrdit\u00ebsojm\u00eb me putState.<\/li>\n<li>Gjat\u00eb krijimit t\u00eb Account-it, thirret funksioni AddAccount, n\u00eb t\u00eb cilin b\u00ebhet krahasimi p\u00ebr numrin maksimal t\u00eb account-\u00ebve n\u00eb blockchain (maxAccounts = 5). Dhe k\u00ebtu ka nj\u00eb gabim (e v\u00ebrejti?), q\u00eb \u00e7on n\u00eb rritjen e pafundme t\u00eb numrit t\u00eb account-\u00ebve. T\u00eb tilla gabime duhet t\u00eb shmangen)<\/li>\n<\/ul>\n<p>\nP\u00ebr m\u00eb tep\u00ebr, ngarkojm\u00eb kontrat\u00ebn e men\u00e7ur n\u00eb Channel dhe e instancojm\u00eb at\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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: what will it cost us to build 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: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/ccaf803cf34e52f77dac448f9c83e672.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi p\u00ebrfundim marrim k\u00ebt\u00eb skem\u00eb t\u00eb rrjetit blockchain n\u00eb cloud t\u00eb IBM. Po ashtu, n\u00eb skem\u00eb ka nj\u00eb program demo, i cili funksionon n\u00eb cloud t\u00eb Amazon n\u00eb nj\u00eb server virtual (do t\u00eb flasim m\u00eb shum\u00eb p\u00ebr t\u00eb n\u00eb seksionin e ardhsh\u00ebm):<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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 e Hyperledger Fabric API<\/h2>\n<p>\nHyperledger Fabric ka nj\u00eb API q\u00eb mund t\u00eb p\u00ebrdoret p\u00ebr:<\/p>\n<ul>\n<li>Krijimin e channel;<\/li>\n<li>Lidhjen e peer me channel;<\/li>\n<li>Installimin dhe instancimin e kontratave inteligjente 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 tashm\u00eb i kemi b\u00ebr\u00eb, duke p\u00ebrdorur platform\u00ebn blockchain t\u00eb IBM. Po shkruajm\u00eb GUI, duke p\u00ebrdorur stakun e teknologjive standarde: Express.js + Vue.js + Node.js. Si t\u00eb filloni t\u00eb krijoni aplikacione moderne mund t\u00eb shkruhet nj\u00eb artikull t\u00eb ve\u00e7ant\u00eb. K\u00ebtu do t\u00eb l\u00eb nj\u00eb lidhje me nj\u00eb seri ligj\u00ebratash q\u00eb m\u00eb p\u00eblqen 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 p\u00ebrfundim, 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 inicializoni blockchain;<\/li>\n<li>HyperledgerDemo\/v1\/accounts\/list \u2014 merrni nj\u00eb list\u00eb t\u00eb t\u00eb gjith\u00eb llogarive;<\/li>\n<li>HyperledgerDemo\/v1\/account?name=Bob&amp;balance=100 \u2014 krijo llogarin\u00eb Bob;<\/li>\n<li>HyperledgerDemo\/v1\/info?account=Bob \u2014 merr informacion rreth llogaris\u00eb Bob;<\/li>\n<li>HyperledgerDemo\/v1\/transaction?from=Bob&amp;to=Alice&amp;volume=2 \u2014 transfero dy monedha nga Bob te Alice;<\/li>\n<li>HyperledgerDemo\/v1\/disconnect \u2014 mbyll lidhjen me blockchain-in.<\/li>\n<\/ul>\n<p>\nP\u00ebrshkrimi i API-s\u00eb me shembuj e vendosa n\u00eb<noindex><a rel=\"nofollow\" href=\"https:\/\/documenter.getpostman.com\/view\/7152141\/SVfTNSeb\"> faqen \u00abPostman\u00bb<\/a><\/noindex> \u2014 nj\u00eb program i njohur p\u00ebr testimin e API-ve HTTP.<\/p>\n<h3>Aplikacioni demo n\u00eb cloud-in e Amazon<\/h3>\n<p>\nE kam ngarkuar aplikacionin n\u00eb Amazon, pasi IBM ende nuk ka arritur t\u00eb p\u00ebrmir\u00ebsoj\u00eb llogarin\u00eb time dhe t\u00eb lejoj\u00eb krijimin e server\u00ebve virtual\u00eb. Si nj\u00eb qershi mbi tort\u00eb, kam lidhur 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 \u00e7\u2019aktivizoj, pasi koston p\u00ebr qira po rritet, dhe monedhat citcoin nuk jan\u00eb ende t\u00eb listuara n\u00eb treg) N\u00eb artikull do t\u00eb p\u00ebrfshij pamje t\u00eb ekranit t\u00eb demos, p\u00ebr t\u00eb shpjeguar logjik\u00ebn e pun\u00ebs. Aplikacioni demo mund:<\/p>\n<ul>\n<li>T\u00eb inicializoj\u00eb blockchain-in;<\/li>\n<li>T\u00eb krijoj\u00eb llogari (por tani nuk mund t\u00eb krijohet nj\u00eb llogari e re, pasi \u00ebsht\u00eb arritur numri maksimal i llogarive q\u00eb \u00ebsht\u00eb p\u00ebrcaktuar n\u00eb smart contract);<\/li>\n<li>T\u00eb marr\u00eb nj\u00eb list\u00eb t\u00eb llogarive;<\/li>\n<li>T\u00eb transferoj\u00eb monedha citcoin nd\u00ebrmjet Alice, Bob dhe Alex;<\/li>\n<li>Merrni ngjarje (por tani ngjarjet nuk mund t\u00eb shfaqen, ndaj p\u00ebr thjesht\u00ebsi n\u00eb nd\u00ebrfaqe \u00ebsht\u00eb shkruar se ngjarjet nuk mb\u00ebshteten);<\/li>\n<li>Regjistro veprimet.<\/li>\n<\/ul>\n<p>\nS\u00eb pari, inicializojm\u00eb blockchain-in:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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, duke mos u kursyer me bilancin:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/f1cd24aedd5e9618046c5e1ab49ceede.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMerrni list\u00ebn e t\u00eb gjitha llogarive n\u00eb dispozicion:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/796f897ca1345430f755055372d03421.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZgjidhni d\u00ebrguesin dhe marr\u00ebsin, dhe merrni bilancet e tyre. N\u00ebse d\u00ebrguesi dhe marr\u00ebsi jan\u00eb i nj\u00ebjti, at\u00ebher\u00eb do t\u00eb ndodhi rimbushja e llogaris\u00eb s\u00eb tij:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build 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: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/528760998e8dc27a73c4409f55b22087.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb thelb, me programin demo \u00ebsht\u00eb kjo e gjitha. M\u00eb pas mund t\u00eb shihni transaksionin ton\u00eb n\u00eb blockchain:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/1d6bc12f3609b118472afec31b089f09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe lista e p\u00ebrgjithshme e transaksioneve:<\/p>\n<p><img decoding=\"async\" alt=\"Blockchain: what will it cost us to build PoC?\" src=\"\/wp-content\/uploads\/2019\/09\/96675fcda8088307326dadf7852e6ce7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebshtu kemi p\u00ebrfunduar me sukses realizimin e PoC p\u00ebr krijimin e rrjetit Citcoin. \u00c7far\u00eb duhet b\u00ebr\u00eb m\u00eb tej, q\u00eb Citcoin t\u00eb b\u00ebhet nj\u00eb rrjet i plot\u00eb p\u00ebr transferimin e monedhave? Paksa:<\/p>\n<ul>\n<li>N\u00eb faz\u00ebn e krijimit t\u00eb llogaris\u00eb, implementoni gjenerimin e \u00e7el\u00ebsit privat \/ publik. \u00c7el\u00ebsi privat duhet t\u00eb ruhet nga p\u00ebrdoruesi i llogaris\u00eb, \u00e7el\u00ebsi publik n\u00eb blockchain.<\/li>\n<li>B\u00ebni transferimin e monedhave, n\u00eb t\u00eb cilin identifikimi i p\u00ebrdoruesit b\u00ebhet me \u00e7el\u00ebsin publik, jo me emrin.<\/li>\n<li>Kriptoni 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\u00ebrfundimi <\/h2>\n<p>\nNe kemi implementuar nj\u00eb rrjet Citcoin me funksione: shto llogari, merr balanc\u00ebn, mbush llogarin\u00eb t\u00ebnde, transfero monedha nga nj\u00eb llogari n\u00eb nj\u00eb tjet\u00ebr. Pra, \u00e7far\u00eb na kushtoi 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 si t\u00eb p\u00ebrdorim re t\u00eb IBM ose Amazon;<\/li>\n<li>T\u00eb m\u00ebsojm\u00eb gjuh\u00ebn e programimit JS dhe ndonj\u00eb web framework;<\/li>\n<li>N\u00ebse disa t\u00eb dh\u00ebna duhet t\u00eb ruhen jo n\u00eb blockchain, por n\u00eb nj\u00eb baz\u00eb t\u00eb ve\u00e7ant\u00eb, at\u00ebher\u00eb t\u00eb m\u00ebsojm\u00eb si t\u00eb integrohemi, p\u00ebr shembull, me PostgreSQL;<\/li>\n<li>Dhe e fundit n\u00eb list\u00eb, por jo m\u00eb pak e r\u00ebnd\u00ebsishme \u2014 pa njohuri p\u00ebr Linux n\u00eb bot\u00ebn moderne nuk je askund!)<\/li>\n<\/ul>\n<p>\nSigurisht, nuk \u00ebsht\u00eb rocket science, por do t\u00eb duhet t\u00eb punosh!<\/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 depozit\u00ebs:<br \/>\nKatalog &#171;<b>server<\/b>&#187; \u2014 serveri 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, jan\u00eb t\u00eb pavlefsh\u00ebm dhe jan\u00eb dh\u00ebn\u00eb vet\u00ebm p\u00ebr shembull):<\/p>\n<ul>\n<li>kontrata \u2014 burimi i smart kontrat\u00ebs<\/li>\n<li>wallet \u2014 \u00e7el\u00ebsat e p\u00ebrdoruesit p\u00ebr t\u00eb p\u00ebrdorur Hyperledger Fabric API. <\/li>\n<li>*.cds \u2014 versionet e p\u00ebrkthyera t\u00eb smart kontratave<\/li>\n<li>*.json skedar\u00ebt \u2014 shembuj t\u00eb skedar\u00ebve t\u00eb konfigurimit p\u00ebr p\u00ebrdorim me 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.0.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 \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\" \/>\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.0.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 \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\" \/>\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":"Sy si t\u00eb dilni p\u00ebrpara, por duar q\u00eb nxitojn\u00eb! N\u00eb artikujt e m\u00ebparsh\u00ebm ne kemi shqyrtuar teknologjit\u00eb mbi t\u00eb cilat nd\u00ebrtohen blockchainet (\u00c7far\u00eb na kushton t\u00eb nd\u00ebrtojm\u00eb nj\u00eb blockchain?) dhe rastet q\u00eb mund t\u00eb realizohen me ndihm\u00ebn e tyre (\u00c7far\u00eb na kushton t\u00eb nd\u00ebrtojm\u00eb nj\u00eb rast?). Ka ardhur koha p\u00ebr t\u00eb punuar me duar! P\u00ebr realizimin e pilot\u00ebve dhe PoC (Provimi i Konceptit) un\u00eb preferoj t\u00eb p\u00ebrdor re, sepse ka akses n\u00eb to.","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 \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","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}]}}