Mua Crypto
Thị trường
Spot
FuturesBTC
Tiết kiệm
Trung tâm sự kiện
Trung tâm thưởng
Xem thêm
Lễ hội 0 phí
Giao diện ERC-721: Giao diện ERC-721 là gì?Giao diện ERC-721 là tập hợp tiêu chuẩn gồm các hàm và sự kiện của hợp đồng thông minh, được sử dụng để đại diện và chuyển token không thể thay thế trên Ethereum và các mạng blGiao diện ERC-721: Giao diện ERC-721 là gì?Giao diện ERC-721 là tập hợp tiêu chuẩn gồm các hàm và sự kiện của hợp đồng thông minh, được sử dụng để đại diện và chuyển token không thể thay thế trên Ethereum và các mạng bl

Giao diện ERC-721

2026/10/13 15:31
#Advanced
Humanity
H$0.05724-2.57%
Gravity
G$0.003751-4.04%
MemeCore
M$0.88849+16.47%
TokenFi
TOKEN$0.00186-2.10%
AINFT
NFT$0.0000002366-0.29%

Giao diện ERC-721 là gì?

Giao diện ERC-721 là tập hợp tiêu chuẩn gồm các hàm và sự kiện của hợp đồng thông minh, được sử dụng để đại diện và chuyển token không thể thay thế trên Ethereum và các mạng blockchain tương thích.Token không thể thay thế (NFT) đại diện cho một token có mã định danh duy nhất, thay vì một lượng đơn vị giống hệt nhau có thể hoán đổi.

Đặc tả ERC-721 chính thức xác định cách ví, ứng dụng, hợp đồng thông minh và công cụ blockchain có thể kiểm tra quyền sở hữu NFT và thực hiện giao dịch chuyển theo tiêu chuẩn.

Giao diện này không xác định NFT đại diện cho điều gì, có giá trị ra sao hoặc nội dung liên kết với NFT có xác thực hay không.Giao diện cung cấp ngôn ngữ kỹ thuật chung để các ứng dụng crypto khác nhau có thể tương tác với hợp đồng NFT.Tiêu chuẩn ERC-721 đã đạt trạng thái Final trong quy trình Đề xuất cải tiến Ethereum và vẫn là một trong những tiêu chuẩn chính dành cho tài sản blockchain độc nhất.ERC-721 có thể được dùng cho vật phẩm sưu tầm kỹ thuật số, vật phẩm trong game, thông tin thành viên, đất ảo, vé sự kiện, tài sản dạng tên miền, vị thế tài chính và hồ sơ được token hóa.

Vì sao giao diện lại quan trọng?

Giao diện hợp đồng thông minh mô tả các hàm và sự kiện bên ngoài mà phần mềm tương thích kỳ vọng hợp đồng cung cấp.Nếu không có giao diện chung, mỗi dự án NFT có thể sử dụng tên hàm và quy tắc chuyển token khác nhau.Khi đó, ví và ứng dụng phi tập trung sẽ cần mã tùy chỉnh cho từng bộ sưu tập.

Giao diện ERC-721 cho phép phần mềm gọi các hàm quen thuộc như

ownerOf
,
balanceOf
,
approve
và
safeTransferFrom
.

Giao diện này cũng tiêu chuẩn hóa sự kiện để hệ thống off-chain theo dõi giao dịch chuyển và phê duyệt NFT.Hợp đồng có thể bổ sung các hàm ngoài ERC-721 mà vẫn duy trì khả năng tương thích với tiêu chuẩn cốt lõi.Tuân thủ giao diện cải thiện khả năng tương tác, nhưng không đảm bảo hợp đồng an toàn hoặc mọi ứng dụng đều hỗ trợ tính năng tùy chỉnh của hợp đồng.

Điều gì khiến token ERC-721 không thể thay thế?

Mỗi token ERC-721 có một số nguyên không dấu duy nhất gọi là token ID.Token được xác định đầy đủ bằng sự kết hợp của mạng blockchain, địa chỉ hợp đồng và token ID.Token ID 100 trong một hợp đồng không liên quan đến token ID 100 trong hợp đồng khác.Tiêu chuẩn không yêu cầu token ID bắt đầu từ 0, tăng theo thứ tự hoặc tuân theo quy luật có thể dự đoán.Ứng dụng nên xem mỗi token ID là mã định danh không mang ý nghĩa nội tại, thay vì đoán những ID nào tồn tại.Theo mô hình quyền sở hữu ERC-721 cốt lõi, mỗi token ID hợp lệ có một chủ sở hữu tại một thời điểm.NFT có thể được chuyển nguyên vẹn như một token, còn quyền sở hữu phân đoạn cần một hợp đồng hoặc cấu trúc token riêng nằm ngoài giao diện cơ bản.

