ETH Price: $1,658.91 (+2.54%)
Gas: 7 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

CryptoFranc (XCHF) (@$1.089)

Multi Chain

Transaction Hash
Method
Block
From
To
Value
Approve182393582023-09-29 5:41:231 hr 20 mins ago1695966083IN
CryptoFranc: XCHF Token
0 ETH0.000177156.1969261
Approve182393542023-09-29 5:40:351 hr 21 mins ago1695966035IN
CryptoFranc: XCHF Token
0 ETH0.000309446.38198161
Approve182390412023-09-29 4:37:352 hrs 24 mins ago1695962255IN
CryptoFranc: XCHF Token
0 ETH0.000190066.64854193
Approve182359882023-09-28 18:22:1112 hrs 39 mins ago1695925331IN
CryptoFranc: XCHF Token
0 ETH0.0009780920.04792627
Approve182357902023-09-28 17:42:1113 hrs 19 mins ago1695922931IN
CryptoFranc: XCHF Token
0 ETH0.0009311119.21728937
Approve182341552023-09-28 12:12:5918 hrs 49 mins ago1695903179IN
CryptoFranc: XCHF Token
0 ETH0.000297879.48642679
Transfer182338632023-09-28 11:13:5919 hrs 48 mins ago1695899639IN
CryptoFranc: XCHF Token
0 ETH0.00036747.05802695
Transfer182337842023-09-28 10:58:1120 hrs 3 mins ago1695898691IN
CryptoFranc: XCHF Token
0 ETH0.000472317.55384376
Transfer182337842023-09-28 10:58:1120 hrs 3 mins ago1695898691IN
CryptoFranc: XCHF Token
0 ETH0.000499267.73621276
Transfer182337842023-09-28 10:58:1120 hrs 3 mins ago1695898691IN
CryptoFranc: XCHF Token
0 ETH0.000408056.95515461
Approve182337632023-09-28 10:53:5920 hrs 8 mins ago1695898439IN
CryptoFranc: XCHF Token
0 ETH0.000226197.91217346
Approve182337602023-09-28 10:53:1120 hrs 8 mins ago1695898391IN
CryptoFranc: XCHF Token
0 ETH0.000222267.77488384
Transfer182334492023-09-28 9:50:3521 hrs 11 mins ago1695894635IN
CryptoFranc: XCHF Token
0 ETH0.000419737.15427889
Transfer182334172023-09-28 9:43:5921 hrs 18 mins ago1695894239IN
CryptoFranc: XCHF Token
0 ETH0.00070879.65709936
Approve182332582023-09-28 9:11:3521 hrs 50 mins ago1695892295IN
CryptoFranc: XCHF Token
0 ETH0.000229758.03686189
Approve182319342023-09-28 4:42:591 day 2 hrs ago1695876179IN
CryptoFranc: XCHF Token
0 ETH0.000346177.13929484
Approve182318762023-09-28 4:31:111 day 2 hrs ago1695875471IN
CryptoFranc: XCHF Token
0 ETH0.000220137.70022726
Approve182318752023-09-28 4:30:591 day 2 hrs ago1695875459IN
CryptoFranc: XCHF Token
0 ETH0.000226057.90738108
Approve182318732023-09-28 4:30:351 day 2 hrs ago1695875435IN
CryptoFranc: XCHF Token
0 ETH0.000388378.00970236
Transfer182288052023-09-27 18:13:111 day 12 hrs ago1695838391IN
CryptoFranc: XCHF Token
0 ETH0.001093421
Transfer182285772023-09-27 17:26:591 day 13 hrs ago1695835619IN
CryptoFranc: XCHF Token
0 ETH0.0012429123.8825121
Transfer182285602023-09-27 17:23:351 day 13 hrs ago1695835415IN
CryptoFranc: XCHF Token
0 ETH0.0010273522.90091357
Transfer182275812023-09-27 14:06:351 day 16 hrs ago1695823595IN
CryptoFranc: XCHF Token
0 ETH0.0009130120.35206265
Approve182273472023-09-27 13:19:111 day 17 hrs ago1695820751IN
CryptoFranc: XCHF Token
0 ETH0.0003428310.91010372
Transfer182272502023-09-27 12:59:471 day 18 hrs ago1695819587IN
CryptoFranc: XCHF Token
0 ETH0.0007111612.11416333
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoFranc

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-10-30
*/

pragma solidity "0.4.25";
// produced by the Solididy File Flattener (c) David Appleton 2018
// contact : [email protected]
// released under Apache 2.0 licence
// input  C:\projects\BTCS.CHFToken\contracts\Chftoken\CryptoFranc.sol
// flattened :  Wednesday, 24-Oct-18 14:07:18 UTC
contract InterestRateInterface {

    uint256 public constant SCALEFACTOR = 1e18;

    /// @notice get compounding level for currenct day
    function getCurrentCompoundingLevel() public view returns (uint256);

    /// @notice get compounding level for _date `_date`
    /// @param _date The date 
    function getCompoundingLevelDate(uint256 _date) public view returns (uint256);

}
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws 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;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

contract ERC20Interface {
    /// total amount of tokens
    function totalSupply() public view returns(uint256 supply);

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) public view returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) public returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) public returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) public view returns (uint256 remaining);

    // EVENTS
    
    // solhint-disable-next-line no-simple-event-func-name
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
contract Ownable {
    address public owner;
    address public newOwner;

    // MODIFIERS

    /// @dev Throws if called by any account other than the owner.
    modifier onlyOwner() {
        require(msg.sender == owner, "Only Owner");
        _;
    }

    /// @dev Throws if called by any account other than the new owner.
    modifier onlyNewOwner() {
        require(msg.sender == newOwner, "Only New Owner");
        _;
    }

    modifier notNull(address _address) {
        require(_address != 0,"address is Null");
        _;
    }

    // CONSTRUCTORS

    /**
    * @dev The Ownable constructor sets the original `owner` of the contract to the sender
    * account.
    */
    constructor() public {
        owner = msg.sender;
    }

    /// @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 notNull(_newOwner) onlyOwner {
        newOwner = _newOwner;
    }

    /// @dev Allow the new owner to claim ownership and so proving that the newOwner is valid.
    function acceptOwnership() public onlyNewOwner {
        address oldOwner = owner;
        owner = newOwner;
        newOwner = address(0);
        emit OwnershipTransferred(oldOwner, owner);
    }

    // EVENTS
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
}

