Lompat ke konten utama
Change page

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

Transfer batch bekerja sangat mirip dengan transfer ERC-20 biasa. Mari kita lihat fungsi transferFrom ERC-20 biasa:

1// ERC-20 // ERC-20
2function transferFrom(address from, address to, uint256 value) external returns (bool);
3
4// ERC-1155 // ERC-1155
5function safeBatchTransferFrom(
6 address _from,
7 address _to,
8 uint256[] calldata _ids,
9 uint256[] calldata _values,
10 bytes calldata _data
11) external;
Tampilkan semua

Satu-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

  1. Mentransfer 100 token dengan id 3 dari _from ke _to.
  2. Mentransfer 200 token dengan id 6 dari _from ke _to.
  3. Mentransfer 5 token dengan id 13 dari _from ke _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-20
2function balanceOf(address owner) external view returns (uint256);
3
4// ERC-1155 // ERC-1155
5function balanceOfBatch(
6 address[] calldata _owners,
7 uint256[] calldata _ids
8) 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-1155
2function setApprovalForAll(
3 address _operator,
4 bool _approved
5) external;
6
7function isApprovedForAll(
8 address _owner,
9 address _operator
10) external view returns (bool);
Tampilkan semua

Persetujuan 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 _data
7) 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:

  1. Pemanggil harus disetujui untuk membelanjakan token untuk alamat _from atau pemanggil harus sama dengan _from.
  2. Panggilan transfer harus di-revert jika
    1. alamat _to adalah 0.
    2. panjang _ids tidak sama dengan panjang _values.
    3. salah satu saldo pemegang untuk token dalam _ids lebih rendah dari jumlah masing-masing dalam _values yang dikirim ke penerima.
    4. terjadi kesalahan lainnya.

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'.

Bacaan lebih lanjut

Apakah artikel ini membantu?