Interface ID cốt lõi của ERC-721

Giao diện ERC-721 cốt lõi được nhận diện thông qua ERC-165 bằng giá trị

0x80ac58cd
.

Hợp đồng tương thích cần trả về

true
khi gọi
supportsInterface
với mã định danh này.

Tiêu chuẩn phát hiện giao diện ERC-165 tính interface ID bằng cách áp dụng phép XOR cho các function selector có trong giao diện đó.

ERC-165 cho phép ứng dụng hỏi hợp đồng xem hợp đồng tuyên bố hỗ trợ những giao diện tiêu chuẩn nào trước khi thử tương tác.Phản hồi tích cực hữu ích cho việc kiểm tra khả năng tương thích, nhưng không tự chứng minh rằng mọi hàm đều được triển khai chính xác.Ứng dụng xử lý tài sản có giá trị cũng có thể cần rà soát mã, kiểm thử và mô phỏng giao dịch.

Các hàm cốt lõi của ERC-721

Giao diện ERC-721 bắt buộc bao gồm các hàm truy vấn quyền sở hữu, chuyển token và quản lý phê duyệt.

Các hàm chính là

balanceOf
,
ownerOf
,
safeTransferFrom
,
transferFrom
,
approve
,
setApprovalForAll
,
getApproved
và
isApprovedForAll
.

Phần triển khai tương thích phải tuân theo hành vi bắt buộc của tiêu chuẩn, bao gồm kiểm tra quyền và điều kiện lỗi.Giao diện cốt lõi không quy định đầy đủ việc mint, burn, tiền bản quyền, giới hạn nguồn cung, định giá và quản trị bộ sưu tập.Dự án thường bổ sung logic riêng cho những tính năng đó.

Hàm balanceOf

Hàm

balanceOf
trả về số NFT mà một địa chỉ sở hữu trong một hợp đồng ERC-721.

Hàm này không trả về lượng token có thể chia nhỏ hoặc giá trị tài chính của NFT.Nếu một địa chỉ sở hữu token ID 4, 19 và 83 trong cùng bộ sưu tập, số dư của địa chỉ đó là ba.Tiêu chuẩn yêu cầu truy vấn địa chỉ zero phải thất bại.Hàm này không cho biết địa chỉ sở hữu những token ID cụ thể nào.Muốn tìm các ID đó có thể cần lập chỉ mục sự kiện chuyển token hoặc sử dụng giao diện enumerable tùy chọn.

Hàm ownerOf

Hàm

ownerOf
trả về chủ sở hữu hiện tại của một token ID cụ thể.

Với token đang tồn tại, chủ sở hữu trả về không được là địa chỉ zero.Theo tiêu chuẩn, truy vấn token không hợp lệ hoặc không tồn tại phải thất bại.Quyền sở hữu được ghi nhận trong hợp đồng kiểm soát các quyền chuyển token cốt lõi liên quan đến NFT đó.Điều này không nhất thiết chứng minh quyền sở hữu bản quyền, nhãn hiệu, tài sản vật lý hoặc các quyền pháp lý khác.Những quyền đó phụ thuộc vào thỏa thuận của dự án, luật áp dụng và hồ sơ bên ngoài.

Hàm transferFrom

Hàm

transferFrom
chuyển NFT từ địa chỉ này sang địa chỉ khác sau khi kiểm tra quyền và quyền sở hữu.

Bên gọi phải là chủ sở hữu, địa chỉ được phê duyệt cụ thể hoặc operator được chủ sở hữu phê duyệt.

Địa chỉ

from
phải khớp với chủ sở hữu hiện tại của NFT.

Địa chỉ người nhận không được là địa chỉ zero.Hàm này không yêu cầu hợp đồng thông minh nhận xác nhận rằng hợp đồng có thể xử lý NFT.

NFT được gửi bằng

transferFrom
đến hợp đồng không tương thích có thể trở nên không thể truy cập vĩnh viễn.

Người dùng và nhà phát triển thường nên ưu tiên giao dịch chuyển an toàn khi gửi NFT đến hợp đồng chưa rõ.

Các hàm safeTransferFrom

ERC-721 định nghĩa hai phiên bản nạp chồng của

safeTransferFrom
.

