Beli Kripto
Pasar
Spot
Futures OILBTC
Tabungan
Pusat Acara
Hub Hadiah
Lainnya
Fest. 0-Biaya
Enumerable Extension: Apa Itu Enumerable Extension?Enumerable Extension adalah bagian opsional dari standar non-fungible token ERC-721 yang memungkinkan smart contract dan aplikasi kripto menemukan ID token NFT melalui kueEnumerable Extension: Apa Itu Enumerable Extension?Enumerable Extension adalah bagian opsional dari standar non-fungible token ERC-721 yang memungkinkan smart contract dan aplikasi kripto menemukan ID token NFT melalui kue

Enumerable Extension

2026/10/13 16:21
#Advanced
Humanity
H$0.05534-8.14%
TokenFi
TOKEN$0.001993-5.54%
Smart Blockchain
SMART$0.004418-0.62%
SPACE ID
ID$0.03605-5.45%
AINFT
NFT$0.00000024+0.71%

Apa Itu Enumerable Extension?

Enumerable Extension adalah bagian opsional dari standar non-fungible token ERC-721 yang memungkinkan smart contract dan aplikasi kripto menemukan ID token NFT melalui kueri indeks on-chain.

Fitur ini umumnya dikenal dengan nama antarmuka

IERC721Enumerable
atau nama implementasi
ERC721Enumerable
.

Spesifikasi ERC-721 resmi mendefinisikan extension ini sebagai cara bagi kontrak untuk memublikasikan daftar lengkap NFT yang valid serta ID token yang dimiliki setiap alamat.

Extension ini menambahkan tiga fungsi bernama

totalSupply
,
tokenByIndex
, dan
tokenOfOwnerByIndex
.

Fungsi-fungsi ini melengkapi antarmuka inti ERC-721 untuk kepemilikan dan transfer.

Fungsi-fungsi tersebut tidak menggantikan fungsi seperti

ownerOf
,
balanceOf
,
transferFrom
, atau
safeTransferFrom
.

Enumerable Extension bersifat opsional, sehingga kontrak NFT dapat sepenuhnya mematuhi ERC-721 tanpa mendukungnya.

Mengapa Disebut Enumerable?

Enumerasi koleksi berarti mengidentifikasi anggotanya satu per satu menggunakan indeks atau metode terstruktur lainnya.Antarmuka inti ERC-721 dapat memberi tahu aplikasi siapa pemilik ID token yang sudah diketahui.Antarmuka ini juga dapat memberi tahu aplikasi jumlah NFT yang dimiliki suatu alamat.Namun, antarmuka inti tidak menyediakan fungsi on-chain langsung untuk menemukan setiap ID token yang ada atau setiap ID token yang dimiliki pemilik tertentu.Enumerable Extension mengisi celah ini dengan menambahkan akses berbasis indeks ke koleksi global dan kepemilikan setiap pemilik.Aplikasi dapat memulai dari indeks nol, lalu terus meminta indeks yang lebih tinggi hingga mencapai suplai atau saldo pemilik yang relevan.

Apa Itu ID Antarmuka Enumerable Extension?

ID antarmuka ERC-165 untuk ERC-721 Enumerable Extension adalah

0x780e9d63
.

Kontrak yang kompatibel seharusnya mengembalikan

true
ketika fungsi
supportsInterface
dipanggil dengan nilai ini.

Standar deteksi antarmuka ERC-165 memungkinkan aplikasi menanyakan antarmuka mana yang diklaim diimplementasikan oleh smart contract.

Antarmuka inti ERC-721 memiliki ID antarmuka tersendiri, sehingga aplikasi dapat menguji dukungan inti dan enumerable secara terpisah.Kontrak yang mengimplementasikan Enumerable Extension juga harus mengimplementasikan antarmuka inti ERC-721.Respons positif dari deteksi antarmuka meningkatkan kemudahan pemeriksaan kompatibilitas, tetapi tidak membuktikan bahwa implementasinya benar, aman, atau jujur.

Fungsi yang Ditambahkan Enumerable Extension

Enumerable Extension hanya menambahkan tiga fungsi kueri publik.

Fungsi

totalSupply
mengembalikan jumlah NFT valid yang saat ini tercatat dalam kontrak.

Fungsi

tokenByIndex
mengembalikan ID token dari daftar token di seluruh kontrak.

Fungsi

tokenOfOwnerByIndex
mengembalikan ID token dari kepemilikan terkini seorang pemilik.

Ketiganya merupakan fungsi view yang hanya dapat membaca data menurut antarmuka standar.Extension ini tidak menambahkan fungsi transfer, approval, minting, burning, metadata, atau royalti baru.

Fungsi totalSupply

Fungsi

totalSupply
mengembalikan jumlah NFT valid yang saat ini memiliki pemilik selain alamat nol.

