Blockchain Smart Contracts with Solidity · Ders

ERC-1155 Çoklu Token Standardı

Tek bir sözleşmenin değiştirilebilir, yarı değiştirilebilir ve değiştirilemez token'ları gas açısından verimli toplu işlemler için birlikte yönetmesini sağlayan ERC-1155 çoklu token standardını öğrenin.

4. ders / 413 adım

ERC-1155 Çoklu Token Standardı, CoddyKit'te ücretsiz bir Blockchain Smart Contracts with Solidity dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Blockchain Smart Contracts with Solidity öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.

Bu dersin bazı bölümleri henüz çevrilmemiş olup İngilizce olarak gösterilmektedir.

Why ERC-1155 Exists

ERC-20 manages one fungible token; ERC-721 manages unique NFTs. But a game may need thousands of item types mixing both. Deploying a separate contract per type is wasteful.

ERC-1155 is a single contract that can manage many token IDs at once, each of which can be fungible or non-fungible.

Token IDs as Categories

In ERC-1155 each token is identified by a numeric id. The same id can have a balance greater than one (fungible) or a supply of exactly one (non-fungible).

  • id = 1 with balance 500 = a fungible gold coin
  • id = 2 with balance 1 = a unique sword NFT

Core Balance Mapping

The heart of an ERC-1155 contract is a nested mapping from id to owner to balance.

mapping(uint256 => mapping(address => uint256)) private _balances;

function balanceOf(address account, uint256 id) public view returns (uint256) {
    return _balances[id][account];
}

Batch Balance Queries

A signature feature is balanceOfBatch, which returns many balances in one call, saving round trips.

function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
    public view returns (uint256[] memory)
{
    require(accounts.length == ids.length, 'length mismatch');
    uint256[] memory batch = new uint256[](accounts.length);
    for (uint256 i = 0; i < accounts.length; i++) {
        batch[i] = _balances[ids[i]][accounts[i]];
    }
    return batch;
}

Batch Transfers

ERC-1155 lets you move several token types in a single transaction with safeBatchTransferFrom. This is far cheaper than many separate ERC-20/721 transfers.

function safeBatchTransferFrom(
    address from,
    address to,
    uint256[] memory ids,
    uint256[] memory amounts,
    bytes memory data
) public {
    require(ids.length == amounts.length, 'length mismatch');
    for (uint256 i = 0; i < ids.length; i++) {
        _balances[ids[i]][from] -= amounts[i];
        _balances[ids[i]][to] += amounts[i];
    }
}

Approval For All

Instead of per-token approvals, ERC-1155 uses a single operator approval: setApprovalForAll grants an address permission to move every token you own.

mapping(address => mapping(address => bool)) private _operatorApprovals;

function setApprovalForAll(address operator, bool approved) public {
    _operatorApprovals[msg.sender][operator] = approved;
}

function isApprovedForAll(address owner, address operator) public view returns (bool) {
    return _operatorApprovals[owner][operator];
}

The Shared Metadata URI

ERC-1155 uses one URI template for all tokens. The placeholder {id} is replaced by the hex token id by clients.

Example: https://game.example/api/{id}.json

string private _uri = 'https://game.example/api/{id}.json';

function uri(uint256) public view returns (string memory) {
    return _uri;
}

Minting Tokens

Minting increases a balance for an id. The same internal logic works for both fungible (amount > 1) and non-fungible (amount = 1) tokens.

function _mint(address to, uint256 id, uint256 amount) internal {
    require(to != address(0), 'mint to zero');
    _balances[id][to] += amount;
    emit TransferSingle(msg.sender, address(0), to, id, amount);
}

event TransferSingle(address operator, address from, address to, uint256 id, uint256 value);

Safe Transfer Receiver Check

Like ERC-721, ERC-1155 protects against tokens being locked in contracts. A receiving contract must implement onERC1155Received and return its magic value, or the transfer reverts.

interface IERC1155Receiver {
    function onERC1155Received(
        address operator, address from,
        uint256 id, uint256 value, bytes calldata data
    ) external returns (bytes4);
}

Using OpenZeppelin

In practice you inherit the audited OpenZeppelin implementation rather than writing it from scratch.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import '@openzeppelin/contracts/token/ERC1155/ERC1155.sol';

contract GameItems is ERC1155 {
    uint256 public constant GOLD = 0;
    uint256 public constant SWORD = 1;

    constructor() ERC1155('https://game.example/api/{id}.json') {
        _mint(msg.sender, GOLD, 1000, '');
        _mint(msg.sender, SWORD, 1, '');
    }
}

When To Choose ERC-1155

Pick ERC-1155 when you have many token types, need batch operations, or mix fungible and non-fungible assets. Stick with ERC-20/721 for a single, simple asset where the extra complexity is not justified.

Quick Check

Test your understanding of ERC-1155.

Recap

You learned that ERC-1155 is a multi-token standard managing many IDs in one contract. Key points:

  • Nested id => owner => balance mapping
  • Batch queries and transfers save gas
  • Single operator approval and shared {id} URI
  • Safe-transfer receiver checks protect against locked tokens

It is the standard of choice for games and marketplaces with many asset types.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Blockchain Smart Contracts with Solidity öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
12
Dersler
48

Sıkça Sorulan Sorular

“ERC-1155 Çoklu Token Standardı” dersi ücretsiz mi?

Evet — “ERC-1155 Çoklu Token Standardı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Blockchain Smart Contracts with Solidity kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Blockchain Smart Contracts with Solidity kursu toplamda 4 dersten oluşur.

“ERC-1155 Çoklu Token Standardı” dersinde ne öğreneceğim?

Tek bir sözleşmenin değiştirilebilir, yarı değiştirilebilir ve değiştirilemez token'ları gas açısından verimli toplu işlemler için birlikte yönetmesini sağlayan ERC-1155 çoklu token standardını öğren… Blockchain Smart Contracts with Solidity ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Blockchain Smart Contracts with Solidity öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Blockchain Smart Contracts with Solidity, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“ERC-1155 Çoklu Token Standardı” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Blockchain Smart Contracts with Solidity dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Blockchain Smart Contracts with Solidity dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. ERC-20 Değiştirilebilir Token Standardı
  2. ERC-20 Token Uygulama
  3. ERC-721 Değiştirilemez Tokenlar (NFT'ler)
  4. ERC-1155 Çoklu Token Standardı
← Blockchain Smart Contracts with Solidity Sayfasına Dön