Một phiên bản bao gồm người gửi, người nhận và token ID.Phiên bản còn lại bổ sung trường bytes có thể chứa dữ liệu riêng của ứng dụng.Cả hai hàm đều thực hiện các bước kiểm tra quyền sở hữu và ủy quyền thông thường.

Nếu người nhận là hợp đồng thông minh, quy trình chuyển sẽ gọi

onERC721Received
trên hợp đồng đó.

Bên nhận phải trả về selector dự kiến, nếu không toàn bộ giao dịch sẽ revert.Việc kiểm tra bên nhận giúp giảm khả năng gửi NFT đến hợp đồng không thể quản lý NFT.Điều đó không chứng minh hợp đồng nhận đáng tin cậy hoặc NFT có thể được rút ra về sau.

IERC721Receiver là gì?

IERC721Receiver
là giao diện mà hợp đồng thông minh triển khai khi muốn nhận NFT thông qua
safeTransferFrom
.

Hàm bắt buộc của giao diện là

onERC721Received
.

Hàm này nhận operator, chủ sở hữu trước đó, token ID và dữ liệu tùy chọn.

Bên nhận hợp lệ trả về function selector của mình, thường được biểu thị là

0x150b7a02
.

Giá trị trả về không chính xác hoặc lời gọi bị revert sẽ khiến giao dịch chuyển an toàn thất bại.

Tài liệu triển khai ERC-721 hiện tại bao gồm giao diện receiver và tiện ích lưu giữ cơ bản cho hợp đồng cần nhận giao dịch chuyển an toàn.

Receiver nên xác minh hợp đồng NFT nào đã gọi nó trước khi dùng callback để cập nhật dữ liệu kế toán quan trọng.

Rủi ro callback của ERC-721 receiver

Giao dịch chuyển an toàn đến hợp đồng tạo ra một lệnh gọi bên ngoài đến bên nhận.Bên nhận có thể thực thi mã bổ sung trước khi giao dịch ban đầu hoàn tất.Điều này tạo ra khả năng tái nhập nếu ứng dụng gửi chưa hoàn tất việc cập nhật trạng thái nội bộ.Receiver độc hại có thể cố gọi một hàm khác trong hợp đồng ban đầu trong callback.

Hướng dẫn bảo mật hợp đồng thông minh của Solidity khuyến nghị hoàn tất các bước kiểm tra và cập nhật trạng thái quan trọng trước khi tương tác với bên ngoài, khi thiết kế dự kiến cho phép thứ tự đó.

Nhà phát triển nên kiểm thử giao dịch chuyển NFT an toàn với hợp đồng receiver độc hại, thay vì cho rằng callback vô hại.

Hàm approve

Hàm

approve
cấp cho một địa chỉ quyền chuyển một NFT cụ thể.

Thông thường, chủ sở hữu token hoặc operator được ủy quyền có thể cấp quyền này.Địa chỉ được phê duyệt không trở thành chủ sở hữu.Địa chỉ đó được cấp quyền chuyển token ID đã xác định.Phê duyệt cho từng token thường bị xóa khi NFT được chuyển.

Gọi

approve
với địa chỉ zero có thể xóa phê duyệt hiện có.

Người dùng nên xác minh địa chỉ được phê duyệt vì kẻ tấn công có quyền hợp lệ có thể chuyển NFT mà không cần chữ ký khác từ chủ sở hữu.

Hàm getApproved

Hàm

getApproved
trả về địa chỉ hiện được phê duyệt cho một token ID.

Nếu không có địa chỉ nào được phê duyệt riêng cho token đó, hàm thường trả về địa chỉ zero.Hàm này chỉ áp dụng cho NFT hợp lệ đang tồn tại.Hàm không báo cáo quyền operator bao trùm toàn bộ số NFT của chủ sở hữu.

Khi xác định một địa chỉ khác có thể chuyển token hay không, ứng dụng cũng nên kiểm tra

isApprovedForAll
.

Hàm setApprovalForAll

Hàm

setApprovalForAll
cấp hoặc thu hồi quyền operator đối với mọi token ERC-721 mà bên gọi sở hữu trong hợp đồng đó.

Operator được phê duyệt có thể chuyển NFT hiện có và NFT mà chủ sở hữu nhận thêm sau này từ cùng bộ sưu tập.Quyền này rộng hơn quyền phê duyệt cho một token ID.Hàm thường được dùng khi ứng dụng cần quản lý nhiều NFT mà không phải yêu cầu phê duyệt riêng cho từng NFT.Operator độc hại có thể chuyển tất cả NFT bị ảnh hưởng khi quyền vẫn còn hiệu lực.Ví nên hiển thị rõ địa chỉ bộ sưu tập và phạm vi quyền operator được phê duyệt.

