ERC-1155 — multi-token standard
ERC-20 butuh satu kontrak per jenis token. ERC-721 butuh satu kontrak per koleksi. ERC-1155 menjawab kebutuhan yang muncul begitu kamu punya banyak jenis aset terkait — satu kontrak, ribuan tipe token id, dengan operasi batch yang jauh lebih murah.
Intisari
- Satu kontrak ERC-1155 bisa mengelola banyak
idtoken sekaligus — dan tiapidbisa bersifat fungible (seperti ERC-20) atau non-fungible (seperti ERC-721, cukup buat supply-nya 1). balanceOf(akun, id)— saldo selalu per pasangan akun+id, bukan cuma per akun seperti ERC-20.- Operasi batch (
balanceOfBatch,safeBatchTransferFrom) memindahkan banyak jenis token dalam satu transaksi — jauh lebih hemat gas dibanding memanggil kontrak terpisah berkali-kali. - Cocok untuk portofolio aset RWA yang beragam dalam satu penerbit: emas 24 karat, emas 22 karat, dan perak — masing-masing
idberbeda, satu kontrak custodian yang sama. - Sama seperti ERC-721, metadata (
uri(id)) tinggal di luar rantai — biasanya IPFS.
Masalah yang diselesaikan: satu kontrak per jenis aset itu boros
Bayangkan platform tokenisasi logam mulia yang menjual emas 24 karat, emas 22 karat, dan perak. Dengan
ERC-20, kamu butuh tiga kontrak terpisah — tiga alamat, tiga proses audit, tiga kali biaya deploy. ERC-1155
menyatukannya jadi satu kontrak dengan tiga id berbeda.
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
contract LogamMulia is ERC1155 {
uint256 public constant EMAS_24K = 1;
uint256 public constant EMAS_22K = 2;
uint256 public constant PERAK = 3;
constructor() ERC1155("ipfs://bafybei.../{id}.json") {}
function mint(address ke, uint256 id, uint256 jumlahGram) external {
_mint(ke, id, jumlahGram, "");
}
}
Batch: satu transaksi, banyak jenis token
function belanjaPaket(address dari, address ke) external {
uint256[] memory ids = new uint256[](2);
uint256[] memory jumlah = new uint256[](2);
ids[0] = EMAS_24K; jumlah[0] = 10; // 10 gram emas 24K
ids[1] = PERAK; jumlah[1] = 500; // 500 gram perak
safeBatchTransferFrom(dari, ke, ids, jumlah, "");
}
Kenapa batch penting secara ekonomi. Setiap transaksi punya biaya dasar 21.000 gas di
luar logika kontraknya (lihat Fase 0). Memindahkan 3 jenis token lewat 3 kontrak ERC-20 terpisah
berarti membayar biaya dasar itu 3 kali. safeBatchTransferFrom membayarnya sekali
untuk seluruh batch — penghematan yang makin terasa untuk portofolio dengan banyak jenis aset.
Peta pilihan standar token
| Kebutuhan | Standar |
|---|---|
| Satu jenis aset, sepenuhnya fungible | ERC-20 |
| Aset unik satu per satu | ERC-721 |
| Banyak jenis aset terkait dalam satu penerbit | ERC-1155 |
| Token fungible dengan kepatuhan KYC/AML wajib | ERC-3643 / ERC-1400 (materi berikutnya) |
Latihan: deploy LogamMulia, mint 100 gram EMAS_24K dan 50 gram
PERAK ke satu akun. Panggil balanceOfBatch dengan array akun yang sama diulang
dua kali dan array id [EMAS_24K, PERAK] — bandingkan berapa gas yang dipakai satu panggilan
balanceOfBatch versus dua panggilan balanceOf terpisah.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.