Giới thiệu

Ethereum được thành lập bởi Vitalik Buterin vào năm 2014, định vị mình là một nền tảng nguồn mở để khởi chạy các ứng dụng phi tập trung (DApps). Nhiều động lực của Buterin trong việc tạo ra một blockchain mới bắt nguồn từ sự thiếu linh hoạt của giao thức Bitcoin.

Kể từ khi ra mắt, chuỗi khối Ethereum đã thu hút các nhà phát triển, doanh nghiệp và doanh nhân, tạo ra một ngành công nghiệp ngày càng tăng gồm những người dùng tung ra các hợp đồng thông minh và ứng dụng phân tán.

Trong bài viết này, chúng ta sẽ xem xét tiêu chuẩn ERC-20, một khuôn khổ quan trọng để tạo mã thông báo. Mặc dù nó dành riêng cho mạng Ethereum, nhưng khung này cũng truyền cảm hứng cho các tiêu chuẩn blockchain khác, chẳng hạn như BEP-2 của Binance Chain.


Tiêu chuẩn ERC-20 là gì?

Trong Ethereum, ERC là một Yêu cầu Nhận xét của Ethereum. Đây là những tài liệu kỹ thuật phác thảo các tiêu chuẩn để lập trình trên Ethereum. Đừng nhầm lẫn chúng với Đề xuất cải tiến Ethereum (EIP), giống như BIP của Bitcoin, đề xuất cải tiến cho chính giao thức. Thay vào đó, ERC nhằm mục đích thiết lập các quy ước giúp các ứng dụng và hợp đồng tương tác với nhau dễ dàng hơn.

Được ủy quyền bởi Vitalik Buterin và Fabian Vogelsteller vào năm 2015, ERC-20 đề xuất một định dạng tương đối đơn giản cho các token dựa trên Ethereum. Bằng cách làm theo phác thảo, các nhà phát triển không cần phải phát minh lại cái bánh xe. Thay vào đó, họ có thể xây dựng dựa trên nền tảng đã được sử dụng trong toàn ngành.

Sau khi mã thông báo ERC-20 mới được tạo, chúng sẽ tự động tương thích với các dịch vụ và phần mềm hỗ trợ tiêu chuẩn ERC-20 (ví phần mềm, ví phần cứng, sàn giao dịch, v.v.).

Cần lưu ý rằng tiêu chuẩn ERC-20 đã được phát triển thành EIP (cụ thể là EIP-20). Điều này xảy ra vài năm sau đề xuất ban đầu do nó được sử dụng rộng rãi. Tuy nhiên, thậm chí nhiều năm sau, cái tên “ERC-20” vẫn được giữ nguyên.


Tóm tắt nhanh về token Ethereum

Không giống như ETH (tiền điện tử gốc của Ethereum), mã thông báo ERC-20 không được giữ bởi tài khoản. Mã thông báo chỉ tồn tại bên trong một hợp đồng, giống như một cơ sở dữ liệu độc lập. Nó chỉ định các quy tắc cho mã thông báo (tức là tên, ký hiệu, khả năng phân chia) và giữ một danh sách ánh xạ số dư của người dùng tới địa chỉ Ethereum của họ.

Để di chuyển mã thông báo, người dùng phải gửi giao dịch đến hợp đồng yêu cầu hợp đồng phân bổ một số số dư của họ ở nơi khác. Ví dụ: nếu Alice muốn gửi 5.000 BinanceAcademyTokens cho Bob, cô ấy sẽ gọi một hàm bên trong hợp đồng thông minh BinanceAcademyToken để yêu cầu Bob thực hiện việc đó.


Users interacting with a smart contract


Cuộc gọi của cô ấy được thực hiện bên trong một giao dịch Ethereum thông thường trả 0 ETH cho hợp đồng mã thông báo. Lệnh gọi được đưa vào một trường bổ sung trong giao dịch, trường này chỉ rõ những gì Alice muốn thực hiện – trong trường hợp của chúng tôi là chuyển mã thông báo cho Bob.

