Nội dung
Tìm hiểu chi tiết về các tiêu chuẩn của Ethereum và tiêu chuẩn ERC-20
Tiêu chuẩn ERC-20 cho phép các nhà phát triển có thể xây dựng những ứng dụng token có thể tương thích với các sản phẩm và dịch vụ khác.
Từ khi ra mắt vào ngày 30/07/2015, cộng đồng Ethereum đã áp dụng nhiều tiêu chuẩn để giữ cho các dự án (như các nền tảng và ví Ethereum) có thể tương tác tốt với nhau giữa những lần nâng cấp bổ sung. Việc này nhằm hoàn thiện cũng như đảm bảo cho các hợp đồng thông minh và các Dapp có thể hoạt động tốt chức năng của chúng.
Những tiêu chuẩn thường được giới thiệu lần đầu dưới dạng các EIP (hay các đề xuất cải thiện Ethereum), được khởi xướng và thảo luận giữa các thành viên cộng đồng thông qua một quy trình đề xuất EIP tiêu chuẩn.
Quy trình đề xuất EIP tiêu chuẩn được mô tả như hình trên, trong đó:
Ngoài ra, các tác giả EIP sẽ được thông báo nếu có bất kỳ thay đổi thuật toán nào đối với trạng thái EIP của họ.
Đối với những đề xuất EIP mới, một biên tập viên sẽ làm các bước sau:
Nếu EIP chưa sẵn sàng, biên tập viên sẽ gửi lại cho tác giả để sửa đổi, kèm với các hướng dẫn chỉnh sửa cụ thể.
Khi EIP đã sẵn sàng cho vào kho lưu trữ, biên tập viên EIP sẽ:
Nhiều EIP được viết và duy trì bởi các nhà phát triển có quyền chỉnh sửa trên mã nền của Ethereum. Các biên tập viên EIP sẽ theo dõi các thay đổi EIP và sửa các lỗi cấu trúc, ngữ pháp và chính tả.
Các biên tập viên chỉ làm các phần việc liên quan đến hành chính và biên tập. Họ sẽ không đưa ra bất kì ý kiến hay nhận định nào về các EIP mà họ xử lý.
Một số EIP liên quan đến các tiêu chuẩn cấp ứng dụng (ví dụ: Tiêu chuẩn định dạng hợp đồng thông minh), được biết dưới dạng ERC (hay Ethereum Requests for Comment). Hiện nay, có nhiều ERC là các tiêu chuẩn quan trọng được sử dụng rộng rãi trên toàn hệ sinh thái Ethereum, bao gồm các tiêu chuẩn đã được gán trạng thái Final như:
Mã số | Loại tiêu chuẩn | Tác giả |
20 | Tiêu chuẩn cho token | Fabian Vogelsteller, Vitalik Buterin |
55 | Tiêu chuẩn mã hóa địa chỉ checksum đa trường hợp | Vitalik Buterin, Alex Van de Sande |
137 | Tiêu chuẩn đặc điểm kỹ thuật cho dịch vụ tên miền Ethereum. | Nick Johnson |
162 | Tiêu chuẩn cho đơn vị đăng ký ENS Hash | Maurelian, Nick Johnson, Alex Van de Sande |
165 | Tiêu chuẩn giao diện hợp đồng thông minh | Christian Reitwießner, Nick Johnson, Fabian Vogelsteller, Jordi Baylina, Konrad Feldmeier, William Entriken |
181 | Tiêu chuẩn hỗ trợ ENS cho các địa chỉ Ethereum | Nick Johnson |
190 | Tiêu chuẩn đóng gói các hợp đồng thông minh Ethereum | Piper Merriam, Tim Coulter, Denis Erfurt, RJ Catalano, Iuri Matias |
191 | Tiêu chuẩn dữ liệu được xác nhận | Martin Holst Swende, Nick Johnson |
600 | Tiêu chuẩn phân bổ mục đích cho các ví Ethereum xác định | Nick Johnson, Micah Zoltu |
601 | Tiêu chuẩn phân cấp Ethereum cho các ví xác định | Nick Johnson, Micah Zoltu |
681 | Tiêu chuẩn định dạng URL cho các lệnh giao dịch | Daniel A. Nagy |
721 | Tiêu chuẩn cho NFT | William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs |
777 | Tiêu chuẩn token được cải tiến từ ERC-20 | Jacques Dafflon, Jordi Baylina, Thomas Shababi |
820 | Tiêu chuẩn chung cho việc đăng ký hợp đồng thông minh | Jordi Baylina, Jacques Dafflon |
1155 | Tiêu chuẩn token đa định dạng | Witek Radomski, Andrew Cooke, Philippe Castonguay, James Therien, Eric Binet, Ronan Sandford |
1167 | Tiêu chuẩn triển khai bytecode tối thiểu cho hợp đồng thông minh | Peter Murray, Nate Welch, Joe Messerman |
1363 | Tiêu chuẩn token có thể dùng để thanh toán | Vittorio Minacori |
1820 | Tiêu chuẩn chung cho việc đăng ký hợp đồng thông minh | Jordi Baylina, Jacques Dafflon |
2309 | Tiêu chuẩn mở rộng cho các giao dịch nối tiếp của ERC-721 | Sean Papanikolas |
2678 | Tiêu chuẩn đóng gói hợp đồng thông minh Ethereum đã được sửa đổi (EthPM v3) | g. nicholas d’andrea, Piper Merriam, Nick Gheorghita, Christian Reitwiessner, Ben Hauser, Bryant Eisenbach |
2981 | Tiêu chuẩn nhận thanh toán phí bản quyền NFT | Zach Burks, James Morgan, Blaine Malone, James Seibel |
3156 | Tiêu chuẩn Flash Loans | Alberto Cuesta Cañada, Fiona Kobayashi, fubuloubu, Austin Williams |
Token là thuật ngữ đại diện cho hầu hết mọi thứ trong Ethereum: Các tài sản (như cổ phần của một công ty), một đơn vị tiền tệ pháp định (như USD), một ounce vàng…
Một trong nhiều tiêu chuẩn phát triển của Ethereum đó là tập trung vào giao diện quản lý token. Các tiêu chuẩn này nhằm đảm bảo các hợp đồng thông minh vận hành xuyên suốt. Ví dụ: Khi một dự án mới phát hành một token bất kì, nó vẫn sẽ tương thích với các sàn giao dịch phi tập trung hiện có.
Các tiêu chuẩn token đang được áp dụng trên Ethereum:
Hợp đồng thông minh hiểu đơn giản là một chương trình chạy trên blockchain Ethereum. Đó là một tập hợp mã (chức năng của nó) và dữ liệu (trạng thái của nó) nằm ở một địa chỉ cụ thể trên blockchain Ethereum.
Hợp đồng thông minh là một loại tài khoản Ethereum. Điều này đồng nghĩa với việc nó có số dư và nó có thể thực hiện việc gửi các giao dịch trên mạng lưới. Tuy nhiên, những hợp đồng thông minh này không được kiểm soát bởi người dùng, thay vào đó, chúng được triển khai trên mạng lưới và vận hành theo như những gì đã được lập trình. Sau đó, tài khoản người dùng có thể tương tác với một hợp đồng thông minh bằng cách gửi các giao dịch để thực hiện một chức năng được quy định trên hợp đồng thông minh.
Hợp đồng thông minh có thể dùng để ràng buộc các quy tắc (như một hợp đồng thông thường) và tự động thực thi chúng thông qua các đoạn mã được lập trình sẵn. Theo thiết lập mặc định, không thể xoá các hợp đồng thông minh cũng như đảo ngược hay thu hồi các tương tác với chúng.
Nick Szabo – nhà khoa học máy tính nổi tiếng, trong bài viết của mình đã ví hợp đồng thông minh như một máy bán hàng tự động được số hoá. Với những dữ liệu đầu vào phù hợp, hợp đồng thông minh sẽ cho kết quả đầu ra luôn luôn được đảm bảo.
Để một máy bán hàng có thể tự động vận hành, người ta lập trình cho nó theo logic sau: “tiền + lựa chọn mặt hàng = xuất loại mặt hàng đó”. Tương tự như vậy, một hợp đồng thông minh cũng được lập trình để xử lý các dữ liệu đầu vào và trả các kết quả đầu ra một cách hoàn toàn tự động. Nếu nói máy bán hàng tự động giúp tinh giảm nhân viên bán hàng, thì các hợp đồng thông minh giúp loại bỏ các đơn vị trung gian trong rất nhiều lĩnh vực và ngành công nghiệp.
Bất cứ ai cũng có thể viết một hợp đồng thông minh và triển khai nó vào mạng lưới. Người dùng chỉ cần học cách viết các đoạn mã bằng ngôn ngữ của hợp đồng thông minh cũng như có đủ ETH để triển khai hợp đồng của mình. Về mặt kỹ thuật, triển khai một hợp đồng thông minh là một giao dịch, vì vậy người dùng cần phải thanh toán phí gas như cách họ trả cho một giao dịch ETH thông thường. Tuy nhiên, phí gas để triển khai một hợp đồng thông minh cao hơn nhiều.
Ethereum cung cấp những ngôn ngữ thân thiện với các nhà phát triển để họ có thể viết hợp đồng thông minh như Solidity và Vyper.
Tuy nhiên, trước khi được triển khai vào mạng lưới, các hợp đồng thông minh cần được tổng hợp để máy ảo Ethereum (EVM) có thể dịch hiểu và lưu trữ được hợp đồng vào hệ thống.
Các hợp đồng thông minh là các API mở được chia sẻ và sử dụng bởi cộng đồng Ethereum. Người dùng không cần phải tự viết hợp đồng thông minh như một nhà phát triển Dapp mới có thể tham gia vào cộng đồng. Điều đó có nghĩa là người dùng có thể dễ dàng tích hợp các hợp đồng khác vào trong hợp đồng của mình để mở rộng khả năng thực thi của chúng. Thậm chí, các hợp đồng cũng có thể được dùng để thực hiện triển khai cho các hợp đồng khác.
Đầu tiên, hợp đồng thông minh không thể tự thu thập thông tin những sự kiện xảy ra trong “thế giới thực” vì chúng không thể gửi các yêu cầu dưới định dạng HTTP. Tuy nhiên, giới hạn này lại là mục đích được thiết lập ban đầu. Việc dựa vào thông tin bên ngoài có thể làm ảnh hưởng tới quá trình đồng thuận. Đây là một điều rất quan trọng đối với cơ chế bảo mật và tính phi tập trung. Có nhiều cách để khắc phục vấn đề này, trong số đó là sử dụng các Oracle.
Một hạn chế khác của hợp đồng thông minh là kích thước tối đa của hợp đồng. Một hợp đồng thông minh chỉ có thể chứa tối đa là 24KB hoặc nó sẽ bị hết phí gas. Vấn đề này có thể được xử lý bằng cách sử dụng The Diamond Pattern.
ERC-20 (Ethereum Request for Comments 20), được đề xuất bởi Fabian Vogelsteller vào tháng 11/2015, là một tiêu chuẩn nền tảng API giúp triển khai token trong các hợp đồng thông minh.
Tiêu chuẩn này cho phép đính kèm một API tiêu chuẩn cho các token trong hợp đồng thông minh. Tiêu chuẩn này cung cấp chức năng cơ bản để chuyển token, cũng như phê duyệt cho token thành một đơn vị tiền tệ để chi tiêu bởi những bên thứ ba khác trong chuỗi. Đây là một giao diện tiêu chuẩn cho phép bất kỳ token nào trên Ethereum cũng có thể sử dụng được trên các ứng dụng khác (từ ví đến các sàn giao dịch phi tập trung).
ERC-20 chứa một số chức năng mà một token tuân theo tiêu chuẩn này phải có khả năng thực hiện:
Mặc dù ERC-20 nhận được sự quan tâm rộng rãi và có rất nhiều token mới áp dụng theo tiêu chuẩn của nó, vẫn có nhiều người trong cộng đồng phát triển nhận thấy rằng ERC-20 bị hạn chế hoặc thiếu sót ở một vài khía cạnh như sau:
Tính năng | Lỗ hổng | Nguồn thông tin | Ví dụ |
Allowance | Rút tiền gấp đôi (front running) | Resolving the Multiple Withdrawal Attack on ERC20 Tokens | |
decimals() | Hệ thập phân có thể hơn 18 số | YamV2 có 24 số thập phân | |
Không tính đến việc các token thực hiện ngăn chặn nhiều cuộc tấn công rút tiền | Perpetual Protocol Audit issue 3.12 | ||
External Calls | Giá trị mà lệnh Call trả về chưa được kiểm tra | Unchecked call return value | |
DoS trả giá trị bất ngờ | DoS with unexpected revert | ||
Transfers | Lệnh transferFrom() không được bảo vệ | Bancor Network Hack 2020 – 1inch | |
Thiếu giá trị trả về | Missing return value bug — At least 130 tokens affected | ||
BalanceOf() | Sự khác biệt giữa thống kê kế toán nội bộ so với số dư thực tế | aToken Withdrawal Vulnerability | aToken |
Blacklistable | Địa chỉ trong danh sách đen không thể nhận hoặc gửi token | CENTRE appears to have blacklisted an address holding USDC for the first time | USDC (FiatToken) |
Mintable/Burnable | TotalSupply có thể bị thay đổi | ||
Pausable | Tất cả các chức năng có thể bị tạm dừng |
Vậy nên, kể từ khi phát triển ERC-20, một số tiêu chuẩn token thay thế cũng đã được đề xuất. Trong đó, có thể kể đến ERC-223, tiêu chuẩn này giúp giải quyết những vấn đề về các yếu tố phê duyệt và chuyển giao của ERC-20. ERC-621 là một lựa chọn thay thế khác, hỗ trợ đề xuất các chức năng cơ bản tương tự mà ERC-20 cung cấp nhưng bổ sung thêm khả năng tăng hoặc giảm tổng nguồn cung token. Bên cạnh đó, tiêu chuẩn ERC-827 là một chuẩn cho phép chủ sở hữu phê duyệt chi tiêu token của bên thứ ba. Mỗi đề xuất giao thức mới này đều lấy ERC-20 làm nền tảng ở một mức độ nào đó.
Hiện nay, hệ sinh thái Ethereum đã có rất nhiều token theo chuẩn ERC-20 được triển khai. Các token khác nhau được triển khai bởi những nhóm phát triển khác nhau, và có sự đánh đổi để tùy biến các chức năng nhằm phù hợp nhu cầu cũng như mục đích khác nhau của các dự án: Từ việc làm thế nào để tiết kiệm phí giao dịch đến việc nâng cao cải thiện tính bảo mật.
Trong thời gian vừa qua, tiêu chuẩn ERC-20 đã trở thành một tiêu chuẩn thống nhất cho việc tạo ra các token mới trên không gian tiền mã hoá. Tiêu chuẩn này đặc biệt phổ biến với các sự kiện ICO và các công ty gây quỹ cộng đồng. Hiện đã có hàng chục ngàn token khác nhau đã được phát hành và đang hoạt động theo tiêu chuẩn ERC-20.
Hai trong số các giao thức đang ứng dụng ERC-20 khá nổi tiếng là OpenZeppelin và ConsenSys. Trong đó, OpenZeppelin cung cấp một thư viện hợp đồng thông minh cho các nhà phát triển, còn ConsenSys làm về bảo mật blockchain và dịch vụ kiểm toán cho các hợp thông thông minh trên Ethereum.
Tiêu chuẩn ERC-20 đã thống trị thế giới tài sản tiền mã hoá trong nhiều năm qua và không khó để lý giải điều này. Nhờ có tiêu chuẩn ERC-20, bất kỳ ai cũng có thể triển khai một hợp đồng đơn giản để phù hợp cho nhiều trường hợp sử dụng (các token tiện ích, stablecoin…). Tuy nhiên, ERC-20 vẫn còn thiếu một số tính năng so với các tiêu chuẩn khác. Thời gian sẽ cho chúng ta thấy liệu sự phổ biến của ERC-20 có bị “soán ngôi” bởi tiêu chuẩn khác hay không.