‼️ Ön Koşullar:
- Bir önceki serideki adımların yapılmış olması gerekmektedir.
Adım 1: Gerekli Değişkenlerin Tanımlanması
Bu adımda, Fabric ağ bileşenleri için Docker imajları ve sürümleri belirleniyor. Bu, kurulum sürecinde kullanılacak temel yapılandırma bilgileridir.
export PEER_IMAGE=hyperledger/fabric-peer
export PEER_VERSION=2.5.0
export ORDERER_IMAGE=hyperledger/fabric-orderer
export ORDERER_VERSION=2.5.0
export CA_IMAGE=hyperledger/fabric-ca
export CA_VERSION=1.5.6
Adım 2: Cluster IP'nin Alınması ve CoreDNS Konfigürasyonu
Kubernetes cluster IP adresi alınıyor ve CoreDNS için özel bir yapılandırma yapılıyor. Bu, ağ trafiğinin yönlendirilmesi ve yönetilmesi için önemlidir.
sudo apt install jq
CLUSTER_IP=$(kubectl -n istio-system get svc istio-ingressgateway -o json | jq -r .spec.clusterIP)
kubectl apply -f - <<EOF
kind: ConfigMap
apiVersion: v1
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        rewrite name regex (.*)\.localho\.st host.ingress.internal
        hosts {
          ${CLUSTER_IP} host.ingress.internal
          fallthrough
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf {
           max_concurrent 1000
        }
        cache 30
        loop
        reload
        loadbalance
    }
EOF
Adım 3: CA Kurulumu ve Peer Kayıtları
Sertifika otoritesi (CA) kurulumu ve peer kayıtları yapılıyor. Bu adım, ağın güvenlik ve kimlik doğrulama mekanizmalarının temelini oluşturur.
Org1:
# CA Kurulumu org1 için
kubectl hlf ca create --image=$CA_IMAGE --version=$CA_VERSION --storage-class=standard --capacity=1Gi --name=org1-ca \
    --enroll-id=enroll --enroll-pw=enrollpw --hosts=org1-ca.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabriccas.hlf.kungfusoftware.es --all
curl -k https://org1-ca.localho.st:443/cainfo
# Peerler için org1'de kullanıcı kaydı
kubectl hlf ca register --name=org1-ca --user=peer --secret=peerpw --type=peer \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org1MSP
# Peer Kurulumu org1 için
kubectl hlf peer create --statedb=couchdb --image=$PEER_IMAGE --version=$PEER_VERSION --storage-class=standard --enroll-id=peer --mspid=Org1MSP \
        --enroll-pw=peerpw --capacity=5Gi --name=org1-peer0 --ca-name=org1-ca.default \
        --hosts=peer0-org1.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabricpeers.hlf.kungfusoftware.es --all
Org2:
# CA Kurulumu org2 için
kubectl hlf ca create --image=$CA_IMAGE --version=$CA_VERSION --storage-class=standard --capacity=1Gi --name=org2-ca \
    --enroll-id=enroll --enroll-pw=enrollpw --hosts=org2-ca.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabriccas.hlf.kungfusoftware.es --all
curl -k https://org2-ca.localho.st:443/cainfo
# Peerler için org2'de kullanıcı kaydı
kubectl hlf ca register --name=org2-ca --user=peer --secret=peerpw --type=peer \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org2MSP
# Peer Kurulumu org2 için
kubectl hlf peer create --statedb=couchdb --image=$PEER_IMAGE --version=$PEER_VERSION --storage-class=standard --enroll-id=peer --mspid=Org2MSP \
        --enroll-pw=peerpw --capacity=5Gi --name=org2-peer0 --ca-name=org2-ca.default \
        --hosts=peer0-org2.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabricpeers.hlf.kungfusoftware.es --all
Org3:
# CA Kurulumu org3 için
kubectl hlf ca create --image=$CA_IMAGE --version=$CA_VERSION --storage-class=standard --capacity=1Gi --name=org3-ca \
    --enroll-id=enroll --enroll-pw=enrollpw --hosts=org3-ca.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabriccas.hlf.kungfusoftware.es --all