contract InterestRateNone is InterestRateInterface {
    
    /// @notice get compounding level for currenct day
    function getCurrentCompoundingLevel() public view returns (uint256) {
        return SCALEFACTOR;
    }

    /// @notice get compounding level for day `_date`
    /// param _date The daynumber 
    function getCompoundingLevelDate(uint256 /* _date */) public view returns (uint256) {
        return SCALEFACTOR;
    }

}
contract MigrationAgent is Ownable {

    address public migrationToContract; // the contract to migrate to
    address public migrationFromContract; // the conttactto migate from

    // MODIFIERS
    
    modifier onlyMigrationFromContract() {
        require(msg.sender == migrationFromContract, "Only from migration contract");
        _;
    }
    // EXTERNAL FUNCTIONS

    // PUBLIC FUNCTIONS

    /// @dev set contract to migrate to 
    /// @param _toContract Then contract address to migrate to
    function startMigrateToContract(address _toContract) public onlyOwner {
        migrationToContract = _toContract;
        require(MigrationAgent(migrationToContract).isMigrationAgent(), "not a migratable contract");
        emit StartMigrateToContract(address(this), _toContract);
    }

    /// @dev set contract to migrate from
    /// @param _fromConstract Then contract address to migrate from
    function startMigrateFromContract(address _fromConstract) public onlyOwner {
        migrationFromContract = _fromConstract;
        require(MigrationAgent(migrationFromContract).isMigrationAgent(), "not a migratable contract");
        emit StartMigrateFromContract(_fromConstract, address(this));
    }

    /// @dev Each user calls the migrate function on the original contract to migrate the users’ tokens to the migration agent migrateFrom on the `migrationToContract` contract
    function migrate() public;   

    /// @dev migrageFrom is called from the migrating contract `migrationFromContract`
    /// @param _from The account to be migrated into new contract
    /// @param _value The token balance to be migrated
    function migrateFrom(address _from, uint256 _value) public returns(bool);

    /// @dev is a valid migration agent
    /// @return true if contract is a migratable contract
    function isMigrationAgent() public pure returns(bool) {
        return true;
    }

    // INTERNAL FUNCTIONS

    // PRIVATE FUNCTIONS

    // EVENTS

    event StartMigrateToContract(address indexed fromConstract, address indexed toContract);

    event StartMigrateFromContract(address indexed fromConstract, address indexed toContract);

    event MigratedTo(address indexed owner, address indexed _contract, uint256 value);

    event MigratedFrom(address indexed owner, address indexed _contract, uint256 value);
}
contract Pausable is Ownable {

    bool public paused = false;

    // MODIFIERS

    /**
    * @dev Modifier to make a function callable only when the contract is not paused.
    */
    modifier whenNotPaused() {
        require(!paused, "only when not paused");
        _;
    }

    /**
    * @dev Modifier to make a function callable only when the contract is paused.
    */
    modifier whenPaused() {
        require(paused, "only when paused");
        _;
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function pause() public onlyOwner whenNotPaused {
        paused = true;
        emit Pause();
    }

    /**
    * @dev called by the owner to unpause, returns to normal state
    */
    function unpause() public onlyOwner whenPaused {
        paused = false;
        emit Unpause();
    }

    // EVENTS

    event Pause();

    event Unpause();
}

contract Operator is Ownable {

    address public operator;

    // MODIFIERS

    /**
     * @dev modifier check for operator
     */
    modifier onlyOperator {
        require(msg.sender == operator, "Only Operator");
        _;
    }

    // CONSTRUCTORS

    constructor() public {
        operator = msg.sender;
    }
    /**
     * @dev Transfer operator to `newOperator`.
     *
     * @param _newOperator   The address of the new operator
     * @return balance Balance of the `_owner`.
     */
    function transferOperator(address _newOperator) public notNull(_newOperator) onlyOwner {
        operator = _newOperator;
        emit TransferOperator(operator, _newOperator);
    }

    // EVENTS
    
    event TransferOperator(address indexed from, address indexed to);
}

contract ERC20Token is Ownable, ERC20Interface {

    using SafeMath for uint256;

    mapping(address => uint256) internal balances;
    mapping (address => mapping (address => uint256)) internal allowed;

    // CONSTRUCTORS

    constructor() public {
    }

    // EXTERNAL FUNCTIONS

    // PUBLIC FUNCTIONS

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) public returns (bool success) {

        return transferInternal(msg.sender, _to, _value);
    }

    /* ALLOW FUNCTIONS */

    /**
    * @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
    */
   
    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens   
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) public notNull(_spender) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
        require(_value <= allowed[_from][msg.sender], "insufficient tokens");

        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        return transferInternal(_from, _to, _value);
    }

    /**
     * @dev Returns balance of the `_owner`.
     *
     * @param _owner   The address whose balance will be returned.
     * @return balance Balance of the `_owner`.
     */
    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner];
    }

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowed[_owner][_spender];
    }

    // INTERNAL FUNCTIONS

    /// @notice internal send `_value` token to `_to` from `_from` 
    /// @param _from The address of the sender (null check performed in subTokens)
    /// @param _to The address of the recipient (null check performed in addTokens)
    /// @param _value The amount of token to be transferred 
    /// @return Whether the transfer was successful or not
    function transferInternal(address _from, address _to, uint256 _value) internal returns (bool) {
        uint256 value = subTokens(_from, _value);
        addTokens(_to, value);
        emit Transfer(_from, _to, value);
        return true;
    }
   
    /// @notice add tokens `_value` tokens to `owner`
    /// @param _owner The address of the account
    /// @param _value The amount of tokens to be added
    function addTokens(address _owner, uint256 _value) internal;

    /// @notice subtract tokens `_value` tokens from `owner`
    /// @param _owner The address of the account
    /// @param _value The amount of tokens to be subtracted
    function subTokens(address _owner, uint256 _value) internal returns (uint256 _valueDeducted );
    
    /// @notice set balance of account `owner` to `_value`
    /// @param _owner The address of the account
    /// @param _value The new balance 
    function setBalance(address _owner, uint256 _value) internal notNull(_owner) {
        balances[_owner] = _value;
    }

    // PRIVATE FUNCTIONS

}

contract PausableToken is ERC20Token, Pausable {

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) public whenNotPaused returns (bool success) {
        return super.transfer(_to, _value);
    }

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool success) {
        return super.transferFrom(_from, _to, _value);
    }

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) public whenNotPaused returns (bool success) {
        return super.approve(_spender, _value);
    }
}

contract MintableToken is PausableToken
{
    using SafeMath for uint256;

    address public minter; // minter

    uint256 internal minted; // total minted tokens
    uint256 internal burned; // total burned tokens

    // MODIFIERS

    modifier onlyMinter {
        assert(msg.sender == minter);
        _; 
    }

    constructor() public {
        minter = msg.sender;   // Set the owner to minter
    }

    // EXTERNAL FUNCTIONS

    // PUBLIC FUNCTIONS

    /// @dev  mint tokens to address
    /// @notice mint `_value` token to `_to`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be minted
    function mint(address _to, uint256 _value) public notNull(_to) onlyMinter {
        addTokens(_to, _value);
        notifyMinted(_to, _value);
    }

    /// @dev burn tokens, e.g. when migrating
    /// @notice burn `_value` token to `_to`
    /// @param _value The amount of token to be burned from the callers account
    function burn(uint256 _value) public whenNotPaused {
        uint256 value = subTokens(msg.sender, _value);
        notifyBurned(msg.sender, value);
    }

    /// @dev transfer minter to new address
    /// @notice transfer minter addres from  `minter` to `_newMinter`
    /// @param _newMinter The address of the recipient
    function transferMinter(address _newMinter) public notNull(_newMinter) onlyOwner {
        address oldMinter = minter;
        minter = _newMinter;
        emit TransferMinter(oldMinter, _newMinter);
    }

    // INTERNAL FUNCTIONS

    /// @dev update burned and emit Transfer event of burned tokens
    /// @notice burn `_value` token from `_owner`
    /// @param _owner The address of the owner
    /// @param _value The amount of token burned
    function notifyBurned(address _owner, uint256 _value) internal {
        burned = burned.add(_value);
        emit Transfer(_owner, address(0), _value);
    }

    /// @dev update burned and emit Transfer event of burned tokens
    /// @notice mint `_value` token to `_to`
    /// @param _to The address of the recipient
    /// @param _value The amount of token minted
    function notifyMinted(address _to, uint256 _value) internal {
        minted = minted.add(_value);
        emit Transfer(address(0), _to, _value);
    }

    /// @dev helper function to update token supply state and emit events 
    /// @notice checkMintOrBurn for account `_owner` tokens chainging  from `_balanceBefore` to `_balanceAfter`
    /// @param _owner The address of the owner
    /// @param _balanceBefore The balance before the transaction
    /// @param _balanceAfter The balance after the tranaaction
    function checkMintOrBurn(address _owner, uint256 _balanceBefore, uint256 _balanceAfter) internal {
        if (_balanceBefore > _balanceAfter) {
            uint256 burnedTokens = _balanceBefore.sub(_balanceAfter);
            notifyBurned(_owner, burnedTokens);
        } else if (_balanceBefore < _balanceAfter) {
            uint256 mintedTokens = _balanceAfter.sub(_balanceBefore);
            notifyMinted(_owner, mintedTokens);
        }
    }

    /// @dev return total amount of tokens
    function totalSupply() public view returns(uint256 supply) {
        return minted.sub(burned);
    }

    // PRIVATE FUNCTIONS

    // EVENTS
    
    event TransferMinter(address indexed from, address indexed to);
}

