NCLUB_CoinDispenser

Description:

Smart contract deployed on Ethereum with Factory features.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "contract/NCLUB_CoinProvider.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
    function decimals() external view returns (uint8);
}

contract NCLUB_CoinDispenser {
    IERC20 public nonameClub;
    address public owner;
    uint256 public valorEnWei; // valor de 1 token NonameClub en wei

    modifier onlyOwner() {
        require(msg.sender == owner, "Solo el owner puede ejecutar esta funcion");
        _;
    }

    constructor() {
        // Usar la dirección de mainnet por defecto
        nonameClub = IERC20(0xeCdB571cC15fa3a20350fE0ca0A352E8F488E368);
        owner = msg.sender;
        valorEnWei = 4900000000000; // valor por defecto: 0.0000049 ETH por token
    }

    // Permite transferir tokens NonameClub desde este contrato a otra dirección, calculando la cantidad según el ETH recibido
    function transferFromSurtidor(address to) public payable returns (bool) {
        require(valorEnWei > 0, "El valor en wei no ha sido fijado");
        require(msg.value > 0, "Debes enviar ETH para recibir tokens");
        uint8 decimales = nonameClub.decimals();
        // valorEnWei es el valor de 1 token completo (por ejemplo, 1 * 10**decimales)
        // cantidad = (msg.value * 10**decimales) / valorEnWei
        uint256 cantidad = (msg.value * (10 ** decimales)) / valorEnWei;
        require(cantidad > 0, "El ETH enviado es insuficiente para recibir tokens");
        uint256 balance = nonameClub.balanceOf(address(this));
        require(cantidad <= balance, "No hay suficientes tokens disponibles en el contrato");
        return nonameClub.transfer(to, cantidad);
    }

    // Solo el owner puede fijar el valor en wei de las monedas NonameClub
    function setValorEnWei(uint256 _valorEnWei) public onlyOwner {
        valorEnWei = _valorEnWei;
    }

    // Solo el owner puede cambiar la dirección del contrato NonameClub
    function setNonameClubAddress(address _newNonameClubAddress) public onlyOwner {
        require(_newNonameClubAddress != address(0), "La direccion del contrato no puede ser la direccion cero");
        nonameClub = IERC20(_newNonameClubAddress);
    }

    // Permite al owner retirar el balance acumulado de ETH del contrato
    function retirarETH() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No hay ETH para retirar");
        (bool success, ) = payable(owner).call{value: balance}("");
        require(success, "Fallo al transferir ETH al owner");
    }

    // Permite al owner transferir todos los tokens NonameClub restantes del contrato a una dirección
    function transferAllTokens(address to) public onlyOwner {
        require(to != address(0), "La direccion de destino no puede ser la direccion cero");
        uint256 balance = nonameClub.balanceOf(address(this));
        require(balance > 0, "No hay tokens disponibles en el contrato");
        require(nonameClub.transfer(to, balance), "Fallo al transferir los tokens");
    }

    // Permite al owner dispensar una cantidad específica de tokens a una dirección
    function dispensarTokens(address to, uint256 cantidad) public onlyOwner {
        require(to != address(0), "La direccion de destino no puede ser la direccion cero");
        require(cantidad > 0, "La cantidad debe ser mayor que cero");
        uint256 balance = nonameClub.balanceOf(address(this));
        require(cantidad <= balance, "No hay suficientes tokens disponibles en el contrato");
        require(nonameClub.transfer(to, cantidad), "Fallo al transferir los tokens");
    }

    // Permite al owner transferir la propiedad del contrato a otra dirección
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "El nuevo owner no puede ser la direccion cero");
        require(newOwner != owner, "El nuevo owner debe ser diferente al actual");
        owner = newOwner;
    }
}
"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": false,
      "runs": 200
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "remappings": []
  }
}}

Tags:
Factory|addr:0xf6c5a7f69e40574dd30902488ad4d0d8c9baf764|verified:true|block:23409819|tx:0x374c5f75dd6e529639395e535d4255df5dc19b257fcf8f7d03440b0b0952c3fa|first_check:1758438421

Submitted on: 2025-09-21 09:07:01

Comments

Log in to comment.

No comments yet.