More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 15,685 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Wallet Addre... | 5216764 | 2516 days ago | IN | 0 ETH | 0.0009867 | ||||
Transfer | 5154148 | 2527 days ago | IN | 0.627 ETH | 0.00144486 | ||||
Transfer | 5128926 | 2531 days ago | IN | 0.62 ETH | 0.00144486 | ||||
Transfer | 4996331 | 2553 days ago | IN | 2.373 ETH | 0.120405 | ||||
Transfer | 4987236 | 2555 days ago | IN | 0.31 ETH | 0.00137261 | ||||
Transfer | 4983818 | 2555 days ago | IN | 2.38 ETH | 0.0024081 | ||||
Transfer | 4969196 | 2558 days ago | IN | 2.372 ETH | 0.0120405 | ||||
Transfer | 4967316 | 2558 days ago | IN | 2.373 ETH | 0.00243218 | ||||
Transfer | 4965991 | 2558 days ago | IN | 2.374 ETH | 0.00130037 | ||||
Transfer | 4961753 | 2559 days ago | IN | 0.63 ETH | 0.00144486 | ||||
Transfer | 4961717 | 2559 days ago | IN | 0.63 ETH | 0.0024081 | ||||
Transfer | 4961717 | 2559 days ago | IN | 0.628 ETH | 0.00127629 | ||||
Transfer | 4959014 | 2559 days ago | IN | 2.372 ETH | 0.02408822 | ||||
Transfer | 4958677 | 2559 days ago | IN | 3 ETH | 0.00105956 | ||||
Transfer | 4958585 | 2559 days ago | IN | 0.4 ETH | 0.00120405 | ||||
Transfer | 4954064 | 2560 days ago | IN | 0 ETH | 0.00361215 | ||||
Transfer | 4952508 | 2561 days ago | IN | 3 ETH | 0.00105956 | ||||
Transfer | 4952499 | 2561 days ago | IN | 3 ETH | 0.001071 | ||||
Transfer | 4952429 | 2561 days ago | IN | 3 ETH | 0.000798 | ||||
Transfer | 4950081 | 2561 days ago | IN | 2.3 ETH | 0.00120405 | ||||
Transfer | 4948813 | 2561 days ago | IN | 2.3 ETH | 0.0120405 | ||||
Transfer | 4946165 | 2562 days ago | IN | 1.5 ETH | 0.00000114 | ||||
Transfer | 4946076 | 2562 days ago | IN | 0.4698 ETH | 0.00084 | ||||
Transfer | 4946071 | 2562 days ago | IN | 0.4698 ETH | 0.00084 | ||||
Transfer | 4945379 | 2562 days ago | IN | 2.38 ETH | 0.00238401 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
4937968 | 2563 days ago | 0.96855031 ETH | ||||
4937968 | 2563 days ago | 1.40925376 ETH | ||||
4937968 | 2563 days ago | 2.3 ETH | ||||
4937968 | 2563 days ago | 0.62639212 ETH | ||||
4937968 | 2563 days ago | 2.37360787 ETH | ||||
4937968 | 2563 days ago | 0.00039212 ETH | ||||
4937968 | 2563 days ago | 2.37360787 ETH | ||||
4937968 | 2563 days ago | 2.373 ETH | ||||
4937968 | 2563 days ago | 0.8 ETH | ||||
4937968 | 2563 days ago | 2.373 ETH | ||||
4937968 | 2563 days ago | 0.00039212 ETH | ||||
4937968 | 2563 days ago | 2.37360787 ETH | ||||
4937968 | 2563 days ago | 2.373 ETH | ||||
4937968 | 2563 days ago | 2.3736 ETH | ||||
4937968 | 2563 days ago | 2.373 ETH | ||||
4937968 | 2563 days ago | 2.08 ETH | ||||
4937968 | 2563 days ago | 2.08 ETH | ||||
4937968 | 2563 days ago | 2.08 ETH | ||||
4937968 | 2563 days ago | 2.08 ETH | ||||
4937968 | 2563 days ago | 0.00039212 ETH | ||||
4937968 | 2563 days ago | 2.37360787 ETH | ||||
4937968 | 2563 days ago | 0.00039212 ETH | ||||
4937968 | 2563 days ago | 2.37360787 ETH | ||||
4937968 | 2563 days ago | 0.00039212 ETH | ||||
4937968 | 2563 days ago | 2.37360787 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BluzelleTokenSale
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-01-18 */ pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // Owned - Ownership model with 2 phase transfers // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // Implements a simple ownership model with 2-phase transfer. contract Owned { address public owner; address public proposedOwner; event OwnershipTransferInitiated(address indexed _proposedOwner); event OwnershipTransferCompleted(address indexed _newOwner); event OwnershipTransferCanceled(); function Owned() public { owner = msg.sender; } modifier onlyOwner() { require(isOwner(msg.sender) == true); _; } function isOwner(address _address) public view returns (bool) { return (_address == owner); } function initiateOwnershipTransfer(address _proposedOwner) public onlyOwner returns (bool) { require(_proposedOwner != address(0)); require(_proposedOwner != address(this)); require(_proposedOwner != owner); proposedOwner = _proposedOwner; OwnershipTransferInitiated(proposedOwner); return true; } function cancelOwnershipTransfer() public onlyOwner returns (bool) { if (proposedOwner == address(0)) { return true; } proposedOwner = address(0); OwnershipTransferCanceled(); return true; } function completeOwnershipTransfer() public returns (bool) { require(msg.sender == proposedOwner); owner = msg.sender; proposedOwner = address(0); OwnershipTransferCompleted(owner); return true; } } // ---------------------------------------------------------------------------- // OpsManaged - Implements an Owner and Ops Permission Model // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // // Implements a security model with owner and ops. // contract OpsManaged is Owned { address public opsAddress; event OpsAddressUpdated(address indexed _newAddress); function OpsManaged() public Owned() { } modifier onlyOwnerOrOps() { require(isOwnerOrOps(msg.sender)); _; } function isOps(address _address) public view returns (bool) { return (opsAddress != address(0) && _address == opsAddress); } function isOwnerOrOps(address _address) public view returns (bool) { return (isOwner(_address) || isOps(_address)); } function setOpsAddress(address _newOpsAddress) public onlyOwner returns (bool) { require(_newOpsAddress != owner); require(_newOpsAddress != address(this)); opsAddress = _newOpsAddress; OpsAddressUpdated(opsAddress); return true; } } // ---------------------------------------------------------------------------- // Math - General Math Utility Library // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- library Math { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 r = a + b; require(r >= a); return r; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(a >= b); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 r = a * b; require(a == 0 || r / a == b); return r; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } } // ---------------------------------------------------------------------------- // ERC20Interface - Standard ERC20 Interface Definition // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Based on the final ERC20 specification at: // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); function name() public view returns (string); function symbol() public view returns (string); function decimals() public view returns (uint8); function totalSupply() public view returns (uint256); function balanceOf(address _owner) public view returns (uint256 balance); function allowance(address _owner, address _spender) public view returns (uint256 remaining); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); } // ---------------------------------------------------------------------------- // ERC20Token - Standard ERC20 Implementation // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- contract ERC20Token is ERC20Interface { using Math for uint256; string private tokenName; string private tokenSymbol; uint8 private tokenDecimals; uint256 internal tokenTotalSupply; mapping(address => uint256) internal balances; mapping(address => mapping (address => uint256)) allowed; function ERC20Token(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, address _initialTokenHolder) public { tokenName = _name; tokenSymbol = _symbol; tokenDecimals = _decimals; tokenTotalSupply = _totalSupply; // The initial balance of tokens is assigned to the given token holder address. balances[_initialTokenHolder] = _totalSupply; // Per EIP20, the constructor should fire a Transfer event if tokens are assigned to an account. Transfer(0x0, _initialTokenHolder, _totalSupply); } function name() public view returns (string) { return tokenName; } function symbol() public view returns (string) { return tokenSymbol; } function decimals() public view returns (uint8) { return tokenDecimals; } function totalSupply() public view returns (uint256) { return tokenTotalSupply; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } } // ---------------------------------------------------------------------------- // Finalizable - Basic implementation of the finalization pattern // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- contract Finalizable is Owned { bool public finalized; event Finalized(); function Finalizable() public Owned() { finalized = false; } function finalize() public onlyOwner returns (bool) { require(!finalized); finalized = true; Finalized(); return true; } } // ---------------------------------------------------------------------------- // FinalizableToken - Extension to ERC20Token with ops and finalization // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // // ERC20 token with the following additions: // 1. Owner/Ops Ownership // 2. Finalization // contract FinalizableToken is ERC20Token, OpsManaged, Finalizable { using Math for uint256; // The constructor will assign the initial token supply to the owner (msg.sender). function FinalizableToken(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public ERC20Token(_name, _symbol, _decimals, _totalSupply, msg.sender) OpsManaged() Finalizable() { } function transfer(address _to, uint256 _value) public returns (bool success) { validateTransfer(msg.sender, _to); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { validateTransfer(msg.sender, _to); return super.transferFrom(_from, _to, _value); } function validateTransfer(address _sender, address _to) private view { require(_to != address(0)); // Once the token is finalized, everybody can transfer tokens. if (finalized) { return; } if (isOwner(_to)) { return; } // Before the token is finalized, only owner and ops are allowed to initiate transfers. // This allows them to move tokens while the sale is still ongoing for example. require(isOwnerOrOps(_sender)); } } // ---------------------------------------------------------------------------- // FlexibleTokenSale - Token Sale Contract // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- contract FlexibleTokenSale is Finalizable, OpsManaged { using Math for uint256; // // Lifecycle // uint256 public startTime; uint256 public endTime; bool public suspended; // // Pricing // uint256 public tokensPerKEther; uint256 public bonus; uint256 public maxTokensPerAccount; uint256 public contributionMin; uint256 public tokenConversionFactor; // // Wallets // address public walletAddress; // // Token // FinalizableToken public token; // // Counters // uint256 public totalTokensSold; uint256 public totalEtherCollected; // // Events // event Initialized(); event TokensPerKEtherUpdated(uint256 _newValue); event MaxTokensPerAccountUpdated(uint256 _newMax); event BonusUpdated(uint256 _newValue); event SaleWindowUpdated(uint256 _startTime, uint256 _endTime); event WalletAddressUpdated(address _newAddress); event SaleSuspended(); event SaleResumed(); event TokensPurchased(address _beneficiary, uint256 _cost, uint256 _tokens); event TokensReclaimed(uint256 _amount); function FlexibleTokenSale(uint256 _startTime, uint256 _endTime, address _walletAddress) public OpsManaged() { require(_endTime > _startTime); require(_walletAddress != address(0)); require(_walletAddress != address(this)); walletAddress = _walletAddress; finalized = false; suspended = false; startTime = _startTime; endTime = _endTime; // Use some defaults config values. Classes deriving from FlexibleTokenSale // should set their own defaults tokensPerKEther = 100000; bonus = 0; maxTokensPerAccount = 0; contributionMin = 0.1 ether; totalTokensSold = 0; totalEtherCollected = 0; } function currentTime() public constant returns (uint256) { return now; } // Initialize should be called by the owner as part of the deployment + setup phase. // It will associate the sale contract with the token contract and perform basic checks. function initialize(FinalizableToken _token) external onlyOwner returns(bool) { require(address(token) == address(0)); require(address(_token) != address(0)); require(address(_token) != address(this)); require(address(_token) != address(walletAddress)); require(isOwnerOrOps(address(_token)) == false); token = _token; // This factor is used when converting cost <-> tokens. // 18 is because of the ETH -> Wei conversion. // 3 because prices are in K ETH instead of just ETH. // 4 because bonuses are expressed as 0 - 10000 for 0.00% - 100.00% (with 2 decimals). tokenConversionFactor = 10**(uint256(18).sub(_token.decimals()).add(3).add(4)); require(tokenConversionFactor > 0); Initialized(); return true; } // // Owner Configuation // // Allows the owner to change the wallet address which is used for collecting // ether received during the token sale. function setWalletAddress(address _walletAddress) external onlyOwner returns(bool) { require(_walletAddress != address(0)); require(_walletAddress != address(this)); require(_walletAddress != address(token)); require(isOwnerOrOps(_walletAddress) == false); walletAddress = _walletAddress; WalletAddressUpdated(_walletAddress); return true; } // Allows the owner to set an optional limit on the amount of tokens that can be purchased // by a contributor. It can also be set to 0 to remove limit. function setMaxTokensPerAccount(uint256 _maxTokens) external onlyOwner returns(bool) { maxTokensPerAccount = _maxTokens; MaxTokensPerAccountUpdated(_maxTokens); return true; } // Allows the owner to specify the conversion rate for ETH -> tokens. // For example, passing 1,000,000 would mean that 1 ETH would purchase 1000 tokens. function setTokensPerKEther(uint256 _tokensPerKEther) external onlyOwner returns(bool) { require(_tokensPerKEther > 0); tokensPerKEther = _tokensPerKEther; TokensPerKEtherUpdated(_tokensPerKEther); return true; } // Allows the owner to set a bonus to apply to all purchases. // For example, setting it to 2000 means that instead of receiving 200 tokens, // for a given price, contributors would receive 240 tokens (20.00% bonus). function setBonus(uint256 _bonus) external onlyOwner returns(bool) { require(_bonus <= 10000); bonus = _bonus; BonusUpdated(_bonus); return true; } // Allows the owner to set a sale window which will allow the sale (aka buyTokens) to // receive contributions between _startTime and _endTime. Once _endTime is reached, // the sale contract will automatically stop accepting incoming contributions. function setSaleWindow(uint256 _startTime, uint256 _endTime) external onlyOwner returns(bool) { require(_startTime > 0); require(_endTime > _startTime); startTime = _startTime; endTime = _endTime; SaleWindowUpdated(_startTime, _endTime); return true; } // Allows the owner to suspend the sale until it is manually resumed at a later time. function suspend() external onlyOwner returns(bool) { if (suspended == true) { return false; } suspended = true; SaleSuspended(); return true; } // Allows the owner to resume the sale. function resume() external onlyOwner returns(bool) { if (suspended == false) { return false; } suspended = false; SaleResumed(); return true; } // // Contributions // // Default payable function which can be used to purchase tokens. function () payable public { buyTokens(msg.sender); } // Allows the caller to purchase tokens for a specific beneficiary (proxy purchase). function buyTokens(address _beneficiary) public payable returns (uint256) { return buyTokensInternal(_beneficiary, bonus); } function buyTokensInternal(address _beneficiary, uint256 _bonus) internal returns (uint256) { require(!finalized); require(!suspended); require(currentTime() >= startTime); require(currentTime() <= endTime); require(msg.value >= contributionMin); require(_beneficiary != address(0)); require(_beneficiary != address(this)); require(_beneficiary != address(token)); // We don't want to allow the wallet collecting ETH to // directly be used to purchase tokens. require(msg.sender != address(walletAddress)); // Check how many tokens are still available for sale. uint256 saleBalance = token.balanceOf(address(this)); require(saleBalance > 0); // Calculate how many tokens the contributor could purchase based on ETH received. uint256 tokens = msg.value.mul(tokensPerKEther).mul(_bonus.add(10000)).div(tokenConversionFactor); require(tokens > 0); uint256 cost = msg.value; uint256 refund = 0; // Calculate what is the maximum amount of tokens that the contributor // should be allowed to purchase uint256 maxTokens = saleBalance; if (maxTokensPerAccount > 0) { // There is a maximum amount of tokens per account in place. // Check if the user already hit that limit. uint256 userBalance = getUserTokenBalance(_beneficiary); require(userBalance < maxTokensPerAccount); uint256 quotaBalance = maxTokensPerAccount.sub(userBalance); if (quotaBalance < saleBalance) { maxTokens = quotaBalance; } } require(maxTokens > 0); if (tokens > maxTokens) { // The contributor sent more ETH than allowed to purchase. // Limit the amount of tokens that they can purchase in this transaction. tokens = maxTokens; // Calculate the actual cost for that new amount of tokens. cost = tokens.mul(tokenConversionFactor).div(tokensPerKEther.mul(_bonus.add(10000))); if (msg.value > cost) { // If the contributor sent more ETH than needed to buy the tokens, // the balance should be refunded. refund = msg.value.sub(cost); } } // This is the actual amount of ETH that can be sent to the wallet. uint256 contribution = msg.value.sub(refund); walletAddress.transfer(contribution); // Update our stats counters. totalTokensSold = totalTokensSold.add(tokens); totalEtherCollected = totalEtherCollected.add(contribution); // Transfer tokens to the beneficiary. require(token.transfer(_beneficiary, tokens)); // Issue a refund for the excess ETH, as needed. if (refund > 0) { msg.sender.transfer(refund); } TokensPurchased(_beneficiary, cost, tokens); return tokens; } // Returns the number of tokens that the user has purchased. Will be checked against the // maximum allowed. Can be overriden in a sub class to change the calculations. function getUserTokenBalance(address _beneficiary) internal view returns (uint256) { return token.balanceOf(_beneficiary); } // Allows the owner to take back the tokens that are assigned to the sale contract. function reclaimTokens() external onlyOwner returns (bool) { uint256 tokens = token.balanceOf(address(this)); if (tokens == 0) { return false; } address tokenOwner = token.owner(); require(tokenOwner != address(0)); require(token.transfer(tokenOwner, tokens)); TokensReclaimed(tokens); return true; } } // ---------------------------------------------------------------------------- // BluzelleTokenConfig - Token Contract Configuration // // Copyright (c) 2017 Bluzelle Networks Pte Ltd. // http://www.bluzelle.com/ // // The MIT Licence. // ---------------------------------------------------------------------------- contract BluzelleTokenConfig { string public constant TOKEN_SYMBOL = "BLZ"; string public constant TOKEN_NAME = "Bluzelle Token"; uint8 public constant TOKEN_DECIMALS = 18; uint256 public constant DECIMALSFACTOR = 10**uint256(TOKEN_DECIMALS); uint256 public constant TOKEN_TOTALSUPPLY = 500000000 * DECIMALSFACTOR; } // ---------------------------------------------------------------------------- // BluzelleTokenSaleConfig - Token Sale Configuration // // Copyright (c) 2017 Bluzelle Networks Pte Ltd. // http://www.bluzelle.com/ // // The MIT Licence. // ---------------------------------------------------------------------------- contract BluzelleTokenSaleConfig is BluzelleTokenConfig { // // Time // uint256 public constant INITIAL_STARTTIME = 1516240800; // 2018-01-18, 02:00:00 UTC uint256 public constant INITIAL_ENDTIME = 1517536800; // 2018-02-02, 02:00:00 UTC uint256 public constant INITIAL_STAGE = 1; // // Purchases // // Minimum amount of ETH that can be used for purchase. uint256 public constant CONTRIBUTION_MIN = 0.1 ether; // Price of tokens, based on the 1 ETH = 1700 BLZ conversion ratio. uint256 public constant TOKENS_PER_KETHER = 1700000; // Amount of bonus applied to the sale. 2000 = 20.00% bonus, 750 = 7.50% bonus, 0 = no bonus. uint256 public constant BONUS = 0; // Maximum amount of tokens that can be purchased for each account. uint256 public constant TOKENS_ACCOUNT_MAX = 17000 * DECIMALSFACTOR; } // ---------------------------------------------------------------------------- // BluzelleToken - ERC20 Compatible Token // // Copyright (c) 2017 Bluzelle Networks Pte Ltd. // http://www.bluzelle.com/ // // The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // The Bluzelle token is a standard ERC20 token with the addition of a few // concepts such as: // // 1. Finalization // Tokens can only be transfered by contributors after the contract has // been finalized. // // 2. Ops Managed Model // In addition to owner, there is a ops role which is used during the sale, // by the sale contract, in order to transfer tokens. // ---------------------------------------------------------------------------- contract BluzelleToken is FinalizableToken, BluzelleTokenConfig { event TokensReclaimed(uint256 _amount); function BluzelleToken() public FinalizableToken(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS, TOKEN_TOTALSUPPLY) { } // Allows the owner to reclaim tokens that have been sent to the token address itself. function reclaimTokens() public onlyOwner returns (bool) { address account = address(this); uint256 amount = balanceOf(account); if (amount == 0) { return false; } balances[account] = balances[account].sub(amount); balances[owner] = balances[owner].add(amount); Transfer(account, owner, amount); TokensReclaimed(amount); return true; } } // ---------------------------------------------------------------------------- // BluzelleTokenSale - Token Sale Contract // // Copyright (c) 2017 Bluzelle Networks Pte Ltd. // http://www.bluzelle.com/ // // The MIT Licence. // ---------------------------------------------------------------------------- contract BluzelleTokenSale is FlexibleTokenSale, BluzelleTokenSaleConfig { // // Whitelist // // This is the stage or whitelist group that is currently in effect. // Everybody that's been whitelisted for earlier stages should be able to // contribute in the current stage. uint256 public currentStage; // Keeps track of the amount of bonus to apply for a given stage. If set // to 0, the base class bonus will be used. mapping(uint256 => uint256) public stageBonus; // Keeps track of the amount of tokens that a specific account has received. mapping(address => uint256) public accountTokensPurchased; // This a mapping of address -> stage that they are allowed to participate in. // For example, if someone has been whitelisted for stage 2, they will be able // to participate for stages 2 and above but they would not be able to participate // in stage 1. A stage value of 0 means that the participant is not whitelisted. mapping(address => uint256) public whitelist; // // Events // event CurrentStageUpdated(uint256 _newStage); event StageBonusUpdated(uint256 _stage, uint256 _bonus); event WhitelistedStatusUpdated(address indexed _address, uint256 _stage); function BluzelleTokenSale(address wallet) public FlexibleTokenSale(INITIAL_STARTTIME, INITIAL_ENDTIME, wallet) { currentStage = INITIAL_STAGE; tokensPerKEther = TOKENS_PER_KETHER; bonus = BONUS; maxTokensPerAccount = TOKENS_ACCOUNT_MAX; contributionMin = CONTRIBUTION_MIN; } // Allows the admin to determine what is the current stage for // the sale. It can only move forward. function setCurrentStage(uint256 _stage) public onlyOwner returns(bool) { require(_stage > 0); if (currentStage == _stage) { return false; } currentStage = _stage; CurrentStageUpdated(_stage); return true; } // Allows the admin to set a bonus amount to apply for a specific stage. function setStageBonus(uint256 _stage, uint256 _bonus) public onlyOwner returns(bool) { require(_stage > 0); require(_bonus <= 10000); if (stageBonus[_stage] == _bonus) { // Nothing to change. return false; } stageBonus[_stage] = _bonus; StageBonusUpdated(_stage, _bonus); return true; } // Allows the owner or ops to add/remove people from the whitelist. function setWhitelistedStatus(address _address, uint256 _stage) public onlyOwnerOrOps returns (bool) { return setWhitelistedStatusInternal(_address, _stage); } function setWhitelistedStatusInternal(address _address, uint256 _stage) private returns (bool) { require(_address != address(0)); require(_address != address(this)); require(_address != walletAddress); whitelist[_address] = _stage; WhitelistedStatusUpdated(_address, _stage); return true; } // Allows the owner or ops to add/remove people from the whitelist, in batches. This makes // it easier/cheaper/faster to upload whitelist data in bulk. Note that the function is using an // unbounded loop so the call should take care to not exceed the tx gas limit or block gas limit. function setWhitelistedBatch(address[] _addresses, uint256 _stage) public onlyOwnerOrOps returns (bool) { require(_addresses.length > 0); for (uint256 i = 0; i < _addresses.length; i++) { require(setWhitelistedStatusInternal(_addresses[i], _stage)); } return true; } // This is an extension to the buyToken function in FlexibleTokenSale which also takes // care of checking contributors against the whitelist. Since buyTokens supports proxy payments // we check that both the sender and the beneficiary have been whitelisted. function buyTokensInternal(address _beneficiary, uint256 _bonus) internal returns (uint256) { require(whitelist[msg.sender] > 0); require(whitelist[_beneficiary] > 0); require(currentStage >= whitelist[msg.sender]); uint256 _beneficiaryStage = whitelist[_beneficiary]; require(currentStage >= _beneficiaryStage); uint256 applicableBonus = stageBonus[_beneficiaryStage]; if (applicableBonus == 0) { applicableBonus = _bonus; } uint256 tokensPurchased = super.buyTokensInternal(_beneficiary, applicableBonus); accountTokensPurchased[_beneficiary] = accountTokensPurchased[_beneficiary].add(tokensPurchased); return tokensPurchased; } // Returns the number of tokens that the user has purchased. We keep a separate balance from // the token contract in case we'd like to do additional sales with new purchase limits. This behavior // is different from the base implementation which just checks the token balance from the token // contract directly. function getUserTokenBalance(address _beneficiary) internal view returns (uint256) { return accountTokensPurchased[_beneficiary]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"resume","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bonus","type":"uint256"}],"name":"setBonus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokensPerKEther","type":"uint256"}],"name":"setTokensPerKEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_NAME","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"stageBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"cancelOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_SYMBOL","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_ENDTIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stage","type":"uint256"}],"name":"setCurrentStage","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reclaimTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BONUS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"},{"name":"_stage","type":"uint256"}],"name":"setWhitelistedBatch","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenConversionFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_ACCOUNT_MAX","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_DECIMALS","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_STARTTIME","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_startTime","type":"uint256"},{"name":"_endTime","type":"uint256"}],"name":"setSaleWindow","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"walletAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"suspended","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOpsAddress","type":"address"}],"name":"setOpsAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKEN_TOTALSUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DECIMALSFACTOR","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":"opsAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxTokensPerAccount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPerKEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_stage","type":"uint256"}],"name":"setWhitelistedStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_walletAddress","type":"address"}],"name":"setWalletAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwnerOrOps","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_stage","type":"uint256"},{"name":"_bonus","type":"uint256"}],"name":"setStageBonus","outputs":[{"name":"","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":"CONTRIBUTION_MIN","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"contributionMin","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_proposedOwner","type":"address"}],"name":"initiateOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_STAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalEtherCollected","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposedOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountTokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"suspend","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"completeOwnershipTransfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOps","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_maxTokens","type":"uint256"}],"name":"setMaxTokensPerAccount","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"TOKENS_PER_KETHER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newStage","type":"uint256"}],"name":"CurrentStageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_stage","type":"uint256"},{"indexed":false,"name":"_bonus","type":"uint256"}],"name":"StageBonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_address","type":"address"},{"indexed":false,"name":"_stage","type":"uint256"}],"name":"WhitelistedStatusUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"TokensPerKEtherUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newMax","type":"uint256"}],"name":"MaxTokensPerAccountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"BonusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_startTime","type":"uint256"},{"indexed":false,"name":"_endTime","type":"uint256"}],"name":"SaleWindowUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_newAddress","type":"address"}],"name":"WalletAddressUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleSuspended","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleResumed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_beneficiary","type":"address"},{"indexed":false,"name":"_cost","type":"uint256"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newAddress","type":"address"}],"name":"OpsAddressUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_proposedOwner","type":"address"}],"name":"OwnershipTransferInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_newOwner","type":"address"}],"name":"OwnershipTransferCompleted","type":"event"},{"anonymous":false,"inputs":[],"name":"OwnershipTransferCanceled","type":"event"}]
Contract Creation Code
6060604052341561000f57600080fd5b604051602080611d718339810160405280805160008054600160a060020a03191633600160a060020a03161790556001805460a060020a60ff02191690559150635a5fffa09050635a73c62082600160a060020a038116151561007157600080fd5b30600160a060020a031681600160a060020a03161415151561009257600080fd5b600b8054600160a060020a03909216600160a060020a03199092169190911790556001805460a060020a60ff02191681556005805460ff191690556003929092556004556000600781905567016345785d8a0000600955600d819055600e55600f55506219f0a060065569039992648a23c8a00000600855611c58806101196000396000f3006060604052600436106102795763ffffffff60e060020a600035041663046f7da281146102855780630b98f975146102ac5780630e9d02cc146102c257806318821400146102d85780631f209d9a1461036257806323452b9c1461038a5780632a9053181461039d5780632f54bf6e146103b0578063312defb4146103cf5780633197cbb6146103e257806338c67b73146103f55780633c54caa51461040b5780634b8624c41461041e5780634bb278f3146104315780635207c3911461044457806353105fbc146104955780635b2b345c146104a85780635b7f415c146104bb5780635bf5d54c146104e457806363b20117146104f7578063677ab6671461050a578063680e354a1461051d5780636ad5b3ea14610536578063702efdf314610565578063707789c51461057857806374c950fb1461059757806375b4d78c146105aa57806378e97925146105bd5780638bc04eb7146105d05780638da5cb5b146105e35780638ea64376146105f65780639a02edfe146106095780639b19251a1461061c578063a5bc770c1461063b578063a9a615e91461064e578063ac1a386a14610670578063adcf59ee1461068f578063aed396c6146106ae578063b3f05b97146106c7578063ba9bb827146106da578063bcc13d1d146106ed578063c0b6f56114610700578063c4d66de81461071f578063c7091c5e1461073e578063c7a0206114610751578063d153b60c14610764578063d18e81b314610777578063d7bb913f1461078a578063e6400bbe146107a9578063e71a7811146107bc578063ec8ac4d8146107cf578063ef326c6d146107e3578063f18e120b14610802578063f527c85614610818578063fc0c546a1461082b575b6102823361083e565b50005b341561029057600080fd5b610298610854565b604051901515815260200160405180910390f35b34156102b757600080fd5b6102986004356108be565b34156102cd57600080fd5b610298600435610926565b34156102e357600080fd5b6102eb61098c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561032757808201518382015260200161030f565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036d57600080fd5b6103786004356109c3565b60405190815260200160405180910390f35b341561039557600080fd5b6102986109d5565b34156103a857600080fd5b6102eb610a4a565b34156103bb57600080fd5b610298600160a060020a0360043516610a81565b34156103da57600080fd5b610378610a95565b34156103ed57600080fd5b610378610a9d565b341561040057600080fd5b610298600435610aa3565b341561041657600080fd5b610298610b1b565b341561042957600080fd5b610378610cf7565b341561043c57600080fd5b610298610cfc565b341561044f57600080fd5b61029860046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496505093359350610da492505050565b34156104a057600080fd5b610378610e12565b34156104b357600080fd5b610378610e18565b34156104c657600080fd5b6104ce610e26565b60405160ff909116815260200160405180910390f35b34156104ef57600080fd5b610378610e2b565b341561050257600080fd5b610378610e31565b341561051557600080fd5b610378610e37565b341561052857600080fd5b610298600435602435610e3f565b341561054157600080fd5b610549610ebf565b604051600160a060020a03909116815260200160405180910390f35b341561057057600080fd5b610298610ece565b341561058357600080fd5b610298600160a060020a0360043516610ed7565b34156105a257600080fd5b610378610f82565b34156105b557600080fd5b610378610f92565b34156105c857600080fd5b610378610f98565b34156105db57600080fd5b610378610f9e565b34156105ee57600080fd5b610549610faa565b341561060157600080fd5b610549610fb9565b341561061457600080fd5b610378610fc8565b341561062757600080fd5b610378600160a060020a0360043516610fce565b341561064657600080fd5b610378610fe0565b341561065957600080fd5b610298600160a060020a0360043516602435610fe6565b341561067b57600080fd5b610298600160a060020a036004351661100d565b341561069a57600080fd5b610298600160a060020a03600435166110ea565b34156106b957600080fd5b610298600435602435611104565b34156106d257600080fd5b6102986111ae565b34156106e557600080fd5b6103786111cf565b34156106f857600080fd5b6103786111db565b341561070b57600080fd5b610298600160a060020a03600435166111e1565b341561072a57600080fd5b610298600160a060020a03600435166112a1565b341561074957600080fd5b61037861141f565b341561075c57600080fd5b610378611424565b341561076f57600080fd5b61054961142a565b341561078257600080fd5b610378611439565b341561079557600080fd5b610378600160a060020a036004351661143d565b34156107b457600080fd5b61029861144f565b34156107c757600080fd5b6102986114bf565b610378600160a060020a036004351661083e565b34156107ee57600080fd5b610298600160a060020a036004351661153a565b341561080d57600080fd5b610298600435611567565b341561082357600080fd5b6103786115c0565b341561083657600080fd5b6105496115c7565b600061084c826007546115d6565b90505b919050565b600061085f33610a81565b151560011461086d57600080fd5b60055460ff161515610881575060006108bb565b6005805460ff191690557fbcbdbf400d5c713d9679ffa947f717848591ab5a7d1608c49119db603c4942cb60405160405180910390a15060015b90565b60006108c933610a81565b15156001146108d757600080fd5b6127108211156108e657600080fd5b60078290557f04a7ca0e55f887a637b560614f621b92b79423e20152fea70bc4be66edaee3d68260405190815260200160405180910390a1506001919050565b600061093133610a81565b151560011461093f57600080fd5b6000821161094c57600080fd5b60068290557fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab8260405190815260200160405180910390a1506001919050565b60408051908101604052600e81527f426c757a656c6c6520546f6b656e000000000000000000000000000000000000602082015281565b60106020526000908152604090205481565b60006109e033610a81565b15156001146109ee57600080fd5b600154600160a060020a03161515610a08575060016108bb565b60018054600160a060020a03191690557f670699162ea7ba4de638b5a57c2148aed9ee8bd69740a5e6a7db727e3886c88b60405160405180910390a150600190565b60408051908101604052600381527f424c5a0000000000000000000000000000000000000000000000000000000000602082015281565b600054600160a060020a0390811691161490565b635a73c62081565b60045481565b6000610aae33610a81565b1515600114610abc57600080fd5b60008211610ac957600080fd5b81600f541415610adb5750600061084f565b600f8290557fbd102993c090f400138a05c1b5b0c9eadb8d94399c432f6522fab9cf26bd180b8260405190815260200160405180910390a1506001919050565b6000806000610b2933610a81565b1515600114610b3757600080fd5b600c54600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b9057600080fd5b6102c65a03f11515610ba157600080fd5b5050506040518051925050811515610bbc5760009250610cf2565b600c54600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610c0457600080fd5b6102c65a03f11515610c1557600080fd5b5050506040518051915050600160a060020a0381161515610c3557600080fd5b600c54600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610c9457600080fd5b6102c65a03f11515610ca557600080fd5b505050604051805190501515610cba57600080fd5b7fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8260405190815260200160405180910390a1600192505b505090565b600081565b6000610d0733610a81565b1515600114610d1557600080fd5b60015474010000000000000000000000000000000000000000900460ff1615610d3d57600080fd5b6001805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a150600190565b600080610db0336110ea565b1515610dbb57600080fd5b6000845111610dc957600080fd5b5060005b8351811015610e0857610df5848281518110610de557fe5b90602001906020020151846116ec565b1515610e0057600080fd5b600101610dcd565b5060019392505050565b600a5481565b69039992648a23c8a0000081565b601281565b600f5481565b600d5481565b635a5fffa081565b6000610e4a33610a81565b1515600114610e5857600080fd5b60008311610e6557600080fd5b828211610e7157600080fd5b600383905560048290557f7291acdf619347e3dd338a8b65d1788570a0f1bc413e94e9e7333d0561c6ed58838360405191825260208201526040908101905180910390a15060015b92915050565b600b54600160a060020a031681565b60055460ff1681565b6000610ee233610a81565b1515600114610ef057600080fd5b600054600160a060020a0383811691161415610f0b57600080fd5b30600160a060020a031682600160a060020a031614151515610f2c57600080fd5b60028054600160a060020a031916600160a060020a038481169190911791829055167f06171a5d6c06d67b0cfa679c07db377a27d1170797663fd98d395229d8c3650860405160405180910390a2506001919050565b6b019d971e4fe8401e7400000081565b60075481565b60035481565b670de0b6b3a764000081565b600054600160a060020a031681565b600254600160a060020a031681565b60085481565b60126020526000908152604090205481565b60065481565b6000610ff1336110ea565b1515610ffc57600080fd5b61100683836116ec565b9392505050565b600061101833610a81565b151560011461102657600080fd5b600160a060020a038216151561103b57600080fd5b30600160a060020a031682600160a060020a03161415151561105c57600080fd5b600c54600160a060020a038381169116141561107757600080fd5b611080826110ea565b1561108a57600080fd5b600b8054600160a060020a031916600160a060020a0384161790557f0428ca271a7bee83fddcf583de5ba0a5a69f42cbe32587b07bb38925ed96de8d82604051600160a060020a03909116815260200160405180910390a1506001919050565b60006110f582610a81565b8061084c575061084c8261153a565b600061110f33610a81565b151560011461111d57600080fd5b6000831161112a57600080fd5b61271082111561113957600080fd5b60008381526010602052604090205482141561115757506000610eb9565b600083815260106020526040908190208390557f1744d5a5c185d64a1877cf5e5950b2e4043b955c9923252820fb9cf6ad2b257590849084905191825260208201526040908101905180910390a150600192915050565b60015474010000000000000000000000000000000000000000900460ff1681565b67016345785d8a000081565b60095481565b60006111ec33610a81565b15156001146111fa57600080fd5b600160a060020a038216151561120f57600080fd5b30600160a060020a031682600160a060020a03161415151561123057600080fd5b600054600160a060020a038381169116141561124b57600080fd5b60018054600160a060020a031916600160a060020a038481169190911791829055167f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b60006112ac33610a81565b15156001146112ba57600080fd5b600c54600160a060020a0316156112d057600080fd5b600160a060020a03821615156112e557600080fd5b30600160a060020a031682600160a060020a03161415151561130657600080fd5b600b54600160a060020a038381169116141561132157600080fd5b61132a826110ea565b1561133457600080fd5b600c8054600160a060020a031916600160a060020a0384169081179091556113d5906004906113c990600390829063313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561139e57600080fd5b6102c65a03f115156113af57600080fd5b50505060405180516012915060ff1663ffffffff61179816565b9063ffffffff6117ad16565b600a90810a90819055600090116113eb57600080fd5b7f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a1506001919050565b600181565b600e5481565b600154600160a060020a031681565b4290565b60116020526000908152604090205481565b600061145a33610a81565b151560011461146857600080fd5b60055460ff16151560011415611480575060006108bb565b6005805460ff191660011790557fe14916b4c867f32e91547d295f9b845b805d5b8c813daa3adbc1597f80a0c5eb60405160405180910390a150600190565b60015460009033600160a060020a039081169116146114dd57600080fd5b60008054600160a060020a03338116600160a060020a0319928316179283905560018054909216909155167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b600254600090600160a060020a03161580159061084c575050600254600160a060020a0390811691161490565b600061157233610a81565b151560011461158057600080fd5b60088290557f2de896f66f29831ace4b07f5658ac41de20910c13ce8b8db17bc102a80beff268260405190815260200160405180910390a1506001919050565b6219f0a081565b600c54600160a060020a031681565b600160a060020a03331660009081526012602052604081205481908190819081901161160157600080fd5b600160a060020a0386166000908152601260205260408120541161162457600080fd5b600160a060020a033316600090815260126020526040902054600f54101561164b57600080fd5b600160a060020a038616600090815260126020526040902054600f549093508390101561167757600080fd5b6000838152601060205260409020549150811515611693578491505b61169d86836117bf565b600160a060020a0387166000908152601160205260409020549091506116c9908263ffffffff6117ad16565b600160a060020a0387166000908152601160205260409020559250505092915050565b6000600160a060020a038316151561170357600080fd5b30600160a060020a031683600160a060020a03161415151561172457600080fd5b600b54600160a060020a038481169116141561173f57600080fd5b600160a060020a038316600081815260126020526040908190208490557f5beb3f610f1d5275b6ce198b03b5f6ebdeee3f94c2ed7c2941109390a303cd0f9084905190815260200160405180910390a250600192915050565b6000818310156117a757600080fd5b50900390565b60008282018381101561100657600080fd5b6000806000806000806000806000600160149054906101000a900460ff161515156117e957600080fd5b60055460ff16156117f957600080fd5b600354611804611439565b101561180f57600080fd5b60045461181a611439565b111561182557600080fd5b60095434101561183457600080fd5b600160a060020a038b16151561184957600080fd5b30600160a060020a03168b600160a060020a03161415151561186a57600080fd5b600c54600160a060020a038c81169116141561188557600080fd5b600b5433600160a060020a03908116911614156118a157600080fd5b600c54600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156118fa57600080fd5b6102c65a03f1151561190b57600080fd5b50505060405180519850506000881161192357600080fd5b600a5461196b9061195f61193f8d61271063ffffffff6117ad16565b60065461195390349063ffffffff611bd516565b9063ffffffff611bd516565b9063ffffffff611bfc16565b96506000871161197a57600080fd5b34955060009450879350600060085411156119ca576119988b611c11565b60085490935083106119a957600080fd5b6008546119bc908463ffffffff61179816565b9150878210156119ca578193505b600084116119d757600080fd5b83871115611a3c579295508592611a1f611a0b6119fc8c61271063ffffffff6117ad16565b6006549063ffffffff611bd516565b600a5461195f908a9063ffffffff611bd516565b955085341115611a3c57611a39348763ffffffff61179816565b94505b611a4c348663ffffffff61179816565b600b54909150600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515611a8257600080fd5b600d54611a95908863ffffffff6117ad16565b600d55600e54611aab908263ffffffff6117ad16565b600e55600c54600160a060020a031663a9059cbb8c8960006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611b0d57600080fd5b6102c65a03f11515611b1e57600080fd5b505050604051805190501515611b3357600080fd5b6000851115611b6d57600160a060020a03331685156108fc0286604051600060405180830381858888f193505050501515611b6d57600080fd5b7f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f338b87896040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150949998505050505050505050565b6000828202831580611bf15750828482811515611bee57fe5b04145b151561100657600080fd5b60008183811515611c0957fe5b049392505050565b600160a060020a0316600090815260116020526040902054905600a165627a7a72305820c8dbbe176deeed0a10c085b277755263dd5fa9e252d70dd1a0720fb7a5a0784d0029000000000000000000000000e9638c2d07eac8774d46b85e47cf53f52d60239f
Deployed Bytecode
0x6060604052600436106102795763ffffffff60e060020a600035041663046f7da281146102855780630b98f975146102ac5780630e9d02cc146102c257806318821400146102d85780631f209d9a1461036257806323452b9c1461038a5780632a9053181461039d5780632f54bf6e146103b0578063312defb4146103cf5780633197cbb6146103e257806338c67b73146103f55780633c54caa51461040b5780634b8624c41461041e5780634bb278f3146104315780635207c3911461044457806353105fbc146104955780635b2b345c146104a85780635b7f415c146104bb5780635bf5d54c146104e457806363b20117146104f7578063677ab6671461050a578063680e354a1461051d5780636ad5b3ea14610536578063702efdf314610565578063707789c51461057857806374c950fb1461059757806375b4d78c146105aa57806378e97925146105bd5780638bc04eb7146105d05780638da5cb5b146105e35780638ea64376146105f65780639a02edfe146106095780639b19251a1461061c578063a5bc770c1461063b578063a9a615e91461064e578063ac1a386a14610670578063adcf59ee1461068f578063aed396c6146106ae578063b3f05b97146106c7578063ba9bb827146106da578063bcc13d1d146106ed578063c0b6f56114610700578063c4d66de81461071f578063c7091c5e1461073e578063c7a0206114610751578063d153b60c14610764578063d18e81b314610777578063d7bb913f1461078a578063e6400bbe146107a9578063e71a7811146107bc578063ec8ac4d8146107cf578063ef326c6d146107e3578063f18e120b14610802578063f527c85614610818578063fc0c546a1461082b575b6102823361083e565b50005b341561029057600080fd5b610298610854565b604051901515815260200160405180910390f35b34156102b757600080fd5b6102986004356108be565b34156102cd57600080fd5b610298600435610926565b34156102e357600080fd5b6102eb61098c565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561032757808201518382015260200161030f565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561036d57600080fd5b6103786004356109c3565b60405190815260200160405180910390f35b341561039557600080fd5b6102986109d5565b34156103a857600080fd5b6102eb610a4a565b34156103bb57600080fd5b610298600160a060020a0360043516610a81565b34156103da57600080fd5b610378610a95565b34156103ed57600080fd5b610378610a9d565b341561040057600080fd5b610298600435610aa3565b341561041657600080fd5b610298610b1b565b341561042957600080fd5b610378610cf7565b341561043c57600080fd5b610298610cfc565b341561044f57600080fd5b61029860046024813581810190830135806020818102016040519081016040528093929190818152602001838360200280828437509496505093359350610da492505050565b34156104a057600080fd5b610378610e12565b34156104b357600080fd5b610378610e18565b34156104c657600080fd5b6104ce610e26565b60405160ff909116815260200160405180910390f35b34156104ef57600080fd5b610378610e2b565b341561050257600080fd5b610378610e31565b341561051557600080fd5b610378610e37565b341561052857600080fd5b610298600435602435610e3f565b341561054157600080fd5b610549610ebf565b604051600160a060020a03909116815260200160405180910390f35b341561057057600080fd5b610298610ece565b341561058357600080fd5b610298600160a060020a0360043516610ed7565b34156105a257600080fd5b610378610f82565b34156105b557600080fd5b610378610f92565b34156105c857600080fd5b610378610f98565b34156105db57600080fd5b610378610f9e565b34156105ee57600080fd5b610549610faa565b341561060157600080fd5b610549610fb9565b341561061457600080fd5b610378610fc8565b341561062757600080fd5b610378600160a060020a0360043516610fce565b341561064657600080fd5b610378610fe0565b341561065957600080fd5b610298600160a060020a0360043516602435610fe6565b341561067b57600080fd5b610298600160a060020a036004351661100d565b341561069a57600080fd5b610298600160a060020a03600435166110ea565b34156106b957600080fd5b610298600435602435611104565b34156106d257600080fd5b6102986111ae565b34156106e557600080fd5b6103786111cf565b34156106f857600080fd5b6103786111db565b341561070b57600080fd5b610298600160a060020a03600435166111e1565b341561072a57600080fd5b610298600160a060020a03600435166112a1565b341561074957600080fd5b61037861141f565b341561075c57600080fd5b610378611424565b341561076f57600080fd5b61054961142a565b341561078257600080fd5b610378611439565b341561079557600080fd5b610378600160a060020a036004351661143d565b34156107b457600080fd5b61029861144f565b34156107c757600080fd5b6102986114bf565b610378600160a060020a036004351661083e565b34156107ee57600080fd5b610298600160a060020a036004351661153a565b341561080d57600080fd5b610298600435611567565b341561082357600080fd5b6103786115c0565b341561083657600080fd5b6105496115c7565b600061084c826007546115d6565b90505b919050565b600061085f33610a81565b151560011461086d57600080fd5b60055460ff161515610881575060006108bb565b6005805460ff191690557fbcbdbf400d5c713d9679ffa947f717848591ab5a7d1608c49119db603c4942cb60405160405180910390a15060015b90565b60006108c933610a81565b15156001146108d757600080fd5b6127108211156108e657600080fd5b60078290557f04a7ca0e55f887a637b560614f621b92b79423e20152fea70bc4be66edaee3d68260405190815260200160405180910390a1506001919050565b600061093133610a81565b151560011461093f57600080fd5b6000821161094c57600080fd5b60068290557fee386bebbe46d39825c2b93313aa1ab1dc57d4774cac81c6debb8c611c9227ab8260405190815260200160405180910390a1506001919050565b60408051908101604052600e81527f426c757a656c6c6520546f6b656e000000000000000000000000000000000000602082015281565b60106020526000908152604090205481565b60006109e033610a81565b15156001146109ee57600080fd5b600154600160a060020a03161515610a08575060016108bb565b60018054600160a060020a03191690557f670699162ea7ba4de638b5a57c2148aed9ee8bd69740a5e6a7db727e3886c88b60405160405180910390a150600190565b60408051908101604052600381527f424c5a0000000000000000000000000000000000000000000000000000000000602082015281565b600054600160a060020a0390811691161490565b635a73c62081565b60045481565b6000610aae33610a81565b1515600114610abc57600080fd5b60008211610ac957600080fd5b81600f541415610adb5750600061084f565b600f8290557fbd102993c090f400138a05c1b5b0c9eadb8d94399c432f6522fab9cf26bd180b8260405190815260200160405180910390a1506001919050565b6000806000610b2933610a81565b1515600114610b3757600080fd5b600c54600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b9057600080fd5b6102c65a03f11515610ba157600080fd5b5050506040518051925050811515610bbc5760009250610cf2565b600c54600160a060020a0316638da5cb5b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515610c0457600080fd5b6102c65a03f11515610c1557600080fd5b5050506040518051915050600160a060020a0381161515610c3557600080fd5b600c54600160a060020a031663a9059cbb828460006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610c9457600080fd5b6102c65a03f11515610ca557600080fd5b505050604051805190501515610cba57600080fd5b7fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8260405190815260200160405180910390a1600192505b505090565b600081565b6000610d0733610a81565b1515600114610d1557600080fd5b60015474010000000000000000000000000000000000000000900460ff1615610d3d57600080fd5b6001805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a150600190565b600080610db0336110ea565b1515610dbb57600080fd5b6000845111610dc957600080fd5b5060005b8351811015610e0857610df5848281518110610de557fe5b90602001906020020151846116ec565b1515610e0057600080fd5b600101610dcd565b5060019392505050565b600a5481565b69039992648a23c8a0000081565b601281565b600f5481565b600d5481565b635a5fffa081565b6000610e4a33610a81565b1515600114610e5857600080fd5b60008311610e6557600080fd5b828211610e7157600080fd5b600383905560048290557f7291acdf619347e3dd338a8b65d1788570a0f1bc413e94e9e7333d0561c6ed58838360405191825260208201526040908101905180910390a15060015b92915050565b600b54600160a060020a031681565b60055460ff1681565b6000610ee233610a81565b1515600114610ef057600080fd5b600054600160a060020a0383811691161415610f0b57600080fd5b30600160a060020a031682600160a060020a031614151515610f2c57600080fd5b60028054600160a060020a031916600160a060020a038481169190911791829055167f06171a5d6c06d67b0cfa679c07db377a27d1170797663fd98d395229d8c3650860405160405180910390a2506001919050565b6b019d971e4fe8401e7400000081565b60075481565b60035481565b670de0b6b3a764000081565b600054600160a060020a031681565b600254600160a060020a031681565b60085481565b60126020526000908152604090205481565b60065481565b6000610ff1336110ea565b1515610ffc57600080fd5b61100683836116ec565b9392505050565b600061101833610a81565b151560011461102657600080fd5b600160a060020a038216151561103b57600080fd5b30600160a060020a031682600160a060020a03161415151561105c57600080fd5b600c54600160a060020a038381169116141561107757600080fd5b611080826110ea565b1561108a57600080fd5b600b8054600160a060020a031916600160a060020a0384161790557f0428ca271a7bee83fddcf583de5ba0a5a69f42cbe32587b07bb38925ed96de8d82604051600160a060020a03909116815260200160405180910390a1506001919050565b60006110f582610a81565b8061084c575061084c8261153a565b600061110f33610a81565b151560011461111d57600080fd5b6000831161112a57600080fd5b61271082111561113957600080fd5b60008381526010602052604090205482141561115757506000610eb9565b600083815260106020526040908190208390557f1744d5a5c185d64a1877cf5e5950b2e4043b955c9923252820fb9cf6ad2b257590849084905191825260208201526040908101905180910390a150600192915050565b60015474010000000000000000000000000000000000000000900460ff1681565b67016345785d8a000081565b60095481565b60006111ec33610a81565b15156001146111fa57600080fd5b600160a060020a038216151561120f57600080fd5b30600160a060020a031682600160a060020a03161415151561123057600080fd5b600054600160a060020a038381169116141561124b57600080fd5b60018054600160a060020a031916600160a060020a038481169190911791829055167f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b60006112ac33610a81565b15156001146112ba57600080fd5b600c54600160a060020a0316156112d057600080fd5b600160a060020a03821615156112e557600080fd5b30600160a060020a031682600160a060020a03161415151561130657600080fd5b600b54600160a060020a038381169116141561132157600080fd5b61132a826110ea565b1561133457600080fd5b600c8054600160a060020a031916600160a060020a0384169081179091556113d5906004906113c990600390829063313ce5676000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561139e57600080fd5b6102c65a03f115156113af57600080fd5b50505060405180516012915060ff1663ffffffff61179816565b9063ffffffff6117ad16565b600a90810a90819055600090116113eb57600080fd5b7f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c860405160405180910390a1506001919050565b600181565b600e5481565b600154600160a060020a031681565b4290565b60116020526000908152604090205481565b600061145a33610a81565b151560011461146857600080fd5b60055460ff16151560011415611480575060006108bb565b6005805460ff191660011790557fe14916b4c867f32e91547d295f9b845b805d5b8c813daa3adbc1597f80a0c5eb60405160405180910390a150600190565b60015460009033600160a060020a039081169116146114dd57600080fd5b60008054600160a060020a03338116600160a060020a0319928316179283905560018054909216909155167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b600254600090600160a060020a03161580159061084c575050600254600160a060020a0390811691161490565b600061157233610a81565b151560011461158057600080fd5b60088290557f2de896f66f29831ace4b07f5658ac41de20910c13ce8b8db17bc102a80beff268260405190815260200160405180910390a1506001919050565b6219f0a081565b600c54600160a060020a031681565b600160a060020a03331660009081526012602052604081205481908190819081901161160157600080fd5b600160a060020a0386166000908152601260205260408120541161162457600080fd5b600160a060020a033316600090815260126020526040902054600f54101561164b57600080fd5b600160a060020a038616600090815260126020526040902054600f549093508390101561167757600080fd5b6000838152601060205260409020549150811515611693578491505b61169d86836117bf565b600160a060020a0387166000908152601160205260409020549091506116c9908263ffffffff6117ad16565b600160a060020a0387166000908152601160205260409020559250505092915050565b6000600160a060020a038316151561170357600080fd5b30600160a060020a031683600160a060020a03161415151561172457600080fd5b600b54600160a060020a038481169116141561173f57600080fd5b600160a060020a038316600081815260126020526040908190208490557f5beb3f610f1d5275b6ce198b03b5f6ebdeee3f94c2ed7c2941109390a303cd0f9084905190815260200160405180910390a250600192915050565b6000818310156117a757600080fd5b50900390565b60008282018381101561100657600080fd5b6000806000806000806000806000600160149054906101000a900460ff161515156117e957600080fd5b60055460ff16156117f957600080fd5b600354611804611439565b101561180f57600080fd5b60045461181a611439565b111561182557600080fd5b60095434101561183457600080fd5b600160a060020a038b16151561184957600080fd5b30600160a060020a03168b600160a060020a03161415151561186a57600080fd5b600c54600160a060020a038c81169116141561188557600080fd5b600b5433600160a060020a03908116911614156118a157600080fd5b600c54600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156118fa57600080fd5b6102c65a03f1151561190b57600080fd5b50505060405180519850506000881161192357600080fd5b600a5461196b9061195f61193f8d61271063ffffffff6117ad16565b60065461195390349063ffffffff611bd516565b9063ffffffff611bd516565b9063ffffffff611bfc16565b96506000871161197a57600080fd5b34955060009450879350600060085411156119ca576119988b611c11565b60085490935083106119a957600080fd5b6008546119bc908463ffffffff61179816565b9150878210156119ca578193505b600084116119d757600080fd5b83871115611a3c579295508592611a1f611a0b6119fc8c61271063ffffffff6117ad16565b6006549063ffffffff611bd516565b600a5461195f908a9063ffffffff611bd516565b955085341115611a3c57611a39348763ffffffff61179816565b94505b611a4c348663ffffffff61179816565b600b54909150600160a060020a031681156108fc0282604051600060405180830381858888f193505050501515611a8257600080fd5b600d54611a95908863ffffffff6117ad16565b600d55600e54611aab908263ffffffff6117ad16565b600e55600c54600160a060020a031663a9059cbb8c8960006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611b0d57600080fd5b6102c65a03f11515611b1e57600080fd5b505050604051805190501515611b3357600080fd5b6000851115611b6d57600160a060020a03331685156108fc0286604051600060405180830381858888f193505050501515611b6d57600080fd5b7f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f338b87896040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150949998505050505050505050565b6000828202831580611bf15750828482811515611bee57fe5b04145b151561100657600080fd5b60008183811515611c0957fe5b049392505050565b600160a060020a0316600090815260116020526040902054905600a165627a7a72305820c8dbbe176deeed0a10c085b277755263dd5fa9e252d70dd1a0720fb7a5a0784d0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000e9638c2d07eac8774d46b85e47cf53f52d60239f
-----Decoded View---------------
Arg [0] : wallet (address): 0xe9638C2d07eAc8774d46B85e47Cf53F52d60239f
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000e9638c2d07eac8774d46b85e47cf53f52d60239f
Swarm Source
bzzr://c8dbbe176deeed0a10c085b277755263dd5fa9e252d70dd1a0720fb7a5a0784d
Loading...
Loading
Loading...
Loading
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.