ETH Price: $3,193.39 (-2.19%)

Contract

0x78a73B6CBc5D183CE56e786f6e905CaDEC63547B
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer216170722025-01-13 17:31:355 days ago1736789495IN
Fabric Token
0 ETH0.000247847.69182038
Approve200533272024-06-09 9:19:11224 days ago1717924751IN
Fabric Token
0 ETH0.000163773.3815583
Transfer200532972024-06-09 9:13:11224 days ago1717924391IN
Fabric Token
0 ETH0.000244144.92599409
Approve198924252024-05-17 21:39:47246 days ago1715981987IN
Fabric Token
0 ETH0.00009713.6767578
Approve195817592024-04-04 10:18:35289 days ago1712225915IN
Fabric Token
0 ETH0.0005709320.09544045
Transfer188543492023-12-24 8:10:47392 days ago1703405447IN
Fabric Token
0 ETH0.0011912724.03602342
Transfer170950532023-04-21 13:26:11638 days ago1682083571IN
Fabric Token
0 ETH0.0016739333.96360529
Transfer170029202023-04-08 9:53:23652 days ago1680947603IN
Fabric Token
0 ETH0.000946319.09792729
Transfer169761822023-04-04 14:42:35655 days ago1680619355IN
Fabric Token
0 ETH0.0015600631.5
Approve167117712023-02-26 10:18:59692 days ago1677406739IN
Fabric Token
0 ETH0.0009337219.17493609
Transfer167117582023-02-26 10:16:23692 days ago1677406583IN
Fabric Token
0 ETH0.0010283220.76331175
Transfer159061382022-11-05 20:15:59805 days ago1667679359IN
Fabric Token
0 ETH0.0005270810.64
Approve149143322022-06-06 10:00:25958 days ago1654509625IN
Fabric Token
0 ETH0.0026784855.00534562
Transfer124400012021-05-15 16:14:511344 days ago1621095291IN
Fabric Token
0 ETH0.0032247382
Transfer122857242021-04-21 20:29:201368 days ago1619036960IN
Fabric Token
0 ETH0.00550564140
Transfer122677142021-04-19 1:57:161371 days ago1618797436IN
Fabric Token
0 ETH0.00488822124.3
Transfer118768232021-02-17 21:28:311431 days ago1613597311IN
Fabric Token
0 ETH0.01761942391.54285714
Approve116359912021-01-11 21:08:231468 days ago1610399303IN
Fabric Token
0 ETH0.00535868119
Transfer116293602021-01-10 20:41:231469 days ago1610311283IN
Fabric Token
0 ETH0.0076452200
Transfer115842242021-01-03 22:27:561476 days ago1609712876IN
Fabric Token
0 ETH0.00491814128.7
Transfer115383872020-12-27 21:52:311483 days ago1609105951IN
Fabric Token
0 ETH0.001911350.00000001
Approve114701392020-12-17 10:40:091493 days ago1608201609IN
Fabric Token
0 ETH0.01062731236
Transfer112819632020-11-18 12:35:171522 days ago1605702917IN
Fabric Token
0 ETH0.001986552
Approve112376722020-11-11 17:27:271529 days ago1605115647IN
Fabric Token
0 ETH0.00675465150
Approve111461412020-10-28 16:08:141543 days ago1603901294IN
Fabric Token
0 ETH0.0034877177
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
53603422018-04-01 10:09:582485 days ago1522577398
Fabric Token
1,855.45186159 ETH
50828452018-02-13 12:36:302531 days ago1518525390
Fabric Token
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FabricTokenFundraiser

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-13
*/

pragma solidity ^0.4.18;

// File: contracts\configs\FabricTokenConfig.sol

/**
 * @title FabricTokenConfig
 *
 * @dev The static configuration for the Fabric Token.
 */
contract FabricTokenConfig {
    // The name of the token.
    string constant NAME = "Fabric Token";

    // The symbol of the token.
    string constant SYMBOL = "FT";

    // The number of decimals for the token.
    uint8 constant DECIMALS = 18;  // Same as ethers.

    // Decimal factor for multiplication purposes.
    uint constant DECIMALS_FACTOR = 10 ** uint(DECIMALS);
}

// File: contracts\interfaces\ERC20TokenInterface.sol

/**
 * @dev The standard ERC20 Token interface.
 */
contract ERC20TokenInterface {
    uint public totalSupply;  /* shorthand for public function and a property */
    event Transfer(address indexed _from, address indexed _to, uint _value);
    event Approval(address indexed _owner, address indexed _spender, uint _value);
    function balanceOf(address _owner) public constant returns (uint balance);
    function transfer(address _to, uint _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint _value) public returns (bool success);
    function approve(address _spender, uint _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint remaining);
}

// File: contracts\libraries\SafeMath.sol

/**
 * @dev Library that helps prevent integer overflows and underflows,
 * inspired by https://github.com/OpenZeppelin/zeppelin-solidity
 */
library SafeMath {
    function plus(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        assert(c >= a);

        return c;
    }

    function minus(uint a, uint b) internal pure returns (uint) {
        assert(b <= a);

        return a - b;
    }

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

    function div(uint a, uint b) internal pure returns (uint) {
        uint c = a / b;

        return c;
    }
}

// File: contracts\traits\ERC20Token.sol

/**
 * @title ERC20Token
 *
 * @dev Implements the operations declared in the `ERC20TokenInterface`.
 */
contract ERC20Token is ERC20TokenInterface {
    using SafeMath for uint;

    // Token account balances.
    mapping (address => uint) balances;

    // Delegated number of tokens to transfer.
    mapping (address => mapping (address => uint)) allowed;

    /**
     * @dev Checks the balance of a certain address.
     *
     * @param _account The address which's balance will be checked.
     *
     * @return Returns the balance of the `_account` address.
     */
    function balanceOf(address _account) public constant returns (uint balance) {
        return balances[_account];
    }

    /**
     * @dev Transfers tokens from one address to another.
     *
     * @param _to The target address to which the `_value` number of tokens will be sent.
     * @param _value The number of tokens to send.
     *
     * @return Whether the transfer was successful or not.
     */
    function transfer(address _to, uint _value) public returns (bool success) {
        if (balances[msg.sender] < _value || _value == 0) {

            return false;
        }

        balances[msg.sender] -= _value;
        balances[_to] = balances[_to].plus(_value);

        Transfer(msg.sender, _to, _value);

        return true;
    }

    /**
     * @dev Send `_value` tokens to `_to` from `_from` if `_from` has approved the process.
     *
     * @param _from The address of the sender.
     * @param _to The address of the recipient.
     * @param _value The number of tokens to be transferred.
     *
     * @return Whether the transfer was successful or not.
     */
    function transferFrom(address _from, address _to, uint _value) public returns (bool success) {
        if (balances[_from] < _value || allowed[_from][msg.sender] < _value || _value == 0) {
            return false;
        }

        balances[_to] = balances[_to].plus(_value);
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;

        Transfer(_from, _to, _value);

        return true;
    }

    /**
     * @dev Allows another contract to spend some tokens on your behalf.
     *
     * @param _spender The address of the account which will be approved for transfer of tokens.
     * @param _value The number of tokens to be approved for transfer.
     *
     * @return Whether the approval was successful or not.
     */
    function approve(address _spender, uint _value) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;

        Approval(msg.sender, _spender, _value);

        return true;
    }

    /**
     * @dev Shows the number of tokens approved by `_owner` that are allowed to be transferred by `_spender`.
     *
     * @param _owner The account which allowed the transfer.
     * @param _spender The account which will spend the tokens.
     *
     * @return The number of tokens to be transferred.
     */
    function allowance(address _owner, address _spender) public constant returns (uint remaining) {
        return allowed[_owner][_spender];
    }    
}

