﻿---
title: "ERC-1155"
description: "ERC-1155 adalah standar multi-token Ethereum: satu kontrak dapat mencatat berbagai jenis token fungibel, nonfungibel, atau campuran berdasarkan ID dan mentransfer beberapa ID sekaligus dalam satu batch."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ERC-1155

> Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.

<a id="answer"></a>

## Jawaban langsung

ERC-1155 adalah standar multi-token Ethereum. Satu kontrak dapat menyimpan berbagai jenis token, dan setiap `token ID` dapat mewakili saldo fungibel, item nonfungibel, atau rancangan suplai lain yang ditentukan implementasinya. Karena itu, kunci asetnya adalah `contract address + token ID`, bukan ID token saja.

Standar ini menetapkan kueri saldo tunggal dan batch, transfer aman tunggal dan batch, persetujuan menyeluruh untuk operator, callback penerima, event transfer, serta perilaku URI metadata opsional. Standar ini tidak menetapkan siapa yang boleh mencetak token, apakah suplai dibatasi, apakah metadata bersifat permanen, hak hukum apa yang diberikan token, atau berapa nilai token tersebut. Semua sifat itu harus diperiksa pada kontrak yang tepat, peran-perannya, dan dependensi eksternalnya.

<a id="mechanism"></a>

## Cara kerjanya

1. **Identifikasi saldo.** `balanceOf(account, id)` mengembalikan jumlah yang dimiliki sebuah akun untuk satu ID. `balanceOfBatch(accounts, ids)` meminta data pasangan akun-ID. Dua kontrak dapat sama-sama memakai ID `1` untuk aset yang tidak berkaitan, sehingga identitas lengkap tetap mencakup chain, alamat kontrak, dan ID.
2. **Otorisasi pemanggil.** Pemilik dapat mentransfer saldonya sendiri atau memanggil `setApprovalForAll(operator, true)`. Persetujuan itu mencakup setiap ID ERC-1155 yang dimiliki pemilik dalam kontrak tersebut; `isApprovedForAll(owner, operator)` melaporkan statusnya. ERC-1155 tidak menyediakan persetujuan bawaan yang dibatasi pada satu ID atau jumlah tertentu.
3. **Terapkan transfer tunggal atau batch.** `safeTransferFrom` memindahkan satu ID dan jumlah. `safeBatchTransferFrom` memindahkan array `ids` dan `values` yang sejajar; panjang dan urutannya harus cocok. Batching dapat mengurangi overhead transaksi berulang, tetapi tidak dijamin lebih murah untuk setiap implementasi atau beban kerja.
4. **Periksa kontrak penerima.** Setelah memperbarui saldo dan memancarkan event terkait, transfer yang sesuai standar ke sebuah kontrak memanggil `onERC1155Received` atau `onERC1155BatchReceived`. Callback yang tidak didukung, nilai pengembalian yang salah, atau penolakan biasanya membatalkan transfer. Pemeriksaan penerima ini mengurangi risiko aset terkunci tanpa sengaja; pemeriksaan tersebut tidak membuktikan bahwa kontrak penerima dapat dipercaya atau menyediakan jalur penarikan.
5. **Rekonstruksi state dari event.** Setiap pencetakan, transfer, dan pembakaran harus tercermin dalam `TransferSingle` atau `TransferBatch`. Pencetakan memakai zero address sebagai `from`; pembakaran memakainya sebagai `to`. Pengindeks dapat memperoleh saldo dan suplai bersih yang dicetak per ID dari log ini, tetapi harus memproses seluruh riwayat, reorganisasi chain, dan migrasi kontrak dengan benar.
6. **Temukan metadata.** Ekstensi URI opsional dapat mengembalikan templat bersama yang memuat `{id}`. Klien menggantinya dengan ID token heksadesimal berhuruf kecil, diberi nol di depan hingga 64 karakter, tanpa awalan `0x`. Metadata tetap dapat berubah, tidak tersedia, atau menyesatkan kecuali implementasi dan jaminan penyimpanannya menyatakan sebaliknya.

<a id="example"></a>

## Contoh perhitungan

Sebuah kontrak gim menetapkan ID `1` untuk koin emas, ID `7` untuk tiket akses, dan ID `42` untuk pedang unik. Alice memiliki `balanceOf(Alice, 1) = 500`, `balanceOf(Alice, 7) = 3`, dan `balanceOf(Alice, 42) = 1`.

- Alice memanggil `safeBatchTransferFrom` dengan `ids = [1, 7, 42]` dan `values = [120, 1, 1]`. Jika validasi berhasil, saldo barunya adalah `500 - 120 = 380`, `3 - 1 = 2`, dan `1 - 1 = 0`; penerima memperoleh jumlah yang bersesuaian.
- Kontrak memancarkan `TransferBatch`. Jika penerima adalah kontrak, kontrak tersebut harus menerima batch melalui `onERC1155BatchReceived`; jika tidak, seluruh transaksi dibatalkan dan tidak satu pun dari tiga perubahan saldo tersisa.
- ID `42` berperilaku sebagai token nonfungibel hanya karena logika penerbitan dan transfernya mempertahankan suplai pada `1`. ERC-1155 sendiri tidak memaksakan aturan itu. Kontrak yang sama dapat mencetak lebih banyak ID `1` di kemudian hari, sesuai kontrol aksesnya sendiri.

<a id="risks"></a>

## Risiko dan pengendalian

- **Wewenang operator yang luas.** Operator jahat atau yang telah disusupi dan disetujui melalui `setApprovalForAll` dapat memindahkan setiap ID yang dimiliki dalam kontrak tersebut. Verifikasi alamat operator dan kontrak, gunakan dompet terpisah jika sesuai, dan cabut persetujuan yang sudah tidak diperlukan.
- **Wewenang mencetak, menjeda, dan meningkatkan kontrak.** Ini adalah fitur implementasi, bukan jaminan standar. Periksa pemegang peran, administrator proxy, timelock, ekstensi suplai, dan apakah peningkatan dapat mengubah saldo atau aturan transfer.
- **Ketidakcocokan metadata dan aset.** URI atau JSON yang dihosting dapat berubah sementara ID on-chain tetap sama. Verifikasi hash konten, ketahanan penyimpanan, komitmen penerbit, dan hak yang direpresentasikan di luar kontrak token.
- **Kesalahan integrasi.** Dompet dan pengindeks dapat memasangkan array batch secara keliru, melewatkan event lama, salah menangani reorganisasi, atau mencampuradukkan ID yang sama pada kontrak dan chain berbeda. Rekonsiliasikan panggilan kontrak, log, dan saldo akhir.
- **Risiko penerima dan reentrancy.** Callback penerima menjalankan kode eksternal selama alur transfer. Implementasi dan protokol yang berintegrasi memerlukan urutan perubahan state serta pertahanan reentrancy yang tepat; dukungan callback saja bukan audit keamanan.
- **Risiko biaya dan likuiditas.** Transfer batch tetap menghabiskan gas dan dibatalkan secara atomik jika satu syarat wajib gagal. Likuiditas pasar, penetapan harga, royalti, bridging, penebusan, dan penegakan off-chain berada di luar ERC-1155.

<a id="misconceptions"></a>

## Kesalahpahaman umum

- **“Setiap ID adalah NFT.”** Sebuah ID dapat memiliki jumlah berapa pun; sifat nonfungibel bergantung pada suplai dan semantik implementasinya.
- **“Satu kontrak berarti satu koleksi.”** Sebuah kontrak dapat memuat banyak jenis token yang tidak berkaitan, dan ID numerik yang sama dalam kontrak lain menunjukkan aset yang berbeda.
- **“Transfer aman berarti asetnya aman.”** Callback memeriksa kompatibilitas penerima, bukan kualitas kontrak, harga, metadata, atau kemampuan memulihkan aset.
- **“Batching selalu menghemat gas.”** Batching sering menghindari overhead berulang, tetapi hasil sebenarnya bergantung pada implementasi, jumlah ID, perubahan penyimpanan, calldata, dan model biaya jaringan.

<a id="related"></a>

## Topik terkait

- [ERC-20](/id/crypto/erc20/)
- [ERC-721](/id/crypto/erc721/)
- [NFT](/id/crypto/nft/)
- [Standar token](/id/crypto/token-standard/)

<a id="sources"></a>

## Sumber

- [ERC-1155: Standar Multi-Token](https://eips.ethereum.org/EIPS/eip-1155)
- [API ERC1155](https://docs.openzeppelin.com/contracts/5.x/api/token/erc1155)

Source: https://wiki.fcontext.com/id/crypto/erc1155/index.mdx
