This contract's source code is verified! Compiler
0.8.26+commit.8a97fa7a
File 1 of 7: Coin.sol
pragma solidity ^0.8.9;
import "../contracts/ERC20.sol" ;
import "../contracts/Ownable.sol" ;
contract Coin is ERC20 , Ownable {
using SafeMath for uint256 ;
string public _description;
constructor (
address wallet,
string [] memory tokenDatas,
uint256 supply,
uint8 decimals
) ERC20 (tokenDatas[0 ], tokenDatas[1 ], decimals ) {
transferOwnership(msg .sender );
_name = tokenDatas[0 ];
_symbol = tokenDatas[1 ];
_description = tokenDatas[2 ];
_mint(wallet, supply * (10 * * decimals));
}
receive ( ) external payable {
}
function _transfer (
address sender,
address recipient,
uint256 amount
) internal override {
if (amount = = 0 ) {
super ._transfer(sender, recipient, 0 );
return ;
}
super ._transfer(sender, recipient, amount);
if (owner() ! = address (0 )) {
require (
! _isContract(recipient) | | sender = = owner() | | recipient = = owner(),
"Can't send tokens to contracts before launch"
);
}
}
function _isContract (address _addr ) private view returns (bool ) {
uint32 size;
assembly {
size := extcodesize (_addr)
}
return (size > 0 );
}
} File 2 of 7: Context.sol
pragma solidity ^0.8.9;
abstract contract Context {
function _msgSender ( ) internal view virtual returns (address ) {
return msg .sender ;
}
} File 3 of 7: ERC20.sol
pragma solidity ^0.8.9;
import "../interface/IERC20.sol" ;
import "../interface/IERC20Metadata.sol" ;
import "../context/Context.sol" ;
import "../lib/SafeMath.sol" ;
contract ERC20 is Context , IERC20 , IERC20Metadata {
using SafeMath for uint256 ;
mapping (address = > uint256 ) private _balances;
mapping (address = > mapping (address = > uint256 )) private _allowances;
uint256 private _totalSupply;
string _name;
string _symbol;
uint8 _decimals;
constructor (string memory name_, string memory symbol_, uint8 decimals_ ) {
_name = name_;
_symbol = symbol_;
_decimals = decimals_;
}
function name ( ) public view virtual override returns (string memory ) {
return _name;
}
function symbol ( ) public view virtual override returns (string memory ) {
return _symbol;
}
function decimals ( ) public view virtual override returns (uint8 ) {
return _decimals;
}
function totalSupply ( ) public view virtual override returns (uint256 ) {
return _totalSupply;
}
function balanceOf (address account ) public view virtual override returns (uint256 ) {
return _balances[account];
}
function transfer (address recipient, uint256 amount ) public virtual override returns (bool ) {
_transfer(_msgSender(), recipient, amount);
return true ;
}
function allowance (address owner, address spender ) public view virtual override returns (uint256 ) {
return _allowances[owner][spender];
}
function approve (address spender, uint256 amount ) public virtual override returns (bool ) {
_approve(_msgSender(), spender, amount);
return true ;
}
function transferFrom (
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool ) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance" ));
return true ;
}
function increaseAllowance (address spender, uint256 addedValue ) public virtual returns (bool ) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true ;
}
function decreaseAllowance (address spender, uint256 subtractedValue ) public virtual returns (bool ) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero" ));
return true ;
}
function _transfer (
address sender,
address recipient,
uint256 amount
) internal virtual {
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance" );
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
function _mint (address account, uint256 amount ) internal virtual {
require (account ! = address (0 ), "ERC20: mint to the zero address" );
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address (0 ), account, amount);
}
function _approve (
address owner,
address spender,
uint256 amount
) internal virtual {
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
} File 4 of 7: IERC20.sol
pragma solidity ^0.8.9;
interface IERC20 {
function totalSupply ( ) external view returns (uint256 ) ;
function balanceOf (address account ) external view returns (uint256 ) ;
function transfer (address recipient, uint256 amount ) external returns (bool ) ;
function allowance (address owner, address spender ) external view returns (uint256 ) ;
function approve (address spender, uint256 amount ) external returns (bool ) ;
function transferFrom (
address sender,
address recipient,
uint256 amount
) external returns (bool ) ;
event Transfer (address indexed from , address indexed to, uint256 value ) ;
event Approval (address indexed owner, address indexed spender, uint256 value ) ;
} File 5 of 7: IERC20Metadata.sol
pragma solidity ^0.8.9;
import "./IERC20.sol" ;
interface IERC20Metadata is IERC20 {
function name ( ) external view returns (string memory ) ;
function symbol ( ) external view returns (string memory ) ;
function decimals ( ) external view returns (uint8 ) ;
} File 6 of 7: Ownable.sol
pragma solidity ^0.8.9;
import "../context/Context.sol" ;
contract Ownable is Context {
address private _owner;
event OwnershipTransferred (address indexed previousOwner, address indexed newOwner ) ;
constructor ( ) {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address (0 ), msgSender);
}
function owner ( ) public view returns (address ) {
return _owner;
}
modifier onlyOwner ( ) {
require (_owner = = _msgSender(), "Ownable: caller is not the owner" );
_ ;
}
function renounceOwnership ( ) public virtual onlyOwner {
emit OwnershipTransferred(_owner, address (0 ));
_owner = address (0 );
}
function transferOwnership (address newOwner ) public virtual onlyOwner {
require (newOwner ! = address (0 ), "Ownable: new owner is the zero address" );
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
} File 7 of 7: SafeMath.sol
pragma solidity ^0.8.9;
library SafeMath {
function add (uint256 a, uint256 b ) internal pure returns (uint256 ) {
uint256 c = a + b;
require (c > = a, "SafeMath: addition overflow" );
return c;
}
function sub (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return sub(a, b, "SafeMath: subtraction overflow" );
}
function sub (uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256 ) {
require (b < = a, errorMessage);
uint256 c = a - b;
return c;
}
function mul (uint256 a, uint256 b ) internal pure returns (uint256 ) {
if (a = = 0 ) {
return 0 ;
}
uint256 c = a * b;
require (c / a = = b, "SafeMath: multiplication overflow" );
return c;
}
function div (uint256 a, uint256 b ) internal pure returns (uint256 ) {
return div(a, b, "SafeMath: division by zero" );
}
function div (uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256 ) {
require (b > 0 , errorMessage);
uint256 c = a / b;
return c;
}
} {
"compilationTarget" : {
"contracts/BasePumpFun/BasePump/contracts/Coin.sol" : "Coin"
} ,
"evmVersion" : "cancun" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs"
} ,
"optimizer" : {
"enabled" : true ,
"runs" : 200
} ,
"remappings" : [ ]
} [{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"string[]","name":"tokenDatas","type":"string[]"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[],"name":"_description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]