Fungsi ini melaporkan suplai aktif saat ini, bukan suplai maksimum yang mungkin.Contohnya, kontrak dapat melaporkan total suplai 8,000 meskipun masih memiliki wewenang untuk melakukan mint NFT tambahan di kemudian hari.Jika NFT dibakar dan tidak lagi termasuk dalam kepemilikan valid, total suplai yang dilaporkan biasanya akan berkurang.

Artinya,

totalSupply
belum tentu sama dengan jumlah NFT yang pernah di-mint.

Fungsi ini juga tidak membuktikan bahwa koleksi memiliki batas permanen.Pengguna harus memeriksa logika minting dan hak istimewa untuk memverifikasi klaim kelangkaan.

Fungsi tokenByIndex

Fungsi

tokenByIndex
mengembalikan ID token yang berada pada posisi tertentu dalam enumerasi di seluruh kontrak.

Indeks dimulai dari nol.

Indeks yang valid harus lebih kecil daripada nilai yang dikembalikan oleh

totalSupply
.

Jika total suplai adalah 100, indeks yang valid adalah nol hingga 99.Kueri dengan indeks 100 atau lebih besar harus gagal.ID token yang dikembalikan tidak harus sama dengan indeksnya.Contohnya, indeks nol dapat mengembalikan ID token 500, sedangkan indeks satu dapat mengembalikan ID token 12.Aplikasi tidak boleh berasumsi bahwa ID token berurutan hanya karena indeks enumerasi berurutan.

Fungsi tokenOfOwnerByIndex

Fungsi

tokenOfOwnerByIndex
mengembalikan satu ID token yang dimiliki alamat tertentu.

Indeks dimulai dari nol dan harus lebih kecil daripada hasil

balanceOf
untuk pemilik tersebut.

Jika sebuah alamat memiliki tiga NFT, indeks pemilik yang valid adalah nol, satu, dan dua.Fungsi ini harus gagal jika indeks berada di luar saldo terkini pemilik.Fungsi ini juga harus gagal jika pemilik yang diberikan adalah alamat nol.Fungsi ini memungkinkan aplikasi on-chain dan off-chain mencantumkan NFT milik suatu alamat tanpa menelusuri setiap kemungkinan ID token.

Cara Kerja Ketiga Fungsi

Aplikasi dapat memanggil

totalSupply
untuk mengetahui jumlah NFT valid yang saat ini ada.

Kemudian, aplikasi dapat memanggil

tokenByIndex
untuk setiap indeks, mulai dari nol hingga satu angka di bawah suplai.

Untuk setiap ID token yang dikembalikan, aplikasi dapat memanggil

ownerOf
untuk mengetahui pemilik terkini.

Untuk mencantumkan kepemilikan suatu alamat, aplikasi dapat memanggil

balanceOf
, lalu meminta
tokenOfOwnerByIndex
untuk setiap indeks pemilik yang valid.

Proses ini memungkinkan penemuan token melalui fungsi on-chain yang terstandardisasi.Koleksi besar mungkin tetap memerlukan banyak panggilan RPC, sehingga aplikasi produksi sering menggunakan pagination, batching, caching, atau pengindeksan event.

Urutan Enumerasi Tidak Dijamin

Spesifikasi ERC-721 tidak menetapkan urutan pengurutan yang wajib untuk

tokenByIndex
atau
tokenOfOwnerByIndex
.

Urutan hasil tidak harus mengikuti ID token, waktu mint, waktu transfer, kelangkaan, metadata, atau lamanya kepemilikan.Kontrak dapat mengubah posisi token ketika token lain ditransfer atau dibakar.Aplikasi tidak boleh menganggap indeks enumerasi sebagai pengenal permanen.ID token adalah pengenal stabil dalam kontrak, sedangkan indeks hanyalah posisi pencarian saat ini.Antarmuka yang menginginkan hasil terurut sebaiknya mengurutkan ID token yang dikembalikan secara off-chain sesuai aturannya sendiri.

Enumerasi Swap-and-Pop

Implementasi umum menggunakan teknik bernama swap and pop untuk menghapus ID token dari array secara efisien.Saat token dihapus, implementasi menempatkan token terakhir pada posisi array yang sebelumnya ditempati token yang dihapus.Kemudian, implementasi menghapus entri terakhir dalam array.Metode ini menghindari pergeseran semua token setelahnya dan menjaga kompleksitas penghapusan tetap relatif rendah.Namun, urutan ID token yang tersisa akan berubah.

Implementasi OpenZeppelin ERC721Enumerable saat ini menggunakan metode ini untuk indeks global maupun indeks khusus pemilik.

Karena itu, aplikasi sebaiknya memulai ulang atau merekonsiliasi pagination dengan cermat jika kepemilikan berubah selama proses enumerasi yang berlangsung lama.

