Overview
Max Total Supply
16,768,245,176.791553933725497463 OPN
Holders
1,564 ( 0.064%)
Market
Price
$0.00 @ 0.000000 ETH (-7.10%)
Onchain Market Cap
$13,142,875.32
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Balance
143,642.533382351475375541 OPNValue
$112.59 ( ~0.0326325746306168 Eth) [0.0009%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OPNToken
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import {ERC20} from "erc20/ERC20.sol"; import {IOPNToken} from "./interfaces/IOPNToken.sol"; /// @title OPNToken /// @author The OPN Ecosystem Team contract OPNToken is IOPNToken, ERC20 { string public constant NAME = "Open Ecosystem Token"; string public constant SYMBOL = "OPN"; uint8 public constant DECIMALS = 18; /// @inheritdoc IOPNToken address public override mintManagerAddress; /// @inheritdoc IOPNToken address public override daoControllerAddress; /// @inheritdoc IOPNToken bool public override migrationIssuanceDisabledPermanently = false; constructor(address _initialController) ERC20(NAME, SYMBOL, DECIMALS) { daoControllerAddress = _initialController; // mint 2 tokens for bridge registrations and testing post migration _mint(msg.sender, 2 * 1e18); } // Modifiers modifier onlyMintManager() { require( msg.sender == mintManagerAddress, "OPNToken: UNAUTHORIZED MINT MANAGER" ); _; } modifier onlyDAOController() { require( msg.sender == daoControllerAddress, "OPNToken: UNAUTHORIZED DAO CONTROLLER" ); _; } // Operational functions for migration /// @inheritdoc IOPNToken function issueTokensMigration( address _to, uint256 _amount ) external override onlyMintManager { require( !migrationIssuanceDisabledPermanently, "OPNToken: MIGRATION MINTING DISABLED PERMANENTLY" ); _mint(_to, _amount); emit MigrationMint(_to, _amount); } /// @inheritdoc IOPNToken function mintTokenPolygonInventory( address _to, uint256 _amount ) external override onlyDAOController { require( !migrationIssuanceDisabledPermanently, "OPNToken: MIGRATION MINTING DISABLED PERMANENTLY" ); _mint(_to, _amount); emit MigrationInventoryMint(_to, _amount); } // Operational functions for DAO post operations /// @inheritdoc IOPNToken function mintTokensByDAO( address _to, uint256 _amount ) external override onlyDAOController { _mint(_to, _amount); emit DaoMint(_to, _amount); } // Operational functions for token holders /// @inheritdoc IOPNToken function burn(uint256 _amount) external override { _burn(msg.sender, _amount); emit TokensBurned(msg.sender, _amount); } // Configuration functions /// @inheritdoc IOPNToken function setDAOControllerAddress( address _newDaoController ) external override onlyDAOController { daoControllerAddress = _newDaoController; emit DaoControllerSet(_newDaoController); } /// @inheritdoc IOPNToken function finalizeMigration() external override onlyDAOController { migrationIssuanceDisabledPermanently = true; delete mintManagerAddress; emit MigrationConfigFinalized(); } /// @inheritdoc IOPNToken function setMintManager( address _newMigrationManager ) external override onlyDAOController { require( !migrationIssuanceDisabledPermanently, "OPNToken: MIGRATION MINTING DISABLED PERMANENTLY" ); mintManagerAddress = _newMigrationManager; emit MigrationManagerSet(_newMigrationManager); } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.8.7; import { IERC20 } from "./interfaces/IERC20.sol"; /* ███████╗██████╗ ██████╗ ██████╗ ██████╗ ██╔════╝██╔══██╗██╔════╝ ╚════██╗██╔═████╗ █████╗ ██████╔╝██║ █████╔╝██║██╔██║ ██╔══╝ ██╔══██╗██║ ██╔═══╝ ████╔╝██║ ███████╗██║ ██║╚██████╗ ███████╗╚██████╔╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚══════╝ ╚═════╝ */ /** * @title Modern ERC-20 implementation. * @dev Acknowledgements to Solmate, OpenZeppelin, and DSS for inspiring this code. */ contract ERC20 is IERC20 { /**************/ /*** ERC-20 ***/ /**************/ string public override name; string public override symbol; uint8 public immutable override decimals; uint256 public override totalSupply; mapping(address => uint256) public override balanceOf; mapping(address => mapping(address => uint256)) public override allowance; /****************/ /*** ERC-2612 ***/ /****************/ // PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 private constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; uint256 internal immutable initialChainId; bytes32 internal immutable initialDomainSeparator; mapping(address => uint256) public override nonces; /** * @param name_ The name of the token. * @param symbol_ The symbol of the token. * @param decimals_ The decimal precision used by the token. */ constructor(string memory name_, string memory symbol_, uint8 decimals_) { name = name_; symbol = symbol_; decimals = decimals_; initialChainId = block.chainid; initialDomainSeparator = _computeDomainSeparator(); } /**************************/ /*** External Functions ***/ /**************************/ function approve(address spender_, uint256 amount_) external override returns (bool success_) { _approve(msg.sender, spender_, amount_); return true; } function decreaseAllowance(address spender_, uint256 subtractedAmount_) external override returns (bool success_) { _decreaseAllowance(msg.sender, spender_, subtractedAmount_); return true; } function increaseAllowance(address spender_, uint256 addedAmount_) external override returns (bool success_) { _approve(msg.sender, spender_, allowance[msg.sender][spender_] + addedAmount_); return true; } function permit(address owner_, address spender_, uint256 amount_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_) external override { require(deadline_ >= block.timestamp, "ERC20:P:EXPIRED"); // Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. require( uint256(s_) <= uint256(0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) && (v_ == 27 || v_ == 28), "ERC20:P:MALLEABLE" ); // Nonce realistically cannot overflow. unchecked { bytes32 digest = keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256(abi.encode(PERMIT_TYPEHASH, owner_, spender_, amount_, nonces[owner_]++, deadline_)) ) ); address recoveredAddress = ecrecover(digest, v_, r_, s_); require(recoveredAddress == owner_ && owner_ != address(0), "ERC20:P:INVALID_SIGNATURE"); } _approve(owner_, spender_, amount_); } function transfer(address recipient_, uint256 amount_) external override returns (bool success_) { _transfer(msg.sender, recipient_, amount_); return true; } function transferFrom(address owner_, address recipient_, uint256 amount_) external override returns (bool success_) { _decreaseAllowance(owner_, msg.sender, amount_); _transfer(owner_, recipient_, amount_); return true; } /**********************/ /*** View Functions ***/ /**********************/ function DOMAIN_SEPARATOR() public view virtual override returns (bytes32 domainSeparator_) { return block.chainid == initialChainId ? initialDomainSeparator : _computeDomainSeparator(); } /**************************/ /*** Internal Functions ***/ /**************************/ function _approve(address owner_, address spender_, uint256 amount_) internal { emit Approval(owner_, spender_, allowance[owner_][spender_] = amount_); } function _burn(address owner_, uint256 amount_) internal virtual { balanceOf[owner_] -= amount_; // Cannot underflow because a user's balance will never be larger than the total supply. unchecked { totalSupply -= amount_; } emit Transfer(owner_, address(0), amount_); } function _computeDomainSeparator() internal view virtual returns (bytes32 domainSeparator_) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256(bytes("1")), block.chainid, address(this) ) ); } function _decreaseAllowance(address owner_, address spender_, uint256 subtractedAmount_) internal { uint256 spenderAllowance = allowance[owner_][spender_]; // Cache to memory. if (spenderAllowance != type(uint256).max) { _approve(owner_, spender_, spenderAllowance - subtractedAmount_); } } function _mint(address recipient_, uint256 amount_) internal virtual { totalSupply += amount_; // Cannot overflow because totalSupply would first overflow in the statement above. unchecked { balanceOf[recipient_] += amount_; } emit Transfer(address(0), recipient_, amount_); } function _transfer(address owner_, address recipient_, uint256 amount_) internal virtual { balanceOf[owner_] -= amount_; // Cannot overflow because minting prevents overflow of totalSupply, and sum of user balances == totalSupply. unchecked { balanceOf[recipient_] += amount_; } emit Transfer(owner_, recipient_, amount_); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; import {IERC20} from "erc20/interfaces/IERC20.sol"; interface IOPNToken is IERC20 { /// @notice Mint function only callable by the DAO /// @dev this function will be only callable by a DAO governance contract that can only execute functions like these after a majority vote (with quorum) has been reached /// @param _to Address to which tokens will be minted. /// @param _amount Amount of tokens to mint function mintTokensByDAO(address _to, uint256 _amount) external; /// @notice Issues tokens during the migration process. /// @dev This function will be only callable by a migration manager contract(burning GET and minting OPN) that will be responsible for minting tokens during the migration process. After the migration the DAO can revoke the minting rights of the migration manager. /// @param _to Address to which tokens will be minted. /// @param _amount Amount of tokens to mint. function issueTokensMigration(address _to, uint256 _amount) external; /// @notice Mints tokens for Polygon inventory. /// @dev As to allow GET to be migrated on Polygon this function will be used to mint a certain amount of tokens to the Polygon inventory. This is not inflationary as the tokens are already minted on Ethereum and are just being moved to Polygon. /// @param _to Address to which tokens will be minted. /// @param _amount Amount of tokens to mint. function mintTokenPolygonInventory(address _to, uint256 _amount) external; /// @notice Allows token holders to burn their tokens. /// @param _amount Amount of tokens to burn. function burn(uint256 _amount) external; /// @notice Finalizes the migration process /// @dev this function disables the migration minting and revokes the minting rights of the migration manager. This function can only be called by the DAO. function finalizeMigration() external; /// @notice Sets a new DAO controller address /// @param _newDaoController The address of the new DAO controller. function setDAOControllerAddress(address _newDaoController) external; /// @notice Sets a new mint manager address /// @param _newMigrationManager The address of the new mint manager. function setMintManager(address _newMigrationManager) external; // View functions /// @notice Returns the address of the mint manager. /// @return address of the mint manager. function mintManagerAddress() external view returns (address); /// @notice Returns the address of the DAO controller. /// @return address of the DAO controller. function daoControllerAddress() external view returns (address); /// @notice Returns whether the migration issuance is disabled permanently function migrationIssuanceDisabledPermanently() external view returns (bool); // Events event TokensBurned(address indexed from, uint256 amount); event MigrationInventoryMint(address indexed to, uint256 amount); event MigrationManagerSet(address indexed newMigrationManager); event MigrationMint(address indexed to, uint256 amount); event DaoMint(address indexed to, uint256 amount); event DaoControllerSet(address _newDaoController); event MigrationConfigFinalized(); }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.8.7; /// @title Interface of the ERC20 standard as defined in the EIP, including EIP-2612 permit functionality. interface IERC20 { /**************/ /*** Events ***/ /**************/ /** * @dev Emitted when one account has set the allowance of another account over their tokens. * @param owner_ Account that tokens are approved from. * @param spender_ Account that tokens are approved for. * @param amount_ Amount of tokens that have been approved. */ event Approval(address indexed owner_, address indexed spender_, uint256 amount_); /** * @dev Emitted when tokens have moved from one account to another. * @param owner_ Account that tokens have moved from. * @param recipient_ Account that tokens have moved to. * @param amount_ Amount of tokens that have been transferred. */ event Transfer(address indexed owner_, address indexed recipient_, uint256 amount_); /**************************/ /*** External Functions ***/ /**************************/ /** * @dev Function that allows one account to set the allowance of another account over their tokens. * Emits an {Approval} event. * @param spender_ Account that tokens are approved for. * @param amount_ Amount of tokens that have been approved. * @return success_ Boolean indicating whether the operation succeeded. */ function approve(address spender_, uint256 amount_) external returns (bool success_); /** * @dev Function that allows one account to decrease the allowance of another account over their tokens. * Emits an {Approval} event. * @param spender_ Account that tokens are approved for. * @param subtractedAmount_ Amount to decrease approval by. * @return success_ Boolean indicating whether the operation succeeded. */ function decreaseAllowance(address spender_, uint256 subtractedAmount_) external returns (bool success_); /** * @dev Function that allows one account to increase the allowance of another account over their tokens. * Emits an {Approval} event. * @param spender_ Account that tokens are approved for. * @param addedAmount_ Amount to increase approval by. * @return success_ Boolean indicating whether the operation succeeded. */ function increaseAllowance(address spender_, uint256 addedAmount_) external returns (bool success_); /** * @dev Approve by signature. * @param owner_ Owner address that signed the permit. * @param spender_ Spender of the permit. * @param amount_ Permit approval spend limit. * @param deadline_ Deadline after which the permit is invalid. * @param v_ ECDSA signature v component. * @param r_ ECDSA signature r component. * @param s_ ECDSA signature s component. */ function permit(address owner_, address spender_, uint amount_, uint deadline_, uint8 v_, bytes32 r_, bytes32 s_) external; /** * @dev Moves an amount of tokens from `msg.sender` to a specified account. * Emits a {Transfer} event. * @param recipient_ Account that receives tokens. * @param amount_ Amount of tokens that are transferred. * @return success_ Boolean indicating whether the operation succeeded. */ function transfer(address recipient_, uint256 amount_) external returns (bool success_); /** * @dev Moves a pre-approved amount of tokens from a sender to a specified account. * Emits a {Transfer} event. * Emits an {Approval} event. * @param owner_ Account that tokens are moving from. * @param recipient_ Account that receives tokens. * @param amount_ Amount of tokens that are transferred. * @return success_ Boolean indicating whether the operation succeeded. */ function transferFrom(address owner_, address recipient_, uint256 amount_) external returns (bool success_); /**********************/ /*** View Functions ***/ /**********************/ /** * @dev Returns the allowance that one account has given another over their tokens. * @param owner_ Account that tokens are approved from. * @param spender_ Account that tokens are approved for. * @return allowance_ Allowance that one account has given another over their tokens. */ function allowance(address owner_, address spender_) external view returns (uint256 allowance_); /** * @dev Returns the amount of tokens owned by a given account. * @param account_ Account that owns the tokens. * @return balance_ Amount of tokens owned by a given account. */ function balanceOf(address account_) external view returns (uint256 balance_); /** * @dev Returns the decimal precision used by the token. * @return decimals_ The decimal precision used by the token. */ function decimals() external view returns (uint8 decimals_); /** * @dev Returns the signature domain separator. * @return domainSeparator_ The signature domain separator. */ function DOMAIN_SEPARATOR() external view returns (bytes32 domainSeparator_); /** * @dev Returns the name of the token. * @return name_ The name of the token. */ function name() external view returns (string memory name_); /** * @dev Returns the nonce for the given owner. * @param owner_ The address of the owner account. * @return nonce_ The nonce for the given owner. */ function nonces(address owner_) external view returns (uint256 nonce_); /** * @dev Returns the symbol of the token. * @return symbol_ The symbol of the token. */ function symbol() external view returns (string memory symbol_); /** * @dev Returns the total amount of tokens in existence. * @return totalSupply_ The total amount of tokens in existence. */ function totalSupply() external view returns (uint256 totalSupply_); }
{ "remappings": [ "@solmate/src/=lib/solmate/src/", "forge-std/=lib/forge-std/src/", "contract-test-utils/=lib/erc20-helper/lib/contract-test-utils/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc20-helper/=lib/erc20-helper/src/", "erc20/=lib/erc20/contracts/", "revenue-distribution-token/=lib/revenue-distribution-token/contracts/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_initialController","type":"address"}],"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":"amount_","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newDaoController","type":"address"}],"name":"DaoControllerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DaoMint","type":"event"},{"anonymous":false,"inputs":[],"name":"MigrationConfigFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MigrationInventoryMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMigrationManager","type":"address"}],"name":"MigrationManagerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MigrationMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner_","type":"address"},{"indexed":true,"internalType":"address","name":"recipient_","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"domainSeparator_","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SYMBOL","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"daoControllerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"subtractedAmount_","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"addedAmount_","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"issueTokensMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationIssuanceDisabledPermanently","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintManagerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTokenPolygonInventory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTokensByDAO","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint256","name":"deadline_","type":"uint256"},{"internalType":"uint8","name":"v_","type":"uint8"},{"internalType":"bytes32","name":"r_","type":"bytes32"},{"internalType":"bytes32","name":"s_","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newDaoController","type":"address"}],"name":"setDAOControllerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newMigrationManager","type":"address"}],"name":"setMintManager","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":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"recipient_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040526007805460ff60a01b191690553480156200001e57600080fd5b50604051620016c4380380620016c48339810160408190526200004191620002f4565b604080518082018252601481527f4f70656e2045636f73797374656d20546f6b656e00000000000000000000000060208083019182528351808501909452600384526227a82760e91b908401528151919291601291620000a591600091906200024e565b508151620000bb9060019060208501906200024e565b507fff0000000000000000000000000000000000000000000000000000000000000060f882901b166080524660a052620000f462000130565b60c0525050600780546001600160a01b0319166001600160a01b038416179055506200012933671bc16d674ec80000620001e1565b506200042e565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600060405162000164919062000326565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060026000828254620001f59190620003ca565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8280546200025c90620003f1565b90600052602060002090601f016020900481019282620002805760008555620002cb565b82601f106200029b57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002cb578251825591602001919060010190620002ae565b50620002d9929150620002dd565b5090565b5b80821115620002d95760008155600101620002de565b6000602082840312156200030757600080fd5b81516001600160a01b03811681146200031f57600080fd5b9392505050565b600080835481600182811c9150808316806200034357607f831692505b60208084108214156200036457634e487b7160e01b86526022600452602486fd5b8180156200037b57600181146200038d57620003bc565b60ff19861689528489019650620003bc565b60008a81526020902060005b86811015620003b45781548b82015290850190830162000399565b505084890196505b509498975050505050505050565b60008219821115620003ec57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200040657607f821691505b602082108114156200042857634e487b7160e01b600052602260045260246000fd5b50919050565b60805160f81c60a05160c0516112636200046160003960006106c6015260006106910152600061027401526112636000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806364e9e043116100f9578063a9059cbb11610097578063d505accf11610071578063d505accf146103d1578063dd62ed3e146103e4578063f76f8d781461040f578063fc339dcc1461043157600080fd5b8063a9059cbb146103a3578063b78b6087146103b6578063cfdfb129146103be57600080fd5b80638830eac0116100d35780638830eac01461034257806395d89b4114610355578063a3f4df7e1461035d578063a457c2d71461039057600080fd5b806364e9e043146102ef57806370a08231146103025780637ecebe001461032257600080fd5b806329a4f431116101665780633644e515116101405780633644e51514610296578063395093511461029e5780633c9f849f146102b157806342966c68146102dc57600080fd5b806329a4f431146102425780632e0f262514610255578063313ce5671461026f57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101ef578063221afcd51461020657806323b872dd1461021b578063293570ea1461022e575b600080fd5b6101b6610444565b6040516101c391906110c3565b60405180910390f35b6101df6101da366004610fe4565b6104d2565b60405190151581526020016101c3565b6101f860025481565b6040519081526020016101c3565b610219610214366004610fe4565b6104e8565b005b6101df610229366004610f35565b610596565b6007546101df90600160a01b900460ff1681565b610219610250366004610fe4565b6105b8565b61025d601281565b60405160ff90911681526020016101c3565b61025d7f000000000000000000000000000000000000000000000000000000000000000081565b6101f861068d565b6101df6102ac366004610fe4565b6106e8565b6007546102c4906001600160a01b031681565b6040516001600160a01b0390911681526020016101c3565b6102196102ea36600461100e565b610724565b6102196102fd366004610ee0565b610766565b6101f8610310366004610ee0565b60036020526000908152604090205481565b6101f8610330366004610ee0565b60056020526000908152604090205481565b610219610350366004610ee0565b6107e4565b6101b6610882565b6101b66040518060400160405280601481526020017327b832b71022b1b7b9bcb9ba32b6902a37b5b2b760611b81525081565b6101df61039e366004610fe4565b61088f565b6101df6103b1366004610fe4565b61089c565b6102196108a9565b6006546102c4906001600160a01b031681565b6102196103df366004610f71565b610921565b6101f86103f2366004610f02565b600460209081526000928352604080842090915290825290205481565b6101b66040518060400160405280600381526020016227a82760e91b81525081565b61021961043f366004610fe4565b610b9d565b60008054610451906111dc565b80601f016020809104026020016040519081016040528092919081815260200182805461047d906111dc565b80156104ca5780601f1061049f576101008083540402835291602001916104ca565b820191906000526020600020905b8154815290600101906020018083116104ad57829003601f168201915b505050505081565b60006104df338484610c0c565b50600192915050565b6007546001600160a01b0316331461051b5760405162461bcd60e51b815260040161051290611168565b60405180910390fd5b600754600160a01b900460ff16156105455760405162461bcd60e51b815260040161051290611118565b61054f8282610c6e565b816001600160a01b03167f78aefcb901d4baf8afce38f52ff95ead7f6f157b2938c129d66f374da74d2c478260405161058a91815260200190565b60405180910390a25050565b60006105a3843384610cda565b6105ae848484610d1e565b5060019392505050565b6006546001600160a01b0316331461061e5760405162461bcd60e51b815260206004820152602360248201527f4f504e546f6b656e3a20554e415554484f52495a4544204d494e54204d414e4160448201526223a2a960e91b6064820152608401610512565b600754600160a01b900460ff16156106485760405162461bcd60e51b815260040161051290611118565b6106528282610c6e565b816001600160a01b03167f577779026de96300989720df26238d2afd0f81233dc790abc107fae45dad0bb98260405161058a91815260200190565b60007f000000000000000000000000000000000000000000000000000000000000000046146106c3576106be610da1565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916104df91859061071f9086906111ad565b610c0c565b61072e3382610e50565b60405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b6007546001600160a01b031633146107905760405162461bcd60e51b815260040161051290611168565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f5ab91a6f3863bbfc327030665a2e7eb5896f712a142edf28cc9c773e1c6a73bc9060200160405180910390a150565b6007546001600160a01b0316331461080e5760405162461bcd60e51b815260040161051290611168565b600754600160a01b900460ff16156108385760405162461bcd60e51b815260040161051290611118565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ea7f35e49d8ac5590cb85b56ca7a294360e20a1631ed7bf3cc03ddcea65862190600090a250565b60018054610451906111dc565b60006104df338484610cda565b60006104df338484610d1e565b6007546001600160a01b031633146108d35760405162461bcd60e51b815260040161051290611168565b6007805460ff60a01b1916600160a01b179055600680546001600160a01b03191690556040517f89510af5592be8ab6baf34bcde61e39acdad9817e72a34252d05b1c2f418840b90600090a1565b428410156109635760405162461bcd60e51b815260206004820152600f60248201526e115490cc8c0e940e91561412549151608a1b6044820152606401610512565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a081118015906109a357508260ff16601b14806109a357508260ff16601c145b6109e35760405162461bcd60e51b815260206004820152601160248201527045524332303a503a4d414c4c4541424c4560781b6044820152606401610512565b60006109ed61068d565b6001600160a01b0389811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610b06573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b0316148015610b3b57506001600160a01b03891615155b610b875760405162461bcd60e51b815260206004820152601960248201527f45524332303a503a494e56414c49445f5349474e4154555245000000000000006044820152606401610512565b5050610b94878787610c0c565b50505050505050565b6007546001600160a01b03163314610bc75760405162461bcd60e51b815260040161051290611168565b610bd18282610c6e565b816001600160a01b03167f3c379167dfaf774055092997899a344d169c1e98202fac561a98af42674f3b018260405161058a91815260200190565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b8060026000828254610c8091906111ad565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038084166000908152600460209081526040808320938616835292905220546000198114610d1857610d18848461071f85856111c5565b50505050565b6001600160a01b03831660009081526003602052604081208054839290610d469084906111c5565b90915550506001600160a01b03808316600081815260036020526040908190208054850190555190918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c619085815260200190565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051610dd39190611027565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821660009081526003602052604081208054839290610e789084906111c5565b90915550506002805482900390556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610cce565b80356001600160a01b0381168114610edb57600080fd5b919050565b600060208284031215610ef257600080fd5b610efb82610ec4565b9392505050565b60008060408385031215610f1557600080fd5b610f1e83610ec4565b9150610f2c60208401610ec4565b90509250929050565b600080600060608486031215610f4a57600080fd5b610f5384610ec4565b9250610f6160208501610ec4565b9150604084013590509250925092565b600080600080600080600060e0888a031215610f8c57600080fd5b610f9588610ec4565b9650610fa360208901610ec4565b95506040880135945060608801359350608088013560ff81168114610fc757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610ff757600080fd5b61100083610ec4565b946020939093013593505050565b60006020828403121561102057600080fd5b5035919050565b600080835481600182811c91508083168061104357607f831692505b602080841082141561106357634e487b7160e01b86526022600452602486fd5b8180156110775760018114611088576110b5565b60ff198616895284890196506110b5565b60008a81526020902060005b868110156110ad5781548b820152908501908301611094565b505084890196505b509498975050505050505050565b600060208083528351808285015260005b818110156110f0578581018301518582016040015282016110d4565b81811115611102576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526030908201527f4f504e546f6b656e3a204d4947524154494f4e204d494e54494e47204449534160408201526f424c4544205045524d414e454e544c5960801b606082015260800190565b60208082526025908201527f4f504e546f6b656e3a20554e415554484f52495a45442044414f20434f4e545260408201526427a62622a960d91b606082015260800190565b600082198211156111c0576111c0611217565b500190565b6000828210156111d7576111d7611217565b500390565b600181811c908216806111f057607f821691505b6020821081141561121157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220678554162574017bc291f25a08547dab980eddd15d62a4b66a43b9b906ea886164736f6c63430008070033000000000000000000000000f7a171c168a35ae858fd18bec5bb7c28134b823f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806364e9e043116100f9578063a9059cbb11610097578063d505accf11610071578063d505accf146103d1578063dd62ed3e146103e4578063f76f8d781461040f578063fc339dcc1461043157600080fd5b8063a9059cbb146103a3578063b78b6087146103b6578063cfdfb129146103be57600080fd5b80638830eac0116100d35780638830eac01461034257806395d89b4114610355578063a3f4df7e1461035d578063a457c2d71461039057600080fd5b806364e9e043146102ef57806370a08231146103025780637ecebe001461032257600080fd5b806329a4f431116101665780633644e515116101405780633644e51514610296578063395093511461029e5780633c9f849f146102b157806342966c68146102dc57600080fd5b806329a4f431146102425780632e0f262514610255578063313ce5671461026f57600080fd5b806306fdde03146101ae578063095ea7b3146101cc57806318160ddd146101ef578063221afcd51461020657806323b872dd1461021b578063293570ea1461022e575b600080fd5b6101b6610444565b6040516101c391906110c3565b60405180910390f35b6101df6101da366004610fe4565b6104d2565b60405190151581526020016101c3565b6101f860025481565b6040519081526020016101c3565b610219610214366004610fe4565b6104e8565b005b6101df610229366004610f35565b610596565b6007546101df90600160a01b900460ff1681565b610219610250366004610fe4565b6105b8565b61025d601281565b60405160ff90911681526020016101c3565b61025d7f000000000000000000000000000000000000000000000000000000000000001281565b6101f861068d565b6101df6102ac366004610fe4565b6106e8565b6007546102c4906001600160a01b031681565b6040516001600160a01b0390911681526020016101c3565b6102196102ea36600461100e565b610724565b6102196102fd366004610ee0565b610766565b6101f8610310366004610ee0565b60036020526000908152604090205481565b6101f8610330366004610ee0565b60056020526000908152604090205481565b610219610350366004610ee0565b6107e4565b6101b6610882565b6101b66040518060400160405280601481526020017327b832b71022b1b7b9bcb9ba32b6902a37b5b2b760611b81525081565b6101df61039e366004610fe4565b61088f565b6101df6103b1366004610fe4565b61089c565b6102196108a9565b6006546102c4906001600160a01b031681565b6102196103df366004610f71565b610921565b6101f86103f2366004610f02565b600460209081526000928352604080842090915290825290205481565b6101b66040518060400160405280600381526020016227a82760e91b81525081565b61021961043f366004610fe4565b610b9d565b60008054610451906111dc565b80601f016020809104026020016040519081016040528092919081815260200182805461047d906111dc565b80156104ca5780601f1061049f576101008083540402835291602001916104ca565b820191906000526020600020905b8154815290600101906020018083116104ad57829003601f168201915b505050505081565b60006104df338484610c0c565b50600192915050565b6007546001600160a01b0316331461051b5760405162461bcd60e51b815260040161051290611168565b60405180910390fd5b600754600160a01b900460ff16156105455760405162461bcd60e51b815260040161051290611118565b61054f8282610c6e565b816001600160a01b03167f78aefcb901d4baf8afce38f52ff95ead7f6f157b2938c129d66f374da74d2c478260405161058a91815260200190565b60405180910390a25050565b60006105a3843384610cda565b6105ae848484610d1e565b5060019392505050565b6006546001600160a01b0316331461061e5760405162461bcd60e51b815260206004820152602360248201527f4f504e546f6b656e3a20554e415554484f52495a4544204d494e54204d414e4160448201526223a2a960e91b6064820152608401610512565b600754600160a01b900460ff16156106485760405162461bcd60e51b815260040161051290611118565b6106528282610c6e565b816001600160a01b03167f577779026de96300989720df26238d2afd0f81233dc790abc107fae45dad0bb98260405161058a91815260200190565b60007f000000000000000000000000000000000000000000000000000000000000000146146106c3576106be610da1565b905090565b507fec629ab4aa7cd259bf5595cee9faf4049ac408ade60b2c128f22f6c1e7ff050290565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916104df91859061071f9086906111ad565b610c0c565b61072e3382610e50565b60405181815233907ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb69060200160405180910390a250565b6007546001600160a01b031633146107905760405162461bcd60e51b815260040161051290611168565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f5ab91a6f3863bbfc327030665a2e7eb5896f712a142edf28cc9c773e1c6a73bc9060200160405180910390a150565b6007546001600160a01b0316331461080e5760405162461bcd60e51b815260040161051290611168565b600754600160a01b900460ff16156108385760405162461bcd60e51b815260040161051290611118565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f4ea7f35e49d8ac5590cb85b56ca7a294360e20a1631ed7bf3cc03ddcea65862190600090a250565b60018054610451906111dc565b60006104df338484610cda565b60006104df338484610d1e565b6007546001600160a01b031633146108d35760405162461bcd60e51b815260040161051290611168565b6007805460ff60a01b1916600160a01b179055600680546001600160a01b03191690556040517f89510af5592be8ab6baf34bcde61e39acdad9817e72a34252d05b1c2f418840b90600090a1565b428410156109635760405162461bcd60e51b815260206004820152600f60248201526e115490cc8c0e940e91561412549151608a1b6044820152606401610512565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a081118015906109a357508260ff16601b14806109a357508260ff16601c145b6109e35760405162461bcd60e51b815260206004820152601160248201527045524332303a503a4d414c4c4541424c4560781b6044820152606401610512565b60006109ed61068d565b6001600160a01b0389811660008181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938c166060840152608083018b905260a083019390935260c08083018a90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015610b06573d6000803e3d6000fd5b505050602060405103519050886001600160a01b0316816001600160a01b0316148015610b3b57506001600160a01b03891615155b610b875760405162461bcd60e51b815260206004820152601960248201527f45524332303a503a494e56414c49445f5349474e4154555245000000000000006044820152606401610512565b5050610b94878787610c0c565b50505050505050565b6007546001600160a01b03163314610bc75760405162461bcd60e51b815260040161051290611168565b610bd18282610c6e565b816001600160a01b03167f3c379167dfaf774055092997899a344d169c1e98202fac561a98af42674f3b018260405161058a91815260200190565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b8060026000828254610c8091906111ad565b90915550506001600160a01b0382166000818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6001600160a01b038084166000908152600460209081526040808320938616835292905220546000198114610d1857610d18848461071f85856111c5565b50505050565b6001600160a01b03831660009081526003602052604081208054839290610d469084906111c5565b90915550506001600160a01b03808316600081815260036020526040908190208054850190555190918516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c619085815260200190565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051610dd39190611027565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6001600160a01b03821660009081526003602052604081208054839290610e789084906111c5565b90915550506002805482900390556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610cce565b80356001600160a01b0381168114610edb57600080fd5b919050565b600060208284031215610ef257600080fd5b610efb82610ec4565b9392505050565b60008060408385031215610f1557600080fd5b610f1e83610ec4565b9150610f2c60208401610ec4565b90509250929050565b600080600060608486031215610f4a57600080fd5b610f5384610ec4565b9250610f6160208501610ec4565b9150604084013590509250925092565b600080600080600080600060e0888a031215610f8c57600080fd5b610f9588610ec4565b9650610fa360208901610ec4565b95506040880135945060608801359350608088013560ff81168114610fc757600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610ff757600080fd5b61100083610ec4565b946020939093013593505050565b60006020828403121561102057600080fd5b5035919050565b600080835481600182811c91508083168061104357607f831692505b602080841082141561106357634e487b7160e01b86526022600452602486fd5b8180156110775760018114611088576110b5565b60ff198616895284890196506110b5565b60008a81526020902060005b868110156110ad5781548b820152908501908301611094565b505084890196505b509498975050505050505050565b600060208083528351808285015260005b818110156110f0578581018301518582016040015282016110d4565b81811115611102576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526030908201527f4f504e546f6b656e3a204d4947524154494f4e204d494e54494e47204449534160408201526f424c4544205045524d414e454e544c5960801b606082015260800190565b60208082526025908201527f4f504e546f6b656e3a20554e415554484f52495a45442044414f20434f4e545260408201526427a62622a960d91b606082015260800190565b600082198211156111c0576111c0611217565b500190565b6000828210156111d7576111d7611217565b500390565b600181811c908216806111f057607f821691505b6020821081141561121157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220678554162574017bc291f25a08547dab980eddd15d62a4b66a43b9b906ea886164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f7a171c168a35ae858fd18bec5bb7c28134b823f
-----Decoded View---------------
Arg [0] : _initialController (address): 0xF7a171C168A35ae858FD18BEc5Bb7C28134B823F
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000f7a171c168a35ae858fd18bec5bb7c28134b823f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.