curl -k https://org3-ca.localho.st:443/cainfo
# Peerler için org3'de kullanıcı kaydı
kubectl hlf ca register --name=org3-ca --user=peer --secret=peerpw --type=peer \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org3MSP
# Peer Kurulumu org3 için
kubectl hlf peer create --statedb=couchdb --image=$PEER_IMAGE --version=$PEER_VERSION --storage-class=standard --enroll-id=peer --mspid=Org3MSP \
        --enroll-pw=peerpw --capacity=5Gi --name=org3-peer0 --ca-name=org3-ca.default \
        --hosts=peer0-org3.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabricpeers.hlf.kungfusoftware.es --all
Org4:
# CA Kurulumu org4 için
kubectl hlf ca create --image=$CA_IMAGE --version=$CA_VERSION --storage-class=standard --capacity=1Gi --name=org4-ca \
    --enroll-id=enroll --enroll-pw=enrollpw --hosts=org4-ca.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabriccas.hlf.kungfusoftware.es --all
curl -k https://org4-ca.localho.st:443/cainfo
# Peerler için org4'de kullanıcı kaydı
kubectl hlf ca register --name=org4-ca --user=peer --secret=peerpw --type=peer \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org4MSP
# Peer Kurulumu org4 için
kubectl hlf peer create --statedb=couchdb --image=$PEER_IMAGE --version=$PEER_VERSION --storage-class=standard --enroll-id=peer --mspid=Org4MSP \
        --enroll-pw=peerpw --capacity=5Gi --name=org4-peer0 --ca-name=org4-ca.default \
        --hosts=peer0-org4.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabricpeers.hlf.kungfusoftware.es --all
Adım 4: Orderer Kurulumu
İşlem sıralayıcı (orderer) bileşeninin kurulumu ve yapılandırılması gerçekleştiriliyor. Orderer, ağ üzerindeki işlemlerin düzenini ve tutarlılığını sağlar.
kubectl hlf ca create  --image=$CA_IMAGE --version=$CA_VERSION --storage-class=standard --capacity=1Gi --name=ord-ca \
    --enroll-id=enroll --enroll-pw=enrollpw --hosts=ord-ca.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabriccas.hlf.kungfusoftware.es --all
curl -vik https://ord-ca.localho.st:443/cainfo
kubectl hlf ca register --name=ord-ca --user=orderer --secret=ordererpw \
    --type=orderer --enroll-id enroll --enroll-secret=enrollpw --mspid=OrdererMSP --ca-url="https://ord-ca.localho.st:443"
kubectl hlf ordnode create --image=$ORDERER_IMAGE --version=$ORDERER_VERSION \
    --storage-class=standard --enroll-id=orderer --mspid=OrdererMSP \
    --enroll-pw=ordererpw --capacity=2Gi --name=ord-node1 --ca-name=ord-ca.default \
    --hosts=orderer0-ord.localho.st --istio-port=443
kubectl wait --timeout=180s --for=condition=Running fabricorderernodes.hlf.kungfusoftware.es --all
kubectl get pods
openssl s_client -connect orderer0-ord.localho.st:443
Adım 5: Kullanıcı Kaydı
Bu adımda, orderer ve diğer organizasyonlar için kullanıcı kayıtları yapılarak ağ üzerindeki roller ve yetkiler tanımlanıyor.
Orderer:
# register
kubectl hlf ca register --name=ord-ca --user=admin --secret=adminpw \
    --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=OrdererMSP
# enroll
kubectl hlf ca enroll --name=ord-ca --namespace=default \
    --user=admin --secret=adminpw --mspid OrdererMSP \
    --ca-name tlsca  --output orderermsp.yaml
Org1:
# Kullanıcı Kaydı (Register)
kubectl hlf ca register --name=org1-ca --namespace=default --user=admin --secret=adminpw \
    --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org1MSP
# Kayıt (Enroll)
kubectl hlf ca enroll --name=org1-ca --namespace=default \
    --user=admin --secret=adminpw --mspid Org1MSP \
    --ca-name ca --output org1msp.yaml
Org2:
# Kullanıcı Kaydı (Register)
kubectl hlf ca register --name=org2-ca --namespace=default --user=admin --secret=adminpw \
    --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org2MSP
# Kayıt (Enroll)
kubectl hlf ca enroll --name=org2-ca --namespace=default \
    --user=admin --secret=adminpw --mspid Org2MSP \
    --ca-name ca --output org2msp.yaml
Org3:
# Kullanıcı Kaydı (Register)
kubectl hlf ca register --name=org3-ca --namespace=default --user=admin --secret=adminpw \
    --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org3MSP
# Kayıt (Enroll)
kubectl hlf ca enroll --name=org3-ca --namespace=default \
    --user=admin --secret=adminpw --mspid Org3MSP \
    --ca-name ca --output org3msp.yaml
Org4:
# Kullanıcı Kaydı (Register)
kubectl hlf ca register --name=org4-ca --namespace=default --user=admin --secret=adminpw \
    --type=admin --enroll-id enroll --enroll-secret=enrollpw --mspid=Org4MSP
# Kayıt (Enroll)
kubectl hlf ca enroll --name=org4-ca --namespace=default \
    --user=admin --secret=adminpw --mspid Org4MSP \
    --ca-name ca --output org4msp.yaml
Adım 6: Cüzdan Oluşturma
Bu adımda, MSP (Membership Service Provider) bilgilerini içeren bir cüzdan (wallet) oluşturuluyor. Bu cüzdan, ağdaki çeşitli bileşenlerin kimlik bilgilerini güvenli bir şekilde saklar.
# Secret Oluşturma
kubectl create secret generic wallet --namespace=default \
        --from-file=org1msp.yaml=$PWD/org1msp.yaml \
        --from-file=org2msp.yaml=$PWD/org2msp.yaml \
        --from-file=org3msp.yaml=$PWD/org3msp.yaml \
        --from-file=org4msp.yaml=$PWD/org4msp.yaml \
        --from-file=orderermsp.yaml=$PWD/orderermsp.yaml
Adım 7: Ana Kanalın Oluşturulması (demo kanalı)
Ağın ana iletişim kanalı, demo kanalı oluşturuluyor. Bu kanal, ağdaki tüm peerler ve ordererlar arasında iletişimi sağlar. Kanalın yapılandırması, ağın temel operasyonel parametrelerini belirler.
export PEER_ORG_SIGN_CERT=$(kubectl get fabriccas org1-ca -o=jsonpath='{.status.ca_cert}')
export PEER_ORG_TLS_CERT=$(kubectl get fabriccas org1-ca -o=jsonpath='{.status.tlsca_cert}')
export IDENT_8=$(printf "%8s" "")
export PEER_ORG_SIGN_CERT=$(kubectl get fabriccas org2-ca -o=jsonpath='{.status.ca_cert}')
export PEER_ORG_TLS_CERT=$(kubectl get fabriccas org2-ca -o=jsonpath='{.status.tlsca_cert}')
export IDENT_8=$(printf "%8s" "")
export PEER_ORG_SIGN_CERT=$(kubectl get fabriccas org3-ca -o=jsonpath='{.status.ca_cert}')
export PEER_ORG_TLS_CERT=$(kubectl get fabriccas org3-ca -o=jsonpath='{.status.tlsca_cert}')
export IDENT_8=$(printf "%8s" "")
export PEER_ORG_SIGN_CERT=$(kubectl get fabriccas org4-ca -o=jsonpath='{.status.ca_cert}')
export PEER_ORG_TLS_CERT=$(kubectl get fabriccas org4-ca -o=jsonpath='{.status.tlsca_cert}')
export IDENT_8=$(printf "%8s" "")
export ORDERER_TLS_CERT=$(kubectl get fabriccas ord-ca -o=jsonpath='{.status.tlsca_cert}' | sed -e "s/^/${IDENT_8}/" )
export ORDERER0_TLS_CERT=$(kubectl get fabricorderernodes ord-node1 -o=jsonpath='{.status.tlsCert}' | sed -e "s/^/        /" )
kubectl apply -f - <<EOF
apiVersion: hlf.kungfusoftware.es/v1alpha1
kind: FabricMainChannel
metadata:
  name: demo
