ERC-20 คือ อะไร มีประโยชน์อย่างไร

jirawat pattanayutanachot
2 min readFeb 5, 2022

หลายๆคนที่เคยศึกษาโลกของ คริปโตเคอร์เรนซี่ เชื่อว่าต้องเคยได้ยินคำว่า ERC-20 ผ่านหูมาบ้างไม่มากก็น้อย ว่าเเต่เคยสงสัยกันไหมครับว่า ERC-20 มันคือ อะไร และมีประโยชน์อย่างไร

ในโลก Blockchain โดยทั่วไปเราจะสามารถแบ่งเหรียญออกเป็น 2 ชนิดใหญ่ๆ ได้ คือ

  1. Native Token : คือ เหรียญประจำ Chain นั้นๆ โดยส่วนมาก จะถูกสร้าง และฝั่งไว้ใน code หรือ genesis block ของ Chain นั้นๆ ยกตัวอย่าง เช่น BTC ของ Bitcoin Network, ETH ของ Ethereum เป็นต้น
  2. Non-native Token : คือ เหรียญที่ถูกสร้างขึ้นมาบน Chain ใดๆ ทีหลัง ซึ่งโดยส่วนมากจะถูกสร้าง โดยการใช้งาน Feature smart contract ของแต่ละ Chain เช่น SHIB, LINK เป็นต้น

Ethereum กับ Non-native Token

ด้วยความที่ Ethereum เป็น Blockchain ที่รองรับ Smart Contract ตั้งแต่ยุคแรกๆ ทำให้มี Non-native Token เกิดขึ้นมาเป็นจำนวนมาก ทำให้ทาง Ethereum เองมองเห็นปัญหาในเรื่องของมาตราฐานการพัฒนา รวมไปถึงความเข้ากันได้ของ Smart Contract ของแต่ละ Token เพื่อที่จะทำให้ Non-native Token ใน Chain สามารถติดต่อสื่อสารกันได้ง่ายขึ้น จึงออกมาตราฐานการสร้าง Non-native Token (ต่อจากนี้ไปจะขอเรียกว่า Token) ในรูปแบบต่างๆขึ้นมา โดยวันนี้เราจะพูดถึงเพียงแค่ ERC-20

ตามเอกสารของ Ethereum ระบุไว้ว่า Smart Contract ที่จะมีความเข้ากันได้กับมาตราฐาน ERC-20 นั้นจะต้อง Implement function และ event ต่างๆดังต่อไปนี้

Methods (function)

function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)

Events

event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

โดยแต่ละ Function จะมีวัตถุประสงค์ดังต่อไปนี้

name() สำหรับเรียกดูชื่อของ Token

symbol() สำหรับเรียกดู symbol ของ Token

decimals() สำหรับเรียกดูจำนวน จุดทศนิยม ของ Token

totalSupply() สำหรับเรียกดูจำนวนเหรียญทั้งหมดของ Token

balanceOf(address) สำหรับใช้ดูยอดคงเหลือของ Token ของ Address ที่ระบุ

transfer(to, value) สำหรับใช้สั่งโอน Token ออกจาก Address ของคนเรียกใช้งาน ไปยัง Address ปลายทาง ตามจำนวนที่ระบุ มักจะใช้ในการโอน Token ไป-มา ระหว่างผู้ใช้งานด้วยกันเอง

transferFrom(from, to, value) ใช้สำหรับสั่งโอน Token ออกจาก Address ต้นทาง ไปยัง Address ปลายทาง ตามจำนวนที่ระบุ มักจะใช้ในการสั่งโอน Token ผ่าน Smart Contract อื่นๆ

approve(spender, value) ใช้สำหรับให้ความยินยอมให้ spender สามารถทำการโอน Token ออกจาก Address ของผู้เรียกใช้งาน function นี้ โดย spender จะไม่สามารถทำการโอน Token ได้เกินจำนวนที่ระบุ

allowance(owner, spender) ใช้สำหรับตรวจสอบยอดคงเหลือที่ Address owner ได้ยินยอมให้ spender ให้สามารถทำการโอน Token ออกจาก Address ของ owner ได้

และแต่ละ Event จะมีวัตถุประสงค์ดังต่อไปนี้

transfer(from, to, value) จะต้องเรียกใช้เมื่อมีการโอน Token โดยจะแม้ว่าจะเป็นการโอนจำนวน 0 Token ก็ตาม

approve(owner, spender, value) จะต้องเรียกใช้เมื่อมีการเรียกใช้งาน Function approve สำเร็จ

ซึ่งเราจะเห็นว่าการมาตราฐาน ERC-20 จะช่วยให้รูปแบบการเชื่อมต่อ (Interface) ของ Token smart contract มีความเป็นสากล มีมาตราฐานมากขึ้น ทำให้งานต่อการในไปใช้งานในรูปแบบต่างๆมากขึ้น

โดยในครั้งหน้าเราจะพาไปดูกันว่า หากเราต้องการที่จะสร้าง ERC-20 Token ด้วยตนเอง จะสามารถทำได้อย่างไร :)

--

--