Contoh Enumerasi Seluruh Koleksi

Misalkan sebuah kontrak ERC-721 melaporkan total suplai empat.

Aplikasi memanggil

tokenByIndex
dengan indeks nol, satu, dua, dan tiga.

Kontrak mengembalikan ID token 18, 42, 7, dan 105.Aplikasi kini mengetahui seluruh ID token valid meskipun ID-nya tidak berurutan.

Aplikasi dapat memanggil

ownerOf
dan
tokenURI
untuk setiap ID guna menampilkan kepemilikan dan metadata.

Jika ID token 42 kemudian dibakar, enumerasi global dapat mengembalikan 18, 105, dan 7 karena implementasi dapat memindahkan item terakhir ke posisi yang dihapus.Perubahan ini valid karena standar tidak menjamin urutan enumerasi.

Contoh Enumerasi Pemilik

Misalkan Alice memiliki ID token 9, 30, dan 88 dalam kontrak NFT enumerable.

Fungsi

balanceOf
kontrak mengembalikan nilai tiga untuk alamat Alice.

Aplikasi meminta indeks pemilik nol, satu, dan dua melalui

tokenOfOwnerByIndex
.

Kontrak mengembalikan ketiga ID token milik Alice.Kemudian, Alice mentransfer ID token 30 kepada Bob.Saldo Alice turun menjadi dua, dan ID token yang tersisa dapat muncul dalam urutan indeks yang berbeda.Aplikasi sebaiknya membaca saldo terbaru sebelum mengulangi enumerasi pemilik.

Enumerable Extension vs. ERC-721 Inti

Standar inti ERC-721 menyediakan kepemilikan, transfer, approval, event, dan pemeriksaan penerima yang aman.Standar ini dapat menjawab apakah ID token yang diketahui ada dan siapa pemiliknya.Namun, standar ini tidak menyediakan daftar on-chain terstandardisasi untuk semua ID token.Enumerable Extension menambahkan lapisan penemuan tersebut.Koleksi tanpa enumerasi tetap dapat mentransfer NFT secara normal dan berfungsi dengan wallet yang kompatibel dengan ERC-721.Tidak adanya enumerasi tidak membuat NFT menjadi tidak valid atau tidak patuh standar.Aplikasi harus mendukung koleksi enumerable maupun non-enumerable jika ingin memiliki kompatibilitas ERC-721 yang luas.

Enumerable Extension vs. Metadata Extension

Enumerable Extension mengidentifikasi ID token yang ada dan kepemilikan setiap pemilik.Metadata Extension menyediakan nama koleksi, simbol, dan token URI.Enumerasi tidak menjelaskan gambar, atribut, judul, atau konten eksternal yang terkait dengan NFT.Dukungan metadata tidak menyediakan daftar token lengkap.Kontrak dapat mengimplementasikan salah satu extension, keduanya, atau tidak satu pun, sambil tetap menerapkan perilaku inti ERC-721.Aplikasi sebaiknya memeriksa setiap antarmuka secara terpisah.

Enumerable Extension vs. totalSupply Saja

Beberapa kontrak NFT menambahkan fungsi

totalSupply
khusus tanpa mengimplementasikan Enumerable Extension secara lengkap.

Nama fungsi yang familier tidak membuktikan dukungan terhadap

tokenByIndex
atau
tokenOfOwnerByIndex
.

Arti fungsi suplai khusus juga dapat berbeda dari definisi enumerasi ERC-721.Fungsi tersebut mungkin melaporkan jumlah token yang pernah di-mint, ID token berikutnya, ukuran maksimum koleksi, atau nilai lain yang khusus untuk proyek.Aplikasi sebaiknya menggunakan ERC-165 untuk menguji antarmuka enumerable secara lengkap, bukan mengandalkan satu function selector.

Mengapa Enumerable Extension Membutuhkan Lebih Banyak Gas

Enumerasi mengharuskan kontrak memelihara struktur penyimpanan tambahan.Implementasi umum menyimpan array semua ID token yang ada.Implementasi juga menyimpan daftar token berindeks untuk setiap pemilik dan mapping yang mencatat posisi token.Minting harus menambahkan token baru ke daftar global dan daftar pemilik.Transfer harus menghapus token dari daftar pemilik sebelumnya dan menambahkannya ke daftar pemilik baru.Burning harus menghapus token dari daftar pemilik dan daftar global.Penulisan storage tambahan ini meningkatkan biaya gas transaksi yang mengubah state.

Panduan implementasi ERC-721 saat ini dari OpenZeppelin mencatat bahwa extension ini sering tidak disertakan karena menimbulkan overhead gas yang cukup besar.

Apakah Kueri Enumerasi Gratis?

