
نقش jq در Hyperledger Fabric
در این مقاله یاد میگیرید چگونه با jq بخشهای مشخص کانفیگ کانال Hyperledger Fabric را استخراج و ویرایش کرده و تغییرات را به شبکه اعمال کنید.
در Hyperledger Fabric وقتی میخواهیم کانفیگ کانال (Channel Configuration) را تغییر بدهیم، مثلاً Anchor Peer را تنظیم کنیم یا MSP یک سازمان را آپدیت کنیم، مراحل اصلی شامل اینهاست:
استخراج بلوک کانال (Channel Block) از شبکه:
peer channel fetch config config_block.pb -o orderer.example.com:7050 -c mychannel
نتیجه یک فایل پروتوباف (protobuf) است که ساختار باینری دارد.
تبدیل پروتوباف به JSON قابل خواندن:
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.jsonحالا کانفیگ کانال در قالب JSON قابل پردازش است.
استخراج بخش مشخصی از کانفیگ JSON: اینجاست که jq وارد میشود.
jq یک ابزار خط فرمان برای خواندن، فیلتر کردن و دستکاری JSON است.
مثلاً در Fabric معمولاً از آن برای گرفتن بخش "config" از بلوک کانال استفاده میکنیم:
jq '.data.data[0].payload.data.config' config_block.json > Org1MSPconfig.json- این دستور فقط قسمت مربوط به کانفیگ سازمان مورد نظر را جدا میکند و به فایل دیگری میریزد تا بعداً بتوان آن را ویرایش کرد و سپس بلاک تغییر کانفیگ ساخت.
- اعمال تغییرات و تولید فایل آپدیت
بعد از اعمال تغییر، باconfigtxlator proto_encodeدوباره JSON را به پروتوباف تبدیل میکنیم و به orderer ارسال میکنیم تا کانفیگ کانال آپدیت شود.
خلاصه نقش jq:
jqفقط برای خواندن و استخراج بخشهای خاص JSON استفاده میشود تا بتوانیم تغییرات کانفیگ کانال را به شکل خودکار انجام دهیم.
بدون jq، استخراج بخش کانفیگ از بلوک کانال بسیار دشوار و دستی میشد.
بیایید یک مثال واقعی و ساده از یک فایل کانفیگ کانال پس از تبدیل به JSON بسازیم تا دقیقاً ببینی چطور jq در Fabric استفاده میشود.
فرض کنید یک فایل باینری داریم: config_block.pb برای مشاهده محتوا، از configtxlator استفاده میکنیم:
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.jsonاستخراج اطلاعات با jq
فرض کنیم میخواهیم فقط بخش کانفیگ Org1MSP را استخراج کنیم:
jq '.data.data[0].payload.data.config.channel_group.groups.Application.groups.Org1MSP' config_block.json > Org1MSPconfig.jsonحالا فایل Org1MSPconfig.json شامل همه تنظیمات Org1 در کانال است:
{
"values": {
"MSP": {
"mod_policy": "Admins",
"value": {
"config": {
"name": "Org1MSP",
"root_certs": ["-----BEGIN CERTIFICATE-----..."]
}
}
}
},
"policies": {
"Admins": { "mod_policy": "Admins", "policy": {...} }
}
}
این همان کاری است که Fabric در اسکریپت configUpdate.sh انجام میدهد:
فایل باینری پروتوباف را به JSON تبدیل میکند.
با jq بخش مورد نظر هر سازمان را استخراج میکند.
تغییرات (مثلاً اضافه کردن anchor peer) را روی JSON اعمال میکند.
JSON جدید را دوباره با configtxlator به .pb تبدیل کرده و به کانال میفرستد.
نکته: به همین دلیل است که قبل از اجرای ./network.sh یا تغییر کانفیگ کانال، jq باید نصب باشد. بدون jq، اسکریپت نمیتواند JSON مورد نظر را پردازش کند و خطا میدهد.
پیشنهاد مطالعه: تعریف کلی Protobuf و کاربرد آن در هایپرلجر فابریک
ساختار کلی کانال و فایلهای پروتوباف
کانال Hyperledger Fabric شامل چند بخش اصلیه:
Channel (mychannel)
│
├── Genesis Block (config_block.pb) ← فایل پروتوباف
│ ├── Header
│ │ └── Channel ID, Type, Version
│ ├── Data
│ │ └── Transactions / Config Update
│ └── Metadata
│ └── Signatures, Policies
│
└── Anchor Peers (Org1MSPconfig.json)config_block.pb → بلوک اول کانال یا همان Genesis Block است.
این فایل با فرمت protobuf ذخیره شده، یعنی دادهها به صورت باینری و ساختاریافته هستند.
کار jq شروع میشود وقتی میخوایم این فایل باینری را به JSON تبدیل کنیم تا بتوانیم تغییرات را روی آن اعمال کنیم.
نقش configtxlator و jq
فرآیند معمول: استخراج فایل پروتوباف:
peer channel fetch config config_block.pb -o orderer:7050 -c mychannel --tls --cafile ca.crtتبدیل .pb به JSON:
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.jsonایزوله کردن بخش کانفیگ با jq:
jq '.data.data[0].payload.data.config' config_block.json > Org1MSPconfig.jsonjq دقیقاً این کار را انجام میدهد:
دادههای باینری پروتوباف را که حالا به JSON تبدیل شدهاند، فیلتر و استخراج میکند.
نتیجهی این کار یک JSON کاملاً قابل خواندن و ویرایش برای تعریف anchor peers یا تغییرات دیگر کانال است.
اعمال تغییرات و بازگرداندن به پروتوباف:
configtxlator proto_encode --input updated_config.json --type common.Config --output updated_config.pb
configtxlator compute_update --channel_id mychannel --original config_block.pb --updated updated_config.pb --output config_update.pbارسال تغییرات به شبکه:

