Config Hyperledger Fabric SDK
บอกเล่าการลองผิดลองถูกตั้งค่าใน Hyperledger Fabric SDK for Nodejs
พาร์ทนี้จะอธิบายส่วนของการตั้งค่าให้กับ SDK กันนะครับ (fabric-sdk-node version 1.2.0) มาเริ่มกันเลย
endorsingPeer
ส่วนนี้คือการกำหนดให้ Peer นั้นๆ ทำการรับรอง transaction proposal สำหรับการ invoke
หลักการทำงานของการตั้งค่านี้คือ Peer0 และ Peer2 ที่ตั้งเป็น endorsingPeer อันดับแรก จะต้องทำการ ติดตั้ง ChainCode ลงใน Peer ทั้ง 2 ก่อน จากนั้นใช้ฟังก์ชัน
channel.sendTransactionProposal(request)
ทำการส่ง request เพื่อทำการ endorsement ระบบจะทำการส่ง request ไปทั้ง 2 Peer และจะได้ response proposal กลับมาทั้ง 2 Peer เพื่อ handle ก่อนทำงานส่ง transaction request ไปยัง orderer ข้อดีคือ ถ้ามี Peer ใด Peer หนึ่งล่ม response ที่ได้รับกลับมาจะยังใช้ได้อยู่อีกหนึ่ง จึงสามารถทำงานต่อได้
จุดสังเกต: เมื่อระบบส่ง transaction proposal ไปยัง Peer และ Peer ไหนยังไม่มี instance ChainCode ระบบ จะสร้าง instance ChainCode สำหรับ Peer นั้นขึ้นมาเพิ่มให้อัตโนมัติ
chaincodeQuery
ส่วนนี้คือการกำหนดให้ Peer นั้นๆ ทำการรับรอง transaction proposal สำหรับการ query
จากตัวอย่างตั้งค่าด้านบน จะมี Peer ที่จะต้องรับรอง transaction proposal สำหรับการ query ทั้งหมด 3 Peer อันดับแรก จะต้องทำการ ติดตั้ง ChainCode ลงในทั้ง 3 Peer ก่อน จากนั้นใช้ฟังก์ชัน
channel.queryByChaincode(request)
ทำการ query ส่ง transaction proposal ระบบจะทำการส่ง request ไปทั้ง 3 peer และจะได้ response proposal กลับมาทั้ง 3 peer เช่นเดียวกับ endorsingPeer
ledgerQuery
ส่วนนี้จากที่ลองเล่นดู ฟังก์ชันเหล่านี้
channel.queryBlock(... , peer)channel.queryBlockByHash(... , peer)channel.queryTransaction(... , peer)...
ไม่มีผลเหมือนกับข้อด้านบนที่ได้ response กลับมาตามจำนวนที่ตั้งไว้ แต่จะต้องกำหนด Peer ลงไปเองและได้ response กลับมาเพียงอันเดียว ตาม Peer ที่เราใส่ไว้ เลยไม่รู้ว่าการตั้งค่านี้ไปใช้ที่ส่วนไหน ใครทราบบอกผมด้วยนะครับ
eventSource
ส่วนนี้ตั้งเพื่อใช้กับ eventHubs ว่าต้องการจะให้ทำงานกับ Peer ไหนบ้าง
const eventHubs = channel.getChannelEventHubsForOrg()
eventHubs.forEach(eh => { })
จากการตั้งค่าด้านบน eventHubs นี้ จะมีทั้งหมด 2 Peer ดังนั้น forEach จะทำงาน แต่ละ Peer รวมเป็น 2 รอบ แล้วเราก็มา handle response เอาเองโดยตัวอย่างจะใช้ Promise.all() ในการ handle
ตัวอย่าง eventHubs ดูได้ที่ https://fabric-sdk-node.github.io/tutorial-channel-events.html
จบส่วนของการตั้งค่า SDK แล้ว คงเข้าใจกันมากขึ้นนะครับ จริงๆแล้ว ผมก็ลองผิดลองถูกมา ยังไม่เข้าใจมากนัก อาศัยลงมือทำดูเลย ท่านใดมีข้อสงสัย หรือมีจุดที่ผมบอกผิด ทักท้วงได้เลยนะครับ
ปล. ย้ำนะครับว่า version 1.2.0 ใน 1.3.0 จะมีเปลี่ยนตรงส่วน eventHubs