Pengguna dapat memanggil fungsi view melalui endpoint RPC tanpa mengirim transaksi blockchain.Dalam situasi tersebut, tidak ada biaya gas on-chain yang dibayar karena node menyimulasikan pembacaan secara lokal.Namun, node tetap melakukan komputasi dan dapat menerapkan batas laju atau pembatasan permintaan.Jika smart contract lain memanggil fungsi enumerasi selama transaksi, komputasinya menggunakan gas transaksi.Loop yang meminta ratusan atau ribuan indeks token secara on-chain mungkin terlalu mahal untuk diselesaikan.Developer tidak boleh menyamakan pembacaan off-chain tanpa gas dengan komputasi on-chain tanpa batas.

Loop dan Batas Gas Blok

Smart contract sebaiknya menghindari fungsi yang mengubah state dan melakukan loop pada setiap NFT dalam koleksi atau setiap NFT yang dimiliki alamat tanpa batasan.Jumlah iterasi dapat terus bertambah hingga transaksi melampaui batas gas blok.

Dokumentasi keamanan Solidity memperingatkan bahwa loop yang bergantung pada storage pada akhirnya dapat membuat operasi kontrak tidak bisa diselesaikan.

Fungsi view yang dipanggil secara off-chain tidak menimbulkan biaya transaksi serupa, tetapi tetap dapat membebani penyedia RPC.Aplikasi sebaiknya menggunakan halaman dengan batas tertentu, kueri indeks satu per satu, atau pengindeksan off-chain untuk dataset besar.

Pengindeksan Event Off-Chain sebagai Alternatif

Setiap kontrak ERC-721 yang patuh standar memancarkan event

Transfer
ketika NFT di-mint, ditransfer, atau dibakar.

Indexer off-chain dapat memproses event ini sejak blok deployment kontrak untuk merekonstruksi kepemilikan terkini.Minting biasanya direpresentasikan dengan transfer dari alamat nol.Burning biasanya direpresentasikan dengan transfer ke alamat nol.Transfer normal memindahkan kepemilikan antara dua alamat nonnol.Pengindeksan event menghindari penulisan storage tambahan yang dibutuhkan oleh enumerasi on-chain.Metode ini juga mendukung pencarian, pengurutan, pemfilteran, dan pagination dengan lebih efisien untuk koleksi besar.Komprominya, pengguna harus memercayai atau mengoperasikan sendiri sistem pengindeksan serta memastikan sistem tersebut tetap tersinkronisasi.

Enumerable Extension vs. Pengindeksan Event

Enumerasi on-chain memberi smart contract akses terstandardisasi langsung ke indeks token.Pengindeksan event menyediakan penemuan off-chain yang lebih kaya dan skalabel.Enumerasi berguna ketika smart contract lain perlu memverifikasi atau memilih ID token tanpa mengandalkan database eksternal.Pengindeksan event biasanya lebih praktis untuk antarmuka wallet, halaman koleksi, analitik, dan pencarian historis.Proyek dapat mendukung kedua metode.Pilihan terbaik bergantung pada apakah kemudahan penemuan on-chain sepadan dengan gas tambahan yang dibayar pada setiap mint, transfer, dan burn.

Apakah Enumerasi Menyediakan Pagination?

Extension ini tidak mendefinisikan fungsi yang mengembalikan satu halaman berisi ID token.Extension ini menyediakan satu ID token untuk setiap kueri indeks.Aplikasi off-chain dapat membuat pagination dengan meminta rentang indeks terbatas.Contohnya, halaman pertama dapat meminta indeks nol hingga 49, sedangkan halaman kedua meminta indeks 50 hingga 99.Aplikasi harus memperhitungkan perubahan suplai dan urutan saat berpindah halaman.Transfer atau burn dapat memindahkan token antarindeks sehingga proses pagination yang berlangsung lama dapat melewatkan atau mengulang ID.Menggunakan data dari satu tinggi blok tetap dapat memberikan snapshot yang lebih konsisten jika sistem RPC mendukung panggilan historis.

Apakah Enumerasi Mencantumkan Semua Pemilik?

Extension ini mencantumkan ID token secara global dan ID token yang dimiliki pemilik tertentu.Extension ini tidak menyediakan fungsi yang mengembalikan semua alamat pemilik unik.

Aplikasi dapat memperoleh daftar pemilik dengan memanggil

ownerOf
untuk setiap ID token atau memproses event transfer.

Pemilik yang sama dapat muncul berkali-kali karena satu alamat dapat memiliki beberapa NFT.Karena itu, membuat daftar holder unik biasanya menjadi tugas pengindeksan off-chain.

Apakah Enumerasi Membuktikan Keaslian Token?

