💎 ERC-1155 Nedir?
ERC-1155, birden fazla değiştirilebilir (fungible) ve değiştirilemez (non-fungible) token'ı tek bir akıllı sözleşmede temsil etmeyi sağlayan bir token standardıdır. Bu, özellikle oyunlar, sanal dünyalar ve koleksiyonluk eşyalar gibi çok çeşitli varlıkların yönetilmesi gereken uygulamalar için oldukça verimli bir çözüm sunar. ERC-721 ve ERC-20 standartlarının yeteneklerini bir araya getirerek, geliştiricilere daha esnek ve optimize edilmiş bir token yönetimi imkanı tanır.
📚 Geliştirme Ortamını Hazırlama
ERC-1155 geliştirmeye başlamadan önce, uygun bir geliştirme ortamı kurmanız gerekmektedir. İşte temel adımlar:
- ⚙️ Node.js ve npm (veya yarn) Kurulumu: Node.js, JavaScript tabanlı araçları çalıştırmak için gereklidir. npm (Node Package Manager) veya yarn, bağımlılıkları yönetmek için kullanılır.
- 📦 Hardhat veya Truffle: Bu araçlar, akıllı sözleşme geliştirme, test etme ve dağıtma süreçlerini kolaylaştırır. Her ikisi de popüler seçeneklerdir ve geniş topluluk desteğine sahiptir.
- 💼 Metamask: Akıllı sözleşmelerle etkileşim kurmak ve test ağlarında işlem yapmak için bir cüzdan gereklidir. Metamask, tarayıcı tabanlı bir cüzdan olarak sıklıkla tercih edilir.
📝 Temel ERC-1155 Fonksiyonları
ERC-1155 standardı, belirli fonksiyonların uygulanmasını gerektirir. İşte en önemli fonksiyonlar:
- 🔑 balanceOf(address account, uint256 id): Belirli bir hesabın belirli bir token ID'sine sahip kaç tane olduğunu döndürür.
- 🔑 balanceOfBatch(address[] accounts, uint256[] ids): Birden fazla hesabın birden fazla token ID'sine sahip miktarlarını toplu olarak döndürür.
- 🔑 safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data): Belirli bir miktarda token'ı bir hesaptan diğerine güvenli bir şekilde transfer eder.
- 🔑 safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data): Birden fazla token ID'sini ve miktarlarını toplu olarak bir hesaptan diğerine güvenli bir şekilde transfer eder.
- 🔑 setApprovalForAll(address operator, bool approved): Bir operatöre, hesabın tüm token'larını yönetme yetkisi verir veya iptal eder.
- 🔑 isApprovedForAll(address account, address operator): Bir operatörün, bir hesap adına tüm token'ları yönetme yetkisine sahip olup olmadığını kontrol eder.
🚀 Akıllı Sözleşme Yazımı
Solidity kullanarak basit bir ERC-1155 akıllı sözleşmesi örneği:
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("https://example.com/token/{id}.json") {
_mint(msg.sender, TOKEN_ID_1, 100, "");
_mint(msg.sender, TOKEN_ID_2, 50, "");
}
function uri(uint256 _tokenId) public view override returns (string) {
return string(abi.encodePacked("https://example.com/token/", Strings.toString(_tokenId), ".json"));
}
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);
}
}
Bu örnek sözleşme, iki farklı token ID'si (TOKEN_ID_1 ve TOKEN_ID_2) tanımlar ve kurucu fonksiyonunda bu token'lardan bazılarını sözleşmeyi dağıtan kişiye (msg.sender) mint eder. Ayrıca, token URI'lerini (meta veri konumları) ayarlamak ve token'ları mint/burn etmek için fonksiyonlar içerir.
🧪 Test ve Dağıtım
Akıllı sözleşmenizi test etmek için Hardhat veya Truffle gibi araçları kullanabilirsiniz. Bu araçlar, yerel bir Ethereum simülasyonu olan Hardhat Network veya Ganache üzerinde testler yapmanıza olanak tanır. Testler tamamlandıktan sonra, sözleşmenizi bir test ağına (örneğin, Ropsten, Rinkeby) veya ana ağa dağıtabilirsiniz.
🔗 Kaynaklar ve İpuçları
- 📚 OpenZeppelin ERC-1155: Güvenli ve denetlenmiş ERC-1155 uygulamaları için OpenZeppelin kütüphanesini kullanın.
- 🌐 Ethereum Geliştirici Dokümantasyonu: Ethereum ve Solidity hakkında daha fazla bilgi edinmek için resmi dokümantasyonu inceleyin.
- 💬 Topluluk Forumları: Stack Overflow ve Ethereum StackExchange gibi forumlarda sorularınızı sorun ve diğer geliştiricilerden yardım alın.
💡 Sonuç
ERC-1155, blockchain üzerinde çok çeşitli varlıkları temsil etmek için güçlü ve esnek bir araçtır. Bu rehber, ERC-1155 geliştirmeye başlamak için temel bilgileri sunmaktadır. Daha fazla derinlemesine bilgi ve örnekler için, yukarıda belirtilen kaynakları inceleyebilirsiniz. Başarılar!