Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
0x60806040 | 13418455 | 999 days ago | IN | Create: MagicMintFix | 0 ETH | 0.03675978 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MagicMintFix
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import '@solidstate/contracts/token/ERC20/base/ERC20BaseInternal.sol'; import '@solidstate/contracts/utils/ReentrancyGuard.sol'; import './MagicWhitelistStorage.sol'; contract MagicMintFix is ERC20BaseInternal, ReentrancyGuard { event MintSignal(address minter, address account, uint256 amount); function mint(address account, uint256 amount) external nonReentrant { require( MagicWhitelistStorage.layout().whitelist[msg.sender], 'Magic: sender must be whitelisted' ); emit MintSignal(msg.sender, account, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {IERC20Internal} from '../IERC20Internal.sol'; import {ERC20BaseStorage} from './ERC20BaseStorage.sol'; /** * @title Base ERC20 implementation, excluding optional extensions */ abstract contract ERC20BaseInternal is IERC20Internal { /** * @notice query the total minted token supply * @return token supply */ function _totalSupply () virtual internal view returns (uint) { return ERC20BaseStorage.layout().totalSupply; } /** * @notice query the token balance of given account * @param account address to query * @return token balance */ function _balanceOf ( address account ) virtual internal view returns (uint) { return ERC20BaseStorage.layout().balances[account]; } /** * @notice enable spender to spend tokens on behalf of holder * @param holder address on whose behalf tokens may be spent * @param spender recipient of allowance * @param amount quantity of tokens approved for spending */ function _approve ( address holder, address spender, uint amount ) virtual internal { require(holder != address(0), 'ERC20: approve from the zero address'); require(spender != address(0), 'ERC20: approve to the zero address'); ERC20BaseStorage.layout().allowances[holder][spender] = amount; emit Approval(holder, spender, amount); } /** * @notice mint tokens for given account * @param account recipient of minted tokens * @param amount quantity of tokens minted */ function _mint ( address account, uint amount ) virtual internal { require(account != address(0), 'ERC20: mint to the zero address'); _beforeTokenTransfer(address(0), account, amount); ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout(); l.totalSupply += amount; l.balances[account] += amount; emit Transfer(address(0), account, amount); } /** * @notice burn tokens held by given account * @param account holder of burned tokens * @param amount quantity of tokens burned */ function _burn ( address account, uint amount ) virtual internal { require(account != address(0), 'ERC20: burn from the zero address'); _beforeTokenTransfer(account, address(0), amount); ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout(); uint256 balance = l.balances[account]; require(balance >= amount, "ERC20: burn amount exceeds balance"); unchecked { l.balances[account] = balance - amount; } l.totalSupply -= amount; emit Transfer(account, address(0), amount); } /** * @notice transfer tokens from holder to recipient * @param holder owner of tokens to be transferred * @param recipient beneficiary of transfer * @param amount quantity of tokens transferred */ function _transfer ( address holder, address recipient, uint amount ) virtual internal { require(holder != address(0), 'ERC20: transfer from the zero address'); require(recipient != address(0), 'ERC20: transfer to the zero address'); _beforeTokenTransfer(holder, recipient, amount); ERC20BaseStorage.Layout storage l = ERC20BaseStorage.layout(); uint256 holderBalance = l.balances[holder]; require(holderBalance >= amount, 'ERC20: transfer amount exceeds balance'); unchecked { l.balances[holder] = holderBalance - amount; } l.balances[recipient] += amount; emit Transfer(holder, recipient, amount); } /** * @notice ERC20 hook, called before all transfers including mint and burn * @dev function should be overridden and new implementation must call super * @param from sender of tokens * @param to receiver of tokens * @param amount quantity of tokens transferred */ function _beforeTokenTransfer ( address from, address to, uint amount ) virtual internal {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {ReentrancyGuardStorage} from './ReentrancyGuardStorage.sol'; /** * @title Utility contract for preventing reentrancy attacks */ abstract contract ReentrancyGuard { modifier nonReentrant () { ReentrancyGuardStorage.Layout storage l = ReentrancyGuardStorage.layout(); require(l.status != 2, 'ReentrancyGuard: reentrant call'); l.status = 2; _; l.status = 1; } }
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; library MagicWhitelistStorage { struct Layout { mapping(address => bool) whitelist; } bytes32 internal constant STORAGE_SLOT = keccak256('treasure.contracts.storage.MagicWhitelist'); function layout() internal pure returns (Layout storage l) { bytes32 slot = STORAGE_SLOT; assembly { l.slot := slot } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Partial ERC20 interface needed by internal functions */ interface IERC20Internal { event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library ERC20BaseStorage { struct Layout { mapping (address => uint) balances; mapping (address => mapping (address => uint)) allowances; uint totalSupply; } bytes32 internal constant STORAGE_SLOT = keccak256( 'solidstate.contracts.storage.ERC20Base' ); function layout () internal pure returns (Layout storage l) { bytes32 slot = STORAGE_SLOT; assembly { l.slot := slot } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library ReentrancyGuardStorage { struct Layout { uint status; } bytes32 internal constant STORAGE_SLOT = keccak256( 'solidstate.contracts.storage.ReentrancyGuard' ); function layout () internal pure returns (Layout storage l) { bytes32 slot = STORAGE_SLOT; assembly { l.slot := slot } } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MintSignal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50610206806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806340c10f1914610030575b600080fd5b61004361003e36600461019a565b610045565b005b7f09acf4e54214992e70883cf7dcd6957ff2c71cd9e14df4bec4383bc0d11607dc8054600214156100bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600281553360009081527f7041ce7c5c869a9d35c22f2295d95baf4e010cb9efcb1a8027a9b11d48a1d53a602052604090205460ff166101495760405162461bcd60e51b815260206004820152602160248201527f4d616769633a2073656e646572206d7573742062652077686974656c697374656044820152601960fa1b60648201526084016100b4565b604080513381526001600160a01b03851660208201529081018390527f9cbd760b3e90699727269ad99c99c427a1664d905f74c52455969ddb400649ac9060600160405180910390a1600190555050565b600080604083850312156101ac578182fd5b82356001600160a01b03811681146101c2578283fd5b94602093909301359350505056fea2646970667358221220ee0bc94df5018394234efdf7cbb9b3dc49bc1fdf17008930930a8958cbc4db5264736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c806340c10f1914610030575b600080fd5b61004361003e36600461019a565b610045565b005b7f09acf4e54214992e70883cf7dcd6957ff2c71cd9e14df4bec4383bc0d11607dc8054600214156100bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600281553360009081527f7041ce7c5c869a9d35c22f2295d95baf4e010cb9efcb1a8027a9b11d48a1d53a602052604090205460ff166101495760405162461bcd60e51b815260206004820152602160248201527f4d616769633a2073656e646572206d7573742062652077686974656c697374656044820152601960fa1b60648201526084016100b4565b604080513381526001600160a01b03851660208201529081018390527f9cbd760b3e90699727269ad99c99c427a1664d905f74c52455969ddb400649ac9060600160405180910390a1600190555050565b600080604083850312156101ac578182fd5b82356001600160a01b03811681146101c2578283fd5b94602093909301359350505056fea2646970667358221220ee0bc94df5018394234efdf7cbb9b3dc49bc1fdf17008930930a8958cbc4db5264736f6c63430008040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.