Ethereum được thành lập vào năm 2014 bởi Vitalik Buterin. Kể từ đó, Ethereum đã tự đị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). Động lực chính của Buterin để tạo ra chuỗi khối Ethereum là sự không hài lòng với 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 lập trình viên, doanh nghiệp và doanh nhân, tạo ra một ngành công nghiệp đang phát triển, nơi người dùng có thể khởi chạy 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ẽ tìm hiểu về tiêu chuẩn ERC-20, đây là một khuôn khổ quan trọng để tạo mã thông báo. Mặc dù tiêu chuẩn ban đầu được nhắm mục tiêu cụ thể vào mạng Ethereum, nhưng nó đã truyền cảm hứng cho các tiêu chuẩn blockchain khác, chẳng hạn như tiêu chuẩn BEP-2 của Binance Chain.
Trong Ethereum, ERC là mộtEthereum Yêu cầu bình luận.Đâ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 Ethereum. Không nên nhầm lẫn chúng với Đề xuất cải tiến Ethereum hoặc EIP. Giống như BIP của Bitcoin, EIP là một đề xuất cải tiến 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 đề xuất bởi Vitalik Buterin và Fabian Vogelsteller vào năm 2015, ERC-20 đề xuất một định dạng mã thông báo tương đối đơn giản có thể chạy 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 bất kỳ cấu trúc nào khác. Thay vào đó, họ có thể xây dựng dựa trên những gì mà toàn ngành đã sử dụng.
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 (chẳng hạn như 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 khi đề xuất ban đầu được sử dụng rộng rãi. Tuy nhiên, dù đã nhiều năm trôi qua, cái tên “ERC-20” vẫn không hề thay đổi.
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. Những mã thông báo này chỉ tồn tại 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 (chẳng hạn như tên, ký hiệu, khả năng chia nhỏ) 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 phần số dư ở nơi khác. Ví dụ: nếu Alice muốn gửi cho Bob 5.000 BinanceAcademyToken, cô ấy sẽ gọi một chức năng trong hợp đồng thông minh BinanceAcademyToken để yêu cầu nó làm như vậy.
Cuộc gọi của cô ấy có vẻ như là một giao dịch Ethereum thông thường, trả 0 ETH cho hợp đồng mã thông báo. Cuộc gọi được bao bọc trong một trường giao dịch bổ sung chỉ định những gì Alice muốn thực hiện – trong trường hợp của chúng tôi, chuyển mã thông báo cho Bob.
Ngay cả khi cô ấy không gửi ether, cô ấy vẫn phải trả phí mệnh giá cho giao dịch của mình để được ghi vào một khối. Nếu không có ETH, cô ấy cần chuẩn bị một số ETH trước khi chuyển.
Trên Etherscan, bạn có thể thấy một ví dụ thực tế về việc ai đó gọi hợp đồng BUSD. Bạn có thể thấy rằng các mã thông báo đã được chuyển và phí đã được thanh toán, mặc dù trường Giá trị hiển thị 0 ETH được gửi.
Bây giờ chúng ta đã có kiến thức cơ bản, 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.
Để tuân thủ ERC-20, hợp đồng của bạn cần có sáu chức năng bắt buộc:Tổng cung ,THĂNG BẰNG ,chuyển khoản ,chuyển từ ,chấp thuận Vàphụ cấp .Ngoài ra, bạn có thể chỉ định các tính năng tùy chọn nhưTên,biểu tượng Vàsố thập phân.Bạn có thể khái quát hóa các chức năng này từ tên của chúng. Nếu không, đừng lo lắng – chúng tôi sẽ trình bày chi tiết từng tính năng ngay bây giờ.
Dưới đây là các chức năng xuất hiện trong Solidity, một ngôn ngữ lập trình trên Ethereum.
Mục lục
Tổng cung
Chức năng Tổng cung()mọi người XemReturn (uint256)
Khi được gọi bởi người dùng, hàm trên trả về tổng nguồn cung cấp mã thông báo do hợp đồng nắm giữ.
THĂNG BẰNG
Chức năng balanceOf(address_owner)mọi người Xem trở lại (số dư uint256)
không thíchTổng cung,THĂNG BẰNG Nhận một đối số (một địa chỉ). Khi hàm được gọi, nó sẽ trả về số dư mã thông báo được giữ bởi đị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 có địa chỉ mà bạn biết.
chuyển khoản
Chức năng chuyển (address_to, uint256_value)mọi người trở lại (bool thành công)
tính năngchuyển khoản Khéo léo chuyển mã thông báo từ người dùng này sang người dùng khác. Tại đây, bạn cung cấp địa chỉ cần gửi và số tiền chuyển.
Khi gọi chức năng này,chuyển khoản sẽ kích hoạt một cuộc gọisự kiện (trong trường hợp này là chuyển sự kiện). Về cơ bản, điều này yêu cầu chuỗi khối phải chứa một tham chiếu đến nó.
chuyển từ
Chức năng transferFrom(address_from, address_to, uint256 _value)mọi người trở lại (bool thành công)
Chức năngchuyển từ là một sự thay thế thuận tiện hơn cho chức năngchuyển khoản.Nó cho phép lập trình nhiều hơn trong các ứng dụng phi tập trung. giốngchuyển khoản, được sử dụng để di chuyển mã thông báo, nhưng những mã thông báo này 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 ủy quyền cho ai đó (hoặc hợp đồng khác) chuyển tiền thay bạn. Ví dụ: khi bạn cần thanh toán theo thời gian cho một dịch vụ cao cấp, khi bạn không muốn lãng phí thời gian gửi thanh toán hàng ngày/hàng tuần/hàng tháng theo cách thủ công. Thay vào đó, bạn chỉ cần để chương trình tự động làm việc cho bạn.
Chức năng này kích hoạt vớichuyển khoản.
chấp thuận
Chức năng phê duyệt (địa chỉ _spender, uint256 _value)mọi người trở lại (bool thành công)
chấp thuận là một chức năng lập trình đa hướng hữu ích. Sử dụng tính năng này, bạn có thể giới hạn số lượng mã thông báo 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 của mình bị trục trặc (hoặc bị lợi dụng) và có khả năng bị đánh cắp toàn bộ số tiền của mình.
Lấy lại mô hình đăng ký làm ví dụ. Giả sử bạn có nhiều 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 trực tuyến của mình. Vì bạn bận rộn đọc các bài báo của Binance Academy cả ngày lẫn đêm, nên bạn không muốn lãng phí thời gian để tạo giao dịch thủ công mỗi tuần.
Và bạn cũng có số dư lớn token Binance Academy, vượt xa số tiền đã thanh toán. Để ngăn DApps rút tất cả tiền, bạn có thể đặt giới hạn bằng chức năng nàychấp thuận.Ví dụ: đăng ký dịch vụ sẽ tốn một BinanceAcademyToken mỗi tuần. Nếu bạn giới hạn giá trị được phê duyệt ở 20 mã thông báo, thì bạn có thể chọn được thanh toán tự động cho các đăng ký sau năm tháng.
Trong trường hợp xấu nhất, bạn chỉ có thể mất 20 mã thông báo nếu DApp cố gắng rút hết tiền của bạn hoặc phát hiện ra lỗi. Tình huống này không lý tưởng, nhưng ít nhất bạn sẽ không mất hết tài sản.
Khi gọi,chấp thuận sẽ kích hoạt sự kiệnđồng ý với.like các sự kiện bên trongchuyển khoản, chức năng phê duyệt cũng ghi dữ liệu vào chuỗi khối.
phụ cấp
Chức năng phụ cấp(địa chỉ_chủ sở hữu, địa chỉ_chi tiêu)mọi người Xem trả lại (còn lại uint256)
phụ cấp có thể được sử dụng cùng nhauchấp thuận .Sau khi bạn ủy quyền cho 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 số tiền có thể rút thêm. Ví dụ: nếu đăng ký của bạn đã sử dụng hết mười hai trong số hai mươi mã thông báo được phê duyệt, hãy gọi hàmphụ cấp Tổng cộng tám sẽ được trả lại.
tính năng tùy chọn
Các tính năng được đề cập ở trên là bắt buộc. Ngoài ra, bạn có thể sử dụng chức năngTên ,biểu tượng Vàsố thập phân(số thập phân). Mặc dù không bắt buộc, 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 vị trí thập phân mà mã thông báo có thể được chia nhỏ. Ví dụ: sẽ thuận tiện hơn nếu các token được sử dụng làm tiền có thể được chia thành các token nhỏ hơn giúp thể hiện quyền sở hữu tài sản.
Bạn có thể xem ví dụ này trên GitHub để xem các yếu tố này trong một hợp đồng thông minh thực sự.
Bằng cách kết hợp tất cả các chức năng trên, chúng tôi có một 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à ủy quyền cho các DApp khác quản lý mã thông báo của chúng tôi.
Một phần lớn sức hấp dẫn của mã thông báo ERC-20 là tính linh hoạt của chúng. Các quy ước được thiết lập không giới hạn sự phát triển, vì vậy các bên có thể triển khai chức năng bổ sung và đặt các tham số cụ thể cho phù hợp với nhu cầu của họ.
tiền tệ ổn định
Stablecoin (mã thông báo được chốt bằng tiền pháp định) thường sử dụng tiêu chuẩn mã thông báo ERC-20. Giao dịch trên hợp đồng BUSD mà chúng tôi đã đề cập trước đó là một ví dụ. Hầu hết các stablecoin mà chúng tôi biết đều sử dụng định dạng này.
Đối với các stablecoin được hỗ trợ bởi fiat, nhà phát hành nắm giữ các khoản dự trữ dưới dạng euro, đô la, v.v. Sau đó, đối với mỗi đơn vị trong khu bảo tồn, họ sẽ phát hành một mã thông báo. Điều này có nghĩa là nếu 977359800 đô la bị khóa trong một kho tiền, nhà phát hành có thể tạo 0977359800 mã thông báo, mỗi mã có thể đổi được 1 đô la.
Về mặt kỹ thuật, điều này có thể được thực hiện rất dễ dàng trên Ethereum. Nhà phát hành chỉ cần bắt đầu hợp đồng với 0977359800 mã thông báo. 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 các mã thông báo đó để lấy một lượng tiền pháp định tương ứng.
Người dùng có thể làm nhiều việc với mã thông báo của họ — đó có thể là 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 nhà phát hành đổi chúng lấy tiền thật ngay lập tức. Trong trường hợp này, nhà phát hành sẽ đốt các mã thông báo được trả lại (khiến chúng không sử dụng được) và rút chính xác số tiền pháp định từ khoản dự trữ của mình.
Như đã đề cập ở trên, các hợp đồng quản lý hệ thống này tương đối đơn giản. Tuy nhiên, tung ra một stablecoin không chỉ có vậy, còn nhiều việc khác cần phải làm, chẳng hạn như hậu cần, tuân thủ, v.v.
thẻ 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 trông giống hệt nhau vì chúng hoạt động theo cùng một cách. Sự khác biệt là ở 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 thực. Thông thường (mặc dù không phải luôn luôn), loại mã thông báo này cấp cho chủ sở hữu một phần trong một số loại hình kinh doanh 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à mã thông báo phổ biến nhất hiện nay. Không giống như hai phần trước, chúng không được hỗ trợ bởi bất kỳ tài sản nào. Nếu các mã thông báo khác được hỗ trợ bởi các tài sản như cổ phiếu, thì mã thông báo tiện ích giống như tờ rơi: chúng có 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ể được sử dụng cho nhiều trường hợp sử dụng khác nhau, chúng có thể hoạt động như tiền tệ trong trò chơi, nhiên liệu cho các ứng dụng phi tập trung, điểm trung thành, v.v.
Bạn có thể khai thác ether (ETH), nhưng không thể khai thác mã thông báo – thay vào đó, chúng được tạo bởivật đúc.Sau khi hợp đồng được ký kết, chủ đầu tư sẽ phân bổ nguồn cung theo kế hoạch và lộ trình của mình.
Thông thường, điều này được thực hiện thông qua Cung cấp tiền xu ban đầu (ICO), Cung cấp tiền xu ban đầu (IEO) hoặc Cung cấp mã thông báo bảo mật (STO). Bạn có thể bắt gặp các biến thể của những từ viết tắt này, nhưng các khái niệm về cơ bản là 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. Tiền thu được được sử dụng để tài trợ cho sự phát triển của dự án. Khi dự án phát triển, người dùng tiềm năng 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 để kiếm lợi nhuận.
Phân phối mã thông báo không cần phải được tự động hóa. Nhiều chiến dịch 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 như BNB, BTC, ETH và USDT. Số dư tương ứng sau đó được gán cho địa chỉ do người dùng cung cấp.
Ưu điểm của ERC-20.token
khả năng hoán đổi cho nhau
Mỗi mã thông báo ERC-20 đều có thể thay thế được – tức là mỗi đơn vị có cùng giá trị và tính khả dụng. Nếu bạn nắm giữ BinanceAcademyToken, thì việc bạn nắm giữ loại token cụ thể nào cũng không thành vấn đề. Bạn có thể giao dịch, đổi lấy token của người khác và chúng sẽ vẫn có chức năng giống nhau, giống như tiền mặt hoặc vàng.
Điều này rất có lợi nếu mục tiêu của mã thông báo của bạn là trở thành một loại tiền tệ nào đó. Bạn không muốn các đơn vị riêng lẻ có các đặc điểm khác nhau, vì điều đó khiến chúng không thể hoán đổi cho nhau. Điều này có thể làm cho một số mã thông báo có giá trị hơn — hoặc kém giá trị hơn — so với các mã thông báo khác, do đó làm mất đi tính hữu dụng của chúng.
Uyển chuyển
Mã thông báo ERC-20 được biết là có khả năng tùy chỉnh cao và có thể được điều chỉnh cho các ứ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, chương trình khách hàng thân thiết, đồ sưu tầm kỹ thuật số và thậm chí đại diện cho tác phẩm nghệ thuật và quyền sở hữu.
phổ biến
Sự phổ biến của ERC-20 trong ngành công nghiệp tiền điện tử là một lý do rất thuyết phục để sử dụng nó như một tiêu chuẩn chung. Nhiều sàn giao dịch, ví và hợp đồng thông minh đã tương thích với các mã thông báo này. Ngoài ra, tài liệu và hỗ trợ dành cho nhà phát triển rất phong phú.
Nhược điểm của Mã thông báo ERC-20
mở rộng khả năng
Cũng như nhiều mạng blockchain, khả năng mở rộng là một thách thức không loại trừ Ethereum. Ở dạng hiện tại, Ethereum không mở rộng quy mô một cách trơn tru — cố gắng gửi giao dịch trong giờ cao điểm dẫn đến phí cao và chậm trễ. Nếu bạn khởi chạy mã thông báo ERC-20 và mạng bị tắc nghẽn, tính khả dụng của nó có thể bị ảnh hưởng.
Đây không phải là vấn đề cụ thể đối với Ethereum. Thay vào đó, đó là một sự đánh đổi cần thiết để đảm bảo an ninh trong một hệ thống phi tập trung. 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 — nơi sẽ diễn ra các nâng cấp như Ethereum Plasma và Ethereum Casper.
nguy cơ gian lận
Mặc dù đây không phải là lỗi của công nghệ, nhưng việc dễ dàng tung ra các mã thông báo mới theo một số cách có thể được coi là một bất lợi. Việc tạo mã thông báo ERC-20 đơn giản đòi hỏi rất ít nỗ lực, điều đó có nghĩa là bất kỳ ai cũng có thể làm được — dù tốt hay xấu.
Do đó, bạn nên đối xử với các khoản đầu tư của mình một cách cẩn thận. Không thiếu các dự án lừa đảo đội lốt dự án blockchain sử dụng các mô hình đa cấp như kim tự tháp và Ponzis. Tự nghiên cứu là điều cần thiết trước khi đầu tư vào bất kỳ dự án nào.
ERC-20 là tiêu chuẩn mã thông báo Ethereum đầu tiên (và cho đến nay là phổ biến nhất), nhưng không có nghĩa là tiêu chuẩn duy nhất. Qua nhiều năm, nhiều nhà phát triển khác đã đề xuất các cải tiến cho ERC-20 hoặc theo đuổi các mục tiêu khác.
Một số tiêu chuẩn ít phổ biến hơn là những tiêu chuẩn được sử dụng cho mã thông báo không thể thay thế (NFT). Đôi khi các mã thông báo duy nhất cũng dẫn đến các trường hợp sử dụng mới hữu ích. Ví dụ: mã hóa tác phẩm nghệ thuật, vật phẩm trong trò chơi, v.v., là một trong những ứng dụng hấp dẫn và dễ hiểu hơn đối với công chúng.
Ví dụ: ERC-721 là tiêu chuẩn được sử dụng bởi trò chơi Dapp CryptoKitties nổi tiếng một thời. Một hợp đồng như vậy cung cấp một API để người dùng đúc các mã thông báo không thể thay thế và siêu dữ liệu mã hóa của riêng họ (siêu dữ liệu như hình ảnh, mô tả, v.v.).
Tiêu chuẩn ERC-1155 có thể được coi là một cải tiến so với ERC-721 và ERC-20. Nó tạo ra một tiêu chuẩn hỗ trợ các token có thể thay thế và không thể thay thế trong cùng một hợp đồng.
Ngoài ra, còn có các tiêu chuẩn khác như ERC-223 hoặc ERC-621 bổ sung thêm khả năng sử dụng. Tiêu chuẩn đầu tiên 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 ngẫu nhiên. Cái sau bổ sung khả năng tăng và giảm nguồn cung mã thông báo.
Tiêu chuẩn ERC-20 đã thống trị ngành công nghiệp tiền điện tử trong nhiều năm và không khó để hiểu tại sao. Vì nó khá dễ sử dụng nên bất kỳ ai cũng có thể triển khai các hợp đồng đơn giản phù hợp với nhiều trường hợp sử dụng (ví dụ: token tiện ích, stablecoin, v.v.). Tuy nhiên, vẫn còn nhiều tính năng chưa được triển khai trong thực tế. Do đó, chúng ta có thể tiếp tục kỳ vọng vào các loại hợp đồng khác dựa trên tiêu chuẩn này.