Nội dung
Ethereum được sáng lập bởi Vitalik Buterin vào năm 2014. Từ đó, Ethereum tự định vị mình là một
nền tảng mã nguồn mở để khởi chạy các ứng dụng phi tập trung (
các DApp). Động lực chính của Buterin để tạo ra
blockchain Ethereum là sự không hài lòng vì tính thiếu linh hoạt của giao thức
Bitcoin. Kể
từ khi ra mắt, blockchain 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 ngày càng phát
triển, mà ở đó người dùng khởi chạy các
hợp đồng thông minh và các ứ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, một framework quan trọng để tạo ra
các token.
Mặc dù ban đầu tiêu chuẩn này được dành riêng cho 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ột Yêu cầu nhận xét của Ethereum (Ethereum Request for Comments).
Đâ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. Không nên nhầm lẫn chúng với Đề xuất cải tiến Ethereum
(tức các EIP). Giống như BIP của Bitcoin, EIP là những đề xuất cải tiến
cho chính giao thức. Thay vào đó, các 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 tương đối đơn giản cho các token hoạt động 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ấu trúc nào khác. Thay vào đó, họ có thể xây dựng
trên một nền tảng đã được sử dụng trong toàn ngành.
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 diễn ra sau một vài năm khi bản đề 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 được giữ nguyên.
Không
giống như ETH (tiền mã hoá gốc của Ethereum), các token ERC-20 không
được giữ bởi tài khoản. Các token 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 các
token (như 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 đến địa chỉ Ethereum của họ.
Để
di chuyển các token, người dùng phải gửi một giao dịch đến hợp đồng yêu
cầu nó phân bổ một số số dư của họ tới 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 nó làm như vậy.
Cuộc
gọi của cô ấy chứa bên trong những gì dường như là một giao dịch
Ethereum thông thường, trả 0 ETH cho hợp đồng token. Lệnh gọi được bao
gồm trong một trường bổ sung giao dịch, trường này chỉ định những gì
Alice muốn làm – trong trường hợp của chúng ta, đó là chuyển token cho
Bob.
Mặc dù cô ấy không gửi ether, nhưng cô ấy vẫn phải trả một khoản phí có mệnh giá để giao dịch của cô ấy được ghi vào trong một
khối . Nếu cô ấy không có ETH, cô ấy cần chuẩn bị một số ETH trước khi chuyển các token.
Trên Etherscan, bạn có thể xem
ví dụ thực tế này
về việc ai đó đang thực hiện cuộc gọi đến hợp đồng BUSD. Bạn có thể
thấy các token đã được chuyển và một khoản phí đã được thanh toán, mặc
dù trường Value cho thấy rằng 0 ETH đã được gửi.
Bây giờ chúng ta đã hiểu một cách cơ bản, hãy cùng xem xét kỹ để 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 bao gồm sáu chức năng bắt buộc: totalSupply , balanceOf , transfer , transferFrom , approve và allowance . Ngoài ra, bạn có thể chỉ định các chức năng tùy chọn, chẳng hạn như name, symbol và decimal.
Bạn có thể hiểu khái quát các tính năng này từ tên của chúng. Nếu chưa,
đừng lo lắng – chúng ta sẽ tìm hiểu từng tính năng ngay bây giờ.
Dưới đây là các chức năng (funtion) khi chúng xuất hiện trong ngôn ngữ Solidity (ngôn ngữ lập trình trên Ethereum).
totalSupply
function totalSupply() public view returns (uint256)
Khi được người dùng gọi, hàm trên trả về
tổng nguồn cung token mà hợp đồng nắm giữ.
balanceOf
function balanceOf (address _owner) public view trả về (uint256 balance)
Không giống như totalSupply, balanceOf
nhận một tham số (một địa chỉ). Khi hàm được gọi, nó trả về số dư token
mà địa chỉ đó đang nắm giữ. 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 mà bạn biết địa chỉ.
chuyển
function transfer(address _to, uint256 _value) public returns (bool success)
Tính năng transfer
chuyển một cách khéo léo các token từ người dùng này sang người dùng
khác. Tại đây, bạn cung cấp địa chỉ muốn gửi và số tiền cần chuyển.
Khi tính năng được gọi, transfer sẽ kích hoạt một thứ được gọi là event (trong trường hợp này là event transfer). Về cơ bản, điều này yêu cầu blockchain bao gồm một tham chiếu đến nó.
transferFrom
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
Chức năng transferFrom là một sự thay thế tiện dụng hơn so với chức năng transfer. Nó cho phép lập trình nhiều hơn một chút trong các ứng dụng phi tập trung. Giống như transfer, nó được sử dụng để di chuyển token, nhưng những token đó 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 – thay
mặt bạn chuyển tiền. Lấy ví dụ như khi bạn cần thanh toán cho các dịch
vụ trả phí theo thời gian, khi bạn không muốn tốn thời gian 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 việc đó tự động cho bạn.
Hàm này kích hoạt cùng một sự kiện như transfer.
approve
function approve(address _spender, uint256 _value) public returns (bool success)
approve
là một chức năng hữu ích và có nhiều hướng để 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à một 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 phải đối mặt với nguy cơ
hợp đồng bị trục trặc (hoặc bị lợi dụng) và tất cả tiền của bạn có khả
năng bị đánh cắp.
Lấy ví dụ về
một mô hình đăng ký (subscription) một lần nữa. Giả sử rằng 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 một
DApp trực tuyến. Vì bận rộn đọc các bài viết của
Binance Academy cả ngày lẫn đêm, bạn không muốn mất thời gian tạo giao dịch theo cách thủ công mỗi tuần.
Và
bạn cũng có một số dư lớn BinanceAcademyTokens, vượt xa số tiền cần
thanh toán. Để ngăn DApp rút hết tiền, bạn có thể đặt giới hạn bằng chức
năng approve.
Giả sử, việc đăng ký dịch vụ khiến 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 token, bạn có thể
chọn thanh toán tự động cho đăng ký của mình trong năm 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 thấy
lỗi, bạn chỉ có thể mất hai mươi token. Điều kiện này không phải là lý
tưởng, nhưng ít nhất nó không khiến bạn mất tất cả tài sản mình đang nắm
giữ.
Khi được gọi, approve sẽ kích hoạt sự kiện approval. Giống như sự kiện trong transfer, chức năng approve cũng ghi dữ liệu vào blockchain.
allowance
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance có thể được sử dụng cùng với
approve . Khi bạn đã cho phép hợp đồng quản lý các
token
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 được bao nhiêu tiền. Ví dụ: nếu gói đăng ký của bạn đã sử dụng hết
mười hai trong số hai mươi token được chấp thuận của bạn, thì việc gọi
hàm
allowance sẽ trả về tổng số là tám.
Các chức năng tùy chọn
Các chức năng đã được đề cập ở trên là bắt buộc. Ngoài ra, bạn còn có thể sử dụng các funtion name , symbol và decimal(số
thập phân). Tuy chúng 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. Một cách tương ứng, chúng cho phép
bạn thêm các tên mà con người có thể đọc được, đặt ký hiệu (ví dụ: ETH,
BTC, BNB) và chỉ định token có thể được chia nhỏ thành bao nhiêu số
thập phân. Ví dụ: sẽ tiện lợi hơn nếu token được sử dụng làm tiền tệ có
thể phân chia thành nhiều phần token nhỏ hơn, giúp đại diện cho quyền sở
hữu tài sản.
Bạn có thể tìm hiểu
ví dụ này trên GitHub để xem các yếu tố này trong một smart contract thực tế.
Bằng cách kết hợp tất cả các chức năng ở trên, chúng ta đã có hợp đồng ERC-20. Chúng ta 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ý token của mình.
Một
phần lớn tạo nên sự hấp dẫn của token ERC-20 là tính linh hoạt của
chúng. Các quy ướ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 họ.
Stablecoin
Stablecoin (các token neo giá theo
tiền pháp định)
thường sử dụng tiêu chuẩn token ERC-20. Giao dịch với hợp đồng BUSD mà
chúng ta đã đề cập trước đó là một ví dụ. Hầu hết các stablecoin chúng
ta biết cũng dùng định dạng này.
Đối
với một stablecoin được bảo đảm bởi tiền pháp định, nhà phát hành nắm
giữ các khoản dự trữ bằng euro, đô-la, v.v. Sau đó, với mỗi đơn vị trong
kho dự trữ, họ sẽ phát hành một token. Điều này có nghĩa là nếu 10.000
đô-la bị khóa trong kho lưu trữ, nhà phát hành có thể tạo ra 10.000
token, mỗi token có thể đổi được 1 đô-la.
Về
mặt kỹ thuật, điều này có thể thực hiện khá dễ dàng trên Ethereum. Nhà
phát hành chỉ cần khởi chạy một 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
các token để lấy một lượng tiền pháp định tương ứng.
Người
dùng có thể thực hiện một số việc với token của họ – có thể mua hàng
hóa và dịch vụ hoặc sử dụng chúng trong các DApp. Ngoài ra, họ có thể
yêu cầu nhà phát hành đổi chúng thành tiền thật ngay lập tức. Trong
trường hợp đó, nhà phát hành
đốt các token được trả lại (khiến chúng không thể sử dụng được) và rút số tiền pháp định chính xác từ các khoản dự trữ của họ.
Hợp
đồng điều chỉnh hệ thống này, như đã nói ở trên, việc này được thực
hiện tương đối đơn giản. Tuy nhiên, việc tung ra một stablecoin không
chỉ có thế, mà còn đòi hỏi rất nhiều công việc được thực hiện khác nữa
như logistic, tuân thủ quy định, v.v.
Các token chứng khoán
Token chứng khoán
(security token) 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
diễn ra ở cấp độ người phát hành. Token chứng khoán đạ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 vậy), các token loại này 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.
Các token tiện ích
Các
token tiện ích (utility token) có lẽ là loại token phổ biến nhất hiện
nay. Không giống như hai loại trước, chúng không được bảo đảm bởi bất cứ
loại tài sản nào. Nếu các loại token kia được đảm bảo bởi các loại tài
sản giống như cổ phiếu thì token tiện ích lại giống như các tờ rơi
quảng cáo: chúng phục vụ một chức năng, nhưng không có giá trị ở bên
ngoài. Các token tiện ích có thể dùng cho vô số trường hợp sử dụng,
chúng có thể đóng vai trò như
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à nhiều thứ khác.
Bạn có thể đào ether (ETH), nhưng các token không thể đào được – đúng hơn, chúng được tạo ra bằng cách đúc. 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, điều này được thực hiện thông qua một đợt
Phát hành tiền mã hóa lần đầu (ICO),
Phát hành tiền mã hoá trên sàn
(IEO) hoặc Phát hành token chứng khoán (STO). Bạn có thể bắt gặp biến
thể của những từ viết tắt này, nhưng về cơ bản, 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 các token mới. Số tiền thu được được sử dụng để tài trợ cho
việc phát triển dự án. Người dùng mong đợi có thể sử dụng token của họ
(ngay lập tức hoặc muộn hơn) 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
token không cần phải được tự động hóa. Nhiều sự kiện huy động vốn 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 đó
được phân bổ đến các địa chỉ do người dùng cung cấp.
Ưu điểm của token ERC-20
Khả năng thay thế lẫn nhau
Mỗi token ERC-20
có thể thay thế lẫn nhau
– tức là mỗi đơn vị có thể khả năng sử dụng và giá trị tương đương. Nếu
bạn nắm giữ BinanceAcademyToken, việc bạn nắm giữ token cụ thể nào
không quan trọng. Bạn có thể giao dịch, trao đổi nó với token của người
khác và chúng vẫn giống hệt nhau về mặt chức năng, giống như việc trao
đổi tiền mặt hoặc vàng.
Điều này
rất có lợi, nếu token của bạn có 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ó các đặc điểm khác biệt,
bởi điều này khiến chúng không thể thay thế được. Điều này có thể khiến
một số token trở nên có giá trị hơn– hoặc ít có giá trị hơn – những
token khác, làm suy yếu mục đích của chúng.
Tính linh hoạt
Như
chúng ta đã biết, các token ERC-20 có khả năng tùy chỉnh 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, làm sản phẩm
sưu tầm kỹ thuật số hoặc thậm chí để đại diện cho tác phẩm mỹ thuật và quyền tài sản.
Sự phổ biến
Sự
phổ biến của ERC-20 trong ngành công nghiệp tiền mã hoá là một lý do
rất thuyết phục để sử dụng nó làm một tiêu chuẩn chung. 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 này.
Hơn nữa, sự hỗ trợ của các nhà phát triển và tài liệu cũng rất phong
phú.
Nhược điểm của token ERC-20
Khả năng mở rộng
Như
nhiều mạng blockchain, khả năng mở rộng là thách thức không loại trừ
Ethereum. Với hình thức hiện tại, việc mở rộng quy mô của Ethereum diễn
ra không tốt – việc cố gắng gửi một giao dịch vào thời gian cao điểm dễ
dẫn đến phí cao và sự chậm trễ. Nếu bạn khởi chạy token 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 đề dành riêng cho Ethereum. Đúng hơn, đó là một sự
đánh đổi cần thiết trong các hệ thống phi tập trung để đảm bảo sự 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 cư sang
Ethereum 2.0 - nơi diễn ra các nâng cấp như
Ethereum Plasma và
Ethereum Casper .
Rủi ro lừa đảo
Mặc
dù đây không phải là lỗi của công nghệ, nhưng việc dễ dàng ra mắt token
mới có thể coi là một nhược điểm ở một số khía cạnh. Cần rất ít nỗ lực
để tạo ra một token ERC-20 đơn giản, có nghĩa là bất kỳ ai cũng có thể
làm điều đó – dù với mục đích tốt hay xấu.
Do đó, bạn nên cẩn thận với những gì mình đang đầu tư. Không thiếu những dự án lừa đảo sử dụng mô hình đa cấp như
Pyramid và Ponzi được ngụy trang thành các dự án blockchain.
Tự nghiên cứu là việc làm cần thiết trước khi đầu tư bất cứ dự án nào.
ERC-20
là tiêu chuẩn token Ethereum đầu tiên (và cho đến nay là tiêu chuẩn
phổ biến nhất), nhưng không có nghĩa nó là tiêu chuẩn duy nhất. Trong
những năm qua, nhiều nhà phát triển khác đã đề xuất các cải tiến trên
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à các tiêu chuẩn sử dụng cho
token không thể thay thế
(các NFT). Đôi khi, các token độc nhất cũng mang lại những trường hợp
sử dụng mới hữu ích. Ví dụ như việc mã hoá các tác phẩm nghệ thuật, vật
phẩm trong trò chơi, v.v., một trong những ứng dụng có thể hấp dẫn và dễ
hiểu hơn với công chúng.
Chẳng hạn,
ERC-721 là tiêu chuẩn được sử dụng cho Dapp trò chơi từng rất nổi tiếng CryptoKitties. Một hợp đồng như vậy cung cấp một
API để người dùng đúc các token không thể thay thế của riêng họ và mã hóa
siêu dữ liệu (metadata 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 trên cả ERC-721 và
ERC-20. Nó tạo ra một tiêu chuẩn hỗ trợ cả token có thể thay thế lẫn
nhau 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 giúp có thêm
nhiều 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 token ngẫu nhiên. Loại thứ hai bổ sung các
chức năng để tăng và giảm nguồn cung cấp token.
Tiêu
chuẩn ERC-20 đã thống trị ngành tiền mã hoá trong nhiều năm và không
khó để hiểu tại sao. Vì khá dễ sử 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 (như các
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ế. Vậy nên chúng ta có thể tiếp tục đón
chờ các loại hợp đồng khác được thực hiện trên tiêu chuẩn này.