Tidak. Enumerasi hanya melaporkan ID token yang tercatat oleh smart contract tertentu.Siapa pun dapat men-deploy kontrak ERC-721 enumerable dengan nama, gambar, simbol, atau metadata salinan.Jaringan blockchain dan alamat kontrak lengkap tetap menjadi bagian penting dari identitas NFT.Antarmuka enumerable yang benar tidak membuktikan bahwa penerbit memiliki karya seni, mengendalikan aset yang diklaim, atau berniat jujur.Pengguna sebaiknya memverifikasi kontrak melalui informasi proyek yang berwenang dan memeriksa izinnya secara mandiri.

Apakah totalSupply Membuktikan Kelangkaan?

Jumlah suplai saat ini tidak menetapkan suplai maksimum permanen.Kontrak mungkin memiliki fungsi mint publik, peran minting administrator, sistem minting bridge, atau wewenang upgrade.ID token yang saat ini tidak memiliki pemilik juga mungkin dapat di-mint di kemudian hari.Kontrak yang dapat di-upgrade bisa mengubah aturan suplainya setelah deployment.Pengguna sebaiknya memeriksa kode dan model kontrol akses sebelum mengandalkan klaim kelangkaan.Enumerasi mempermudah kueri suplai saat ini, tetapi tidak menegakkan janji ekonomi.

Minting dan Enumerasi

Saat NFT baru di-mint, implementasi enumerable harus menambahkan ID token ke indeks global dan indeks pemilik pertama.Total suplai kemudian bertambah satu.ID token dapat muncul pada indeks global valid mana pun yang diizinkan oleh implementasi.Kebijakan mint berurutan tidak mengharuskan indeks enumerasi selalu sama dengan ID token.Logika mint khusus harus memperbarui semua struktur enumerasi yang diperlukan secara konsisten.Pembaruan yang tidak lengkap dapat menyebabkan saldo, catatan kepemilikan, total suplai, dan hasil enumerasi tidak sesuai.

Transfer dan Enumerasi

Transfer biasanya tidak mengubah total suplai.Transfer menghapus ID token dari enumerasi pemilik sebelumnya dan menambahkannya ke enumerasi penerima.Daftar token global biasanya tetap memuat ID token yang sama.Posisi indeks khusus pemilik dapat berubah selama proses penghapusan.Transfer ke alamat sendiri memerlukan implementasi yang cermat karena pengirim dan penerima adalah alamat yang sama.Implementasi yang telah ditinjau menangani kondisi ini tanpa keliru menghapus atau menggandakan token.

Burning dan Enumerasi

Burning menghapus token dari kepemilikan ERC-721 yang valid.Implementasi enumerable menghapus ID token yang dibakar dari daftar pemilik dan daftar token global.Total suplai berkurang.Indeks global dan indeks pemilik token sebelumnya tidak boleh lagi digunakan.Token lain dapat berpindah ke posisi tersebut melalui penghapusan swap-and-pop.Aplikasi historis sebaiknya menggunakan event, bukan enumerasi saat ini, jika memerlukan catatan NFT yang dibakar.

Kompatibilitas Batch Minting

Beberapa implementasi ERC-721 mendukung batch minting berurutan atau terkompresi saat konstruksi kontrak.Sistem tersebut mungkin menghitung kepemilikan tanpa mencatat setiap token melalui logika pembaruan enumerasi biasa.

Implementasi OpenZeppelin saat ini memperingatkan bahwa extension consecutive-mint-nya berbenturan dengan

ERC721Enumerable
dan tidak boleh digabungkan dengannya.

Implementasi enumerable saat ini juga menolak jalur pembaruan saldo batch yang tidak didukung.Developer tidak boleh menggabungkan extension hanya karena masing-masing berfungsi secara terpisah.Perilaku inheritance, storage, event, saldo, dan hook pembaruan harus ditinjau secara bersamaan.

Enumerasi dan Kontrak yang Dapat Di-upgrade

Kontrak NFT yang dapat di-upgrade bisa menambahkan atau mengubah logika setelah deployment jika sistem governance-nya mengizinkan.Menambahkan enumerasi setelah banyak NFT sudah ada memerlukan perhatian khusus.Storage enumerasi baru mungkin masih kosong meskipun kontrak inti sudah mencatat ribuan token.Proses migrasi mungkin diperlukan untuk mengisi indeks global dan indeks khusus pemilik.Loop migrasi on-chain yang besar dapat melampaui batas gas.Kesalahan tata letak storage juga dapat merusak data kepemilikan atau approval yang sudah ada.Administrator upgrade sebaiknya menggunakan prosedur migrasi yang telah diuji, transaksi dengan batas tertentu, dan peninjauan keamanan independen.

Enumerasi dan Logika balanceOf Khusus

Enumerasi pemilik bergantung pada informasi saldo ERC-721 yang akurat.

Extension yang menghitung