spec:
  name: demo
  adminOrdererOrganizations:
    - mspID: OrdererMSP
  adminPeerOrganizations:
    - mspID: Org1MSP
    - mspID: Org2MSP
    - mspID: Org3MSP
    - mspID: Org4MSP
  channelConfig:
    application:
      acls: null
      capabilities:
        - V2_0
      policies: null
    capabilities:
      - V2_0
    orderer:
      batchSize:
        absoluteMaxBytes: 1048576
        maxMessageCount: 10
        preferredMaxBytes: 524288
      batchTimeout: 2s
      capabilities:
        - V2_0
      etcdRaft:
        options:
          electionTick: 10
          heartbeatTick: 1
          maxInflightBlocks: 5
          snapshotIntervalSize: 16777216
          tickInterval: 500ms
      ordererType: etcdraft
      policies: null
      state: STATE_NORMAL
    policies: null
  externalOrdererOrganizations: []
  peerOrganizations:
    - mspID: Org1MSP
      caName: "org1-ca"
      caNamespace: "default"
    - mspID: Org2MSP
      caName: "org2-ca"
      caNamespace: "default"
    - mspID: Org3MSP
      caName: "org3-ca"
      caNamespace: "default"
    - mspID: Org4MSP
      caName: "org4-ca"
      caNamespace: "default"
  identities:
    OrdererMSP:
      secretKey: orderermsp.yaml
      secretName: wallet
      secretNamespace: default
    Org1MSP:
      secretKey: org1msp.yaml
      secretName: wallet
      secretNamespace: default
    Org2MSP:
      secretKey: org2msp.yaml
      secretName: wallet
      secretNamespace: default
    Org3MSP:
      secretKey: org3msp.yaml
      secretName: wallet
      secretNamespace: default
    Org4MSP:
      secretKey: org4msp.yaml
      secretName: wallet
      secretNamespace: default
  externalPeerOrganizations: []
  ordererOrganizations:
    - caName: "ord-ca"
      caNamespace: "default"
      externalOrderersToJoin:
        - host: ord-node1
          port: 7053
      mspID: OrdererMSP
      ordererEndpoints:
        - ord-node1:7050
      orderersToJoin: []
  orderers:
    - host: ord-node1
      port: 7050
      tlsCert: |-
${ORDERER0_TLS_CERT}
EOF
Kanalın oluşturulduğu kontrol edilir:
kubectl get fabricmainchannels.hlf.kungfusoftware.es
Adım 8: Takipçi Kanalların Oluşturulması
Her organizasyon için takipçi kanallar oluşturuluyor. Bu kanallar, ana demo kanalına bağlı olarak çalışır ve organizasyonların kendi peerlerine özel işlemleri yönetmesine olanak tanır.
Org1:
# org1 için
export IDENT_8=$(printf "%8s" "")
export ORDERER0_TLS_CERT=$(kubectl get fabricorderernodes ord-node1 -o=jsonpath='{.status.tlsCert}' | sed -e "s/^/${IDENT_8}/" )
kubectl apply -f - <<EOF
apiVersion: hlf.kungfusoftware.es/v1alpha1
kind: FabricFollowerChannel
metadata:
  name: demo-org1msp
spec:
  anchorPeers:
    - host: org1-peer0.default
      port: 7051
  hlfIdentity:
    secretKey: org1msp.yaml
    secretName: wallet
    secretNamespace: default
  mspId: Org1MSP
  name: demo
  externalPeersToJoin: []
  orderers:
    - certificate: |
${ORDERER0_TLS_CERT}
      url: grpcs://ord-node1.default:7050
  peersToJoin:
    - name: org1-peer0
      namespace: default
EOF
Org2:
# org2 için
export IDENT_8=$(printf "%8s" "")
export ORDERER0_TLS_CERT=$(kubectl get fabricorderernodes ord-node1 -o=jsonpath='{.status.tlsCert}' | sed -e "s/^/${IDENT_8}/" )
kubectl apply -f - <<EOF
apiVersion: hlf.kungfusoftware.es/v1alpha1
kind: FabricFollowerChannel
metadata:
  name: demo-org2msp
spec:
  anchorPeers:
    - host: org2-peer0.default
      port: 7051
  hlfIdentity:
    secretKey: org2msp.yaml
    secretName: wallet
    secretNamespace: default
  mspId: Org2MSP
  name: demo
  externalPeersToJoin: []
  orderers:
    - certificate: |
${ORDERER0_TLS_CERT}
      url: grpcs://ord-node1.default:7050
  peersToJoin:
    - name: org2-peer0
      namespace: default
EOF
Org3:
# org3 için
export IDENT_8=$(printf "%8s" "")
export ORDERER0_TLS_CERT=$(kubectl get fabricorderernodes ord-node1 -o=jsonpath='{.status.tlsCert}' | sed -e "s/^/${IDENT_8}/" )
kubectl apply -f - <<EOF
apiVersion: hlf.kungfusoftware.es/v1alpha1
kind: FabricFollowerChannel
metadata:
  name: demo-org3msp
spec:
  anchorPeers:
    - host: org3-peer0.default
      port: 7051
  hlfIdentity:
    secretKey: org3msp.yaml
    secretName: wallet
    secretNamespace: default
  mspId: Org3MSP
  name: demo
  externalPeersToJoin: []
  orderers:
    - certificate: |