// File: contracts\traits\HasOwner.sol

/**
 * @title HasOwner
 *
 * @dev Allows for exclusive access to certain functionality.
 */
contract HasOwner {
    // Current owner.
    address public owner;

    // Conditionally the new owner.
    address public newOwner;

    /**
     * @dev The constructor.
     *
     * @param _owner The address of the owner.
     */
    function HasOwner(address _owner) internal {
        owner = _owner;
    }

    /** 
     * @dev Access control modifier that allows only the current owner to call the function.
     */
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    /**
     * @dev The event is fired when the current owner is changed.
     *
     * @param _oldOwner The address of the previous owner.
     * @param _newOwner The address of the new owner.
     */
    event OwnershipTransfer(address indexed _oldOwner, address indexed _newOwner);

    /**
     * @dev Transfering the ownership is a two-step process, as we prepare
     * for the transfer by setting `newOwner` and requiring `newOwner` to accept
     * the transfer. This prevents accidental lock-out if something goes wrong
     * when passing the `newOwner` address.
     *
     * @param _newOwner The address of the proposed new owner.
     */
    function transferOwnership(address _newOwner) public onlyOwner {
        newOwner = _newOwner;
    }
 
    /**
     * @dev The `newOwner` finishes the ownership transfer process by accepting the
     * ownership.
     */
    function acceptOwnership() public {
        require(msg.sender == newOwner);

        OwnershipTransfer(owner, newOwner);

        owner = newOwner;
    }
}

// File: contracts\traits\Freezable.sol

/**
 * @title Freezable
 * @dev This trait allows to freeze the transactions in a Token
 */
contract Freezable is HasOwner {
  bool public frozen = false;

  /**
   * @dev Modifier makes methods callable only when the contract is not frozen.
   */
  modifier requireNotFrozen() {
    require(!frozen);
    _;
  }

  /**
   * @dev Allows the owner to "freeze" the contract.
   */
  function freeze() onlyOwner public {
    frozen = true;
  }

  /**
   * @dev Allows the owner to "unfreeze" the contract.
   */
  function unfreeze() onlyOwner public {
    frozen = false;
  }
}

// File: contracts\traits\FreezableERC20Token.sol

/**
 * @title FreezableERC20Token
 *
 * @dev Extends ERC20Token and adds ability to freeze all transfers of tokens.
 */
contract FreezableERC20Token is ERC20Token, Freezable {
    /**
     * @dev Overrides the original ERC20Token implementation by adding whenNotFrozen modifier.
     *
     * @param _to The target address to which the `_value` number of tokens will be sent.
     * @param _value The number of tokens to send.
     *
     * @return Whether the transfer was successful or not.
     */
    function transfer(address _to, uint _value) public requireNotFrozen returns (bool success) {
        return super.transfer(_to, _value);
    }

    /**
     * @dev Send `_value` tokens to `_to` from `_from` if `_from` has approved the process.
     *
     * @param _from The address of the sender.
     * @param _to The address of the recipient.
     * @param _value The number of tokens to be transferred.
     *
     * @return Whether the transfer was successful or not.
     */
    function transferFrom(address _from, address _to, uint _value) public requireNotFrozen returns (bool success) {
        return super.transferFrom(_from, _to, _value);
    }

    /**
     * @dev Allows another contract to spend some tokens on your behalf.
     *
     * @param _spender The address of the account which will be approved for transfer of tokens.
     * @param _value The number of tokens to be approved for transfer.
     *
     * @return Whether the approval was successful or not.
     */
    function approve(address _spender, uint _value) public requireNotFrozen returns (bool success) {
        return super.approve(_spender, _value);
    }

}

// File: contracts\FabricToken.sol

/**
 * @title Fabric Token
 *
 * @dev A standard token implementation of the ERC20 token standard with added
 *      HasOwner trait and initialized using the configuration constants.
 */
contract FabricToken is FabricTokenConfig, HasOwner, FreezableERC20Token {
    // The name of the token.
    string public name;

    // The symbol for the token.
    string public symbol;

    // The decimals of the token.
    uint8 public decimals;

    /**
     * @dev The constructor. Initially sets `totalSupply` and the balance of the
     *      `owner` address according to the initialization parameter.
     */
    function FabricToken(uint _totalSupply) public
        HasOwner(msg.sender)
    {
        name = NAME;
        symbol = SYMBOL;
        decimals = DECIMALS;
        totalSupply = _totalSupply;
        balances[owner] = _totalSupply;
    }
}

// File: contracts\configs\FabricTokenFundraiserConfig.sol

/**
 * @title FabricTokenFundraiserConfig
 *
 * @dev The static configuration for the Fabric Token fundraiser.
 */
contract FabricTokenFundraiserConfig is FabricTokenConfig {
    // The number of FT per 1 ETH.
    uint constant CONVERSION_RATE = 9000;

    // The public sale hard cap of the fundraiser.
    uint constant TOKENS_HARD_CAP = 71250 * (10**3) * DECIMALS_FACTOR;

    // The start date of the fundraiser: Thursday, 2018-02-15 10:00:00 UTC.
    uint constant START_DATE = 1518688800;

    // The end date of the fundraiser: Sunday, 2018-04-01 10:00:00 UTC (45 days after `START_DATE`).
    uint constant END_DATE = 1522576800;
    
    // Total number of tokens locked for the FT core team.
    uint constant TOKENS_LOCKED_CORE_TEAM = 12 * (10**6) * DECIMALS_FACTOR;

    // Total number of tokens locked for FT advisors.
    uint constant TOKENS_LOCKED_ADVISORS = 7 * (10**6) * DECIMALS_FACTOR;

    // The release date for tokens locked for the FT core team.
    uint constant TOKENS_LOCKED_CORE_TEAM_RELEASE_DATE = START_DATE + 1 years;

    // The release date for tokens locked for FT advisors.
    uint constant TOKENS_LOCKED_ADVISORS_RELEASE_DATE = START_DATE + 180 days;

    // Total number of tokens locked for bounty program.
    uint constant TOKENS_BOUNTY_PROGRAM = 1 * (10**6) * DECIMALS_FACTOR;

    // Maximum gas price limit
    uint constant MAX_GAS_PRICE = 50000000000 wei; // 50 gwei/shanon

    // Minimum individual contribution
    uint constant MIN_CONTRIBUTION =  0.1 ether;

    // Individual limit in ether
    uint constant INDIVIDUAL_ETHER_LIMIT =  9 ether;
}

// File: contracts\traits\TokenSafe.sol

/**
 * @title TokenSafe
 *
 * @dev A multi-bundle token safe contract that contains locked tokens released after a date for the specific bundle type.
 */
contract TokenSafe {
    using SafeMath for uint;

    struct AccountsBundle {
        // The total number of tokens locked.
        uint lockedTokens;
        // The release date for the locked tokens
        // Note: Unix timestamp fits uint32, however block.timestamp is uint
        uint releaseDate;
        // The balances for the FT locked token accounts.
        mapping (address => uint) balances;
    }

    // The account bundles of locked tokens grouped by release date
    mapping (uint8 => AccountsBundle) public bundles;

    // The `ERC20TokenInterface` contract.
    ERC20TokenInterface token;

    /**
     * @dev The constructor.
     *
     * @param _token The address of the Fabric Token (fundraiser) contract.
     */
    function TokenSafe(address _token) public {
        token = ERC20TokenInterface(_token);
    }

    /**
     * @dev The function initializes the bundle of accounts with a release date.
     *
     * @param _type Bundle type.
     * @param _releaseDate Unix timestamp of the time after which the tokens can be released
     */
    function initBundle(uint8 _type, uint _releaseDate) internal {
        bundles[_type].releaseDate = _releaseDate;
    }

    /**
     * @dev Add new account with locked token balance to the specified bundle type.
     *
     * @param _type Bundle type.
     * @param _account The address of the account to be added.
     * @param _balance The number of tokens to be locked.
     */
    function addLockedAccount(uint8 _type, address _account, uint _balance) internal {
        var bundle = bundles[_type];
        bundle.balances[_account] = bundle.balances[_account].plus(_balance);
        bundle.lockedTokens = bundle.lockedTokens.plus(_balance);
    }

    /**
     * @dev Allows an account to be released if it meets the time constraints.
     *
     * @param _type Bundle type.
     * @param _account The address of the account to be released.
     */
    function releaseAccount(uint8 _type, address _account) internal {
        var bundle = bundles[_type];
        require(now >= bundle.releaseDate);
        uint tokens = bundle.balances[_account];
        require(tokens > 0);
        bundle.balances[_account] = 0;
        bundle.lockedTokens = bundle.lockedTokens.minus(tokens);
        if (!token.transfer(_account, tokens)) {
            revert();
        }
    }
}

// File: contracts\FabricTokenSafe.sol

/**
 * @title FabricTokenSafe
 *
 * @dev The Fabric Token safe containing all details about locked tokens.
 */
contract FabricTokenSafe is TokenSafe, FabricTokenFundraiserConfig {
    // Bundle type constants
    uint8 constant CORE_TEAM = 0;
    uint8 constant ADVISORS = 1;

    /**
     * @dev The constructor.
     *
     * @param _token The address of the Fabric Token (fundraiser) contract.
     */
    function FabricTokenSafe(address _token) public
        TokenSafe(_token)
    {
        token = ERC20TokenInterface(_token);

        /// Core team.
        initBundle(CORE_TEAM,
            TOKENS_LOCKED_CORE_TEAM_RELEASE_DATE
        );

        // Accounts with tokens locked for the FT core team.
        addLockedAccount(CORE_TEAM, 0xB494096548aA049C066289A083204E923cBf4413, 4 * (10**6) * DECIMALS_FACTOR);
        addLockedAccount(CORE_TEAM, 0xE3506B01Bee377829ee3CffD8bae650e990c5d68, 4 * (10**6) * DECIMALS_FACTOR);
        addLockedAccount(CORE_TEAM, 0x3d13219dc1B8913E019BeCf0772C2a54318e5718, 4 * (10**6) * DECIMALS_FACTOR);

        // Verify that the tokens add up to the constant in the configuration.
        assert(bundles[CORE_TEAM].lockedTokens == TOKENS_LOCKED_CORE_TEAM);

        /// Advisors.
        initBundle(ADVISORS,
            TOKENS_LOCKED_ADVISORS_RELEASE_DATE
        );

        // Accounts with FT tokens locked for advisors.
        addLockedAccount(ADVISORS, 0x4647Da07dAAb17464278B988CDE59A4b911EBe44, 2 * (10**6) * DECIMALS_FACTOR);
        addLockedAccount(ADVISORS, 0x3eA2caac5A0A4a55f9e304AcD09b3CEe6cD4Bc39, 1 * (10**6) * DECIMALS_FACTOR);
        addLockedAccount(ADVISORS, 0xd5f791EC3ED79f79a401b12f7625E1a972382437, 1 * (10**6) * DECIMALS_FACTOR);
        addLockedAccount(ADVISORS, 0xcaeae3CD1a5d3E6E950424C994e14348ac3Ec5dA, 1 * (10**6) * DECIMALS_FACTOR);
        addLockedAccount(ADVISORS, 0xb6EA6193058F3c8A4A413d176891d173D62E00bE, 1 * (10**6) * DECIMALS_FACTOR);
        addLockedAccount(ADVISORS, 0x8b3E184Cf5C3bFDaB1C4D0F30713D30314FcfF7c, 1 * (10**6) * DECIMALS_FACTOR);

        // Verify that the tokens add up to the constant in the configuration.
        assert(bundles[ADVISORS].lockedTokens == TOKENS_LOCKED_ADVISORS);
    }

    /**
     * @dev Returns the total locked tokens. This function is called by the fundraiser to determine number of tokens to create upon finalization.
     *
     * @return The current total number of locked Fabric Tokens.
     */
    function totalTokensLocked() public constant returns (uint) {
        return bundles[CORE_TEAM].lockedTokens.plus(bundles[ADVISORS].lockedTokens);
    }

    /**
     * @dev Allows core team account FT tokens to be released.
     */
    function releaseCoreTeamAccount() public {
        releaseAccount(CORE_TEAM, msg.sender);
    }

    /**
     * @dev Allows advisors account FT tokens to be released.
     */
    function releaseAdvisorsAccount() public {
        releaseAccount(ADVISORS, msg.sender);
    }
}