balanceOf
melalui metode khusus atau terkompresi dapat berbenturan dengan indeks pemilik yang tersimpan.

Panduan implementasi saat ini secara khusus memperingatkan bahwa extension dengan logika saldo khusus mungkin tidak kompatibel dengan enumerasi.Developer harus memastikan bahwa setiap mint, transfer, dan burn memperbarui jumlah kepemilikan dan indeks melalui jalur kode yang kompatibel.Kontrak yang melaporkan saldo pemilik lima tetapi hanya menyimpan empat ID token berindeks tidak konsisten secara internal.

Risiko Keamanan bagi Aplikasi yang Mengintegrasikan

Aplikasi sebaiknya memverifikasi dukungan enumerable sebelum memanggil fungsi extension.Aplikasi harus menangani error indeks di luar batas, bukan berasumsi bahwa indeks yang sebelumnya diamati tetap valid.Aplikasi tidak boleh mengandalkan urutan enumerasi untuk kelangkaan, prioritas, atau perhitungan finansial.Aplikasi harus mencegah hasil duplikat atau hilang ketika state berubah selama pagination.Aplikasi juga harus memastikan setiap ID token yang dikembalikan berasal dari kontrak dan jaringan yang diharapkan.Untuk keputusan bernilai tinggi, aplikasi mungkin memerlukan snapshot blok yang konsisten dan tingkat finalitas yang sesuai.

Konsistensi RPC dan Data

Endpoint RPC dapat mengembalikan data enumerasi dari blok terbaru, aman, final, atau historis, bergantung pada jaringan dan konfigurasi permintaan.Dua panggilan pada tinggi blok berbeda dapat menghasilkan daftar suplai atau pemilik yang berbeda.NFT yang baru saja ditransfer mungkin tercatat pada pemilik berbeda di beberapa sumber data yang belum tersinkronisasi.Aplikasi sebaiknya mencatat nomor blok yang digunakan untuk enumerasi multi-panggilan jika konsistensi penting.Sistem kritis dapat membandingkan beberapa node atau mengoperasikan node yang diverifikasi secara mandiri.Enumerasi mengurangi ketergantungan pada API khusus koleksi, tetapi tidak menghilangkan semua pertimbangan kepercayaan RPC.

Manfaat Enumerable Extension

Extension ini menyediakan cara terstandardisasi untuk menemukan semua ID token saat ini.Extension ini memungkinkan smart contract lain meminta daftar kepemilikan NFT seorang pemilik tanpa indexer eksternal.Extension ini menyediakan fungsi suplai saat ini yang terstandardisasi.Extension ini dapat menyederhanakan koleksi kecil, game on-chain, sistem keanggotaan, dan aplikasi yang memerlukan pemilihan token secara langsung.Extension ini juga membuat kueri inventaris NFT dasar tersedia meskipun situs web atau database privat proyek tidak lagi tersedia.

Keterbatasan Enumerable Extension

Extension ini meningkatkan biaya gas untuk mint, transfer, dan burn.Extension ini tidak menjamin urutan token yang stabil.Extension ini tidak menyediakan pagination, pengurutan, pemfilteran, atau enumerasi holder bawaan.Extension ini melaporkan token saat ini, bukan catatan historis lengkap.Extension ini mungkin tidak kompatibel dengan sistem batch minting terkompresi atau sistem saldo khusus.Loop on-chain yang besar tetap dibatasi oleh gas transaksi.Extension ini juga tidak menjamin metadata, royalti, harga, keaslian, atau batas suplai.

Kapan Proyek Sebaiknya Menggunakan Enumerasi?

Proyek dapat memperoleh manfaat dari enumerasi ketika smart contract perlu menemukan ID token secara langsung on-chain.Enumerasi juga dapat menjadi pilihan yang wajar untuk koleksi kecil yang dapat menerima biaya transfer tambahan.Game dapat menggunakannya ketika logika kontrak perlu memilih salah satu NFT pemain berdasarkan indeks.Kontrak keanggotaan dapat menggunakannya ketika proses on-chain perlu memeriksa token keanggotaan terkini milik holder.Proyek tetap sebaiknya membatasi loop dan mempertimbangkan apakah mapping yang lebih sederhana atau indeks khusus aplikasi akan lebih efisien.

Kapan Proyek Sebaiknya Menghindari Enumerasi?

Koleksi NFT besar dapat menghindari enumerasi untuk mengurangi biaya setiap mint, transfer, dan burn.Proyek juga dapat menghindarinya jika semua fungsi penemuan dan pencarian sudah bergantung pada indexer event off-chain.Sistem batch minting terkompresi dapat menggunakan model kepemilikan yang tidak efisien jika dipasangkan dengan storage enumerasi standar.Proyek yang tidak pernah memerlukan pencantuman token on-chain mungkin hanya mendapat sedikit manfaat dari membayar indeks on-chain permanen.Keputusan sebaiknya didasarkan pada kebutuhan aplikasi yang sebenarnya, bukan anggapan bahwa setiap extension opsional diperlukan.

Cara Developer Mengimplementasikan Extension

Developer sebaiknya memulai dengan implementasi ERC-721 enumerable yang aktif dipelihara dan telah ditinjau.

Pastikan

supportsInterface
melaporkan
0x780e9d63
.

Setiap jalur mint, transfer, dan burn harus memperbarui enumerasi global dan khusus pemilik dengan benar.Extension khusus harus diperiksa untuk mengetahui potensi konflik dengan kepemilikan, saldo, batch minting, wrapping, pausing, dan upgrade.Pengujian harus mencakup indeks pertama dan terakhir, indeks di luar batas, transfer ke alamat sendiri, burn, mint ulang jika diizinkan, serta perubahan kepemilikan berulang.

Pengujian invarian sebaiknya memastikan bahwa

totalSupply
sama dengan jumlah token yang dapat dienumerasi secara global.

Pengujian juga harus memastikan jumlah token enumerable setiap pemilik sama dengan

balanceOf
.

Cara Pengguna Memeriksa Dukungan Enumerable

Langkah pertama adalah memverifikasi alamat kontrak NFT dan jaringan blockchain.

Langkah kedua adalah memanggil

supportsInterface
dengan
0x780e9d63
.

Langkah ketiga adalah memastikan antarmuka inti ERC-721 juga didukung.

Langkah keempat adalah membandingkan

totalSupply
dengan sampel kecil indeks yang valid.

Langkah kelima adalah membandingkan hasil

balanceOf
pemilik dengan ID token yang dikembalikan melalui enumerasi pemilik.

Pemeriksaan ini dapat menemukan ketidakkonsistenan yang jelas, tetapi tidak menggantikan peninjauan kontrak secara menyeluruh.

Kesalahan Umum Enumerable Extension

Kesalahan umum pertama adalah menganggap setiap kontrak ERC-721 mendukung enumerasi.Kesalahan kedua adalah menganggap indeks enumerasi sebagai ID token permanen.Kesalahan ketiga adalah menganggap ID token muncul dalam urutan numerik atau urutan mint.

Kesalahan keempat adalah menganggap

totalSupply
sebagai batas suplai permanen.

Kesalahan kelima adalah membuat loop atas koleksi tanpa batas di dalam transaksi yang mengubah state.Kesalahan keenam adalah mengabaikan perubahan urutan selama pagination.

Kesalahan ketujuh adalah menganggap fungsi

totalSupply
khusus membuktikan dukungan terhadap seluruh extension.

Kesalahan kedelapan adalah menggabungkan implementasi batch minting dan enumerasi yang tidak kompatibel.Kesalahan kesembilan adalah menambahkan enumerasi ke koleksi yang dapat di-upgrade tanpa memigrasikan token sebelumnya.Kesalahan kesepuluh adalah menganggap dukungan antarmuka enumerable membuktikan keaslian atau nilai koleksi NFT.

FAQ

Apa arti Enumerable Extension dalam kripto?

Istilah ini biasanya merujuk pada extension ERC-721 opsional yang memungkinkan aplikasi mencantumkan semua ID token NFT saat ini dan ID token yang dimiliki alamat tertentu.

Apakah Enumerable Extension diwajibkan dalam ERC-721?

Tidak. Kontrak NFT dapat mematuhi ERC-721 inti tanpa mendukung enumerasi.

Apa ID antarmuka Enumerable Extension?

ID antarmuka ERC-165-nya adalah

0x780e9d63
.

Fungsi apa yang ditambahkan extension ini?

Extension ini menambahkan

totalSupply
,
tokenByIndex
, dan
tokenOfOwnerByIndex
.

Apa yang dikembalikan totalSupply?

Fungsi ini mengembalikan jumlah NFT valid yang saat ini tercatat dalam kontrak.

Apakah totalSupply menunjukkan suplai maksimum yang mungkin?

Tidak. Fungsi ini melaporkan suplai saat ini dan tidak membuktikan bahwa minting di masa depan mustahil dilakukan.

Apa yang dikembalikan tokenByIndex?

Fungsi ini mengembalikan ID token yang tersimpan pada indeks enumerasi global tertentu.

Apa yang dikembalikan tokenOfOwnerByIndex?

Fungsi ini mengembalikan satu ID token yang dimiliki alamat tertentu pada indeks pemilik tertentu.

Apakah indeks enumerasi dimulai dari nol?

Ya. Indeks valid dimulai dari nol dan berakhir satu posisi di bawah suplai atau saldo yang relevan.

Apakah indeks enumerasi sama dengan ID token?

Tidak. Indeks adalah posisi sementara dalam daftar, sedangkan ID token mengidentifikasi NFT dalam kontrak.

Apakah ID token dikembalikan dalam urutan numerik?

Tidak. Standar ini tidak mewajibkan urutan enumerasi tertentu.

Dapatkah urutan enumerasi berubah?

Ya. Transfer dan burn dapat mengubah posisi indeks, terutama pada implementasi yang menggunakan penghapusan swap-and-pop.

Apakah burning NFT mengurangi totalSupply?

Ya. Kontrak enumerable yang diimplementasikan dengan benar menghapus NFT yang dibakar dan mengurangi total suplai saat ini.

Apakah transfer NFT mengubah totalSupply?

Tidak. Transfer normal mengubah enumerasi pemilik, tetapi tidak mengubah jumlah NFT yang ada.

Mengapa extension ini mahal?

Extension ini memerlukan penulisan storage tambahan untuk memelihara indeks token global dan khusus pemilik selama mint, transfer, dan burn.

Apakah panggilan enumerasi gratis?

Pembacaan RPC off-chain tidak memerlukan pembayaran gas on-chain, tetapi panggilan smart contract yang dilakukan dalam transaksi menggunakan gas.

Dapatkah kontrak melakukan loop atas setiap NFT enumerable?

Kontrak dapat mencoba melakukannya, tetapi loop on-chain tanpa batas pada akhirnya dapat melampaui batas gas blok.

Apakah extension ini menyediakan pagination?

Tidak. Aplikasi membuat pagination dengan meminta rentang indeks tertentu.

Apakah extension ini mencantumkan setiap holder NFT?

Tidak. Extension ini mencantumkan ID token secara global dan untuk pemilik tertentu, tetapi tidak mengembalikan daftar unik semua alamat pemilik.

Dapatkah pengindeksan event menggantikan enumerasi?

Ya. Indexer off-chain dapat merekonstruksi suplai dan kepemilikan token dari event Transfer ERC-721.

Apakah enumerasi mencakup metadata NFT?

Tidak. Metadata disediakan melalui extension ERC-721 opsional yang terpisah.

Apakah enumerasi membuktikan keaslian NFT?

Tidak. Siapa pun dapat men-deploy kontrak enumerable, sehingga pengguna harus memverifikasi jaringan, alamat kontrak, penerbit, dan izinnya.

Dapatkah enumerasi ditambahkan setelah deployment?

Kontrak yang dapat di-upgrade mungkin dapat menambahkannya, tetapi token yang sudah ada harus dimigrasikan dengan aman ke struktur indeks baru.

Apakah ERC721Enumerable kompatibel dengan setiap extension ERC-721?

Tidak. Batch minting terkompresi dan implementasi saldo khusus dapat berbenturan dengan storage enumerable standar.

Kapan Enumerable Extension paling berguna?

Extension ini paling berguna ketika kontrak atau aplikasi memerlukan akses on-chain terstandardisasi ke daftar token saat ini atau ID token milik pemilik tertentu.

Kesimpulan

Enumerable Extension adalah fitur ERC-721 opsional yang memungkinkan ID token NFT ditemukan melalui kueri on-chain terstandardisasi.

ID antarmukanya adalah

0x780e9d63
.

Extension ini menambahkan

totalSupply
,
tokenByIndex
, dan
tokenOfOwnerByIndex
.

Fungsi-fungsi ini dapat mencantumkan koleksi saat ini dan ID token yang dimiliki alamat tertentu.Indeks enumerasi bukan pengenal permanen, dan standar tidak menjamin urutannya.Extension ini juga tidak menyediakan metadata, royalti, daftar holder, catatan historis, atau bukti batas suplai tetap.Memelihara indeks global dan khusus pemilik memerlukan penulisan storage tambahan yang meningkatkan biaya gas untuk minting, transfer, dan burning.Aplikasi besar sering menggunakan event Transfer ERC-721 dan pengindeksan off-chain alih-alih membayar enumerasi on-chain secara lengkap.Developer yang mengimplementasikan extension ini harus menjaga agar setiap struktur kepemilikan, saldo, dan indeks tetap tersinkronisasi di semua jalur perubahan state.Pengguna sebaiknya memverifikasi dukungan antarmuka, identitas kontrak, wewenang minting, izin upgrade, dan suplai saat ini secara mandiri.Memahami Enumerable Extension membantu pengguna kripto membedakan penemuan NFT langsung on-chain dari metadata, riwayat kepemilikan, kelangkaan, dan layanan pengindeksan off-chain.
Menarik Kembali / Peluang?
Menarik Kembali / Peluang?Menarik Kembali / Peluang?
Simak arus masuk ETF BTC $2,4 miliar pada likuidasi