${ORDERER0_TLS_CERT}
      url: grpcs://ord-node1.default:7050
  peersToJoin:
    - name: org3-peer0
      namespace: default
EOF
Org4:
# org4 için
export IDENT_8=$(printf "%8s" "")
export ORDERER0_TLS_CERT=$(kubectl get fabricorderernodes ord-node1 -o=jsonpath='{.status.tlsCert}' | sed -e "s/^/${IDENT_8}/" )
kubectl apply -f - <<EOF
apiVersion: hlf.kungfusoftware.es/v1alpha1
kind: FabricFollowerChannel
metadata:
  name: demo-org4msp
spec:
  anchorPeers:
    - host: org4-peer0.default
      port: 7051
  hlfIdentity:
    secretKey: org4msp.yaml
    secretName: wallet
    secretNamespace: default
  mspId: Org4MSP
  name: demo
  externalPeersToJoin: []
  orderers:
    - certificate: |
${ORDERER0_TLS_CERT}
      url: grpcs://ord-node1.default:7050
  peersToJoin:
    - name: org4-peer0
      namespace: default
EOF
Peer'ların kanala dahil olduğu kontrol edilir:
kubectl get fabricfollowerchannels.hlf.kungfusoftware.es
Adım 9: Ağ Yapılandırmasının İncelenmesi
Burada, oluşturulan ağın genel yapılandırması inceleniyor ve network.yaml dosyası oluşturuluyor. Bu dosya, ağın yapılandırma detaylarını içerir.
kubectl hlf inspect --output network.yaml -o Org1MSP -o Org2MSP -o Org3MSP -o Org4MSP -o OrdererMSP
Adım 10: CA Kayıt İşlemleri
Bu adımda, her organizasyon için CA'ya (Certificate Authority) admin kullanıcıları kaydediliyor. Bu işlem, ağın güvenliğinin temelini oluşturur.
kubectl hlf ca register --name=org1-ca --user=admin --secret=adminpw --type=admin \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org1MSP \
 --attributes="isAdmin=true:ecert,role=isAdmin:ecert"
kubectl hlf ca register --name=org2-ca --user=admin --secret=adminpw --type=admin \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org2MSP \
 --attributes="isAdmin=true:ecert,role=isAdmin:ecert"
kubectl hlf ca register --name=org3-ca --user=admin --secret=adminpw --type=admin \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org3MSP \
 --attributes="isAdmin=true:ecert,role=isAdmin:ecert"
kubectl hlf ca register --name=org4-ca --user=admin --secret=adminpw --type=admin \
 --enroll-id enroll --enroll-secret=enrollpw --mspid Org4MSP \
 --attributes="isAdmin=true:ecert,role=isAdmin:ecert"
Adım 11: Kullanıcıların Kaydedilmesi
Her organizasyon için admin kullanıcıları, CA üzerinden kaydediliyor. Bu kullanıcılar, ağ üzerinde yönetici rollerini üstlenir.
kubectl hlf ca enroll --name=org1-ca --user=admin --secret=adminpw --mspid Org1MSP \
        --ca-name ca  --output peer-org1.yaml
kubectl hlf ca enroll --name=org2-ca --user=admin --secret=adminpw --mspid Org2MSP \
        --ca-name ca  --output peer-org2.yaml
kubectl hlf ca enroll --name=org3-ca --user=admin --secret=adminpw --mspid Org3MSP \
        --ca-name ca  --output peer-org3.yaml
kubectl hlf ca enroll --name=org4-ca --user=admin --secret=adminpw --mspid Org4MSP \
        --ca-name ca  --output peer-org4.yaml
