หลังจากทาง KillSwitch ได้เปิดให้ใช้งาน KillSwitch Chain ทำให้มีเหล่านักพัฒนา Blockchain ร่วมกันทดสอบและสร้างสรรค์บริการต่างๆ หนึ่งในบริการที่น่าสนใจ คือ บริการข้อมูลจากภายนอกเชน (Off chain data service) ซึ่งวันนี้ผมจะพาเพื่อนๆเขียน Smart Contract เดาตัวเลขจากการสุ่มเลข 0 - 100 ว่ามากกว่า 50 หรือไม่ จากบริการของทาง Kururu บน KillSwitch Chain กันครับ โดยมีเนื้อหาทั้งหมดดังต่อไปนี้
● Off Chain Data Oracle คือ?
● ติดตั้ง Metamask
● ตั้งค่า Network สำหรับ KillSwtich Chain
● Orkururu คือ?
● เขียน Smart Contract สำหรับเดาและสุ่มตัวเลข บน Remix
● ทดลองใช้ Smart contract สำหรับเดาและสุ่มตัวเลข บน Remix
ก่อนที่ผมจะเริ่มในหัวข้อแรกสำหรับเพื่อนๆที่จะไม่ได้ทดลอง Hello World บน KillSwitch Chain สามารถเข้าไปอ่านเพิ่มเติมได้ที่ link นี้ครับ
เนื่องจากอย่างที่ทุกๆคนทราบกันดีกว่า Blockchain เป็นระบบปิด ซึ่งบ่อยๆครั้งเราอาจจะต้องการข้อมูลจากโลกภายนอกด้วย โดยการดึงข้อมูลจากภายนอกนั้นสามารถทำได้โดย Off Chain Data Oracle ซึ่งเป็นบริการที่ใช้ Smart Contract เชื่อมกับข้อมูลภายนอกเครือข่ายเพื่อเป็นตัวกลางที่คอยป้อนข้อมูลเข้าสู่ Smart Contract หรือเครือข่ายภายใน Blockchain (On Chain) โดยปัจจุบันมีบริการข้อมูลต่างๆมากมาย ตัวอย่างเช่น อัตราแลกเปลี่ยน ราคาสินค้า หรือการสุ่มตัวเลข เป็นต้น
ผมจะใช้ Metamask เป็นกระเป๋า (wallet) สำหรับบริหารจัดการ REI บน KillSwitch Chain โดยสามารถติดตั้งได้ที่ metamask.io จากนั้นติดตั้งตามขั้นตอน
เมื่อได้ account เรียบร้อย ต่อมาเป็นการตั้งค่า Network สำหรับ KillSwitch Chain
ให้ไปที่ Network ด้านบน > เลือก Custom RPC ดังรูปต่อไปนี้
จากนั้นตั้งค่าต่างๆ ดังนี้ครับ
● KSW Chain
● New RPC URL : https://rei-rpc.moonrhythm.io
● Chain ID : 55555
● Currency Symbol : REI
● Block Explorer URL : https://rei-explorer.moonrhythm.io/
จากนั้น save
พบว่าเราสามารถเพิ่ม network KSW Chain ได้เรียบร้อย
เนื่องจากผมติดต่อไปขอร่วมทดสอบทางTelagram ของทาง KillSwitchได้เลยครับ ทางทีมงานใจดีส่งมาให้ 1 REI
Orakururu เป็นบริการ Off-chain Data Oracle ซึ่งปัจจุบันมีบริการสำหรับการสุ่มตัวเลข ซึ่งวันนี้ผมจะใช้บริการนี้สำหรับการสุ่มตัว 1 - 100 โดยสามารถอ่านรายละเอียดเพิ่มเติมการทำงานได้ที่ kururu.finance/oracle/random ครับ
ผมใช้เครื่องมือในการเขียน คือ Remix ซึ่งเป็น IDE ที่สามารถเขียน compile และ deploy และภาษาที่ใช้ คือ Solidity
โดยให้เข้าไปที่ remix.ethereum.org > เลือก Solidity > เลือก New file > ตั้งชื่อไฟล์ TestYourLuck.sol
จากนั้นใส่โค้ด ดังต่อไปนี้
ทั้งนี้โค้ดข้างต้นนี้ผมนำตัวอย่างการสุ่มตัวเลขจากทาง Kururu นำมาแก้ไขบางส่วนในบรรทัดที่ 26 - 73 โดยผมขออธิบายโค้ดคร่าวๆดังต่อไปนี้
บรรทัด 26: ผมสร้าง contract ใหม่ชื่อ TestYourLuck แทน KururuGuruExample โดย contract นี้ extend ความสามารถมาจาก KururuGuruConsumer
บรรทัด 29: constructor จะต้องใส่ guruAddr สำหรับตอน deploy contract ซึ่ง guruAddr ในที่นี้ คือ 0x94D3eFdc14A45eDed54Caf6C2c19DB117b807471
บรรทัด 31 - 36: ตัวแปร Roll ใช้สำหรับเก็บผลรับการสุ่ม ได้แก่ roller : address คนสุ่ม, result : ผลลัพธ์การสุ่ม, rolled : สุ่มแล้วหรือยัง (true หรือ false), และ isHigh : เดาว่ามากกว่า (true) หรือน้อยกว่า (false) 50
บรรทัด 44: number % 100 จะเป็นการกำหนดการสุ่มเป็น 1 - 100
บรรทัด 48 - 61: เป็นฟังก์ชั่นสำหรับสุ่มตัวเลขโดยผมเพิ่มให้รับค่า isHigh เป็น true ในกรณีที่เดาว่าค่าจะออกมามากกว่า 50 และ false สำหรับเดาว่าจะน้อยกว่า 50
บรรทัด 63 - 72: เป็นฟังก์ชั่นสำหรับตรวจสอบผลลัพธ์การเดาถ้าเดาถูกจะมีข้อความว่า Your guess was correct แต่ถ้าไม่ถูกจะเป็นข้อความว่า Your guess was not correct โดยผมมีการเพิ่ม require สำหรับตรวจสอบก่อนว่าได้รับผลลัพธ์การสุ่มจากทาง kururu ถึงจะดำเนินการตรวจสอบว่าเดาถูกไหมดังที่กล่าวมาก่อนข้างต้น
จากนั้น compile โดยไปที่หน้า SOLIDITY COMPILE > เลือก 0.8.7+commit > กด Compile TestYourLuck.sol ดังรูป
จากนั้น Deploy ไปที่ KillSwitch Chain โดยไปที่หน้า DEPLOY & RUN TRANSACTIONS > เลือก Injected Web3 > เลิอก TestYourLuck - TestYourLuck.sol > กรอก guruAddr คือ 0x94D3eFdc14A45eDed54Caf6C2c19DB117b807471 > เลือก Deploy
กด Confirm ค่าธรรมเนียมในการ Deploy โค้ด ซึ่งจ่ายเป็น REI ดังนี้
ซึ่งจะสังเกตว่าเค้าจะออกแบบให้ใช้ค่า gas น้อยมากๆ เหมือน Matic ครับ
หลังจาก Deploy Smart Contract เรียบร้อยแล้ว จะพบ Deployed Contracts (อยู่ด้านซ้ายล่างของหน้าจอ) ซึ่งจะพบฟังก์ชั่นที่เราสามารถเรียกใช้งานได้ ดังนี้
ทดลองสุ่มเลขด้วยฟังก์ชั่น roll ซึ่งขั้นตอนนี้จะเป็นการดึงข้อมูลจาก Off-chain จาก Kururu โดยกรอก true หรือ false สำหรับเดาว่าตัวเลขที่สุ่มมาได้จะมากกว่าหรือน้อยกว่า 50 ในตัวอย่างนี้ผมกำหนดเป็น true ผมเดาว่าตัวเลขน่าจะมากกว่า 50 ถึงว่าเป็นการทดสอบโชคไปด้วยเลย ^^ ขั้นตอนนี้ต้องเสียค่า gas ด้วยนะครับ
จากนั้นรอซักครู่รอทาง Kururu สุ่มเลขมาให้เราจากนั้นรันฟังก์ชั่น rolls โดยการเลขรอบโดยรอบแรกจะเริ่มที่ 0 ซึ่งในตัวอย่างนี้ได้ผลลัพธ์คือ roller คือ address ผู้สุ่ม result คือ 97 ผลลัพธ์การสุ่มเลข roller คือ สุ่มแล้วหรือยัง และ isHigh คือ ที่สิ่งเราเดาไว้
จากนั้นลองตรวจสอบผลลัพธ์โดยใช้ฟังก์ชั่น check โดยกรอกรอบที่ 0 ซึ่งผมเดาไว้ว่า isHigh เป็น true และผลลัพธ์คือ 97 ดังนั้น ผมจึงได้ข้อความว่า Your guess was correct ^^ เย้โชคดีจัง ^^
ต่อมาผมขอลองสุ่มอีกครั้ง โดยครั้งนี้ผมเรียกฟังก์ชั้น roll ใส่เป็น false
ซึ่งคราวนี้ผมลองเรียกฟังก์ชั่น rolls กรอกรอบที่ 1 เลยหลัง roll ซึ่งจะพบว่ายังไม่ได้ผลลัพธ์จากทาง Kururu สังเกตว่า rolled ยังเป็น false อยู่
จากนั้นผมลองเรียกฟังก์ชั่น check กรอกรอบที่ 1 จะพบ error ปรากฎดังนี้ เนื่องจาก rolled เป็น false เพราะยังไม่ได้ผลลัพธ์การสุ่มจากทาง Kururu นั้นเอง (ปกติต้องรอซักพักนึงก่อนนะครับ)
หลังจากรอซักครู่จากนั้นลองเรียกฟังก์ชั่น check กรอกรอบที่ 1 รอบนี้ผมข้อความ Your guess was not correct T-T เนื่องจากรูปนี้ผมเดาผิดครับ
ณ จุดนี้เท่ากับว่าเราสามารถเรียกข้อมูลการสุ่มตัวเลขจาก Off-chain ของทาง Kururu จากนั้นสามารถทำการสุ่มตัวเลขเพื่อทดสอบโชคได้บน KillSwitch Chain ได้เรียบร้อยครับ
สุดท้ายนี้หวังว่าบทความนี้คงเป็นประโยชน์กับเพื่อนๆไม่มากก็น้อยนะครับ
บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต