🎮 ERC-1155 y ERC-4626: Multi-Token y Vaults

Multi-token eficiente para juegos + Tokenized Vaults para yield automático

Semanas 3-4: Token Standards Avanzados
ERC-1155 Multi-Token ERC-4626 Vault Shares vs Assets Yield Farming
🎮 ERC-1155 ” El inventario de videojuego: Imagina World of Warcraft. Tienes espadas (fungibles, miles iguales), escudos raros (semi-fungibles), y armas legendarias únicas (NFTs). Con ERC-1155, un solo contrato maneja todos. Mucho más eficiente en gas que desplegar un ERC-20 y un ERC-721 por separado. ERC-4626 Vault: Depositas 100 USDC en un vault y recibes 100 "shares". El vault invierte el USDC. Un mes después, tus 100 shares valen 103 USDC. El tipo de cambio share/asset sube automáticamente con las ganancias del protocolo (como Aave o Yearn Finance).
📚 Refs: EIP-1155 (Witek Radomski, 2018) · EIP-4626 (Joey Santoro, 2021) ” "Tokenized Vault Standard"
ERC-1155
ERC-4626 Vault

ERC-1155 ” Multi-Token Inventory

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";

contract GameItems is ERC1155 {
  // IDs de tokens ” pueden ser fungibles o no
  uint256 public constant GOLD  = 0; // Fungible
  uint256 public constant SWORD = 1; // Semi-fungible
  uint256 public constant SHIELD = 2; // Semi-fungible
  uint256 public constant TROPHY = 3; // Único (1 supply)

  constructor() ERC1155("https://api.game.io/{id}.json") {
    // Mint inicial ” un contrato, múltiples tipos
    _mint(msg.sender, GOLD,  10_000, "");
    _mint(msg.sender, SWORD, 50, "");
    _mint(msg.sender, SHIELD, 30, "");
    _mint(msg.sender, TROPHY, 1, ""); // Único!
  }

  // Transferencia batch ” 1 tx para múltiples tokens
  // Gas: ~35% más barato que ERC-20 + ERC-721 separados
  function equipSet(address player) external {
    uint256[] memory ids  = new uint256[](3);
    uint256[] memory amounts = new uint256[](3);
    ids[0]=GOLD; amounts[0]=100;
    ids[1]=SWORD; amounts[1]=1;
    ids[2]=SHIELD; amounts[2]=1;
    safeBatchTransferFrom(
      msg.sender, player, ids, amounts, ""
    );
  }
}
¡ Gas savings de ERC-1155: Una safeBatchTransferFrom de 5 tokens cuesta ~70,000 gas. Hacerlo con 5 contratos ERC-20 separados: ~250,000 gas. Ahorro: 72%

Inventario Interactivo

10,000
🪙 GOLD (fungible)
50
”️ SWORD
30
🛡️ SHIELD
1
🏆 TROPHY (único)

ERC-4626 Tokenized Vault ” Simulador

pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/extensions/ERC4626.sol";

contract YieldVault is ERC4626 {
  uint256 public apy; // APY en basis points (1% = 100)

  constructor(IERC20 _asset, uint256 _apy)
    ERC4626(_asset)
    ERC20("Yield USDC", "yUSDC") {
    apy = _apy;
  }

  // Shares-to-assets aumenta con el tiempo (yield)
  function totalAssets() public view override
    returns (uint256) {
    // Los assets crecen con el tiempo + yield
    return IERC20(asset()).balanceOf(address(this))
      + accruedYield;
  }

  // Clave: previewRedeem calcula cuántos assets
  // recibirás por tus shares al retirar
  // previewRedeem(100 shares) = 103 USDC (con yield)
}
📐 Fórmula de shares:
Shares al depositar = assets × totalShares / totalAssets
Assets al retirar = shares × totalAssets / totalShares

Simulador de Vault

8%
6
1,000
Shares recibidas
1,000
USDC al retirar
$0
Yield ganado
1.000
Price per Share
🎮 Explora ERC-1155 para multi-token y ERC-4626 para yield vaults. Son los estándares que usan Yearn Finance, Aave y OpenSea.