// File: contracts\traits\Whitelist.sol

contract Whitelist is HasOwner
{
    // Whitelist mapping
    mapping(address => bool) public whitelist;

    /**
     * @dev The constructor.
     */
    function Whitelist(address _owner) public
        HasOwner(_owner)
    {

    }

    /**
     * @dev Access control modifier that allows only whitelisted address to call the method.
     */
    modifier onlyWhitelisted {
        require(whitelist[msg.sender]);
        _;
    }

    /**
     * @dev Internal function that sets whitelist status in batch.
     *
     * @param _entries An array with the entries to be updated
     * @param _status The new status to apply
     */
    function setWhitelistEntries(address[] _entries, bool _status) internal {
        for (uint32 i = 0; i < _entries.length; ++i) {
            whitelist[_entries[i]] = _status;
        }
    }

    /**
     * @dev Public function that allows the owner to whitelist multiple entries
     *
     * @param _entries An array with the entries to be whitelisted
     */
    function whitelistAddresses(address[] _entries) public onlyOwner {
        setWhitelistEntries(_entries, true);
    }

    /**
     * @dev Public function that allows the owner to blacklist multiple entries
     *
     * @param _entries An array with the entries to be blacklist
     */
    function blacklistAddresses(address[] _entries) public onlyOwner {
        setWhitelistEntries(_entries, false);
    }
}

// File: contracts\FabricTokenFundraiser.sol

/**
 * @title FabricTokenFundraiser
 *
 * @dev The Fabric Token fundraiser contract.
 */