مریم گوهرزاد
مدرس و بنیانگذار هلدینگ آرتا رسانه. برنامه نویس و محقق حوزه بلاکچین و توسعهدهنده بلاکچین | متخصص Solidity | توسعهدهنده وب Full-Stackمن یک توسعهدهنده علاقهمند به فناوریهای بلاکچین و وب ۳ هستم و در زمینه Solidity، توسعه قراردادهای هوشمند و ساخت برنامههای غیرمتمرکز (DApps) فعالیت میکنم. تمرکز من بر طراحی و پیادهسازی راهکارهایی است که در کنار بهرهگیری از فناوریهای نوین، عملکرد مناسب، امنیت و تجربه کاربری مطلوبی ارائه دهند.در مسیر حرفهای خود، تجربه کار با قراردادهای هوشمند و معماری راهکارهای مبتنی بر بلاکچین را به دست آوردهام و همواره تلاش میکنم دانش خود را با آخرین تغییرات و پیشرفتهای این حوزه بهروز نگه دارم. برای من، بلاکچین تنها یک فناوری جدید نیست؛ بلکه بستری برای ایجاد راهکارهای متفاوت و کاربردی در دنیای واقعی است.در کنار تخصص در حوزه بلاکچین، به عنوان یک توسعهدهنده وب Full-Stack نیز در طراحی و توسعه وبسایتها و برنامههای تحت وب فعالیت میکنم. تجربه کار در بخشهای Front-End و Back-End به من این امکان را داده است که پروژهها را از مرحله ایده و طراحی تا توسعه و اجرا، با دیدی جامع دنبال کنم. در فرآیند توسعه، توجه ویژهای به کدنویسی تمیز، معماری مناسب، طراحی واکنشگرا، عملکرد مطلوب و تجربه کاربری روان دارم.همیشه به دنبال یادگیری، تجربه فناوریهای جدید و پیدا کردن راههای بهتر برای حل مسائل فنی هستم. از مواجهه با چالشهای پیچیده استقبال میکنم و معتقدم بهترین نتایج زمانی شکل میگیرند که دانش فنی، خلاقیت و همکاری مؤثر در کنار یکدیگر قرار بگیرند.اگر به دنبال همکاری در یک پروژه بلاکچینی، Web3 یا توسعه وب هستید، خوشحال میشوم با یکدیگر در ارتباط باشیم و ایدهها را به راهکارهای واقعی و قابل اجرا تبدیل کنیم.



