ก่อนหน้านี้ผมได้ทดลอง Hello World และสุ่มตัวเลขด้วยบริการ Off Chain Oracle บน KillSwitch Chain ไปแล้ว วันนี้ผมมาทดลองสร้างเหรียญ (Token) ERC20 ของตัวเอง บน KillChain Chain ซึ่งอยู่บน Main Network กันครับ โดยในบทความนี้จะมีเนื้อหาดังต่อไปนี้ครับ
● ERC20 คือ?
● ติดตั้ง Metamask
● ตั้งค่า Network สำหรับ KillSwtich Chain
● Openzeppelin คือ?
● สร้าง Smart Contract สำหรับสร้างเหรียญ บน Remix
● เพิ่มเหรียญของเราเองใน Metamask
● ดูข้อมูลเพิ่มเติมใน Explorer
ERC20 เป็นโปรตคอลสำหรับการสร้างโทเค็น (Token) บน Ethereum network โดย ERC ย่อมาจาก Ethereum Request for Comments และ 20 คือหมายเลขของข้อเสนอ หรือ พูดง่ายๆ ERC20 คือเป็นมาตราฐานหรือข้อเสนอแนะในการสร้าง Token ครับ ซึ่งเดี๋ยวผมจะอธิบายเพิ่มเติมภายหลังครับว่ามีฟังก์ชั่นการทำงานอะไรบ้าง?
ต่อจากนี้ไปเพื่อไม่ให้เสียเวลาเดี๋ยวผมจะพาลงมือสร้าง Token ของตนเองบน KillSwitch Chain โดยทำไปทีล่ะขั้นตอนเลยนะครับ
เริ่มจากติดตั้ง Metamask เป็นกระเป๋า (wallet) สำหรับบริหารจัดการ REI บน KillSwitch Chain โดยสามารถติดตั้งได้ที่ metamask.io จากนั้นติดตั้งตามขั้นตอน
เมื่อติดตั้ง Metamask และ มี 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ได้เลยครับ ทางทีมงานใจดีส่งมาให้ครับ
ในบทความนี้ผมจะสร้าง Toekn โดยใช้ OpenZeppelin ครับ ดังนั้นเรามาทำความรู้จัก OpenZeppelin กันนิดนึงนะครับ
OpenZeppelin มี Product อยู่ใน 2 อย่างครับ คือ
1. Contracts : มี source code smart contract ที่เขียนไว้แล้วที่มีความปลอดภัย สามารถนำมาใช้หรือนำไปต่อยอดได้ เดี๋ยวเราจะใช้ข้อนนี้ครับ
2. Defender : เป็น Platfrom สำหรับช่วยในการพัฒนา Smart Contract ในบทความนี้ไม่ได้ใช่ครับ
ต่อมาเรามาเริ่มใช้เครื่องมือคือ Remix ซึ่งเป็น IDE ที่สามารถเขียน compile และ deploy Smart Contract สำหรับสร้าง Token และภาษาที่ใช้ คือ Solidity
โดยให้เข้าไปที่ remix.ethereum.org > เลือก Solidity > เลือก New file > ตั้งชื่อไฟล์ MyToken.sol > ไว้ในตำแหน่งดังรูป
จากนั้นเพิ่มโค้ด ดังต่อไปนี้
จากนั้นผมขออธิบายโค้ดข้างต้นดังต่อไปนี้
บรรทัด 2: กำหนด version ของ solidity
บรรทัด 4: import ERC20 จาก OpenZeppelin
บรรทัด 6: ผมสร้าง contract ใหม่ชื่อ MyToken โดย extend ความสามารถมาจาก ERC20
บรรทัด 7 - 13: สร้าง constructor สำหรับรับค่า name (ชื่อ Token) symbol (ชื่อย่อ) และ initialSupply (จำนวนเหรียญทั้งหมด)
จากนั้น compile โดยไปที่หน้า SOLIDITY COMPILE > เลือก 0.8.7+commit > กด Compile MyToken.sol ดังรูป
จากนั้น Deploy ไปที่ KillSwitch Chain โดยไปที่หน้า DEPLOY & RUN TRANSACTIONS
> เลือก Injected Web3
> เลิอก MyToken - aftifacts/MyToken.sol
> กรอก NAME: Thannob Token อันนี้ คือ ชื่อของเหรียญที่เราต้องการครับ ใส่เองได้ตามในชอบเลยครับ
> กรอก SYMBOL: THT อันนี้ คือ ชื่อย่อของเหรียญที่เราต้องการครับ ใส่เองได้ตามในชอบเช่นกันครับ
> กรอก INITIALSUPPLY: 1000000000000000000000000 อันนี้ คือ จำนวนเหรียญทั้งหมด ซึ่งมี default ของ decimal เป็น 18 ดังนั้นถ้าต้องการ 1,000,000 เหรียญ ก็เอา 1,000,000 x 1e18 (1000000000000000000)
> เลือก Deploy
กด Confirm ค่าธรรมเนียมในการ Deploy โค้ด ซึ่งจ่ายเป็น REI ดังนี้
ซึ่งจะสังเกตว่าเค้าจะออกแบบให้ใช้ค่า gas น้อยมากๆครับ
หลังจาก Deploy Smart Contract เรียบร้อยแล้ว จะพบ Deployed Contracts (อยู่ด้านซ้ายล่างของหน้าจอ) ซึ่งจะพบฟังก์ชั่นที่เราสามารถเรียกใช้งานได้ ดังรูป
ต่อมาลองมาดูรายละเอียดของฟังก์ชั่นหลักๆกันครับ
● totalSupply(): สำหรับเรียกดูจำนวน Token ทั้งหมด
● balanceOf(address tokenOwner): สำหรับเรียกดูจำนวน Token ของแต่ละ address
● transfer(address to, uint tokens): สำหรับโอน Token ไปที่ address ปลายทาง
● approve(address spender, uint tokens): สำหรับกัน Token ให้กับ address (ลักษณะเหมือนการทำ cashier cheque)
● allowance(address tokenOwner, address spender): สำหรับตรวจสอบดูจำนวน Token ที่ approve() ไว้
● transferFrom(address from, address to, uint tokens) public returns (bool success): สำหรับโอน Token ที่ approve() ไว้ (เหมือนเอา cheque ไปขึ้นเงืน)
● increaseAllowance(address spender, uint256 addedValue): สำหรับเพิ่มจำนวน Token ที่กันไว้
● decreaseAllowance(address spender, uint256 subtractedValue): สำหรับลดจำนวน Token ที่กันไว้
● totalSupply(): สำหรับเรียกดูจำนวน Token ทั้งหมด
นอกจากนี้เราสามารถคัดลอก Contract address โดยกดที่ icon ในกรอบสีแดงดังรูป ซึ่งเอาไว้จะนำไปใช้นในการเพ่มเหรียญให้แสดงบน Metamask หรือดูรายละเอียดเพิ่มเติมใน Explorer ครับ
ต่อมาผมจะลองเรียกดูค่าของตัวแปรต่างๆ และดูจำนวนเหรียญทั้งหมดที่สร้างไว้ ซึ่งได้ผลลัพธ์ดังรูปครับ
ทั้งนี้เพื่อนๆสามารถลองเล่นฟังก์ชั่นๆข้างต้นได้เลยครับ หรือสามารถศึกษาข้อมุลเพิ่มได้ที่ doc ของ OpenZeppelin ครับ
ต่อมาเราจะเพิ่มเหรียญของเราให้แสดงบน Metamask จะมีขั้นตอนดังต่อไปนี้
ที่ไป Metamask > เลือก Assets > Import tokens
จากนั้นนำ contract address ที่คัดลอกไว้มาใส่ในช่อง Token Contract Address ซึ่งถ้าถูกต้องจะพบว่ามีข้อมูลปรากฎใน Token Symbol และ Token Decimal > เลือก Add Custom Token
เลือก Import Tokens
จากนั้นจะปรากฎ Token ของเราใน Assets ซึ่งสามารถกดที่ Token ของเราดังนี้
เรียบร้อยครับ Token ของเราปรากฎใน Metamask เรียบร้อย เราสามารถโอนไปให้เพื่อนๆก็ได้ครับลองดูครับผม
ทั้งนี้เราสามารถดูรายละเอียดของ Token เราได้ผ่านทาง Explorer โดยไปที่ https://reiscan.com/ จากนั้นลองนำ Contract Address มาค้นหาทางขวาบน จากนั้นจะปรากฎข้อมูลรายละเอียดต่างๆดังต่อไปนี้
ณ จุดนี้เท่ากับว่าเราสามารถสร้างเหรียญของตัวเอง บน KillSwitch Chain ซึ่งอยู่บน Main network รวมทั้งสามารถสั่งคำสั่งต่างๆ เช่น ดูจำนวนเหรียญ โอนเหรียญให้คนอื่น และสามารถดูเหรียญของตัวเองใน Metamask ได้ครับ
สุดท้ายนี้หวังว่าบทความนี้คงเป็นประโยชน์กับเพื่อนๆไม่มากก็น้อยนะครับ
บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต