ERC-20 là gì?

Trả lời nhanh: ERC-20 là chuẩn giao diện (EIP-20, đề xuất tháng 11/2015) cho token có thể thay thế lẫn nhau trên Ethereum. Một hợp đồng thông minh có 6 hàm bắt buộc và 2 sự kiện theo chuẩn này thì ví, sàn và ứng dụng DeFi xử lý được ngay mà không cần viết mã riêng cho từng token.

Điểm chính

  • ERC-20 không phải một đồng coin. Nó là bộ quy ước về tên hàm, tham số và sự kiện mà hợp đồng token phải có.
  • Số dư token nằm trong bộ nhớ của hợp đồng token, không nằm trong ví của bạn.
  • Cặp approve và transferFrom cho phép ứng dụng rút token thay bạn. Đây cũng là nguồn rủi ro lớn nhất với người dùng.
  • Chuẩn chỉ quy định giao diện. Quy tắc phát hành, khoá, thu hồi do từng hợp đồng tự quyết định.
Mục lục
  1. ERC-20 là gì và vì sao nó tồn tại?
  2. Một token ERC-20 thực sự nằm ở đâu?
  3. 6 hàm và 2 sự kiện bắt buộc của ERC-20 làm gì?
  4. Cơ chế approve và transferFrom hoạt động ra sao?
  5. Rủi ro thường gặp với token ERC-20 là gì?
  6. ERC-20 khác ERC-721 và các chuẩn token khác thế nào?
  7. ERC-20 được dùng vào việc gì trong thực tế?
  8. ERC-20 với doanh nghiệp Việt Nam: cần cân nhắc gì?
  9. Ưu điểm và hạn chế của chuẩn ERC-20
  10. Khi nào nên và không nên dùng ERC-20?
  11. Câu hỏi thường gặp

ERC-20 là gì và vì sao nó tồn tại?

ERC là viết tắt của Ethereum Request for Comments. Số 20 là số của đề xuất. Theo lịch sử trên kho EIPs, đề xuất “Token standard” được tạo ngày 19/11/2015, và Fabian Vogelsteller là người đưa ra. Sau đó nó được chuẩn hoá thành EIP-20, nhưng cộng đồng vẫn gọi là ERC-20.

Trước chuẩn này, mỗi dự án phát hành token đặt tên hàm theo ý mình. Một ví muốn hiển thị số dư 100 token khác nhau thì phải viết 100 đoạn mã tích hợp. Chuẩn ERC-20 giải quyết đúng chỗ đó: mọi token chỉ cần có cùng tên hàm và cùng kiểu dữ liệu, ví hay sàn gọi một lần là dùng được cho tất cả.

Nói cách khác, ERC-20 giống ổ cắm điện chuẩn. Nó không quy định thiết bị cắm vào là gì, chỉ quy định hình dạng chân cắm. Vì vậy hai token ERC-20 có thể làm việc hoàn toàn khác nhau, chẳng hạn một stablecoin và một token quản trị, nhưng ví nào cũng hiển thị và chuyển được cả hai.

Nếu bạn chưa rõ khác biệt giữa coin và token, hãy đọc bài phân biệt coin và token. Tóm tắt: coin như ETH là tài sản gốc của mạng, còn token ERC-20 là bản ghi do một hợp đồng thông minh tạo ra và quản lý trên Ethereum.

Một token ERC-20 thực sự nằm ở đâu?

Đây là điểm nhiều bài giải thích bỏ qua. Khi ví hiển thị “500 token”, ví không giữ 500 đơn vị nào cả. Ví chỉ giữ khoá riêng. Số 500 là một dòng trong bảng ánh xạ (mapping) bên trong hợp đồng token, kiểu “địa chỉ của bạn → 500”. Ví gọi hàm balanceOf với địa chỉ của bạn để đọc dòng đó.

Hệ quả thực tế:

  • Chuyển token nghĩa là hợp đồng trừ số ở dòng của người gửi và cộng vào dòng của người nhận. Không có “đồng token” nào di chuyển.
  • Muốn thấy token, ví phải biết địa chỉ hợp đồng. Hai hợp đồng khác nhau có thể cùng đặt ký hiệu “USDC”, nên phải kiểm tra đúng địa chỉ hợp đồng, không kiểm tra theo tên.
  • Người dùng vẫn cần ETH để trả phí khi chuyển token ERC-20, vì mỗi lần chuyển là một giao dịch gọi hợp đồng. Chi tiết xem bài gas fee là gì.

Hợp đồng token là một hợp đồng thông minh chạy trên máy ảo EVM của mạng Ethereum. Ethereum không “biết” token là gì. Nó chỉ thực thi mã của hợp đồng, còn ý nghĩa của token nằm ở quy ước ERC-20.

Sơ đồ ba lớp: lớp ứng dụng gồm ví, sàn và DeFi; lớp giao diện ERC-20 gồm 6 hàm và 2 sự kiện; lớp Ethereum lưu trạng thái hợp đồng
Ứng dụng chỉ cần biết lớp giữa. Số dư thật nằm ở lớp dưới cùng, trong bộ nhớ hợp đồng. Sơ đồ khái niệm.

6 hàm và 2 sự kiện bắt buộc của ERC-20 làm gì?

Theo tài liệu ethereum.org về EIP-20, hợp đồng phải cài đặt sáu hàm và phát hai sự kiện. Ba hàm name, symbol, decimals là tuỳ chọn về mặt chuẩn, nhưng gần như token nào cũng có.

Thành phần Việc nó làm Ai thường gọi
totalSupply() Trả tổng lượng token đang có Trang theo dõi, sàn
balanceOf(chủ sở hữu) Trả số dư của một địa chỉ Ví
transfer(đến, số lượng) Chuyển từ địa chỉ gọi hàm sang địa chỉ khác Người dùng qua ví
approve(người chi tiêu, số lượng) Cho phép một địa chỉ khác rút tối đa một số lượng Người dùng qua ví
allowance(chủ, người chi tiêu) Trả hạn mức còn lại đã cấp Ứng dụng, công cụ rà soát
transferFrom(từ, đến, số lượng) Chuyển thay người khác, trong hạn mức đã cấp Hợp đồng DEX, cho vay
Sự kiện Transfer Ghi nhật ký mỗi lần số dư đổi, kể cả phát hành mới Trình duyệt khối, indexer
Sự kiện Approval Ghi nhật ký mỗi lần cấp hạn mức Công cụ rà soát quyền

Hai sự kiện quan trọng không kém các hàm. Etherscan hay ví không đọc lại toàn bộ bộ nhớ hợp đồng sau mỗi khối. Họ đọc nhật ký sự kiện để dựng lịch sử giao dịch token. Hợp đồng nào quên phát sự kiện thì số dư vẫn đúng, nhưng lịch sử trong ví sẽ thiếu.

Decimals: vì sao không có số thập phân trong hợp đồng

Hợp đồng chỉ lưu số nguyên. Trường decimals cho ứng dụng biết phải chia cho 10 mũ bao nhiêu để hiển thị. Ví dụ minh hoạ: token có decimals bằng 6 và hợp đồng lưu 1500000 thì ví hiển thị 1,5. Tài liệu về chu trình nạp USDC vào giao thức cho vay cũng dùng đơn vị 6 chữ số thập phân, nên 1.000 USDC tương ứng 1.000.000.000 đơn vị nhỏ nhất. Nhiều token khác dùng 18 chữ số, giống ETH. Nhầm decimals là lỗi tích hợp thường gặp: gửi sai một bậc là sai một triệu lần.

Cơ chế approve và transferFrom hoạt động ra sao?

Chuyển trực tiếp bằng transfer thì đơn giản: bạn ký, hợp đồng trừ dòng của bạn. Nhưng một sàn phi tập trung không thể “nhận” token của bạn theo cách ETH được gửi kèm lời gọi, vì hợp đồng token không báo cho hợp đồng nhận biết là vừa có token đến. Chuẩn giải quyết bằng mô hình hai bước:

  1. Bạn ký giao dịch gọi approve trên hợp đồng token, chỉ định địa chỉ ứng dụng và hạn mức.
  2. Ứng dụng gọi transferFrom để rút token từ địa chỉ của bạn trong hạn mức đó.

Theo hướng dẫn của Speedrun Ethereum, mô hình tách quyền và hành động này ra đời từ giới hạn độ sâu ngăn xếp gọi của EVM thời kỳ đầu. Nó giúp các hợp đồng ghép với nhau linh hoạt hơn, nhưng để lại một hạn mức tồn tại cho đến khi bị dùng hết hoặc bị thu hồi.

Sơ đồ bốn bước: ví gọi approve, hợp đồng ghi allowance, ứng dụng gọi transferFrom, số dư đổi và phát sự kiện Transfer
Bước 1 và 2 tốn một giao dịch của bạn. Bước 3 và 4 do ứng dụng khởi động, trong hạn mức bạn đã cấp. Sơ đồ khái niệm.

Ví dụ minh hoạ: đổi token trên một sàn phi tập trung

Giả sử bạn muốn đổi 200 đơn vị token A sang token B trên một DEX. Ví hiện hai lần ký: lần đầu là approve cho hợp đồng router của sàn, lần sau là lệnh swap. Ở lần ký thứ hai, router gọi transferFrom để rút 200 token A. Nếu lần ký đầu bạn chọn “hạn mức tối đa” thay vì 200, hợp đồng router sẽ rút được toàn bộ token A của bạn về sau, kể cả những lần bạn không giao dịch. Đó là lý do phần rủi ro bên dưới quan trọng.

Rủi ro thường gặp với token ERC-20 là gì?

Hạn mức không giới hạn và hạn mức bị quên

Nhiều ứng dụng đề xuất sẵn hạn mức vô hạn để lần sau không phải ký approve lại. Tiện, nhưng nếu hợp đồng ứng dụng bị khai thác lỗi hoặc bạn bị dẫn tới trang giả mạo, kẻ xấu rút được token trong hạn mức đó mà không cần khoá riêng của bạn. Cách phòng: cấp đúng số lượng cần dùng, và định kỳ rà các hạn mức đang mở bằng công cụ xem quyền của trình duyệt khối rồi thu hồi bằng cách đặt lại hạn mức về 0.

Điều kiện tranh đua khi đổi hạn mức

Nếu bạn đổi hạn mức từ 100 sang 50 trong khi người chi tiêu đã thấy giao dịch đang chờ, người đó có thể rút 100 trước, rồi rút thêm 50 sau khi hạn mức mới có hiệu lực. Vì vậy hướng dẫn thực hành là đặt về 0 trước rồi mới đặt giá trị mới. Giao dịch chờ xử lý có thể bị quan sát, xem thêm bài mempool là gì. Một số token bổ sung chữ ký cấp quyền theo EIP-2612 (hàm permit) để cấp hạn mức bằng chữ ký ngoài chuỗi, nhưng đó là phần mở rộng, không thuộc 6 hàm bắt buộc.

Gửi token vào chính địa chỉ hợp đồng token

Theo mục “Known issues” của ethereum.org, transfer và transferFrom chuyển token bất kể bên nhận có biết xử lý hay không. Lỗi phổ biến nhất là gửi token (ví dụ USDT) vào địa chỉ của chính hợp đồng token, và lượng token đó thường không lấy lại được. Tài liệu khuyến nghị hợp đồng nên từ chối kiểu chuyển này bằng một dòng kiểm tra địa chỉ đích.

Token giả và hợp đồng có đặc quyền

Ai cũng triển khai được hợp đồng ERC-20 mà không cần đăng ký với ai, nên việc tồn tại một token không nói lên điều gì về giá trị hay độ tin cậy. Chuẩn cũng không cấm hợp đồng có hàm phát hành thêm, tạm dừng chuyển hay đưa địa chỉ vào danh sách đen. Trước khi nhận hoặc dùng token nào, hãy đọc xem hợp đồng có quyền đặc biệt nào và ai nắm quyền đó. Cũng cần lưu ý một số token lớn lệch chuẩn nhỏ, chẳng hạn không trả giá trị bool, khiến mã tích hợp viết cẩu thả bị lỗi.

Bài này giải thích kỹ thuật, không phải khuyến nghị mua, bán hay nắm giữ bất kỳ token nào. Token ERC-20 có thể mất giá trị, bị khoá hoặc bị lừa đảo, và việc chuyển nhầm trên blockchain thường không đảo ngược được.

ERC-20 khác ERC-721 và các chuẩn token khác thế nào?

Điểm khác cốt lõi là tính thay thế. Trong ERC-20, mọi đơn vị giống hệt nhau: 1 token của bạn bằng 1 token của người khác. Trong ERC-721, mỗi token có một mã định danh riêng, nên không đổi ngang cho nhau được. Phần này được trình bày chi tiết ở bài NFT là gì.

Tiêu chí ERC-20 ERC-721 TRC-20 (TRON)
Tính chất Có thể thay thế Không thể thay thế Có thể thay thế
Đơn vị dữ liệu Số dư theo địa chỉ Chủ sở hữu theo mã token Số dư theo địa chỉ
Chia nhỏ được Có, nhờ decimals Không Có
Mạng chạy Ethereum và các mạng tương thích EVM Cùng nhóm mạng TRON
Ví dụ dùng Stablecoin, token quản trị Tài sản độc nhất Giao diện tương tự ERC-20

Cột TRC-20 cho thấy ERC-20 trở thành khuôn mẫu mà các mạng khác mô phỏng lại. Theo so sánh của Mitrade, điểm khác chính giữa ERC-20 và TRC-20 là nền tảng blockchain, còn bộ hàm cơ bản giống nhau. Trên các mạng Layer 2 tương thích EVM, token ERC-20 cũng được triển khai với cùng giao diện, xem thêm Layer 1 và Layer 2. Cùng một ký hiệu trên các mạng khác nhau là các hợp đồng khác nhau, và chuyển nhầm mạng là lỗi hay gặp.

ERC-20 được dùng vào việc gì trong thực tế?

  • Stablecoin: USDT và USDC có bản phát hành theo chuẩn ERC-20 trên Ethereum. Cơ chế giữ giá và rủi ro dự trữ nằm ngoài chuẩn, xem bài stablecoin là gì.
  • Token quản trị: mỗi đơn vị là một phiếu biểu quyết trong giao thức. Số phiếu chính là số dư lấy từ balanceOf.
  • Token tiện ích trong ứng dụng: trả phí dịch vụ hay quy đổi quyền sử dụng trong một nền tảng.
  • Token đại diện tài sản: hợp đồng ghi lại quyền yêu cầu với một tài sản ngoài chuỗi. ERC-20 chỉ ghi số dư. Quyền pháp lý đối với tài sản thật phụ thuộc hợp đồng giữa các bên, không do chuẩn bảo đảm.

ERC-20 với doanh nghiệp Việt Nam: cần cân nhắc gì?

Về kỹ thuật, doanh nghiệp muốn thử token nội bộ, chẳng hạn điểm thưởng hoặc phiếu đối tác, có thể dùng thư viện hợp đồng mẫu như OpenZeppelin và viết bằng Solidity, thay vì tự viết từ đầu. Ngay cả khi triển khai trên mạng thử, đội kỹ thuật vẫn cần kiểm toán mã trước khi dùng thật, vì lỗi trong hợp đồng không sửa được sau khi triển khai nếu không thiết kế sẵn cơ chế nâng cấp.

Về pháp lý, tính chất của token (điểm thưởng, chứng khoán, tài sản mã hoá hay thứ khác) quyết định khung quản lý áp dụng, chứ tên gọi ERC-20 không quyết định. Hãy đối chiếu với bài tài sản mã hoá tại Việt Nam và hỏi luật sư trước khi phát hành hoặc cho công chúng giao dịch. Bài này không tư vấn pháp lý cho từng trường hợp.

Ưu điểm và hạn chế của chuẩn ERC-20

Ưu điểm

  • Tương thích rộng: ví, sàn, trình duyệt khối đều hỗ trợ sẵn.
  • Phát hành không cần xin phép ai. Một hợp đồng đáp ứng giao diện là dùng được ngay.
  • Đơn giản. Chỉ sáu hàm nên dễ kiểm toán và dễ ghép vào hợp đồng khác.

Hạn chế

  • Chuẩn không phân biệt được hợp đồng nhận có xử lý được token hay không, dẫn tới mất token khi gửi nhầm.
  • Mô hình approve để lại hạn mức tồn tại lâu, tạo bề mặt rủi ro.
  • Giao diện không có quy định về tuân thủ, như hạn chế người nhận hay khoá chuyển nhượng. Những tính năng đó phải do các chuẩn mở rộng hoặc mã riêng bổ sung.
  • Mỗi lần chuyển cần ETH để trả phí, gây khó cho người mới có ví chỉ chứa token.

Khi nào nên và không nên dùng ERC-20?

Nên dùng khi bạn cần một đơn vị giá trị chia nhỏ được, mọi đơn vị như nhau, và muốn ví cùng ứng dụng bên thứ ba dùng được ngay. Điểm thưởng công khai, token quản trị hay đơn vị thanh toán trong một giao thức đều phù hợp.

Không nên dùng khi mỗi mục cần danh tính riêng (hồ sơ, chứng chỉ, tài sản độc nhất), vì khi đó ERC-721 hoặc một chuẩn khác hợp lý hơn. Cũng không phù hợp khi dữ liệu cần giữ riêng tư hay cần thu hồi, sửa theo quy trình nghiệp vụ: số dư và lịch sử chuyển đều công khai trên chuỗi công cộng, và hợp đồng thuần ERC-20 không có cơ chế hoàn tác. Trong trường hợp đó, một cơ sở dữ liệu thông thường hoặc mạng được cấp phép thường đơn giản hơn, xem bài blockchain khác database.

Câu hỏi thường gặp

ERC-20 là coin hay token?

ERC-20 không phải coin cũng không phải token. Nó là tên của chuẩn giao diện. Các tài sản tuân theo chuẩn đó gọi là token ERC-20. Coin như ETH là tài sản gốc của mạng và không do hợp đồng ERC-20 quản lý.

Địa chỉ ví ERC-20 có khác địa chỉ ví Ethereum không?

Không. Cùng một địa chỉ Ethereum nhận được ETH lẫn mọi token ERC-20. Cái khác nhau là hợp đồng token mà bạn tra số dư. Cũng vì vậy ví chỉ hiển thị token khi nó nhận ra địa chỉ hợp đồng tương ứng.

Tại sao tôi chuyển token ERC-20 mà vẫn bị trừ ETH?

Mỗi lần chuyển token là một giao dịch gọi hàm trong hợp đồng, nên cần trả phí gas bằng ETH, không bằng chính token đó. Ví chỉ có token mà không có ETH sẽ không gửi đi được.

Approve có làm mất token ngay không?

Không. Approve chỉ cấp hạn mức cho người chi tiêu, token vẫn nằm ở địa chỉ của bạn. Rủi ro xảy ra khi người chi tiêu là hợp đồng bị khai thác hoặc độc hại và hạn mức còn mở. Hãy cấp hạn mức vừa đủ và định kỳ thu hồi quyền không còn dùng.

Gửi nhầm token ERC-20 có lấy lại được không?

Thông thường là không. Giao dịch trên blockchain không đảo ngược được, và nếu địa chỉ nhận là hợp đồng không có hàm rút thì token bị kẹt. Chỉ khi chủ địa chỉ nhận có quyền và thiện chí hoàn lại thì mới lấy lại được. Hãy gửi thử một lượng nhỏ trước và kiểm tra kỹ mạng cùng địa chỉ.

ERC-20 và seed phrase hay ví lạnh liên quan thế nào?

Quyền điều khiển token ERC-20 nằm ở khoá riêng của địa chỉ đang có dòng số dư trong hợp đồng. Bảo vệ khoá đó là điều kiện tiên quyết, xem bài ví blockchain là gì để biết ví nóng và ví lạnh khác nhau ra sao.

trang tin công nghệ VBPO cập nhật tin tức và kiến thức công nghệ cho doanh nghiệp Việt Nam. Xem thêm các bài cùng chuyên mục Blockchain cơ bản.