Blok Zinciri Teknolojisi ile Veri Korunumu
6D÷ODQPÕú2\ODPD8\JXODPDVÕ
A Voting Application Which Provides Data Security via Blockchain
Technology
Ya÷Õ]*DQL %LOJLVD\DU0KHQGLVOL÷L øKVDQ'R÷UDPDFÕ%LONHQWÜniversitesi Ankara, Türkiye yagizgani@hotmail.comMustafa Mert AúNDUR÷OX %LOJLVD\DU0KHQGLVOL÷L øKVDQ'R÷UDPDFÕ%LONHQWhQLYHUVLWHVL
Ankara, Türkiye mertaskaroglu@hotmail.com Öz— 'LMLWDO R\ODPD YH VHoLP X\JXODPDODUÕQGD DNOD JHOHQ HQ
|QHPOL HQGLúH YHULQLQ GH÷LúWLULOPHVL veya verinin silinmesidir. %X HQGLúHOHU GúQOG÷QGH %ORN =LQFLUL WHNQRORMLVL JYHQ sorununu ortadan kDOGÕUPD Ye verinin korunumunun DUWÕUÕOPDVÕNRQXODUÕQGDNHQGLLVSDWODPÕúWHNQRORMLOHULQEDúÕQGD gelmektedir. DROD\ÕVÕ LOH %ORN =LQFLri teknolojisi NXOODQÕODUDN hazÕUODQDFDN bir oylama YH\D VHoLP X\JXODPDVÕ HQGLúHOHULQ minimizHHGLOPHVLNRQXVXQGD\DUGÕPFÕRODFDNWÕU%XoDOÕúPDGD veri GH÷LúWLrilmesinin önüne geçmeyi hedefleyen Blok Zinciri WDEDQOÕELUR\ODPDX\JXODPDVÕJHOLúWLULOPLúWLU.
Anahtar Sözcükler— %ORN=LQFLUL$NÕOOÕ SözOHúPHOHU2QD\ODPa 3UHQVLSOHUL.D\ÕW'HIWHUL2\ODPD6LVWHPL
Abstract— The main concerns which are coming to mind in the
digital voting and election applications are data manipulation or deletion. When these concerns are considered, Blokchain is a foremost technology which proved itself on disposal of distrust and providing security of the data. Therefore, a voting or election system which is implemented with using Blockchain technology enable us to minimize the concerns which are stated above. In this study, a blockchain based voting application which aims to prohibit data manipulation is developed.
Keywords— Blockchain, Smart Contracts, Endorsement Policies, Ledger, Voting System
I. Gø5øù
6RQ \Õllarda LQVDQ JF\OH YH\D PDQXHO RODUDN oDOÕúDQ VLVWHPOHULQGLMLWDOOHúWLULOHUHNYHULPOLOL÷LQLQDUWÕUÕOPDVÕ\D\JÕQ RODUDN NXOODQÕODQ LúOHPOHULQ EDúÕQGD JHOPHNWHGLU >@ Bununla beraber R\ODPDYHVHoLPLúOHPOHULLoLQJYHQOLYH dijital bir platfoUPROXúWXUPDk, sonucun çabuk elde edilmesi, KDUFDQDQ ND\QDN PLNWDUÕQÕQ D]DOWÕOPDVÕ YH SD\GDúODUÕQ R\ODPD VRQXFXQD RODQ JYHQLQLQ DUWÕUÕOPDVÕ NRQXVXQGD \DUGÕPFÕ RODELOHFHN SRWDQVL\HOH VDKLSWLU 2\Oama ve seçim VLVWHPOHULQLQ GLMLWDOOHúWLULOPHVL LQVDQ KDWDVÕQÕQ PLQLPL]H HGLOHELOPHVL EDNÕPÕQGDQ GD JHUHNOLGLU 2\ODPD VD\ÕP sürecine ne kadar çok insan dahil olursa oylama VRQXoODUÕQGD NDVÕWOÕ YH\D NDVÕWVÕ] ROPDN ]HUH KDWD ROXúDELOPH ULVNL GH ELU R NDGDU DUWPDNWDGÕU $ncak, dijital R\ODPD LúOHPOHULQGH GH DNOD JHOHbilecek birkaç önemli HQGLúH V|] NRQXVXGXU %XQODUGDQ HQ |QHPOLOHUL YHULQLQ GH÷LúWLrilmesi YHULQLQ VLOLQPHVL YH NDWÕOÕPFÕODUÕQÕQ KDQJL R\XNXOODQGÕ÷ÕQÕQWHVSLWHGLOHELOPHVLVRUXQXGXU%XVRUXQODr J|] |QQGH EXOXQGXUXOGX÷XQGD %ORN =LQFLUL WHNQRORMLVL uygun bir çözüm olabilme potansiyeline sahiptir. Bu WHNQRORML \ÕOÕQGD 6DWRVKL 1DNDPato isminde bir JHOLúWLULFLWDUDIÕQGDQLFDWHGLOPLúWLU1DNDPDWREXWHNQRORML\L NÕVD ELU VUH VRQUD LFDW HWWL÷L %LWFRLQ¶LQ DOW\DSÕ teknolojilerinden birisi olarak kullanPÕúWÕU %ORN =Lnciri
Bitcoin’GH oQF ELU RWRULWH ROPDGDQ JYHQOL ELU úHNLOGH ara trDQVIHULQLQ\DSÕOPDVÕQÕVD÷OD\DQWHNQRORMLRODUDNRUWD\D oÕNPÕúWÕU. O günden sonra Blok Zinciri teknolojisinin poSODULWHVL JLW JLGH DUWPÕú YH GL÷HU NXOODQÕP DODQODUÕ DUDúWÕUÕlmD\D EDúODQPÕúWÕU >@ %X WHNQRORMLQLQ NXOODQÕPÕ finansal ve finansal oOPD\DQ DODQODU ]HULQH LNL\H D\ÕUPDN X\JXQ RODFDNWÕU >@ $PD WP NXOODQÕP DODQODUÕQÕQ RUWDN yönünün, bir güven VRUXQXQX RUWDGDQ NDOGÕUPD\D oDOÕúPDN ROGX÷X DúLNDUGÕU %X QRktada Blok Zinciri teknolojisinin \DSÕVÕ YH GLMLWDO R\ODPD VLVWHPLQGHNL HQGLúHOHUL QDVÕO o|]HELOHFH÷LGL÷HUE|OPOHUGHDoÕNODQPÕúWÕU
II. BLOK Zø1&ø5øGENEL AöYAPISI
%ORN =LQFLUL WXWXODQ LúOHP WUDQVDFWLRQ ND\ÕWODUÕQ GH÷LúWLULOHPHGL÷LGD÷ÕWÕOPÕúELUVLVWHPRlarak taQÕPOanabilir. %XND\ÕWODUVLVWHPGHNLKHUHúSHHUGHEXOXQPDNODEHUDber ND\ÕW GHIWHULQH OHGJHU HNOHQHFHN RODQ LúOHPOHU PXWDEDNDW DOJRULWPDODUÕQa (consensus DOJRULWKPV ED÷OÕ RODrak JHUoHNOHúWLULOHELOPHNWHGLU >@ 'ROD\ÕVÕ\OD PXWDEDNDW algoritmaODUÕ GÕúÕQGa JHUoHNOHúWLULOPLú KHU LúOHP ND\ÕWODUGD WXWXOPDVÕQD UD÷PHQ JHoHUVL] VD\ÕODFDNWÕU %XQXQ GÕúÕQGD %ORN=LQFLULD÷ \DSÕVÕ, merkezsiz (decentralized) bir sistem \DSÕVÕQD VDKLSWLU %u nedenle blok zinciri tek bir hata QRNWDVÕQD ED÷OÕ RODUDN o|NPH] Yeya iúOevsiz duruma GúPH] >@ %XQXQ |WHVLQGH PHUNH]VL] D÷ \DSÕVÕ yetkilendLULOPH QRNWDVÕQÕQ GD÷ÕOPDVÕQD VHEHS ROXU %ORN =LQFLULD÷\DSÕVÕQGD\HWNLOHQGLULOPLúWHNELUQRNWDEXOXQPD] DolD\ÕVÕ\ODVLVWHPELUKHGHIYHVDOGÕUÕQRNWDVÕEDUÕQGÕUPD] Bu sayede belirli biUHúLQHOHJHoLULOPHVLVLVWHPGHJYHQOLN ]DIL\HWLROXúWXUPDPDNWDGÕU%ORN=LQFLUL$÷Õ \DSÕVÕùHNLO de g|VWHULOPLúWLU
III. BLOK =ø1&ø5ø7(.12/2-ø6ø1ø17(0(/ %ø/(ù(1/(5ø9( 2</$0$6øSTEMø1(.$7.,/$5,
A. $NÕOOÕ6|]OHúPeler (Smart Contracts)
$NÕOOÕ V|]OHúPHOHU %ORN =LQFLUL $÷ÕQGD ELU LúOHPLQ QDVÕO JHUoHNOHúHFH÷LQLQ EHOLUWLOGL÷L NRG SDUoDODUÕQD YHULOHQ DGGÕU $NÕOOÕ6|]OHúPHOHULúOHPOHULQLoLQde gömülü olarak bulunur YH ELU LúOHP WUDQVDFWLRQ JHUoHNOHúWL÷LQGH RWRmatik olarak akWLYH ROXUODU >@ $NÕOOÕ 6|]OHúPHOHUL SD\GDúODU DUDVÕQGD LúOHP JHUoHNOHúWLULOPHGHQ |QFH NDUDUODúWÕUÕOPÕú SURVHGUOHU JLELGúQPHNLVDEHWOLELUNDUDURODFDNWÕU%XQDED÷OÕRODUDN $NÕOOÕ 6|]OHúPHOHU GLMLWDO R\ODPD X\JXODPDVÕQÕQ JYHQLOLUOL÷ini aUWÕUPD konusunda önemli bir rol R\QDPDNWDGÕU dQN KHUKDQJL ELU VHçim veya oylama HWNLQOL÷LQGH JHUoHNOHúWLULOPHVL JHUHNHFHN ED]Õ SURVHGUOHULQ RODFD÷Õ NHVLQGLU %X SURVHGUOHU JHQHOGH R\ODPD LúOHPL JHUoHNOHúPHGHQ|QFH\D]ÕOÕRODUDNJ|UHYOLOHUHELOGLUilir ve bu prosHGUOHULQ X\JXODQPDVÕ J|UHYOLOHULQ NRQWUROQH EÕUDNÕOPÕúROXQXU'DKD|QFHGHEHOLUWLOGL÷LJLELLQVDQIDNW|U LúLQ LoLQH JLUGL÷L ]DPDQ NDVÕWOÕ YH\D NDVÕWVÕ] ROPDN ]HUH hDWD ULVNL DUWPDNWDGÕU 2 \]GHQ JHUHNOL SURVHGUOHULQ X\JXODQDFD÷ÕQÕJDUanti eden güvenLOLUELUVLVWHP\DUDWÕOPDVÕ EX KDWD RODVÕOÕ÷ÕQÕQ |QQH JHoPHNWH VRQ GHUHFH \DUDUOÕ RODFDNWÕU $NÕOOÕ S|]OHúPHOHU VD\HVLQGH SURVHGUOHU oDOÕúWÕUÕODELOLU ELU NRG SDUoDVÕ KDOLQH G|QúWUOPú RODFDN YH KHU LúOHP JHUoHNOHúWLULOGL÷LQGH oDOÕúDUDN prosedürlerin u\JXODQPDVÕQÕQJDUDQWLVLYHULOPLúRODFDNWÕU
B. KD\ÕW'HIWHUL/HGJHU
.D\ÕW'HIWHUOHUL%ORN=LQFLULD÷ÕQGDJHUoHNOHúPLúRODQKHU LúOHPLQ ND\GÕQÕ GH÷LúWLULOHPH] YH silinemez bir biçimde WXWDQ LúOHP GHSRODPD \DSÕVÕGÕU .D\ÕW Defteri kendi içinde iNL oHúit yapÕ EDUÕQGÕUÕU %LU WDQHVL 'XUXP .D\GÕ :RUOG State) GL÷HUL LVH øúOHP 7DULKoHVL 7UDQVDFWLRQ +LVWRU\ RODUDN DGODQGÕUÕOÕU >@ 'XUXP .D\GÕ ELU REMHQLQ JQFHO GH÷HUOHULQL WXWDUNHQ øúOHP 7DULKoHVL R REMH LOH JHUoHNOHúWLULOPLúWPLúOHPOeri depolar. ÖrnH÷LQ Blok Zinciri WDEDQOÕ ELU DUDED VDWÕú SODWIRUPX GúQHOLP (÷HU ELU DUDEDQÕQ ER\D UHQJL NÕUPÕ]ÕGDQ PDYL\H GH÷LúWLULOGL\VH 'XUXP .D\GÕQGD REMHQLQ UHQJL PDYL RODUDN ND\ÕW DOWÕQD DOÕQÕU )DNDW øúOHP 7DULKoHVLQH EDNÕOGÕ÷ÕQGD DUDEDQÕQ renginin öncedeQ NÕUPÕ]Õ olGX÷XQD YH DUDEDQÕQ UHQJL NÕUPÕ]Õ\NHQ KDQJL LúOHPOHULQ \DSÕOGÕ÷ÕQD XODúÕP úDQVÕ RODFDNWÕU %X \DSÕ R\ODPD VLVWHPLQGH GH E\N |OoGH önem arz etmektedir. Örnek olDUDNH÷HUVLVWHP]HULQGHµ$¶ VHoHQH÷LQH YHULOPLú ELU R\ µ%¶ VHoHQH÷LQH GH÷LúWLrLOPLú yani müdahale HGLOPLúVH EX R\XQ |QFHGHQ µ$¶ VHoHQH÷LQH YHULOGL÷LQLQ WDNLEL øúOHP 7DULKoHVL VD\HVLQGH NROD\ ELU úHNLOGH \DSÕODELOHFHNWLU %X \]GHQ .D\ÕW 'HIWHUL VLVWem müdahalesinin WHVSLWLQGH|QHPOLELUGHVWHNVD÷ODPDNWDGÕU C. Onaylama Prensipleri (Endorsement Policies)
Onaylama PUHQVLSOHUL ELU LúOHPLQ WUDQVDFWLRQ JHoHUOL VD\ÕODELOPHVL LoLQ D÷ LoLQGH HúOHUGHQ WDOHS HGLOHQ yetkilendirmelere verilen isimdir. [3][4] Onaylama prensipleri zincir kodunda (chain code) önceden belirtilir ve zincir kodu aktive ediOGL÷LQGH JHUoHNOHúHQ LúOHPLQ JHoHUOLOL÷LQLNRQWUROHGHUOHUgUQHNRODUDNELU]LQFLUNRGXQXQ \D]ÕPÕELWWLNWHQVRQUD]LQFLUNRGXQXRQD\OD\DFDNSUHQVLSOHU atanabilir. Mesela ANÕOOÕ S|]OHúPHOHULQ KDQJL HúLQ |]HO DQDKWDUÕ LOH SULYDWe key) imzalanmasÕ gerekWL÷L bir onaylama pUHQVLELGLU %|\OHOLNOH ELU LúOHPLQ
JHUoHNOHúWLULOPHVL LoLQ KDQJL HúOHULQ SHHU DQODúPDVÕ JHUHNWL÷L EHOLUWLOPLú ROXQXU 2QD\ODPD 3UHQVLSOHUL GR÷UX LúOHPLQ JHUoHNOHúLS JHUoHNOHúPHPHVL LOH LOJLOHQPH]OHU RQODUÕQ WHPHO DPDFÕ JHUoHNOHúHQ LúOemin geçerli VD\ÕOÕp VD\ÕODPD\DFD÷ÕQÕQ NRQWURO HGLOPHVLGLU 2QD\ODPD 3UHQVLSOHUL VLVWHPGH WDNOLW LúOHPOHULQ YH\D WDNOLW DNÕOOÕ V|]OHúPHOHULQEDUÕQGÕUÕOPDVÕQÕQ|QQHJHoHUoQNJHoHUVL] LúOHPOHU VLVWHPGH WXWXOVD ELOH RQD\ODQPDGÕ÷Õ belirtilir. Bu sayede hem geçersL] LúOHP ND\ÕWODUÕQÕQ WDNLS HGLOPHVLQLQ RODQD÷Õ VD÷ODQÕU KHP GH VDKWH LúOHP JLULúLPOHULQLQ |QQH JHoLOPLú ROXQXU ùHNLO ¶GH EX VUHFLQ QDVÕO gHUoHNOHúWL÷L göVWHULOPLúWLU.
.
ùHNLO. øúOHP.D\GHGLOPHDöngüsü
IV. Sø67(0YAPISI
Sistem, 3 ana parçadan ROXúmaktaGÕU $QGURLG X\JXODPDVÕ 5(676XQXFXVXYH%ORN=LQFLUL $÷Õ$QGURLG X\JXODPDVÕ NXOODQÕFÕGDQ JHOHQ JLUGLOHUL 5(67 6XQXFXVXQD DNWDUPDNWDGÕU 5(67 6XQXFXVX LVH NXOODQÕFÕGDQ JHOHQ girdilere göre Blok Zinciri A÷ÕQGD JHUHNOL LúOHmlerin olXúPDVÕ LoLQ Nomutlar göndeULU 'ROD\ÕVÕ\OD JHOHQ YHUL 5(67 6XQXFX DUDFÕOÕ÷Õ\OD %ORN =LQFLUL $÷ÕQD DNWDUÕOPDNWDGÕU <XNDUÕGD EDKVHGLOHQ WHNQRORMLOHULQ |]HOOLNOHULYHGDKDGHWD\OÕDoÕNODPDODUÕLOHUOH\HQE|OPOHUGH LOJLOL EDúOÕNODU DOWÕQGD DQODWÕOPDNWDGÕU. Sistem yaSÕVÕ ùHNil 3’te g|VWHULOPLúWLU
ùHNLO6LVWHP<DSÕVÕ*|VWHULPi
A. BORN=LQFLUL$÷Kurulumu
Projede, Blok Zinciri A÷Õ NXUPDN LoLQ +\SHUOHGJHU )DEULF 6HUYLVL NXOODQÕOPÕúWÕU %X VHUYLV ,%0 WDUDIÕQGDQ SL\DVD\D VUOPú ROXQXS %lok Zinciri tabanlÕ Lú X\JXODPDODUÕ gelLúWLUPHN LVWH\HQ \D]ÕOÕPFÕODUÕQ LúLQL NROD\ODúWÕUPDN DPDFÕ\OD NXOODQÕOPDNWDGÕU +\SHUOHGJHU )DEULF VHUYLVLQLQ 0DF26 YH 8EXQWX SODWIRUP GHVWHNOHUL EXOXQPDNWDGÕU >@ Fabric Servis’ini kullanmak için belirli teknolojilerin hali KD]ÕUGD\klü ROPDVÕJHUekmektedir. Bu teknolojiler Docker YH 1RGH-V VHUYLVOHULGLU >@ øOHUOH\HQ E|OPOHUGH EX WHNQRORMLOHULQQHROGXNODUÕYHQHLoLQNXOODQÕOGÕNODUÕKDNNÕQGD GDKDGHWD\OÕDoÕNODPDODU\HUDOPDNWDGÕU
x Docker: Docker prograPÕ NXUXODQ %ORN =LQFLUL D÷ÕQÕn çoklu platformlarda ortak biU úHNLOGH oDOÕúDELOPHVL LoLQ JHUHNOLGLU )DEULF¶i kurmadan |QFH WHUPLQDO \DUGÕPÕ LOH NXUXOXP JHUoHNOHúWLULOPLúWLU >@ %ORN Zincirinin kurulumu YH NRG \D]ÕPÕ VUHFLQGH WP oDOÕúPD ELU Docker Konteyner LoLQGH WXWXOPXúWXU. Bu sayede ortaya oÕNDcak olan Blok Zinciri A÷Õ WP SODWIRUPODUGD VRUXQVX]ELUúHNLOGHoDOÕúDELOPHNWHGLU>@
x NodeJs Servisi: NodeJs servisi Blok Zinciri LoHULVLQGHNL \DSÕQÕQ GH÷LúWLULOPHVL YH \DSÕQÕQ ihtiyaca göre düzeQOHQPHVLQLVD÷ODPDNWDGÕU)DEULF kuruluPX \DSÕOPDGDQ önce NodeJs servisi yüklü EXOXQPDN ]RUXQGDGÕU 7HUPLQDO NXOODQÕODUDN EX NXUXOXPJHUoHNOHúWLULOPLúWLU>@
x Fabric Kurulumu: Gerekli tüm öncül programlar EDúDUÕLOH\NOHQGLNWHQ sonra, terminal kXOODQÕODUDN gerekli komutun girilmesi ile Composer CLI araçlarÕEDúDUÕOÕELU úHNLOGHNXUXOPXúWXUBu komut DúD÷ÕGDEHOLUWLOPLúWLU>@
npm install -g composer-cli
&RPSRVHU &/, DUDoODUÕ %ORN =LQFLUL JHOLúWLULFLOHUL LoLQ WP |QHPOL LúOHPOHULQ \DSÕOPDVÕQÕ VD÷OD\DFDN DUDoODUGÕU )DEULF NXUXOXPX GD \DSÕODUDN VLVWHP NXUXOXPX EDúDUÕ LOH WDPDPODQPÕúWÕU %LU sonraki E|OPGH VLVWHP WDVDUÕPÕ YH NRG \D]ÕPÕ DúDPDVÕ yer almaktaGÕU>@
B. Blok =LQFLUL$÷Õ<D]ÕP6UHFL
Hyperledger Fabric’LQ \DUDWÕFÕVÕ RODQ ,%0 firPDVÕ 9LVXDO Studio Code editörünü önermektedir. [6] Bunun sebebi ise, +\SHUOHGJHU)DEULFNXOODQÕODUDN=LQFLU.RGX0RGHOOHPHYH (ULúLP .RQWURO \D]PD RUWDPÕQÕQ 9Lsual Studio Code’da ELUHNOHQWLRODUDNEXOXQPDVÕGÕU
Ɣ IBM Modelleme Dili: Bu dil kulODQÕODrak, Blok ]LQFLULQGH\HUDODFDNYDUOÕNODUHQWLW\YHNRQVHSWOHU ROXúWXUXOPDNWDGÕU >@ gUQH÷LQ, EX oDOÕúPDGD ³.DWÕOÕPFÕ´ YDUOÕ÷Õ ROXúWXUXOPXú YH EX YDUOÕ÷ÕQ içiQGH \HU DODFDN QLWHOLNOHU HNOHQPLúWLU (kDWÕOÕPFÕ LVPL NLPOL÷L DGUHV YV. Örnek modelleme kodu DúD÷ÕGD EHOLUWLOPLúWLU
participant Participant identified by participantId {
o String participantId o SignupValues signupValue o Info info optional
o Integer type
o String Descr optional }
Ɣ (ULúLP .RQWURO 'LOL %X NÕVÕPGD ELU HúLQ YH\D paydaúÕQ, Blok Zinciri A÷ÕQGD QH\H HULúLP L]QLQLQ olup neye RODPD\DFD÷Õ \D]ÕOPDNWDGÕU >@ gUQH÷LQ QRUPDO ELU NXOODQÕFÕQÕQ Yönetici NXOODQÕFÕ WLSLQLQ \DSWÕ÷Õ LúOHPOHUH HULúLPLQLQ ROPDPDVÕ YH ilgili LúOHPOHUL WUDQVDFWLRQ J|UPHPHVL NXUDOÕ EXUada belirtilmektedir.
Ɣ Zincir KodlarÕ <D]ÕPÕ =LQFLU .RGODUÕ $NÕOOÕ 6|]OHúPHOHULQ \DSÕVÕQÕQ ROXúWXUXOGX÷X NRG SDUoDODUÕQD YHULOHQ LVLPGLU >@ %X NRdlar, -DYD6FULSW GLOL NXOODQÕODUDN \D]ÕOPÕúWÕU gUQHN =LQFLUNRGXDúD÷ÕGDEHOLUWLOPLúWLU function increaseCoin(coinData){ var participantRegistry = {} return getParticipantRegistry('org.pollst ar.participant.Voter').then(functi on(registry){ participantRegistry = registry; return participantRegistry.get(coinData.p articipantId); }).then(function(participant){ participant.coin = participant.coin + coinData.addition; return participantRegistry.update(partici pant); }).then(function(){ // Successful update var event = getFactory().newEvent('org.pollsta r.participant', 'coinIncreased'); event.participantId = coinData.participantId; emit(event); }).catch(function(error){ throw new Error(error); });
}
C. Blok =LQFLUL$÷Õ<|QHWLPL
$÷ \|QHWLPL LúOHPL ELUGHQ ID]OD DúDPDGDQ ROXúPDNWDGÕU Sistemin G]JQoDOÕúDELOPHVLLoLQEXDúDPDODUHNVLNVL]YH GR÷UXELUúHNLOGHJHUoHNOHúWLULOPLúWLU
x )DEULFdDOÕúWÕUÕOPDVÕ<D]ÕODQWPNRGODUÕQEDúDUÕOÕ ELU úHNLOGH oDOÕúPDVÕ YH VLVWHPH \NOHQPesi için öncelikle Fabric Sisteminin çalÕúÕ\RU YD]L\HWWH EXOXQPDVÕ JHUHkmektedir. Bunun için gerekli NRPXWODUDúD÷ÕGDEHOLUWLOPLúWLU>@
# Start Server
cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./startFabric.sh
x %1$$UúLYL<DUDWÕOPDVÕYH Yüklenmesi: Fabric’in DUND SODQGD oDOÕúÕU YD]L\HWWH EXOXQGX÷XQGDQ HPLQ olduktan sonra \D]ÕOPÕú RODQ WP ]LQFLU NRGODUÕ PRGHO NRGODUÕ HULúLP NRQWURO NRGODUÕ RQD\ODPD prensipleri ve benzeri tüm blok ]LQFLUL D÷Õ ELOHúHQOHULQLQ DUúLYOHQGL÷L bir dosya oluúWXUXOPDVÕ JHUHNPHNWHGLU %X GRV\D øú $÷Õ $UúLYL %XVLQHVV Network Archive) dosyasÕ ROXS \NOHQHFHN RODQ
Blok Zinciri A÷ÕQÕQ WHPHO SUHQVLSOHULQL LoHUPHNWHGLU %1$GRV\DVÕ \DUDWPDNYH \Nlemek LoLQJHUHNOLNRPXWODUDúD÷ÕGDEHOLUWLOPLúWLU
# Create bna file
composer archive create
--sourceType dir --sourceName ../ -a archive.bna
# Deploy BNA file
composer network install -a ./archive.bna -c PeerAdmin@hlfv1 x $GPLQ .DUWÕ <DUDWPD Blok Zinciri $÷ÕQGD 2 tip
NDUW PHYFXWWXU %XQODU $÷ <|QHWLFL .DUWÕ YH (ú YönHWLFL .DUWÕGÕU $÷ <|QHWLFL .DUWÕ %ORN =LQFLUL $÷ÕROXúWXUXUNHQVLVWHPWDUDIÕQGDQRWomatik olarak \DUDWÕOPDNWDGÕUøú$÷Õ<|QHWLFLVL%ORN=LQFLUL$÷Õ yüklendikten sonUD VLVWHP \DSÕVÕQÕQ D\DUODQPDVÕ YH JQFHOOHQPHVLQGHQVRUXPOXRODQNLúLGLU>@(ú YönetLFL .DUWÕ LVH VLVWHPH JLUHFHN WP HúOHU LoLQ GLQDPLN RODUDN \DUDWÕOPDNWDGÕU %ORN =LQciri \DSÕVDO RODUDN PHUNH]L ROPD\DQ ELU VLVWHP ROGX÷XQGDQ GROD\Õ D÷D \HQL JLULú \DSDQ WP HúOHU LoLQNDUW\DUDWÕOPDNWDGÕU%XLúOHPLoLQJHUHNOLRODQ terminal kRPXWXDúD÷ÕGDYHULOPLúWLU>@
./createPeerAdminCard.sh
x $÷ÕQ dDOÕúWÕUÕOPDVÕ 7P LúOHPOHU ELWWLkten sonra %ORN =LQFLUL $÷ÕQÕQ oDOÕúWÕUÕOPDVÕ JHUHNPHNWHGLU %X LúOHP LoLQ JHUHNOL WHUPLQDO NRPXWX DúD÷ÕGD EHOLUWLOPLúWLU>@
composer network start -n networkName -c PeerAdmin@hlfv1 -V 0.0.1 -A admin -S adminpw
6LVWHP EDúDUÕOÕ ELU úHNLOGH EDúODWÕOGÕNWDQ sonra, \DUDWÕODQ (ú .DUWÕ¶QÕQ VLVWHPH HNOHQPHVL gerekmektedir. BunXQ LoLQ JHUHNOL NRPXW DúD÷ÕGD YHULOPLúWLU
# Use the card generated
composer card import -f admin@pollstarblockchainnetwork.ca rd
%X LúOHPOHU VRQXFXQGD VLVWHP EDúDUÕOÕ ELU úHNLOGH test edilebiOLU KDOGHGLU <DUDWÕODQ $NÕOOÕ 6|]OHúPHOHUin (smart contrDFWKHSVLDUWÕNVLVWHPGH KD]ÕU YH NXOODQÕODELOLU KDOH JHOPLúWLU (÷HU ]LQFLU NRGXQGDKHUKDQJLELUKDWDROXúPXúLVHVLVWHPKDWD YHULU YH NXOODQÕFÕ\Õ X\DUÕU %XQD J|UH NRG düzenlenip \XNDUÕGDNLDúDmalar tekrar uygulanarak önceden ROXúWXUXODQ %ORN =LQFLUL $÷ÕQÕn içine tekrar yüklenebilir.
x Sistemin Simülasyonu: Sistemin simülasyonu DPDFÕ\ODNXOODQÕODQ“Composer Playground” isimli ELU VHUYLV EXOXQPDNWDGÕU %X VHUYLV %ORN =LQFLUL JHOLúWLULFLVLQH \DUDWWÕ÷Õ $NÕOOÕ 6|]OHúPHOHUin NXOODQÕPÕ YH simülasyonu NRQXVXQGD NROD\OÕN VD÷ODU >@ gUQH÷LQ NXOODQÕFÕQÕQ ³Anket Oyla” adÕQGD ELU DNÕOOÕ V|]OHúPH \DUDWWÕ÷ÕQÕ IDU] edelim. KuOODQÕFÕ EX V|]OHúPH\L JHUHNOL SDUDPHWUHOHUL JLUHUHN WHVW HGHELOLU YH EDúDUÕOÕ ELU úHkiOGH oDOÕúÕS oDOÕúPDGÕ÷ÕQÕ J|UHELOLU %X VD\HGH VLVWHPLQ LúOH\Lú NRQWURO VD÷ODQPDNWDGÕU &RPSRVHU 3OD\JURXQG servisi, NXOODQÕFÕ\D \XNDUÕGD EDKVHGLOHQ LúOHPOHULQ NROD\OÕNOD JHUoHNOHúWLULOHELOPHVL LoLQ DUD yüz VD÷ODPDNWDGÕU>@
D. Loopback Servisi
Loopback serYLVL DoÕN ND\QDNOÕ ELU 1RGH-6 VHUYLVLGLU >@ 6LVWHPGHKDOLKD]ÕUGD\NORODQ1RGH-V5(676XQXFXLoLQ NXOODQÕFÕDUD yüzü yaratabilmek üzere LoopBack DGÕQGDELU VHUYLV VD÷ODPDNWDGÕU >@ 'ROD\ÕVÕ LOH /RRSEDFN NXOODQÕODUDN5(676XQXFXLoLQDUD \]ROXúWurXOPXúWXU%X VD\HGH5(676XQXFXNXOODQÕPÕKÕ]OÕYHNROD\KDOHJHOPLúWLU 9LVXDO6WXGLR&RGHDUDFÕQÕQNRQVROXNXOODQÕODUDk Loopback 3URMH WLSL ROXúWXUXODbilir ve gerekli tüm dosyalar Proje .ODV|U LoLQGH D\UÕ ELU NODV|UGH \DUDWÕODELOLU /RRSEDFN ROXúWXUPDk LoLQJHUHNOLWHUPLQDONRPXWXDúD÷ÕGDYHULOPLúWLU yo hyperledger-composer
%X NODV|UH HULúLP VD÷ODQGÕNWDQ VRQUD 5(67 Sunucusu’nu EDúODWPDN LoLQ EDúODWPD NRPXWX JLULOPLúWLU .RQVRO oÕNWÕVÕ olarak, REST Sunucusunun URL’VL\HUDOPDNWDGÕU>@%X OLQNH WÕklanarak REST Sunucusu ara \]QH EDúDUÕOÕ ELU úHNLOGHHULúLPVD÷ODQPÕúWÕU
E. REST Sunucusu
REST Sunucusu \DUGÕPÕ\OD %ORN =LQFLUL $÷Õ YH $QGURLG X\JXODPDVÕ DUDVÕQGD YHUL DOÕúYHULúL VD÷ODQPÕúWÕU Uygulama NÕVPÕQGD LVH ³9ROOH\´ DGÕQGD $÷ .WSKDQHVL NXOODQÕODrak REST Sunucu ile uygulama LOHWLúLPL VD÷ODQPÕúWÕU %X LOHWLúLP-621YHULIRUPDWÕLOHJHUoHNOHúWLULOPLúWLU$QGUoid NÕVPÕQGDQ JHOHQ JLUGLOHU -621 IRUPDWÕQD G|QúWUOHUHN REST SunucusuQD DNWDUÕOPÕúWÕU 5(67 LoLQGH GH JHOHQ YHULOHUNXOODQÕODUDN%ORN=LQFiriQGHNLJHUHNOLLúOHPOHUDNWLYH HGLOPLúYHLúOHPND\ÕWODUÕROXúWXUXOPXúWXU
F. .XOODQÕFÕ$UD Yüzü
.XOODQÕFÕ ara yüzünden gelen girdiler REST Sunucusuna DNWDUÕOÕU. Bu girdiler %ORN=LQFLUL$÷ÕQGDED]ÕGH÷LúLNOLNOHULQ ROPDVÕQD VHEHS RODFD÷Õ JLEL VDGHFH Durum KaydÕQGDNL (World State) bilgilerin |÷UHQLOPHVL LoLQ GH NXOODQÕODELOLU gUQH÷LQNXOODQÕFÕQÕQR\ODPDLúOHPLQLJHUoHNOHúWLUPHVL veya ELU R\ODPD VRUXVX \DUDWÕOPDVÕ, Blok Zincirinde Durum .D\GÕQÕQ GH÷LúiNOL÷LQL JHUHNWLULU Bu girdiler arka planda -621 IRUPDWÕQD G|QúWUOU YH 5EST Sunucusuna “POST” PHVDMÕ RODUDN J|QGHULOLU Oylama ara yüzü ekran görüntüsü ùHNLO’te, soru yaratma ara yüzü ekran görüntüsü GHùHNLO’WHJ|VWHULOPLúWLU
ùHNLO5. Soru Yaratma Ara Yüzü
Bunun ötesinde NXOODQÕFÕGDn gelen girdiler D\QÕ ]DPDQGD Blok Zinciri $÷ÕQGD olan verilerin gösterilmesiyle ilgili olarak GD NXOODQÕODELOLU KulODQÕFÕGDQ JHOHQ JLUGLOHU DUND planda yine -621 IRUPDWÕQD d|QúWrülerek REST sunucusuna “GET” LVWH÷LúHNOLQGH\ROODQÕU%XVD\HGe Blok =LQFLUL$÷ÕQGDQLVWHQHQ'XUXP.D\GÕELOJLVLX\JXODPDDUD \]QH DNWDUÕODELOLU %X Lúlemin geroHNOHúWL÷L ara yüzlerden biri olan sonuç ara yüzü ekran görüntüsü ùHNLO 6’da J|VWHULOPLúWLU
ùHNLO6. Sonuç Ara Yüzü
V. SONUÇ
%X oDOÕúPDGD %ORN Zinciri tabaQOÕ ELU GLMLWDO R\Oama SODWIRUPXJHOLúWLULOPLúWLU%XoDOÕúPDQÕQWHmel motivasyonu, dLMLWDO ELU R\ODPD VLVWHPLQLQ DNOD JHWLUHFH÷L HQGLúHOHULQ Ye VRUXQODUÕQ PLQLPL]H HGLOPHVLGLU <DSÕODQ EX oDOÕúPD VD\HVLQGH LQVDQODUÕQ GDKD JYHQLOLU YH WDNLS Hdilebilir bir oylama sistemine sDKLS ROPDODUÕ YH R\ODPD VRQXoODUÕ DoÕNODQGÕNWDQ VRQUD ROXúDELOHFHN HQGLúHOHULQ YH NDUJDúDQÕQ |QQH JHoLOPHVL KHGHIOHQPLúWLU Blok Zinciri teknolojisinin JYHQ VRUXQODUÕQÕ o|]PHGH QH NDGDU HWNLOL ELU WHNQRORML
RODELOHFH÷LQL Jöstermek ve fLQDQV DODQÕ GÕúÕQGDki uygulamalara yenisi eklemek de ikincil hedeflHUDUDVÕQGDGÕU
KAYNAKÇA
[1] Gaur, N., Desrosiers, L., Ramakrishna, V., Novotný, P., Baset, S. and O'Dowd, A. (2018). Hands-on blockchain with Hyperledger. [2] Sciencesphere.org. (2017). [online] Available at:
http://www.sciencesphere.org/ijispm/archive/ijispm -0501.pdf#page=67 [Accessed 27 May 2019]. [3] Crosby, M., Pattanayak, P., Verma, S. and
Kalyanaraman, V. (2016). BlockChain Technology: Beyond
Bitcoin. [online] Scet.berkeley.edu. Available at: http://scet.berkeley.edu/wp-content/uploads/ AIR-2016-Blockchain.pdf
[Accessed 27 May 2019].
[4] Hyperledger-fabric.readthedocs.io. (2019). Smart
Contracts and Chaincode — hyperledger-fabricdocs master documentation. [online] Available at: https://hyperledger-
fabric.readthedocs.io/en/release-1.4/smartcontract/smartcontract.html [Accessed 1 Jun. 2019].
[5] "Installing pre-requisites | Hyperledger Composer",
Ibm-blockchain.github.io, 2019. [Online]. Available: https://ibm-
blockchain.github.io/develop/installing/installing-prereqs.html#macos. [Accessed: 02- Jun- 2019] [6] "Installing the development environment |
Hyperledger Composer", Ibm-blockchain.github.io, 2019. [Online]. Available: https://ibm-blockchain.github.io/develop/installing/developme nt-tools.html. [Accessed: 02- Jun- 2019]
[7] "Deploying Business Networks | Hyperledger
Composer", Hyperledger.github.io, 2019. [Online]. Available: https://hyperledger.github.io/composer/v0.19/business-network/ bnd-deploy.html. [Accessed: 03- Jun- @
[8] "Using Playground | Hyperledger Composer",
Hyperledger.github.io, 2019.[Online]. Available: https:// hyperledger.github.io/composer/v0.19/playg round/playground-index. [Accessed: 03- Jun- @
[9] "LoopBack - Node.js framework", Loopback.io, 2019. [Online]. Available: https://loopback.io/. [Accessed: 03- Jun- 2019].
[10] "Generating a REST API | Hyperledger Composer", Hyperledger.github.io, 2019. [Online]. Available: https://hyperledger.github.io/composer/v0.19/integrating/getting-started-rest-api. [Accessed: 03- Jun- @
[11] "Publishing events from the REST server | Hyperledger Composer", Hyperledger.github.io,
2019. [Online]. Available: https://hyperledger.github.io/composer/v0.19/integrating/ publishing-events. [Accessed: 03- Jun- 2019]