- Home
- học viết smart contract
- Hướng dẫn viết smart contract ERC-20 và ERC-721 cơ bản cho người mới bắt đầu: từ token đến NFT trên Ethereum
Hướng dẫn viết smart contract ERC-20 và ERC-721 cơ bản cho người mới bắt đầu: từ token đến NFT trên Ethereum
Viết smart contract ERC-20 và ERC-721 cơ bản là cách trực tiếp nhất để người mới hiểu cơ chế tạo token và NFT trên Ethereum thay vì chỉ đọc lý thuyết. Khi đi đúng từ chuẩn token, cấu trúc contract, logic mint đến cách deploy thử nghiệm, bạn sẽ nắm được nền tảng quan trọng để bước tiếp sang DeFi, NFT hoặc các ứng dụng blockchain phức tạp hơn.
Tiếp theo, để học đúng và không bị rối, người mới cần phân biệt rõ ERC-20 với ERC-721 ngay từ đầu. ERC-20 đại diện cho token có thể thay thế, còn ERC-721 đại diện cho token không thể thay thế. Hai chuẩn này cùng sống trên Ethereum nhưng khác nhau về bản chất tài sản, logic sở hữu và cách triển khai trong code.
Bên cạnh đó, người mới thường không thiếu động lực mà thiếu một lộ trình học rõ ràng: bắt đầu từ khái niệm nào, chọn công cụ nào, nên dùng thư viện nào, và phần nào là đủ cho bản cơ bản. Khi hiểu được cấu trúc cốt lõi của từng loại contract, bạn sẽ tránh được lỗi học lan man, tránh custom quá sớm và xây được tư duy học viết smart contract theo hướng có hệ thống.
Sau đây, bài viết sẽ đi từ phần định nghĩa, so sánh, chuẩn bị môi trường dev, cấu trúc ERC-20, cấu trúc ERC-721, thứ tự học phù hợp cho người mới và cuối cùng là các sai lầm phổ biến sau khi đã viết được phiên bản cơ bản. Nhờ vậy, bạn không chỉ biết cách bắt đầu mà còn biết nên luyện bằng project thực hành để build portfolio và cách tiếp cận test smart contract và unit test ngay từ giai đoạn đầu.
ERC-20 và ERC-721 là gì, và người mới có nên học cả hai ngay từ đầu không?
ERC-20 và ERC-721 là hai chuẩn smart contract trên Ethereum; ERC-20 dùng cho token có thể thay thế, còn ERC-721 dùng cho NFT, và người mới có thể học cả hai nhưng không nên học dàn trải cùng lúc.
Để hiểu rõ hơn, phần mở đầu này cần móc xích trực tiếp với tiêu đề bài viết: khi bạn muốn viết smart contract ERC-20 và ERC-721 cơ bản, điều đầu tiên không phải là mở IDE để code ngay mà là hiểu đúng bản chất của hai chuẩn token này. Chỉ khi phân biệt được mục đích sử dụng, cơ chế sở hữu và logic vận hành, bạn mới chọn được hướng học phù hợp.
ERC-20 là gì và được dùng để tạo những loại tài sản số nào?
ERC-20 là tiêu chuẩn token fungible trên Ethereum, được hình thành để chuẩn hóa cách token tương tác với ví, sàn và smart contract khác thông qua các hàm cốt lõi như transfer, approve và balanceOf.
Cụ thể, ERC-20 giải quyết một vấn đề rất quan trọng trong hệ sinh thái blockchain: nếu mỗi dự án tự tạo một kiểu token riêng, ví và sàn sẽ rất khó tích hợp. Nhờ có một chuẩn chung, lập trình viên chỉ cần tuân thủ bộ quy tắc đã được cộng đồng chấp nhận là token có thể tương tác rộng rãi hơn. Đây là lý do ERC-20 trở thành nền tảng cho hàng loạt tài sản số trên Ethereum.
Về mặt ứng dụng, ERC-20 thường được dùng để tạo:
- Utility token dùng trong một ứng dụng hoặc nền tảng.
- Governance token để bỏ phiếu quản trị cộng đồng.
- Token thưởng, token thành viên hoặc token mô phỏng tài sản số.
- Stablecoin ở góc nhìn tiêu chuẩn giao tiếp token, dù phần cơ chế ổn định giá có thể phức tạp hơn nhiều.
Điểm quan trọng với người mới là không nên hiểu ERC-20 như “một đoạn code phát coin”. Thực chất, đây là một chuẩn tương tác. Khi bạn viết ERC-20 cơ bản, bạn đang học cách biểu diễn số dư, quyền chuyển token, quyền cho phép bên thứ ba chi tiêu token và cách các giao diện blockchain đọc dữ liệu từ contract.
Trong thực hành, học ERC-20 trước thường giúp người mới làm quen với:
- State variable và mapping.
- Cấu trúc hàm public/external.
- Event để ghi lại giao dịch.
- Logic cập nhật số dư và tổng cung.
ERC-721 là gì và vì sao phù hợp để tạo NFT?
ERC-721 là tiêu chuẩn token non-fungible trên Ethereum, được thiết kế để biểu diễn tài sản số duy nhất, trong đó mỗi token có danh tính riêng thông qua tokenId và có thể gắn metadata mô tả.
Khác với ERC-20, mỗi token ERC-721 không thể thay thế hoàn toàn cho token khác. Một NFT mang tokenId số 1 không đồng nhất với tokenId số 2, ngay cả khi chúng cùng thuộc một bộ sưu tập. Đây là nền tảng khiến ERC-721 trở thành chuẩn phù hợp cho tranh số, vật phẩm game, vé sự kiện, chứng chỉ on-chain hoặc các tài sản cần thể hiện quyền sở hữu riêng biệt.
Để minh họa, nếu bạn tạo 1.000 token ERC-20, mỗi token đều giống nhau theo giá trị quy ước của hệ thống. Nhưng nếu bạn mint 1.000 NFT ERC-721, mỗi NFT có thể gắn với một metadata khác nhau, một hình ảnh khác nhau hoặc một quyền lợi khác nhau.
Người mới học ERC-721 sẽ gặp các khái niệm nền tảng như:
tokenId: mã định danh duy nhất của từng NFT.ownerOf: truy vấn chủ sở hữu của token cụ thể.safeTransferFrom: chuyển NFT an toàn giữa các địa chỉ.tokenURI: liên kết tới metadata mô tả NFT.
Vì vậy, nếu mục tiêu của bạn là làm bộ sưu tập NFT hoặc một ứng dụng xoay quanh tài sản số độc bản, ERC-721 là chuẩn nên học. Tuy nhiên, để học nhanh và chắc, nhiều người vẫn chọn bắt đầu từ ERC-20 trước do logic số dư dễ hình dung hơn.
ERC-20 và ERC-721 khác nhau như thế nào về bản chất và mục đích sử dụng?
ERC-20 thắng về tính tiêu chuẩn hóa cho token thay thế, ERC-721 tốt hơn trong biểu diễn quyền sở hữu riêng lẻ, còn về mục đích sử dụng thì ERC-20 phù hợp với token giao dịch còn ERC-721 tối ưu cho NFT và tài sản độc bản.
Tuy nhiên, sự khác nhau giữa hai chuẩn này không chỉ nằm ở tên gọi. Điểm khác biệt cốt lõi nằm ở cách contract hiểu tài sản. ERC-20 lưu giá trị theo số lượng trong một mapping số dư. ERC-721 lưu quyền sở hữu theo từng tokenId. Một bên thiên về lượng, một bên thiên về danh tính.
Bảng dưới đây tóm tắt các khác biệt quan trọng giữa ERC-20 và ERC-721 để người mới dễ hình dung trước khi đi vào phần code:
| Tiêu chí | ERC-20 | ERC-721 |
|---|---|---|
| Bản chất tài sản | Fungible token | Non-fungible token |
| Đơn vị sở hữu | Số lượng token | Từng tokenId riêng biệt |
| Truy vấn chính | balanceOf(address) |
ownerOf(tokenId) |
| Chuyển tài sản | transfer / transferFrom |
safeTransferFrom / transferFrom |
| Metadata | Không phải trọng tâm | Là thành phần rất quan trọng |
| Use case | Utility token, governance token, payment token | NFT art, vật phẩm game, chứng chỉ, sưu tầm |
Chính từ sự khác biệt này, người mới cần tránh một nhầm lẫn phổ biến: ERC-721 không phải “ERC-20 có thêm ảnh”, còn ERC-20 cũng không phải “phiên bản đơn giản hơn của NFT”. Hai chuẩn giải quyết hai nhu cầu khác nhau của hệ sinh thái blockchain.
Để dẫn dắt sang phần tiếp theo, sau khi đã hiểu ERC-20 và ERC-721 là gì, câu hỏi thực tế hơn sẽ xuất hiện: muốn bắt đầu viết hai loại contract này, người mới cần chuẩn bị những gì trong môi trường dev và công cụ học tập?
Muốn viết smart contract ERC-20 và ERC-721 cơ bản thì cần chuẩn bị những gì?
Muốn viết ERC-20 và ERC-721 cơ bản, bạn cần 4 nhóm chuẩn bị chính: kiến thức Solidity nền tảng, ví Web3, testnet và một bộ công cụ phát triển phù hợp để có thể viết, deploy và kiểm tra contract.
Để bắt đầu đúng, bạn không cần dựng ngay một hệ thống phức tạp như developer chuyên nghiệp. Điều quan trọng hơn là dựng một môi trường dev đủ dùng, dễ quan sát và ít ma sát học tập. Với người mới, tư duy “đơn giản nhưng đúng chuẩn” luôn hiệu quả hơn việc ôm quá nhiều công cụ ngay từ ngày đầu.
Người mới cần hiểu những khái niệm Solidity nào trước khi bắt đầu?
Người mới cần hiểu tối thiểu 6 khái niệm Solidity trước khi bắt đầu: contract, state variable, function, constructor, mapping và event; chỉ cần nắm chắc các phần này là đã có thể đọc và viết bản ERC-20 hoặc ERC-721 cơ bản.
Cụ thể hơn, bạn không cần đi sâu vào mọi ngóc ngách của Solidity ở giai đoạn nhập môn. Phần đủ dùng cho bài toán token/NFT cơ bản bao gồm:
- Contract: khối mã chính chứa logic của token hoặc NFT.
- State variable: biến lưu trạng thái trên blockchain, ví dụ tổng cung hoặc chủ sở hữu.
- Function: hàm để đọc hoặc thay đổi dữ liệu.
- Constructor: logic khởi tạo chạy một lần khi deploy contract.
- Mapping: cấu trúc dữ liệu cực kỳ phổ biến để ánh xạ địa chỉ với số dư hoặc tokenId với chủ sở hữu.
- Event: tín hiệu để giao diện hoặc explorer nhận biết hành động đã xảy ra.
Ví dụ, khi bạn viết ERC-20 cơ bản, bạn cần biết mapping để lưu số dư. Khi bạn viết ERC-721 cơ bản, bạn cần mapping để gắn tokenId với địa chỉ chủ sở hữu. Khi bạn tạo logic mint, bạn cần constructor hoặc function khởi tạo. Khi bạn muốn frontend hiển thị giao dịch, bạn cần event.
Học các khái niệm này theo hướng có sản phẩm đầu ra sẽ nhanh hơn nhiều. Vì thế, thay vì chỉ học lý thuyết, bạn nên gắn chúng với một project thực hành để build portfolio như: tạo token demo cho cộng đồng, viết NFT contract cơ bản cho bộ sưu tập thử nghiệm, hoặc deploy contract lên testnet để ghi lại case study cá nhân.
Nên dùng Remix hay Hardhat khi học viết ERC-20 và ERC-721 cơ bản?
Remix dễ học và triển khai nhanh cho người mới, Hardhat mạnh hơn trong quy trình phát triển chuyên nghiệp, còn nếu mục tiêu là học cơ bản thì Remix là điểm khởi đầu tốt hơn.
Cụ thể, Remix có lợi thế lớn ở chỗ hoạt động trực tiếp trên trình duyệt. Bạn không cần cài đặt nhiều, không phải cấu hình dự án Node.js phức tạp và có thể viết, biên dịch, deploy ngay trong một giao diện thống nhất. Đây là môi trường rất phù hợp cho giai đoạn bạn mới học viết smart contract.
Ngược lại, Hardhat phù hợp hơn khi bạn bắt đầu cần:
- Tổ chức dự án có cấu trúc thư mục rõ ràng.
- Tích hợp script deploy.
- Viết test smart contract và unit test.
- Quản lý nhiều contract, thư viện và network.
- Tái sử dụng code cho các project thực tế hơn.
Bảng sau giúp bạn chọn công cụ theo mục tiêu học:
| Mục tiêu | Remix | Hardhat |
|---|---|---|
| Học cú pháp nhanh | Rất phù hợp | Phù hợp nhưng nặng hơn |
| Viết contract demo | Rất phù hợp | Phù hợp |
| Dựng dự án có cấu trúc | Hạn chế | Rất phù hợp |
| Viết test smart contract và unit test | Cơ bản | Mạnh |
| Tự động hóa deploy | Hạn chế | Rất phù hợp |
| Phù hợp cho người mới | Cao | Trung bình |
Vì vậy, lộ trình an toàn là: bắt đầu với Remix để hiểu contract hoạt động thế nào, sau đó chuyển dần sang Hardhat khi bạn muốn tổ chức mã nguồn nghiêm túc hơn.
Vì sao người mới nên dùng thư viện OpenZeppelin thay vì tự viết mọi thứ từ đầu?
Có, người mới nên dùng OpenZeppelin vì thư viện này giúp giảm lỗi logic, bám sát chuẩn cộng đồng và rút ngắn thời gian học bằng cách kế thừa các contract mẫu đã được sử dụng rộng rãi.
Để hiểu rõ hơn, học viết smart contract không có nghĩa là phải tự phát minh lại toàn bộ bánh xe. Trong thực tế, rất nhiều smart contract chuyên nghiệp vẫn kế thừa từ thư viện chuẩn, sau đó chỉ thêm logic phù hợp với dự án. Với người mới, OpenZeppelin đóng vai trò như một giáo trình thực chiến: vừa cung cấp code chuẩn, vừa giúp bạn học cách cộng đồng triển khai ERC-20 và ERC-721.
Lợi ích chính của OpenZeppelin gồm:
- Giảm rủi ro tự viết sai các hàm cơ bản.
- Giúp đọc code có cấu trúc chuyên nghiệp hơn.
- Dễ học cách kế thừa và mở rộng contract.
- Thuận lợi khi sau này chuyển sang test smart contract và unit test.
- Giảm việc custom thừa trong giai đoạn chưa hiểu sâu logic.
Tuy nhiên, dùng thư viện không đồng nghĩa với sao chép mù quáng. Bạn vẫn cần hiểu mỗi hàm cốt lõi làm gì, quyền nào đang được cấp và biến nào đang kiểm soát trạng thái hệ thống. Đây là cầu nối quan trọng trước khi đi vào cấu trúc ERC-20 cơ bản.
Một smart contract ERC-20 cơ bản gồm những thành phần nào?
Một smart contract ERC-20 cơ bản thường gồm 6 thành phần chính: tên token, ký hiệu, tổng cung, số dư, hàm chuyển token và cơ chế cấp quyền chi tiêu; chỉ cần nắm chắc các phần này là bạn đã hiểu khung xương của token contract.
Tiếp theo, khi đi vào ERC-20, bạn nên ưu tiên hiểu logic trước rồi mới nhìn code. Nhiều người mới bị hút vào syntax mà quên rằng token contract thực chất là một hệ thống quản lý quyền sở hữu số lượng token giữa các địa chỉ. Khi hiểu nó như một “sổ cái logic trên chain”, bạn sẽ đọc contract dễ hơn rất nhiều.
Những biến, hàm và logic cốt lõi nào thường có trong ERC-20?
ERC-20 cơ bản thường có các biến và hàm cốt lõi như name, symbol, totalSupply, balanceOf, transfer, approve, allowance và transferFrom, vì đây là các phần tối thiểu để token hoạt động đúng chuẩn.
Cụ thể hơn, mỗi thành phần đóng một vai trò riêng:
name: tên đầy đủ của token.symbol: ký hiệu rút gọn.totalSupply: tổng số token đã được tạo.balanceOf(address): kiểm tra số dư của một ví.transfer(to, amount): chuyển token trực tiếp từ người gửi đến người nhận.approve(spender, amount): cấp quyền cho địa chỉ khác được dùng token.allowance(owner, spender): xem hạn mức đã cấp.transferFrom(from, to, amount): chuyển token theo quyền đã được cấp.
Đây không phải là danh sách ngẫu nhiên. Nó phản ánh đúng nhu cầu tương tác của hệ sinh thái. Ví dụ, sàn DEX hoặc protocol DeFi thường không thể tự ý lấy token của bạn nếu chưa được approve. Đây là nguyên tắc quyền truy cập rất quan trọng trên Ethereum.
Nếu bạn học theo hướng công thức, hãy nhìn ERC-20 như một vòng logic:
- Token được mint hoặc khởi tạo nguồn cung.
- Số dư được lưu vào mapping.
- Người dùng chuyển token bằng
transfer. - Bên thứ ba chỉ được chuyển thay nếu đã được cấp quyền bằng
approve. - Mọi biến động quan trọng nên phát event để dễ theo dõi.
Quy trình mint và chuyển token trong ERC-20 diễn ra như thế nào?
Quy trình mint và chuyển token trong ERC-20 diễn ra qua 3 bước chính: tạo nguồn cung, gán số dư cho địa chỉ nhận và cập nhật số dư khi token được chuyển giữa các ví.
Để minh họa, ở bản cơ bản nhất, contract có thể mint toàn bộ nguồn cung ngay trong constructor và gửi về ví deployer. Sau đó, mỗi khi người dùng gọi transfer, contract sẽ kiểm tra số dư của người gửi, trừ đi lượng chuyển và cộng sang người nhận. Nếu dùng transferFrom, contract còn phải kiểm tra thêm phần allowance.
Một luồng đơn giản thường như sau:
- Deploy contract.
- Constructor mint tổng cung ban đầu.
- Ví A nhận token.
- Ví A dùng
transfergửi token sang ví B. - Hoặc ví A dùng
approvecho ví C/quy trình DEX. - Ví C dùng
transferFromtrong giới hạn đã được cấp.
Điều người mới cần chú ý là mint là quyền rất nhạy cảm. Trong bản cơ bản, bạn có thể mint một lần tại thời điểm deploy để dễ hiểu logic. Nếu mở thêm hàm mint công khai mà không kiểm soát quyền, contract có thể bị lạm phát token ngoài ý muốn.
Đây cũng là lý do bạn nên bắt đầu từ bản tối giản trước khi nghĩ đến tokenomics nâng cao như burn, tax, reflection hay anti-bot.
Một mẫu ERC-20 cơ bản cho người mới nên tối giản đến mức nào?
Một mẫu ERC-20 cơ bản cho người mới nên tối giản ở mức chỉ giữ lại phần chuẩn token và logic mint/chuyển tối thiểu, vì càng ít thành phần không cần thiết thì càng dễ hiểu, dễ test và ít lỗi hơn.
Cụ thể, phiên bản học tập nên tập trung vào:
- Tên token và ký hiệu.
- Tổng cung khởi tạo.
- Số dư từng địa chỉ.
- Chuyển token.
- Cấp quyền và chuyển theo quyền.
- Event cơ bản.
Ngược lại, người mới chưa nên đưa vào quá sớm các thành phần như:
- Thuế giao dịch.
- Blacklist/whitelist phức tạp.
- Cơ chế anti-whale.
- Cơ chế reward nhiều tầng.
- Nâng cấp proxy.
- Quản trị đa vai trò phức tạp.
Lý do rất rõ: khi bạn chưa hiểu logic lõi mà đã thêm quá nhiều điều kiện, việc debug sẽ trở nên khó khăn. Hơn nữa, nếu mục tiêu hiện tại là học, thì “chạy được, hiểu được và giải thích được” quan trọng hơn “trông có vẻ nhiều tính năng”.
Để dẫn sang phần kế tiếp, nếu ERC-20 dạy bạn cách quản lý số lượng token, thì ERC-721 sẽ dạy bạn cách quản lý quyền sở hữu của từng tài sản số riêng lẻ.
Một smart contract ERC-721 cơ bản gồm những thành phần nào?
Một smart contract ERC-721 cơ bản thường gồm 5 thành phần cốt lõi: tokenId, chủ sở hữu, cơ chế mint, hàm chuyển NFT và metadata; đây là bộ khung quan trọng để tạo một NFT contract có thể vận hành đúng chuẩn.
Để hiểu đúng ERC-721, bạn cần chuyển tư duy từ “bao nhiêu token” sang “token nào thuộc về ai”. Đây chính là thay đổi lớn nhất giữa ERC-20 và ERC-721. Với NFT, mỗi token là một thực thể riêng, nên logic contract xoay quanh danh tính từng token thay vì số lượng thuần túy.
Token ID, quyền sở hữu và metadata hoạt động ra sao trong ERC-721?
Trong ERC-721, mỗi NFT được nhận diện bằng một tokenId duy nhất, quyền sở hữu được xác định theo tokenId đó và metadata được gắn qua tokenURI để mô tả nội dung của NFT.
Cụ thể hơn, tokenId giống như số seri của từng NFT. Khi contract mint ra một NFT mới, nó tạo tokenId và gán token đó cho một địa chỉ ví cụ thể. Từ đó, bất kỳ ai cũng có thể truy vấn ownerOf(tokenId) để biết NFT thuộc về ai.
Phần metadata là điểm cực kỳ quan trọng trong NFT. Nếu không có metadata, NFT chỉ là một bản ghi sở hữu trên chain mà chưa truyền tải được nội dung mô tả, hình ảnh, thuộc tính hay thông tin liên quan. Thông thường:
tokenURI(tokenId)trả về đường dẫn tới metadata.- Metadata chứa tên NFT, mô tả, hình ảnh và các thuộc tính mở rộng.
- Ứng dụng, marketplace hoặc ví sẽ đọc metadata để hiển thị NFT cho người dùng.
Điều cần nhớ là ERC-721 cơ bản không bắt buộc phải xây một hệ metadata phức tạp. Nhưng để hiểu NFT vận hành ngoài đời thực, bạn cần nắm rằng metadata là cầu nối giữa “quyền sở hữu on-chain” và “trải nghiệm hiển thị off-chain”.
Quy trình mint NFT cơ bản trong ERC-721 diễn ra như thế nào?
Quy trình mint NFT cơ bản trong ERC-721 diễn ra qua 3 bước chính: tạo tokenId mới, gán quyền sở hữu cho địa chỉ nhận và liên kết metadata để NFT có thể được nhận diện trên các giao diện hiển thị.
Để minh họa, một luồng mint NFT cơ bản thường diễn ra như sau:
- Contract xác định tokenId tiếp theo.
- Contract kiểm tra tokenId đó chưa tồn tại.
- Contract gán tokenId cho ví nhận.
- Contract cập nhật số lượng NFT mà ví đang sở hữu nếu có cơ chế đếm.
- Contract gắn tokenURI hoặc logic suy ra metadata.
- Contract phát event mint hoặc transfer từ địa chỉ zero.
So với ERC-20, mint ERC-721 không tạo ra một “lượng tài sản đồng nhất” mà tạo ra từng đơn vị độc lập. Điều đó làm cho logic kiểm soát dữ liệu chặt chẽ hơn. Bạn không chỉ cần biết ai đang có bao nhiêu NFT, mà còn phải biết chính xác NFT nào thuộc về ai.
Ở giai đoạn đầu, bạn có thể thiết kế contract theo hướng:
- Chỉ owner mới mint.
- Hoặc cho phép ví người dùng mint thử trên testnet.
- Mỗi lần mint tạo 1 NFT mới.
- Chưa cần thêm whitelist, public sale hay royalty.
Cách tối giản này giúp bạn tập trung vào điều cốt lõi: hiểu quan hệ giữa tokenId, owner và metadata.
ERC-721 cơ bản có cần thêm enumerable, royalty hoặc marketplace logic không?
Không, ERC-721 cơ bản chưa cần enumerable, royalty hoặc marketplace logic vì các phần đó thuộc nhóm mở rộng, trong khi người mới nên tập trung vào quyền sở hữu, mint, chuyển NFT và metadata trước.
Tuy nhiên, nhiều người mới có xu hướng muốn “làm một NFT contract trông chuyên nghiệp” ngay từ đầu. Đây là bẫy phổ biến. Khi bạn chưa nắm chắc lõi ERC-721 mà đã thêm enumerable, royalty hoặc tích hợp logic marketplace, mức độ phức tạp sẽ tăng mạnh và khả năng hiểu sai luồng dữ liệu rất cao.
Ở bản nhập môn, bạn chỉ cần:
- Mint được NFT.
- Kiểm tra được chủ sở hữu.
- Chuyển NFT giữa các ví.
- Hiển thị được metadata.
Còn các phần như enumerable thường liên quan đến việc liệt kê toàn bộ NFT; royalty liên quan đến chia phí bản quyền; marketplace logic lại là câu chuyện lớn hơn về giao dịch, listing và thanh toán. Những phần đó rất đáng học, nhưng là bước sau, không phải bước đầu.
Điều này cũng tạo móc xích tự nhiên sang câu hỏi tiếp theo: nếu cả ERC-20 và ERC-721 đều có giá trị học tập, vậy người mới nên bắt đầu từ chuẩn nào trước để tối ưu đường học?
Người mới nên bắt đầu viết ERC-20 hay ERC-721 trước?
Người mới nên bắt đầu với ERC-20 trước trong đa số trường hợp vì ERC-20 dễ hình dung logic hơn, ít thành phần đặc thù hơn và giúp xây nền tảng tốt trước khi chuyển sang ERC-721.
Để hiểu rõ hơn, đây là một câu hỏi dạng so sánh nhưng thực chất mục tiêu là tìm lộ trình học hiệu quả. Không có một đáp án tuyệt đối cho mọi trường hợp, nhưng với đa số người mới, bắt đầu từ chuẩn dễ hơn và có tính nền tảng hơn thường đem lại lợi ích lớn hơn.
Khi nào nên học ERC-20 trước để hiểu logic token fungible?
Bạn nên học ERC-20 trước khi muốn hiểu logic token fungible, flow chuyển số dư và cơ chế approve/allowance, vì đây là nền tảng quan trọng cho nhiều ứng dụng blockchain hơn NFT đơn lẻ.
Cụ thể, ERC-20 giúp bạn làm quen với:
- Mô hình mapping số dư.
- Hàm chuyển token.
- Cơ chế cấp quyền cho smart contract khác.
- Tư duy tổng cung và phân phối.
- Logic gần với nhiều protocol DeFi và token economy.
Nếu mục tiêu dài hạn của bạn là đi vào DeFi, ví Web3, tokenomics, stablecoin hoặc các ứng dụng tài chính on-chain, thì ERC-20 gần như là cánh cửa đầu tiên. Hơn nữa, contract ERC-20 cơ bản thường ngắn gọn hơn ERC-721 khi xét về cách hiểu ban đầu.
Một lợi ích khác là bạn có thể nhanh chóng biến việc học thành project thực hành để build portfolio. Ví dụ:
- Tạo token demo cho cộng đồng.
- Viết token dùng trong một app thử nghiệm.
- Deploy token lên testnet và ghi lại quá trình.
- Kết hợp frontend đơn giản để hiển thị balance và transfer.
Khi nào nên học ERC-721 trước nếu mục tiêu là NFT?
Bạn nên học ERC-721 trước nếu mục tiêu chính là NFT, bộ sưu tập số hoặc ứng dụng cần biểu diễn quyền sở hữu tài sản riêng biệt, vì chuẩn này phản ánh trực tiếp đúng bài toán sản phẩm bạn muốn làm.
Trong trường hợp bạn đang muốn xây:
- NFT collection thử nghiệm.
- Vé sự kiện on-chain.
- Chứng chỉ số.
- Vật phẩm game blockchain.
- Tài sản số độc bản có metadata riêng.
thì học ERC-721 trước sẽ cho cảm giác “đúng việc” hơn. Bạn sẽ sớm tiếp cận các khái niệm như tokenId, ownership, metadata và cách NFT hiển thị trên ví hoặc marketplace.
Tuy nhiên, người học theo hướng này vẫn nên bổ sung nền tảng về ERC-20 sau đó, vì hệ sinh thái blockchain hiếm khi chỉ tồn tại một chuẩn độc lập. Nhiều dự án NFT vẫn cần token fungible cho phần thưởng, tiện ích hoặc quản trị.
Lộ trình học nào giúp người mới nắm cả ERC-20 và ERC-721 mà không bị quá tải?
Lộ trình hiệu quả để nắm ERC-20 và ERC-721 mà không bị quá tải gồm 5 bước: học Solidity nền tảng, viết ERC-20 cơ bản, tập test, chuyển sang ERC-721 cơ bản và cuối cùng là làm dự án tích hợp nhỏ.
Dưới đây là lộ trình khuyến nghị:
- Học cú pháp Solidity đủ dùng
Contract, function, mapping, constructor, event.
Không sa đà vào phần quá nâng cao ở giai đoạn đầu. - Viết ERC-20 cơ bản bằng Remix
Hiểu totalSupply, balance, transfer, approve.
Deploy trên testnet và tương tác bằng ví. - Tập test smart contract và unit test
Bắt đầu chuyển dần sang Hardhat.
Viết các case test cho transfer, approve, mint hoặc quyền truy cập. - Viết ERC-721 cơ bản
Hiểu tokenId, ownerOf, mint, tokenURI.
Tạo một bộ NFT demo với metadata đơn giản. - Làm dự án mini
Token faucet nội bộ.
Bộ sưu tập NFT demo.
Ứng dụng hiển thị token/NFT để tạo portfolio.
Nếu học theo lộ trình này, bạn không chỉ biết đọc code mà còn biết triển khai, kiểm tra và giải thích logic của contract. Đây là sự khác biệt lớn giữa người “đã xem tutorial” và người thực sự hiểu cách hệ thống vận hành.
Sau khi viết ERC-20 và ERC-721 cơ bản, người mới thường gặp những sai lầm và hiểu lầm nào?
Sau khi viết được ERC-20 và ERC-721 cơ bản, người mới thường gặp 4 sai lầm chính: tưởng contract chạy được là đủ an toàn, custom quá sớm, hiểu mơ hồ về quyền mint và bỏ qua test trước khi deploy.
Bên cạnh đó, đây chính là ranh giới ngữ cảnh của bài viết: từ phần trả lời trực tiếp cách bắt đầu viết smart contract cơ bản, chúng ta chuyển sang phần micro context để đào sâu những hiểu lầm dễ khiến người học đi chệch hướng. Nếu bạn muốn tiến từ “biết viết” sang “biết làm đúng”, đây là phần không nên bỏ qua.
Có phải contract chạy được là đã đủ an toàn để deploy thật hay không?
Không, contract chạy được chưa đủ an toàn để deploy thật vì code có thể đúng cú pháp nhưng vẫn sai logic, sai quyền truy cập hoặc tạo lỗ hổng khi tương tác với người dùng và hệ sinh thái thực.
Cụ thể hơn, có ít nhất 3 lý do chính:
- Contract biên dịch thành công không đồng nghĩa với logic đúng.
- Contract mint/chuyển được không đồng nghĩa với quyền truy cập đã an toàn.
- Contract chạy trên test đơn giản không đồng nghĩa chịu được tình huống thực tế.
Ví dụ, một hàm mint viết sai quyền có thể cho bất kỳ ai gọi. Một hàm transfer có thể cập nhật sai trạng thái. Một contract dùng thư viện chuẩn nhưng custom không đúng vẫn có thể gây lỗi ở luồng vận hành. Vì vậy, giữa “đoạn code chạy được” và “contract đủ an toàn để dùng thật” là một khoảng cách lớn.
Đây là lý do người mới cần sớm làm quen với tư duy kiểm thử. Không cần đợi đến khi viết dự án lớn mới học test smart contract và unit test. Ngay cả với bản cơ bản, bạn vẫn nên test các tình huống như:
- Chuyển token/NFT đúng và sai.
- Gọi hàm từ người không có quyền.
- Mint vượt giới hạn nếu có.
- Cấp quyền approve rồi gọi transferFrom.
Những lỗi phổ biến nào khiến người mới viết sai ERC-20 hoặc ERC-721?
Người mới viết sai ERC-20 hoặc ERC-721 thường do 5 lỗi phổ biến: không hiểu logic thư viện, quản lý quyền kém, xử lý metadata mơ hồ, test quá ít và thêm quá nhiều tính năng trước khi nắm chắc phần lõi.
Cụ thể hơn, các lỗi thường gặp gồm:
- Sao chép code mà không hiểu
Người học copy contract mẫu từ tutorial nhưng không hiểu từng hàm đang làm gì. Hệ quả là khi sửa một đoạn nhỏ, contract có thể lệch logic mà không nhận ra. - Cấp quyền mint không chặt
Đây là lỗi nhạy cảm nhất. Chỉ cần hàm mint không được khóa đúng quyền, contract có thể bị tạo thêm token hoặc NFT ngoài kiểm soát. - Nhầm giữa logic ERC-20 và ERC-721
Một số người mới dùng tư duy “số lượng” để xử lý NFT hoặc ngược lại dùng tư duy “định danh riêng” cho token fungible, dẫn đến cấu trúc dữ liệu không hợp lý. - Xử lý tokenURI hoặc metadata không rõ ràng
NFT có thể mint được nhưng không hiển thị đúng trên giao diện vì metadata sai cấu trúc hoặc không được liên kết hợp lệ. - Không test các case biên
Chỉ test đường đi đẹp, không test trường hợp lỗi, không test quyền truy cập, không test khi dữ liệu đầu vào không hợp lệ.
Khi đã hiểu các lỗi này, bạn sẽ học nhanh hơn nhiều vì biết chính xác nên quan sát phần nào trong contract thay vì debug mù.
Khi nào nên dùng contract mẫu từ OpenZeppelin và khi nào không nên tự custom quá sớm?
Bạn nên dùng contract mẫu từ OpenZeppelin ở giai đoạn học nền tảng và prototype, còn không nên custom quá sớm khi chưa hiểu rõ flow của chuẩn token, quyền truy cập và tác động của từng thay đổi lên trạng thái contract.
Cụ thể, hãy dùng OpenZeppelin khi:
- Bạn đang học cấu trúc chuẩn.
- Bạn muốn viết nhanh một bản ERC-20 hoặc ERC-721 cơ bản.
- Bạn cần một nền tảng đáng tin cậy để tập đọc và chỉnh sửa.
- Bạn muốn giảm lỗi sơ cấp khi đang xây môi trường dev cho dự án học tập.
Ngược lại, chưa nên custom quá sớm khi:
- Bạn chưa hiểu approve/allowance hoạt động ra sao.
- Bạn chưa nắm vòng đời mint và transfer.
- Bạn chưa quen viết test.
- Bạn thêm tính năng chỉ vì “thấy dự án khác có”.
Một nguyên tắc rất đáng nhớ là: hãy kế thừa trước, hiểu sau đó, rồi mới mở rộng. Làm ngược lại sẽ khiến quá trình học dễ bị đứt gãy.
Sau bản cơ bản, người mới nên học thêm gì để nâng cấp sang phiên bản thực tế hơn?
Sau bản cơ bản, người mới nên học thêm 4 nhóm nội dung: kiểm thử, quản lý quyền, quy trình deploy và tư duy bảo mật; đây là các bước giúp chuyển từ contract demo sang contract có giá trị thực hành cao hơn.
Để cụ thể hóa, lộ trình nâng cấp nên đi như sau:
- Kiểm thử
Học test smart contract và unit test với Hardhat hoặc framework tương tự. Bắt đầu từ các case đơn giản rồi mở rộng sang quyền truy cập, sự kiện và dữ liệu biên. - Quản lý quyền
Hiểu owner, role, access control, pausable hoặc các mẫu phân quyền thông dụng để không mở quá nhiều quyền cho contract. - Triển khai thực tế
Học quy trình deploy nhiều môi trường, lưu địa chỉ contract, verify source code và tích hợp frontend đơn giản. - Tư duy bảo mật
Dù chưa đi sâu audit chuyên nghiệp, bạn vẫn nên hình thành thói quen đặt câu hỏi: ai có quyền gọi hàm này, nếu gọi sai thì chuyện gì xảy ra, nếu dữ liệu đầu vào bất thường thì hệ thống phản ứng thế nào?
Nếu đi tiếp theo hướng này, bạn sẽ biến việc học viết smart contract từ mức “làm theo tutorial” thành năng lực thực sự có thể trình bày trong CV, GitHub hoặc portfolio cá nhân. Đây cũng là cách tạo khác biệt trong thị trường crypto: không chỉ biết khái niệm, mà có thể chứng minh năng lực bằng sản phẩm học tập rõ ràng.
Tóm lại, người mới nên học ERC-20 và ERC-721 theo thứ tự có chủ đích thay vì học đồng thời theo cảm hứng. ERC-20 giúp bạn hiểu logic token fungible, ERC-721 giúp bạn hiểu tài sản số độc bản, còn việc chọn Remix, Hardhat, OpenZeppelin và xây môi trường dev phù hợp sẽ quyết định tốc độ tiến bộ của bạn. Khi đã đi từ nền tảng đến thực hành, rồi từ thực hành sang test smart contract và unit test, bạn sẽ không chỉ biết viết contract cơ bản mà còn có khả năng biến kiến thức đó thành project thực hành để build portfolio một cách rõ ràng và thuyết phục.




































