วันจันทร์ที่ 11 กรกฎาคม พ.ศ. 2565

รู้จัก chia RPC API และ Full node API

อ้างอิงจาก 

https://docs.chia.net/docs/12rpcs/rpcs


เคยสงสัยไหมครับว่า web ต่างๆ เช่น xchscan หรือ chiaexplorer เขารู้ได้ยังไงว่าตอนนี้ height มันอยู่ที่เท่าไร netspace อยู่ที่เท่าไร หรือ transaction ของแต่ล่ะ wallet id มีจำนวนเงินเข้าเงินออกกันยังไง … น่าสงสัยไหมครับว่าพวกเขารู้กันได้ยังไง … วันนี้เราจะลองทำตัวเลียนแบบพวกนี้กันดูครับ 


ก่อนอื่นต้องเข้าใจตรงกันก่อนว่า full node ของ chia blockchain เป็น decentralized database 100% …  node ใดๆ ก็ตามที่ต้องการจะทำกิจกรรมกับ chia blockchain จำเป็นจะต้อง sync database ให้ครบถ้วนเสียก่อน ดังนั้นตัว full node ทุกตัวบนโลกก็จะมี data เหมือนๆ กัน … นั้นคือ xchscan หรือ chiaexplorer ก็มี full node รันอยู่ด้วยก็เลยสามารถ query data ใดๆ ที่เป็นข้อมูลของ blockchain ได้นั้นเอง … หรือแม้กระทั่ง farmer อย่างเราๆ ก็สามารถดึง data จาก blockchain ที่เครื่อง farm ของเราได้เช่นกัน … 


น่าสนใจ … ลองนึกดูนะครับถ้าเราจะเขียนโปรแกรมดึงข้อมูล wallet ID ของเราหรือแม้กระทั่ง check status ของเครื่อง farm สามารถทำได้โดยที่ไม่ต้องไปแกะ log file เลย … มาดูกันครับว่าสามารถทำได้ยังไง


ก่อนอื่นเรามารู้จักคำว่า API ก่อน … 


API คือ Application Programming Interface เป็น interface สำหรับเอาไว้ให้ชาวบ้านเขียนโปรแกรมติดต่อกับระบบหลังบ้าน ในที่นี้คือ chia blockchain … นั้นหมายถึงว่าเราสามารถดึงข้อมูลต่างๆ ของ chia blockchain ผ่าน API ตัวนี้ 


มันจะมีโปรแกรมง่ายๆสำหรับเอาไว้ติดต่อ API เพื่อดึงข้อมูลหลังบ้านมาใช้ … แต่ถ้าเก่งพวก REST API ก็สบายหน่อยเขียนเป็นโปรแกรมเอามาแสดงผลทำ interface สวยๆ ได้สบายๆ … แต่บทความนี้ไม่ได้สอน programmer เราสอน ชาว farmer ดังนั้นไม่จำเป็นต้องเก่ง programming ก็ได้ … เราใช้เครื่องมือง่ายๆ ก็พอเช่น curl … ก่อนอื่น download curl สำหรับ windows ได้ที่ https://curl.se/windows/ เมื่อ load เสร็จแล้ว ลองเปิด command windows แล้วพิพม์คำสั่ง curl –version ดูครับ



ผมใช้ linux นะครับ แต่มันควรจะเหมือนกัน 

มาดู document ของ chia เขาจะแบ่ง API ออกเป็น 2 ส่วน คือ chia RPC API กับ FULL node API  


chia RPC API หรือ Remote Procedure Call API เป็น API ที่เราเอาไว้ติดต่อกับ API ของ server อื่นๆ ในกรณีที่เราไม่มี full node เป็นของตัวเองเช่นเราไม่ใช่ farmer หรือเราไม่ได้ลงโปรแกรม chia แต่เรายังต้องการดูข้อมูลของ chia blockchain ก็สามารถไปขอ data ก้อนนี้กับ server ที่อนุญาติให้ดึงข้อมูลได้ ... มันมีหลาย server มากเลยนะครับที่มี API ให้เราดึงข้อมูลออกมาได้ .... แต่ในที่นี้เราจะใช้ API ของ xchscan กัน .. โดย xchscan เขามีคู่มือการดึง data มาให้ที่ https://xchscan.com/rest-api ลองเปิดผ่าน browser ดูครับ ...


เราลองมาดู API ที่ชื่อ Get Chia Netspace กัน ... ซึ่ง API ตัวนี้ก็บอกอยู่แล้วว่า เอาไว้ check Netspace ของ blockchain



กลับมาที่ command windows ของเรา ... ลองพิพม์คำสั่ง

curl https://xchscan.com/api/netspace

ตัว server ก็จะ return current Netspace กลับมาให้ครับ โดยมีหน่วยเป็น bytes ... เราจะต้องแปลงเป็น EiB หรือ TiB เอาเองครับ




เราสามารถลองใช้ command อื่นๆ ดูได้ครับที่หน้า https://xchscan.com/rest-api


curl เป็นแค่ single command เพื่อดึงข้อมูลมาแค่ครั้งเดียว ... ถ้าต้องการดึงแบบ real time หรืออัตโนมัติต้องเขียนเป็นโปรแกรมและสามารถเขียนโปรแกรมโดยใช้ API ของเจ้าอื่นๆ ได้เช่น https://github.com/Chia-Mine/chia-agent หรือ https://github.com/freddiecoleman/chia-client



FULL node API ในกรณีที่เรารัน full node เราก็สามารถดึง data จาก chia blockchain มาได้โดยที่ไม่ต้องไปใช้ API จากข้างนอก ... อ้างอิงจาก https://docs.chia.net/docs/12rpcs/full_node_api

เราลองดูคำสั่ง get Network info หรือ Network information ที่ full node ของเราติดต่ออยู่



เราลองพิมพ์คำสั่งตามนี้น่ะครับ 

curl --insecure --cert ~/.chia/mainnet/config/ssl/full_node/private_full_node.crt  
--key ~/.chia/mainnet/config/ssl/full_node/private_full_node.key 
-d '{}' -H "Content-Type: application/json" 
-X POST https://localhost:8555/get_network_info | python3 -m json.tool


*** ตรงคำสั่ง python3 -m json.tool .... ตัวอย่างใน web ใช้ python ซึ่งต้องดูว่าเครื่องเราได้ลง python หรือไม่ ถ้าลงลง version อะไรต้องเรียกใช้ยังไง... ถ้าไม่ได้ลงหรือไม่แน่ใจเราสามารถตัดเอาคำสั่ง "| python3 -m json.tool" ออกได้ครับ คำสั่งก็จะเป็นตามข้างล่างครับ ...

curl --insecure --cert ~/.chia/mainnet/config/ssl/full_node/private_full_node.crt  
--key ~/.chia/mainnet/config/ssl/full_node/private_full_node.key 
-d '{}' -H "Content-Type: application/json" 
-X POST https://localhost:8555/get_network_info 


*** สำหรับ Windows ผมไม่ได้ test แต่เดาว่าน่าจะเปลี่ยน folder ~/.chia เป็น folder "C:\users\<userName>\.chia .... ลองดูนะครับถ้าไม่ได้ยังไง ทิ้ง message ไว้ เดียวผมจะหาคำสั่งที่ถูกต้องให้


สิ่งที่เราจะได้คือ network config ที่ full node ของเราได้ติดต่ออยู่



ถ้าทำคำสั่งนี้สำเร็จ ให้ลองทำตามตัวอย่างกับคำสั่งอื่นๆ ในหน้า https://docs.chia.net/docs/12rpcs/full_node_api ดูนะครับ

เป็นไงบ้างครับ ทริกเล็กๆ สำหรับไว้ query data จาก chia blockchain หวังว่าคงจะสนุกนะครับ ... หรือใครมีคำสั่งอะไรอื่นๆ มาแชร์กันได้ครับ

ขอบคุณทุกท่านที่ติดตาม ... happy farming ครับ

*** ข้อมูลเพิ่มเติมจากคุณ Karlkim Suwanmongkol กูรู chia blockchain ในเมืองไทยครับที่ post comment ใน facebook เมื่อวันที่ 12 Jul .... กราบงามๆ สำหรับข้อมูลเพิ่มเติมครับ

เยี่ยมเลยครับ ผมขอช่วยเสริมเรื่อง Chia RPC API ที่ผมรู้นะครับ เผื่อเป็นประโยชน์
1. Chia RPC API เป็น interface หลักที่ให้ข้อมูลทุกอย่าง (ไม่ได้ไปอ่านข้อมูลจาก SQlite DB) แม้แต่ CLI ที่เราน่าจะใช้กันบ่อยๆเช่น `chia show -s` หรือ `chia wallet show` ก็จะใช้ RPC API ในการดึงข้อมูล
2. คำสั้ง `chia rpc` CLI ถูกปล่อยมาในเวอร์ชั่น 1.3.4 ทำให้ไม่จำเป็นต้องใช้ `curl` ถ้าจะติดต่อ RPC API ในเครื่องตัวเอง สะดวกมากๆ ตัวอย่างเช่น `chia rpc full_node get_network_info`
3. Chia RPC API documentations ยังไม่สมบรูณ์ เพราะยังขาด API ตัวอื่นๆเช่น wallet API ที่ใช้เรื่อง CATs หรือ Offers แต่มีคนใน community ใจดีที่ทำ API documentations ที่มีประโยชน์มากไว้ให้

ไม่มีความคิดเห็น:

แสดงความคิดเห็น