Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Contract Name:
BaseToken
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-12-09 */ pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/IERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Detailed.sol /** * @title ERC20Detailed token * @dev The decimals are only for visualization purposes. * All the operations are done using the smallest and indivisible token unit, * just as on Ethereum all the operations are done in wei. */ contract ERC20Detailed is IERC20 { string private _name; string private _symbol; uint8 private _decimals; constructor(string name, string symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } /** * @return the name of the token. */ function name() public view returns(string) { return _name; } /** * @return the symbol of the token. */ function symbol() public view returns(string) { return _symbol; } /** * @return the number of decimals of the token. */ function decimals() public view returns(uint8) { return _decimals; } } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two numbers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two numbers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0); // Solidity only automatically asserts when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two numbers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two numbers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md * Originally based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract ERC20 is IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowed; uint256 private _totalSupply; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev Gets the balance of the specified address. * @param owner The address to query the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address owner) public view returns (uint256) { return _balances[owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param owner address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address owner, address spender ) public view returns (uint256) { return _allowed[owner][spender]; } /** * @dev Transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint256 value) public returns (bool) { _transfer(msg.sender, to, value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint256 value) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Transfer tokens from one address to another * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 the amount of tokens to be transferred */ function transferFrom( address from, address to, uint256 value ) public returns (bool) { require(value <= _allowed[from][msg.sender]); _allowed[from][msg.sender] = _allowed[from][msg.sender].sub(value); _transfer(from, to, value); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param addedValue The amount of tokens to increase the allowance by. */ function increaseAllowance( address spender, uint256 addedValue ) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = ( _allowed[msg.sender][spender].add(addedValue)); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed_[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param spender The address which will spend the funds. * @param subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public returns (bool) { require(spender != address(0)); _allowed[msg.sender][spender] = ( _allowed[msg.sender][spender].sub(subtractedValue)); emit Approval(msg.sender, spender, _allowed[msg.sender][spender]); return true; } /** * @dev Transfer token for a specified addresses * @param from The address to transfer from. * @param to The address to transfer to. * @param value The amount to be transferred. */ function _transfer(address from, address to, uint256 value) internal { require(value <= _balances[from]); require(to != address(0)); _balances[from] = _balances[from].sub(value); _balances[to] = _balances[to].add(value); emit Transfer(from, to, value); } /** * @dev Internal function that mints an amount of the token and assigns it to * an account. This encapsulates the modification of balances such that the * proper events are emitted. * @param account The account that will receive the created tokens. * @param value The amount that will be created. */ function _mint(address account, uint256 value) internal { require(account != 0); _totalSupply = _totalSupply.add(value); _balances[account] = _balances[account].add(value); emit Transfer(address(0), account, value); } /** * @dev Internal function that burns an amount of the token of a given * account. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burn(address account, uint256 value) internal { require(account != 0); require(value <= _balances[account]); _totalSupply = _totalSupply.sub(value); _balances[account] = _balances[account].sub(value); emit Transfer(account, address(0), value); } /** * @dev Internal function that burns an amount of the token of a given * account, deducting from the sender's allowance for said account. Uses the * internal burn function. * @param account The account whose tokens will be burnt. * @param value The amount that will be burnt. */ function _burnFrom(address account, uint256 value) internal { require(value <= _allowed[account][msg.sender]); // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted, // this function needs to emit an event with the updated approval. _allowed[account][msg.sender] = _allowed[account][msg.sender].sub( value); _burn(account, value); } } // File: openzeppelin-solidity/contracts/access/Roles.sol /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an account access to this role */ function add(Role storage role, address account) internal { require(account != address(0)); require(!has(role, account)); role.bearer[account] = true; } /** * @dev remove an account's access to this role */ function remove(Role storage role, address account) internal { require(account != address(0)); require(has(role, account)); role.bearer[account] = false; } /** * @dev check if an account has this role * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0)); return role.bearer[account]; } } // File: openzeppelin-solidity/contracts/access/roles/MinterRole.sol contract MinterRole { using Roles for Roles.Role; event MinterAdded(address indexed account); event MinterRemoved(address indexed account); Roles.Role private minters; constructor() internal { _addMinter(msg.sender); } modifier onlyMinter() { require(isMinter(msg.sender)); _; } function isMinter(address account) public view returns (bool) { return minters.has(account); } function addMinter(address account) public onlyMinter { _addMinter(account); } function renounceMinter() public { _removeMinter(msg.sender); } function _addMinter(address account) internal { minters.add(account); emit MinterAdded(account); } function _removeMinter(address account) internal { minters.remove(account); emit MinterRemoved(account); } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Mintable.sol /** * @title ERC20Mintable * @dev ERC20 minting logic */ contract ERC20Mintable is ERC20, MinterRole { /** * @dev Function to mint tokens * @param to The address that will receive the minted tokens. * @param value The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint( address to, uint256 value ) public onlyMinter returns (bool) { _mint(to, value); return true; } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Capped.sol /** * @title Capped token * @dev Mintable token with a token cap. */ contract ERC20Capped is ERC20Mintable { uint256 private _cap; constructor(uint256 cap) public { require(cap > 0); _cap = cap; } /** * @return the cap for the token minting. */ function cap() public view returns(uint256) { return _cap; } function _mint(address account, uint256 value) internal { require(totalSupply().add(value) <= _cap); super._mint(account, value); } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Burnable.sol /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract ERC20Burnable is ERC20 { /** * @dev Burns a specific amount of tokens. * @param value The amount of token to be burned. */ function burn(uint256 value) public { _burn(msg.sender, value); } /** * @dev Burns a specific amount of tokens from the target address and decrements allowance * @param from address The address which you want to send tokens from * @param value uint256 The amount of token to be burned */ function burnFrom(address from, uint256 value) public { _burnFrom(from, value); } } // File: openzeppelin-solidity/contracts/utils/Address.sol /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: openzeppelin-solidity/contracts/introspection/ERC165Checker.sol /** * @title ERC165Checker * @dev Use `using ERC165Checker for address`; to include this library * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ library ERC165Checker { // As per the EIP-165 spec, no interface should ever match 0xffffffff bytes4 private constant _InterfaceId_Invalid = 0xffffffff; bytes4 private constant _InterfaceId_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @notice Query if a contract supports ERC165 * @param account The address of the contract to query for support of ERC165 * @return true if the contract at account implements ERC165 */ function _supportsERC165(address account) internal view returns (bool) { // Any contract that implements ERC165 must explicitly indicate support of // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid return _supportsERC165Interface(account, _InterfaceId_ERC165) && !_supportsERC165Interface(account, _InterfaceId_Invalid); } /** * @notice Query if a contract implements an interface, also checks support of ERC165 * @param account The address of the contract to query for support of an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @return true if the contract at account indicates support of the interface with * identifier interfaceId, false otherwise * @dev Interface identification is specified in ERC-165. */ function _supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) { // query support of both ERC165 as per the spec and support of _interfaceId return _supportsERC165(account) && _supportsERC165Interface(account, interfaceId); } /** * @notice Query if a contract implements interfaces, also checks support of ERC165 * @param account The address of the contract to query for support of an interface * @param interfaceIds A list of interface identifiers, as specified in ERC-165 * @return true if the contract at account indicates support all interfaces in the * interfaceIds list, false otherwise * @dev Interface identification is specified in ERC-165. */ function _supportsAllInterfaces(address account, bytes4[] interfaceIds) internal view returns (bool) { // query support of ERC165 itself if (!_supportsERC165(account)) { return false; } // query support of each interface in _interfaceIds for (uint256 i = 0; i < interfaceIds.length; i++) { if (!_supportsERC165Interface(account, interfaceIds[i])) { return false; } } // all interfaces supported return true; } /** * @notice Query if a contract implements an interface, does not check ERC165 support * @param account The address of the contract to query for support of an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @return true if the contract at account indicates support of the interface with * identifier interfaceId, false otherwise * @dev Assumes that account contains a contract that supports ERC165, otherwise * the behavior of this method is undefined. This precondition can be checked * with the `supportsERC165` method in this library. * Interface identification is specified in ERC-165. */ function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) { // success determines whether the staticcall succeeded and result determines // whether the contract at account indicates support of _interfaceId (bool success, bool result) = _callERC165SupportsInterface( account, interfaceId); return (success && result); } /** * @notice Calls the function with selector 0x01ffc9a7 (ERC165) and suppresses throw * @param account The address of the contract to query for support of an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @return success true if the STATICCALL succeeded, false otherwise * @return result true if the STATICCALL succeeded and the contract at account * indicates support of the interface with identifier interfaceId, false otherwise */ function _callERC165SupportsInterface( address account, bytes4 interfaceId ) private view returns (bool success, bool result) { bytes memory encodedParams = abi.encodeWithSelector( _InterfaceId_ERC165, interfaceId ); // solium-disable-next-line security/no-inline-assembly assembly { let encodedParams_data := add(0x20, encodedParams) let encodedParams_size := mload(encodedParams) let output := mload(0x40) // Find empty storage location using "free memory pointer" mstore(output, 0x0) success := staticcall( 30000, // 30k gas account, // To addr encodedParams_data, encodedParams_size, output, 0x20 // Outputs are 32 bytes long ) result := mload(output) // Load the result } } } // File: openzeppelin-solidity/contracts/introspection/IERC165.sol /** * @title IERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface IERC165 { /** * @notice Query if a contract implements an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: openzeppelin-solidity/contracts/introspection/ERC165.sol /** * @title ERC165 * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract ERC165 is IERC165 { bytes4 private constant _InterfaceId_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor() internal { _registerInterface(_InterfaceId_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev internal method for registering an interface */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff); _supportedInterfaces[interfaceId] = true; } } // File: erc-payable-token/contracts/token/ERC1363/IERC1363.sol /** * @title IERC1363 Interface * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Interface for a Payable Token contract as defined in * https://github.com/ethereum/EIPs/issues/1363 */ contract IERC1363 is IERC20, ERC165 { /* * Note: the ERC-165 identifier for this interface is 0x4bbee2df. * 0x4bbee2df === * bytes4(keccak256('transferAndCall(address,uint256)')) ^ * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) */ /* * Note: the ERC-165 identifier for this interface is 0xfb9ec8ce. * 0xfb9ec8ce === * bytes4(keccak256('approveAndCall(address,uint256)')) ^ * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) */ /** * @notice Transfer tokens from `msg.sender` to another address * and then call `onTransferReceived` on receiver * @param to address The address which you want to transfer to * @param value uint256 The amount of tokens to be transferred * @return true unless throwing */ function transferAndCall(address to, uint256 value) public returns (bool); /** * @notice Transfer tokens from `msg.sender` to another address * and then call `onTransferReceived` on receiver * @param to address The address which you want to transfer to * @param value uint256 The amount of tokens to be transferred * @param data bytes Additional data with no specified format, sent in call to `to` * @return true unless throwing */ function transferAndCall(address to, uint256 value, bytes data) public returns (bool); // solium-disable-line max-len /** * @notice Transfer tokens from one address to another * and then call `onTransferReceived` on receiver * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 The amount of tokens to be transferred * @return true unless throwing */ function transferFromAndCall(address from, address to, uint256 value) public returns (bool); // solium-disable-line max-len /** * @notice Transfer tokens from one address to another * and then call `onTransferReceived` on receiver * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint256 The amount of tokens to be transferred * @param data bytes Additional data with no specified format, sent in call to `to` * @return true unless throwing */ function transferFromAndCall(address from, address to, uint256 value, bytes data) public returns (bool); // solium-disable-line max-len, arg-overflow /** * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender * and then call `onApprovalReceived` on spender * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender address The address which will spend the funds * @param value uint256 The amount of tokens to be spent */ function approveAndCall(address spender, uint256 value) public returns (bool); // solium-disable-line max-len /** * @notice Approve the passed address to spend the specified amount of tokens on behalf of msg.sender * and then call `onApprovalReceived` on spender * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param spender address The address which will spend the funds * @param value uint256 The amount of tokens to be spent * @param data bytes Additional data with no specified format, sent in call to `spender` */ function approveAndCall(address spender, uint256 value, bytes data) public returns (bool); // solium-disable-line max-len } // File: erc-payable-token/contracts/token/ERC1363/IERC1363Receiver.sol /** * @title IERC1363Receiver Interface * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Interface for any contract that wants to support transferAndCall or transferFromAndCall * from ERC1363 token contracts as defined in * https://github.com/ethereum/EIPs/issues/1363 */ contract IERC1363Receiver { /* * Note: the ERC-165 identifier for this interface is 0x88a7ca5c. * 0x88a7ca5c === bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)")) */ /** * @notice Handle the receipt of ERC1363 tokens * @dev Any ERC1363 smart contract calls this function on the recipient * after a `transfer` or a `transferFrom`. This function MAY throw to revert and reject the * transfer. Return of other than the magic value MUST result in the * transaction being reverted. * Note: the token contract address is always the message sender. * @param operator address The address which called `transferAndCall` or `transferFromAndCall` function * @param from address The address which are token transferred from * @param value uint256 The amount of tokens transferred * @param data bytes Additional data with no specified format * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` * unless throwing */ function onTransferReceived(address operator, address from, uint256 value, bytes data) external returns (bytes4); // solium-disable-line max-len, arg-overflow } // File: erc-payable-token/contracts/token/ERC1363/IERC1363Spender.sol /** * @title IERC1363Spender Interface * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Interface for any contract that wants to support approveAndCall * from ERC1363 token contracts as defined in * https://github.com/ethereum/EIPs/issues/1363 */ contract IERC1363Spender { /* * Note: the ERC-165 identifier for this interface is 0x7b04a2d0. * 0x7b04a2d0 === bytes4(keccak256("onApprovalReceived(address,uint256,bytes)")) */ /** * @notice Handle the approval of ERC1363 tokens * @dev Any ERC1363 smart contract calls this function on the recipient * after an `approve`. This function MAY throw to revert and reject the * approval. Return of other than the magic value MUST result in the * transaction being reverted. * Note: the token contract address is always the message sender. * @param owner address The address which called `approveAndCall` function * @param value uint256 The amount of tokens to be spent * @param data bytes Additional data with no specified format * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` * unless throwing */ function onApprovalReceived(address owner, uint256 value, bytes data) external returns (bytes4); // solium-disable-line max-len } // File: erc-payable-token/contracts/token/ERC1363/ERC1363.sol /** * @title ERC1363 * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Implementation of an ERC1363 interface */ contract ERC1363 is ERC20, IERC1363 { // solium-disable-line max-len using Address for address; /* * Note: the ERC-165 identifier for this interface is 0x4bbee2df. * 0x4bbee2df === * bytes4(keccak256('transferAndCall(address,uint256)')) ^ * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) */ bytes4 internal constant _InterfaceId_ERC1363Transfer = 0x4bbee2df; /* * Note: the ERC-165 identifier for this interface is 0xfb9ec8ce. * 0xfb9ec8ce === * bytes4(keccak256('approveAndCall(address,uint256)')) ^ * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) */ bytes4 internal constant _InterfaceId_ERC1363Approve = 0xfb9ec8ce; // Equals to `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` // which can be also obtained as `IERC1363Receiver(0).onTransferReceived.selector` bytes4 private constant _ERC1363_RECEIVED = 0x88a7ca5c; // Equals to `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` // which can be also obtained as `IERC1363Spender(0).onApprovalReceived.selector` bytes4 private constant _ERC1363_APPROVED = 0x7b04a2d0; constructor() public { // register the supported interfaces to conform to ERC1363 via ERC165 _registerInterface(_InterfaceId_ERC1363Transfer); _registerInterface(_InterfaceId_ERC1363Approve); } function transferAndCall( address to, uint256 value ) public returns (bool) { return transferAndCall(to, value, ""); } function transferAndCall( address to, uint256 value, bytes data ) public returns (bool) { require(transfer(to, value)); require( _checkAndCallTransfer( msg.sender, to, value, data ) ); return true; } function transferFromAndCall( address from, address to, uint256 value ) public returns (bool) { // solium-disable-next-line arg-overflow return transferFromAndCall(from, to, value, ""); } function transferFromAndCall( address from, address to, uint256 value, bytes data ) public returns (bool) { require(transferFrom(from, to, value)); require( _checkAndCallTransfer( from, to, value, data ) ); return true; } function approveAndCall( address spender, uint256 value ) public returns (bool) { return approveAndCall(spender, value, ""); } function approveAndCall( address spender, uint256 value, bytes data ) public returns (bool) { approve(spender, value); require( _checkAndCallApprove( spender, value, data ) ); return true; } /** * @dev Internal function to invoke `onTransferReceived` on a target address * The call is not executed if the target address is not a contract * @param from address Representing the previous owner of the given token value * @param to address Target address that will receive the tokens * @param value uint256 The amount mount of tokens to be transferred * @param data bytes Optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function _checkAndCallTransfer( address from, address to, uint256 value, bytes data ) internal returns (bool) { if (!to.isContract()) { return false; } bytes4 retval = IERC1363Receiver(to).onTransferReceived( msg.sender, from, value, data ); return (retval == _ERC1363_RECEIVED); } /** * @dev Internal function to invoke `onApprovalReceived` on a target address * The call is not executed if the target address is not a contract * @param spender address The address which will spend the funds * @param value uint256 The amount of tokens to be spent * @param data bytes Optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function _checkAndCallApprove( address spender, uint256 value, bytes data ) internal returns (bool) { if (!spender.isContract()) { return false; } bytes4 retval = IERC1363Spender(spender).onApprovalReceived( msg.sender, value, data ); return (retval == _ERC1363_APPROVED); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns(address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns(bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: eth-token-recover/contracts/TokenRecover.sol /** * @title TokenRecover * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Allow to recover any ERC20 sent into the contract for error */ contract TokenRecover is Ownable { /** * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts. * @param tokenAddress The token contract address * @param tokenAmount Number of tokens to be sent */ function recoverERC20( address tokenAddress, uint256 tokenAmount ) public onlyOwner { IERC20(tokenAddress).transfer(owner(), tokenAmount); } } // File: contracts/BaseToken.sol /** * @title BaseToken * @author Vittorio Minacori (https://github.com/vittominacori) * @dev Implementation of a BaseToken */ contract BaseToken is ERC20Detailed, ERC20Capped, ERC20Burnable, ERC1363, TokenRecover { // solium-disable-line max-len string public builtOn = "https://vittominacori.github.io/erc20-generator"; constructor( string name, string symbol, uint8 decimals, uint256 cap, uint256 initialBalance ) ERC20Detailed(name, symbol, decimals) ERC20Capped(cap) public { if (initialBalance > 0) { _mint(owner(), initialBalance); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddress","type":"address"},{"name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"builtOn","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transferFromAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transferFromAndCall","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"decimals","type":"uint8"},{"name":"cap","type":"uint256"},{"name":"initialBalance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]
Contract Creation Code
60e0604052602f60808190527f68747470733a2f2f766974746f6d696e61636f72692e6769746875622e696f2f60a09081527f65726332302d67656e657261746f72000000000000000000000000000000000060c0526200006491600a9190620004e0565b503480156200007257600080fd5b5060405162001b7938038062001b79833981016040908152815160208084015192840151606085015160808601519386018051909695909501949193909290918391879187918791620000cc9160009190860190620004e0565b508151620000e2906001906020850190620004e0565b506002805460ff191660ff92909216919091179055506200010e90503364010000000062000243810204565b600081116200011c57600080fd5b600755620001537f01ffc9a70000000000000000000000000000000000000000000000000000000064010000000062000295810204565b620001877f4bbee2df0000000000000000000000000000000000000000000000000000000064010000000062000295810204565b620001bb7ffb9ec8ce0000000000000000000000000000000000000000000000000000000064010000000062000295810204565b60098054600160a060020a031916331790819055604051600160a060020a0391909116906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360008111156200023857620002386200022864010000000062000302810204565b8264010000000062000312810204565b505050505062000582565b6200025e600682640100000000620015216200036c82021704565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620002c557600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152600860205260409020805460ff19166001179055565b600954600160a060020a03165b90565b60075462000342826200032d640100000000620003c7810204565b9064010000000062000ec0620003cd82021704565b11156200034e57600080fd5b62000368828264010000000062001475620003e782021704565b5050565b600160a060020a03811615156200038257600080fd5b620003978282640100000000620004a8810204565b15620003a257600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b60055490565b600082820183811015620003e057600080fd5b9392505050565b600160a060020a0382161515620003fd57600080fd5b6005546200041a908264010000000062000ec0620003cd82021704565b600555600160a060020a03821660009081526003602052604090205462000450908264010000000062000ec0620003cd82021704565b600160a060020a03831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000600160a060020a0382161515620004c057600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200052357805160ff191683800117855562000553565b8280016001018555821562000553579182015b828111156200055357825182559160200191906001019062000536565b506200056192915062000565565b5090565b6200030f91905b808211156200056157600081556001016200056c565b6115e780620005926000396000f3006080604052600436106101715763ffffffff60e060020a60003504166301ffc9a7811461017657806306fdde03146101ac578063095ea7b3146102365780631296ee621461025a57806318160ddd1461027e57806323b872dd146102a5578063313ce567146102cf5780633177029f146102fa578063355274ea1461031e57806339509351146103335780634000aea01461035757806340c10f19146103c057806342966c68146103e457806370a08231146103fe578063715018a61461041f57806379cc6790146104345780638980f11f146104585780638da5cb5b1461047c5780638f32d59b146104ad57806395d89b41146104c2578063983b2d56146104d757806398650275146104f8578063a457c2d71461050d578063a9059cbb14610531578063aa271e1a14610555578063b60b708414610576578063c1d34b891461058b578063cae9ca51146105fa578063d8fbe99414610663578063dd62ed3e1461068d578063f2fde38b146106b4575b600080fd5b34801561018257600080fd5b50610198600160e060020a0319600435166106d5565b604080519115158252519081900360200190f35b3480156101b857600080fd5b506101c16106f4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fb5781810151838201526020016101e3565b50505050905090810190601f1680156102285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024257600080fd5b50610198600160a060020a036004351660243561078a565b34801561026657600080fd5b50610198600160a060020a0360043516602435610808565b34801561028a57600080fd5b5061029361082c565b60408051918252519081900360200190f35b3480156102b157600080fd5b50610198600160a060020a0360043581169060243516604435610832565b3480156102db57600080fd5b506102e46108cf565b6040805160ff9092168252519081900360200190f35b34801561030657600080fd5b50610198600160a060020a03600435166024356108d8565b34801561032a57600080fd5b506102936108f5565b34801561033f57600080fd5b50610198600160a060020a03600435166024356108fb565b34801561036357600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610198948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506109ab9650505050505050565b3480156103cc57600080fd5b50610198600160a060020a03600435166024356109d9565b3480156103f057600080fd5b506103fc600435610a02565b005b34801561040a57600080fd5b50610293600160a060020a0360043516610a0f565b34801561042b57600080fd5b506103fc610a2a565b34801561044057600080fd5b506103fc600160a060020a0360043516602435610a94565b34801561046457600080fd5b506103fc600160a060020a0360043516602435610aa2565b34801561048857600080fd5b50610491610b4f565b60408051600160a060020a039092168252519081900360200190f35b3480156104b957600080fd5b50610198610b5e565b3480156104ce57600080fd5b506101c1610b6f565b3480156104e357600080fd5b506103fc600160a060020a0360043516610bcf565b34801561050457600080fd5b506103fc610bec565b34801561051957600080fd5b50610198600160a060020a0360043516602435610bf7565b34801561053d57600080fd5b50610198600160a060020a0360043516602435610c42565b34801561056157600080fd5b50610198600160a060020a0360043516610c4f565b34801561058257600080fd5b506101c1610c68565b34801561059757600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261019894600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750610cf69650505050505050565b34801561060657600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610198948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610d309650505050505050565b34801561066f57600080fd5b50610198600160a060020a0360043581169060243516604435610d48565b34801561069957600080fd5b50610293600160a060020a0360043581169060243516610d6e565b3480156106c057600080fd5b506103fc600160a060020a0360043516610d99565b600160e060020a03191660009081526008602052604090205460ff1690565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107805780601f1061075557610100808354040283529160200191610780565b820191906000526020600020905b81548152906001019060200180831161076357829003601f168201915b5050505050905090565b6000600160a060020a03831615156107a157600080fd5b336000818152600460209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6000610825838360206040519081016040528060008152506109ab565b9392505050565b60055490565b600160a060020a038316600090815260046020908152604080832033845290915281205482111561086257600080fd5b600160a060020a0384166000908152600460209081526040808320338452909152902054610896908363ffffffff610db516565b600160a060020a03851660009081526004602090815260408083203384529091529020556108c5848484610dcc565b5060019392505050565b60025460ff1690565b600061082583836020604051908101604052806000815250610d30565b60075490565b6000600160a060020a038316151561091257600080fd5b336000908152600460209081526040808320600160a060020a0387168452909152902054610946908363ffffffff610ec016565b336000818152600460209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60006109b78484610c42565b15156109c257600080fd5b6109ce33858585610ed2565b15156108c557600080fd5b60006109e433610c4f565b15156109ef57600080fd5b6109f9838361103f565b50600192915050565b610a0c338261106f565b50565b600160a060020a031660009081526003602052604090205490565b610a32610b5e565b1515610a3d57600080fd5b600954604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36009805473ffffffffffffffffffffffffffffffffffffffff19169055565b610a9e828261113f565b5050565b610aaa610b5e565b1515610ab557600080fd5b81600160a060020a031663a9059cbb610acc610b4f565b836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b1f57600080fd5b505af1158015610b33573d6000803e3d6000fd5b505050506040513d6020811015610b4957600080fd5b50505050565b600954600160a060020a031690565b600954600160a060020a0316331490565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156107805780601f1061075557610100808354040283529160200191610780565b610bd833610c4f565b1515610be357600080fd5b610a0c816111d1565b610bf533611219565b565b6000600160a060020a0383161515610c0e57600080fd5b336000908152600460209081526040808320600160a060020a0387168452909152902054610946908363ffffffff610db516565b60006109f9338484610dcc565b6000610c6260068363ffffffff61126116565b92915050565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610cee5780601f10610cc357610100808354040283529160200191610cee565b820191906000526020600020905b815481529060010190602001808311610cd157829003601f168201915b505050505081565b6000610d03858585610832565b1515610d0e57600080fd5b610d1a85858585610ed2565b1515610d2557600080fd5b506001949350505050565b6000610d3c848461078a565b506109ce848484611298565b6000610d668484846020604051908101604052806000815250610cf6565b949350505050565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205490565b610da1610b5e565b1515610dac57600080fd5b610a0c816113ef565b60008083831115610dc557600080fd5b5050900390565b600160a060020a038316600090815260036020526040902054811115610df157600080fd5b600160a060020a0382161515610e0657600080fd5b600160a060020a038316600090815260036020526040902054610e2f908263ffffffff610db516565b600160a060020a038085166000908152600360205260408082209390935590841681522054610e64908263ffffffff610ec016565b600160a060020a0380841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561082557600080fd5b600080610ee785600160a060020a031661146d565b1515610ef65760009150611036565b6040517f88a7ca5c0000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03898116602485015260448401889052608060648501908152875160848601528751918a16946388a7ca5c94938c938b938b93909160a490910190602085019080838360005b83811015610f89578181015183820152602001610f71565b50505050905090810190601f168015610fb65780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050506040513d602081101561100257600080fd5b5051600160e060020a031981167f88a7ca5c0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b60075461105a8261104e61082c565b9063ffffffff610ec016565b111561106557600080fd5b610a9e8282611475565b600160a060020a038216151561108457600080fd5b600160a060020a0382166000908152600360205260409020548111156110a957600080fd5b6005546110bc908263ffffffff610db516565b600555600160a060020a0382166000908152600360205260409020546110e8908263ffffffff610db516565b600160a060020a0383166000818152600360209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600160a060020a038216600090815260046020908152604080832033845290915290205481111561116f57600080fd5b600160a060020a03821660009081526004602090815260408083203384529091529020546111a3908263ffffffff610db516565b600160a060020a0383166000908152600460209081526040808320338452909152902055610a9e828261106f565b6111e260068263ffffffff61152116565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61122a60068263ffffffff61156f16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b6000600160a060020a038216151561127857600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6000806112ad85600160a060020a031661146d565b15156112bc57600091506113e7565b84600160a060020a0316637b04a2d03386866040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561133b578181015183820152602001611323565b50505050905090810190601f1680156113685780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b505050506040513d60208110156113b357600080fd5b5051600160e060020a031981167f7b04a2d00000000000000000000000000000000000000000000000000000000014925090505b509392505050565b600160a060020a038116151561140457600080fd5b600954604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b600160a060020a038216151561148a57600080fd5b60055461149d908263ffffffff610ec016565b600555600160a060020a0382166000908152600360205260409020546114c9908263ffffffff610ec016565b600160a060020a03831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a038116151561153657600080fd5b6115408282611261565b1561154a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561158457600080fd5b61158e8282611261565b151561159957600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a72305820dbcc24d8245b945ac1d2f1e96e8e52bd60b5ea7b4bb99f58239bab6defe5423e002900000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000000942617365546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241534500000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101715763ffffffff60e060020a60003504166301ffc9a7811461017657806306fdde03146101ac578063095ea7b3146102365780631296ee621461025a57806318160ddd1461027e57806323b872dd146102a5578063313ce567146102cf5780633177029f146102fa578063355274ea1461031e57806339509351146103335780634000aea01461035757806340c10f19146103c057806342966c68146103e457806370a08231146103fe578063715018a61461041f57806379cc6790146104345780638980f11f146104585780638da5cb5b1461047c5780638f32d59b146104ad57806395d89b41146104c2578063983b2d56146104d757806398650275146104f8578063a457c2d71461050d578063a9059cbb14610531578063aa271e1a14610555578063b60b708414610576578063c1d34b891461058b578063cae9ca51146105fa578063d8fbe99414610663578063dd62ed3e1461068d578063f2fde38b146106b4575b600080fd5b34801561018257600080fd5b50610198600160e060020a0319600435166106d5565b604080519115158252519081900360200190f35b3480156101b857600080fd5b506101c16106f4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101fb5781810151838201526020016101e3565b50505050905090810190601f1680156102285780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561024257600080fd5b50610198600160a060020a036004351660243561078a565b34801561026657600080fd5b50610198600160a060020a0360043516602435610808565b34801561028a57600080fd5b5061029361082c565b60408051918252519081900360200190f35b3480156102b157600080fd5b50610198600160a060020a0360043581169060243516604435610832565b3480156102db57600080fd5b506102e46108cf565b6040805160ff9092168252519081900360200190f35b34801561030657600080fd5b50610198600160a060020a03600435166024356108d8565b34801561032a57600080fd5b506102936108f5565b34801561033f57600080fd5b50610198600160a060020a03600435166024356108fb565b34801561036357600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610198948235600160a060020a03169460248035953695946064949201919081908401838280828437509497506109ab9650505050505050565b3480156103cc57600080fd5b50610198600160a060020a03600435166024356109d9565b3480156103f057600080fd5b506103fc600435610a02565b005b34801561040a57600080fd5b50610293600160a060020a0360043516610a0f565b34801561042b57600080fd5b506103fc610a2a565b34801561044057600080fd5b506103fc600160a060020a0360043516602435610a94565b34801561046457600080fd5b506103fc600160a060020a0360043516602435610aa2565b34801561048857600080fd5b50610491610b4f565b60408051600160a060020a039092168252519081900360200190f35b3480156104b957600080fd5b50610198610b5e565b3480156104ce57600080fd5b506101c1610b6f565b3480156104e357600080fd5b506103fc600160a060020a0360043516610bcf565b34801561050457600080fd5b506103fc610bec565b34801561051957600080fd5b50610198600160a060020a0360043516602435610bf7565b34801561053d57600080fd5b50610198600160a060020a0360043516602435610c42565b34801561056157600080fd5b50610198600160a060020a0360043516610c4f565b34801561058257600080fd5b506101c1610c68565b34801561059757600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261019894600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750610cf69650505050505050565b34801561060657600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610198948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610d309650505050505050565b34801561066f57600080fd5b50610198600160a060020a0360043581169060243516604435610d48565b34801561069957600080fd5b50610293600160a060020a0360043581169060243516610d6e565b3480156106c057600080fd5b506103fc600160a060020a0360043516610d99565b600160e060020a03191660009081526008602052604090205460ff1690565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107805780601f1061075557610100808354040283529160200191610780565b820191906000526020600020905b81548152906001019060200180831161076357829003601f168201915b5050505050905090565b6000600160a060020a03831615156107a157600080fd5b336000818152600460209081526040808320600160a060020a03881680855290835292819020869055805186815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b6000610825838360206040519081016040528060008152506109ab565b9392505050565b60055490565b600160a060020a038316600090815260046020908152604080832033845290915281205482111561086257600080fd5b600160a060020a0384166000908152600460209081526040808320338452909152902054610896908363ffffffff610db516565b600160a060020a03851660009081526004602090815260408083203384529091529020556108c5848484610dcc565b5060019392505050565b60025460ff1690565b600061082583836020604051908101604052806000815250610d30565b60075490565b6000600160a060020a038316151561091257600080fd5b336000908152600460209081526040808320600160a060020a0387168452909152902054610946908363ffffffff610ec016565b336000818152600460209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60006109b78484610c42565b15156109c257600080fd5b6109ce33858585610ed2565b15156108c557600080fd5b60006109e433610c4f565b15156109ef57600080fd5b6109f9838361103f565b50600192915050565b610a0c338261106f565b50565b600160a060020a031660009081526003602052604090205490565b610a32610b5e565b1515610a3d57600080fd5b600954604051600091600160a060020a0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36009805473ffffffffffffffffffffffffffffffffffffffff19169055565b610a9e828261113f565b5050565b610aaa610b5e565b1515610ab557600080fd5b81600160a060020a031663a9059cbb610acc610b4f565b836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610b1f57600080fd5b505af1158015610b33573d6000803e3d6000fd5b505050506040513d6020811015610b4957600080fd5b50505050565b600954600160a060020a031690565b600954600160a060020a0316331490565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156107805780601f1061075557610100808354040283529160200191610780565b610bd833610c4f565b1515610be357600080fd5b610a0c816111d1565b610bf533611219565b565b6000600160a060020a0383161515610c0e57600080fd5b336000908152600460209081526040808320600160a060020a0387168452909152902054610946908363ffffffff610db516565b60006109f9338484610dcc565b6000610c6260068363ffffffff61126116565b92915050565b600a805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610cee5780601f10610cc357610100808354040283529160200191610cee565b820191906000526020600020905b815481529060010190602001808311610cd157829003601f168201915b505050505081565b6000610d03858585610832565b1515610d0e57600080fd5b610d1a85858585610ed2565b1515610d2557600080fd5b506001949350505050565b6000610d3c848461078a565b506109ce848484611298565b6000610d668484846020604051908101604052806000815250610cf6565b949350505050565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205490565b610da1610b5e565b1515610dac57600080fd5b610a0c816113ef565b60008083831115610dc557600080fd5b5050900390565b600160a060020a038316600090815260036020526040902054811115610df157600080fd5b600160a060020a0382161515610e0657600080fd5b600160a060020a038316600090815260036020526040902054610e2f908263ffffffff610db516565b600160a060020a038085166000908152600360205260408082209390935590841681522054610e64908263ffffffff610ec016565b600160a060020a0380841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008282018381101561082557600080fd5b600080610ee785600160a060020a031661146d565b1515610ef65760009150611036565b6040517f88a7ca5c0000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03898116602485015260448401889052608060648501908152875160848601528751918a16946388a7ca5c94938c938b938b93909160a490910190602085019080838360005b83811015610f89578181015183820152602001610f71565b50505050905090810190601f168015610fb65780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610fd857600080fd5b505af1158015610fec573d6000803e3d6000fd5b505050506040513d602081101561100257600080fd5b5051600160e060020a031981167f88a7ca5c0000000000000000000000000000000000000000000000000000000014925090505b50949350505050565b60075461105a8261104e61082c565b9063ffffffff610ec016565b111561106557600080fd5b610a9e8282611475565b600160a060020a038216151561108457600080fd5b600160a060020a0382166000908152600360205260409020548111156110a957600080fd5b6005546110bc908263ffffffff610db516565b600555600160a060020a0382166000908152600360205260409020546110e8908263ffffffff610db516565b600160a060020a0383166000818152600360209081526040808320949094558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600160a060020a038216600090815260046020908152604080832033845290915290205481111561116f57600080fd5b600160a060020a03821660009081526004602090815260408083203384529091529020546111a3908263ffffffff610db516565b600160a060020a0383166000908152600460209081526040808320338452909152902055610a9e828261106f565b6111e260068263ffffffff61152116565b604051600160a060020a038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b61122a60068263ffffffff61156f16565b604051600160a060020a038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b6000600160a060020a038216151561127857600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b6000806112ad85600160a060020a031661146d565b15156112bc57600091506113e7565b84600160a060020a0316637b04a2d03386866040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561133b578181015183820152602001611323565b50505050905090810190601f1680156113685780820380516001836020036101000a031916815260200191505b50945050505050602060405180830381600087803b15801561138957600080fd5b505af115801561139d573d6000803e3d6000fd5b505050506040513d60208110156113b357600080fd5b5051600160e060020a031981167f7b04a2d00000000000000000000000000000000000000000000000000000000014925090505b509392505050565b600160a060020a038116151561140457600080fd5b600954604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36009805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000903b1190565b600160a060020a038216151561148a57600080fd5b60055461149d908263ffffffff610ec016565b600555600160a060020a0382166000908152600360205260409020546114c9908263ffffffff610ec016565b600160a060020a03831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600160a060020a038116151561153657600080fd5b6115408282611261565b1561154a57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b600160a060020a038116151561158457600080fd5b61158e8282611261565b151561159957600080fd5b600160a060020a0316600090815260209190915260409020805460ff191690555600a165627a7a72305820dbcc24d8245b945ac1d2f1e96e8e52bd60b5ea7b4bb99f58239bab6defe5423e0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000033b2e3c9fd0803ce800000000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000000942617365546f6b656e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044241534500000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): BaseToken
Arg [1] : symbol (string): BASE
Arg [2] : decimals (uint8): 18
Arg [3] : cap (uint256): 1000000000000000000000000000
Arg [4] : initialBalance (uint256): 1000000000000000000000000
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000
Arg [4] : 00000000000000000000000000000000000000000000d3c21bcecceda1000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [6] : 42617365546f6b656e0000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [8] : 4241534500000000000000000000000000000000000000000000000000000000
Swarm Source
bzzr://dbcc24d8245b945ac1d2f1e96e8e52bd60b5ea7b4bb99f58239bab6defe5423e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.