Mặc dù cô ấy không gửi ether, cô ấy vẫn phải trả một khoản phí bằng mệnh giá đó để đưa giao dịch của mình vào một khối. Nếu cô ấy không có ETH, cô ấy cần nhận được một ít trước khi chuyển mã thông báo.

Đây là ví dụ thực tế về điều trên trên Etherscan: ai đó đang thực hiện lệnh gọi đến hợp đồng BUSD. Bạn có thể thấy mã thông báo đã được chuyển và một khoản phí đã được thanh toán, mặc dù trường Giá trị hiển thị rằng 0 ETH đã được gửi.

Bây giờ chúng ta đã bắt kịp tốc độ, chúng ta hãy xem xét kỹ hơn để hiểu rõ hơn về cấu trúc của một hợp đồng ERC-20 điển hình. 


Mã thông báo ERC-20 được tạo như thế nào?


Illustration of an ERC-20 token being created


Để tuân thủ ERC-20, hợp đồng của bạn cần bao gồm sáu chức năng bắt buộc: tổng cung, số dư, chuyển khoản, chuyển từ, phê duyệt và trợ cấp. Ngoài ra, bạn có thể chỉ định các hàm tùy chọn, chẳng hạn như tên, ký hiệu và số thập phân. Bạn có thể hiểu rõ những chức năng đó làm gì từ tên của chúng. Nếu không, đừng lo lắng - chúng tôi sẽ chia nhỏ chúng. 

Dưới đây là các chức năng xuất hiện trong ngôn ngữ Solidity được xây dựng có mục đích của Ethereum.


Tổng cung

hàm TotalSupply() trả về chế độ xem công khai (uint256)

Khi được người dùng gọi, hàm trên trả về tổng nguồn cung cấp mã thông báo mà hợp đồng nắm giữ.


Cán cân 

hàm BalanceOf(địa chỉ _owner) trả về chế độ xem công khai (số dư uint256)

Không giống như TotalSupply, BalanceOf nhận một tham số (một địa chỉ). Khi được gọi, nó sẽ trả về số dư nắm giữ mã thông báo của địa chỉ đó. Hãy nhớ rằng các tài khoản trên mạng Ethereum là công khai, vì vậy bạn có thể truy vấn số dư của bất kỳ người dùng nào miễn là bạn biết địa chỉ.


chuyển khoản

chuyển hàm (địa chỉ _to, uint256 _value) trả về công khai (bool thành công)

transfer chuyển token từ người dùng này sang người dùng khác một cách khéo léo. Tại đây, bạn cung cấp địa chỉ muốn gửi và số tiền cần chuyển.

Khi được gọi, quá trình chuyển sẽ kích hoạt một thứ gọi là sự kiện (chuyển sự kiện, trong trường hợp này), về cơ bản sẽ yêu cầu chuỗi khối bao gồm một tham chiếu đến nó.


chuyển từ

hàm transferFrom(địa chỉ _from, địa chỉ _to, uint256 _value) trả về công khai (bool thành công)

Hàm transferFrom là một giải pháp thay thế tiện dụng cho việc chuyển giao, cho phép khả năng lập trình cao hơn một chút trong các ứng dụng phi tập trung. Giống như chuyển khoản, nó được sử dụng để di chuyển mã thông báo, nhưng những mã thông báo đó không nhất thiết phải thuộc về người gọi hợp đồng. 

Nói cách khác, bạn có thể ủy quyền cho ai đó – hoặc một hợp đồng khác – chuyển tiền thay mặt bạn. Một trường hợp sử dụng có thể xảy ra liên quan đến việc thanh toán cho các dịch vụ dựa trên đăng ký, trong đó bạn không muốn gửi thanh toán theo cách thủ công hàng ngày/tuần/tháng. Thay vào đó, bạn chỉ cần để một chương trình làm điều đó cho bạn.

