🎨 ERC-1155'e Giriş
ERC-1155, birden fazla token türünü tek bir akıllı sözleşmede temsil etmeyi sağlayan bir token standardıdır. Bu, hem değiştirilebilir (fungible) hem de değiştirilemez (non-fungible) token'ları (NFT'ler) aynı sözleşmede barındırma imkanı sunar. Oyun içi öğeler, koleksiyon kartları veya para birimleri gibi çeşitli dijital varlıkları temsil etmek için idealdir.
💡 ERC-1155 Sözleşmesinin Temel Bileşenleri
- 🔑 Sözleşme Adresi: Benzersiz sözleşme adresini belirtir.
- 📦 Token ID: Her bir token türünü tanımlayan benzersiz bir ID.
- 💰 Bakiye (Balance): Her adresin sahip olduğu token miktarını gösterir.
- 🚀 Transfer Fonksiyonları: Token transfer işlemlerini gerçekleştirir.
- 🛡️ Güvenlik Mekanizmaları: Yetkisiz erişimi ve hatalı işlemleri önler.
💻 Örnek Kod İncelemesi
🧩 Basit Bir ERC-1155 Sözleşmesi
Aşağıdaki örnek, temel ERC-1155 fonksiyonlarını içeren basitleştirilmiş bir sözleşme örneğidir.
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyToken is ERC1155, Ownable {
uint256 public constant TOKEN_ID_1 = 1;
uint256 public constant TOKEN_ID_2 = 2;
constructor() ERC1155("uri/{id}.json") {
_mint(msg.sender, TOKEN_ID_1, 100, "");
_mint(msg.sender, TOKEN_ID_2, 50, "");
}
function mint(address account, uint256 id, uint256 amount) public onlyOwner {
_mint(account, id, amount, "");
}
function burn(address account, uint256 id, uint256 amount) public onlyOwner {
_burn(account, id, amount);
}
}
🔍 Kod Açıklaması
- 🔑 pragma solidity ^0.8.0;: Sözleşmenin hangi Solidity versiyonu ile derleneceğini belirtir.
- 📦 import ...: Gerekli kütüphaneleri (ERC1155, Ownable) içe aktarır.
- 💰 contract MyToken is ERC1155, Ownable {: MyToken adında bir sözleşme oluşturur ve ERC1155 ile Ownable özelliklerini miras alır.
- 🚀 TOKEN_ID_1 ve TOKEN_ID_2: İki farklı token türü için sabit ID'ler tanımlar.
- 🛡️ constructor(): Sözleşme oluşturulduğunda, sözleşmeyi oluşturan kişiye (msg.sender) TOKEN_ID_1'den 100 adet ve TOKEN_ID_2'den 50 adet basar.
- 🍎 mint() ve burn(): Yeni token basma ve mevcut token'ları yakma fonksiyonlarıdır. Sadece sözleşme sahibi (owner) bu fonksiyonları çağırabilir.
🎨 Fonksiyonların Detaylı İncelemesi
- 🔑 _mint(address account, uint256 id, uint256 amount, bytes memory data): Belirtilen hesaba (account), belirli bir token ID'sinden (id) belirli bir miktar (amount) basar. `data` parametresi ek bilgiler için kullanılır.
- 📦 _burn(address account, uint256 id, uint256 amount): Belirtilen hesaptan (account), belirli bir token ID'sinden (id) belirli bir miktar (amount) yakar.
- 💰 safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes memory data): Belirtilen hesaptan (from), belirli bir token ID'sinden (id) belirli bir miktarı (amount) başka bir hesaba (to) güvenli bir şekilde transfer eder. `data` parametresi ek bilgiler için kullanılır.
- 🚀 safeBatchTransferFrom(address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data): Birden fazla token ID'sini ve miktarlarını tek bir işlemde transfer etmeyi sağlar.
- 🛡️ balanceOf(address account, uint256 id): Belirtilen hesabın (account), belirli bir token ID'sinden (id) ne kadar bakiyesi olduğunu döndürür.
- 🍎 balanceOfBatch(address[] memory accounts, uint256[] memory ids): Birden fazla hesabın ve token ID'sinin bakiyelerini aynı anda sorgulamayı sağlar.
🚀 Gelişmiş Kullanım Senaryoları
- 🔑 Oyun İçi Varlıklar: Oyun karakterleri, silahlar, zırhlar gibi farklı öğeleri temsil etmek.
- 📦 Koleksiyon Kartları: Dijital koleksiyon kartlarını oluşturmak ve ticaretini yapmak.
- 💰 Biletleme Sistemleri: Etkinlik biletlerini oluşturmak ve yönetmek.
- 🚀 Dijital Sanat: Sanat eserlerini token'laştırmak ve sahipliğini yönetmek.
🛡️ Güvenlik İpuçları
- 🍎 Yetkilendirme Kontrolleri: Token basma ve yakma gibi kritik fonksiyonları sadece yetkili kişilerin gerçekleştirebilmesini sağlayın.
- 🔑 Taşma/Alt Taşma Koruması: Aritmetik işlemler sırasında taşma ve alt taşma hatalarını önlemek için SafeMath kütüphanesini kullanın.
- 📦 Yeniden Giriş Saldırıları: Yeniden giriş (reentrancy) saldırılarına karşı önlem alın.
- 💰 Akıllı Sözleşme Denetimi: Sözleşmenizi yayınlamadan önce mutlaka bağımsız bir denetim firmasından denetlettirin.
📚 Sonuç
ERC-1155, blockchain üzerinde çeşitli dijital varlıkları temsil etmek için güçlü ve esnek bir standarttır. Bu yazıda, ERC-1155'in temel bileşenlerini, örnek bir sözleşme kodunu ve güvenlik ipuçlarını inceledik. Kendi projelerinizde ERC-1155'i kullanarak yenilikçi çözümler geliştirebilirsiniz.