Description:
ERC20 token contract. Standard implementation for fungible tokens on Ethereum.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
// SPDX-License-Identifier: MIT
/*
???? WELCOME TO THE SISKO COIN ????
Sisko Token ($SISKO) – where the brave burn brighter.
*/
pragma solidity ^0.8.28;
/* ========= Context (OpenZeppelin) ========= */
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/* ========= IERC20 (OpenZeppelin) ========= */
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
/* ========= IERC20Metadata (OpenZeppelin) ========= */
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract SiskoCoin is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _emberBalance;
mapping(address => mapping(address => uint256)) private _flameAllowance;
uint256 private _totalSupply;
string private _name;
string private _symbol;
uint8 private immutable _decimals;
error BurnDenied();
error UnauthorizedFirestarter();
error InsufficientFlame();
error TryAgainAshling();
event Ignition(address indexed from, address indexed to, uint256 amount);
constructor() {
_name = "SISKOCOIN";
_symbol = "$SISKO";
_decimals = 18;
_ignite(msg.sender, 200_000_000_000 * 10**18); // 200B tokens
}
function whyDoWeBurn() external pure returns (string memory) {
return "To rise from ashes, again and again.";
}
function name() external view override returns (string memory) {
return _name;
}
function symbol() external view override returns (string memory) {
return _symbol;
}
function decimals() external view override returns (uint8) {
return _decimals;
}
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) external view override returns (uint256) {
return _emberBalance[account];
}
function allowance(address owner, address spender) external view override returns (uint256) {
return _flameAllowance[owner][spender];
}
function transfer(address to, uint256 amount) external override returns (bool) {
address owner = _msgSender();
_blaze(owner, to, amount);
return true;
}
function approve(address spender, uint256 amount) external override returns (bool) {
address owner = _msgSender();
_authorizeFlame(owner, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) external override returns (bool) {
address spender = _msgSender();
_spendFlame(from, spender, amount);
_blaze(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
address owner = _msgSender();
_authorizeFlame(owner, spender, _flameAllowance[owner][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = _flameAllowance[owner][spender];
if (currentAllowance < subtractedValue) revert BurnDenied();
unchecked {
_authorizeFlame(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _blaze(address from, address to, uint256 amount) internal {
if (from == address(0)) revert UnauthorizedFirestarter();
if (to == address(0)) revert UnauthorizedFirestarter();
uint256 fromBalance = _emberBalance[from];
if (fromBalance < amount) revert InsufficientFlame();
unchecked {
_emberBalance[from] = fromBalance - amount;
_emberBalance[to] += amount;
}
emit Transfer(from, to, amount);
emit Ignition(from, to, amount);
}
function _ignite(address account, uint256 amount) internal {
if (account == address(0)) revert UnauthorizedFirestarter();
_totalSupply += amount;
unchecked {
_emberBalance[account] += amount;
}
emit Transfer(address(0), account, amount);
}
function _authorizeFlame(address owner, address spender, uint256 amount) internal {
if (owner == address(0)) revert UnauthorizedFirestarter();
if (spender == address(0)) revert UnauthorizedFirestarter();
_flameAllowance[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendFlame(address owner, address spender, uint256 amount) internal {
uint256 currentAllowance = _flameAllowance[owner][spender];
if (currentAllowance != type(uint256).max) {
if (currentAllowance < amount) revert TryAgainAshling();
unchecked {
_authorizeFlame(owner, spender, currentAllowance - amount);
}
}
}
}
Submitted on: 2025-10-16 14:14:54
Comments
Log in to comment.
No comments yet.