ETH Price: $2,793.16 (-11.35%)

Contract Diff Checker

Contract Name:
FILMCOIN

Contract Source Code:

File 1 of 1 : FILMCOIN

/**
 *Submitted for verification at Etherscan.io on 2022-03-09
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.12;


interface IERC20{
    function name() external view returns(string memory);

    function symbol() external view returns(string memory);

    function totalSupply() external view returns (uint );

    function decimals() external view returns(uint);

    function balanceOf(address account) external view returns(uint);

    function approve(address sender , uint value)external returns(bool);

    function allowance(address sender, address spender) external view returns (uint256);

    function transfer(address recepient , uint value) external returns(bool);

    function transferFrom(address sender,address recepient, uint value) external returns(bool);

    event Transfer(address indexed from , address indexed to , uint value);

    event Approval(address indexed sender , address indexed  spender , uint value);

}


contract Context{
  constructor () {}

  function _msgsender() internal view returns (address) {
    return msg.sender;
  }
}


library safeMath{
    function add(uint a , uint b) internal pure returns(uint){
        uint c = a+ b;
        require(c >= a, "amount exists");
        return c;
    }
    function sub(uint a , uint b , string memory errorMessage) internal pure returns(uint){
        uint c = a - b;
        require( c <= a , errorMessage );
        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, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context{
    address private _Owner;

    event transferOwnerShip(address indexed _previousOwner , address indexed _newOwner);

    constructor(){
        _Owner = _msgsender();
        emit transferOwnerShip(address(0),_Owner);
    }

    function checkOwner() public view returns(address){
        return _Owner;
    }

    modifier OnlyOwner(){
        require(_Owner == _msgsender(),"Only Owner can modify the changes");
        _;
    }

    function transferOwnership(address _newOwner) public OnlyOwner{
        _transferOwnership(_newOwner);
    }

    function _transferOwnership(address _newOwner)internal {
        require(_newOwner != address(0),"Ownership cant be transferred to 0 address");
        emit transferOwnerShip(_Owner,_newOwner);
        _Owner = _newOwner;
    }
}


contract FILMCOIN is Context, IERC20, Ownable {
    using safeMath for uint;

    mapping(address => uint) _balances;
    mapping(address => mapping(address => uint)) _allowances;


    string private _name;
    string private _symbol;
    uint private _decimal;
    uint private _totalSupply;

    event MultiTokenTransfer(address indexed from , address[] indexed Recepients , uint[] indexed Amounts);

    constructor(address preSaleWallet){
       _name = "FILM COIN";
       _symbol = "FLIKS";
       _decimal = 18;
       _totalSupply = 130000000*10**18;
       _balances[msg.sender] = _totalSupply.mul(90 * 1e18).div(130 * 1e18,"");
       _balances[preSaleWallet] = _totalSupply.mul(40 * 1e18).div(130 * 1e18,"");
       emit Transfer(address(0), msg.sender, balanceOf(msg.sender));
       emit Transfer(address(0), preSaleWallet, balanceOf(preSaleWallet));
    }

    function name() external override view returns(string memory){
        return _name;
    }
    function symbol() external view override returns(string memory){
        return _symbol;
    }
    function decimals() external view override  returns(uint){
        return _decimal;
    }
    function balanceOf(address owner) public view override  returns(uint){
        return _balances[owner];
    }
    function totalSupply() external view override  returns(uint){
        return _totalSupply;
    }
    function approve(address spender , uint value) external override returns(bool){
        _approve(_msgsender(), spender , value);
        return true;
    }
    function allowance(address sender , address spender) external view override returns(uint){
          return _allowances[sender][spender];
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
      _approve(_msgsender(), spender, _allowances[_msgsender()][spender].add(addedValue));
      return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
      _approve(_msgsender(), spender, _allowances[_msgsender()][spender].sub(subtractedValue, "FILMCOIN : decreased allowance below value zero"));
      return true;
    }

    function transfer(address recepient , uint value) external override returns(bool){
        _transfer(msg.sender, recepient,value);
         return true;
    }

     function transferFrom(address sender ,address recepient, uint amount) external override returns(bool){
        _approve(sender, _msgsender(), _allowances[sender][_msgsender()].sub(amount,"Exceeds allownace"));
        _transfer(sender,recepient,amount);
        return true;
    }

    function mint(uint256 amount) public OnlyOwner returns (bool) {
        _mint(msg.sender, amount);
        return true;
    }

    function burn(uint256 amount) public OnlyOwner returns (bool) {
        _burn(msg.sender, amount);
        return true;
    }

    function _transfer(address sender,address recepient, uint value) internal  returns(bool success){
        require(_balances[sender] >= value,"Balance not enough");
        _balances[sender] = _balances[sender].sub(value,"Exceeds balance");
        _balances[recepient] = _balances[recepient].add(value);
        emit Transfer(_msgsender(), recepient , value);
        return true;
    }

    function _approve(address sender,address spender, uint amount) internal returns(bool success){
        require(sender != address(0),"Should not be 0 address");
        require(spender != address(0),"Should not be zero address");
        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
        return true;
    }

    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "FILMCOIN : mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    
    function _burn(address account, uint256 amount) internal {
       require(account != address(0), " FILMCOIN : burn from the zero address");
       _balances[account] = _balances[account].sub(amount, " FILMCOIN : burn amount exceeds balance");
       _totalSupply = _totalSupply.sub(amount,"cant burn");
       emit Transfer(account, address(0), amount);
    }


    function multiTokenTransfer( address[] memory recepients, uint[] memory amounts) public OnlyOwner{
        require(recepients.length == amounts.length,"Recepients and Amounts are mismatched");
        require(recepients.length != 0 ,"Recepients cannot be empty");
            for(uint i = 0 ; i < recepients.length; i++){
                require(amounts[i] > 0 ,"Minimum Amount must be greater than 0");
                require(recepients[i] != address(0) , "Recepients must not be zero address");
                _transfer(msg.sender,recepients[i] , amounts[i].mul(1e18));
            }      
            emit MultiTokenTransfer(msg.sender , recepients , amounts);
    } 
}

Please enter a contract address above to load the contract details and source code.

Context size (optional):