این یک آموزش گام به گام برای بهروزرسانی تنظیمات کانال در Hyperledger Fabric است . این مراحل با استفاده از Hyperledger Fabric “Build Your First Network” (BYFN) نشان داده شده است . ما از Hyperledger Fabric v1.4 استفاده می کنیم .
اگر نمی دانید چگونه یک BYFN راه اندازی کنید نگران نباشید، ما مراحل این آموزش را ارائه خواهیم داد.
channel in Hyperledger Fabric یک گروه خصوصی در یک شبکه بلاک چین است. و هر شبکه بلاک چین میتواند شامل چندین کانال باشد، که در آن هر کانال مستقل از کانالهای دیگر است، دفتر کل خود را دارد و شامل (چندین) سازمان (های) است.
هر کانال مستقل است، بنابراین تنظیمات مستقلی برای هر کانال تنظیم شده است، مانند برخی از خط مشی ها، تعداد تراکنش ها در یک بلوک، و … در این مقاله نحوه به روز رسانی تنظیمات یک کانال را نیز مورد بررسی قرار خواهیم داد.
پیشنهاد مطالعه: آموزش ساخت اولین شبکه Hyperledger Fabric
بررسی اجمالی بهروزرسانی تنظیمات کانال در Hyperledger Fabric
از آنجایی که مراحل بهروزرسانی پیکربندیهای کانال میتواند باعث از دست دادن راحت افراد شود (فایلهای زیادی وجود دارد!)، من مرور کلی مراحل را در اینجا فهرست میکنم:
راه اندازی یک BYFN (شبکه یلاک چین ما)
- واکشی تنظیمات کانال فعلی برای mychannel – خروجی:config_block.pbکه یک فایل بلوک است.
- config_block.pbتنظیمات را به یک فایل JSON قابل فهم تبدیل کنید – خروجی:config.json
- یک کپی از config.jsonبه ایجاد کنید modified_config.json، که ما آن را با توجه به آنچه باید به روز کنیم، اصلاح می کنیم.
- vim را برای اصلاح فایل JSON نصب کنید.
- تغییر تنظیمات درmodified_config.json
- تبدیل modified_config.jsonبه یک فایل بلوک – خروجی:modified_config.pb
- تبدیل config.jsonبه یک فایل بلوک – خروجی:config.pb
- تفاوت بین خروجی modified_config.pbو config.json– را محاسبه کنید:diff_config.pb
- diff_config.pbتنظیمات را به یک فایل JSON قابل فهم تبدیل کنید – خروجی:diff_config.json
- اضافه کردن متن پاکت در diff_config.json – خروجی:diff_config_envelope.json
- تبدیل diff_config_envelope.json به یک فایل بلوک – خروجی:diff_config_envelope.pb
- diff_config_envelope.pb به عنوان سرپرست OrdererOrg (بسته به خط مشی) ثبت نام کنید
- ارسال تراکنش به روز رسانی کانال
مرحله 1 – راه اندازی یک BYFN (شبکه بلاک چین ما)
ما در این آموزش از Hyperledger Fabric v1.4 استفاده می کنیم.
1.1 پیش نیازها را نصب کنید
اول از همه، می توانید پیش نیازها را با دنبال کردن دستورالعمل های رسمی نصب کنید:
- پیش نیازها را نصب کنید.
- نمونه ها، برنامه ها و تصاویر داکر را از Hyperledger Fabric نصب کنید.
1.2 به فهرست BYFN بروید
بیایید به فهرست BYFN برویم (* فرض میکنیم که قسمت پیشنیاز را تمام کردید، باید همه فایلها و دایرکتوریهای مورد نیاز را داشته باشید):
cd fabric-samples/first-network
1.3 شبکه را بالا بیاورید!
یک اسکریپت برای بالا آوردن راحت شبکه وجود دارد، فقط آن را اجرا کنید.
./byfn.sh up
پس از اجرای این اسکریپت، ممکن است لازم باشد یک لحظه صبر کنید…
همچنین به یاد داشته باشید که Docker را قبل از اجرای دستور بالا راه اندازی کنید.
*در صورت ایجاد اشتباه، می توانید دستورات زیر را اجرا کنید تا شبکه را خاموش کنید و دوباره بالا بیاورید (و مراقب باشید):
./byfn.sh down
./byfn.sh up
1.4به Cli دسترسی پیدا کنید
یک Cli Docker Container وجود دارد که به طور خودکار ایجاد می شود، این یک رابط خط فرمان برای کنترل گره ها است.
بیایید به cli دسترسی پیدا کنیم:
docker exec -it cli bash
سپس، متغیرهای محیطی که توسط برخی از برنامه ها استفاده می شود را تنظیم کنید:
export CHANNEL_NAME=mychannel
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
export CORE_PEER_LOCALMSPID="Org1MSP"
export 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
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
شما فقط می توانید همه آنها را کپی کنید، سپس در ترمینال خود قرار داده و “Enter” را فشار دهید.
مرحله 2 – واکشی تنظیمات کانال فعلی برای mychannel – خروجی: config_block.pb، که یک فایل بلوک است
peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
مرحله 3 – تنظیمات config_block.pb را به یک فایل JSON قابل فهم تبدیل کنید – خروجی: config.json
configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
مرحله 4 – یک کپی از config.json در modified_config.json تهیه کنید، که ما آن را مطابق با آنچه که باید به روز کنیم تغییر می دهیم.
cp config.json modified_config.json
مرحله 5 – vim را برای اصلاح فایل JSON نصب کنید
vim یک ابزار ویرایش معروف در لینوکس است.
sudo apt-get update -y
sudo apt-get install vim -y
مرحله 6 – تنظیمات را در modified_config.json تغییر دهید
vim modified_config.json
در این آموزش اجازه دهید BatchSize را ویرایش کنیم، یعنی تعداد تراکنش ها در یک بلوک (پیش فرض 10 txs/block است). ما میخواهیم max_message_count را اصلاح کنیم.
- برای شروع جستجوی متن، “/” را فشار دهید.
- “max_message_count” را تایپ کنید.
- سپس مکان نما شما باید در ابتدای متن “max_message_count” قرار گیرد.
"values": {
"BatchSize": {
"mod_policy": "Admins",
"value": {
"absolute_max_bytes": 103809024,
"max_message_count": 10,
"preferred_max_bytes": 524288
},
"version": "0"
}
به متن های بالا توجه کنید:
اکنون برای وارد کردن حالت درج در vim، “i” را فشار دهید (بنابراین می توانیم ویرایش را شروع کنیم)، پس از فشار دادن، باید مشاهده کنید که “– Insert –” در پایین سمت چپ ترمینال وجود دارد.
مکان نما خود را روی “10” قرار دهید (خط 6 بالا)
آن را از “10” به “11” تغییر دهید:
"values": {
"BatchSize": {
"mod_policy": "Admins",
"value": {
"absolute_max_bytes": 103809024,
"max_message_count": 11,
"preferred_max_bytes": 524288
},
"version": "0"
},
به خط 6 توجه کنید. آیا متون مشابهی داریم؟ ما فقط تعداد تراکنش های هر بلوک را از 10 به 11 تغییر می دهیم.
پیشنهاد مطالعه: SDK پایتون در Hyperledger Fabric
نکات (اختیاری در این آموزش)
به طور کلی، افزایش این عدد می تواند منجر به توان عملیاتی بالاتر (در TPS، تراکنش در هر ثانیه) شود، اما ممکن است بیش از حد منجر به تاخیر شود. ما از 100 استفاده میکنیم (شاید لازم باشد “absolute_max_bytes”، “preferre_max_bytes”، برخی از تنظیمات کافکا را در صورت وجود تنظیم کنید و زمان انتشار را مسدود کنید). در صورتی که ماشین های بسیار قدرتمندی دارید، این تعداد می تواند حتی بزرگتر باشد. ما میتوانیم در تست بارگذاری خود به بیش از 2xxx TPS برسیم (GOLang Chaincode با عملیاتهای اساسی getState() و putState() و با شبکه LevelDB، v1.4).
به خاطر داشته باشید که تست بار/عملکرد را خودتان انجام دهید تا مورد تولید را تأیید کنید.
پس، برای خروج از حالت درج vim، “esc” را فشار دهید
.”shift + :” را فشار دهید، “wq!” را تایپ کنید و “enter” را فشار دهید. اکنون باید vim را ترک کنید و اصلاحات ذخیره می شود.
مرحله 7 – تبدیل modified_config.json به یک فایل بلوک – خروجی: modified_config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
مرحله 8 – تبدیل config.json به یک فایل بلوک – خروجی: config.pb
configtxlator proto_encode --input config.json --type common.Config --output config.pb
مرحله 9 – تفاوت بین modified_config.pb و config.pb را محاسبه کنید – خروجی: diff_config.pb
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output diff_config.pb
مرحله 10 – پیکربندیهای diff_config.pb را به یک فایل JSON قابل فهم تبدیل کنید – خروجی: diff_config.json
configtxlator proto_decode --input diff_config.pb --type common.ConfigUpdate | jq . > diff_config.json
مرحله 11 – اضافه کردن متن پاکت در diff_config.json – خروجی: diff_config_envelope.json
echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat diff_config.json)'}}}' | jq . > diff_config_envelope.json
مرحله 12 – تبدیل diff_config_envelope.json به یک فایل بلوک – خروجی: diff_config_envelope.pb
configtxlator proto_encode --input diff_config_envelope.json --type common.Envelope --output diff_config_envelope.pb
مرحله 13 – diff_config_envelope.pb را به عنوان مدیر OrdererOrg امضا کنید (بسته به خط مشی)
در مرحله 1، در زیر «دسترسی به Cli»، cli ما Peer0 را در Org1 از طریق متغیرهای محیطی نشان میدهد.
در این مرحله، ما قصد داریم برای انجام امضا به مدیر OrdererOrg سوئیچ کنیم، زیرا خط مشی ما نیاز دارد که مدیر OrdererOrg این تراکنش به روز رسانی را امضا کند.
export CORE_PEER_ADDRESS=orderer.example.com:7050
export CORE_PEER_LOCALMSPID="OrdererMSP"
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin\@example.com/msp
شما فقط می توانید همه آنها را کپی کنید، سپس در ترمینال خود قرار دهید و “Enter” را فشار دهید.
اکنون امضا می کنیم:
peer channel signconfigtx -f diff_config_envelope.pb
توجه داشته باشید که اندازه فایل diff_config_envelope.pb قبل از امضا، کوچکتر از اندازه فایل پس از امضا است.
در ضمن اشکالی ندارد که چندین بار امضا کنید، خودتان آن را امتحان کنید.
مرحله 14 – ارسال تراکنش به روز رسانی کانال
زمان به روز رسانی کانال است!
peer channel update -f diff_config_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA
در واقع این دستور Signing را نیز انجام می دهد. ما هنوز آن را در مرحله 13 امضا می کنیم، زیرا می خواهیم مراحل را به صراحت بیان کنیم – در برخی موارد، که خط مشی به بیش از یک سرپرست برای امضا نیاز دارد، ممکن است لازم باشد از دستور در مرحله 13 چندگانه استفاده کنید.
بارها قبل از اینکه امضاکننده نهایی تراکنش به روز رسانی کانال را ارسال کند.
خب کار تمام شد!
مرحله 15 پاداش – به روز رسانی کانال را تأیید کنید
چگونه میتوانیم بدانیم که واقعاً تنظیمات را بهروزرسانی کردهایم؟
یک راه ممکن این است که دوباره بلوک پیکربندی را واکشی کنید و آن را به فایل JSON تبدیل کنید. در نهایت، بررسی می کنیم که آیا max_message_count 11 است یا خیر.
peer channel fetch config config_block2.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CAconfigtxlator proto_decode --input config_block2.pb --type common.Block | jq .data.data[0].payload.data.config > config2.jsonvim config2.json
ما مراحل بیشتری را برای تأیید ارائه نمیکنیم، خودتان را با یک تمرین بسنجید.
در صورت تمایل به آموزش برنامه نویسی بلاکچین، پکیج آموزش برنامه نویسی بلاکچین را ملاحظه نمایید.