ทดลอง Hello World บน xCHAIN

วันนี้ผมจะมาทดลองเขียนโปรแกรม Hello World บน xChain กันครับ โดยจะประกอบไปด้วยเนื้อหาดังต่อไปนี้

● xCHAIN คือ?

● ติดตั้ง METAMASK

● เพิ่ม Network ของ xCHAIN - Testnet

● ขอ XTH ฟรี

● เขียน compile deploy และทดลอง smart contract HelloWorld บน Remix

● ดูธุรกรรมต่างๆบน Explorer

● Verify Contract และทดลองผ่าน Explorer

xCHAIN คือ?

xCHAIN เป็น Blockchain เกิดจากความร่วมมือจากพันธมิตรหลายภาคส่วนในประเทศไทย ไม่ว่าจะเป็น สถาบันการศึกษา องค์กรธุรกิจระดับเอนเทอร์ไพรส์ ผู้พัฒนาซอฟแวร์ และสตาร์ทอัพ ร่วมกันเป็น Validator Node โดยใช้ระบบ PoA (Proof of Authority) เพื่อสร้างระบบนิเวศน์ที่มีความปลอดภัย โปร่งใส น่าเชื่อถือ และสามารถตรวจสอบได้ นอกจากนี้บน xCHAIN จะมีการใช้เหรียญ XTH เป็น utility token สำหรับใช้ชำระค่าธรรมเนียม (Gas fee) ในการใช้งานบน xCHAIN

ติดตั้ง METAMASK

ผมจะใช้ Metamask เป็นกระเป๋าดิจิทัล (digital wallet) สำหรับบริหารจัดการ XTH บน xCHAIN ซึ่งสามารถติดตั้งได้ที่ metamask.io จากนั้นติดตั้งตามขั้นตอน

เพิ่ม xCHAIN Network

เมื่อได้ account เรียบร้อยแล้ว ต่อมาจะเป็นการเพิ่ม xCHAIN Testnet ซึ่งเป็น network ไว้สำหรับทดสอบทำให้ไม่ต้องจ่ายค่าธรรมเนียมด้วย XTH จริงๆ

ให้ไปที่ Network ด้านบน > เลือก Add Network ดังรูปต่อไปนี้

จากนั้นตั้งค่าต่างๆ ดังนี้ครับ

● Network Name : xCHAIN Testnet

● New RPC URL : https://rpc-testnet.xchain.asia

● Chain ID : 36

● Currency Symbol : XTH

● Block Explorer URL : https://exp-testnet.xchain.asia

จากนั้น save

พบว่าเราสามารถเพิ่ม network xCHAIN Testnet ได้เรียบร้อยแล้ว

ซึ่งตอนนี้จะพบว่าเรามี 0 XTH ดังนั้นขั้นตอนต่อไปเราจะไปขอ XTH กัน

ขอ XTH ฟรี

ปัจจุบันสามารถขอได้ 2 ช่องทาง คือ

1. faucet-testnet.xchain.asia/ (0.01 XTH ต่อครั้ง) > Request 0.01 XTH

2. dicert.co/faucet-xchain (0.1 XTH ต่อครั้ง)

> เลือก CONNECT

> เลือก SUMBIT

ซึ่งทั้ง 2 ช่องทางให้รอซักครู่ (2 - 3 วินาที) จะพบว่าได้รับ XTH เข้าในกระเป๋าเรียบร้อยแล้วดังนี้

เท่านี้เราก็พร้อมที่จะลองเขียนโปรแกรมลงใน xCHAIN กันครับ

เขียน smart contract helloworld

ผมใช้เครื่องมือในการเขียน คือ Remix ซึ่งเป็น IDE ที่สามารถเขียน compile และ deploy โดยภาษา Solidity กัน

โดยให้เข้าไปที่ remix.ethereum.org > เลือก Solidity > เลือก New file > ตั้งชื่อไฟล์ HelloWorldxCHAIN.sol

จากนั้นใส่โค้ด ดังต่อไปนี้

ขออธิบายโค้ด HelloWorldxCHAIN ดังนี้

บรรทัด 1: ระบุ License ที่ใช้ ตอนนี้ไม่ได้ใช้เลยกำหนดเป็น UNLICENSED

บรรทัด 2: กำหนด version ของ solidity

บรรทัด 4: contract นี้มีชื่อว่า HelloWorldxCHAIN

บรรทัด 5: ประกาศตัวแปรชื่อ string message กำหนดค่าเป็น "HelloWorld"

บรรทัด 7-9: สร้างฟังก์ชั่น setMessage สำหรับกำหนดค่าใหม่ให้กับตัวแปร message

บรรทัด 11-13: สร้างฟังก์ชั่น getMessage สำหรับคืนค่าตัวแปร message

Compile โค้ด

จากนั้น compile โดยไปที่หน้า SOLIDITY COMPILE > เลือก 0.8.15+commit > กด Advanced Configuration > เลือก Enable optimization 200 > กด Compile HelloWorldxCHAIN.sol ดังรูป

Deploy ไปที่ xCHAIN

