ERC-1155 Çoklu Token Standardı
Sayfanın son güncellenmesi: 22 Ekim 2025
Giriş
Birden çok token türünü yöneten sözleşmeler için standart bir arayüz. Dağıtılmış tek bir sözleşme, değiştirilebilir jetonların, değiştirilemez jetonların veya diğer yapılandırmaların (ör. yarı-değiştirilebilir jetonlar) herhangi bir kombinasyonunu içerebilir.
Çoklu-Token Standardı ne anlama geliyor?
Basit bir fikirdir: Herhangi bir sayıda değiştirilebilir ve değiştirilemez token türünü temsil edebilen ve kontrol edebilen bir akıllı sözleşme arayüzü oluşturmayı amaçlar. Bu şekilde, ERC-1155 jetonu, bir ERC-20 ve ERC-721 jetonu ile aynı işlevleri ve hatta her ikisini aynı anda yapabilir. Bu, hem ERC-20 hem de ERC-721 standartlarının işlevselliğini iyileştirerek daha verimli kılar ve bariz uygulama hatalarını düzeltir.
ERC-1155 jetonu, EIP-1155 (opens in a new tab) belgesinde tamamen açıklanmıştır.
Ön Koşullar
Bu sayfayı daha iyi anlamak için öncelikle jeton standartları, ERC-20 ve ERC-721 hakkında bilgi edinmenizi öneririz.
ERC-1155 Fonksiyonları ve Özellikleri:
- Toplu Aktarım: Tek bir çağrıda birden çok varlığı aktarın.
- Toplu Bakiye: Tek bir çağrıda birden fazla varlığın bakiyesini alın.
- Toplu Onay: Bir adrese tüm jetonları onaylayın.
- Kancalar: Jeton alma kancası.
- NFT Desteği: Arz yalnızca 1 ise bunu NFT olarak kabul edin.
- Güvenli Aktarım Kuralları: Güvenli aktarım için kurallar dizisi.
Toplu Aktarımlar
Toplu aktarım, normal ERC-20 aktarımlarına çok benzer şekilde çalışır. Normal ERC-20 transferFrom fonksiyonuna bakalım:
1// ERC-202function transferFrom(address from, address to, uint256 value) external returns (bool);34// ERC-11555function safeBatchTransferFrom(6 address _from,7 address _to,8 uint256[] calldata _ids,9 uint256[] calldata _values,10 bytes calldata _data11) external;Tümünü gösterERC-1155'teki tek fark, değerleri bir dizi olarak geçirmemiz ve ayrıca bir dizi kimlik geçirmemizdir. Örneğin, ids=[3, 6, 13] ve values=[100, 200, 5] verildiğinde, sonuçta ortaya çıkan transferler şöyle olacaktır
- 3 kimliğine sahip 100 jetonu
_fromadresinden_toadresine transfer edin. - 6 kimliğine sahip 200 jetonu
_fromadresinden_toadresine transfer edin. - 13 kimliğine sahip 5 jetonu
_fromadresinden_toadresine transfer edin.
ERC-1155'te yalnızca transferFrom vardır, transfer yoktur. Normal bir transfer gibi kullanmak için, gönderen adresini fonksiyonu çağıran adrese ayarlamanız yeterlidir.
Toplu Bakiye
İlgili ERC-20 balanceOf çağrısı da benzer şekilde toplu destekli bir partner fonksiyona sahiptir. Bir hatırlatma olarak, ERC-20 sürümü şudur:
1// ERC-202function balanceOf(address owner) external view returns (uint256);34// ERC-11555function balanceOfBatch(6 address[] calldata _owners,7 uint256[] calldata _ids8) external view returns (uint256[] memory);Bakiye çağrısı için daha da basit şekilde tek bir aramada birden fazla bakiye alabiliriz. Sahip dizisini ve ardından token kimlikleri dizisini geçiriyoruz.
Örneğin _ids=[3, 6, 13] ve _owners=[0xbeef..., 0x1337..., 0x1111...] verildiğinde, dönüş değeri şöyle olacaktır
1[2 balanceOf(0xbeef...),3 balanceOf(0x1337...),4 balanceOf(0x1111...)5]Toplu Onay
1// ERC-11552function setApprovalForAll(3 address _operator,4 bool _approved5) external;67function isApprovedForAll(8 address _owner,9 address _operator10) external view returns (bool);Tümünü gösterOnaylar, ERC-20'den biraz farklıdır. Belirli tutarları onaylamak yerine, setApprovalForAll aracılığıyla bir operatörü onaylanmış veya onaylanmamış olarak ayarlarsınız.
Mevcut durumu okuma işlemi isApprovedForAll aracılığıyla yapılabilir. Gördüğünüz gibi, bir "ya hep ya hiç" işlemidir. Kaç token onaylanacağını ve hatta hangi token sınıflarının onaylanacağını tanımlayamazsınız.
Bu kasıtlı olarak basitlik göz önünde bulundurularak tasarlanmıştır. Her şeyi yalnızca bir adres için onaylayabilirsiniz.
Alma Kancası
1function onERC1155BatchReceived(2 address _operator,3 address _from,4 uint256[] calldata _ids,5 uint256[] calldata _values,6 bytes calldata _data7) external returns(bytes4);EIP-165 (opens in a new tab) desteği sayesinde ERC-1155, yalnızca akıllı sözleşmeler için alma kancalarını destekler. Kanca fonksiyonu, şu şekilde olan bir sihirli önceden tanımlanmış bytes4 değeri döndürmelidir:
1bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))Alıcı sözleşme bu değeri döndürdüğünde, sözleşmenin aktarımı kabul ettiği ve ERC-1155 token'larını nasıl kullanacağını bildiği varsayılır. Harika, artık bir sözleşmede sıkışmış token'lar yok!
NFT Desteği
Arz yalnızca bir olduğunda, token esasen bir değiştirilemez token'dır (NFT). Ve ERC-721 için standart olduğu gibi, bir meta veri URL'si tanımlayabilirsiniz. URL, istemciler tarafından okunabilir ve değiştirilebilir, buraya (opens in a new tab) bakın.
Güvenli Aktarım Kuralı
Birkaç güvenli aktarım kuralına daha önceki açıklamalarda değinmiştik. Ama kuralların en önemlisine bir bakalım:
- Çağıran,
_fromadresi için jetonları harcamak üzere onaylanmış olmalı veya çağıran_fromile aynı olmalıdır. - Transfer çağrısı şu durumlarda geri dönmelidir
_toadresinin 0 olması._idsuzunluğunun_valuesuzunluğu ile aynı olmaması._idsiçindeki jetonlar için sahiplerin bakiyelerinden herhangi birinin, alıcıya gönderilen_valuesiçindeki ilgili tutarlardan daha düşük olması.- başka herhangi bir hata gerçekleşirse.
Not: Kanca dâhil tüm toplu fonksiyonlar, toplu olmayan sürümler olarak da mevcuttur. Bu, yalnızca bir varlığın aktarılmasının muhtemelen hâlâ en yaygın kullanılan yol olacağı düşünülerek, gaz verimliliği için yapılır. Güvenli aktarım kuralları da dahil olmak üzere açıklamalarda basitlik için bunlardan bahsetmedik. İsimler aynıdır: Sadece "Batch"i kaldırın.