Hàm isApprovedForAll

Hàm

isApprovedForAll
cho biết operator có quyền trên toàn bộ bộ sưu tập của một chủ sở hữu hay không.

Hàm trả về giá trị Boolean, không phải số lượng token.Quyền operator chỉ áp dụng trong hợp đồng ERC-721 đã cấp quyền đó.Phê duyệt trong một bộ sưu tập NFT không tự động áp dụng cho bộ sưu tập khác.Người dùng nên định kỳ xem lại quyền operator đang hoạt động và thu hồi những quyền không còn cần thiết.

Sự kiện ERC-721

Giao diện ERC-721 cốt lõi định nghĩa các sự kiện

Transfer
,
Approval
và
ApprovalForAll
.

Log sự kiện cho phép ví, trình lập chỉ mục, hệ thống phân tích và trình khám phá blockchain theo dõi hoạt động NFT theo tiêu chuẩn.Sự kiện giúp phần mềm off-chain tái dựng lịch sử quyền sở hữu và quyền hạn.Sự kiện hợp đồng là bằng chứng về những gì hợp đồng phát ra trong quá trình thực thi, nhưng ứng dụng vẫn nên xác nhận giao dịch đã thành công và đến từ hợp đồng dự kiến.

Sự kiện Transfer

Sự kiện

Transfer
ghi lại chủ sở hữu trước, chủ sở hữu mới và token ID.

Giao dịch chuyển thông thường có địa chỉ người gửi và người nhận khác zero.Việc mint thường được biểu thị bằng sự kiện chuyển từ địa chỉ zero đến chủ sở hữu đầu tiên.Việc burn thường được biểu thị bằng sự kiện chuyển từ chủ sở hữu đến địa chỉ zero.Giao diện ERC-721 không định nghĩa hàm mint hoặc burn công khai, dù các mẫu sự kiện này hỗ trợ theo dõi vòng đời token.Sự kiện cho thấy NFT đã được mint không chứng minh bộ sưu tập có nguồn cung cố định hoặc quyền mint bị giới hạn.

Sự kiện Approval

Sự kiện

Approval
ghi nhận phê duyệt cho một token ID.

Sự kiện xác định chủ sở hữu, địa chỉ được phê duyệt và token ID.Ứng dụng có thể dùng sự kiện này để theo dõi thay đổi về quyền chuyển token cụ thể.Không nên nhầm lẫn sự kiện này với giao dịch chuyển quyền sở hữu vì chủ sở hữu vẫn không thay đổi.

Sự kiện ApprovalForAll

Sự kiện

ApprovalForAll
ghi nhận việc chủ sở hữu bật hoặc tắt operator.

Sự kiện bao gồm chủ sở hữu, operator và trạng thái phê duyệt.Việc theo dõi sự kiện này rất quan trọng vì một lần phê duyệt operator có thể ảnh hưởng đến mọi NFT chủ sở hữu nắm giữ trong bộ sưu tập đó.Sự kiện thu hồi quyền không đảo ngược những giao dịch chuyển đã được thực hiện khi quyền còn hiệu lực.

Giao diện metadata ERC-721 tùy chọn

Phần mở rộng metadata bổ sung các hàm

name
,
symbol
và
tokenURI
.

Interface ID ERC-165 của phần mở rộng này là

0x5b5e139f
.

Đặc tả chính thức quy định phần mở rộng này là tùy chọn, dù nhiều hợp đồng NFT triển khai nó.

Hàm

name
trả về tên mô tả của bộ sưu tập.

Hàm

symbol
trả về mã định danh ngắn do nhà phát triển hợp đồng chọn.

Hàm

tokenURI
trả về URI liên kết với token ID cụ thể.

Tên và ký hiệu bộ sưu tập không phải là duy nhất, vì vậy không nên dùng chúng làm cách xác thực duy nhất.

tokenURI hoạt động như thế nào?

Hàm

tokenURI
thường trỏ đến tài liệu metadata JSON.

Tài liệu này có thể chứa các trường như tên hiển thị, mô tả, vị trí ảnh, hoạt ảnh và thuộc tính riêng của dự án.URI có thể sử dụng địa chỉ HTTPS, mã định danh nội dung phi tập trung hoặc URI dữ liệu on-chain.Tiêu chuẩn ERC-721 chính thức cho phép metadata có thể thay đổi.Điều này có nghĩa là nội dung hiển thị cho NFT có thể thay đổi sau khi mint, trừ khi hợp đồng hoặc dự án đưa ra cam kết bất biến mạnh hơn.

