Standar Multi-Token ERC-1155
Pembaruan terakhir halaman: 22 Oktober 2025
Pengantar
Antarmuka standar untuk kontrak yang mengelola beberapa jenis token. Satu kontrak yang diterapkan dapat mencakup kombinasi apa pun dari token fungible, non-fungible token, atau konfigurasi lainnya (misalnya, token semi-fungible).
Apa yang dimaksud dengan Standar Multi-Token?
Idenya sederhana dan berupaya membuat antarmuka kontrak pintar yang dapat mewakili dan mengontrol sejumlah jenis token fungible dan non-fungible token. Dengan cara ini, token ERC-1155 dapat melakukan fungsi yang sama seperti token ERC-20 dan ERC-721, dan bahkan keduanya pada saat yang bersamaan. Ini meningkatkan fungsionalitas standar ERC-20 dan ERC-721, membuatnya lebih efisien dan memperbaiki kesalahan implementasi yang jelas.
Token ERC-1155 dijelaskan sepenuhnya dalam EIP-1155 (opens in a new tab).
Prasyarat
Untuk lebih memahami halaman ini, kami sarankan Anda membaca terlebih dahulu tentang standar token, ERC-20, dan ERC-721.
Fungsi dan Fitur ERC-1155:
- Transfer Batch: Mentransfer beberapa aset dalam satu panggilan.
- Saldo Batch: Mendapatkan saldo dari beberapa aset dalam satu panggilan.
- Persetujuan Batch: Menyetujui semua token ke sebuah alamat.
- Hook: Hook penerimaan token.
- Dukungan NFT: Jika pasokan hanya 1, perlakukan sebagai NFT.
- Aturan Transfer Aman: Serangkaian aturan untuk transfer yang aman.
Transfer Batch
Transfer batch bekerja sangat mirip dengan transfer ERC-20 biasa. Mari kita lihat fungsi transferFrom ERC-20 biasa:
1// ERC-20 // ERC-202function transferFrom(address from, address to, uint256 value) external returns (bool);34// ERC-1155 // ERC-11555function safeBatchTransferFrom(6 address _from,7 address _to,8 uint256[] calldata _ids,9 uint256[] calldata _values,10 bytes calldata _data11) external;Tampilkan semuaSatu-satunya perbedaan dalam ERC-1155 adalah kita meneruskan nilai sebagai array dan kita juga meneruskan array id. Misalnya diberikan ids=[3, 6, 13] dan values=[100, 200, 5], transfer yang dihasilkan akan menjadi
- Mentransfer 100 token dengan id 3 dari
_fromke_to. - Mentransfer 200 token dengan id 6 dari
_fromke_to. - Mentransfer 5 token dengan id 13 dari
_fromke_to.
Dalam ERC-1155 kita hanya memiliki transferFrom, tidak ada transfer. Untuk menggunakannya seperti transfer biasa, cukup atur alamat asal (from) ke alamat yang memanggil fungsi tersebut.
Saldo Batch
Panggilan balanceOf ERC-20 masing-masing juga memiliki fungsi pasangannya dengan dukungan batch. Sebagai pengingat, ini adalah versi ERC-20:
1// ERC-20 // ERC-202function balanceOf(address owner) external view returns (uint256);34// ERC-1155 // ERC-11555function balanceOfBatch(6 address[] calldata _owners,7 uint256[] calldata _ids8) external view returns (uint256[] memory);Bahkan lebih sederhana untuk panggilan saldo, kita dapat mengambil beberapa saldo dalam satu panggilan. Kita meneruskan array pemilik, diikuti oleh array id token.
Misalnya diberikan _ids=[3, 6, 13] dan _owners=[0xbeef..., 0x1337..., 0x1111...], nilai yang dikembalikan akan menjadi
1[2 balanceOf(0xbeef...),3 balanceOf(0x1337...),4 balanceOf(0x1111...)5]Persetujuan Batch
1// ERC-1155 // ERC-11552function setApprovalForAll(3 address _operator,4 bool _approved5) external;67function isApprovedForAll(8 address _owner,9 address _operator10) external view returns (bool);Tampilkan semuaPersetujuan sedikit berbeda dari ERC-20. Alih-alih menyetujui jumlah tertentu, Anda mengatur operator menjadi disetujui atau tidak disetujui melalui setApprovalForAll.
Membaca status saat ini dapat dilakukan melalui isApprovedForAll. Seperti yang Anda lihat, ini adalah operasi semua-atau-tidak-sama-sekali. Anda tidak dapat menentukan berapa banyak token yang akan disetujui atau bahkan kelas token mana.
Ini sengaja dirancang dengan mempertimbangkan kesederhanaan. Anda hanya dapat menyetujui semuanya untuk satu alamat.
Hook Penerimaan
1function onERC1155BatchReceived(2 address _operator,3 address _from,4 uint256[] calldata _ids,5 uint256[] calldata _values,6 bytes calldata _data7) external returns(bytes4);Mengingat dukungan EIP-165 (opens in a new tab), ERC-1155 mendukung hook penerimaan hanya untuk kontrak pintar. Fungsi hook harus mengembalikan nilai bytes4 ajaib yang telah ditentukan sebelumnya yang diberikan sebagai:
1bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))Ketika kontrak penerima mengembalikan nilai ini, diasumsikan kontrak menerima transfer dan tahu cara menangani token ERC-1155. Hebat, tidak ada lagi token yang tersangkut di dalam kontrak!
Dukungan NFT
Ketika pasokan hanya satu, token tersebut pada dasarnya adalah non-fungible token (NFT). Dan seperti standar untuk ERC-721, Anda dapat menentukan URL metadata. URL tersebut dapat dibaca dan dimodifikasi oleh klien, lihat di sini (opens in a new tab).
Aturan Transfer Aman
Kita telah menyinggung beberapa aturan transfer aman dalam penjelasan sebelumnya. Namun mari kita lihat aturan yang paling penting:
- Pemanggil harus disetujui untuk membelanjakan token untuk alamat
_fromatau pemanggil harus sama dengan_from. - Panggilan transfer harus di-revert jika
- alamat
_toadalah 0. - panjang
_idstidak sama dengan panjang_values. - salah satu saldo pemegang untuk token dalam
_idslebih rendah dari jumlah masing-masing dalam_valuesyang dikirim ke penerima. - terjadi kesalahan lainnya.
- alamat
Catatan: Semua fungsi batch termasuk hook juga ada sebagai versi tanpa batch. Ini dilakukan untuk efisiensi gas, mengingat mentransfer hanya satu aset kemungkinan masih akan menjadi cara yang paling umum digunakan. Kami telah mengabaikannya demi kesederhanaan dalam penjelasan, termasuk aturan transfer aman. Namanya identik, cukup hapus kata 'Batch'.