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": []
}
}}
Submitted on: 2025-09-21 09:07:01
Comments
Log in to comment.
No comments yet.