Hướng dẫn phát triển ERC-721 hiện tại lưu ý rằng bên kiểm soát vị trí lưu trữ có thể thay đổi metadata off-chain.

Quyền sở hữu token không tự động đảm bảo ảnh hoặc tệp bên ngoài luôn có thể truy cập.

Giao diện enumerable ERC-721 tùy chọn

Phần mở rộng enumerable cho phép ứng dụng tìm token ID thông qua truy vấn on-chain.

Interface ID ERC-165 của phần mở rộng này là

0x780e9d63
.

Phần mở rộng bổ sung các hàm

totalSupply
,
tokenByIndex
và
tokenOfOwnerByIndex
.

Hàm

totalSupply
trả về số token hiện hợp lệ mà hợp đồng theo dõi.

Các hàm index cho phép bên gọi truy xuất token ID từ toàn bộ nguồn cung hoặc từ tài sản của một chủ sở hữu.Enumerable là tùy chọn vì việc duy trì các index quyền sở hữu bổ sung làm tăng số lần ghi dữ liệu lưu trữ và lượng gas tiêu thụ.

Nhiều ứng dụng thay vào đó tái dựng danh sách NFT sở hữu từ sự kiện

Transfer
bằng cách lập chỉ mục off-chain.

Mint và burn

Giao diện ERC-721 cốt lõi không yêu cầu hàm mint công khai.Mỗi dự án tự quyết định việc mint được mở cho tất cả, giới hạn, lên lịch, giới hạn nguồn cung hay vô hiệu hóa vĩnh viễn.Tiêu chuẩn cũng không yêu cầu hàm burn công khai.Việc burn xóa token khỏi hồ sơ quyền sở hữu hợp lệ theo cách triển khai của hợp đồng.Người dùng nên tìm hiểu ai có quyền mint hoặc burn NFT và liệu quản trị viên có thể tác động đến token do tài khoản khác nắm giữ hay không.Giao diện chuyển tuân thủ tiêu chuẩn không chứng minh nguồn cung token là cố định.

Giao diện ERC-721 và phần triển khai ERC-721

Giao diện định nghĩa hành vi bên ngoài cần thiết để đảm bảo khả năng tương thích.Phần triển khai chứa logic thực tế về lưu trữ, quyền hạn, chuyển token, mint, metadata và quản trị.Hai hợp đồng có thể hỗ trợ cùng một giao diện ERC-721 nhưng sử dụng thiết kế nội bộ rất khác nhau.Một phần triển khai có thể bất biến, trong khi phần khác hoạt động thông qua proxy có thể nâng cấp.Một hợp đồng có thể có nguồn cung cố định, trong khi hợp đồng khác cho phép quản trị viên mint không giới hạn.Một hợp đồng có thể lưu metadata on-chain, trong khi hợp đồng khác trỏ đến máy chủ có thể thay đổi.Người dùng nên rà soát phần triển khai thay vì xem việc hỗ trợ giao diện là đánh giá bảo mật toàn diện.

ERC-721 so với ERC-20

ERC-20 đại diện cho số dư có thể thay thế, còn ERC-721 đại diện cho các token có mã định danh riêng.Tài khoản ERC-20 có thể nắm giữ một lượng chia nhỏ như 250 đơn vị.Tài khoản ERC-721 sở hữu một số lượng token ID riêng biệt.

Hàm

balanceOf
của ERC-721 báo số NFT tài khoản sở hữu, thay vì số lượng của một token.

ERC-721 không yêu cầu trường decimals vì mỗi token thường được chuyển như một đơn vị nguyên vẹn.Cơ chế phê duyệt cũng khác nhau vì ERC-721 hỗ trợ phê duyệt cho một token hoặc cấp quyền operator trên toàn bộ bộ sưu tập.

ERC-721 so với ERC-1155

ERC-721 tập trung vào các token không thể thay thế có mã định danh riêng.ERC-1155 cho phép một hợp đồng quản lý nhiều token ID, bao gồm tài sản có thể thay thế, bán thay thế và không thể thay thế.Tài khoản ERC-1155 có thể nắm giữ nhiều đơn vị của cùng một token ID.Token ID ERC-721 có một chủ sở hữu và không duy trì số lượng của từng token cho mỗi tài khoản.Tiêu chuẩn phù hợp nhất phụ thuộc vào mô hình tài sản, phương thức chuyển, nhu cầu thao tác theo lô và yêu cầu ứng dụng.