Adım 12: Kullanıcıların Ağa Eklenmesi
Kaydedilen kullanıcılar, ağa ekleniyor. Bu işlem, kullanıcıların ağ üzerindeki rollerini ve yetkilerini etkinleştirir.
kubectl hlf utils adduser --userPath=peer-org1.yaml --config=network.yaml --username=admin --mspid=Org1MSP
kubectl hlf utils adduser --userPath=peer-org2.yaml --config=network.yaml --username=admin --mspid=Org2MSP
kubectl hlf utils adduser --userPath=peer-org3.yaml --config=network.yaml --username=admin --mspid=Org3MSP
kubectl hlf utils adduser --userPath=peer-org4.yaml --config=network.yaml --username=admin --mspid=Org4MSP
Adım 13: Chaincode Paketleme ve Yükleme
Bu adımda, ağ üzerinde çalıştırılacak olan chaincode (akıllı kontrat) paketleniyor ve peerlere yükleniyor.
rm code.tar.gz chaincode.tgz
export CHAINCODE_NAME=test
export CHAINCODE_LABEL=test
cat << METADATA-EOF > "metadata.json"
{
    "type": "ccaas",
    "label": "${CHAINCODE_LABEL}"
}
METADATA-EOF
cat > "connection.json" <<CONN_EOF
{
  "address": "${CHAINCODE_NAME}:7052",
  "dial_timeout": "10s",
  "tls_required": false
}
CONN_EOF
tar cfz code.tar.gz connection.json
tar cfz chaincode.tgz metadata.json code.tar.gz
export PACKAGE_ID=$(kubectl hlf chaincode calculatepackageid --path=chaincode.tgz --language=node --label=$CHAINCODE_LABEL)
echo "PACKAGE_ID=$PACKAGE_ID"
kubectl hlf chaincode install --path=./chaincode.tgz \
    --config=network.yaml --language=golang --label=$CHAINCODE_LABEL --user=admin --peer=org1-peer0.default
kubectl hlf chaincode install --path=./chaincode.tgz \
    --config=network.yaml --language=golang --label=$CHAINCODE_LABEL --user=admin --peer=org2-peer0.default
kubectl hlf chaincode install --path=./chaincode.tgz \
    --config=network.yaml --language=golang --label=$CHAINCODE_LABEL --user=admin --peer=org3-peer0.default
kubectl hlf chaincode install --path=./chaincode.tgz \
    --config=network.yaml --language=golang --label=$CHAINCODE_LABEL --user=admin --peer=org4-peer0.default
kubectl hlf externalchaincode sync --image=docker-hesap-adi/image:latest \
    --name=$CHAINCODE_NAME \
    --namespace=default \
    --package-id=$PACKAGE_ID \
    --tls-required=false \
    --replicas=1
kubectl hlf chaincode queryinstalled --config=network.yaml --user=admin --peer=org1-peer0.default
kubectl hlf chaincode queryinstalled --config=network.yaml --user=admin --peer=org2-peer0.default
kubectl hlf chaincode queryinstalled --config=network.yaml --user=admin --peer=org3-peer0.default
kubectl hlf chaincode queryinstalled --config=network.yaml --user=admin --peer=org4-peer0.default
Adım 13: Chaincode Onayı
Her organizasyon için chaincode'u onaylayın:
export SEQUENCE=1
export VERSION="1.0"
kubectl hlf chaincode approveformyorg --config=network.yaml --user=admin --peer=org1-peer0.default \
    --package-id=$PACKAGE_ID \
    --version "$VERSION" --sequence "$SEQUENCE" --name=test \
    --policy="OR('Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member', 'Org4MSP.member')" --channel=demo
kubectl hlf chaincode approveformyorg --config=network.yaml --user=admin --peer=org2-peer0.default \
    --package-id=$PACKAGE_ID \
    --version "$VERSION" --sequence "$SEQUENCE" --name=test \
    --policy="OR('Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member', 'Org4MSP.member')" --channel=demo
kubectl hlf chaincode approveformyorg --config=network.yaml --user=admin --peer=org3-peer0.default \
    --package-id=$PACKAGE_ID \
    --version "$VERSION" --sequence "$SEQUENCE" --name=test \
    --policy="OR('Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member', 'Org4MSP.member')" --channel=demo
kubectl hlf chaincode approveformyorg --config=network.yaml --user=admin --peer=org4-peer0.default \
    --package-id=$PACKAGE_ID \
    --version "$VERSION" --sequence "$SEQUENCE" --name=test \
    --policy="OR('Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member', 'Org4MSP.member')" --channel=demo
Adım 14: Chaincode Commit İşlemi
Chaincode, ağdaki her organizasyon tarafından onaylanıyor ve ardından ana kanala commit ediliyor. Bu, chaincode'un ağ üzerinde aktif hale gelmesini sağlar.
kubectl hlf chaincode commit --config=network.yaml --user=admin --mspid=Org1MSP \
    --version "$VERSION" --sequence "$SEQUENCE" --name=test \
    --policy="OR('Org1MSP.member', 'Org2MSP.member', 'Org3MSP.member', 'Org4MSP.member')" --channel=demo
 

 
    
Top comments (0)