? 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.