جدول محتوا
در این مقاله به آموزش ساخت اولین شبکه Hyperledger Fabric خواهیم پرداخت. در ابتدا باید بگوییم که Hyperledger Fabric یکی از پیادهسازیهای بلاک چین است و برای استفاده در زمینه کسبوکار در نظر گرفته شده است، جایی که گروهی از سازمانها به شبکه بلاک چین میپیوندند (هر سازمان گرههایی را در شبکه مشارکت میدهد).
به طور خلاصه باید بگوییم که اساسا، بلاک چین یک لیست رمزنگاری مرتبط با بلوک های داده است که پس از یک اجماع خاص، غیر قابل تغییر و غیرمتمرکز می باشد. در Fabric، Orderer اتفاق نظر است، Peer داده های Blockchain را حفظ می کند.
برای آشنایی با آموزش برنامه نویسی بلاک چین پکیج آموزش برنامه نویسی بلاک چین را ملاحظه نمایید.
قرارداد هوشمند (Chaincode) برنامهای است که بر اساس منطقهای تجاری خاصی با بلاک چین در تعامل است . در Fabric، Peer گره ای است که آن را اجرا می کند.
اگر چندان با بلاک چین آشنایی ندارید، توصیه می کنیم که مقاله برنامه نویسی بلاک چین چیست؟ را مطالعه فرمایید.
Hyperledger Fabric – جریان تراکنش
در اینجا جریان تراکنش ساده شده در Hyperledger Fabric آمده است (چگونه یک تراکنش ارسال و در دفتر کل بلاک چین نوشته می شود، فرض می کنیم هیچ خطایی وجود ندارد):
- مشتری یک درخواست تراکنش به Backend با Hyperledger Fabric SDK ارسال می کند . (Client → SDK)
- Backend یک پیشنهاد تراکنش را تشکیل می دهد و آن را به Peer Node ارسال می کند. (SDK → Peer)
- گره همتا قرارداد هوشمند ( کد زنجیره ای ) را اجرا می کند و نتیجه را به Backend ارسال می کند. (همتا → SDK)
- Backend تراکنش را به Node Orderer ارسال می کند. (SDK → سفارش دهنده)
- گره سفارشدهنده تعدادی از تراکنشها را جمعآوری میکند (یا تایم اوت را آغاز میکند) و سفارشها را برای آن تراکنشها. سپس، آن تراکنش ها را در یک Block بسته بندی می کند و به گره های Peer پخش می شود . (سفارش → همتا)
- گره های همتا تراکنش را تأیید می کنند ، تراکنش را در دفتر کل بلاک چین انجام می دهند و اعلان تعهد معامله را به Backend ارسال می کنند. (همتا → SDK)
- Backend اعلان موفقیت را برای مشتری ارسال می کند. (SDK → Client)
به طور کلی، جریان: Client → SDK → Peer → SDK → Orderer → Peer → SDK → Client. مسیر تقریبا طولانیه…
بیشتر بخوانید: آموزش Hyperledger Fabric و ساخت بلاکچین خصوصی با نصب Hyperledger Fabric
1. نصب پیش نیازها
ما در این آموزش از Hyperledger Fabric v1.4 استفاده می کنیم.
اول از همه، می توانید پیش نیازها را با دنبال کردن دستورالعمل های رسمی نصب کنید:
- پیش نیازها را نصب کنید.
- نمونه ها، برنامه ها و تصاویر داکر را از Hyperledger Fabric نصب کنید.
2. ساختار فایل ها
در این آموزش قسمت 1 قصد معرفی فایل ها در BYFN را داریم. قصد داریم تمامی فایل ها را در 2 قسمت معرفی کنیم. سپس چند گام عملی را ادامه می دهیم.
بیایید به فهرست BYFN برویم (* فرض میکنیم که قسمت پیشنیاز را تمام کنید، باید همه فایلها و دایرکتوریهای مورد نیاز را داشته باشید):
cd fabric-samples/first-network
> 2.1 docker-compose-cli.yaml
برای توسعه اپلیکیشن بلاک چین، ابتدا باید یک شبکه بلاک چین داشته باشیم، درست است؟ این فایل مربوط به راه اندازی شبکه است.
این یک فایل کامپوزی Docker است که شبکه Fabric (مجازی) شما را تعریف میکند ، مانند گرههای موجود در شبکه، نام دامنه استفاده داخلی آنها و غیره.
در زیر آمده استdocker-compose-cli.yaml
networks:
byfn:
services:
orderer.example.com:
extends:
file: base/docker-compose-base.yaml
service: orderer.example.com
container_name: orderer.example.com
networks:
- byfn
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends:
file: base/docker-compose-base.yaml
service: peer0.org1.example.com
networks:
- byfn
peer1.org1.example.com:
container_name: peer1.org1.example.com
extends:
file: base/docker-compose-base.yaml
service: peer1.org1.example.com
networks:
- byfn
peer0.org2.example.com:
container_name: peer0.org2.example.com
extends:
file: base/docker-compose-base.yaml
service: peer0.org2.example.com
networks:
- byfn
peer1.org2.example.com:
container_name: peer1.org2.example.com
extends:
file: base/docker-compose-base.yaml
service: peer1.org2.example.com
networks:
- byfn
cli:
container_name: cli
image: hyperledger/fabric-tools:$IMAGE_TAG
tty: true
stdin_open: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- FABRIC_LOGGING_SPEC=INFO
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash
volumes:
- /var/run/:/host/var/run/
- ./../chaincode/:/opt/gopath/src/github.com/chaincode
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
depends_on:
- orderer.example.com
- peer0.org1.example.com
- peer1.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
networks:
- byfn
خط 1 نام شبکه داکر ما را تعریف می کند ، به طوری که گره های ما می توانند “مکانی” برای صحبت با یکدیگر داشته باشند. و این “مکان” byfn نامگذاری شده است .
خط 4 لیستی از گره ها را در شبکه تعریف می کند.
خط 5 یک گره را در شبکه ما تعریف می کند – Orderer ، که به تصمیم گیری در مورد نحوه ترتیب تراکنش ها و بلاک ها در شبکه بلاک چین کمک می کند.
در خط 6 مشاهده می کنید که یک extension وجود دارد که برای استفاده مجدد از یک فایل کامپوزی پایه Docker دیگر است.
خط 9 نام این گره را در شبکه تعریف می کند. در نهایت خط 10 مشخص می کند که این گره به کدام شبکه تعلق دارد.
و خطوط 13 تا 43 مشابه هستند، اما آنها نوع دیگری از گره ها را در شبکه ما تعریف می کنند – Peer ، که عبارت است از نگهداری دفتر کل بلاک چین، اعتبارسنجی تراکنش، اجرای قرارداد هوشمند (کد زنجیره ای) در شبکه بلاک چین .
خط 45 cli، یعنی رابط خط فرمان را برای کنترل (ارسال دستورات به) گره های شبکه تعریف می کند . خط 47 تصویر این cli را نشان می دهد، درست مانند تصویر ویندوز 10 برای ماشین مجازی ویندوز 10.
خط 48 tty برای اطمینان از اینکه cli به کار خود ادامه می دهد است.
خط 50 ما در حال تعریف برخی از متغیرهای محیطی هستیم که توسط برخی برنامه ها برای cli استفاده می شود، مانند GOPATH – جایی که کتابخانه go در آن قرار دارد.
خط 62 مشخص می کند که هنگام دسترسی به cli مکان پیش فرض چیست.
خط 63 مشخص می کند که وقتی cli شروع می شود، این دستور لینوکس را به طور خودکار اجرا می کند.
خط 64 نقاط اتصال را برای cli تعریف می کند. یعنی، ما برخی از دایرکتوری ها را در ماشین محلی خود، احتمالاً لینوکس شما، به برخی دایرکتوری ها در cli (که یک ماشین مجازی است، به نام Container در Docker) ثبت می کنیم .
خط 70 مشخص می کند که cli به چند کانتینر دیگر بستگی دارد.
base/docker-compose-base.yaml 2.2
اکنون به base/docker-compose-base.yaml نگاه می کنیم:
services:
orderer.example.com:
container_name: orderer.example.com
image: hyperledger/fabric-orderer:$IMAGE_TAG
environment:
- FABRIC_LOGGING_SPEC=INFO
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
- ORDERER_GENERAL_GENESISMETHOD=file
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
# enabled TLS
- ORDERER_GENERAL_TLS_ENABLED=true
- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
- ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1
- ORDERER_KAFKA_VERBOSE=true
working_dir: /opt/gopath/src/github.com/hyperledger/fabric
command: orderer
volumes:
- ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
- orderer.example.com:/var/hyperledger/production/orderer
ports:
- 7050:7050
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer0.org1.example.com
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
- peer0.org1.example.com:/var/hyperledger/production
ports:
- 7051:7051
- 7053:7053
peer1.org1.example.com:
container_name: peer1.org1.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer1.org1.example.com
- CORE_PEER_ADDRESS=peer1.org1.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
- peer1.org1.example.com:/var/hyperledger/production
ports:
- 8051:7051
- 8053:7053
peer0.org2.example.com:
container_name: peer0.org2.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer0.org2.example.com
- CORE_PEER_ADDRESS=peer0.org2.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051
- CORE_PEER_LOCALMSPID=Org2MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
- peer0.org2.example.com:/var/hyperledger/production
ports:
- 9051:7051
- 9053:7053
peer1.org2.example.com:
container_name: peer1.org2.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer1.org2.example.com
- CORE_PEER_ADDRESS=peer1.org2.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
- CORE_PEER_LOCALMSPID=Org2MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
- peer1.org2.example.com:/var/hyperledger/production
ports:
- 10051:7051
- 10053:7053
فایل پایه مشابه docker-compose-cli.yaml است.
خطوط 3 تا 28 یک گره الگو به نام orderer.example.com را تعریف می کنند و docker-compose-cli.yaml آن را گسترش می دهد و برخی تنظیمات اضافی را بر اساس این الگو اضافه می کند.
خط 5 مشخص می کند که این گره از کدام تصویر استفاده می کند. در مورد ما، گره از تصویری از Hyperledger official – hyperledger/fabric-orderer استفاده می کند. آن $IMAGE_TAG نسخه تصویر است، مانند 1.4.
سایر کلمات کلیدی و تنظیمات مشابه docker-compose-cli.yaml هستند. هدف از داشتن یک فایل پایه فقط گروه بندی پیکربندی های رایج در یک فایل پایه برای قابل استفاده مجدد است.
توجه داشته باشید که در خط 32، یک کلمه کلیدی extends نیز وجود دارد، یعنی دوباره برای گسترش یا استفاده مجدد از یک فایل پایه دیگر، base/peer-base.yaml، که به سرعت نگاهی به آن خواهیم انداخت.
2.3 base/peer-base.yaml
services:
peer-base:
image: hyperledger/fabric-peer:$IMAGE_TAG
environment:
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
# the following setting starts chaincode containers on the same
# bridge network as the peers
# https://docs.docker.com/compose/networking/
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn
- FABRIC_LOGGING_SPEC=INFO
#- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false
- CORE_PEER_PROFILE_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: peer node start
سینتکس این فایل کم و بیش مشابه docker-compose-cli.yaml و base/peer-base.yaml است. حالا شاید سوال پیش بیاید، چرا ما به این فایل های پایه نیاز داریم؟ به دلیل قابلیت استفاده مجدد، اگرچه اجباری نیست.
2.4 channel-artifacts/
توجه داشته باشید که این دایرکتوری در حال حاضر خالی است. این دایرکتوری برای ذخیره برخی از تراکنش های پیکربندی و یک بلوک پیدایش استفاده خواهد شد.
2.5 crypto-config.yaml
این فایلی برای تعریف گواهینامه ها و کلیدهایی است که باید در شبکه تولید و استفاده شوند.
در Hyperledger Fabric مجموعه ای از گواهینامه ها و کلیدها برای کاربران و گره ها داریم. برای مثال، Peer باید مجموعهای از گواهیها و کلیدها را برای انجام تایید اثبات خود به عنوان عضوی در شبکه بلاک چین، انجام امضا و غیره داشته باشد.
# ---------------------------------------------------------------------------
# "OrdererOrgs" - Definition of organizations managing orderer nodes
# ---------------------------------------------------------------------------
OrdererOrgs:
# ---------------------------------------------------------------------------
# Orderer
# ---------------------------------------------------------------------------
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs:
# ---------------------------------------------------------------------------
# Org1
# ---------------------------------------------------------------------------
- Name: Org1
Domain: org1.example.com
EnableNodeOUs: true
Template:
Count: 2
# ---------------------------------------------------------------------------
# "Users"
# ---------------------------------------------------------------------------
# Count: The number of user accounts _in addition_ to Admin
# ---------------------------------------------------------------------------
Users:
Count: 1
# ---------------------------------------------------------------------------
# Org2: See "Org1" for full specification
# ---------------------------------------------------------------------------
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
خط 4 OrdererOrgs گواهینامه ها و تولید کلید را برای سازمان مربوط به گره های Orderer تعریف می کند.
Line 22 Template > Count تعداد گره ها را در Org1 (سازمان 1) مشخص می کند، در حالی که 29 Users > Count تعداد کاربران را در Org1 مشخص می کند.
2.6 configtx.yaml
این فایلی برای تعریف تنظیمات شبکه بلاک چین است، اگرچه بعداً می توان آنها را به روز کرد.
این یک فایل طولانی است، برای دیدن فایل به این صفحه مراجعه کنید.
برخی از بخشهای این فایل را بررسی میکنیم:
- &Org1
Name: Org1MSP
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')"
Writers:
Type: Signature
Rule: "OR('Org1MSP.admin', 'Org1MSP.client')"
Admins:
Type: Signature
Rule: "OR('Org1MSP.admin')"
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
در اینجا، ما یک سازمان را تعریف می کنیم – Org1 در شبکه بلاک چین، همراه با برخی از سیاست ها.
خط 15 Anchor Peer of Org1 را مشخص میکند، که نقش ویژهای از گره همتا برای عمل به عنوان نماینده برای صحبت با سازمانهای دیگر است.
خط 4 محل گواهینامه ها و کلیدهای org1 را مشخص می کند.
Orderer: &OrdererDefaults
OrdererType: solo
Addresses:
- orderer.example.com:7050
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 99 MB
PreferredMaxBytes: 512 KB
در اینجا، ما تنظیمات مربوط به نحوه تشکیل یک بلوک برای بلاک چین را تعریف می کنیم، مانند MaxMessageCount، که تعداد تراکنش ها در هر بلوک است.
بنابراین، به طور کلی، سه سازمان وجود دارد، OrdererOrg، Org1، و Org2.
2.7 byfn.sh
این یک فایل اسکریپت مناسب توسط Hyperledger Fabric برای راه اندازی شبکه است.
ما از این روش برای نمایش شبکه استفاده می کنیم:
./byfn.sh up
اساساً موارد زیر را انجام می دهد:
- گواهی ها و کلیدها را بر اساس crypto-config.yaml تولید کنید.
- آرتیفکت های کانال را بر اساس configtx.yaml ایجاد کنید، خروجی ها در channel-artifacts ذخیره می شوند/
- شبکه Fabric (مجازی) را بر اساس docker-compose-cli.yaml مطرح کنید.
- کانال Hyperledger Fabric، mychannel ایجاد کنید.
- به گره های Peer در کانال بپیوندید.
- قرارداد هوشمند (Chaincode) را در گره های همتا نصب کنید.
- قرارداد هوشمند (Chaincode) را در یکی از گره های Peer نمونه سازی کنید
Channel in Hyperledger Fabric یک گروه خصوصی در یک شبکه بلاک چین است. و هر شبکه بلاک چین میتواند شامل چندین کانال باشد، که در آن هر کانال مستقل از کانالهای دیگر است، دفتر کل خود را دارد و شامل (چندین) سازمان (های) است.
2.8 scripts/script.sh & scripts/utils.sh
scripts/script.sh اسکریپتی است که توسط byfn.sh برای مراحل 4 تا 7 بالا استفاده می شود.
scripts/utils.sh اسکریپتی است که توسط scripts/script.sh استفاده می شود. در ادامه برخی از توابع کاربردی رایج مانند نصب قرارداد هوشمند (Chaincode)
را مطرح خواهیم کرد.
3. شبکه را بیاورید
ادامه مراحل را ببینید:
3.1 به فهرست BYFN بروید
cd fabric-samples/first-network
3.2 شبکه را بالا بیاورید
./byfn.sh up
س از اجرای این اسکریپت، ممکن است لازم باشد یک لحظه صبر کنید…
همچنین به یاد داشته باشید که Docker را قبل از اجرای دستور بالا راه اندازی کنید.
*در صورت ایجاد اشتباه، می توانید دستورات زیر را اجرا کنید تا شبکه را خاموش کنید و دوباره بالا بیاورید (و مراقب باشید):
./byfn.sh پایین
./byfn.sh بالا
کاری که انجام می دهد:
- تولید گواهینامه ها و کلیدها بر اساسcrypto-config.yaml
- ایجاد مصنوعات کانال بر اساس ، خروجی ها در channel-artifacts/configtx.yaml ذخیره می شوند.
- شبکه Fabric (مجازی) را بر اساسdocker-compose-cli.yaml
- کانال Hyperledger Fabric، mychannel ایجاد کنید.
- به گره های Peer در کانال بپیوندید.
- قرارداد هوشمند (Chaincode) را در گره های همتا نصب کنید.
- قرارداد هوشمند (Chaincode) را در یکی از گره های Peer نمونه سازی کنید.
پس از اتمام byfn.sh ، همچنین باید متوجه شوید که فایلهایی در channel-artifacts/ وجود دارد .
و اگر دستور “docker ps” را اجرا کنید، باید ببینید که چند کانتینر در حال اجرا وجود دارد که همان گره ها در شبکه بلاک چین هستند.
4. تأیید
چگونه می توانیم تأیید کنیم که شبکه فعال است؟
4.1 به Cli دسترسی پیدا کنید
یک Cli Docker Container وجود دارد که به طور خودکار ایجاد می شود، این یک رابط خط فرمان برای کنترل گره ها است .
یک Cli Docker Container وجود دارد که به طور خودکار ایجاد می شود، این یک رابط خط فرمان برای کنترل گره ها است .
بیایید به cli دسترسی پیدا کنیم:
docker exec -it cli bash
سپس، متغیرهای محیطی که توسط برخی از برنامه ها استفاده می شود را تنظیم کنید :
صادرات CHANNEL_NAME=صادرات کانال من
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp_ADDDRESS=PEER
org1.example.com:7051
صادرات CORE_PEER_LOCALMSPID="Org1MSP"
صادرات CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.exaer.1. .com/tls/ca.crt
شما فقط می توانید همه آنها را کپی کنید، سپس در ترمینال خود قرار دهید و “Enter” را فشار دهید.
برای تأیید، ما یک معامله انجام می دهیم. بیایید موجودی حساب a را بررسی کنیم:
جستار کد زنجیره ای همتا -C mychannel -n mycc -c '{"Args":["query","a"]}'
شما باید 90 را ببینید . اکنون 10 دلار را از a به b منتقل می کنیم :
کد زنجیره ای همتا فراخوانی -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example. com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles /opt/gopath/src/github.com/hyperledger/fabric /peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses peer0.org2.example.com:7051 --tlsRootCertFiles /opt/gopath/src/ github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"Args":["invoke","a ""b"،"10"]}'
سپس، دوباره موجودی حساب a را بررسی می کنیم:
جستار کد زنجیره ای همتا -C mychannel -n mycc -c '{"Args":["query","a"]}'
شما باید 80 را ببینید (90 – 10 = 80). شبکه بلاک چین در حال کار است!
حالا از cil خارج شده و شبکه را کم کنید:
خروج
./byfn.sh پایین
بعداً، برای توسعه قرارداد هوشمند (Chaincode)، میتوانیم از این BYFN برای آزمایش عملکردها استفاده کنیم. همچنین میتوانیم از چنین شبکه مجازی Docker استفاده نماییم.