Tổng quan

Để tiếp nối Series về phân tích Tokenomics, mình sẽ chia sẻ tiếp cho anh em một bài viết nữa để hướng dẫn cách check tổng cung tối đa của Token (Max supply) có thực sự đúng là cố định hay team có thể tự ý in thêm hay không nhé.
Gần đây anh em hay thắc mắc rằng, tại sao Luna lại có thể in ra thêm hàng tỷ coin, hay một số dự án lại có tổng cung vô hạn, Team dev có thể mint token ra rất nhiều theo thời gian. Liệu anh em đã hiểu rõ cơ chế hoạt động mint token của dự án đó?
Hay có rất nhiều dự án Shitcoin tuyên bố rằng: “Dự án này tổng cung tối đa là 1.000.000.000 token, lượng này là cố định và Burning hàng tháng, nhiều use case…v.v. Kêu gọi cộng đồng mua vào bất chấp. Tuy nhiên lại âm thầm in thêm ra hàng tỷ tỷ token nữa để chờ chực xả lên đầu cộng đồng. Vậy, câu hỏi đặt ra ở đây đó là làm sao để mình biết chắc chắn rằng, tổng cung của dự án này đã bị khoá, team dev không thể in ra thêm token ra nữa ? Hãy cùng GFS Blockchain tìm hiểu thông qua bài viết sau đây nhé!
*** Bài viết này thuộc chuỗi Series phân tích Tokenomics từ cơ bản tới nâng cao của GFS Blockchain nằm giúp người đọc hiểu rõ bản chất của Tokenomics. Xem thêm các bài viết khác tại đây để có cái nhìn tổng quan về Tokenomics.

Hiểu rõ về công nghệ Blockchain

Đầu tiên, mình muốn anh em hiểu rõ về công nghệ Blockchain là minh bạch, bất biến và phi tập trung. Bất cứ ai cũng có thể kiểm tra thông tin một cách dễ dàng, cũng như không ai có thể thay đổi, tẩy xoá, sửa chữa bất kì thông tin gì, một khi đã đưa lên trên đó. Ứng dụng thiết thực nhất của Blockchain 2.0 hiện nay đó là “Smart contract” hay nôm na đó là Hợp đồng thông minh. Nó thông minh ở chỗ, một khi contract đã được chạy, và xác thực thì nó sẽ tự động thực thi những gì trong đó viết ra, không gì có thể can thiệp được. Bất kể là chính người tạo ra contract đó. Đây được xem là một sự ràng buộc cực kì rõ ràng và chắc chắn giữa hai bên, mà không cần có sự tin trưởng nhau trước đó. Hiểu đơn giản rằng, cái gì đã được viết trong Smart contract là cái đó sẽ được thực thi mà không có bất kì thứ gì có thể can thiệp hay sửa đổi. 

Cách check tổng cung của một dự án

Quay trở lại câu hỏi, làm sao để biết được liệu thông số “Max Supply” có thực sự là bất biến, hay team dev có thể can thiệp để in ra vô tội vạ hàng tỷ token. Anh em hãy cùng mình thực hành qua ví dụ sau,
Mình sẽ lấy ví dụ ở 2 dự án “Aave (AAVE)” và Pancakeswap (CAKE).
Dự án Aave, các bạn có thể dễ dàng tìm thông tin trên Coingecko để thấy được tổng cung tối đa của dự án là 16.000.000 token. Còn dự án đình đám trên hệ BSC là Pancakeswap có tổng cung vô hạn. Vậy đặc điểm nào để check thông tin trên là đúng? Liệu AAVE có thể được in thêm 1 tỷ token nữa nếu team Dev muốn được không?
Câu trả lời là “KHÔNG THỂ” bởi vì tổng cung tối đa của dự án này đã được fix cứng trong contract của dự án. Bất kì ai kể cả Team dev cũng không thể làm gì được. Nếu muốn tạo thêm token chỉ còn cách đổi contract mới hoặc làm dự án mới mà thôi.

Cùng mình thực hành để check contract của 2 dự án này nhé.

