วิธีการสร้าง Custom Task สำหรับ Hardhat
วันนี้มาลองทำ custom tasks สำหรับ Hardhat กันดีกว่า ซึ่งปกติแล้ว คำสั่งที่ผมมักใช้บ่อยๆ สำหรับ Hardhat คือ run
กับ test
ข้อดีของ Hardhat task คือ ทำให้เราสามารถเล่นกับ Command Line ได้มากขึ้น เช่น อยากส่ง argument, options ต่างๆ เพิ่มเติม นอกเหนือจาก คำสั่งของ Hardhat ปกติ เราแค่กำหนด task และกำหนด params ให้มัน ก็ทำให้เราสามารถใช้ options ได้แล้ว
Create sample Hardhat project
ทดสอบสร้างโปรเจ็ค Hardhat ขึ้นมาแบบง่ายๆ
จากนั้น Init Project แบบ basic sample project
หลังจากที่เรา Init project แล้ว จะมีไฟล์ hardhat.config.js
ข้างใน มี custom task อันนึงชื่อว่า accounts
Hardhat tasks
การดูว่า Hardhat มี tasks อะไรให้ใช้บ้าง ก็สามารถดูได้ด้วยคำสั่ง
หรือ
จะได้ผลลัพธ์แบบนี้
ซึ่งถ้าเราสังเกตตรง AVAILABLE TASKS จะเห็น
เหมือนกับ task ที่กำหนดไว้ใน hardhat.config.js
เลย
Create new task
ลองเพิ่ม Task ง่ายๆ แบบง่ายสุดคือ task ชื่อ ahoy เพื่อทำการแสดง Hello World ที่ไฟล์ hardhat.config.js
เมื่อรัน npx hardhat
จะเห็นว่ามี Available Task เพิ่มมาแล้ว
ลองรันคำสั่งดู
ได้ผลลัพธ์ :
Balance Task
ลองสร้าง Task สำหรับ check balance ดูบ้าง (เวลาที่ต้องการดูว่า task นั้นๆ ใช้คำสั่งอะไรมี option อะไรบ้าง ใช้ npx hardhat help <TASK>
)
addParams()
- คือกำหนด option ให้กับ task ครับ พร้อมคำอธิบายsetAction()
- เป็นการกำหนด action ให้กับ task โดยใช้taskArgs
ก็คือค่าที่ส่ง option จาก command linehre
- เป็น Hardhat runtime environment เป็น global variable ถ้าเราใช้คำสั่งnpx hardhat
hre.ethers
เป็นตัว hardhat-ethers ที wrap ethers.js และมี helper functions เพิ่มมานิดหน่อย
ทดสอบรัน script :
ตัว option
เราสามารถทำเป็น optional ได้ เช่น task เดิม แต่เปลี่ยน ถ้าไม่ส่ง --account
จะใช้ default
Create tasks folder
นอกจากเราสร้าง task ใน hardhat.config.js
เรายังสามารถสร้าง task ไว้ที่ไหนก็ได้ แล้วก็ import มาใช้ เช่น ตัวอย่าง สร้าง task ที่โฟลเดอร์ tasks ชื่อว่า block-number.js
ทีนี้ใน hardhat.config.js
เราก็แค่ import ไฟล์นี้มาใช้
แค่นี้เราก็ใช้ task ที่เราสร้างขึ้นมาได้แล้ว
สรุป
บทความนี้ก็เป็นตัวอย่างการใช้ Hardhat task เบื้องต้นด้วย JavaScript คิดว่าหลายๆ คนน่าจะพอเห็นภาพ และนำไปประยุกต์ใช้ได้หลากหลายครับ เช่น สร้าง task เอาไว้ ลอง test transfer ลอง approve ลอง logic เล็กๆ น้อยๆ รวมถึงลองใช้เป็นแบบ TypeScript จะเข้าใจง่ายกว่า เพราะจะรู้ว่าแต่ละ options, tasks, actions รับค่าอะไรบ้าง
ซึ่งจริงๆ ตัว task ของ hardhat ก็ยังทำอะไรได้มากกว่านี้ ตัวอย่างบทความ ที่น่าสนใจ อ่านเพิ่มเติมครับ Building your own Custom Hardhat Plugins from scratch
Happy Coding ❤️
Reference
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust