วันเสาร์, ธันวาคม 15

มาพัฒนา DApp ง่าย ๆ ด้วย Truffle กันเถอะ ตอนที่ 1: What and Why?

สวัสดีค่ะ คุณผู้อ่านทุกท่าน

ทุกวันนี้ Blockchain ได้ถูกพัฒนาให้สามารถทำงานร่วมกับแอปพลิเคชันที่เราเขียนได้แล้ว เราจะเรียกแอปพลิเคชันที่ทำงานกับ Blockchain ว่า DApp มันย่อมาจาก Decentralized Application แปลตรงตัวว่าแอปพลิเคชันที่ทำงานแบบกระจายนั่นเอง

คุณผู้อ่านหลายคนที่เล่น Ethereum น่าจะเคยเห็นและเคยเล่น DApp กันบ้าง หากนึกไม่ออก ให้นึกถึงเว็บที่ต้องมีการซื้อเหรียญถึงจะทำงานได้ เช่น <CryptoKitties.co> เกมเพาะพันธุ์แมว, <SteemIt.com> เว็บบล็อกที่เปิดโอกาสให้คนจ่ายเหรียญ Crypto เพื่อสนับสนุนคนเขียนบทความ เป็นต้น ในบทความนี้เราจะสร้าง DApp เป็นของตัวเองง่าย ๆ ด้วย Truffle กันค่ะ

แต่เดี๋ยวก่อน! เรายังไม่สร้างตอนนี้! ผู้เขียนขอแนะนำให้คุณผู้อ่านรู้จักกับ Truffle และความสำคัญของมันก่อน ซึ่งเนื้อหาค่อนข้างยาว วิธีการสร้างขอยกไปเขียนในตอนถัดไปแทนนะคะ

เรื่องนี้ผู้เขียนตั้งใจว่าจะแบ่งบทความเป็นซีรีย์ 4 ตอนค่ะ เพื่อไม่ให้คุณผู้อ่านอ่านจนตาลาย คือ

ตอนที่ 1 What and Why?

ตอนที่ 2 Make New Project

ตอนที่ 3 Migration

ตอนที่ 4 Create your own DApp

เกริ่นมายาวพอแล้ว มาเริ่มกันเลยดีกว่า… What and Why?

What is Truffle?

Truffle เป็นอย่างที่ผู้พัฒนาว่า มันคือ “Your Ethereum Swiss Army Knife” เป็นมีดพับที่สามารถทำอะไรได้หลายอย่าง โดยมีเป้าหมายหลัก คือ ช่วยสร้างสภาพแวดล้อมให้เราสามารถพัฒนา DApp ที่ทำงานกับ Ethereum ได้ง่ายขึ้น Truffle เป็น Development Framework ที่คนนิยมใช้กันมากค่ะ เพราะ Truffle ที่มี Feature เจ๋ง ๆ ให้ใช้ มากมาย แถมใช้งานง่ายอีกด้วย

Why use Truffle?

คำตอบคือ เพื่อแทนที่การพัฒนา DApp แบบเดิม ๆ ที่สร้างความลำบากให้นักพัฒนาค่ะ

จากรูปนะคะ หลังจากเขียน Smart Contract ในภาษา Solidity เสร็จเรียบร้อย เราต้องนำสิ่งที่เขียนไป Compile ด้วยโปรแกรม solc ซึ่งเป็นโปรแกรม CLI (ใช้ Command Line รันโปรแกรม)

solc สามารถแปลง Smart Contract ออกมาในรูปแบบต่าง ๆ อย่างเช่น Bytecode, ABI, AST (Abstract syntax tree), Opcode (Operation code), Assembly เป็นต้น แต่เนื่องจากหลัก ๆ เราจะใช้แค่ 2 ตัวคือ Bytecode และ ABI (อันหลัง Advance ไป…) เราจะแปลงเฉพาะ 2 ตัวนี้นะคะ

เรื่อง Bytecode และ ABI ผู้เขียนขอเสริมนะคะ

Bytecode คือ สิ่งที่ได้จริง ๆ จากการ Compile มีลักษณะเป็นเลขฐาน 16 ยาวยืดดดดด

ยกตัวอย่าง Smart Contract ตัวหนึ่งง่าย ๆ

เมื่อ Compile เป็น Bytecode ออกมาจะได้

ส่วน ABI คือ JSON ที่เก็บข้อมูลของฟังก์ชันที่มีใน Contract มีเพื่อให้ Ethereum รู้ว่าแต่ละฟังก์ชันมันเรียกใช้อย่างไรและเอาข้อมูลอะไรออกมาได้บ้าง

ตาม Smart Contract ตัวอย่างที่อยู่ด้านบน เมื่อแปลงเป็น ABI จะได้แบบนี้

การที่จะได้ Bytecode และ ABI มานั้น เราต้องใช้คำสั่งรูปแบบนี้ค่ะ

solc --abi --bin myContracts.sol -o ./build/contracts/

เมื่อใช้คำสั่งนี้เสร็จ เราก็จะได้โฟลเดอร์ build/contracts ที่ข้างในเก็บไฟล์ .bin และ .abi

