ERC-20
Overview
Max Total Supply
2,158 SLV
Holders
24
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 3 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SilverERC20
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-02-18 */ pragma solidity 0.4.23; /** * @title Access Control List (Lightweight version) * * @dev Access control smart contract provides an API to check * if specific operation is permitted globally and * if particular user has a permission to execute it. * @dev This smart contract is designed to be inherited by other * smart contracts which require access control management capabilities. * * @author Basil Gorin */ contract AccessControlLight { /// @notice Role manager is responsible for assigning the roles /// @dev Role ROLE_ROLE_MANAGER allows modifying operator roles uint256 private constant ROLE_ROLE_MANAGER = 0x10000000; /// @notice Feature manager is responsible for enabling/disabling /// global features of the smart contract /// @dev Role ROLE_FEATURE_MANAGER allows modifying global features uint256 private constant ROLE_FEATURE_MANAGER = 0x20000000; /// @dev Bitmask representing all the possible permissions (super admin role) uint256 private constant FULL_PRIVILEGES_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /// @dev A bitmask of globally enabled features uint256 public features; /// @notice Privileged addresses with defined roles/permissions /// @notice In the context of ERC20/ERC721 tokens these can be permissions to /// allow minting tokens, transferring on behalf and so on /// @dev Maps an address to the permissions bitmask (role), where each bit /// represents a permission /// @dev Bitmask 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF /// represents all possible permissions mapping(address => uint256) public userRoles; /// @dev Fired in updateFeatures() event FeaturesUpdated(address indexed _by, uint256 _requested, uint256 _actual); /// @dev Fired in updateRole() event RoleUpdated(address indexed _by, address indexed _to, uint256 _requested, uint256 _actual); /** * @dev Creates an access control instance, * setting contract creator to have full privileges */ constructor() public { // contract creator has full privileges userRoles[msg.sender] = FULL_PRIVILEGES_MASK; } /** * @dev Updates set of the globally enabled features (`features`), * taking into account sender's permissions.= * @dev Requires transaction sender to have `ROLE_FEATURE_MANAGER` permission. * @param mask bitmask representing a set of features to enable/disable */ function updateFeatures(uint256 mask) public { // caller must have a permission to update global features require(isSenderInRole(ROLE_FEATURE_MANAGER)); // evaluate new features set and assign them features = evaluateBy(msg.sender, features, mask); // fire an event emit FeaturesUpdated(msg.sender, mask, features); } /** * @dev Updates set of permissions (role) for a given operator, * taking into account sender's permissions. * @dev Setting role to zero is equivalent to removing an operator. * @dev Setting role to `FULL_PRIVILEGES_MASK` is equivalent to * copying senders permissions (role) to an operator. * @dev Requires transaction sender to have `ROLE_ROLE_MANAGER` permission. * @param operator address of an operator to alter permissions for * @param role bitmask representing a set of permissions to * enable/disable for an operator specified */ function updateRole(address operator, uint256 role) public { // caller must have a permission to update user roles require(isSenderInRole(ROLE_ROLE_MANAGER)); // evaluate the role and reassign it userRoles[operator] = evaluateBy(msg.sender, userRoles[operator], role); // fire an event emit RoleUpdated(msg.sender, operator, role, userRoles[operator]); } /** * @dev Based on the actual role provided (set of permissions), operator address, * and role required (set of permissions), calculate the resulting * set of permissions (role). * @dev If operator is super admin and has full permissions (FULL_PRIVILEGES_MASK), * the function will always return `required` regardless of the `actual`. * @dev In contrast, if operator has no permissions at all (zero mask), * the function will always return `actual` regardless of the `required`. * @param operator address of the contract operator to use permissions of * @param actual input set of permissions to modify * @param required desired set of permissions operator would like to have * @return resulting set of permissions this operator can set */ function evaluateBy(address operator, uint256 actual, uint256 required) public constant returns(uint256) { // read operator's permissions uint256 p = userRoles[operator]; // taking into account operator's permissions, // 1) enable permissions requested on the `current` actual |= p & required; // 2) disable permissions requested on the `current` actual &= FULL_PRIVILEGES_MASK ^ (p & (FULL_PRIVILEGES_MASK ^ required)); // return calculated result (actual is not modified) return actual; } /** * @dev Checks if requested set of features is enabled globally on the contract * @param required set of features to check * @return true if all the features requested are enabled, false otherwise */ function isFeatureEnabled(uint256 required) public constant returns(bool) { // delegate call to `__hasRole`, passing `features` property return __hasRole(features, required); } /** * @dev Checks if transaction sender `msg.sender` has all the permissions (role) required * @param required set of permissions (role) to check * @return true if all the permissions requested are enabled, false otherwise */ function isSenderInRole(uint256 required) public constant returns(bool) { // delegate call to `isOperatorInRole`, passing transaction sender return isOperatorInRole(msg.sender, required); } /** * @dev Checks if operator `operator` has all the permissions (role) required * @param required set of permissions (role) to check * @return true if all the permissions requested are enabled, false otherwise */ function isOperatorInRole(address operator, uint256 required) public constant returns(bool) { // delegate call to `__hasRole`, passing operator's permissions (role) return __hasRole(userRoles[operator], required); } /// @dev Checks if role `actual` contains all the permissions required `required` function __hasRole(uint256 actual, uint256 required) internal pure returns(bool) { // check the bitmask for the role required and return the result return actual & required == required; } } /** * @title Address Utils * * @dev Utility library of inline functions on addresses */ library AddressUtils { /** * @notice Checks if 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 addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { // a variable to load `extcodesize` to uint256 size = 0; // 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. // solium-disable-next-line security/no-inline-assembly assembly { // retrieve the size of the code at address `addr` size := extcodesize(addr) } // positive size indicates a smart contract address return size > 0; } } /** * @title ERC20 token receiver interface * * @dev Interface for any contract that wants to support safe transfers * from ERC20 token smart contracts. * @dev Inspired by ERC721 and ERC223 token standards * * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md * @dev See https://github.com/ethereum/EIPs/issues/223 * * @author Basil Gorin */ interface ERC20Receiver { /** * @notice Handle the receipt of a ERC20 token(s) * @dev The ERC20 smart contract calls this function on the recipient * after a successful transfer (`safeTransferFrom`). * This function MAY throw to revert and reject the transfer. * Return of other than the magic value MUST result in the transaction being reverted. * @notice The contract address is always the message sender. * A wallet/broker/auction application MUST implement the wallet interface * if it will accept safe transfers. * @param _operator The address which called `safeTransferFrom` function * @param _from The address which previously owned the token * @param _value amount of tokens which is being transferred * @param _data additional data with no specified format * @return `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))` unless throwing */ function onERC20Received(address _operator, address _from, uint256 _value, bytes _data) external returns(bytes4); } /** * @title Gold Smart Contract * * @notice Gold is a transferable fungible entity (ERC20 token) * used to "pay" for in game services like gem upgrades, etc. * @notice Gold is a part of Gold/Silver system, which allows to * upgrade gems (level, grade, etc.) * * @dev Gold is mintable and burnable entity, * meaning it can be created or destroyed by the authorized addresses * @dev An address authorized can mint/burn its own tokens (own balance) as well * as tokens owned by another address (additional permission level required) * * @author Basil Gorin */ contract GoldERC20 is AccessControlLight { /** * @dev Smart contract version * @dev Should be incremented manually in this source code * each time smart contact source code is changed and deployed * @dev To distinguish from other tokens must be multiple of 0x100 */ uint32 public constant TOKEN_VERSION = 0x300; /** * @notice ERC20 symbol of that token (short name) */ string public constant symbol = "GLD"; /** * @notice ERC20 name of the token (long name) */ string public constant name = "GOLD - CryptoMiner World"; /** * @notice ERC20 decimals (number of digits to draw after the dot * in the UI applications (like MetaMask, other wallets and so on) */ uint8 public constant decimals = 3; /** * @notice Based on the value of decimals above, one token unit * represents native number of tokens which is displayed * in the UI applications as one (1 or 1.0, 1.00, etc.) */ uint256 public constant ONE_UNIT = uint256(10) ** decimals; /** * @notice A record of all the players token balances * @dev This mapping keeps record of all token owners */ mapping(address => uint256) private tokenBalances; /** * @notice Total amount of tokens tracked by this smart contract * @dev Equal to sum of all token balances `tokenBalances` */ uint256 private tokensTotal; /** * @notice A record of all the allowances to spend tokens on behalf * @dev Maps token owner address to an address approved to spend * some tokens on behalf, maps approved address to that amount */ mapping(address => mapping(address => uint256)) private transferAllowances; /** * @notice Enables ERC20 transfers of the tokens * (transfer by the token owner himself) * @dev Feature FEATURE_TRANSFERS must be enabled to * call `transfer()` function */ uint32 public constant FEATURE_TRANSFERS = 0x00000001; /** * @notice Enables ERC20 transfers on behalf * (transfer by someone else on behalf of token owner) * @dev Feature FEATURE_TRANSFERS_ON_BEHALF must be enabled to * call `transferFrom()` function * @dev Token owner must call `approve()` first to authorize * the transfer on behalf */ uint32 public constant FEATURE_TRANSFERS_ON_BEHALF = 0x00000002; /** * @notice Token creator is responsible for creating (minting) * tokens to some player address * @dev Role ROLE_TOKEN_CREATOR allows minting tokens * (calling `mint` and `mintTo` functions) */ uint32 public constant ROLE_TOKEN_CREATOR = 0x00000001; /** * @notice Token destroyer is responsible for destroying (burning) * tokens owned by some player address * @dev Role ROLE_TOKEN_DESTROYER allows burning tokens * (calling `burn` and `burnFrom` functions) */ uint32 public constant ROLE_TOKEN_DESTROYER = 0x00000002; /** * @dev Magic value to be returned by ERC20Receiver upon successful reception of token(s) * @dev Equal to `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))`, * which can be also obtained as `ERC20Receiver(0).onERC20Received.selector` */ bytes4 private constant ERC20_RECEIVED = 0x4fc35859; /** * @dev Fired in transfer() and transferFrom() functions * @param _from an address which performed the transfer * @param _to an address tokens were sent to * @param _value number of tokens transferred */ event Transfer(address indexed _from, address indexed _to, uint256 _value); /** * @dev Fired in approve() function * @param _owner an address which granted a permission to transfer * tokens on its behalf * @param _spender an address which received a permission to transfer * tokens on behalf of the owner `_owner` */ event Approval(address indexed _owner, address indexed _spender, uint256 _value); /** * @dev Fired in mint() function * @param _by an address which minted some tokens (transaction sender) * @param _to an address the tokens were minted to * @param _value an amount of tokens minted */ event Minted(address indexed _by, address indexed _to, uint256 _value); /** * @dev Fired in burn() function * @param _by an address which burned some tokens (transaction sender) * @param _from an address the tokens were burnt from * @param _value an amount of tokens burnt */ event Burnt(address indexed _by, address indexed _from, uint256 _value); /** * @notice Total number of tokens tracked by this smart contract * @dev Equal to sum of all token balances * @return total number of tokens */ function totalSupply() public constant returns (uint256) { // read total tokens value and return return tokensTotal; } /** * @notice Gets the balance of particular address * @dev Gets the balance of the specified address * @param _owner the address to query the the balance for * @return an amount of tokens owned by the address specified */ function balanceOf(address _owner) public constant returns (uint256) { // read the balance from storage and return return tokenBalances[_owner]; } /** * @dev A function to check an amount of tokens owner approved * to transfer on its behalf by some other address called "spender" * @param _owner an address which approves transferring some tokens on its behalf * @param _spender an address approved to transfer some tokens on behalf * @return an amount of tokens approved address `_spender` can transfer on behalf * of token owner `_owner` */ function allowance(address _owner, address _spender) public constant returns (uint256) { // read the value from storage and return return transferAllowances[_owner][_spender]; } /** * @notice Transfers some tokens to an address `_to` * @dev Called by token owner (an address which has a * positive token balance tracked by this smart contract) * @dev Throws on any error like * * incorrect `_value` (zero) or * * insufficient token balance or * * incorrect `_to` address: * * zero address or * * self address or * * smart contract which doesn't support ERC20 * @param _to an address to transfer tokens to, * must be either an external address or a smart contract, * compliant with the ERC20 standard * @param _value amount of tokens to be transferred, must * be greater than zero * @return true on success, throws otherwise */ function transfer(address _to, uint256 _value) public returns (bool) { // just delegate call to `transferFrom`, // `FEATURE_TRANSFERS` is verified inside it return transferFrom(msg.sender, _to, _value); } /** * @notice Transfers some tokens on behalf of address `_from' (token owner) * to some other address `_to` * @dev Called by token owner on his own or approved address, * an address approved earlier by token owner to * transfer some amount of tokens on its behalf * @dev Throws on any error like * * incorrect `_value` (zero) or * * insufficient token balance or * * incorrect `_to` address: * * zero address or * * same as `_from` address (self transfer) * * smart contract which doesn't support ERC20 * @param _from token owner which approved caller (transaction sender) * to transfer `_value` of tokens on its behalf * @param _to an address to transfer tokens to, * must be either an external address or a smart contract, * compliant with the ERC20 standard * @param _value amount of tokens to be transferred, must * be greater than zero * @return true on success, throws otherwise */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { // just delegate call to `safeTransferFrom`, passing empty `_data`, // `FEATURE_TRANSFERS` is verified inside it safeTransferFrom(_from, _to, _value, ""); // `safeTransferFrom` throws of any error, so // if we're here - it means operation successful, // just return true return true; } /** * @notice Transfers some tokens on behalf of address `_from' (token owner) * to some other address `_to` * @dev Inspired by ERC721 safeTransferFrom, this function allows to * send arbitrary data to the receiver on successful token transfer * @dev Called by token owner on his own or approved address, * an address approved earlier by token owner to * transfer some amount of tokens on its behalf * @dev Throws on any error like * * incorrect `_value` (zero) or * * insufficient token balance or * * incorrect `_to` address: * * zero address or * * same as `_from` address (self transfer) * * smart contract which doesn't support ERC20Receiver interface * @param _from token owner which approved caller (transaction sender) * to transfer `_value` of tokens on its behalf * @param _to an address to transfer tokens to, * must be either an external address or a smart contract, * compliant with the ERC20 standard * @param _value amount of tokens to be transferred, must * be greater than zero * @param _data [optional] additional data with no specified format, * sent in onERC20Received call to `_to` in case if its a smart contract * @return true on success, throws otherwise */ function safeTransferFrom(address _from, address _to, uint256 _value, bytes _data) public { // first delegate call to `unsafeTransferFrom` // to perform the unsafe token(s) transfer unsafeTransferFrom(_from, _to, _value); // after the successful transfer – check if receiver supports // ERC20Receiver and execute a callback handler `onERC20Received`, // reverting whole transaction on any error: // check if receiver `_to` supports ERC20Receiver interface if (AddressUtils.isContract(_to)) { // if `_to` is a contract – execute onERC20Received bytes4 response = ERC20Receiver(_to).onERC20Received(msg.sender, _from, _value, _data); // expected response is ERC20_RECEIVED require(response == ERC20_RECEIVED); } } /** * @notice Transfers some tokens on behalf of address `_from' (token owner) * to some other address `_to` * @dev In contrast to `safeTransferFrom` doesn't check recipient * smart contract to support ERC20 tokens (ERC20Receiver) * @dev Designed to be used by developers when the receiver is known * to support ERC20 tokens but doesn't implement ERC20Receiver interface * @dev Called by token owner on his own or approved address, * an address approved earlier by token owner to * transfer some amount of tokens on its behalf * @dev Throws on any error like * * incorrect `_value` (zero) or * * insufficient token balance or * * incorrect `_to` address: * * zero address or * * same as `_from` address (self transfer) * @param _from token owner which approved caller (transaction sender) * to transfer `_value` of tokens on its behalf * @param _to an address to transfer tokens to, * must be either an external address or a smart contract, * compliant with the ERC20 standard * @param _value amount of tokens to be transferred, must * be greater than zero * @return true on success, throws otherwise */ function unsafeTransferFrom(address _from, address _to, uint256 _value) public { // if `_from` is equal to sender, require transfers feature to be enabled // otherwise require transfers on behalf feature to be enabled require(_from == msg.sender && isFeatureEnabled(FEATURE_TRANSFERS) || _from != msg.sender && isFeatureEnabled(FEATURE_TRANSFERS_ON_BEHALF)); // non-zero to address check require(_to != address(0)); // sender and recipient cannot be the same require(_from != _to); // zero value transfer check require(_value != 0); // by design of mint() - // - no need to make arithmetic overflow check on the _value // in case of transfer on behalf if(_from != msg.sender) { // verify sender has an allowance to transfer amount of tokens requested require(transferAllowances[_from][msg.sender] >= _value); // decrease the amount of tokens allowed to transfer transferAllowances[_from][msg.sender] -= _value; } // verify sender has enough tokens to transfer on behalf require(tokenBalances[_from] >= _value); // perform the transfer: // decrease token owner (sender) balance tokenBalances[_from] -= _value; // increase `_to` address (receiver) balance tokenBalances[_to] += _value; // emit an ERC20 transfer event emit Transfer(_from, _to, _value); } /** * @notice Approves address called "spender" to transfer some amount * of tokens on behalf of the owner * @dev Caller must not necessarily own any tokens to grant the permission * @param _spender an address approved by the caller (token owner) * to spend some tokens on its behalf * @param _value an amount of tokens spender `_spender` is allowed to * transfer on behalf of the token owner * @return true on success, throws otherwise */ function approve(address _spender, uint256 _value) public returns (bool) { // perform an operation: write value requested into the storage transferAllowances[msg.sender][_spender] = _value; // emit an event emit Approval(msg.sender, _spender, _value); // operation successful, return true return true; } /** * @dev Mints (creates) some tokens to address specified * @dev The value passed is treated as number of units (see `ONE_UNIT`) * to achieve natural impression on token quantity * @dev Requires sender to have `ROLE_TOKEN_CREATOR` permission * @param _to an address to mint tokens to * @param _value an amount of tokens to mint (create) */ function mint(address _to, uint256 _value) public { // calculate native value, taking into account `decimals` uint256 value = _value * ONE_UNIT; // arithmetic overflow and non-zero value check require(value > _value); // delegate call to native `mintNative` mintNative(_to, value); } /** * @dev Mints (creates) some tokens to address specified * @dev The value specified is treated as is without taking * into account what `decimals` value is * @dev Requires sender to have `ROLE_TOKEN_CREATOR` permission * @param _to an address to mint tokens to * @param _value an amount of tokens to mint (create) */ function mintNative(address _to, uint256 _value) public { // check if caller has sufficient permissions to mint tokens require(isSenderInRole(ROLE_TOKEN_CREATOR)); // non-zero recipient address check require(_to != address(0)); // non-zero _value and arithmetic overflow check on the total supply // this check automatically secures arithmetic overflow on the individual balance require(tokensTotal + _value > tokensTotal); // increase `_to` address balance tokenBalances[_to] += _value; // increase total amount of tokens value tokensTotal += _value; // fire ERC20 compliant transfer event emit Transfer(address(0), _to, _value); // fire a mint event emit Minted(msg.sender, _to, _value); } /** * @dev Burns (destroys) some tokens from the address specified * @dev The value passed is treated as number of units (see `ONE_UNIT`) * to achieve natural impression on token quantity * @dev Requires sender to have `ROLE_TOKEN_DESTROYER` permission * @param _from an address to burn some tokens from * @param _value an amount of tokens to burn (destroy) */ function burn(address _from, uint256 _value) public { // calculate native value, taking into account `decimals` uint256 value = _value * ONE_UNIT; // arithmetic overflow and non-zero value check require(value > _value); // delegate call to native `burnNative` burnNative(_from, value); } /** * @dev Burns (destroys) some tokens from the address specified * @dev The value specified is treated as is without taking * into account what `decimals` value is * @dev Requires sender to have `ROLE_TOKEN_DESTROYER` permission * @param _from an address to burn some tokens from * @param _value an amount of tokens to burn (destroy) */ function burnNative(address _from, uint256 _value) public { // check if caller has sufficient permissions to burn tokens require(isSenderInRole(ROLE_TOKEN_DESTROYER)); // non-zero burn value check require(_value != 0); // verify `_from` address has enough tokens to destroy // (basically this is a arithmetic overflow check) require(tokenBalances[_from] >= _value); // decrease `_from` address balance tokenBalances[_from] -= _value; // decrease total amount of tokens value tokensTotal -= _value; // fire ERC20 compliant transfer event emit Transfer(_from, address(0), _value); // fire a burn event emit Burnt(msg.sender, _from, _value); } } /** * @title Silver Smart Contract * * @notice Silver is a transferable fungible entity (ERC20 token) * used to "pay" for in game services like gem upgrades, etc. * @notice Silver is a part of Gold/Silver system, which allows to * upgrade gems (level, grade, etc.) * * @dev Silver is mintable and burnable entity, * meaning it can be created or destroyed by the authorized addresses * @dev An address authorized can mint/burn its own tokens (own balance) as well * as tokens owned by another address (additional permission level required) * * @author Basil Gorin */ contract SilverERC20 is GoldERC20 { /** * @dev Smart contract version * @dev Should be incremented manually in this source code * each time smart contact source code is changed * @dev To distinguish from other tokens must be multiple of 0x10 */ uint32 public constant TOKEN_VERSION = 0x30; /** * @notice ERC20 symbol of that token (short name) */ string public constant symbol = "SLV"; /** * @notice ERC20 name of the token (long name) */ string public constant name = "SILVER - CryptoMiner World"; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":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":"features","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_VERSION","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burnNative","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"unsafeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"mintNative","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":true,"inputs":[{"name":"required","type":"uint256"}],"name":"isFeatureEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"userRoles","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ROLE_TOKEN_CREATOR","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"FEATURE_TRANSFERS_ON_BEHALF","outputs":[{"name":"","type":"uint32"}],"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":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"burn","outputs":[],"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":false,"inputs":[{"name":"operator","type":"address"},{"name":"role","type":"uint256"}],"name":"updateRole","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"FEATURE_TRANSFERS","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"operator","type":"address"},{"name":"required","type":"uint256"}],"name":"isOperatorInRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"mask","type":"uint256"}],"name":"updateFeatures","outputs":[],"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":true,"inputs":[],"name":"ROLE_TOKEN_DESTROYER","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ONE_UNIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"operator","type":"address"},{"name":"actual","type":"uint256"},{"name":"required","type":"uint256"}],"name":"evaluateBy","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"required","type":"uint256"}],"name":"isSenderInRole","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"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"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Burnt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":false,"name":"_requested","type":"uint256"},{"indexed":false,"name":"_actual","type":"uint256"}],"name":"FeaturesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_by","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_requested","type":"uint256"},{"indexed":false,"name":"_actual","type":"uint256"}],"name":"RoleUpdated","type":"event"}]
Contract Creation Code
60806040908152600160a060020a03331660009081526001602052206000199055610e628061002f6000396000f3006080604052600436106101745763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610179578063095ea7b31461020357806318160ddd1461023b57806323b872dd146102625780632b5214161461028c578063313ce567146102a157806332892177146102cc5780633a9e0e13146102fa57806340c10f191461032057806359b961ef1461034457806362aaa1601461036e57806370a0823114610392578063725f3626146103b357806374d5e100146103cb5780638d4e57e6146103ec5780638f6fba8c1461040157806395d89b41146104165780639dc29fac1461042b578063a9059cbb1461044f578063ae5b102e14610473578063b88d4fde14610497578063c0d6568d146103ec578063c688d69314610506578063d5bb7f671461052a578063dd62ed3e14610542578063e62cac7614610401578063eb43af0014610569578063f822d5aa1461057e578063fcc2c078146105a5575b600080fd5b34801561018557600080fd5b5061018e6105bd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c85781810151838201526020016101b0565b50505050905090810190601f1680156101f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020f57600080fd5b50610227600160a060020a03600435166024356105f4565b604080519115158252519081900360200190f35b34801561024757600080fd5b5061025061065e565b60408051918252519081900360200190f35b34801561026e57600080fd5b50610227600160a060020a0360043581169060243516604435610664565b34801561029857600080fd5b5061025061068c565b3480156102ad57600080fd5b506102b6610692565b6040805160ff9092168252519081900360200190f35b3480156102d857600080fd5b506102e1610697565b6040805163ffffffff9092168252519081900360200190f35b34801561030657600080fd5b5061031e600160a060020a036004351660243561069c565b005b34801561032c57600080fd5b5061031e600160a060020a0360043516602435610791565b34801561035057600080fd5b5061031e600160a060020a03600435811690602435166044356107b1565b34801561037a57600080fd5b5061031e600160a060020a0360043516602435610956565b34801561039e57600080fd5b50610250600160a060020a0360043516610a3a565b3480156103bf57600080fd5b50610227600435610a55565b3480156103d757600080fd5b50610250600160a060020a0360043516610a69565b3480156103f857600080fd5b506102e1610a7b565b34801561040d57600080fd5b506102e1610a80565b34801561042257600080fd5b5061018e610a85565b34801561043757600080fd5b5061031e600160a060020a0360043516602435610abc565b34801561045b57600080fd5b50610227600160a060020a0360043516602435610ad7565b34801561047f57600080fd5b5061031e600160a060020a0360043516602435610aeb565b3480156104a357600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261031e94600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750610b8c9650505050505050565b34801561051257600080fd5b50610227600160a060020a0360043516602435610d2a565b34801561053657600080fd5b5061031e600435610d4d565b34801561054e57600080fd5b50610250600160a060020a0360043581169060243516610dbf565b34801561057557600080fd5b50610250610dea565b34801561058a57600080fd5b50610250600160a060020a0360043516602435604435610df0565b3480156105b157600080fd5b50610227600435610e1b565b60408051808201909152601a81527f53494c564552202d2043727970746f4d696e657220576f726c64000000000000602082015281565b600160a060020a03338116600081815260046020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60035490565b60006106828484846020604051908101604052806000815250610b8c565b5060019392505050565b60005481565b600381565b603081565b6106a66002610e1b565b15156106b157600080fd5b8015156106bd57600080fd5b600160a060020a0382166000908152600260205260409020548111156106e257600080fd5b600160a060020a038216600081815260026020908152604080832080548690039055600380548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a381600160a060020a031633600160a060020a03167fe8a89cc6e5096f9d9f43de82c077c1f4cfe707c0e0c2032176c68813b9ae6a5c836040518082815260200191505060405180910390a35050565b6103e881028181116107a257600080fd5b6107ac8382610956565b505050565b33600160a060020a031683600160a060020a03161480156107d757506107d76001610a55565b80610804575033600160a060020a031683600160a060020a03161415801561080457506108046002610a55565b151561080f57600080fd5b600160a060020a038216151561082457600080fd5b600160a060020a03838116908316141561083d57600080fd5b80151561084957600080fd5b33600160a060020a031683600160a060020a03161415156108c557600160a060020a038084166000908152600460209081526040808320339094168352929052205481111561089757600080fd5b600160a060020a03808416600090815260046020908152604080832033909416835292905220805482900390555b600160a060020a0383166000908152600260205260409020548111156108ea57600080fd5b600160a060020a03808416600081815260026020908152604080832080548790039055938616808352918490208054860190558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505050565b6109606001610e1b565b151561096b57600080fd5b600160a060020a038216151561098057600080fd5b6003548181011161099057600080fd5b600160a060020a03821660008181526002602090815260408083208054860190556003805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a381600160a060020a031633600160a060020a03167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0836040518082815260200191505060405180910390a35050565b600160a060020a031660009081526002602052604090205490565b6000610a6360005483610e27565b92915050565b60016020526000908152604090205481565b600181565b600281565b60408051808201909152600381527f534c560000000000000000000000000000000000000000000000000000000000602082015281565b6103e88102818111610acd57600080fd5b6107ac838261069c565b6000610ae4338484610664565b9392505050565b610af86310000000610e1b565b1515610b0357600080fd5b600160a060020a038216600090815260016020526040902054610b2890339083610df0565b600160a060020a038084166000818152600160209081526040918290208590558151868152908101949094528051919333909316927f5a10526456f5116c0b7b80582c217d666243fd51b6a2d92c8011e601c2462e5f929081900390910190a35050565b6000610b998585856107b1565b610ba284610e2e565b15610d235783600160a060020a0316634fc35859338786866040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c58578181015183820152602001610c40565b50505050905090810190601f168015610c855780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b505050506040513d6020811015610cd157600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167f4fc358590000000000000000000000000000000000000000000000000000000014610d2357600080fd5b5050505050565b600160a060020a038216600090815260016020526040812054610ae49083610e27565b610d5a6320000000610e1b565b1515610d6557600080fd5b610d723360005483610df0565b60008190556040805183815260208101929092528051600160a060020a033316927fd7561eaef77f105dc0c307bfb23c571f603f07bb7db5766a68840742fde80b8992908290030190a250565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205490565b6103e881565b600160a060020a03929092166000908152600160205260409020546000198084188216189216171690565b6000610a633383610d2a565b9081161490565b6000903b11905600a165627a7a72305820424cd2cfceadcaea76998551c19a706208c4b7045a0330f928f447e58382b2340029
Deployed Bytecode
0x6080604052600436106101745763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610179578063095ea7b31461020357806318160ddd1461023b57806323b872dd146102625780632b5214161461028c578063313ce567146102a157806332892177146102cc5780633a9e0e13146102fa57806340c10f191461032057806359b961ef1461034457806362aaa1601461036e57806370a0823114610392578063725f3626146103b357806374d5e100146103cb5780638d4e57e6146103ec5780638f6fba8c1461040157806395d89b41146104165780639dc29fac1461042b578063a9059cbb1461044f578063ae5b102e14610473578063b88d4fde14610497578063c0d6568d146103ec578063c688d69314610506578063d5bb7f671461052a578063dd62ed3e14610542578063e62cac7614610401578063eb43af0014610569578063f822d5aa1461057e578063fcc2c078146105a5575b600080fd5b34801561018557600080fd5b5061018e6105bd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c85781810151838201526020016101b0565b50505050905090810190601f1680156101f55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561020f57600080fd5b50610227600160a060020a03600435166024356105f4565b604080519115158252519081900360200190f35b34801561024757600080fd5b5061025061065e565b60408051918252519081900360200190f35b34801561026e57600080fd5b50610227600160a060020a0360043581169060243516604435610664565b34801561029857600080fd5b5061025061068c565b3480156102ad57600080fd5b506102b6610692565b6040805160ff9092168252519081900360200190f35b3480156102d857600080fd5b506102e1610697565b6040805163ffffffff9092168252519081900360200190f35b34801561030657600080fd5b5061031e600160a060020a036004351660243561069c565b005b34801561032c57600080fd5b5061031e600160a060020a0360043516602435610791565b34801561035057600080fd5b5061031e600160a060020a03600435811690602435166044356107b1565b34801561037a57600080fd5b5061031e600160a060020a0360043516602435610956565b34801561039e57600080fd5b50610250600160a060020a0360043516610a3a565b3480156103bf57600080fd5b50610227600435610a55565b3480156103d757600080fd5b50610250600160a060020a0360043516610a69565b3480156103f857600080fd5b506102e1610a7b565b34801561040d57600080fd5b506102e1610a80565b34801561042257600080fd5b5061018e610a85565b34801561043757600080fd5b5061031e600160a060020a0360043516602435610abc565b34801561045b57600080fd5b50610227600160a060020a0360043516602435610ad7565b34801561047f57600080fd5b5061031e600160a060020a0360043516602435610aeb565b3480156104a357600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261031e94600160a060020a038135811695602480359092169560443595369560849401918190840183828082843750949750610b8c9650505050505050565b34801561051257600080fd5b50610227600160a060020a0360043516602435610d2a565b34801561053657600080fd5b5061031e600435610d4d565b34801561054e57600080fd5b50610250600160a060020a0360043581169060243516610dbf565b34801561057557600080fd5b50610250610dea565b34801561058a57600080fd5b50610250600160a060020a0360043516602435604435610df0565b3480156105b157600080fd5b50610227600435610e1b565b60408051808201909152601a81527f53494c564552202d2043727970746f4d696e657220576f726c64000000000000602082015281565b600160a060020a03338116600081815260046020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a350600192915050565b60035490565b60006106828484846020604051908101604052806000815250610b8c565b5060019392505050565b60005481565b600381565b603081565b6106a66002610e1b565b15156106b157600080fd5b8015156106bd57600080fd5b600160a060020a0382166000908152600260205260409020548111156106e257600080fd5b600160a060020a038216600081815260026020908152604080832080548690039055600380548690039055805185815290519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a381600160a060020a031633600160a060020a03167fe8a89cc6e5096f9d9f43de82c077c1f4cfe707c0e0c2032176c68813b9ae6a5c836040518082815260200191505060405180910390a35050565b6103e881028181116107a257600080fd5b6107ac8382610956565b505050565b33600160a060020a031683600160a060020a03161480156107d757506107d76001610a55565b80610804575033600160a060020a031683600160a060020a03161415801561080457506108046002610a55565b151561080f57600080fd5b600160a060020a038216151561082457600080fd5b600160a060020a03838116908316141561083d57600080fd5b80151561084957600080fd5b33600160a060020a031683600160a060020a03161415156108c557600160a060020a038084166000908152600460209081526040808320339094168352929052205481111561089757600080fd5b600160a060020a03808416600090815260046020908152604080832033909416835292905220805482900390555b600160a060020a0383166000908152600260205260409020548111156108ea57600080fd5b600160a060020a03808416600081815260026020908152604080832080548790039055938616808352918490208054860190558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a3505050565b6109606001610e1b565b151561096b57600080fd5b600160a060020a038216151561098057600080fd5b6003548181011161099057600080fd5b600160a060020a03821660008181526002602090815260408083208054860190556003805486019055805185815290517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929181900390910190a381600160a060020a031633600160a060020a03167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0836040518082815260200191505060405180910390a35050565b600160a060020a031660009081526002602052604090205490565b6000610a6360005483610e27565b92915050565b60016020526000908152604090205481565b600181565b600281565b60408051808201909152600381527f534c560000000000000000000000000000000000000000000000000000000000602082015281565b6103e88102818111610acd57600080fd5b6107ac838261069c565b6000610ae4338484610664565b9392505050565b610af86310000000610e1b565b1515610b0357600080fd5b600160a060020a038216600090815260016020526040902054610b2890339083610df0565b600160a060020a038084166000818152600160209081526040918290208590558151868152908101949094528051919333909316927f5a10526456f5116c0b7b80582c217d666243fd51b6a2d92c8011e601c2462e5f929081900390910190a35050565b6000610b998585856107b1565b610ba284610e2e565b15610d235783600160a060020a0316634fc35859338786866040518563ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c58578181015183820152602001610c40565b50505050905090810190601f168015610c855780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015610ca757600080fd5b505af1158015610cbb573d6000803e3d6000fd5b505050506040513d6020811015610cd157600080fd5b505190507fffffffff0000000000000000000000000000000000000000000000000000000081167f4fc358590000000000000000000000000000000000000000000000000000000014610d2357600080fd5b5050505050565b600160a060020a038216600090815260016020526040812054610ae49083610e27565b610d5a6320000000610e1b565b1515610d6557600080fd5b610d723360005483610df0565b60008190556040805183815260208101929092528051600160a060020a033316927fd7561eaef77f105dc0c307bfb23c571f603f07bb7db5766a68840742fde80b8992908290030190a250565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205490565b6103e881565b600160a060020a03929092166000908152600160205260409020546000198084188216189216171690565b6000610a633383610d2a565b9081161490565b6000903b11905600a165627a7a72305820424cd2cfceadcaea76998551c19a706208c4b7045a0330f928f447e58382b2340029
Swarm Source
bzzr://424cd2cfceadcaea76998551c19a706208c4b7045a0330f928f447e58382b234
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.