Bước 1: Vào Coingecko gõ từ khóa “AAVE” để hiện ra thông tin như trong ảnh.
Bước 1
Bước 1
Bước 2: Bấm vào mục “Etherscan” mục đích là để check contract của dự án. Sau đó click vào phần khoanh đỏ như trong hình.
Bước 2
Bước 2
Bước 3: Bấm vào cái ô “Contract” có dấu tích xanh, tiếp theo bên ô tìm kiếm anh em gõ chữ “mint” để tìm kiếm hàm này ở trong “Contract source code” rồi gõ “Enter” nhé.
Bước 3
Bước 3
Bước 4: Click vào dấu mũi tên để tìm kiếm hàm “Mint Funtion” như trong ảnh đính kèm. Anh em sẽ thấy được một đoạn code có cấu trúc như bên dưới đây. 
Bước 4
Bước 4
Mình copy ra cho anh em xem, trong ảnh cũng đã khoanh đỏ để tiện theo dõi nhé:
[ function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), “ERC20: mint to the zero address”);
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount); ]
Để đơn giản và dễ hiểu, anh em hãy xem đây được xem là một đoạn code chuẩn về hàm mint, nó có nghĩa rằng, một khi contract bắt đầu chạy thì hàm mint này sẽ được thực thi ở bên trong nội bộ contract ( internal virtual). Không ai có thể can thiệp sửa đổi hay gọi hàm này từ bên ngoài để mint thêm token. Kể cả chủ dự án (với điều kiện Owners đã Renounced, cái này mình sẽ nói ở bài tiếp theo nhé)
Vì mình ko phải Dev nên mình cũng ko khẳng định là nếu code ko xuất hiện như vậy thì là ko đúng hay ko. Mà mình nhận thấy rằng, nếu bên trong contract chỉ có một đoạn này có hàm mint thông dụng như vậy và thông thường mình check thấy hầu hết các dự án uy tín họ để có đoạn code như vậy, với tổng cung hữu hạn. Thì gõ hàm mint ra nó sẽ hiện như vậy, anh em nào bên dev có thể góp ý giúp mình nhé. Tóm lại, nếu chỉ thấy xuất hiện 1 hàm mint tại chỗ này hoặc không có hàm Mint thì theo mình là ok, còn nếu xuất hiện thêm 1 hàm mint khác nữa thì cần tìm hiểu thêm (cái này thiên về dev)
Tuy nhiên ở trong đoạn code của dự án Pancakeswap (CAKE). Anh em thực hiện tương tự đúng theo từ bước 1 tới bước 4 ở trên. Chỉ khác thao tác 1 chút xíu là thay mạng bscscan thay vì etherscan. Anh em cũng check hàm mint ở trong “Contract source code”. 
Check contract CAKE
Check contract CAKE
Sẽ có một đoạn code trông có vẻ khác cấu trúc so với dự án AAVE ở trên, cú pháp như sau:
[ function mint(uint256 amount) public onlyOwner returns (bool) {
_mint(_msgSender(), amount);
return true; ]
Ở hàm này, anh em chú ý có đoạn “Public only Owner returns”, đoạn này mình được hiểu có nghĩa là chủ sở hữu sẽ được public hàm “mint function” này. Và có thể gọi hàm này để thực thi (nếu muốn ), vì có chữ public only owners.
Nói sâu hơn 1 chút về dự án PancakeSwap: “Đúng là đồng token cake có thể mint ra thêm bởi owner, nhưng owner của nó lại là 1 contract khác (Syrub bar) và số lượng mint ra mỗi block hiện được cố định là 40 cake.
Cần phải nói thêm là contract syrub bar là not-upgradeable và source là public (không thấy có function transfer owner cho đồng cake), điều này có nghĩa là không có 1 cá nhân nào có thể tự ý mint thêm cake ngoại trừ chính cơ chế mint của hệ thống đã được cam kết từ trước thông qua contract”
Như vậy có thể thấy cơ chế mint token của dự án Pancakeswap khác hoàn toàn Aave. Một bên có tổng cung cố định và hữu hạn là 16 triệu token, một bên có tổng cung là vô hạn.
Anh em hoàn toàn có thể check với thao tác tương tự cho các dự án khác dựa vào cách trên, đặc biệt là các dự án Meme coin hay dự án scam mới ra mắt. Để xem có đúng là code nằm trong contract có gì bất thường so với họ công khai hay không. Tránh trường hợp để bị dự án rug pull ôm tiền bỏ trốn nhé. Rất sợ trường hợp như sau, team nói tổng cung là con số cố định, nhưng lại có quyền in thêm token nếu muốn để chờ chực xả lên đầu cộng đồng. Đó mới là điều đáng sợ ở đây, và nó đã từng xảy ra trong quá khứ đối với những dự án ăn theo trend, và không được kiểm tra cẩn thận.

Kết Luận

Hi vọng những thông tin trong bài viết có thể giúp ích cho anh em trong quá trình kiểm tra và thẩm định dự án.
Nếu thấy thông tin trong bài viết hữu ích và muốn trao đổi nhiều hơn với những người có cùng mối quan tâm thì hãy tham gia vào cộng đồng của GFS Blockchain cùng các thành viên khác nhé.