ต่อจากนั้น เราก็ต้องนำ Bytecode และ ABI ไปใช้ในการส่ง Smart Contract ขึ้นไปใน Ethereum (หรือที่เรียกกันว่าการ Deploy) โดยเขียนคำสั่งใน Ethereum Client (เช่น Geth, Parity เป็นต้น) ด้วย ในกรณีที่เราใช้ Geth คำสั่งที่ทำจะเป็น JavaScript ลักษณะแบบนี้

ถ้าไม่ใส่ข้อมูลที่ผิดพลาดลงไป Node ของเราก็จะประกาศ Transaction เราก็แค่ทำ Mining หรือรอคนอื่นทำ Mining ให้ (กรณีเราใช้ Public blockchain) พอ Mining สำเร็จ ก็เป็นอันเสร็จพิธีค่ะ

แล้ว Smart Contract ของเราใช้งานได้ซักที!

ดูเหมือนไม่ยากเลยใช่ไหมคะ?

จากคำสั่ง Compile ด้วย solc เราสามารถทำหลาย Smart Contract ได้ เพียงแค่พิมพ์ชื่อไฟล์เรียงต่อกันหลัง — bin แบบนี้ค่ะ

solc --abi --bin A.sol B.sol C.sol ... -o ./build/contracts/

แต่! ถ้าเรามี Smart Contract เป็นสิบ และมีชื่อยาวมาก คำสั่งที่ได้จะยาวมากเลยนะคะ ยิ่งถ้ามีการ Compile บ่อย ๆ จะเห็นได้ว่าไม่สะดวกอย่างมาก

และการ Deploy นั้น เนื่องจากต้องใช้ ABI และ Bytecode ในคำสั่ง contract.abi.new ดังกรอบด้านบน คำสั่งที่ได้จะยาว ไม่เหมาะที่จะพิมพ์ Console ใน Geth ที่มีบรรทัดเดียวเลยค่ะ

นี่แค่ Deploy Smart Contract ตัวเดียวนะคะ…

Truffle จะช่วยให้เราสะดวกขึ้น โดยการ Compile นั้น มันจะทำให้เราสามารถทำคำสั่งสั้น ๆ แค่คำสั่งเดียวเท่านั้น ขอแค่เก็บ Smart Contract ไว้ในที่เดียวกันก็พอ และเขียนสคริปต์เพื่อกำหนด Smart Contract ที่จะ Deploy ที่นี้เวลา Deploy เราก็แค่ทำคำสั่งสั้น ๆ คำสั่งเดียว เราก็จะได้ Smart Contract มาใช้งานแล้ว

นอกจากนี้ Truffle ยังช่วยจำ Address ของ Smart Contract อีกด้วย โดยปกติแล้ว หลังจาก Deploy Smart Contract แล้ว จะปรากฎ Address ของ Smart Contract เพื่อใช้อ้างอิงในคำสั่ง contract.abi.at หลังจาก Transaction ถูกประกาศออกไป อยู่ด้านล่างถัดจาก fullhash ถ้าไม่ใช้ Truffle เราก็ต้องจดเอง ซึ่งจะไม่สะดวกเลย ถ้าเรามี Smart Contract หลายตัว แถมยังใช้ Blockchain Network หลายตัว เช่น เราใช้ Private Blockchain สำหรับ Test และ Public Blockchain สำหรับ Production เป็นต้น

สุดท้าย Truffle มี Blockchain สำหรับการ Test โดยเฉพาะ ทำให้เราสามารถทดสอบ Smart Contract ได้โดยไม่ต้องสร้าง Account ใหม่, Unlock Account ทุกครั้งที่สร้าง Transaction, และทำ Mining เพื่อเก็บ Transaction

ถ้าไม่ใช้ Truffle หากเราต้องการ Test การทำงานของ Smart Contract เราก็ต้องสร้าง Private Blockchain ขึ้นมา ถ้าคุณผู้อ่านไม่เคยสร้าง Private Blockchain สามารถดูวิธีการสร้างได้ที่ลิงก์นี้เลยค่ะ

จากลิงก์นี้จะเห็นได้ว่า การจะใช้งาน Private Blockchain เพื่อทดสอบการทำงาน เราจะต้องสร้าง Account, Unlock Account เมื่อจะส่ง Transaction หรือ Deploy Smart Contract, ทำ Mining เพื่อเก็บ Transaction ด้วยตนเอง

มาถึงตรงนี้แล้ว ผู้เขียนหวังว่าคุณผู้อ่านจะเข้าใจว่า Truffle คืออะไรและทำไมต้องใช้? Truffle ทำให้การทำ DApp เป็นเรื่องง่ายอย่างไร?

ผู้เขียนก็ขอจบตอนเพียงเท่านี้นะคะ ในตอนถัดไป เราจะเริ่มเล่น Truffle กันเลยค่ะ

ขอขอบคุณคุณผู้อ่านที่อ่านบทความมาถึงตรงนี้ด้วยนะคะ แล้วพบกันใหม่ สวัสดีค่ะ 🙂

Thank you for icons:
Contract by @Kiranshastry
Ethereum by @Smashicons
Icons is licensed by CC 3.0 BY
Facebook Comments