จากนั้น Deploy ไปที่ xCHAIN โดยไปที่หน้า DEPLOY & RUN TRANSACTIONS > เลือก Injected Provider - Metamask > เลือก Deploy

กด Confirm ค่าธรรมเนียมในการ Deploy โค้ด ซึ่งจ่ายเป็น XTH ดังนี้

ทดลอง Smart Contract

หลังจาก Deploy เรียบร้อยแล้ว จะพบ Deployed Contracts (อยู่ซ้ายล่างของจอ) ซึ่งจะพบฟังก์ชั่นต่างๆที่เราสามารถเรียกใช้งานได้ ดังนี้

ทดลองฟังก์ชั่น getMessage เพื่อคืนค่าตัวแปร message ซึ่งจะพบข้อความ HelloWorld ที่กำหนดไว้ตอนแรก ดังนี้

ซึ่งสังเกตว่าฟังก์ชั่น getMessage นั้นไม่เสียค่าธรรมเนียมเนื่องจากเป็นการดึงข้อมูลออกมาจาก Blockchain อย่างเดียว

ต่อมาเราจะลองกำหนดข้อความใหม่ให้กับตัวแปร message โดยในตัวอย่างนี้ผมลองใส่ xCHAIN > จากนั้นกด setMessage

เนื่องจากขั้นตอนนี้เป็นการบันทึกข้อมูลลงไปใน Blockchain จึงต้องเสียค่าธรรมเนียม > กด Confirm เหมือนเดิม ดังนี้

จากนั้นรอซักครู่จน transtion สำเร็จจากนั้น กลับไปทดลองฟังก์ชั่น getMessage อีกครั้ง จะพบว่าได้ข้อความใหม่ คือ xCHAIN ดังนี้

ดูธุรกรรมต่างๆบน Explorer

ทั้งนี้ธุรกรรมต่างๆที่เกิดขึ้นทั้งหมดจะถูกบันทึกอยู่ใน xCHAIN ซึ่งเราสามารถเข้าไปย้อนดูการทำธุรกรรมต่างๆได้ที่ exp-testnet.xchain.asia จะพบหน้าจอดังนี้

โดยเราสามารถนำ Address ของ Smart Contract ใน Remix ดังรูปนี้

ลองไปค้นที่ Explorer จะพบว่าสามารถดูธุรกรรมต่างๆย้อนหลังได้ทั้งหมด ดังนี้

Verify Contract และทดลองผ่าน Explorer

จะสังเกตว่าตอนนี้เมื่อไปที่ช่อง Code จะพบหน้าจอดังนี้

ซึ่งจะพบว่าเป็น ByteCode ซึ่งไม่สามารถอ่านได้ง่ายๆ เหมือนตอนที่เราเขียน Code ดังนั้นเพื่อความโปร่งใสเราสามารถทำการ Verify Code เพื่อให้แสดง Code ทั้งหมดได้ โดยกดที่ Verify & Publish

> Via flattened source code > Next

กรอกข้อมูลดังนี้
- Contract Name : HelloWorldxCHAIN (ใส่ชื่อ Contract)
- Complier: v0.8.15+commit (เลือก version ที่ complier)
- Optimization: Yes
- Optimization runs: 200
- Enter the Solidity Contract Code : copy code ใน Remix ทั้งหมดมาใส่
- กด Verify & Publish

รอซักครู่ เมื่อ Verify เรียบร้อยจะพบว่า Code จะมี source code ปรากฎมาทั้งหมด และมีอีก 2 เมนู ได้แก่ Read Contract และ Write Contract ดังนี้

ซึ่งจะพบว่าเราสามารถเข้าไปที่ Write Contract เราสามารถใช้ function setMessage ผ่านหน้า Explorer นี้ได้เลย โดย กด Connect Wallet > ผมลองใส่คำว่า Thannob > Confirm เพื่อจ่ายค่า Gas fee

จากนั้นลองกลับไปที่ Read Contract จะพบว่าสามารถดูค่าของตัวแปร message ได้ด้วย ซึ่งจะมีคำว่า Thannob บันทึกอยู่

ถ้าใครลองทำตามมาถึงจุดนี้ได้ ถือว่าได้ทดลองตั้งแต่สมัคร Wallet เพิ่ม xCHAIN ขอ XTH เขียน compile deploy verify Smart Contract ทดลองใช้ผ่านทั้งทาง Remix และ Explorer

สุดท้ายนี้ หวังว่าบทความนี้จะเป็นประโยชน์ไม่มากก็น้อยนะครับ

ทั้งนี้ต้องขอขอบคุณอาจารย์พี่หมี ที่ช่วยกันพัฒนาระบบ faucet สำหรับรับเหรียญ XTH ซึ่งสามารถติดตามผลงานของอาจารย์เค้าได้ที่ Youtube และ Facebook มีสอนเขียนโปรแกรมดีๆหลายคลิปมากครับ

นอกจากนี้อาจารย์พี่หมียังอัดคลิปสอนทำตามบทความไว้ให้อีกด้วย สามารถรับชมได้เลยครับดังนี้

บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค

วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต