Lanjut ke konten utama
Change page

Standar Token Multi ERC-1155

Terakhir diedit: @yeremiaryangunadi(opens in a new tab), 15 Agustus 2023

Pendahuluan

Sebuah antarmuka standar untuk kontrak yang mengelola jenis token multiple. Suatu kontrak tunggal yang disebarkan mungkin memasukkan kombinasi mana pun dari token yang dapat dipertukarkan, token yang tidak dapat dipertukarkan, atau konfigurasi lainnya (contohnya token semi yang dapat dipertukarkan).

Apa yang dimaksud dengan Standar Multitoken?

Idenya sederhana dan bertujuan untuk membuat antarmuka kontrak pintar yang dapat mewakili dan mengontrol berapa pun jumlah tipe token yang dapat dipertukarkan dan tidak dapat dipertukarkan. Dengan cara ini, token ERC-1155 dapat melakukan fungsi yang sama seperti token ERC-20 dan ERC-721, dan bahkan keduanya secara bersamaan. Dan yang terbaik dari semuanya, cara ini meningkatkan fungsionalitas kedua standar, yang membuatnya lebih efisien, dan memperbaiki kesalahan implementasi yang jelas pada standar ERC-20 dan ERC-721.

Token ERC-1155 dideskripsikan secara lengkap di EIP-1155(opens in a new tab).

Prasyarat

Untuk lebih memahami halaman ini, sebaiknya baca terlebih dahulu tentang standar token, ERC-20, dan ERC-721.

Fungsi dan Fitur ERC-1155:

  • Transfer Kelompok: Transfer beberapa aset dalam sekali pemanggilan.
  • Saldo Kelompok: Dapatkan saldo dari beberapa aset dalam sekali pemanggilan.
  • Persetujuan Kelompok: Setujui semua token ke suatu alamat.
  • Kaitan: Terima kaitan token.
  • Dukungan NFT: Jika persediaan hanya berjumlah 1, anggaplah sebagai NFT.
  • Aturan Transfer Aman: Kumpulan aturan untuk transfer yang aman.

Transfer Kelompok

Transfer kelompok bekerja dalam cara yang sangat mirip dengan transfer ERC-20 reguler. Mari kita lihat fungsi transferFrom ERC-20 reguler:

1// ERC-20
2function transferFrom(address from, address to, uint256 value) external returns (bool);
3
4// 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
Salin

Satu-satunya perbedaan dalam ERC-1155 adalah bahwa kita melewatkan nilai sebagai suatu larik dan kita juga melewatkan suatu larik id. Sebagai contoh, diketahui ids=[3, 6, 13] dan values=[100, 200, 5], transfer yang dihasilkan akan merupakan

  1. Transfer 100 token dengan id 3 dari _from ke _to.
  2. Transfer 200 token dengan id 6 dari _from ke _to.
  3. Transfer 5 token dengan id 13 dari _from ke _to.

Dalam ERC-1155, kita hanya memiliki transferFrom, tidak memiliki transfer. Untuk menggunakannya seperti transfer reguler, cukup tetapkan alamat from ke alamat yang memanggil fungsi.

Saldo Kelompok

Pemanggilan balanceOf ERC-20 masing-masing juga memiliki fungsi pasangannya dengan dukungan kelompok. Sebagai pengingat, ini adalah versi ERC-20:

1// ERC-20
2function balanceOf(address owner) external view returns (uint256);
3
4// ERC-1155
5function balanceOfBatch(
6 address[] calldata _owners,
7 uint256[] calldata _ids
8) external view returns (uint256[] memory);
Salin

Bahkan lebih sederhana untuk pemanggilan saldo, kita dapat mengambilkan beberapa saldo dalam sekali pemanggilan. Kita melewatkan larik pemilik, yang diikuti dengan larik id token.

Sebagai contoh, diketahui _ids=[3, 6, 13] dan _owners=[0xbeef..., 0x1337..., 0x1111...], nilai pengembaliannya akan merupakan

1[
2 balanceOf(0xbeef...),
3 balanceOf(0x1337...),
4 balanceOf(0x1111...)
5]
Salin

Persetujuan Kelompok

1// 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
Salin

Persetujuannya sedikit berbeda dengan ERC-20. Alih-alih menyetujui jumlah tertentu, Anda menetapkan suatu operator untuk menyetujui atau tidak menyetujui melalui setApprovalForAll.

Membaca status saat ini dapat dilakukan melalui isApprovedForAll. Seperti yang dapat Anda lihat, itu mencakup semuanya atau tidak sama sekali. Anda tidak dapat mendefinisikan berapa banyak token yang akan disetujui atau bahkan kelas token.

Ini dengan sengaja dirancang sedemikian rupa dengan tujuan kemudahan. Anda juga dapat menyetujui semua hal untuk satu alamat.

Terima Kaitan

1function onERC1155BatchReceived(
2 address _operator,
3 address _from,
4 uint256[] calldata _ids,
5 uint256[] calldata _values,
6 bytes calldata _data
7) external returns(bytes4);
Salin

Dengan dukungan EIP-165(opens in a new tab), ERC-1155 hanya mendukung penerimaan kaitan untuk kontrak pintar. Fungsi kaitan harus mengembalikan nilai magic yang ditentukan sebelumnya dalam bytes4 yang diberikan sebagai:

1bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
Salin

Ketika kontrak yang menerima mengembalikan nilai ini, kontrak dianggap menerima transfer dan mengetahui cara menangani token ERC-1155. Bagus, tidak ada lagi token yang macet dalam kontrak!

Dukungan NFT

Ketika persediaan hanya berjumlah satu, token pada dasarnya merupakan token yang tidak dapat dipertukarkan (NFT). Dan karena ini adalah standar untuk ERC-721, Anda dapat menentukan suatu URL metadata. URL dapat dibaca dan dimodifikasi oleh klien, lihat di sini(opens in a new tab).

Aturan Transfer Aman

Kita telah membahas beberapa aturan transfer yang aman di penjelasan sebelumnya. Tetapi, mari kita lihat pada bagian terpenting dari aturannya:

  1. Pemanggil harus disetujui untuk menggunakan token untuk alamat _from atau pemanggilnya harus sama dengan _from.
  2. Pemanggilan transfer harus dibalikkan jika
    1. alamat _to adalah 0.
    2. panjang _ids tidak sama dengan panjang _values.
    3. saldo pemilik mana pun untuk token dalam _ids lebih rendah dari jumlah masing-masing dalam _values yang dikirim ke penerima.
    4. kesalahan lain mana pun terjadi.

Catatan: Semua fungsi kelompok termasuk kaitan juga hadir sebagai versi tanpa kelompok. Ini semua demi efisiensi gas, dengan pertimbangan untuk mentransfer hanya satu aset mungkin masih menjadi cara yang paling banyak digunakan. Kita telah melewatkannya untuk penjelasan yang sederhana, termasuk untuk aturan transfer yang aman. Namanya mirip, cukup hilangkan 'Batch'.

Bacaan lebih lanjut

Apakah artikel ini membantu?