contract CryptoFranc is MintableToken, MigrationAgent, Operator, InterestRateNone {

    using SafeMath for uint256;

    string constant public name = "CryptoFranc";
    string constant public symbol = "XCHF";
    uint256 constant public decimals = 18;
    string constant public version = "1.0.0.0";
    uint256 public dustAmount;

    // Changes as the token is converted to the next vintage
    string public currentFullName;
    string public announcedFullName;
    uint256 public currentMaturityDate;
    uint256 public announcedMaturityDate;
    uint256 public currentTermEndDate;
    uint256 public announcedTermEndDate;
    InterestRateInterface public currentTerms;
    InterestRateInterface public announcedTerms;

    mapping(address => uint256) internal compoundedInterestFactor;

    // CONSTRUCTORS

    constructor(string _initialFullName, uint256 _dustAmount) public {
        // initially, there is no interest. This contract has an interest-free default implementation
        // of the InterestRateInterface. Having this internalized saves gas in comparison to having an
        // external, separate smart contract.
        currentFullName = _initialFullName;
        announcedFullName = _initialFullName;
        dustAmount = _dustAmount;    
        currentTerms = this;
        announcedTerms = this;
        announcedMaturityDate = block.timestamp;
        announcedTermEndDate = block.timestamp;
    }

    // EXTERNAL FUNCTIONS

    // PUBLIC FUNCTIONS

    /// @dev Invoked by the issuer to convert all the outstanding tokens into bonds of the latest vintage.
    /// @param _newName Name of announced bond
    /// @param _newTerms Address of announced bond
    /// @param _newMaturityDate Maturity Date of announced bond
    /// @param _newTermEndDate End Date of announced bond
    function announceRollover(string _newName, address _newTerms, uint256 _newMaturityDate, uint256 _newTermEndDate) public notNull(_newTerms) onlyOperator {
        // a new term can not be announced before the current is expired
        require(block.timestamp >= announcedMaturityDate);

        // for test purposes
        uint256 newMaturityDate;
        if (_newMaturityDate == 0)
            newMaturityDate = block.timestamp;
        else
            newMaturityDate = _newMaturityDate;

        // new newMaturityDate must be at least or greater than the existing announced terms end date
        require(newMaturityDate >= announcedTermEndDate);

        //require new term dates not too far in the future
        //this is to prevent severe operator time calculaton errors
        require(newMaturityDate <= block.timestamp.add(100 days),"sanitycheck on newMaturityDate");
        require(newMaturityDate <= _newTermEndDate,"term must start before it ends");
        require(_newTermEndDate <= block.timestamp.add(200 days),"sanitycheck on newTermEndDate");

        InterestRateInterface terms = InterestRateInterface(_newTerms);
        
        // ensure that _newTerms begins at the compoundLevel that the announcedTerms ends
        // they must align
        uint256 newBeginLevel = terms.getCompoundingLevelDate(newMaturityDate);
        uint256 annEndLevel = announcedTerms.getCompoundingLevelDate(newMaturityDate);
        require(annEndLevel == newBeginLevel,"new initialCompoundingLevel <> old finalCompoundingLevel");

        //rollover
        currentTerms = announcedTerms;
        currentFullName = announcedFullName;
        currentMaturityDate = announcedMaturityDate;
        currentTermEndDate = announcedTermEndDate;
        announcedTerms = terms;
        announcedFullName = _newName;
        announcedMaturityDate = newMaturityDate;
        announcedTermEndDate = _newTermEndDate;

        emit AnnounceRollover(_newName, _newTerms, newMaturityDate, _newTermEndDate);
    }

    /// @dev collectInterest is called to update the internal state of `_owner` balance and force a interest payment
    /// This function does not change the effective amount of the `_owner` as returned by balanceOf
    /// and thus, can be called by anyone willing to pay for the gas.
    /// The designed usage for this function is to allow the CryptoFranc owner to collect interest from inactive accounts, 
    /// since interest collection is updated automatically in normal transfers
    /// calling collectInterest is functional equivalent to transfer 0 tokens to `_owner`
    /// @param _owner The account being updated
    function collectInterest( address _owner) public notNull(_owner) whenNotPaused {
        uint256 rawBalance = super.balanceOf(_owner);
        uint256 adjustedBalance = getAdjustedValue(_owner);
        setBalance(_owner, adjustedBalance);
        checkMintOrBurn(_owner, rawBalance, adjustedBalance);
    }

    /*
        MIGRATE FUNCTIONS
     */
    // safe migrate function
    /// @dev migrageFrom is called from the migrating contract `migrationFromContract`
    /// @param _from The account to be migrated into new contract
    /// @param _value The token balance to be migrated
    function migrateFrom(address _from, uint256 _value) public onlyMigrationFromContract returns(bool) {
        addTokens(_from, _value);
        notifyMinted(_from, _value);

        emit MigratedFrom(_from, migrationFromContract, _value);
        return true;
    }

    /// @dev Each user calls the migrate function on the original contract to migrate the users’ tokens to the migration agent migrateFrom on the `migrationToContract` contract
    function migrate() public whenNotPaused {
        require(migrationToContract != 0, "not in migration mode"); // revert if not in migrate mode
        uint256 value = balanceOf(msg.sender);
        require (value > 0, "no balance"); // revert if not value left to transfer
        value = subTokens(msg.sender, value);
        notifyBurned(msg.sender, value);
        require(MigrationAgent(migrationToContract).migrateFrom(msg.sender, value)==true, "migrateFrom must return true");

        emit MigratedTo(msg.sender, migrationToContract, value);
    }

    /*
        Helper FUNCTIONS
    */

    /// @dev helper function to return foreign tokens accidental send to contract address
    /// @param _tokenaddress Address of foreign ERC20 contract
    /// @param _to Address to send foreign tokens to
    function refundForeignTokens(address _tokenaddress,address _to) public notNull(_to) onlyOperator {
        ERC20Interface token = ERC20Interface(_tokenaddress);
        // transfer current balance for this contract to _to  in token contract
        token.transfer(_to, token.balanceOf(this));
    }

    /// @dev get fullname of active interest contract
    function getFullName() public view returns (string) {
        if ((block.timestamp <= announcedMaturityDate))
            return currentFullName;
        else
            return announcedFullName;
    }

    /// @dev get compounding level of an owner account
    /// @param _owner tokens address
    /// @return The compouding level
    function getCompoundingLevel(address _owner) public view returns (uint256) {
        uint256 level = compoundedInterestFactor[_owner];
        if (level == 0) {
            // important note that for InterestRateNone or empty accounts the compoundedInterestFactor is newer stored by setBalance
            return SCALEFACTOR;
        } else {
            return level;
        }
    }

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) public view returns (uint256) {
        return getAdjustedValue(_owner);
    }

    // INTERNAL FUNCTIONS

    /// @notice add tokens `_value` tokens to `owner`
    /// @param _owner The address of the account
    /// @param _value The amount of tokens to be added
    function addTokens(address _owner,uint256 _value) notNull(_owner) internal {
        uint256 rawBalance = super.balanceOf(_owner);
        uint256 adjustedBalance = getAdjustedValue(_owner);
        setBalance(_owner, adjustedBalance.add(_value));
        checkMintOrBurn(_owner, rawBalance, adjustedBalance);
    }

    /// @notice subtract tokens `_value` tokens from `owner`
    /// @param _owner The address of the account
    /// @param _value The amount of tokens to be subtracted
    function subTokens(address _owner, uint256 _value) internal notNull(_owner) returns (uint256 _valueDeducted ) {
        uint256 rawBalance = super.balanceOf(_owner);
        uint256 adjustedBalance = getAdjustedValue(_owner);
        uint256 newBalance = adjustedBalance.sub(_value);
        if (newBalance <= dustAmount) {
            // dont leave balance below dust, empty account
            _valueDeducted = _value.add(newBalance);
            newBalance =  0;
        } else {
            _valueDeducted = _value;
        }
        setBalance(_owner, newBalance);
        checkMintOrBurn(_owner, rawBalance, adjustedBalance);
    }

    /// @notice set balance of account `owner` to `_value`
    /// @param _owner The address of the account
    /// @param _value The new balance 
    function setBalance(address _owner, uint256 _value) internal {
        super.setBalance(_owner, _value);
        // update `owner`s compoundLevel
        if (_value == 0) {
            // stall account release storage
            delete compoundedInterestFactor[_owner];
        } else {
            // only update compoundedInterestFactor when value has changed 
            // important note: for InterestRateNone the compoundedInterestFactor is newer stored because the default value for getCompoundingLevel is SCALEFACTOR
            uint256 currentLevel = getInterestRate().getCurrentCompoundingLevel();
            if (currentLevel != getCompoundingLevel(_owner)) {
                compoundedInterestFactor[_owner] = currentLevel;
            }
        }
    }

    /// @dev get address of active bond
    function getInterestRate() internal view returns (InterestRateInterface) {
        if ((block.timestamp <= announcedMaturityDate))
            return currentTerms;
        else
            return announcedTerms;
    }

    /// @notice get adjusted balance of account `owner`
    /// @param _owner The address of the account
    function getAdjustedValue(address _owner) internal view returns (uint256) {
        uint256 _rawBalance = super.balanceOf(_owner);
        // if _rawBalance is 0 dont perform calculations
        if (_rawBalance == 0)
            return 0;
        // important note: for empty/new account the getCompoundingLevel value is not meaningfull
        uint256 startLevel = getCompoundingLevel(_owner);
        uint256 currentLevel = getInterestRate().getCurrentCompoundingLevel();
        return _rawBalance.mul(currentLevel).div(startLevel);
    }

    /// @notice get adjusted balance of account `owner` at data `date`
    /// @param _owner The address of the account
    /// @param _date The date of the balance NB: MUST be within valid current and announced Terms date range
    function getAdjustedValueDate(address _owner,uint256 _date) public view returns (uint256) {
        uint256 _rawBalance = super.balanceOf(_owner);
        // if _rawBalance is 0 dont perform calculations
        if (_rawBalance == 0)
            return 0;
        // important note: for empty/new account the getCompoundingLevel value is not meaningfull
        uint256 startLevel = getCompoundingLevel(_owner);

        InterestRateInterface dateTerms;
        if (_date <= announcedMaturityDate)
            dateTerms = currentTerms;
        else
            dateTerms = announcedTerms;

        uint256 dateLevel = dateTerms.getCompoundingLevelDate(_date);
        return _rawBalance.mul(dateLevel).div(startLevel);
    }

    // PRIVATE FUNCTIONS

    // EVENTS

    event AnnounceRollover(string newName, address indexed newTerms, uint256 indexed newMaturityDate, uint256 indexed newTermEndDate);
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_toContract","type":"address"}],"name":"startMigrateToContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"supply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dustAmount","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":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentTermEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOperator","type":"address"}],"name":"transferOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","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":"_value","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_date","type":"uint256"}],"name":"getAdjustedValueDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"collectInterest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getCompoundingLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"currentFullName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"announcedTerms","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"}],"name":"migrateFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getFullName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"migrationFromContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenaddress","type":"address"},{"name":"_to","type":"address"}],"name":"refundForeignTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"migrate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"SCALEFACTOR","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"announcedTermEndDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentCompoundingLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"announcedFullName","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentMaturityDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newName","type":"string"},{"name":"_newTerms","type":"address"},{"name":"_newMaturityDate","type":"uint256"},{"name":"_newTermEndDate","type":"uint256"}],"name":"announceRollover","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_fromConstract","type":"address"}],"name":"startMigrateFromContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentTerms","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","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":"isMigrationAgent","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"announcedMaturityDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"getCompoundingLevelDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"migrationToContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newMinter","type":"address"}],"name":"transferMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialFullName","type":"string"},{"name":"_dustAmount","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newName","type":"string"},{"indexed":true,"name":"newTerms","type":"address"},{"indexed":true,"name":"newMaturityDate","type":"uint256"},{"indexed":true,"name":"newTermEndDate","type":"uint256"}],"name":"AnnounceRollover","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"TransferOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fromConstract","type":"address"},{"indexed":true,"name":"toContract","type":"address"}],"name":"StartMigrateToContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"fromConstract","type":"address"},{"indexed":true,"name":"toContract","type":"address"}],"name":"StartMigrateFromContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"_contract","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"MigratedTo","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"_contract","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"MigratedFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"}],"name":"TransferMinter","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","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"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526004805460ff191690553480156200001b57600080fd5b5060405162002c0938038062002c098339810160405280516020808301516000805433600160a060020a031991821681179092556004805461010060a860020a031916610100840217905560098054909116909117905591909201805190926200008b91600b91850190620000d7565b508151620000a190600c906020850190620000d7565b50600a55506011805430600160a060020a0319918216811790925560128054909116909117905542600e8190556010556200017c565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011a57805160ff19168380011785556200014a565b828001600101855582156200014a579182015b828111156200014a5782518255916020019190600101906200012d565b50620001589291506200015c565b5090565b6200017991905b8082111562000158576000815560010162000163565b90565b612a7d806200018c6000396000f30060806040526004361061022b5763ffffffff60e060020a6000350416620b6425811461023057806306fdde031461025357806307546172146102dd578063095ea7b31461030e57806318160ddd14610346578063210189681461036d57806323b872dd1461038257806325b2d9ce146103ac57806329605e77146103c1578063313ce567146103e25780633f4ba83a146103f757806340c10f191461040c57806342966c68146104305780635391f98b1461044857806354fd4d501461046c578063570ca735146104815780635c975abb1461049657806361c9d81c146104ab5780636f2d4a95146104cc57806370a08231146104ed57806372e2556a1461050e57806377ce9c901461052357806379ba5097146105385780637a3130e31461054d5780638456cb59146105715780638c160186146105865780638d0e29091461059b5780638da5cb5b146105b05780638f803d33146105c55780638fd3ab80146105ec5780639395b0bd1461060157806395d89b411461061657806398a9d9d21461062b578063a1d1fe5d14610640578063a9059cbb14610655578063b132677a14610679578063b5e1083b1461068e578063bc762b62146106a3578063d4ee1d9014610711578063d66ef1b414610726578063db69210914610747578063dd62ed3e1461075c578063df4bcf5814610783578063dfc45b9814610798578063e7f0edca146107ad578063ee5554d3146107c5578063f2fde38b146107da578063fe99ad5a146107fb575b600080fd5b34801561023c57600080fd5b50610251600160a060020a036004351661081c565b005b34801561025f57600080fd5b5061026861099e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a257818101518382015260200161028a565b50505050905090810190601f1680156102cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e957600080fd5b506102f26109d5565b60408051600160a060020a039092168252519081900360200190f35b34801561031a57600080fd5b50610332600160a060020a03600435166024356109e9565b604080519115158252519081900360200190f35b34801561035257600080fd5b5061035b610a46565b60408051918252519081900360200190f35b34801561037957600080fd5b5061035b610a65565b34801561038e57600080fd5b50610332600160a060020a0360043581169060243516604435610a6b565b3480156103b857600080fd5b5061035b610aca565b3480156103cd57600080fd5b50610251600160a060020a0360043516610ad0565b3480156103ee57600080fd5b5061035b610bc0565b34801561040357600080fd5b50610251610bc5565b34801561041857600080fd5b50610251600160a060020a0360043516602435610ca6565b34801561043c57600080fd5b50610251600435610d27565b34801561045457600080fd5b5061035b600160a060020a0360043516602435610d8d565b34801561047857600080fd5b50610268610e8b565b34801561048d57600080fd5b506102f2610ec2565b3480156104a257600080fd5b50610332610ed1565b3480156104b757600080fd5b50610251600160a060020a0360043516610eda565b3480156104d857600080fd5b5061035b600160a060020a0360043516610fa6565b3480156104f957600080fd5b5061035b600160a060020a0360043516610fe0565b34801561051a57600080fd5b50610268610ff1565b34801561052f57600080fd5b506102f261107f565b34801561054457600080fd5b5061025161108e565b34801561055957600080fd5b50610332600160a060020a0360043516602435611151565b34801561057d57600080fd5b50610251611219565b34801561059257600080fd5b506102686112ea565b3480156105a757600080fd5b506102f26113e3565b3480156105bc57600080fd5b506102f26113f2565b3480156105d157600080fd5b50610251600160a060020a0360043581169060243516611401565b3480156105f857600080fd5b506102516115ce565b34801561060d57600080fd5b5061035b61182f565b34801561062257600080fd5b5061026861183b565b34801561063757600080fd5b5061035b611872565b34801561064c57600080fd5b5061035b611878565b34801561066157600080fd5b50610332600160a060020a0360043516602435611884565b34801561068557600080fd5b506102686118da565b34801561069a57600080fd5b5061035b611935565b3480156106af57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025194369492936024939284019190819084018382808284375094975050508335600160a060020a03169450505060208201359160400135905061193b565b34801561071d57600080fd5b506102f2611e1b565b34801561073257600080fd5b50610251600160a060020a0360043516611e2a565b34801561075357600080fd5b506102f2611fac565b34801561076857600080fd5b5061035b600160a060020a0360043581169060243516611fbb565b34801561078f57600080fd5b50610332611fe6565b3480156107a457600080fd5b5061035b611feb565b3480156107b957600080fd5b5061035b600435611ff1565b3480156107d157600080fd5b506102f2611ffe565b3480156107e657600080fd5b50610251600160a060020a036004351661200d565b34801561080757600080fd5b50610251600160a060020a03600435166120cf565b600054600160a060020a0316331461086c576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60078054600160a060020a031916600160a060020a038381169190911791829055604080517fdf4bcf580000000000000000000000000000000000000000000000000000000081529051929091169163df4bcf58916004808201926020929091908290030181600087803b1580156108e357600080fd5b505af11580156108f7573d6000803e3d6000fd5b505050506040513d602081101561090d57600080fd5b50511515610965576040805160e560020a62461bcd02815260206004820152601960248201527f6e6f742061206d696772617461626c6520636f6e747261637400000000000000604482015290519081900360640190fd5b604051600160a060020a0382169030907fcec25bfd2f5c0c367bf2d8d279728841ec464c722dfa79bcedd028c24a253b9690600090a350565b60408051808201909152600b81527f43727970746f4672616e63000000000000000000000000000000000000000000602082015281565b6004546101009004600160a060020a031681565b60045460009060ff1615610a35576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610a3f83836121da565b9392505050565b6000610a5f60065460055461229390919063ffffffff16565b90505b90565b600a5481565b60045460009060ff1615610ab7576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610ac28484846122a5565b949350505050565b600f5481565b80600160a060020a0381161515610b1f576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600054600160a060020a03163314610b6f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60098054600160a060020a031916600160a060020a0384811691821792839055604051919216907fa3fa0a434ea340b210144ceac453176b4e181b4467d8692e7144a6b0ab4ac07690600090a35050565b601281565b600054600160a060020a03163314610c15576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60045460ff161515610c71576040805160e560020a62461bcd02815260206004820152601060248201527f6f6e6c79207768656e2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6004805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b81600160a060020a0381161515610cf5576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b6004546101009004600160a060020a03163314610d0e57fe5b610d188383612383565b610d228383612416565b505050565b60045460009060ff1615610d73576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610d7d3383612471565b9050610d89338261252b565b5050565b6000806000806000610d9e87612586565b9350831515610db05760009450610e81565b610db987610fa6565b600e549093508611610dd857601154600160a060020a03169150610de7565b601254600160a060020a031691505b81600160a060020a031663e7f0edca876040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015610e3057600080fd5b505af1158015610e44573d6000803e3d6000fd5b505050506040513d6020811015610e5a57600080fd5b50519050610e7e83610e72868463ffffffff6125a116565b9063ffffffff6125c516565b94505b5050505092915050565b60408051808201909152600781527f312e302e302e3000000000000000000000000000000000000000000000000000602082015281565b600954600160a060020a031681565b60045460ff1681565b60008082600160a060020a0381161515610f2c576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b60045460ff1615610f75576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610f7e84612586565b9250610f89846125dc565b9150610f95848361269a565b610fa084848461276d565b50505050565b600160a060020a038116600090815260136020526040812054801515610fd657670de0b6b3a76400009150610fda565b8091505b50919050565b6000610feb826125dc565b92915050565b600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110775780601f1061104c57610100808354040283529160200191611077565b820191906000526020600020905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b601254600160a060020a031681565b600154600090600160a060020a031633146110f3576040805160e560020a62461bcd02815260206004820152600e60248201527f4f6e6c79204e6577204f776e6572000000000000000000000000000000000000604482015290519081900360640190fd5b506000805460018054600160a060020a03808216600160a060020a03198086169190911780875592169092556040519282169391169183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600854600090600160a060020a031633146111b6576040805160e560020a62461bcd02815260206004820152601c60248201527f4f6e6c792066726f6d206d6967726174696f6e20636f6e747261637400000000604482015290519081900360640190fd5b6111c08383612383565b6111ca8383612416565b600854604080518481529051600160a060020a03928316928616917fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f552526919081900360200190a350600192915050565b600054600160a060020a03163314611269576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60045460ff16156112b2576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b6004805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600e54606090421161138857600b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561137c5780601f106113515761010080835404028352916020019161137c565b820191906000526020600020905b81548152906001019060200180831161135f57829003601f168201915b50505050509050610a62565b600c805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561137c5780601f106113515761010080835404028352916020019161137c565b600854600160a060020a031681565b600054600160a060020a031681565b600081600160a060020a0381161515611452576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600954600160a060020a031633146114b4576040805160e560020a62461bcd02815260206004820152600d60248201527f4f6e6c79204f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051859350600160a060020a0384169163a9059cbb91869184916370a08231916024808201926020929091908290030181600087803b15801561152357600080fd5b505af1158015611537573d6000803e3d6000fd5b505050506040513d602081101561154d57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050506040513d60208110156115c657600080fd5b505050505050565b60045460009060ff161561161a576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b600754600160a060020a0316151561167c576040805160e560020a62461bcd02815260206004820152601560248201527f6e6f7420696e206d6967726174696f6e206d6f64650000000000000000000000604482015290519081900360640190fd5b61168533610fe0565b9050600081116116df576040805160e560020a62461bcd02815260206004820152600a60248201527f6e6f2062616c616e636500000000000000000000000000000000000000000000604482015290519081900360640190fd5b6116e93382612471565b90506116f5338261252b565b600754604080517f7a3130e3000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a0390921691637a3130e3916044808201926020929091908290030181600087803b15801561176257600080fd5b505af1158015611776573d6000803e3d6000fd5b505050506040513d602081101561178c57600080fd5b505115156001146117e7576040805160e560020a62461bcd02815260206004820152601c60248201527f6d69677261746546726f6d206d7573742072657475726e207472756500000000604482015290519081900360640190fd5b600754604080518381529051600160a060020a039092169133917f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb919081900360200190a350565b670de0b6b3a764000081565b60408051808201909152600481527f5843484600000000000000000000000000000000000000000000000000000000602082015281565b60105481565b670de0b6b3a764000090565b60045460009060ff16156118d0576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610a3f83836127bd565b600c805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110775780601f1061104c57610100808354040283529160200191611077565b600d5481565b600080808086600160a060020a038116151561198f576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600954600160a060020a031633146119f1576040805160e560020a62461bcd02815260206004820152600d60248201527f4f6e6c79204f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b600e54421015611a0057600080fd5b861515611a0f57429450611a13565b8694505b601054851015611a2257600080fd5b611a35426283d60063ffffffff6127ca16565b851115611a8c576040805160e560020a62461bcd02815260206004820152601e60248201527f73616e697479636865636b206f6e206e65774d61747572697479446174650000604482015290519081900360640190fd5b85851115611ae4576040805160e560020a62461bcd02815260206004820152601e60248201527f7465726d206d757374207374617274206265666f726520697420656e64730000604482015290519081900360640190fd5b611af842630107ac0063ffffffff6127ca16565b861115611b4f576040805160e560020a62461bcd02815260206004820152601d60248201527f73616e697479636865636b206f6e206e65775465726d456e6444617465000000604482015290519081900360640190fd5b87935083600160a060020a031663e7f0edca866040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b5051601254604080517fe7f0edca000000000000000000000000000000000000000000000000000000008152600481018990529051929550600160a060020a039091169163e7f0edca916024808201926020929091908290030181600087803b158015611c3157600080fd5b505af1158015611c45573d6000803e3d6000fd5b505050506040513d6020811015611c5b57600080fd5b50519150828214611cdc576040805160e560020a62461bcd02815260206004820152603860248201527f6e657720696e697469616c436f6d706f756e64696e674c6576656c203c3e206f60448201527f6c642066696e616c436f6d706f756e64696e674c6576656c0000000000000000606482015290519081900360840190fd5b60125460118054600160a060020a031916600160a060020a03909216919091179055600c8054611d2191600b91600260001960018316156101000201909116046128e4565b50600e54600d55601054600f5560128054600160a060020a031916600160a060020a0386161790558851611d5c90600c9060208c0190612969565b5084600e8190555085601081905550858589600160a060020a03167f4f70dd95fafd6940868ef95f73e10b7250c9619c8b4df1760d274699917542418c6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611dd6578181015183820152602001611dbe565b50505050905090810190601f168015611e035780820380516001836020036101000a031916815260200191505b509250505060405180910390a4505050505050505050565b600154600160a060020a031681565b600054600160a060020a03163314611e7a576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60088054600160a060020a031916600160a060020a038381169190911791829055604080517fdf4bcf580000000000000000000000000000000000000000000000000000000081529051929091169163df4bcf58916004808201926020929091908290030181600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b505050506040513d6020811015611f1b57600080fd5b50511515611f73576040805160e560020a62461bcd02815260206004820152601960248201527f6e6f742061206d696772617461626c6520636f6e747261637400000000000000604482015290519081900360640190fd5b6040513090600160a060020a038316907fafb3eb79b985ae31830cb04dfc82c2d58e1b1c9851b6f7d8bf0c8311fbcaf02090600090a350565b601154600160a060020a031681565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600190565b600e5481565b50670de0b6b3a764000090565b600754600160a060020a031681565b80600160a060020a038116151561205c576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600054600160a060020a031633146120ac576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b5060018054600160a060020a031916600160a060020a0392909216919091179055565b600081600160a060020a0381161515612120576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600054600160a060020a03163314612170576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60048054600160a060020a0385811661010081810274ffffffffffffffffffffffffffffffffffffffff0019851617909455604051939092041693509083907f26799a531ff016a3eb21bcc827a4459bf024d10c0220ea263eb69d795d50ab7590600090a3505050565b600082600160a060020a038116151561222b576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b336000818152600360209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008282111561229f57fe5b50900390565b600160a060020a0383166000908152600360209081526040808320338452909152812054821115612320576040805160e560020a62461bcd02815260206004820152601360248201527f696e73756666696369656e7420746f6b656e7300000000000000000000000000604482015290519081900360640190fd5b600160a060020a0384166000908152600360209081526040808320338452909152902054612354908363ffffffff61229316565b600160a060020a0385166000908152600360209081526040808320338452909152902055610ac28484846127d9565b60008083600160a060020a03811615156123d5576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b6123de85612586565b92506123e9856125dc565b9150612404856123ff848763ffffffff6127ca16565b61269a565b61240f85848461276d565b5050505050565b600554612429908263ffffffff6127ca16565b600555604080518281529051600160a060020a038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600080808085600160a060020a03811615156124c5576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b6124ce87612586565b93506124d9876125dc565b92506124eb838763ffffffff61229316565b600a54909250821161251257612507868363ffffffff6127ca16565b945060009150612516565b8594505b612520878361269a565b610e8187858561276d565b60065461253e908263ffffffff6127ca16565b600655604080518281529051600091600160a060020a038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600160a060020a031660009081526002602052604090205490565b60008282028315806125bd57508284828115156125ba57fe5b04145b1515610a3f57fe5b60008082848115156125d357fe5b04949350505050565b6000806000806125eb85612586565b92508215156125fd5760009350612692565b61260685610fa6565b9150612610612848565b600160a060020a031663a1d1fe5d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561264d57600080fd5b505af1158015612661573d6000803e3d6000fd5b505050506040513d602081101561267757600080fd5b5051905061268f82610e72858463ffffffff6125a116565b93505b505050919050565b60006126a68383612878565b8115156126cb57600160a060020a038316600090815260136020526040812055610d22565b6126d3612848565b600160a060020a031663a1d1fe5d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561271057600080fd5b505af1158015612724573d6000803e3d6000fd5b505050506040513d602081101561273a57600080fd5b5051905061274783610fa6565b8114610d2257600160a060020a0383166000908152601360205260409020819055505050565b6000808284111561279957612788848463ffffffff61229316565b9150612794858361252b565b61240f565b8284101561240f576127b1838563ffffffff61229316565b905061240f8582612416565b6000610a3f3384846127d9565b600082820183811015610a3f57fe5b6000806127e68584612471565b90506127f28482612383565b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b600e5460009042116128665750601154600160a060020a0316610a62565b50601254600160a060020a0316610a62565b81600160a060020a03811615156128c7576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b50600160a060020a03909116600090815260026020526040902055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061291d5780548555612959565b8280016001018555821561295957600052602060002091601f016020900482015b8281111561295957825482559160010191906001019061293e565b506129659291506129d7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129aa57805160ff1916838001178555612959565b82800160010185558215612959579182015b828111156129595782518255916020019190600101906129bc565b610a6291905b8082111561296557600081556001016129dd56006f6e6c79207768656e206e6f74207061757365640000000000000000000000004f6e6c79204f776e65720000000000000000000000000000000000000000000061646472657373206973204e756c6c0000000000000000000000000000000000a165627a7a723058206facbe743f91d65d3989dfc2fcd8e75d33840d112aa26d37d0f15830a61f642c00290000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000c584348465f47454e455349530000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061022b5763ffffffff60e060020a6000350416620b6425811461023057806306fdde031461025357806307546172146102dd578063095ea7b31461030e57806318160ddd14610346578063210189681461036d57806323b872dd1461038257806325b2d9ce146103ac57806329605e77146103c1578063313ce567146103e25780633f4ba83a146103f757806340c10f191461040c57806342966c68146104305780635391f98b1461044857806354fd4d501461046c578063570ca735146104815780635c975abb1461049657806361c9d81c146104ab5780636f2d4a95146104cc57806370a08231146104ed57806372e2556a1461050e57806377ce9c901461052357806379ba5097146105385780637a3130e31461054d5780638456cb59146105715780638c160186146105865780638d0e29091461059b5780638da5cb5b146105b05780638f803d33146105c55780638fd3ab80146105ec5780639395b0bd1461060157806395d89b411461061657806398a9d9d21461062b578063a1d1fe5d14610640578063a9059cbb14610655578063b132677a14610679578063b5e1083b1461068e578063bc762b62146106a3578063d4ee1d9014610711578063d66ef1b414610726578063db69210914610747578063dd62ed3e1461075c578063df4bcf5814610783578063dfc45b9814610798578063e7f0edca146107ad578063ee5554d3146107c5578063f2fde38b146107da578063fe99ad5a146107fb575b600080fd5b34801561023c57600080fd5b50610251600160a060020a036004351661081c565b005b34801561025f57600080fd5b5061026861099e565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102a257818101518382015260200161028a565b50505050905090810190601f1680156102cf5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e957600080fd5b506102f26109d5565b60408051600160a060020a039092168252519081900360200190f35b34801561031a57600080fd5b50610332600160a060020a03600435166024356109e9565b604080519115158252519081900360200190f35b34801561035257600080fd5b5061035b610a46565b60408051918252519081900360200190f35b34801561037957600080fd5b5061035b610a65565b34801561038e57600080fd5b50610332600160a060020a0360043581169060243516604435610a6b565b3480156103b857600080fd5b5061035b610aca565b3480156103cd57600080fd5b50610251600160a060020a0360043516610ad0565b3480156103ee57600080fd5b5061035b610bc0565b34801561040357600080fd5b50610251610bc5565b34801561041857600080fd5b50610251600160a060020a0360043516602435610ca6565b34801561043c57600080fd5b50610251600435610d27565b34801561045457600080fd5b5061035b600160a060020a0360043516602435610d8d565b34801561047857600080fd5b50610268610e8b565b34801561048d57600080fd5b506102f2610ec2565b3480156104a257600080fd5b50610332610ed1565b3480156104b757600080fd5b50610251600160a060020a0360043516610eda565b3480156104d857600080fd5b5061035b600160a060020a0360043516610fa6565b3480156104f957600080fd5b5061035b600160a060020a0360043516610fe0565b34801561051a57600080fd5b50610268610ff1565b34801561052f57600080fd5b506102f261107f565b34801561054457600080fd5b5061025161108e565b34801561055957600080fd5b50610332600160a060020a0360043516602435611151565b34801561057d57600080fd5b50610251611219565b34801561059257600080fd5b506102686112ea565b3480156105a757600080fd5b506102f26113e3565b3480156105bc57600080fd5b506102f26113f2565b3480156105d157600080fd5b50610251600160a060020a0360043581169060243516611401565b3480156105f857600080fd5b506102516115ce565b34801561060d57600080fd5b5061035b61182f565b34801561062257600080fd5b5061026861183b565b34801561063757600080fd5b5061035b611872565b34801561064c57600080fd5b5061035b611878565b34801561066157600080fd5b50610332600160a060020a0360043516602435611884565b34801561068557600080fd5b506102686118da565b34801561069a57600080fd5b5061035b611935565b3480156106af57600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025194369492936024939284019190819084018382808284375094975050508335600160a060020a03169450505060208201359160400135905061193b565b34801561071d57600080fd5b506102f2611e1b565b34801561073257600080fd5b50610251600160a060020a0360043516611e2a565b34801561075357600080fd5b506102f2611fac565b34801561076857600080fd5b5061035b600160a060020a0360043581169060243516611fbb565b34801561078f57600080fd5b50610332611fe6565b3480156107a457600080fd5b5061035b611feb565b3480156107b957600080fd5b5061035b600435611ff1565b3480156107d157600080fd5b506102f2611ffe565b3480156107e657600080fd5b50610251600160a060020a036004351661200d565b34801561080757600080fd5b50610251600160a060020a03600435166120cf565b600054600160a060020a0316331461086c576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60078054600160a060020a031916600160a060020a038381169190911791829055604080517fdf4bcf580000000000000000000000000000000000000000000000000000000081529051929091169163df4bcf58916004808201926020929091908290030181600087803b1580156108e357600080fd5b505af11580156108f7573d6000803e3d6000fd5b505050506040513d602081101561090d57600080fd5b50511515610965576040805160e560020a62461bcd02815260206004820152601960248201527f6e6f742061206d696772617461626c6520636f6e747261637400000000000000604482015290519081900360640190fd5b604051600160a060020a0382169030907fcec25bfd2f5c0c367bf2d8d279728841ec464c722dfa79bcedd028c24a253b9690600090a350565b60408051808201909152600b81527f43727970746f4672616e63000000000000000000000000000000000000000000602082015281565b6004546101009004600160a060020a031681565b60045460009060ff1615610a35576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610a3f83836121da565b9392505050565b6000610a5f60065460055461229390919063ffffffff16565b90505b90565b600a5481565b60045460009060ff1615610ab7576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610ac28484846122a5565b949350505050565b600f5481565b80600160a060020a0381161515610b1f576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600054600160a060020a03163314610b6f576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60098054600160a060020a031916600160a060020a0384811691821792839055604051919216907fa3fa0a434ea340b210144ceac453176b4e181b4467d8692e7144a6b0ab4ac07690600090a35050565b601281565b600054600160a060020a03163314610c15576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60045460ff161515610c71576040805160e560020a62461bcd02815260206004820152601060248201527f6f6e6c79207768656e2070617573656400000000000000000000000000000000604482015290519081900360640190fd5b6004805460ff191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b81600160a060020a0381161515610cf5576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b6004546101009004600160a060020a03163314610d0e57fe5b610d188383612383565b610d228383612416565b505050565b60045460009060ff1615610d73576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610d7d3383612471565b9050610d89338261252b565b5050565b6000806000806000610d9e87612586565b9350831515610db05760009450610e81565b610db987610fa6565b600e549093508611610dd857601154600160a060020a03169150610de7565b601254600160a060020a031691505b81600160a060020a031663e7f0edca876040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015610e3057600080fd5b505af1158015610e44573d6000803e3d6000fd5b505050506040513d6020811015610e5a57600080fd5b50519050610e7e83610e72868463ffffffff6125a116565b9063ffffffff6125c516565b94505b5050505092915050565b60408051808201909152600781527f312e302e302e3000000000000000000000000000000000000000000000000000602082015281565b600954600160a060020a031681565b60045460ff1681565b60008082600160a060020a0381161515610f2c576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b60045460ff1615610f75576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610f7e84612586565b9250610f89846125dc565b9150610f95848361269a565b610fa084848461276d565b50505050565b600160a060020a038116600090815260136020526040812054801515610fd657670de0b6b3a76400009150610fda565b8091505b50919050565b6000610feb826125dc565b92915050565b600b805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110775780601f1061104c57610100808354040283529160200191611077565b820191906000526020600020905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b601254600160a060020a031681565b600154600090600160a060020a031633146110f3576040805160e560020a62461bcd02815260206004820152600e60248201527f4f6e6c79204e6577204f776e6572000000000000000000000000000000000000604482015290519081900360640190fd5b506000805460018054600160a060020a03808216600160a060020a03198086169190911780875592169092556040519282169391169183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600854600090600160a060020a031633146111b6576040805160e560020a62461bcd02815260206004820152601c60248201527f4f6e6c792066726f6d206d6967726174696f6e20636f6e747261637400000000604482015290519081900360640190fd5b6111c08383612383565b6111ca8383612416565b600854604080518481529051600160a060020a03928316928616917fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f552526919081900360200190a350600192915050565b600054600160a060020a03163314611269576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60045460ff16156112b2576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b6004805460ff191660011790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600e54606090421161138857600b805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561137c5780601f106113515761010080835404028352916020019161137c565b820191906000526020600020905b81548152906001019060200180831161135f57829003601f168201915b50505050509050610a62565b600c805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561137c5780601f106113515761010080835404028352916020019161137c565b600854600160a060020a031681565b600054600160a060020a031681565b600081600160a060020a0381161515611452576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600954600160a060020a031633146114b4576040805160e560020a62461bcd02815260206004820152600d60248201527f4f6e6c79204f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051859350600160a060020a0384169163a9059cbb91869184916370a08231916024808201926020929091908290030181600087803b15801561152357600080fd5b505af1158015611537573d6000803e3d6000fd5b505050506040513d602081101561154d57600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561159c57600080fd5b505af11580156115b0573d6000803e3d6000fd5b505050506040513d60208110156115c657600080fd5b505050505050565b60045460009060ff161561161a576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b600754600160a060020a0316151561167c576040805160e560020a62461bcd02815260206004820152601560248201527f6e6f7420696e206d6967726174696f6e206d6f64650000000000000000000000604482015290519081900360640190fd5b61168533610fe0565b9050600081116116df576040805160e560020a62461bcd02815260206004820152600a60248201527f6e6f2062616c616e636500000000000000000000000000000000000000000000604482015290519081900360640190fd5b6116e93382612471565b90506116f5338261252b565b600754604080517f7a3130e3000000000000000000000000000000000000000000000000000000008152336004820152602481018490529051600160a060020a0390921691637a3130e3916044808201926020929091908290030181600087803b15801561176257600080fd5b505af1158015611776573d6000803e3d6000fd5b505050506040513d602081101561178c57600080fd5b505115156001146117e7576040805160e560020a62461bcd02815260206004820152601c60248201527f6d69677261746546726f6d206d7573742072657475726e207472756500000000604482015290519081900360640190fd5b600754604080518381529051600160a060020a039092169133917f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb919081900360200190a350565b670de0b6b3a764000081565b60408051808201909152600481527f5843484600000000000000000000000000000000000000000000000000000000602082015281565b60105481565b670de0b6b3a764000090565b60045460009060ff16156118d0576040805160e560020a62461bcd02815260206004820152601460248201526000805160206129f2833981519152604482015290519081900360640190fd5b610a3f83836127bd565b600c805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156110775780601f1061104c57610100808354040283529160200191611077565b600d5481565b600080808086600160a060020a038116151561198f576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600954600160a060020a031633146119f1576040805160e560020a62461bcd02815260206004820152600d60248201527f4f6e6c79204f70657261746f7200000000000000000000000000000000000000604482015290519081900360640190fd5b600e54421015611a0057600080fd5b861515611a0f57429450611a13565b8694505b601054851015611a2257600080fd5b611a35426283d60063ffffffff6127ca16565b851115611a8c576040805160e560020a62461bcd02815260206004820152601e60248201527f73616e697479636865636b206f6e206e65774d61747572697479446174650000604482015290519081900360640190fd5b85851115611ae4576040805160e560020a62461bcd02815260206004820152601e60248201527f7465726d206d757374207374617274206265666f726520697420656e64730000604482015290519081900360640190fd5b611af842630107ac0063ffffffff6127ca16565b861115611b4f576040805160e560020a62461bcd02815260206004820152601d60248201527f73616e697479636865636b206f6e206e65775465726d456e6444617465000000604482015290519081900360640190fd5b87935083600160a060020a031663e7f0edca866040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d6020811015611bc557600080fd5b5051601254604080517fe7f0edca000000000000000000000000000000000000000000000000000000008152600481018990529051929550600160a060020a039091169163e7f0edca916024808201926020929091908290030181600087803b158015611c3157600080fd5b505af1158015611c45573d6000803e3d6000fd5b505050506040513d6020811015611c5b57600080fd5b50519150828214611cdc576040805160e560020a62461bcd02815260206004820152603860248201527f6e657720696e697469616c436f6d706f756e64696e674c6576656c203c3e206f60448201527f6c642066696e616c436f6d706f756e64696e674c6576656c0000000000000000606482015290519081900360840190fd5b60125460118054600160a060020a031916600160a060020a03909216919091179055600c8054611d2191600b91600260001960018316156101000201909116046128e4565b50600e54600d55601054600f5560128054600160a060020a031916600160a060020a0386161790558851611d5c90600c9060208c0190612969565b5084600e8190555085601081905550858589600160a060020a03167f4f70dd95fafd6940868ef95f73e10b7250c9619c8b4df1760d274699917542418c6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611dd6578181015183820152602001611dbe565b50505050905090810190601f168015611e035780820380516001836020036101000a031916815260200191505b509250505060405180910390a4505050505050505050565b600154600160a060020a031681565b600054600160a060020a03163314611e7a576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60088054600160a060020a031916600160a060020a038381169190911791829055604080517fdf4bcf580000000000000000000000000000000000000000000000000000000081529051929091169163df4bcf58916004808201926020929091908290030181600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b505050506040513d6020811015611f1b57600080fd5b50511515611f73576040805160e560020a62461bcd02815260206004820152601960248201527f6e6f742061206d696772617461626c6520636f6e747261637400000000000000604482015290519081900360640190fd5b6040513090600160a060020a038316907fafb3eb79b985ae31830cb04dfc82c2d58e1b1c9851b6f7d8bf0c8311fbcaf02090600090a350565b601154600160a060020a031681565b600160a060020a03918216600090815260036020908152604080832093909416825291909152205490565b600190565b600e5481565b50670de0b6b3a764000090565b600754600160a060020a031681565b80600160a060020a038116151561205c576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600054600160a060020a031633146120ac576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b5060018054600160a060020a031916600160a060020a0392909216919091179055565b600081600160a060020a0381161515612120576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b600054600160a060020a03163314612170576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020612a12833981519152604482015290519081900360640190fd5b60048054600160a060020a0385811661010081810274ffffffffffffffffffffffffffffffffffffffff0019851617909455604051939092041693509083907f26799a531ff016a3eb21bcc827a4459bf024d10c0220ea263eb69d795d50ab7590600090a3505050565b600082600160a060020a038116151561222b576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b336000818152600360209081526040808320600160a060020a03891680855290835292819020879055805187815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b60008282111561229f57fe5b50900390565b600160a060020a0383166000908152600360209081526040808320338452909152812054821115612320576040805160e560020a62461bcd02815260206004820152601360248201527f696e73756666696369656e7420746f6b656e7300000000000000000000000000604482015290519081900360640190fd5b600160a060020a0384166000908152600360209081526040808320338452909152902054612354908363ffffffff61229316565b600160a060020a0385166000908152600360209081526040808320338452909152902055610ac28484846127d9565b60008083600160a060020a03811615156123d5576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b6123de85612586565b92506123e9856125dc565b9150612404856123ff848763ffffffff6127ca16565b61269a565b61240f85848461276d565b5050505050565b600554612429908263ffffffff6127ca16565b600555604080518281529051600160a060020a038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600080808085600160a060020a03811615156124c5576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b6124ce87612586565b93506124d9876125dc565b92506124eb838763ffffffff61229316565b600a54909250821161251257612507868363ffffffff6127ca16565b945060009150612516565b8594505b612520878361269a565b610e8187858561276d565b60065461253e908263ffffffff6127ca16565b600655604080518281529051600091600160a060020a038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600160a060020a031660009081526002602052604090205490565b60008282028315806125bd57508284828115156125ba57fe5b04145b1515610a3f57fe5b60008082848115156125d357fe5b04949350505050565b6000806000806125eb85612586565b92508215156125fd5760009350612692565b61260685610fa6565b9150612610612848565b600160a060020a031663a1d1fe5d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561264d57600080fd5b505af1158015612661573d6000803e3d6000fd5b505050506040513d602081101561267757600080fd5b5051905061268f82610e72858463ffffffff6125a116565b93505b505050919050565b60006126a68383612878565b8115156126cb57600160a060020a038316600090815260136020526040812055610d22565b6126d3612848565b600160a060020a031663a1d1fe5d6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561271057600080fd5b505af1158015612724573d6000803e3d6000fd5b505050506040513d602081101561273a57600080fd5b5051905061274783610fa6565b8114610d2257600160a060020a0383166000908152601360205260409020819055505050565b6000808284111561279957612788848463ffffffff61229316565b9150612794858361252b565b61240f565b8284101561240f576127b1838563ffffffff61229316565b905061240f8582612416565b6000610a3f3384846127d9565b600082820183811015610a3f57fe5b6000806127e68584612471565b90506127f28482612383565b83600160a060020a031685600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b600e5460009042116128665750601154600160a060020a0316610a62565b50601254600160a060020a0316610a62565b81600160a060020a03811615156128c7576040805160e560020a62461bcd02815260206004820152600f6024820152600080516020612a32833981519152604482015290519081900360640190fd5b50600160a060020a03909116600090815260026020526040902055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061291d5780548555612959565b8280016001018555821561295957600052602060002091601f016020900482015b8281111561295957825482559160010191906001019061293e565b506129659291506129d7565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129aa57805160ff1916838001178555612959565b82800160010185558215612959579182015b828111156129595782518255916020019190600101906129bc565b610a6291905b8082111561296557600081556001016129dd56006f6e6c79207768656e206e6f74207061757365640000000000000000000000004f6e6c79204f776e65720000000000000000000000000000000000000000000061646472657373206973204e756c6c0000000000000000000000000000000000a165627a7a723058206facbe743f91d65d3989dfc2fcd8e75d33840d112aa26d37d0f15830a61f642c0029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000c584348465f47454e455349530000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initialFullName (string): XCHF_GENESIS
Arg [1] : _dustAmount (uint256): 10000000000000000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000000000000000000000000000002386f26fc10000
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 584348465f47454e455349530000000000000000000000000000000000000000


Swarm Source

bzzr://6facbe743f91d65d3989dfc2fcd8e75d33840d112aa26d37d0f15830a61f642c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The CryptoFranc (XCHF) is a stablecoin bound to the Swiss Franc and classifies as a payment token in accordance with the FINMA ICO guidelines.

Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

Validator Index Block Amount
View All Withdrawals

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.