Tiền bản quyền và giao diện ERC-721

Giao diện ERC-721 cốt lõi không định nghĩa tiền bản quyền cho nhà sáng tạo.Một giao diện tiền bản quyền riêng có thể cung cấp thông tin về người nhận khoản thanh toán đề xuất và số tiền.Thông tin tiền bản quyền không tự động buộc mọi hệ thống chuyển token phải thực hiện thanh toán.Bộ sưu tập có công bố tiền bản quyền nên giải thích cách tính thông tin đó và liệu thông tin có thể thay đổi hay không.Người dùng không nên cho rằng NFT ERC-721 bao gồm quyền tiền bản quyền vĩnh viễn hoặc có thể thực thi.

Rủi ro bảo mật từ phê duyệt ERC-721

Lừa đảo xin cấp quyền là một trong những rủi ro quan trọng nhất đối với người nắm giữ NFT.

Trang web độc hại có thể yêu cầu

setApprovalForAll
trong khi mô tả chữ ký đó là xác minh tài khoản hoặc quyền truy cập bộ sưu tập.

Sau khi được phê duyệt, operator có thể chuyển mọi NFT bị ảnh hưởng mà không cần người sở hữu ủy quyền thêm.Phê duyệt cho một token cụ thể cũng có thể cho phép đánh cắp NFT đó.Người dùng nên kiểm tra địa chỉ operator, hợp đồng NFT, loại quyền và mạng trước khi ký.Ngắt kết nối ví khỏi trang web không thu hồi phê duyệt đã được ghi nhận on-chain.

Rủi ro khi chuyển không an toàn

Hàm

transferFrom
có thể gửi NFT đến hợp đồng không có cơ chế khôi phục.

Giao dịch có thể thành công ngay cả khi không ai có thể khiến hợp đồng nhận chuyển NFT trở lại.

Đây là lý do nên dùng

safeTransferFrom
khi chuyển NFT đến hợp đồng.

Tuy nhiên, việc nhận an toàn chỉ chứng minh hợp đồng đã trả về giá trị callback dự kiến.Điều này không đảm bảo bên nhận có quy trình rút NFT hợp lệ.

Rủi ro về metadata và tính xác thực

Bất kỳ ai cũng có thể triển khai hợp đồng ERC-721 bằng tên hoặc ký hiệu bộ sưu tập quen thuộc.Địa chỉ hợp đồng là mã định danh kỹ thuật quan trọng nhất của một bộ sưu tập.Metadata cũng có thể chứa tên gây hiểu lầm, tác phẩm nghệ thuật sao chép, liên kết ngoài không an toàn hoặc tệp không thể truy cập.Token URI do quản trị viên dự án kiểm soát có thể trỏ đến nội dung khác về sau.Quyền sở hữu on-chain không tự xác minh danh tính nhà sáng tạo hoặc quyền sở hữu trí tuệ.Người dùng nên xác nhận địa chỉ bộ sưu tập và thông tin dự án qua các nguồn có thẩm quyền.

Rủi ro từ hợp đồng có thể nâng cấp

Phần triển khai ERC-721 có thể hoạt động thông qua proxy có thể nâng cấp.Quản trị viên được ủy quyền có thể thay đổi quy tắc chuyển token, logic metadata, quyền mint hoặc hành vi khác sau khi người dùng mua NFT.Nâng cấp có thể sửa lỗi nhưng cũng tạo ra rủi ro về quản trị và lộ khóa.Người dùng nên kiểm tra quyền nâng cấp, độ trễ thời gian, biện pháp kiểm soát bằng đa chữ ký và vai trò quản trị viên.Việc hỗ trợ giao diện ERC-721 không cho biết mọi hàm đặc quyền trong phần triển khai.

Cách nhà phát triển nên triển khai ERC-721

Nhà phát triển nên bắt đầu với một phần triển khai đã được rà soát và vẫn được duy trì tích cực, thay vì viết lại logic quyền sở hữu nhạy cảm nếu không có lý do chính đáng.

API ERC-721 của OpenZeppelin hiện tại cung cấp các thành phần cốt lõi, metadata, enumerable, pausable, burnable, tiền bản quyền, voting và receiver.

Quyền mint cần được giới hạn theo chính sách nguồn cung đã công bố của bộ sưu tập.Nên cân nhắc mint an toàn khi NFT có thể được mint trực tiếp đến hợp đồng thông minh.Cần xem callback của receiver là lệnh gọi bên ngoài có khả năng gây reentrancy.Kiểm thử cần bao quát quyền sở hữu, phê duyệt, quyền operator, receiver an toàn, receiver độc hại, burn, token ID không hợp lệ và chuyển trái phép.Nhà phát triển cũng nên kiểm thử xem phát hiện giao diện có trả về giá trị chính xác cho mọi phần mở rộng đã triển khai hay không.

Cách ứng dụng phát hiện hỗ trợ ERC-721

Ứng dụng có thể gọi

supportsInterface
với interface ID cốt lõi của ERC-721.

Giá trị trả về

true
cho biết hợp đồng tuyên bố triển khai giao diện này.

Ứng dụng có thể kiểm tra riêng interface ID của metadata hoặc enumerable.Phát hiện giao diện đáng tin cậy hơn việc chỉ đoán dựa trên tên hàm.Tuy nhiên, hợp đồng được viết kém hoặc có ý đồ lừa đảo có thể trả về thông tin không chính xác.Ứng dụng nên xử lý an toàn các lệnh gọi thất bại và hành vi bất ngờ, thay vì cho rằng mọi hợp đồng đều tuân thủ tiêu chuẩn.

Ví dụ về giao dịch chuyển ERC-721

Giả sử Alice sở hữu token ID 42 trong một hợp đồng ERC-721.

Hàm

ownerOf
của hợp đồng trả về địa chỉ Alice cho token ID 42.

Alice quyết định gửi NFT đến một hợp đồng thông minh.

Ví của Alice gọi

safeTransferFrom
với địa chỉ Alice, hợp đồng nhận và token ID 42.

Hợp đồng NFT xác minh Alice sở hữu token và có quyền chuyển token đó.

Hợp đồng cập nhật quyền sở hữu và gọi

onERC721Received
trên bên nhận.

Bên nhận kiểm tra hợp đồng NFT, operator, chủ sở hữu trước đó và token ID.

Nếu bên nhận trả về selector chính xác, giao dịch chuyển hoàn tất và sự kiện

Transfer
được phát ra.

Nếu bên nhận từ chối callback, toàn bộ giao dịch sẽ revert và Alice vẫn là chủ sở hữu.

Các lỗi thường gặp với giao diện ERC-721

Một lỗi phổ biến là cho rằng tên bộ sưu tập định danh duy nhất hợp đồng NFT.

Một lỗi khác là xem

balanceOf
như số lượng của một token ID.

Lỗi thứ ba là dùng

transferFrom
khi gửi đến hợp đồng thông minh chưa rõ.

Lỗi thứ tư là cấp quyền operator trên toàn bộ bộ sưu tập mà không kiểm tra địa chỉ operator.Lỗi thứ năm là cho rằng ngắt kết nối ví sẽ thu hồi phê duyệt on-chain.Lỗi thứ sáu là cho rằng metadata luôn được lưu trữ on-chain mà không kiểm tra token URI.Lỗi thứ bảy là cho rằng ERC-721 bắt buộc có tiền bản quyền.Lỗi thứ tám là cho rằng mọi hợp đồng ERC-721 đều hỗ trợ enumerable.Lỗi thứ chín là bỏ qua nguy cơ reentrancy trong callback của receiver.Lỗi thứ mười là xem việc hỗ trợ ERC-165 như bằng chứng rằng phần triển khai an toàn hoặc xác thực.

FAQ

Giao diện ERC-721 là gì?

Giao diện ERC-721 là tập hợp tiêu chuẩn gồm các hàm và sự kiện để theo dõi quyền sở hữu, phê duyệt và giao dịch chuyển token không thể thay thế.

Interface ID ERC-721 là gì?

Interface ID cốt lõi của ERC-721 là

0x80ac58cd
.

balanceOf trả về gì với hợp đồng ERC-721?

Hàm trả về số NFT riêng biệt trong hợp đồng đó mà một địa chỉ sở hữu.

ownerOf có chức năng gì?

Hàm trả về chủ sở hữu hiện tại của một token ID hợp lệ.

transferFrom khác safeTransferFrom như thế nào?

safeTransferFrom
kiểm tra hợp đồng nhận có hỗ trợ callback ERC-721 receiver hay không, còn
transferFrom
thì không.

onERC721Received là gì?

Đây là callback mà hợp đồng thông minh triển khai để xác nhận có thể nhận NFT qua giao dịch chuyển an toàn.

Giao dịch chuyển NFT an toàn có thể thất bại không?

