🚀 Online Kendi Sınavını Oluştur ve Çöz!
avatar
Bos_Kagit
0 puan • 529 soru • 542 cevap
✔️ Cevaplandı • Doğrulandı

ERC-1155 Sözleşme Örnekleri: Kod İncelemesi

ERC-1155 sözleşmeleri hakkında bilgi edinmek istiyorum. Kod örneklerini inceleyerek nasıl çalıştığını daha iyi anlayabilirim.
WhatsApp'ta Paylaş
1 CEVAPLARI GÖR
✔️ Doğrulandı
0 kişi beğendi.
avatar
Serkan_01
0 puan • 581 soru • 559 cevap

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

Yorumlar