Chức năng này kích hoạt sự kiện tương tự như chuyển giao.


chấp thuận

hàm phê duyệt (địa chỉ _spender, uint256 _value) trả về công khai (bool thành công)

phê duyệt là một chức năng hữu ích khác từ quan điểm lập trình. Với chức năng này, bạn có thể giới hạn số lượng token mà hợp đồng thông minh có thể rút từ số dư của bạn. Nếu không có nó, bạn có nguy cơ hợp đồng bị trục trặc (hoặc bị lợi dụng) và đánh cắp toàn bộ số tiền của bạn. 

Lấy lại ví dụ của chúng tôi về mô hình đăng ký. Giả sử bạn có một lượng lớn BinanceAcademyTokens và bạn muốn thiết lập các khoản thanh toán định kỳ hàng tuần cho DApp phát trực tuyến. Bạn bận đọc nội dung của Binance Academy cả ngày lẫn đêm, nên bạn không muốn dành thời gian mỗi tuần để tạo giao dịch theo cách thủ công.

Bạn có số dư lớn BinanceAcademyTokens, vượt xa số tiền cần thiết để trả cho gói đăng ký. Để ngăn DApp tiêu thụ tất cả chúng, bạn có thể đặt giới hạn bằng phê duyệt. Giả sử đăng ký của bạn tốn một BinanceAcademyToken mỗi tuần. Nếu bạn giới hạn giá trị được phê duyệt ở mức 20 mã thông báo thì bạn có thể tự động thanh toán đăng ký của mình trong 5 tháng.

Tệ nhất, nếu DApp cố gắng rút tất cả tiền của bạn hoặc nếu phát hiện ra lỗi, bạn chỉ có thể mất 20 token. Nó có thể không lý tưởng, nhưng nó chắc chắn hấp dẫn hơn việc mất tất cả tài sản của bạn.

Khi được gọi, phê duyệt sẽ kích hoạt sự kiện phê duyệt. Giống như sự kiện chuyển giao, nó ghi dữ liệu vào blockchain.


trợ cấp 

trợ cấp chức năng (địa chỉ _owner, địa chỉ _spender) trả về chế độ xem công khai (uint256 còn lại)

trợ cấp có thể được sử dụng cùng với việc phê duyệt. Khi bạn đã cấp quyền hợp đồng để quản lý mã thông báo của mình, bạn có thể sử dụng quyền này để kiểm tra xem nó vẫn có thể rút bao nhiêu. Ví dụ: nếu đăng ký của bạn đã sử dụng hết 12 trong số 20 mã thông báo được phê duyệt, việc gọi hàm trợ cấp sẽ trả về tổng số là 8.


Các chức năng tùy chọn

Các chức năng được thảo luận trước đây là bắt buộc. Mặt khác, không cần phải bao gồm tên, ký hiệu và số thập phân nhưng chúng có thể làm cho hợp đồng ERC-20 của bạn đẹp hơn một chút. Tương ứng, chúng cho phép bạn thêm tên mà con người có thể đọc được, đặt ký hiệu (ví dụ: ETH, BTC, BNB) và chỉ định số lượng mã thông báo thập phân có thể chia hết cho. Ví dụ: mã thông báo được sử dụng làm tiền tệ có thể được hưởng lợi nhiều hơn từ việc có thể chia nhỏ hơn mã thông báo đại diện cho quyền sở hữu tài sản.


Hãy xem ví dụ này trên GitHub để xem các yếu tố này trong một hợp đồng thực.


Token ERC-20 có thể làm gì?


Illustration of various uses of ERC-20 tokens


Bằng cách kết hợp tất cả các chức năng trên, chúng ta đã có được hợp đồng ERC-20. Chúng tôi có thể truy vấn tổng nguồn cung, kiểm tra số dư, chuyển tiền và cấp quyền cho các DApp khác để quản lý mã thông báo cho chúng tôi.

Phần lớn sức hấp dẫn của token ERC-20 là tính linh hoạt của chúng. Các quy ước được đặt ra không hạn chế sự phát triển, vì vậy các bên có thể triển khai các tính năng bổ sung và đặt các thông số cụ thể phù hợp với nhu cầu của mình.


Stablecoin

Stablecoin (mã thông báo được gắn với tiền tệ fiat) thường sử dụng tiêu chuẩn mã thông báo ERC-20. Giao dịch với hợp đồng BUSD mà chúng tôi đã đề cập trước đó là một ví dụ và hầu hết các stablecoin chính cũng có sẵn ở định dạng này.

Đối với một loại tiền ổn định được hỗ trợ bằng tiền pháp định điển hình, nhà phát hành nắm giữ các khoản dự trữ bằng euro, đô la, v.v. Sau đó, đối với mỗi đơn vị trong khoản dự trữ của họ, họ sẽ phát hành một mã thông báo. Điều này có nghĩa là nếu 10.000 đô la bị khóa trong kho tiền, nhà phát hành có thể tạo ra 10.000 mã thông báo, mỗi mã có thể đổi được 1 đô la.

Về mặt kỹ thuật, điều này khá dễ thực hiện trong Ethereum. Nhà phát hành chỉ cần triển khai hợp đồng với 10.000 token. Sau đó, họ sẽ phân phối chúng cho người dùng với lời hứa rằng sau này họ có thể đổi token lấy một lượng tiền tệ fiat tương ứng. 

Người dùng có thể thực hiện một số việc với token của mình – họ có thể mua hàng hóa và dịch vụ hoặc sử dụng chúng trong DApps. Ngoài ra, họ có thể yêu cầu tổ chức phát hành trao đổi chúng ngay lập tức. Trong trường hợp đó, nhà phát hành sẽ đốt các token được trả lại (làm cho chúng không thể sử dụng được) và rút số lượng tiền pháp định chính xác từ kho dự trữ của họ.

Hợp đồng chi phối hệ thống này, như đã nói ở trên, tương đối đơn giản. Tuy nhiên, việc ra mắt một stablecoin đòi hỏi rất nhiều công sức từ các yếu tố bên ngoài như hậu cần, tuân thủ quy định, v.v.


Mã thông báo bảo mật

Mã thông báo bảo mật tương tự như stablecoin. Ở cấp độ hợp đồng, cả hai thậm chí có thể giống hệt nhau vì chúng hoạt động theo cùng một cách. Sự khác biệt xảy ra ở cấp độ tổ chức phát hành. Mã thông báo bảo mật đại diện cho chứng khoán, chẳng hạn như cổ phiếu, trái phiếu hoặc tài sản vật chất. Thông thường (mặc dù không phải lúc nào cũng như vậy), họ cấp cho người nắm giữ một số loại cổ phần trong một doanh nghiệp hoặc hàng hóa.


Mã thông báo tiện ích

Mã thông báo tiện ích có lẽ là loại mã thông báo phổ biến nhất được tìm thấy hiện nay. Không giống như hai dịch vụ trước, chúng không được hỗ trợ bởi bất cứ điều gì. Nếu mã thông báo được hỗ trợ bằng tài sản giống như cổ phần trong một công ty hàng không thì mã thông báo tiện ích giống như các chương trình dành cho khách hàng thường xuyên: chúng phục vụ một chức năng nhưng không có giá trị bên ngoài. Mã thông báo tiện ích có thể đáp ứng vô số trường hợp sử dụng, đóng vai trò là tiền tệ trong trò chơi, nhiên liệu cho các ứng dụng phi tập trung, điểm khách hàng thân thiết, v.v.


➠ Bạn đang muốn bắt đầu với tiền điện tử? Mua ether trên Binance!


Bạn có thể khai thác token ERC-20 không?

Bạn có thể khai thác ether (ETH), nhưng mã thông báo không thể khai thác được – chúng tôi nói rằng chúng được tạo ra khi mã mới được tạo. Khi hợp đồng được đưa ra, các nhà phát triển sẽ phân phối nguồn cung theo kế hoạch và lộ trình của họ.

Thông thường, việc này được thực hiện thông qua Cung cấp tiền xu ban đầu (ICO), Cung cấp trao đổi ban đầu (IEO) hoặc Cung cấp mã thông báo bảo mật (STO). Bạn có thể gặp các biến thể của những từ viết tắt này, nhưng những khái niệm này khá giống nhau. Các nhà đầu tư gửi ether đến địa chỉ hợp đồng và đổi lại nhận được mã thông báo mới. Số tiền thu được sẽ được sử dụng để tài trợ cho việc phát triển thêm dự án. Người dùng mong đợi có thể sử dụng mã thông báo của họ (ngay lập tức hoặc sau này) hoặc bán lại chúng để kiếm lợi nhuận khi dự án phát triển.

Việc phân phối mã thông báo không cần phải được tự động hóa. Nhiều sự kiện gây quỹ cộng đồng cho phép người dùng thanh toán bằng nhiều loại tiền kỹ thuật số khác nhau (chẳng hạn như BNB, BTC, ETH và USDT). Số dư tương ứng sau đó sẽ được phân bổ đến các địa chỉ do người dùng cung cấp.


Ưu và nhược điểm của token ERC-20

Ưu điểm của token ERC-20

có thể thay thế được

Mã thông báo ERC-20 có thể thay thế được – mỗi đơn vị có thể hoán đổi cho nhau. Nếu bạn nắm giữ BinanceAcademyToken, việc bạn sở hữu token cụ thể nào sẽ không thành vấn đề. Bạn có thể đổi nó lấy của người khác và chúng vẫn có chức năng giống hệt nhau, giống như tiền mặt hoặc vàng.

Điều này là lý tưởng nếu mã thông báo của bạn hướng tới mục tiêu trở thành một loại tiền tệ nào đó. Bạn sẽ không muốn các đơn vị riêng lẻ có những đặc điểm có thể phân biệt được, điều này sẽ khiến chúng không thể thay thế được. Điều này có thể khiến một số mã thông báo trở nên có giá trị hơn – hoặc ít hơn - so với các mã thông báo khác, làm suy yếu mục đích của chúng.


Linh hoạt

Như chúng tôi đã khám phá ở phần trước, mã thông báo ERC-20 có khả năng tùy biến cao và có thể được điều chỉnh cho phù hợp với nhiều ứng dụng khác nhau. Ví dụ: chúng có thể được sử dụng làm tiền tệ trong trò chơi, trong các chương trình điểm khách hàng thân thiết, dưới dạng đồ sưu tầm kỹ thuật số hoặc thậm chí để đại diện cho quyền sở hữu và tác phẩm nghệ thuật.


Phổ biến

Sự phổ biến của ERC-20 trong ngành công nghiệp tiền điện tử là lý do rất thuyết phục để sử dụng nó làm bản thiết kế chi tiết. Có rất nhiều sàn giao dịch, ví và hợp đồng thông minh đã tương thích với các token mới ra mắt. Hơn nữa, hỗ trợ và tài liệu dành cho nhà phát triển rất phong phú. 


Nhược điểm của token ERC-20

Khả năng mở rộng

Giống như nhiều mạng tiền điện tử, Ethereum không tránh khỏi những khó khăn ngày càng tăng. Ở dạng hiện tại, nó không có quy mô tốt – cố gắng gửi giao dịch vào thời điểm cao điểm sẽ dẫn đến phí cao và độ trễ. Nếu bạn khởi chạy mã thông báo ERC-20 và mạng bị tắc nghẽn, khả năng sử dụng của nó có thể bị ảnh hưởng.

Đây không phải là vấn đề riêng của Ethereum. Đúng hơn, đó là sự đánh đổi cần thiết trong các hệ thống phân tán, an toàn. Cộng đồng có kế hoạch giải quyết những vấn đề này trong quá trình di chuyển sang Ethereum 2.0, sẽ triển khai các bản nâng cấp như Ethereum Plasma và Ethereum Casper.

Tìm hiểu thêm về các vấn đề về khả năng mở rộng trong Khả năng mở rộng của Blockchain: Chuỗi bên và Kênh thanh toán.


Lừa đảo

Mặc dù bản thân công nghệ không phải là vấn đề, nhưng việc dễ dàng khởi chạy mã thông báo có thể được coi là nhược điểm ở một số khía cạnh. Chỉ cần nỗ lực tối thiểu để tạo mã thông báo ERC-20 đơn giản, nghĩa là bất kỳ ai cũng có thể làm điều đó – dù tốt hay xấu.

Vì vậy, bạn nên cẩn thận với những gì mình đang đầu tư. Có một số mô hình Kim tự tháp và Ponzi được ngụy trang dưới dạng các dự án blockchain.  Hãy tự nghiên cứu trước khi đầu tư để đưa ra kết luận của riêng mình về việc liệu một cơ hội có hợp pháp hay không.

 

ERC-20, ERC-1155, ERC-223, ERC-721 – sự khác biệt là gì?

ERC-20 là tiêu chuẩn token Ethereum đầu tiên (và cho đến nay là phổ biến nhất), nhưng nó không phải là tiêu chuẩn duy nhất. Trong những năm qua, nhiều người khác đã xuất hiện, đề xuất cải tiến ERC-20 hoặc cố gắng đạt được các mục tiêu khác nhau.

Một số tiêu chuẩn ít phổ biến hơn là những tiêu chuẩn được sử dụng trong mã thông báo không thể thay thế (NFT). Đôi khi, trường hợp sử dụng của bạn thực sự được hưởng lợi từ việc có các mã thông báo duy nhất với các thuộc tính khác nhau. Nếu bạn muốn mã hóa một tác phẩm nghệ thuật có một không hai, tài sản trong trò chơi, v.v., một trong những loại hợp đồng này có thể hấp dẫn hơn.

Chẳng hạn, tiêu chuẩn ERC-721 đã được sử dụng cho CryptoKitties DApp cực kỳ phổ biến. Hợp đồng như vậy cung cấp API để người dùng tạo ra các mã thông báo không thể thay thế của riêng họ và mã hóa siêu dữ liệu (hình ảnh, mô tả, v.v.). 

Tiêu chuẩn ERC-1155 có thể được coi là sự cải tiến trên cả ERC-721 và ERC-20. Nó phác thảo một tiêu chuẩn hỗ trợ cả mã thông báo có thể thay thế và không thể thay thế trong cùng một hợp đồng.

Các tùy chọn khác như ERC-223 hoặc ERC-621 nhằm mục đích cải thiện khả năng sử dụng. Cái trước thực hiện các biện pháp bảo vệ để ngăn chặn việc chuyển mã thông báo vô tình. Cái sau bổ sung thêm các chức năng bổ sung để tăng và giảm nguồn cung cấp mã thông báo.

Để biết thêm về chủ đề NFT, hãy nhớ xem Hướng dẫn về Đồ sưu tầm tiền điện tử và Mã thông báo không thể thay thế (NFT).


Bớt tư tưởng

Tiêu chuẩn ERC-20 đã thống trị không gian tài sản tiền điện tử trong nhiều năm và không khó hiểu tại sao. Tương đối dễ dàng, bất kỳ ai cũng có thể triển khai một hợp đồng đơn giản để phù hợp với nhiều trường hợp sử dụng khác nhau (mã thông báo tiện ích, stablecoin, v.v.). Điều đó nói lên rằng, ERC-20 thiếu một số tính năng được các tiêu chuẩn khác đưa vào cuộc sống. Vẫn còn phải xem liệu các loại hợp đồng tiếp theo có thay thế được hay không.