Có, giao dịch sẽ thất bại nếu không đạt bước kiểm tra quyền hoặc hợp đồng nhận không trả về selector callback dự kiến.

approve có chức năng gì?

Hàm này ủy quyền cho một địa chỉ chuyển một NFT cụ thể.

setApprovalForAll có chức năng gì?

Hàm cấp cho operator quyền đối với mọi NFT mà bên gọi sở hữu trong hợp đồng ERC-721 đó.

Phê duyệt operator có tự động hết hạn không?

Không, phê duyệt tiêu chuẩn trên toàn bộ bộ sưu tập vẫn hoạt động cho đến khi chủ sở hữu thu hồi hoặc hợp đồng áp dụng quy tắc tùy chỉnh bổ sung.

Chuyển NFT có xóa phê duyệt riêng của token đó không?

Có, phần triển khai ERC-721 thông thường xóa phê duyệt gắn với token đó trong khi chuyển.

ERC-721 có bắt buộc dùng metadata không?

Không, giao diện metadata là tùy chọn, dù hầu hết bộ sưu tập NFT đều triển khai.

Interface ID metadata ERC-721 là gì?

Phần mở rộng metadata sử dụng interface ID

0x5b5e139f
.

Interface ID enumerable ERC-721 là gì?

Phần mở rộng enumerable sử dụng interface ID

0x780e9d63
.

Mọi hợp đồng ERC-721 đều hỗ trợ totalSupply phải không?

Không,

totalSupply
thuộc phần mở rộng enumerable tùy chọn.

ERC-721 có yêu cầu hàm mint không?

Không, giao diện cốt lõi không quy định cách người dùng hoặc quản trị viên mint NFT.

ERC-721 có yêu cầu hàm burn không?

Không, burn là tính năng của phần triển khai chứ không phải hàm cốt lõi bắt buộc.

ERC-721 có thực thi tiền bản quyền không?

Không, tiền bản quyền nằm ngoài giao diện ERC-721 cốt lõi và cần logic hoặc tiêu chuẩn riêng.

Metadata ERC-721 có thể thay đổi không?

Có, tiêu chuẩn cho phép token URI thay đổi, trừ khi phần triển khai đưa ra cam kết bất biến mạnh hơn.

Tuân thủ ERC-721 có chứng minh NFT xác thực không?

Không, bất kỳ ai cũng có thể triển khai hợp đồng tương thích, vì vậy người dùng phải tự xác minh địa chỉ hợp đồng và đơn vị phát hành.

Kết luận

Giao diện ERC-721 cung cấp các quy tắc chung về quyền sở hữu, phê duyệt, chuyển token và sự kiện được NFT sử dụng trong các ứng dụng tương thích Ethereum.

Interface ID cốt lõi là

0x80ac58cd
, được hợp đồng công bố thông qua cơ chế phát hiện giao diện ERC-165.

Các hàm bắt buộc cho phép ứng dụng kiểm tra số dư và chủ sở hữu, phê duyệt quyền chuyển và di chuyển token ID độc nhất.Các hàm chuyển an toàn giảm nguy cơ vô tình gửi NFT đến hợp đồng không tương thích bằng cách yêu cầu callback ERC-721 receiver.Callback đó cũng tạo ra rủi ro lệnh gọi bên ngoài và reentrancy mà nhà phát triển phải xử lý cẩn thận.Metadata và enumerable là các giao diện tùy chọn có mã định danh riêng, cùng những cân nhắc bổ sung về gas và độ tin cậy.Tiêu chuẩn không quy định quyền mint, quyền burn, tiền bản quyền, giới hạn nguồn cung, tính bất biến của metadata, quyền sở hữu pháp lý hoặc tính xác thực của bộ sưu tập.Trước khi tương tác với NFT, người dùng nên xác minh địa chỉ hợp đồng, xem xét phê duyệt operator, kiểm tra nơi lưu trữ metadata và hiểu quyền nâng cấp.Nhà phát triển nên sử dụng phần triển khai được duy trì, kiểm thử mọi đường đi cấp quyền và xem callback của NFT receiver là mã có khả năng gây hại.Hiểu giao diện ERC-721 giúp người dùng crypto phân biệt khả năng tương thích NFT theo tiêu chuẩn với các đặc tính kinh tế, pháp lý và bảo mật rộng hơn của từng bộ sưu tập.
BTC ETFs See $679M in Outflows
BTC ETFs See $679M in OutflowsBTC ETFs See $679M in Outflows
Citi sees BTC at $113K. What do institutions see?