contract FabricTokenFundraiser is FabricToken, FabricTokenFundraiserConfig, Whitelist {
    // Indicates whether the fundraiser has ended or not.
    bool public finalized = false;

    // The address of the account which will receive the funds gathered by the fundraiser.
    address public beneficiary;

    // The number of FT participants will receive per 1 ETH.
    uint public conversionRate;

    // Fundraiser start date.
    uint public startDate;

    // Fundraiser end date.
    uint public endDate;

    // Fundraiser tokens hard cap.
    uint public hardCap;

    // The `FabricTokenSafe` contract.
    FabricTokenSafe public fabricTokenSafe;

    // The minimum amount of ether allowed in the public sale
    uint internal minimumContribution;

    // The maximum amount of ether allowed per address
    uint internal individualLimit;

    // Number of tokens sold during the fundraiser.
    uint private tokensSold;

    // Indicates whether the tokens are claimed by the partners
    bool private partnerTokensClaimed = false;

    /**
     * @dev The event fires every time a new buyer enters the fundraiser.
     *
     * @param _address The address of the buyer.
     * @param _ethers The number of ethers sent.
     * @param _tokens The number of tokens received by the buyer.
     * @param _newTotalSupply The updated total number of tokens currently in circulation.
     * @param _conversionRate The conversion rate at which the tokens were bought.
     */
    event FundsReceived(address indexed _address, uint _ethers, uint _tokens, uint _newTotalSupply, uint _conversionRate);

    /**
     * @dev The event fires when the beneficiary of the fundraiser is changed.
     *
     * @param _beneficiary The address of the new beneficiary.
     */
    event BeneficiaryChange(address _beneficiary);

    /**
     * @dev The event fires when the number of FT per 1 ETH is changed.
     *
     * @param _conversionRate The new number of FT per 1 ETH.
     */
    event ConversionRateChange(uint _conversionRate);

    /**
     * @dev The event fires when the fundraiser is successfully finalized.
     *
     * @param _beneficiary The address of the beneficiary.
     * @param _ethers The number of ethers transfered to the beneficiary.
     * @param _totalSupply The total number of tokens in circulation.
     */
    event Finalized(address _beneficiary, uint _ethers, uint _totalSupply);

    /**
     * @dev The constructor.
     *
     * @param _beneficiary The address which will receive the funds gathered by the fundraiser.
     */
    function FabricTokenFundraiser(address _beneficiary) public
        FabricToken(0)
        Whitelist(msg.sender)
    {
        require(_beneficiary != 0);

        beneficiary = _beneficiary;
        conversionRate = CONVERSION_RATE;
        startDate = START_DATE;
        endDate = END_DATE;
        hardCap = TOKENS_HARD_CAP;
        tokensSold = 0;
        minimumContribution = MIN_CONTRIBUTION;
        individualLimit = INDIVIDUAL_ETHER_LIMIT * CONVERSION_RATE;

        fabricTokenSafe = new FabricTokenSafe(this);

        // Freeze the transfers for the duration of the fundraiser.
        freeze();
    }

    /**
     * @dev Changes the beneficiary of the fundraiser.
     *
     * @param _beneficiary The address of the new beneficiary.
     */
    function setBeneficiary(address _beneficiary) public onlyOwner {
        require(_beneficiary != 0);

        beneficiary = _beneficiary;

        BeneficiaryChange(_beneficiary);
    }

    /**
     * @dev Sets converstion rate of 1 ETH to FT. Can only be changed before the fundraiser starts.
     *
     * @param _conversionRate The new number of Fabric Tokens per 1 ETH.
     */
    function setConversionRate(uint _conversionRate) public onlyOwner {
        require(now < startDate);
        require(_conversionRate > 0);

        conversionRate = _conversionRate;
        individualLimit = INDIVIDUAL_ETHER_LIMIT * _conversionRate;

        ConversionRateChange(_conversionRate);
    }

    /**
     * @dev The default function which will fire every time someone sends ethers to this contract's address.
     */
    function() public payable {
        buyTokens();
    }

    /**
     * @dev Creates new tokens based on the number of ethers sent and the conversion rate.
     */
    function buyTokens() public payable onlyWhitelisted {
        require(!finalized);
        require(now >= startDate);
        require(now <= endDate);
        require(tx.gasprice <= MAX_GAS_PRICE);  // gas price limit
        require(msg.value >= minimumContribution);  // required minimum contribution
        require(tokensSold <= hardCap);

        // Calculate the number of tokens the buyer will receive.
        uint tokens = msg.value.mul(conversionRate);
        balances[msg.sender] = balances[msg.sender].plus(tokens);

        // Ensure that the individual contribution limit has not been reached
        require(balances[msg.sender] <= individualLimit);

        tokensSold = tokensSold.plus(tokens);
        totalSupply = totalSupply.plus(tokens);

        Transfer(0x0, msg.sender, tokens);

        FundsReceived(
            msg.sender,
            msg.value, 
            tokens, 
            totalSupply, 
            conversionRate
        );
    }

    /**
     * @dev Distributes the tokens allocated for the strategic partners.
     */
    function claimPartnerTokens() public {
        require(!partnerTokensClaimed);
        require(now >= startDate);

        partnerTokensClaimed = true;

        address partner1 = 0xA6556B9BD0AAbf0d8824374A3C425d315b09b832;
        balances[partner1] = balances[partner1].plus(125 * (10**4) * DECIMALS_FACTOR);

        address partner2 = 0x783A1cBc37a8ef2F368908490b72BfE801DA1877;
        balances[partner2] = balances[partner2].plus(750 * (10**4) * DECIMALS_FACTOR);

        totalSupply = totalSupply.plus(875 * (10**4) * DECIMALS_FACTOR);
    }

    /**
     * @dev Finalize the fundraiser if `endDate` has passed or if `hardCap` is reached.
     */
    function finalize() public onlyOwner {
        require((totalSupply >= hardCap) || (now >= endDate));
        require(!finalized);

        Finalized(beneficiary, this.balance, totalSupply);

        /// Send the total number of ETH gathered to the beneficiary.
        beneficiary.transfer(this.balance);

        /// Allocate locked tokens to the `FabricTokenSafe` contract.
        uint totalTokensLocked = fabricTokenSafe.totalTokensLocked();
        balances[address(fabricTokenSafe)] = balances[address(fabricTokenSafe)].plus(totalTokensLocked);
        totalSupply = totalSupply.plus(totalTokensLocked);

        // Transfer the funds for the bounty program.
        balances[owner] = balances[owner].plus(TOKENS_BOUNTY_PROGRAM);
        totalSupply = totalSupply.plus(TOKENS_BOUNTY_PROGRAM);

        /// Finalize the fundraiser. Keep in mind that this cannot be undone.
        finalized = true;

        // Unfreeze transfers
        unfreeze();
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"claimPartnerTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"frozen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"name":"_entries","type":"address[]"}],"name":"whitelistAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"freeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unfreeze","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_entries","type":"address[]"}],"name":"blacklistAddresses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"conversionRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"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":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"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":"finalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endDate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_conversionRate","type":"uint256"}],"name":"setConversionRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","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":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"fabricTokenSafe","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hardCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_beneficiary","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_ethers","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_newTotalSupply","type":"uint256"},{"indexed":false,"name":"_conversionRate","type":"uint256"}],"name":"FundsReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_beneficiary","type":"address"}],"name":"BeneficiaryChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_conversionRate","type":"uint256"}],"name":"ConversionRateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_beneficiary","type":"address"},{"indexed":false,"name":"_ethers","type":"uint256"},{"indexed":false,"name":"_totalSupply","type":"uint256"}],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_oldOwner","type":"address"},{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnershipTransfer","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"}]

60606040526004805460a060020a60ff02191690556009805460ff1990811690915560128054909116905534156200003657600080fd5b60405160208062001d728339810160405280805160038054600160a060020a03191633600160a060020a038116919091179091559092509050600060408051908101604052600c81527f46616272696320546f6b656e000000000000000000000000000000000000000060208201526005908051620000ba9291602001906200025f565b5060408051908101604052600281527f465400000000000000000000000000000000000000000000000000000000000060208201526006908051620001049291602001906200025f565b506007805460ff191660121790556000818155600354600160a060020a03908116825260016020526040909120919091558216151590506200014557600080fd5b6009805461010060a860020a031916610100600160a060020a03841602179055612328600a55635a855a20600b55635ac0ada0600c556a3aefc63d4e89230f400000600d55600060115567016345785d8a0000600f5569112704cffb9b70a0000060105530620001b4620002e4565b600160a060020a039091168152602001604051809103906000f0801515620001db57600080fd5b600e8054600160a060020a031916600160a060020a0392909216919091179055620002136401000000006200021a810262000cf11704565b5062000315565b60035433600160a060020a039081169116146200023657600080fd5b6004805460a060020a60ff02191674010000000000000000000000000000000000000000179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002a257805160ff1916838001178555620002d2565b82800160010185558215620002d2579182015b82811115620002d2578251825591602001919060010190620002b5565b50620002e0929150620002f5565b5090565b604051610722806200165083390190565b6200031291905b80821115620002e05760008155600101620002fc565b90565b61132b80620003256000396000f30060606040526004361061018a5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663049a2dd18114610194578063054f7d9c146101a757806306fdde03146101ce578063095ea7b3146102585780630b97bc861461027a57806318160ddd1461029f5780631c31f710146102b257806323b872dd146102d15780632bf04304146102f9578063313ce5671461034857806338af3eed146103715780634bb278f3146103a057806362a5af3b146103b35780636a28f000146103c657806370a08231146103d957806377a54eb8146103f857806379ba5097146104475780637ffdf53e1461045a5780638da5cb5b1461046d57806395d89b41146104805780639b19251a14610493578063a9059cbb146104b2578063b3f05b97146104d4578063c24a0f8b146104e7578063d0febe4c1461018a578063d2e80494146104fa578063d4ee1d9014610510578063dd62ed3e14610523578063f2fde38b14610548578063f4fa860314610567578063fb86a4041461057a575b61019261058d565b005b341561019f57600080fd5b61019261074a565b34156101b257600080fd5b6101ba610892565b604051901515815260200160405180910390f35b34156101d957600080fd5b6101e16108a2565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561021d578082015183820152602001610205565b50505050905090810190601f16801561024a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026357600080fd5b6101ba600160a060020a0360043516602435610940565b341561028557600080fd5b61028d61096d565b60405190815260200160405180910390f35b34156102aa57600080fd5b61028d610973565b34156102bd57600080fd5b610192600160a060020a0360043516610979565b34156102dc57600080fd5b6101ba600160a060020a0360043581169060243516604435610a16565b341561030457600080fd5b6101926004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610a4595505050505050565b341561035357600080fd5b61035b610a6e565b60405160ff909116815260200160405180910390f35b341561037c57600080fd5b610384610a77565b604051600160a060020a03909116815260200160405180910390f35b34156103ab57600080fd5b610192610a8b565b34156103be57600080fd5b610192610cf1565b34156103d157600080fd5b610192610d32565b34156103e457600080fd5b61028d600160a060020a0360043516610d6d565b341561040357600080fd5b6101926004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610d8895505050505050565b341561045257600080fd5b610192610dae565b341561046557600080fd5b61028d610e39565b341561047857600080fd5b610384610e3f565b341561048b57600080fd5b6101e1610e4e565b341561049e57600080fd5b6101ba600160a060020a0360043516610eb9565b34156104bd57600080fd5b6101ba600160a060020a0360043516602435610ece565b34156104df57600080fd5b6101ba610ef2565b34156104f257600080fd5b61028d610efb565b341561050557600080fd5b610192600435610f01565b341561051b57600080fd5b610384610f80565b341561052e57600080fd5b61028d600160a060020a0360043581169060243516610f8f565b341561055357600080fd5b610192600160a060020a0360043516610fba565b341561057257600080fd5b610384611004565b341561058557600080fd5b61028d611013565b600160a060020a03331660009081526008602052604081205460ff1615156105b457600080fd5b60095460ff16156105c457600080fd5b600b544210156105d357600080fd5b600c544211156105e257600080fd5b640ba43b74003a11156105f457600080fd5b600f5434101561060357600080fd5b600d54601154111561061457600080fd5b600a5461062890349063ffffffff61101916565b600160a060020a033316600090815260016020526040902054909150610654908263ffffffff61103d16565b600160a060020a033316600090815260016020526040902081905560105490111561067e57600080fd5b601154610691908263ffffffff61103d16565b6011556000546106a7908263ffffffff61103d16565b6000908155600160a060020a033316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a333600160a060020a03167f17e507914c1ab4cd822dacbda95ac688e622145eaaf4547021782e4a347837453483600054600a546040518085815260200184815260200183815260200182815260200194505050505060405180910390a250565b601254600090819060ff161561075f57600080fd5b600b5442101561076e57600080fd5b6012805460ff1916600190811790915573a6556b9bd0aabf0d8824374a3c425d315b09b83260008190526020919091527ffa207b1b46c5ac06b3e94761adb7afab09b1b46722bd487dc099202049a6188f549092506107de906a0108b2a2c280290940000063ffffffff61103d16565b600160a060020a03831660009081526001602052604081209190915573783a1cbc37a8ef2f368908490b72bfe801da1877908190527f10d43ec9345f8f08c9bac7a5e73af742daeac0aef3aa01f279eedb48c77c063c54909150610853906a06342fd08f00f63780000063ffffffff61103d16565b600160a060020a0382166000908152600160205260408120919091555461088b906a073ce27351811f40c0000063ffffffff61103d16565b6000555050565b60045460a060020a900460ff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109385780601f1061090d57610100808354040283529160200191610938565b820191906000526020600020905b81548152906001019060200180831161091b57829003601f168201915b505050505081565b60045460009060a060020a900460ff161561095a57600080fd5b610964838361104c565b90505b92915050565b600b5481565b60005481565b60035433600160a060020a0390811691161461099457600080fd5b600160a060020a03811615156109a957600080fd5b6009805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a038416021790557fde18bec64db6456a4810135a56f83d06f0ab5786ebdb21e3bef0893f63dab7fd81604051600160a060020a03909116815260200160405180910390a150565b60045460009060a060020a900460ff1615610a3057600080fd5b610a3b8484846110b8565b90505b9392505050565b60035433600160a060020a03908116911614610a6057600080fd5b610a6b8160016111cc565b50565b60075460ff1681565b6009546101009004600160a060020a031681565b60035460009033600160a060020a03908116911614610aa957600080fd5b600d54600054101580610abe5750600c544210155b1515610ac957600080fd5b60095460ff1615610ad957600080fd5b7f616c9469db50815ae0f1d0a020d9fc9060da7c57f03559afb0d4ebdaa0a3a05e600960019054906101000a9004600160a060020a031630600160a060020a0316316000546040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1600954600160a060020a0361010090910481169030163180156108fc0290604051600060405180830381858888f193505050501515610b9157600080fd5b600e54600160a060020a031663dc5bf9616000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610bf257600080fd5b6102c65a03f11515610c0357600080fd5b5050506040518051600e54600160a060020a0316600090815260016020526040902054909250610c3a91508263ffffffff61103d16565b600e54600160a060020a031660009081526001602052604081209190915554610c69908263ffffffff61103d16565b6000908155600354600160a060020a0316815260016020526040902054610ca09069d3c21bcecceda100000063ffffffff61103d16565b600354600160a060020a031660009081526001602052604081209190915554610cd99069d3c21bcecceda100000063ffffffff61103d16565b6000556009805460ff19166001179055610a6b610d32565b60035433600160a060020a03908116911614610d0c57600080fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a179055565b60035433600160a060020a03908116911614610d4d57600080fd5b6004805474ff000000000000000000000000000000000000000019169055565b600160a060020a031660009081526001602052604090205490565b60035433600160a060020a03908116911614610da357600080fd5b610a6b8160006111cc565b60045433600160a060020a03908116911614610dc957600080fd5b600454600354600160a060020a0391821691167f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca60405160405180910390a36004546003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600a5481565b600354600160a060020a031681565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109385780601f1061090d57610100808354040283529160200191610938565b60086020526000908152604090205460ff1681565b60045460009060a060020a900460ff1615610ee857600080fd5b6109648383611234565b60095460ff1681565b600c5481565b60035433600160a060020a03908116911614610f1c57600080fd5b600b544210610f2a57600080fd5b60008111610f3757600080fd5b600a819055677ce66c50e284000081026010557fed4f114d5309d23a6f29a047b8e4014ccd43ac8c42087d845ef4d0f1fbf2d8848160405190815260200160405180910390a150565b600454600160a060020a031681565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610fd557600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e54600160a060020a031681565b600d5481565b6000828202831580611035575082848281151561103257fe5b04145b1515610a3e57fe5b600082820183811015610a3e57fe5b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600160a060020a038316600090815260016020526040812054829010806111055750600160a060020a03808516600090815260026020908152604080832033909416835292905220548290105b8061110e575081155b1561111b57506000610a3e565b600160a060020a038316600090815260016020526040902054611144908363ffffffff61103d16565b600160a060020a03808516600081815260016020908152604080832095909555888416808352858320805489900390556002825285832033909516835293905283902080548690039055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60005b82518163ffffffff16101561122f578160086000858463ffffffff16815181106111f557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790556001016111cf565b505050565b600160a060020a03331660009081526001602052604081205482901080611259575081155b1561126657506000610967565b600160a060020a03338116600090815260016020526040808220805486900390559185168152205461129e908363ffffffff61103d16565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a3506001929150505600a165627a7a723058204a434c3597397ea37843e3ff0fedd12273951a92474c0bcf18180fcde320e7eb00296060604052341561000f57600080fd5b6040516020806107228339810160405280805160018054600160a060020a038316600160a060020a03199182168117909116179055915061006490506000635c668da06401000000006102c06102f582021704565b61009c600073b494096548aa049c066289a083204e923cbf44136a034f086f3b33b6840000006401000000006102d961030e82021704565b6100d4600073e3506b01bee377829ee3cffd8bae650e990c5d686a034f086f3b33b6840000006401000000006102d961030e82021704565b61010c6000733d13219dc1b8913e019becf0772c2a54318e57186a034f086f3b33b6840000006401000000006102d961030e82021704565b60008080526020527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5546a09ed194db19b238c0000001461014957fe5b6101656001635b72a8206401000000006102c06102f582021704565b61019d6001734647da07daab17464278b988cde59a4b911ebe446a01a784379d99db420000006401000000006102d961030e82021704565b6101d46001733ea2caac5a0a4a55f9e304acd09b3cee6cd4bc3969d3c21bcecceda10000006401000000006102d961030e82021704565b61020b600173d5f791ec3ed79f79a401b12f7625e1a97238243769d3c21bcecceda10000006401000000006102d961030e82021704565b610242600173caeae3cd1a5d3e6e950424c994e14348ac3ec5da69d3c21bcecceda10000006401000000006102d961030e82021704565b610279600173b6ea6193058f3c8a4a413d176891d173d62e00be69d3c21bcecceda10000006401000000006102d961030e82021704565b6102b06001738b3e184cf5c3bfdab1c4d0f30713d30314fcff7c69d3c21bcecceda10000006401000000006102d961030e82021704565b600160009081526020527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d546a05ca4ec2a79a7f67000000146102ef57fe5b506103a0565b60ff909116600090815260208190526040902060010155565b60ff8316600090815260208181526040808320600160a060020a0386168452600281019092529091205461034f908364010000000061029861038a82021704565b600160a060020a03841660009081526002830160205260409020558054610383908364010000000061029861038a82021704565b9055505050565b60008282018381101561039957fe5b9392505050565b610373806103af6000396000f3006060604052600436106100615763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166317e95fbc811461006657806347b3aff81461007b578063c1873e26146100ac578063dc5bf961146100bf575b600080fd5b341561007157600080fd5b6100796100e4565b005b341561008657600080fd5b61009460ff600435166100f1565b60405191825260208201526040908101905180910390f35b34156100b757600080fd5b61007961010a565b34156100ca57600080fd5b6100d2610115565b60405190815260200160405180910390f35b6100ef600133610177565b565b6000602081905290815260409020805460019091015482565b6100ef600033610177565b600060208190527fada5013122d395ba3c54772283fb069b10426056ef8ca54750cb9bb552a59e7d548180527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5546101729163ffffffff61029816565b905090565b60ff82166000908152602081905260408120600181015490919042101561019d57600080fd5b50600160a060020a03821660009081526002820160205260408120549081116101c557600080fd5b600160a060020a038316600090815260028301602052604081205581546101f2908263ffffffff6102ae16565b8255600154600160a060020a031663a9059cbb84836000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561026c57600080fd5b6102c65a03f1151561027d57600080fd5b50505060405180519050151561029257600080fd5b50505050565b6000828201838110156102a757fe5b9392505050565b6000828211156102ba57fe5b50900390565b60ff909116600090815260208190526040902060010155565b60ff8316600090815260208181526040808320600160a060020a03861684526002810190925290912054610313908363ffffffff61029816565b600160a060020a03841660009081526002830160205260409020558054610340908363ffffffff61029816565b90555050505600a165627a7a7230582087070590124402b774273f0f3df8450bcf26f6b6fbca17cc2fa63f9b48f6d05a00290000000000000000000000000d15719e1d47bd37a39dcf30e3725777cf639241

Deployed Bytecode

0x60606040526004361061018a5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663049a2dd18114610194578063054f7d9c146101a757806306fdde03146101ce578063095ea7b3146102585780630b97bc861461027a57806318160ddd1461029f5780631c31f710146102b257806323b872dd146102d15780632bf04304146102f9578063313ce5671461034857806338af3eed146103715780634bb278f3146103a057806362a5af3b146103b35780636a28f000146103c657806370a08231146103d957806377a54eb8146103f857806379ba5097146104475780637ffdf53e1461045a5780638da5cb5b1461046d57806395d89b41146104805780639b19251a14610493578063a9059cbb146104b2578063b3f05b97146104d4578063c24a0f8b146104e7578063d0febe4c1461018a578063d2e80494146104fa578063d4ee1d9014610510578063dd62ed3e14610523578063f2fde38b14610548578063f4fa860314610567578063fb86a4041461057a575b61019261058d565b005b341561019f57600080fd5b61019261074a565b34156101b257600080fd5b6101ba610892565b604051901515815260200160405180910390f35b34156101d957600080fd5b6101e16108a2565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561021d578082015183820152602001610205565b50505050905090810190601f16801561024a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561026357600080fd5b6101ba600160a060020a0360043516602435610940565b341561028557600080fd5b61028d61096d565b60405190815260200160405180910390f35b34156102aa57600080fd5b61028d610973565b34156102bd57600080fd5b610192600160a060020a0360043516610979565b34156102dc57600080fd5b6101ba600160a060020a0360043581169060243516604435610a16565b341561030457600080fd5b6101926004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610a4595505050505050565b341561035357600080fd5b61035b610a6e565b60405160ff909116815260200160405180910390f35b341561037c57600080fd5b610384610a77565b604051600160a060020a03909116815260200160405180910390f35b34156103ab57600080fd5b610192610a8b565b34156103be57600080fd5b610192610cf1565b34156103d157600080fd5b610192610d32565b34156103e457600080fd5b61028d600160a060020a0360043516610d6d565b341561040357600080fd5b6101926004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843750949650610d8895505050505050565b341561045257600080fd5b610192610dae565b341561046557600080fd5b61028d610e39565b341561047857600080fd5b610384610e3f565b341561048b57600080fd5b6101e1610e4e565b341561049e57600080fd5b6101ba600160a060020a0360043516610eb9565b34156104bd57600080fd5b6101ba600160a060020a0360043516602435610ece565b34156104df57600080fd5b6101ba610ef2565b34156104f257600080fd5b61028d610efb565b341561050557600080fd5b610192600435610f01565b341561051b57600080fd5b610384610f80565b341561052e57600080fd5b61028d600160a060020a0360043581169060243516610f8f565b341561055357600080fd5b610192600160a060020a0360043516610fba565b341561057257600080fd5b610384611004565b341561058557600080fd5b61028d611013565b600160a060020a03331660009081526008602052604081205460ff1615156105b457600080fd5b60095460ff16156105c457600080fd5b600b544210156105d357600080fd5b600c544211156105e257600080fd5b640ba43b74003a11156105f457600080fd5b600f5434101561060357600080fd5b600d54601154111561061457600080fd5b600a5461062890349063ffffffff61101916565b600160a060020a033316600090815260016020526040902054909150610654908263ffffffff61103d16565b600160a060020a033316600090815260016020526040902081905560105490111561067e57600080fd5b601154610691908263ffffffff61103d16565b6011556000546106a7908263ffffffff61103d16565b6000908155600160a060020a033316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405190815260200160405180910390a333600160a060020a03167f17e507914c1ab4cd822dacbda95ac688e622145eaaf4547021782e4a347837453483600054600a546040518085815260200184815260200183815260200182815260200194505050505060405180910390a250565b601254600090819060ff161561075f57600080fd5b600b5442101561076e57600080fd5b6012805460ff1916600190811790915573a6556b9bd0aabf0d8824374a3c425d315b09b83260008190526020919091527ffa207b1b46c5ac06b3e94761adb7afab09b1b46722bd487dc099202049a6188f549092506107de906a0108b2a2c280290940000063ffffffff61103d16565b600160a060020a03831660009081526001602052604081209190915573783a1cbc37a8ef2f368908490b72bfe801da1877908190527f10d43ec9345f8f08c9bac7a5e73af742daeac0aef3aa01f279eedb48c77c063c54909150610853906a06342fd08f00f63780000063ffffffff61103d16565b600160a060020a0382166000908152600160205260408120919091555461088b906a073ce27351811f40c0000063ffffffff61103d16565b6000555050565b60045460a060020a900460ff1681565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109385780601f1061090d57610100808354040283529160200191610938565b820191906000526020600020905b81548152906001019060200180831161091b57829003601f168201915b505050505081565b60045460009060a060020a900460ff161561095a57600080fd5b610964838361104c565b90505b92915050565b600b5481565b60005481565b60035433600160a060020a0390811691161461099457600080fd5b600160a060020a03811615156109a957600080fd5b6009805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a038416021790557fde18bec64db6456a4810135a56f83d06f0ab5786ebdb21e3bef0893f63dab7fd81604051600160a060020a03909116815260200160405180910390a150565b60045460009060a060020a900460ff1615610a3057600080fd5b610a3b8484846110b8565b90505b9392505050565b60035433600160a060020a03908116911614610a6057600080fd5b610a6b8160016111cc565b50565b60075460ff1681565b6009546101009004600160a060020a031681565b60035460009033600160a060020a03908116911614610aa957600080fd5b600d54600054101580610abe5750600c544210155b1515610ac957600080fd5b60095460ff1615610ad957600080fd5b7f616c9469db50815ae0f1d0a020d9fc9060da7c57f03559afb0d4ebdaa0a3a05e600960019054906101000a9004600160a060020a031630600160a060020a0316316000546040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a1600954600160a060020a0361010090910481169030163180156108fc0290604051600060405180830381858888f193505050501515610b9157600080fd5b600e54600160a060020a031663dc5bf9616000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610bf257600080fd5b6102c65a03f11515610c0357600080fd5b5050506040518051600e54600160a060020a0316600090815260016020526040902054909250610c3a91508263ffffffff61103d16565b600e54600160a060020a031660009081526001602052604081209190915554610c69908263ffffffff61103d16565b6000908155600354600160a060020a0316815260016020526040902054610ca09069d3c21bcecceda100000063ffffffff61103d16565b600354600160a060020a031660009081526001602052604081209190915554610cd99069d3c21bcecceda100000063ffffffff61103d16565b6000556009805460ff19166001179055610a6b610d32565b60035433600160a060020a03908116911614610d0c57600080fd5b6004805474ff0000000000000000000000000000000000000000191660a060020a179055565b60035433600160a060020a03908116911614610d4d57600080fd5b6004805474ff000000000000000000000000000000000000000019169055565b600160a060020a031660009081526001602052604090205490565b60035433600160a060020a03908116911614610da357600080fd5b610a6b8160006111cc565b60045433600160a060020a03908116911614610dc957600080fd5b600454600354600160a060020a0391821691167f22500af037c600dd7b720644ab6e358635085601d9ac508ad83eb2d6b2d729ca60405160405180910390a36004546003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600a5481565b600354600160a060020a031681565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109385780601f1061090d57610100808354040283529160200191610938565b60086020526000908152604090205460ff1681565b60045460009060a060020a900460ff1615610ee857600080fd5b6109648383611234565b60095460ff1681565b600c5481565b60035433600160a060020a03908116911614610f1c57600080fd5b600b544210610f2a57600080fd5b60008111610f3757600080fd5b600a819055677ce66c50e284000081026010557fed4f114d5309d23a6f29a047b8e4014ccd43ac8c42087d845ef4d0f1fbf2d8848160405190815260200160405180910390a150565b600454600160a060020a031681565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b60035433600160a060020a03908116911614610fd557600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e54600160a060020a031681565b600d5481565b6000828202831580611035575082848281151561103257fe5b04145b1515610a3e57fe5b600082820183811015610a3e57fe5b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b600160a060020a038316600090815260016020526040812054829010806111055750600160a060020a03808516600090815260026020908152604080832033909416835292905220548290105b8061110e575081155b1561111b57506000610a3e565b600160a060020a038316600090815260016020526040902054611144908363ffffffff61103d16565b600160a060020a03808516600081815260016020908152604080832095909555888416808352858320805489900390556002825285832033909516835293905283902080548690039055917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b60005b82518163ffffffff16101561122f578160086000858463ffffffff16815181106111f557fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff19169115159190911790556001016111cf565b505050565b600160a060020a03331660009081526001602052604081205482901080611259575081155b1561126657506000610967565b600160a060020a03338116600090815260016020526040808220805486900390559185168152205461129e908363ffffffff61103d16565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a3506001929150505600a165627a7a723058204a434c3597397ea37843e3ff0fedd12273951a92474c0bcf18180fcde320e7eb0029

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

0000000000000000000000000d15719e1d47bd37a39dcf30e3725777cf639241

-----Decoded View---------------
Arg [0] : _beneficiary (address): 0x0d15719e1D47Bd37a39Dcf30E3725777Cf639241

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000d15719e1d47bd37a39dcf30e3725777cf639241


Swarm Source

bzzr://87070590124402b774273f0f3df8450bcf26f6b6fbca17cc2fa63f9b48f6d05a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.