Basit bir Hyperledger Fabric ağının ayağa kaldırılması
Tags: blokzincir, blockchain, fabric, hyperledger
Published: 2022-05-25 19:59:20

Basit bir Hyperledger Fabric ağının ayağa kalkması için birkaç yol bulunmaktadır. Bu kapsamda ilk olarak **docker** ve **docker compose** kullanılarak bir Hyperledger Fabric ağının ayağa kaldırılmasından bahsedeceğim.

# Docker yöntemi için ön gereksinim

Öncelikli olarak sistemimizde git, docker ve docker compose'un kurulu olduğunu varsayıyorum. Herhangi bir linux dağıtıma göre kurulum süreci değişebildiği için bu adımda bu konuda bir açıklama yapmıyorum.

Örneğin Pardus 19.x üzerinde [ilgili yazıyı](https://dev.to/aciklab/pardus-19-x-uzerinde-docker-kurulumu-ve-kullanimi-f9o) kullanarak docker kurulumu yapabilir ve sonrasında aynı depo üzerinden docker-compose kurulumu yapabilirsiniz 

# Fabric ağının hazırlanması

Hyperledger Fabric ağını oluşturmadan önce Hyperledger Fabric'in hangi sürümünün kullanılacağı belirlenmelidir. Bu kapsamda 25 Mayıs 2022 tarihi itibariyle mevcut durumda 2.2 ve 2.4 sürümlerinin kullanılmasını önermekteyim.

Bunun için 2.4 sürümüne yönelik aşağıdaki komut çağırılarak kurulum betiği indirilip çalıştırılabilir.

```bash
wget https://raw.githubusercontent.com/hyperledger/fabric/release-2.4/scripts/bootstrap.sh
bash bootstrap.sh
```

Bu adımdan sonra arkaplanda Hyperledger Fabric ağının hazırlanma süreci tamamlanmış oluyor.

# Fabric örneklerini kullanmak ve test ağı

Github üzerinde Hyperledger organizasyonunun hazırladığı bir fabric-samples isimli fabric örnek reposu bulunmaktadır. Bu reponun içerisinde örnek chaincode (akıllı kontrat), api kullanım, ağ altyapısı gibi çeşitli örnekler bulunmaktadır. 

İlgili repoyu kullanmak için öncelikle git ile sistemimize çekiyoruz. Bu adımı yapmak yerine zip olarak da indirebilirsiniz.

```bash
git clone https://github.com/hyperledger/fabric-samples
```

Bu adımdan sonra fabric-samples klasörü içerisinde **test-network** isminde örnek bir ağın bulunduğu içerikler bulunmaktadır. Başka bir yazıda detaylarına girmeyi düşündüğüm test ağı parametrelerinde ilgili klasöre girip aşağıdaki şekilde temel düzeyde bir ağ ayağa kaldırabilmektesiniz.

```bash
cd fabric-samples/test-network
./network.sh up
```

Bu şekilde ağ ayağa kaldırıldıktan sonra ağı kapatmak için aşağıdaki komut kullanılması gerekmektedir.

```bash
./network.sh down
```

# Ağda sertifika otoritesi ayağa kaldırmak

Bu şekilde test ağı ayağa kaldırdığınızda kendi içerisinde bir CA sertifika otoritesi için bir container oluşturulmamış oluyor. Bu adımda **fabric-ca-server** servisini de oluşturmak isterseniz aşağıdaki adımdaki gibi ağ ayağa kaldırılmalı.

```bash
./network.sh up -ca
```

Tabi ki daha önce bir ağ ayağa kaldırdıysanız bunu kapatmanız gerekmektedir.

# Ağ üzerinde Fabric kanalı oluşturma

Var olan bir ağ üzerinde aşağıdaki şekilde "kanalAdi" adında bir kanal oluşturulabilmektedir.

```bash
./network.sh createChannel -c kanalAdi
```

# Ağ üzerinde akıllı kontrat ekleme

Hyperledger Fabric üzerinde bildiğimiz gibi akıllı kontrat kavramı yerine chaincode geçmekte. Ve chaincode'lar golang, nodejs ve java dilleriyle geliştirilebilmekte. Golang diliyle yazılmış bir chaincode'u aşağıdaki şekilde ağ üzerine ekleyebilmekteyiz.

```bash
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-go -ccl go
```

# Test ağımız hazır!

Bu adımdan sonra içerisinde "kanalAdi" isimli bir kanalın bulunduğu, 2 örnek organizasyonun yer aldığı, bu yapı içerisinde 2 eş(peer) servis, 1 sıralama servisi (orderer service) bulunan ve asset-transfer-basic içerisinde tanımlanmış chaincode-go isimli bir akıllı sözleşmenin bulunduğu bir ortam hazırlanmış oluyor. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ufgowt3zw5yoetjnlpwe.png)

Aşağıdaki komut ile sisteminizdeki ayakta olan ağ bileşenlerini inceleyebilrisiniz.

```bash
docker ps -a
```

Bu komut çıktısında docker üzerinde hangi konteynırların yer aldığı izlenebilmektedir.

```
CONTAINER ID   IMAGE                               COMMAND             CREATED         STATUS                  PORTS                                            NAMES
3247543b5634   hyperledger/fabric-tools:latest     "/bin/bash"         1 second ago    Up Less than a second                                                    cli
r3t117c81c7f   hyperledger/fabric-peer:latest      "peer node start"   2 seconds ago   Up 1 second             0.0.0.0:7051->7051/tcp                           peer0.org1.example.com
421ead770e05   hyperledger/fabric-orderer:latest   "orderer"           2 seconds ago   Up Less than a second   0.0.0.0:7050->7050/tcp, 0.0.0.0:7053->7053/tcp   orderer.example.com
421d43f5f312   hyperledger/fabric-peer:latest      "peer node start"   2 seconds ago   Up 1 second             7051/tcp, 0.0.0.0:9051->9051/tcp                 peer0.org2.example.com
``` 

Bu adımdan sonra chaincode'un geliştirilmesi ve çalıştırılması, API servislerinin detayları ve tabi ki uygulama geliştirilmesi gibi konularla işin detayına girilebilmektedir.

----

timeo hominem unius libri