ทดลองสร้างเหรียญของตัวเองบน KillSwitch Chain

ก่อนหน้านี้ผมได้ทดลอง 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 คือ?

ERC20 เป็นโปรตคอลสำหรับการสร้างโทเค็น (Token) บน Ethereum network โดย ERC ย่อมาจาก Ethereum Request for Comments และ 20 คือหมายเลขของข้อเสนอ หรือ พูดง่ายๆ ERC20 คือเป็นมาตราฐานหรือข้อเสนอแนะในการสร้าง Token ครับ ซึ่งเดี๋ยวผมจะอธิบายเพิ่มเติมภายหลังครับว่ามีฟังก์ชั่นการทำงานอะไรบ้าง?

ต่อจากนี้ไปเพื่อไม่ให้เสียเวลาเดี๋ยวผมจะพาลงมือสร้าง Token ของตนเองบน KillSwitch Chain โดยทำไปทีล่ะขั้นตอนเลยนะครับ

ติดตั้ง METAMASK

เริ่มจากติดตั้ง Metamask เป็นกระเป๋า (wallet) สำหรับบริหารจัดการ REI บน KillSwitch Chain โดยสามารถติดตั้งได้ที่ metamask.io จากนั้นติดตั้งตามขั้นตอน

ตั้งค่า Network สำหรับ KillSwtich Chain

เมื่อติดตั้ง 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ได้เลยครับ ทางทีมงานใจดีส่งมาให้ครับ

OpenZeppelin คือ?

ในบทความนี้ผมจะสร้าง Toekn โดยใช้ OpenZeppelin ครับ ดังนั้นเรามาทำความรู้จัก OpenZeppelin กันนิดนึงนะครับ

OpenZeppelin มี Product อยู่ใน 2 อย่างครับ คือ

1. Contracts : มี source code smart contract ที่เขียนไว้แล้วที่มีความปลอดภัย สามารถนำมาใช้หรือนำไปต่อยอดได้ เดี๋ยวเราจะใช้ข้อนนี้ครับ

2. Defender : เป็น Platfrom สำหรับช่วยในการพัฒนา Smart Contract ในบทความนี้ไม่ได้ใช่ครับ

สร้าง Smart Contract สำหรับสร้างเหรียญ บน Remix

ต่อมาเรามาเริ่มใช้เครื่องมือคือ 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 โค้ด

จากนั้น compile โดยไปที่หน้า SOLIDITY COMPILE > เลือก 0.8.7+commit > กด Compile MyToken.sol ดังรูป

Deploy ไปที่ KillSwitch Chain

จากนั้น 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 น้อยมากๆครับ

ฟังก์ชั่นของ ERC20 มีอะไรน่าสนใจบ้าง?

หลังจาก 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 จะมีขั้นตอนดังต่อไปนี้

ที่ไป Metamask > เลือก Assets > Import tokens

จากนั้นนำ contract address ที่คัดลอกไว้มาใส่ในช่อง Token Contract Address ซึ่งถ้าถูกต้องจะพบว่ามีข้อมูลปรากฎใน Token Symbol และ Token Decimal > เลือก Add Custom Token

เลือก Import Tokens

จากนั้นจะปรากฎ Token ของเราใน Assets ซึ่งสามารถกดที่ Token ของเราดังนี้

เรียบร้อยครับ Token ของเราปรากฎใน Metamask เรียบร้อย เราสามารถโอนไปให้เพื่อนๆก็ได้ครับลองดูครับผม

ดูข้อมูลเพิ่มเติมใน Explorer

ทั้งนี้เราสามารถดูรายละเอียดของ Token เราได้ผ่านทาง Explorer โดยไปที่ https://reiscan.com/ จากนั้นลองนำ Contract Address มาค้นหาทางขวาบน จากนั้นจะปรากฎข้อมูลรายละเอียดต่างๆดังต่อไปนี้

ณ จุดนี้เท่ากับว่าเราสามารถสร้างเหรียญของตัวเอง บน KillSwitch Chain ซึ่งอยู่บน Main network รวมทั้งสามารถสั่งคำสั่งต่างๆ เช่น ดูจำนวนเหรียญ โอนเหรียญให้คนอื่น และสามารถดูเหรียญของตัวเองใน Metamask ได้ครับ

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

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

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