More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,343 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x0d262e5d | 5207144 | 2321 days ago | IN | 0.3 ETH | 0.00144174 | ||||
0x0d262e5d | 5207120 | 2321 days ago | IN | 0.22 ETH | 0.00129756 | ||||
Transfer | 5207082 | 2321 days ago | IN | 0.32 ETH | 0.00116586 | ||||
Transfer | 5207063 | 2321 days ago | IN | 0.12 ETH | 0.00088519 | ||||
Transfer | 5207047 | 2321 days ago | IN | 0.2 ETH | 0.00116586 | ||||
Finalize | 5207038 | 2321 days ago | IN | 0 ETH | 0.00040101 | ||||
Transfer | 5207031 | 2321 days ago | IN | 0.324962 ETH | 0.00099314 | ||||
Transfer | 5207020 | 2321 days ago | IN | 0.11 ETH | 0.00392464 | ||||
Transfer | 5207018 | 2321 days ago | IN | 0.121506 ETH | 0.00026958 | ||||
Transfer | 5206978 | 2321 days ago | IN | 0.121506 ETH | 0.00026958 | ||||
Update Whitelist... | 5206950 | 2321 days ago | IN | 0 ETH | 0.00171348 | ||||
Transfer | 5206886 | 2321 days ago | IN | 0.5 ETH | 0.00021971 | ||||
Transfer | 5206735 | 2321 days ago | IN | 0.7 ETH | 0.00047861 | ||||
Update Whitelist | 5206649 | 2321 days ago | IN | 0 ETH | 0.00046922 | ||||
Update Whitelist... | 5206646 | 2321 days ago | IN | 0 ETH | 0.00142662 | ||||
Transfer | 5206645 | 2321 days ago | IN | 0.51 ETH | 0.00090081 | ||||
Transfer | 5206617 | 2321 days ago | IN | 0.5 ETH | 0.00067006 | ||||
Transfer | 5206517 | 2321 days ago | IN | 0.18185282 ETH | 0.00131826 | ||||
Transfer | 5206456 | 2321 days ago | IN | 0.1 ETH | 0.00574338 | ||||
Transfer | 5206378 | 2321 days ago | IN | 0.1 ETH | 0.0013479 | ||||
Transfer | 5206308 | 2321 days ago | IN | 2.8 ETH | 0.00574338 | ||||
Set End Timestam... | 5206283 | 2321 days ago | IN | 0 ETH | 0.00039005 | ||||
Update Whitelist | 5206268 | 2321 days ago | IN | 0 ETH | 0.00037588 | ||||
Update Whitelist | 5206268 | 2321 days ago | IN | 0 ETH | 0.00037588 | ||||
Update Whitelist | 5206268 | 2321 days ago | IN | 0 ETH | 0.00037588 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5207020 | 2321 days ago | 0.11 ETH | ||||
5206735 | 2321 days ago | 0.7 ETH | ||||
5206617 | 2321 days ago | 0.5 ETH | ||||
5206456 | 2321 days ago | 0.1 ETH | ||||
5206308 | 2321 days ago | 2.8 ETH | ||||
5206098 | 2321 days ago | 1.8 ETH | ||||
5206070 | 2321 days ago | 1 ETH | ||||
5206058 | 2321 days ago | 0.12 ETH | ||||
5205997 | 2321 days ago | 0.2 ETH | ||||
5205901 | 2321 days ago | 0.5 ETH | ||||
5205875 | 2321 days ago | 0.14 ETH | ||||
5205823 | 2321 days ago | 0.4 ETH | ||||
5205808 | 2321 days ago | 0.5 ETH | ||||
5205749 | 2321 days ago | 0.13 ETH | ||||
5205689 | 2321 days ago | 0.2 ETH | ||||
5205681 | 2321 days ago | 0.35431347 ETH | ||||
5205630 | 2321 days ago | 0.3 ETH | ||||
5205451 | 2321 days ago | 2 ETH | ||||
5205306 | 2321 days ago | 0.25 ETH | ||||
5205204 | 2321 days ago | 0.5 ETH | ||||
5205132 | 2321 days ago | 0.2 ETH | ||||
5205098 | 2321 days ago | 0.1 ETH | ||||
5204986 | 2321 days ago | 0.1 ETH | ||||
5204576 | 2321 days ago | 0.33 ETH | ||||
5204523 | 2321 days ago | 0.1 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Crowdsale
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-02-27 */ pragma solidity ^0.4.17; contract J8TTokenConfig { // The J8T decimals uint8 public constant TOKEN_DECIMALS = 8; // The J8T decimal factor to obtain luckys uint256 public constant J8T_DECIMALS_FACTOR = 10**uint256(TOKEN_DECIMALS); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is StandardToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { require(_value > 0); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value); } } ////////////////////////////////////////////////////////////////////// // @title J8T Token // // @dev ERC20 J8T Token // // // // J8T Tokens are divisible by 1e8 (100,000,000) base // // // // J8T are displayed using 8 decimal places of precision. // // // // 1 J8T is equivalent to 100000000 luckys: // // 100000000 == 1 * 10**8 == 1e8 == One Hundred Million luckys // // // // 1,5 Billion J8T (total supply) is equivalent to: // // 150000000000000000 == 1500000000 * 10**8 == 1,5e17 luckys // // // ////////////////////////////////////////////////////////////////////// contract J8TToken is J8TTokenConfig, BurnableToken, Ownable { string public constant name = "J8T Token"; string public constant symbol = "J8T"; uint256 public constant decimals = TOKEN_DECIMALS; uint256 public constant INITIAL_SUPPLY = 1500000000 * (10 ** uint256(decimals)); event Transfer(address indexed _from, address indexed _to, uint256 _value); function J8TToken() { totalSupply = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; //https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transfer-1 //EIP 20: A token contract which creates new tokens SHOULD trigger a //Transfer event with the _from address set to 0x0 //when tokens are created. Transfer(0x0, msg.sender, INITIAL_SUPPLY); } } contract ACLManaged is Ownable { /////////////////////////// // ACLManaged PROPERTIES // /////////////////////////// // The operational acl address address public opsAddress; // The admin acl address address public adminAddress; //////////////////////////////////////// // ACLManaged FUNCTIONS and MODIFIERS // //////////////////////////////////////// function ACLManaged() public Ownable() {} // Updates the opsAddress propety with the new _opsAddress value function setOpsAddress(address _opsAddress) external onlyOwner returns (bool) { require(_opsAddress != address(0)); require(_opsAddress != address(this)); opsAddress = _opsAddress; return true; } // Updates the adminAddress propety with the new _adminAddress value function setAdminAddress(address _adminAddress) external onlyOwner returns (bool) { require(_adminAddress != address(0)); require(_adminAddress != address(this)); adminAddress = _adminAddress; return true; } //Checks if an address is owner function isOwner(address _address) public view returns (bool) { bool result = (_address == owner); return result; } //Checks if an address is operator function isOps(address _address) public view returns (bool) { bool result = (_address == opsAddress); return result; } //Checks if an address is ops or admin function isOpsOrAdmin(address _address) public view returns (bool) { bool result = (_address == opsAddress || _address == adminAddress); return result; } //Checks if an address is ops,owner or admin function isOwnerOrOpsOrAdmin(address _address) public view returns (bool) { bool result = (_address == opsAddress || _address == adminAddress || _address == owner); return result; } //Checks whether the msg.sender address is equal to the adminAddress property or not modifier onlyAdmin() { //Needs to be set. Default constructor will set 0x0; address _address = msg.sender; require(_address != address(0)); require(_address == adminAddress); _; } // Checks whether the msg.sender address is equal to the opsAddress property or not modifier onlyOps() { //Needs to be set. Default constructor will set 0x0; address _address = msg.sender; require(_address != address(0)); require(_address == opsAddress); _; } // Checks whether the msg.sender address is equal to the opsAddress or adminAddress property modifier onlyAdminAndOps() { //Needs to be set. Default constructor will set 0x0; address _address = msg.sender; require(_address != address(0)); require(_address == opsAddress || _address == adminAddress); _; } } contract CrowdsaleConfig is J8TTokenConfig { using SafeMath for uint256; // Default start token sale date is 28th February 15:00 SGP 2018 uint256 public constant START_TIMESTAMP = 1519801200; // Default end token sale date is 14th March 15:00 SGP 2018 uint256 public constant END_TIMESTAMP = 1521010800; // The ETH decimal factor to obtain weis uint256 public constant ETH_DECIMALS_FACTOR = 10**uint256(18); // The token sale supply uint256 public constant TOKEN_SALE_SUPPLY = 450000000 * J8T_DECIMALS_FACTOR; // The minimum contribution amount in weis uint256 public constant MIN_CONTRIBUTION_WEIS = 0.1 ether; // The maximum contribution amount in weis uint256 public constant MAX_CONTRIBUTION_WEIS = 10 ether; //@WARNING: WORKING WITH KILO-MULTIPLES TO AVOID IMPOSSIBLE DIVISIONS OF FLOATING POINTS. uint256 constant dollar_per_kilo_token = 100; //0.1 dollar per token uint256 public constant dollars_per_kilo_ether = 900000; //900$ per ether //TOKENS_PER_ETHER = dollars_per_ether / dollar_per_token uint256 public constant INITIAL_TOKENS_PER_ETHER = dollars_per_kilo_ether.div(dollar_per_kilo_token); } contract Ledger is ACLManaged { using SafeMath for uint256; /////////////////////// // Ledger PROPERTIES // /////////////////////// // The Allocation struct represents a token sale purchase // amountGranted is the amount of tokens purchased // hasClaimedBonusTokens whether the allocation has been alredy claimed struct Allocation { uint256 amountGranted; uint256 amountBonusGranted; bool hasClaimedBonusTokens; } // ContributionPhase enum cases are // PreSaleContribution, the contribution has been made in the presale phase // PartnerContribution, the contribution has been made in the private phase enum ContributionPhase { PreSaleContribution, PartnerContribution } // Map of adresses that purchased tokens on the presale phase mapping(address => Allocation) public presaleAllocations; // Map of adresses that purchased tokens on the private phase mapping(address => Allocation) public partnerAllocations; // Reference to the J8TToken contract J8TToken public tokenContract; // Reference to the Crowdsale contract Crowdsale public crowdsaleContract; // Total private allocation, counting the amount of tokens from the // partner and the presale phase uint256 public totalPrivateAllocation; // Whether the token allocations can be claimed on the partner sale phase bool public canClaimPartnerTokens; // Whether the token allocations can be claimed on the presale sale phase bool public canClaimPresaleTokens; // Whether the bonus token allocations can be claimed bool public canClaimPresaleBonusTokensPhase1; bool public canClaimPresaleBonusTokensPhase2; // Whether the bonus token allocations can be claimed bool public canClaimPartnerBonusTokensPhase1; bool public canClaimPartnerBonusTokensPhase2; /////////////////// // Ledger EVENTS // /////////////////// // Triggered when an allocation has been granted event AllocationGranted(address _contributor, uint256 _amount, uint8 _phase); // Triggered when an allocation has been revoked event AllocationRevoked(address _contributor, uint256 _amount, uint8 _phase); // Triggered when an allocation has been claimed event AllocationClaimed(address _contributor, uint256 _amount); // Triggered when a bonus allocation has been claimed event AllocationBonusClaimed(address _contributor, uint256 _amount); // Triggered when crowdsale contract updated event CrowdsaleContractUpdated(address _who, address _old_address, address _new_address); //Triggered when any can claim token boolean is updated. _type param indicates which is updated. event CanClaimTokensUpdated(address _who, string _type, bool _oldCanClaim, bool _newCanClaim); ////////////////////// // Ledger FUNCTIONS // ////////////////////// // Ledger constructor // Sets default values for canClaimPresaleTokens and canClaimPartnerTokens properties function Ledger(J8TToken _tokenContract) public { require(address(_tokenContract) != address(0)); tokenContract = _tokenContract; canClaimPresaleTokens = false; canClaimPartnerTokens = false; canClaimPresaleBonusTokensPhase1 = false; canClaimPresaleBonusTokensPhase2 = false; canClaimPartnerBonusTokensPhase1 = false; canClaimPartnerBonusTokensPhase2 = false; } function () external payable { claimTokens(); } // Revokes an allocation from the contributor with address _contributor // Deletes the allocation from the corresponding mapping property and transfers // the total amount of tokens of the allocation back to the Crowdsale contract function revokeAllocation(address _contributor, uint8 _phase) public onlyAdminAndOps payable returns (uint256) { require(_contributor != address(0)); require(_contributor != address(this)); // Can't revoke an allocation if the contribution phase is not in the ContributionPhase enum ContributionPhase _contributionPhase = ContributionPhase(_phase); require(_contributionPhase == ContributionPhase.PreSaleContribution || _contributionPhase == ContributionPhase.PartnerContribution); uint256 grantedAllocation = 0; // Deletes the allocation from the respective mapping if (_contributionPhase == ContributionPhase.PreSaleContribution) { grantedAllocation = presaleAllocations[_contributor].amountGranted.add(presaleAllocations[_contributor].amountBonusGranted); delete presaleAllocations[_contributor]; } else if (_contributionPhase == ContributionPhase.PartnerContribution) { grantedAllocation = partnerAllocations[_contributor].amountGranted.add(partnerAllocations[_contributor].amountBonusGranted); delete partnerAllocations[_contributor]; } // The granted amount allocation must be less that the current token supply on the contract uint256 currentSupply = tokenContract.balanceOf(address(this)); require(grantedAllocation <= currentSupply); // Updates the total private allocation substracting the amount of tokens that has been revoked require(grantedAllocation <= totalPrivateAllocation); totalPrivateAllocation = totalPrivateAllocation.sub(grantedAllocation); // We sent back the amount of tokens that has been revoked to the corwdsale contract require(tokenContract.transfer(address(crowdsaleContract), grantedAllocation)); AllocationRevoked(_contributor, grantedAllocation, _phase); return grantedAllocation; } // Adds a new allocation for the contributor with address _contributor function addAllocation(address _contributor, uint256 _amount, uint256 _bonus, uint8 _phase) public onlyAdminAndOps returns (bool) { require(_contributor != address(0)); require(_contributor != address(this)); // Can't create or update an allocation if the amount of tokens to be allocated is not greater than zero require(_amount > 0); // Can't create an allocation if the contribution phase is not in the ContributionPhase enum ContributionPhase _contributionPhase = ContributionPhase(_phase); require(_contributionPhase == ContributionPhase.PreSaleContribution || _contributionPhase == ContributionPhase.PartnerContribution); uint256 totalAmount = _amount.add(_bonus); uint256 totalGrantedAllocation = 0; uint256 totalGrantedBonusAllocation = 0; // Fetch the allocation from the respective mapping and updates the granted amount of tokens if (_contributionPhase == ContributionPhase.PreSaleContribution) { totalGrantedAllocation = presaleAllocations[_contributor].amountGranted.add(_amount); totalGrantedBonusAllocation = presaleAllocations[_contributor].amountBonusGranted.add(_bonus); presaleAllocations[_contributor] = Allocation(totalGrantedAllocation, totalGrantedBonusAllocation, false); } else if (_contributionPhase == ContributionPhase.PartnerContribution) { totalGrantedAllocation = partnerAllocations[_contributor].amountGranted.add(_amount); totalGrantedBonusAllocation = partnerAllocations[_contributor].amountBonusGranted.add(_bonus); partnerAllocations[_contributor] = Allocation(totalGrantedAllocation, totalGrantedBonusAllocation, false); } // Updates the contract data totalPrivateAllocation = totalPrivateAllocation.add(totalAmount); AllocationGranted(_contributor, totalAmount, _phase); return true; } // The claimTokens() function handles the contribution token claim. // Tokens can only be claimed after we open this phase. // The lockouts periods are defined by the foundation. // There are 2 different lockouts: // Presale lockout // Partner lockout // // A contributor that has contributed in all the phases can claim // all its tokens, but only the ones that are accesible to claim // be transfered. // // A contributor can claim its tokens after each phase has been opened function claimTokens() public payable returns (bool) { require(msg.sender != address(0)); require(msg.sender != address(this)); uint256 amountToTransfer = 0; // We need to check if the contributor has made a contribution on each // phase, presale and partner Allocation storage presaleA = presaleAllocations[msg.sender]; if (presaleA.amountGranted > 0 && canClaimPresaleTokens) { amountToTransfer = amountToTransfer.add(presaleA.amountGranted); presaleA.amountGranted = 0; } Allocation storage partnerA = partnerAllocations[msg.sender]; if (partnerA.amountGranted > 0 && canClaimPartnerTokens) { amountToTransfer = amountToTransfer.add(partnerA.amountGranted); partnerA.amountGranted = 0; } // The amount to transfer must greater than zero require(amountToTransfer > 0); // The amount to transfer must be less or equal to the current supply uint256 currentSupply = tokenContract.balanceOf(address(this)); require(amountToTransfer <= currentSupply); // Transfer the token allocation to contributor require(tokenContract.transfer(msg.sender, amountToTransfer)); AllocationClaimed(msg.sender, amountToTransfer); return true; } function claimBonus() external payable returns (bool) { require(msg.sender != address(0)); require(msg.sender != address(this)); uint256 amountToTransfer = 0; // BONUS PHASE 1 Allocation storage presale = presaleAllocations[msg.sender]; if (presale.amountBonusGranted > 0 && !presale.hasClaimedBonusTokens && canClaimPresaleBonusTokensPhase1) { uint256 amountPresale = presale.amountBonusGranted.div(2); amountToTransfer = amountPresale; presale.amountBonusGranted = amountPresale; presale.hasClaimedBonusTokens = true; } Allocation storage partner = partnerAllocations[msg.sender]; if (partner.amountBonusGranted > 0 && !partner.hasClaimedBonusTokens && canClaimPartnerBonusTokensPhase1) { uint256 amountPartner = partner.amountBonusGranted.div(2); amountToTransfer = amountToTransfer.add(amountPartner); partner.amountBonusGranted = amountPartner; partner.hasClaimedBonusTokens = true; } // BONUS PHASE 2 if (presale.amountBonusGranted > 0 && canClaimPresaleBonusTokensPhase2) { amountToTransfer = amountToTransfer.add(presale.amountBonusGranted); presale.amountBonusGranted = 0; } if (partner.amountBonusGranted > 0 && canClaimPartnerBonusTokensPhase2) { amountToTransfer = amountToTransfer.add(partner.amountBonusGranted); partner.amountBonusGranted = 0; } // The amount to transfer must greater than zero require(amountToTransfer > 0); // The amount to transfer must be less or equal to the current supply uint256 currentSupply = tokenContract.balanceOf(address(this)); require(amountToTransfer <= currentSupply); // Transfer the token allocation to contributor require(tokenContract.transfer(msg.sender, amountToTransfer)); AllocationBonusClaimed(msg.sender, amountToTransfer); return true; } // Updates the canClaimPresaleTokens propety with the new _canClaimTokens value function setCanClaimPresaleTokens(bool _canClaimTokens) external onlyAdmin returns (bool) { bool _oldCanClaim = canClaimPresaleTokens; canClaimPresaleTokens = _canClaimTokens; CanClaimTokensUpdated(msg.sender, 'canClaimPresaleTokens', _oldCanClaim, _canClaimTokens); return true; } // Updates the canClaimPartnerTokens property with the new _canClaimTokens value function setCanClaimPartnerTokens(bool _canClaimTokens) external onlyAdmin returns (bool) { bool _oldCanClaim = canClaimPartnerTokens; canClaimPartnerTokens = _canClaimTokens; CanClaimTokensUpdated(msg.sender, 'canClaimPartnerTokens', _oldCanClaim, _canClaimTokens); return true; } // Updates the canClaimBonusTokens property with the new _canClaimTokens value function setCanClaimPresaleBonusTokensPhase1(bool _canClaimTokens) external onlyAdmin returns (bool) { bool _oldCanClaim = canClaimPresaleBonusTokensPhase1; canClaimPresaleBonusTokensPhase1 = _canClaimTokens; CanClaimTokensUpdated(msg.sender, 'canClaimPresaleBonusTokensPhase1', _oldCanClaim, _canClaimTokens); return true; } // Updates the canClaimBonusTokens property with the new _canClaimTokens value function setCanClaimPresaleBonusTokensPhase2(bool _canClaimTokens) external onlyAdmin returns (bool) { bool _oldCanClaim = canClaimPresaleBonusTokensPhase2; canClaimPresaleBonusTokensPhase2 = _canClaimTokens; CanClaimTokensUpdated(msg.sender, 'canClaimPresaleBonusTokensPhase2', _oldCanClaim, _canClaimTokens); return true; } // Updates the canClaimBonusTokens property with the new _canClaimTokens value function setCanClaimPartnerBonusTokensPhase1(bool _canClaimTokens) external onlyAdmin returns (bool) { bool _oldCanClaim = canClaimPartnerBonusTokensPhase1; canClaimPartnerBonusTokensPhase1 = _canClaimTokens; CanClaimTokensUpdated(msg.sender, 'canClaimPartnerBonusTokensPhase1', _oldCanClaim, _canClaimTokens); return true; } // Updates the canClaimBonusTokens property with the new _canClaimTokens value function setCanClaimPartnerBonusTokensPhase2(bool _canClaimTokens) external onlyAdmin returns (bool) { bool _oldCanClaim = canClaimPartnerBonusTokensPhase2; canClaimPartnerBonusTokensPhase2 = _canClaimTokens; CanClaimTokensUpdated(msg.sender, 'canClaimPartnerBonusTokensPhase2', _oldCanClaim, _canClaimTokens); return true; } // Updates the crowdsale contract property with the new _crowdsaleContract value function setCrowdsaleContract(Crowdsale _crowdsaleContract) public onlyOwner returns (bool) { address old_crowdsale_address = crowdsaleContract; crowdsaleContract = _crowdsaleContract; CrowdsaleContractUpdated(msg.sender, old_crowdsale_address, crowdsaleContract); return true; } } contract Crowdsale is ACLManaged, CrowdsaleConfig { using SafeMath for uint256; ////////////////////////// // Crowdsale PROPERTIES // ////////////////////////// // The J8TToken smart contract reference J8TToken public tokenContract; // The Ledger smart contract reference Ledger public ledgerContract; // The start token sale date represented as a timestamp uint256 public startTimestamp; // The end token sale date represented as a timestamp uint256 public endTimestamp; // Ratio of J8T tokens to per ether uint256 public tokensPerEther; // The total amount of wei raised in the token sale // Including presales (in eth) and public sale uint256 public weiRaised; // The current total amount of tokens sold in the token sale uint256 public totalTokensSold; // The minimum and maximum eth contribution accepted in the token sale uint256 public minContribution; uint256 public maxContribution; // The wallet address where the token sale sends all eth contributions address public wallet; // Controls whether the token sale has finished or not bool public isFinalized = false; // Map of adresses that requested to purchase tokens // Contributors of the token sale are segmented as: // CannotContribute: Cannot contribute in any phase (uint8 - 0) // PreSaleContributor: Can contribute on both pre-sale and pubic sale phases (uint8 - 1) // PublicSaleContributor: Can contribute on he public sale phase (uint8 - 2) mapping(address => WhitelistPermission) public whitelist; // Map of addresses that has already contributed on the token sale mapping(address => bool) public hasContributed; enum WhitelistPermission { CannotContribute, PreSaleContributor, PublicSaleContributor } ////////////////////// // Crowdsale EVENTS // ////////////////////// // Triggered when a contribution in the public sale has been processed correctly event TokensPurchased(address _contributor, uint256 _amount); // Triggered when the whitelist has been updated event WhiteListUpdated(address _who, address _account, WhitelistPermission _phase); // Triggered when the Crowdsale has been created event ContractCreated(); // Triggered when a presale has been added // The phase parameter can be a strategic partner contribution or a presale contribution event PresaleAdded(address _contributor, uint256 _amount, uint8 _phase); // Triggered when the tokensPerEther property has been updated event TokensPerEtherUpdated(address _who, uint256 _oldValue, uint256 _newValue); // Triggered when the startTimestamp property has been updated event StartTimestampUpdated(address _who, uint256 _oldValue, uint256 _newValue); // Triggered when the endTimestamp property has been updated event EndTimestampUpdated(address _who, uint256 _oldValue, uint256 _newValue); // Triggered when the wallet property has been updated event WalletUpdated(address _who, address _oldWallet, address _newWallet); // Triggered when the minContribution property has been updated event MinContributionUpdated(address _who, uint256 _oldValue, uint256 _newValue); // Triggered when the maxContribution property has been updated event MaxContributionUpdated(address _who, uint256 _oldValue, uint256 _newValue); // Triggered when the token sale has finalized event Finalized(address _who, uint256 _timestamp); // Triggered when the token sale has finalized and there where still token to sale // When the token are not sold, we burn them event Burned(address _who, uint256 _amount, uint256 _timestamp); ///////////////////////// // Crowdsale FUNCTIONS // ///////////////////////// // Crowdsale constructor // Takes default values from the CrowdsaleConfig smart contract function Crowdsale( J8TToken _tokenContract, Ledger _ledgerContract, address _wallet ) public { uint256 _start = START_TIMESTAMP; uint256 _end = END_TIMESTAMP; uint256 _supply = TOKEN_SALE_SUPPLY; uint256 _min_contribution = MIN_CONTRIBUTION_WEIS; uint256 _max_contribution = MAX_CONTRIBUTION_WEIS; uint256 _tokensPerEther = INITIAL_TOKENS_PER_ETHER; require(_start > currentTime()); require(_end > _start); require(_tokensPerEther > 0); require(address(_tokenContract) != address(0)); require(address(_ledgerContract) != address(0)); require(_wallet != address(0)); ledgerContract = _ledgerContract; tokenContract = _tokenContract; startTimestamp = _start; endTimestamp = _end; tokensPerEther = _tokensPerEther; minContribution = _min_contribution; maxContribution = _max_contribution; wallet = _wallet; totalTokensSold = 0; weiRaised = 0; isFinalized = false; ContractCreated(); } // Updates the tokenPerEther propety with the new _tokensPerEther value function setTokensPerEther(uint256 _tokensPerEther) external onlyAdmin onlyBeforeSale returns (bool) { require(_tokensPerEther > 0); uint256 _oldValue = tokensPerEther; tokensPerEther = _tokensPerEther; TokensPerEtherUpdated(msg.sender, _oldValue, tokensPerEther); return true; } // Updates the startTimestamp propety with the new _start value function setStartTimestamp(uint256 _start) external onlyAdmin returns (bool) { require(_start < endTimestamp); require(_start > currentTime()); uint256 _oldValue = startTimestamp; startTimestamp = _start; StartTimestampUpdated(msg.sender, _oldValue, startTimestamp); return true; } // Updates the endTimestamp propety with the new _end value function setEndTimestamp(uint256 _end) external onlyAdmin returns (bool) { require(_end > startTimestamp); uint256 _oldValue = endTimestamp; endTimestamp = _end; EndTimestampUpdated(msg.sender, _oldValue, endTimestamp); return true; } // Updates the wallet propety with the new _newWallet value function updateWallet(address _newWallet) external onlyAdmin returns (bool) { require(_newWallet != address(0)); address _oldValue = wallet; wallet = _newWallet; WalletUpdated(msg.sender, _oldValue, wallet); return true; } // Updates the minContribution propety with the new _newMinControbution value function setMinContribution(uint256 _newMinContribution) external onlyAdmin returns (bool) { require(_newMinContribution <= maxContribution); uint256 _oldValue = minContribution; minContribution = _newMinContribution; MinContributionUpdated(msg.sender, _oldValue, minContribution); return true; } // Updates the maxContribution propety with the new _newMaxContribution value function setMaxContribution(uint256 _newMaxContribution) external onlyAdmin returns (bool) { require(_newMaxContribution > minContribution); uint256 _oldValue = maxContribution; maxContribution = _newMaxContribution; MaxContributionUpdated(msg.sender, _oldValue, maxContribution); return true; } // Main public function. function () external payable { purchaseTokens(); } // Revokes a presale allocation from the contributor with address _contributor // Updates the totalTokensSold property substracting the amount of tokens that where previously allocated function revokePresale(address _contributor, uint8 _contributorPhase) external onlyAdmin returns (bool) { require(_contributor != address(0)); // We can only revoke allocations from pre sale or strategic partners // ContributionPhase.PreSaleContribution == 0, ContributionPhase.PartnerContribution == 1 require(_contributorPhase == 0 || _contributorPhase == 1); uint256 luckys = ledgerContract.revokeAllocation(_contributor, _contributorPhase); require(luckys > 0); require(luckys <= totalTokensSold); totalTokensSold = totalTokensSold.sub(luckys); return true; } // Adds a new presale allocation for the contributor with address _contributor // We can only allocate presale before the token sale has been initialized function addPresale(address _contributor, uint256 _tokens, uint256 _bonus, uint8 _contributorPhase) external onlyAdminAndOps onlyBeforeSale returns (bool) { require(_tokens > 0); require(_bonus > 0); // Converts the amount of tokens to our smallest J8T value, lucky uint256 luckys = _tokens.mul(J8T_DECIMALS_FACTOR); uint256 bonusLuckys = _bonus.mul(J8T_DECIMALS_FACTOR); uint256 totalTokens = luckys.add(bonusLuckys); uint256 availableTokensToPurchase = tokenContract.balanceOf(address(this)); require(totalTokens <= availableTokensToPurchase); // Insert the new allocation to the Ledger require(ledgerContract.addAllocation(_contributor, luckys, bonusLuckys, _contributorPhase)); // Transfers the tokens form the Crowdsale contract to the Ledger contract require(tokenContract.transfer(address(ledgerContract), totalTokens)); // Updates totalTokensSold property totalTokensSold = totalTokensSold.add(totalTokens); // If we reach the total amount of tokens to sell we finilize the token sale availableTokensToPurchase = tokenContract.balanceOf(address(this)); if (availableTokensToPurchase == 0) { finalization(); } // Trigger PresaleAdded event PresaleAdded(_contributor, totalTokens, _contributorPhase); } // The purchaseTokens function handles the token purchase flow function purchaseTokens() public payable onlyDuringSale returns (bool) { address contributor = msg.sender; uint256 weiAmount = msg.value; // A contributor can only contribute once on the public sale require(hasContributed[contributor] == false); // The contributor address must be whitelisted in order to be able to purchase tokens require(contributorCanContribute(contributor)); // The weiAmount must be greater or equal than minContribution require(weiAmount >= minContribution); // The weiAmount cannot be greater than maxContribution require(weiAmount <= maxContribution); // The availableTokensToPurchase must be greater than 0 require(totalTokensSold < TOKEN_SALE_SUPPLY); uint256 availableTokensToPurchase = TOKEN_SALE_SUPPLY.sub(totalTokensSold); // We need to convert the tokensPerEther to luckys (10**8) uint256 luckyPerEther = tokensPerEther.mul(J8T_DECIMALS_FACTOR); // In order to calculate the tokens amount to be allocated to the contrbutor // we need to multiply the amount of wei sent by luckyPerEther and divide the // result for the ether decimal factor (10**18) uint256 tokensAmount = weiAmount.mul(luckyPerEther).div(ETH_DECIMALS_FACTOR); uint256 refund = 0; uint256 tokensToPurchase = tokensAmount; // If the token purchase amount is bigger than the remaining token allocation // we can only sell the remainging tokens and refund the unused amount of eth if (availableTokensToPurchase < tokensAmount) { tokensToPurchase = availableTokensToPurchase; weiAmount = tokensToPurchase.mul(ETH_DECIMALS_FACTOR).div(luckyPerEther); refund = msg.value.sub(weiAmount); } // We update the token sale contract data totalTokensSold = totalTokensSold.add(tokensToPurchase); uint256 weiToPurchase = tokensToPurchase.div(tokensPerEther); weiRaised = weiRaised.add(weiToPurchase); // Transfers the tokens form the Crowdsale contract to contriutors wallet require(tokenContract.transfer(contributor, tokensToPurchase)); // Issue a refund for any unused ether if (refund > 0) { contributor.transfer(refund); } // Transfer ether contribution to the wallet wallet.transfer(weiAmount); // Update hasContributed mapping hasContributed[contributor] = true; TokensPurchased(contributor, tokensToPurchase); // If we reach the total amount of tokens to sell we finilize the token sale if (totalTokensSold == TOKEN_SALE_SUPPLY) { finalization(); } return true; } // Updates the whitelist function updateWhitelist(address _account, WhitelistPermission _permission) external onlyAdminAndOps returns (bool) { require(_account != address(0)); require(_permission == WhitelistPermission.PreSaleContributor || _permission == WhitelistPermission.PublicSaleContributor || _permission == WhitelistPermission.CannotContribute); require(!saleHasFinished()); whitelist[_account] = _permission; address _who = msg.sender; WhiteListUpdated(_who, _account, _permission); return true; } function updateWhitelist_batch(address[] _accounts, WhitelistPermission _permission) external onlyAdminAndOps returns (bool) { require(_permission == WhitelistPermission.PreSaleContributor || _permission == WhitelistPermission.PublicSaleContributor || _permission == WhitelistPermission.CannotContribute); require(!saleHasFinished()); for(uint i = 0; i < _accounts.length; ++i) { require(_accounts[i] != address(0)); whitelist[_accounts[i]] = _permission; WhiteListUpdated(msg.sender, _accounts[i], _permission); } return true; } // Checks that the status of an address account // Contributors of the token sale are segmented as: // PreSaleContributor: Can contribute on both pre-sale and pubic sale phases // PublicSaleContributor: Can contribute on he public sale phase // CannotContribute: Cannot contribute in any phase function contributorCanContribute(address _contributorAddress) private view returns (bool) { WhitelistPermission _contributorPhase = whitelist[_contributorAddress]; if (_contributorPhase == WhitelistPermission.CannotContribute) { return false; } if (_contributorPhase == WhitelistPermission.PreSaleContributor || _contributorPhase == WhitelistPermission.PublicSaleContributor) { return true; } return false; } // Returns the current time function currentTime() public view returns (uint256) { return now; } // Checks if the sale has finished function saleHasFinished() public view returns (bool) { if (isFinalized) { return true; } if (endTimestamp < currentTime()) { return true; } if (totalTokensSold == TOKEN_SALE_SUPPLY) { return true; } return false; } modifier onlyBeforeSale() { require(currentTime() < startTimestamp); _; } modifier onlyDuringSale() { uint256 _currentTime = currentTime(); require(startTimestamp < _currentTime); require(_currentTime < endTimestamp); _; } modifier onlyPostSale() { require(endTimestamp < currentTime()); _; } /////////////////////// // PRIVATE FUNCTIONS // /////////////////////// // This method is for to be called only for the owner. This way we protect for anyone who wanna finalize the ICO. function finalize() external onlyAdmin returns (bool) { return finalization(); } // Only used by finalize and setFinalized. // Overloaded logic for two uses. // NOTE: In case finalize is called by an user and not from addPresale()/purchaseToken() // will diff total supply with sold supply to burn token. function finalization() private returns (bool) { require(!isFinalized); isFinalized = true; if (totalTokensSold < TOKEN_SALE_SUPPLY) { uint256 toBurn = TOKEN_SALE_SUPPLY.sub(totalTokensSold); tokenContract.burn(toBurn); Burned(msg.sender, toBurn, currentTime()); } Finalized(msg.sender, currentTime()); return true; } function saleSupply() public view returns (uint256) { return tokenContract.balanceOf(address(this)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"ledgerContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newMaxContribution","type":"uint256"}],"name":"setMaxContribution","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_TOKENS_PER_ETHER","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"hasContributed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_adminAddress","type":"address"}],"name":"setAdminAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"purchaseTokens","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwnerOrOpsOrAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newMinContribution","type":"uint256"}],"name":"setMinContribution","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"J8T_DECIMALS_FACTOR","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":"_account","type":"address"},{"name":"_permission","type":"uint8"}],"name":"updateWhitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"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":"TOKEN_SALE_SUPPLY","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":false,"inputs":[{"name":"_opsAddress","type":"address"}],"name":"setOpsAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"saleHasFinished","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_accounts","type":"address[]"},{"name":"_permission","type":"uint8"}],"name":"updateWhitelist_batch","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"START_TIMESTAMP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_end","type":"uint256"}],"name":"setEndTimestamp","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newWallet","type":"address"}],"name":"updateWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"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":false,"inputs":[{"name":"_tokensPerEther","type":"uint256"}],"name":"setTokensPerEther","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_CONTRIBUTION_WEIS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_CONTRIBUTION_WEIS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"END_TIMESTAMP","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dollars_per_kilo_ether","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"endTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_start","type":"uint256"}],"name":"setStartTimestamp","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_contributor","type":"address"},{"name":"_tokens","type":"uint256"},{"name":"_bonus","type":"uint256"},{"name":"_contributorPhase","type":"uint8"}],"name":"addPresale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ETH_DECIMALS_FACTOR","outputs":[{"name":"","type":"uint256"}],"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":"startTimestamp","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOpsOrAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensPerEther","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contributor","type":"address"},{"name":"_contributorPhase","type":"uint8"}],"name":"revokePresale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_tokenContract","type":"address"},{"name":"_ledgerContract","type":"address"},{"name":"_wallet","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_contributor","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_account","type":"address"},{"indexed":false,"name":"_phase","type":"uint8"}],"name":"WhiteListUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"ContractCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_contributor","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_phase","type":"uint8"}],"name":"PresaleAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_oldValue","type":"uint256"},{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"TokensPerEtherUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_oldValue","type":"uint256"},{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"StartTimestampUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_oldValue","type":"uint256"},{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"EndTimestampUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_oldWallet","type":"address"},{"indexed":false,"name":"_newWallet","type":"address"}],"name":"WalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_oldValue","type":"uint256"},{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"MinContributionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_oldValue","type":"uint256"},{"indexed":false,"name":"_newValue","type":"uint256"}],"name":"MaxContributionUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_timestamp","type":"uint256"}],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_who","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"},{"indexed":false,"name":"_timestamp","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
60606040526000600c60146101000a81548160ff02191690831515021790555034156200002b57600080fd5b60405160608062003a5b83398101604052808051906020019091908051906020019091908051906020019091905050600080600080600080336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550635a9653709550635aa8c8709450600860ff16600a0a631ad2748002935067016345785d8a00009250678ac7230489e800009150620000fe6064620dbba06200034e6401000000000262003466179091906401000000009004565b90506200011e6200036a6401000000000262002e75176401000000009004565b861115156200012c57600080fd5b85851115156200013b57600080fd5b6000811115156200014b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141515156200018857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620001c557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200020257600080fd5b87600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600581905550846006819055508060078190555082600a8190555081600b8190555086600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060098190555060006008819055506000600c60146101000a81548160ff0219169083151502179055507fabd60e51a18b36604f00b5547417cf9051cc5c3a2e80e68206296e14be19f0bc60405160405180910390a150505050505050505062000372565b60008082848115156200035d57fe5b0490508091505092915050565b600042905090565b6136d980620003826000396000f300606060405260043610610246576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063026345b61461025157806303ed9d21146102a65780631a8fc985146102e1578063205b19461461030a5780632c1e816d1461035b5780632f54bf6e146103ac5780633290ce29146103fd57806336ac1dd01461041f5780634042b66f14610470578063473b0d4614610499578063498b7718146104d45780634bb278f3146104fd5780634d399cb31461052a578063521eb2731461058757806355a373d6146105dc5780635b7f415c146106315780635d0cb15d1461066057806363b2011714610689578063707789c5146106b257806374c06f5d1461070357806376c6dc1614610730578063781cd99d146107825780637df6a6c8146107ab578063848b86e3146107e65780638d3d6576146108375780638d4e4083146108605780638da5cb5b1461088d5780638ea64376146108e2578063904bd6d0146109375780639b19251a146109725780639d7233d4146109cd5780639f132677146109f6578063a07c765f14610a1f578063a5f75a5e14610a48578063a85adeab14610a71578063a96af0f414610a9a578063aaffadf314610ac3578063c44bef7514610aec578063c9f613d514610b27578063ce809e4e14610b96578063d18e81b314610bbf578063e6fd48bc14610be8578063ec57332014610c11578063ef326c6d14610c62578063f2fde38b14610cb3578063f856d60514610cec578063fc6f946814610d15578063fc914fdb14610d6a575b61024e610dc7565b50005b341561025c57600080fd5b610264611258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102b157600080fd5b6102c7600480803590602001909190505061127e565b604051808215151515815260200191505060405180910390f35b34156102ec57600080fd5b6102f46113ba565b6040518082815260200191505060405180910390f35b341561031557600080fd5b610341600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113d4565b604051808215151515815260200191505060405180910390f35b341561036657600080fd5b610392600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113f4565b604051808215151515815260200191505060405180910390f35b34156103b757600080fd5b6103e3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611512565b604051808215151515815260200191505060405180910390f35b610405610dc7565b604051808215151515815260200191505060405180910390f35b341561042a57600080fd5b610456600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611570565b604051808215151515815260200191505060405180910390f35b341561047b57600080fd5b61048361167e565b6040518082815260200191505060405180910390f35b34156104a457600080fd5b6104ba6004808035906020019091905050611684565b604051808215151515815260200191505060405180910390f35b34156104df57600080fd5b6104e76117c1565b6040518082815260200191505060405180910390f35b341561050857600080fd5b6105106117cc565b604051808215151515815260200191505060405180910390f35b341561053557600080fd5b61056d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091905050611878565b604051808215151515815260200191505060405180910390f35b341561059257600080fd5b61059a611b42565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105e757600080fd5b6105ef611b68565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063c57600080fd5b610644611b8e565b604051808260ff1660ff16815260200191505060405180910390f35b341561066b57600080fd5b610673611b93565b6040518082815260200191505060405180910390f35b341561069457600080fd5b61069c611ba4565b6040518082815260200191505060405180910390f35b34156106bd57600080fd5b6106e9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611baa565b604051808215151515815260200191505060405180910390f35b341561070e57600080fd5b610716611cc8565b604051808215151515815260200191505060405180910390f35b341561073b57600080fd5b6107686004808035906020019082018035906020019190919290803560ff16906020019091905050611d2a565b604051808215151515815260200191505060405180910390f35b341561078d57600080fd5b61079561208b565b6040518082815260200191505060405180910390f35b34156107b657600080fd5b6107cc6004808035906020019091905050612093565b604051808215151515815260200191505060405180910390f35b34156107f157600080fd5b61081d600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121cf565b604051808215151515815260200191505060405180910390f35b341561084257600080fd5b61084a612409565b6040518082815260200191505060405180910390f35b341561086b57600080fd5b61087361240f565b604051808215151515815260200191505060405180910390f35b341561089857600080fd5b6108a0612422565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108ed57600080fd5b6108f5612447565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561094257600080fd5b610958600480803590602001909190505061246d565b604051808215151515815260200191505060405180910390f35b341561097d57600080fd5b6109a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506125bf565b604051808260028111156109b957fe5b60ff16815260200191505060405180910390f35b34156109d857600080fd5b6109e06125df565b6040518082815260200191505060405180910390f35b3415610a0157600080fd5b610a096125eb565b6040518082815260200191505060405180910390f35b3415610a2a57600080fd5b610a326125f7565b6040518082815260200191505060405180910390f35b3415610a5357600080fd5b610a5b6125ff565b6040518082815260200191505060405180910390f35b3415610a7c57600080fd5b610a84612606565b6040518082815260200191505060405180910390f35b3415610aa557600080fd5b610aad61260c565b6040518082815260200191505060405180910390f35b3415610ace57600080fd5b610ad66126f3565b6040518082815260200191505060405180910390f35b3415610af757600080fd5b610b0d60048080359060200190919050506126f9565b604051808215151515815260200191505060405180910390f35b3415610b3257600080fd5b610b7c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803560ff1690602001909190505061284a565b604051808215151515815260200191505060405180910390f35b3415610ba157600080fd5b610ba9612e6d565b6040518082815260200191505060405180910390f35b3415610bca57600080fd5b610bd2612e75565b6040518082815260200191505060405180910390f35b3415610bf357600080fd5b610bfb612e7d565b6040518082815260200191505060405180910390f35b3415610c1c57600080fd5b610c48600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612e83565b604051808215151515815260200191505060405180910390f35b3415610c6d57600080fd5b610c99600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612f3a565b604051808215151515815260200191505060405180910390f35b3415610cbe57600080fd5b610cea600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612f99565b005b3415610cf757600080fd5b610cff6130ee565b6040518082815260200191505060405180910390f35b3415610d2057600080fd5b610d286130f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610d7557600080fd5b610dad600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff1690602001909190505061311a565b604051808215151515815260200191505060405180910390f35b600080600080600080600080600080610dde612e75565b905080600554101515610df057600080fd5b60065481101515610e0057600080fd5b33985034975060001515600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515610e6557600080fd5b610e6e8961334d565b1515610e7957600080fd5b600a548810151515610e8a57600080fd5b600b548811151515610e9b57600080fd5b600860ff16600a0a631ad2748002600954101515610eb857600080fd5b610eda600954600860ff16600a0a631ad274800261341a90919063ffffffff16565b9650610ef8600860ff16600a0a60075461343390919063ffffffff16565b9550610f236012600a0a610f15888b61343390919063ffffffff16565b61346690919063ffffffff16565b94506000935084925084871015610f7857869250610f6086610f526012600a0a8661343390919063ffffffff16565b61346690919063ffffffff16565b9750610f75883461341a90919063ffffffff16565b93505b610f8d8360095461348190919063ffffffff16565b600981905550610fa86007548461346690919063ffffffff16565b9150610fbf8260085461348190919063ffffffff16565b600881905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561109257600080fd5b6102c65a03f115156110a357600080fd5b5050506040518051905015156110b857600080fd5b6000841115611102578873ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050151561110157600080fd5b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc899081150290604051600060405180830381858888f19350505050151561116457600080fd5b6001600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2718984604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600860ff16600a0a631ad274800260095414156112485761124661349f565b505b6001995050505050505050505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156112c257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561131e57600080fd5b600a548411151561132e57600080fd5b600b54915083600b819055507f97e165b35cdd33d0612173780f6b087e9d1bf014f1c2569b91e5463f043714dc3383600b54604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b6113d16064620dbba061346690919063ffffffff16565b81565b600e6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561148d57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156114c857600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905080915050919050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061161c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061167357506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b905080915050919050565b60085481565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116c857600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561172457600080fd5b600b54841115151561173557600080fd5b600a54915083600a819055507f21c9aa51794e3f9069f3de59b27bb45fbff651793d53a4488f1b67f6695440863383600a54604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b600860ff16600a0a81565b600080339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561180e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561186a57600080fd5b61187261349f565b91505090565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156118bc57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806119655750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561197057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156119ac57600080fd5b600160028111156119b957fe5b8460028111156119c557fe5b14806119e657506002808111156119d857fe5b8460028111156119e457fe5b145b80611a075750600060028111156119f957fe5b846002811115611a0557fe5b145b1515611a1257600080fd5b611a1a611cc8565b151515611a2657600080fd5b83600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115611a8157fe5b02179055503391507f3f3816908a5fa8ed32f84d4db7048658b4bd1fa807f45a93ce4ba9ad599cd34b828686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826002811115611b2157fe5b60ff168152602001935050505060405180910390a160019250505092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600881565b600860ff16600a0a631ad274800281565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c0757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c4357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c7e57600080fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600c60149054906101000a900460ff1615611ce85760019050611d27565b611cf0612e75565b6006541015611d025760019050611d27565b600860ff16600a0a631ad27480026009541415611d225760019050611d27565b600090505b90565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d6e57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611e175750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1515611e2257600080fd5b60016002811115611e2f57fe5b846002811115611e3b57fe5b1480611e5c5750600280811115611e4e57fe5b846002811115611e5a57fe5b145b80611e7d575060006002811115611e6f57fe5b846002811115611e7b57fe5b145b1515611e8857600080fd5b611e90611cc8565b151515611e9c57600080fd5b600091505b8585905082101561207e57600073ffffffffffffffffffffffffffffffffffffffff168686848181101515611ed257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611f1257600080fd5b83600d60008888868181101515611f2557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115611f9757fe5b02179055507f3f3816908a5fa8ed32f84d4db7048658b4bd1fa807f45a93ce4ba9ad599cd34b338787858181101515611fcc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600281111561205e57fe5b60ff168152602001935050505060405180910390a1816001019150611ea1565b6001925050509392505050565b635a96537081565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156120d757600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561213357600080fd5b6005548411151561214357600080fd5b6006549150836006819055507f0e0a217b45fa8e6dc38c0fda88bbbb9b96178275cacb888c6808412f591107dc3383600654604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561221357600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561226f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156122ab57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa51743acc566a17de801f1b15ea2b3b0ef044d425ccb02be8d95d44455436d203383600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1600192505050919050565b600b5481565b600c60149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156124b157600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561250d57600080fd5b600554612518612e75565b10151561252457600080fd5b60008411151561253357600080fd5b6007549150836007819055507fe8f5c522733efafaa9c4f460ea05ee7b1605a75153e07df85282591614d9f7393383600754604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b600d6020528060005260406000206000915054906101000a900460ff1681565b67016345785d8a000081565b678ac7230489e8000081565b635aa8c87081565b620dbba081565b60065481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156126d357600080fd5b6102c65a03f115156126e457600080fd5b50505060405180519050905090565b600a5481565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561273d57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561279957600080fd5b600654841015156127a957600080fd5b6127b1612e75565b841115156127be57600080fd5b6005549150836005819055507f2862939a113df50e6874fd0ebe19f330e3a50d2de096a9ac037b427bd17d3a433383600554604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b600080600080600080339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561289257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061293b5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561294657600080fd5b600554612951612e75565b10151561295d57600080fd5b60008911151561296c57600080fd5b60008811151561297b57600080fd5b612995600860ff16600a0a8a61343390919063ffffffff16565b94506129b1600860ff16600a0a8961343390919063ffffffff16565b93506129c6848661348190919063ffffffff16565b9250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612a8d57600080fd5b6102c65a03f11515612a9e57600080fd5b505050604051805190509150818311151515612ab957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e0f14c5f8b87878b6000604051602001526040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018260ff1660ff168152602001945050505050602060405180830381600087803b1515612b9c57600080fd5b6102c65a03f11515612bad57600080fd5b505050604051805190501515612bc257600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612cb157600080fd5b6102c65a03f11515612cc257600080fd5b505050604051805190501515612cd757600080fd5b612cec8360095461348190919063ffffffff16565b600981905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612db757600080fd5b6102c65a03f11515612dc857600080fd5b5050506040518051905091506000821415612de757612de561349f565b505b7ffdec941f50161ee3bd56739e1e7b2747b09b0e0936ea55d83e3e6f7b9a2a1fa58a8489604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018260ff1660ff168152602001935050505060405180910390a15050505050949350505050565b6012600a0a81565b600042905090565b60055481565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612f2f5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b905080915050919050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ff457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561303057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561315e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156131ba57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156131f657600080fd5b60008460ff16148061320b575060018460ff16145b151561321657600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663797f202e86866000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff16815260200192505050602060405180830381600087803b15156132e957600080fd5b6102c65a03f115156132fa57600080fd5b50505060405180519050915060008211151561331557600080fd5b600954821115151561332657600080fd5b61333b8260095461341a90919063ffffffff16565b60098190555060019250505092915050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060028111156133ac57fe5b8160028111156133b857fe5b14156133c75760009150613414565b600160028111156133d457fe5b8160028111156133e057fe5b148061340157506002808111156133f357fe5b8160028111156133ff57fe5b145b1561340f5760019150613414565b600091505b50919050565b600082821115151561342857fe5b818303905092915050565b60008082840290506000841480613454575082848281151561345157fe5b04145b151561345c57fe5b8091505092915050565b600080828481151561347457fe5b0490508091505092915050565b600080828401905083811015151561349557fe5b8091505092915050565b600080600c60149054906101000a900460ff161515156134be57600080fd5b6001600c60146101000a81548160ff021916908315150217905550600860ff16600a0a631ad2748002600954101561363357613512600954600860ff16600a0a631ad274800261341a90919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15156135a457600080fd5b6102c65a03f115156135b557600080fd5b5050507f23ff0e75edf108e3d0392d92e13e8c8a868ef19001bd49f9e94876dc46dff87f33826135e3612e75565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b7f66b6851664a82efe6b871e434faba2b11421d2dad65eb71a344ae76cca8a2b863361365d612e75565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050905600a165627a7a723058208ea21b3f395e336b88d7d2aa561d5e9994ca2032511309440b06f6028e4f9a8500290000000000000000000000000d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4000000000000000000000000784b96cd15ffa57e91b495d5c5b4f2b195fe3b3b000000000000000000000000aec1e80c1b32d8129e34d8180204c9dbbc52df04
Deployed Bytecode
0x606060405260043610610246576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063026345b61461025157806303ed9d21146102a65780631a8fc985146102e1578063205b19461461030a5780632c1e816d1461035b5780632f54bf6e146103ac5780633290ce29146103fd57806336ac1dd01461041f5780634042b66f14610470578063473b0d4614610499578063498b7718146104d45780634bb278f3146104fd5780634d399cb31461052a578063521eb2731461058757806355a373d6146105dc5780635b7f415c146106315780635d0cb15d1461066057806363b2011714610689578063707789c5146106b257806374c06f5d1461070357806376c6dc1614610730578063781cd99d146107825780637df6a6c8146107ab578063848b86e3146107e65780638d3d6576146108375780638d4e4083146108605780638da5cb5b1461088d5780638ea64376146108e2578063904bd6d0146109375780639b19251a146109725780639d7233d4146109cd5780639f132677146109f6578063a07c765f14610a1f578063a5f75a5e14610a48578063a85adeab14610a71578063a96af0f414610a9a578063aaffadf314610ac3578063c44bef7514610aec578063c9f613d514610b27578063ce809e4e14610b96578063d18e81b314610bbf578063e6fd48bc14610be8578063ec57332014610c11578063ef326c6d14610c62578063f2fde38b14610cb3578063f856d60514610cec578063fc6f946814610d15578063fc914fdb14610d6a575b61024e610dc7565b50005b341561025c57600080fd5b610264611258565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102b157600080fd5b6102c7600480803590602001909190505061127e565b604051808215151515815260200191505060405180910390f35b34156102ec57600080fd5b6102f46113ba565b6040518082815260200191505060405180910390f35b341561031557600080fd5b610341600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113d4565b604051808215151515815260200191505060405180910390f35b341561036657600080fd5b610392600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113f4565b604051808215151515815260200191505060405180910390f35b34156103b757600080fd5b6103e3600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611512565b604051808215151515815260200191505060405180910390f35b610405610dc7565b604051808215151515815260200191505060405180910390f35b341561042a57600080fd5b610456600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611570565b604051808215151515815260200191505060405180910390f35b341561047b57600080fd5b61048361167e565b6040518082815260200191505060405180910390f35b34156104a457600080fd5b6104ba6004808035906020019091905050611684565b604051808215151515815260200191505060405180910390f35b34156104df57600080fd5b6104e76117c1565b6040518082815260200191505060405180910390f35b341561050857600080fd5b6105106117cc565b604051808215151515815260200191505060405180910390f35b341561053557600080fd5b61056d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091905050611878565b604051808215151515815260200191505060405180910390f35b341561059257600080fd5b61059a611b42565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105e757600080fd5b6105ef611b68565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561063c57600080fd5b610644611b8e565b604051808260ff1660ff16815260200191505060405180910390f35b341561066b57600080fd5b610673611b93565b6040518082815260200191505060405180910390f35b341561069457600080fd5b61069c611ba4565b6040518082815260200191505060405180910390f35b34156106bd57600080fd5b6106e9600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611baa565b604051808215151515815260200191505060405180910390f35b341561070e57600080fd5b610716611cc8565b604051808215151515815260200191505060405180910390f35b341561073b57600080fd5b6107686004808035906020019082018035906020019190919290803560ff16906020019091905050611d2a565b604051808215151515815260200191505060405180910390f35b341561078d57600080fd5b61079561208b565b6040518082815260200191505060405180910390f35b34156107b657600080fd5b6107cc6004808035906020019091905050612093565b604051808215151515815260200191505060405180910390f35b34156107f157600080fd5b61081d600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121cf565b604051808215151515815260200191505060405180910390f35b341561084257600080fd5b61084a612409565b6040518082815260200191505060405180910390f35b341561086b57600080fd5b61087361240f565b604051808215151515815260200191505060405180910390f35b341561089857600080fd5b6108a0612422565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108ed57600080fd5b6108f5612447565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561094257600080fd5b610958600480803590602001909190505061246d565b604051808215151515815260200191505060405180910390f35b341561097d57600080fd5b6109a9600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506125bf565b604051808260028111156109b957fe5b60ff16815260200191505060405180910390f35b34156109d857600080fd5b6109e06125df565b6040518082815260200191505060405180910390f35b3415610a0157600080fd5b610a096125eb565b6040518082815260200191505060405180910390f35b3415610a2a57600080fd5b610a326125f7565b6040518082815260200191505060405180910390f35b3415610a5357600080fd5b610a5b6125ff565b6040518082815260200191505060405180910390f35b3415610a7c57600080fd5b610a84612606565b6040518082815260200191505060405180910390f35b3415610aa557600080fd5b610aad61260c565b6040518082815260200191505060405180910390f35b3415610ace57600080fd5b610ad66126f3565b6040518082815260200191505060405180910390f35b3415610af757600080fd5b610b0d60048080359060200190919050506126f9565b604051808215151515815260200191505060405180910390f35b3415610b3257600080fd5b610b7c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803560ff1690602001909190505061284a565b604051808215151515815260200191505060405180910390f35b3415610ba157600080fd5b610ba9612e6d565b6040518082815260200191505060405180910390f35b3415610bca57600080fd5b610bd2612e75565b6040518082815260200191505060405180910390f35b3415610bf357600080fd5b610bfb612e7d565b6040518082815260200191505060405180910390f35b3415610c1c57600080fd5b610c48600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612e83565b604051808215151515815260200191505060405180910390f35b3415610c6d57600080fd5b610c99600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612f3a565b604051808215151515815260200191505060405180910390f35b3415610cbe57600080fd5b610cea600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612f99565b005b3415610cf757600080fd5b610cff6130ee565b6040518082815260200191505060405180910390f35b3415610d2057600080fd5b610d286130f4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610d7557600080fd5b610dad600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff1690602001909190505061311a565b604051808215151515815260200191505060405180910390f35b600080600080600080600080600080610dde612e75565b905080600554101515610df057600080fd5b60065481101515610e0057600080fd5b33985034975060001515600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515610e6557600080fd5b610e6e8961334d565b1515610e7957600080fd5b600a548810151515610e8a57600080fd5b600b548811151515610e9b57600080fd5b600860ff16600a0a631ad2748002600954101515610eb857600080fd5b610eda600954600860ff16600a0a631ad274800261341a90919063ffffffff16565b9650610ef8600860ff16600a0a60075461343390919063ffffffff16565b9550610f236012600a0a610f15888b61343390919063ffffffff16565b61346690919063ffffffff16565b94506000935084925084871015610f7857869250610f6086610f526012600a0a8661343390919063ffffffff16565b61346690919063ffffffff16565b9750610f75883461341a90919063ffffffff16565b93505b610f8d8360095461348190919063ffffffff16565b600981905550610fa86007548461346690919063ffffffff16565b9150610fbf8260085461348190919063ffffffff16565b600881905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561109257600080fd5b6102c65a03f115156110a357600080fd5b5050506040518051905015156110b857600080fd5b6000841115611102578873ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f19350505050151561110157600080fd5b5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc899081150290604051600060405180830381858888f19350505050151561116457600080fd5b6001600e60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2718984604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600860ff16600a0a631ad274800260095414156112485761124661349f565b505b6001995050505050505050505090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156112c257600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561131e57600080fd5b600a548411151561132e57600080fd5b600b54915083600b819055507f97e165b35cdd33d0612173780f6b087e9d1bf014f1c2569b91e5463f043714dc3383600b54604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b6113d16064620dbba061346690919063ffffffff16565b81565b600e6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561148d57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156114c857600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905080915050919050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061161c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061167357506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b905080915050919050565b60085481565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116c857600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561172457600080fd5b600b54841115151561173557600080fd5b600a54915083600a819055507f21c9aa51794e3f9069f3de59b27bb45fbff651793d53a4488f1b67f6695440863383600a54604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b600860ff16600a0a81565b600080339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561180e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561186a57600080fd5b61187261349f565b91505090565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156118bc57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806119655750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561197057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156119ac57600080fd5b600160028111156119b957fe5b8460028111156119c557fe5b14806119e657506002808111156119d857fe5b8460028111156119e457fe5b145b80611a075750600060028111156119f957fe5b846002811115611a0557fe5b145b1515611a1257600080fd5b611a1a611cc8565b151515611a2657600080fd5b83600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115611a8157fe5b02179055503391507f3f3816908a5fa8ed32f84d4db7048658b4bd1fa807f45a93ce4ba9ad599cd34b828686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001826002811115611b2157fe5b60ff168152602001935050505060405180910390a160019250505092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600881565b600860ff16600a0a631ad274800281565b60095481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c0757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c4357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c7e57600080fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600c60149054906101000a900460ff1615611ce85760019050611d27565b611cf0612e75565b6006541015611d025760019050611d27565b600860ff16600a0a631ad27480026009541415611d225760019050611d27565b600090505b90565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d6e57600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611e175750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1515611e2257600080fd5b60016002811115611e2f57fe5b846002811115611e3b57fe5b1480611e5c5750600280811115611e4e57fe5b846002811115611e5a57fe5b145b80611e7d575060006002811115611e6f57fe5b846002811115611e7b57fe5b145b1515611e8857600080fd5b611e90611cc8565b151515611e9c57600080fd5b600091505b8585905082101561207e57600073ffffffffffffffffffffffffffffffffffffffff168686848181101515611ed257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611f1257600080fd5b83600d60008888868181101515611f2557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690836002811115611f9757fe5b02179055507f3f3816908a5fa8ed32f84d4db7048658b4bd1fa807f45a93ce4ba9ad599cd34b338787858181101515611fcc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182600281111561205e57fe5b60ff168152602001935050505060405180910390a1816001019150611ea1565b6001925050509392505050565b635a96537081565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156120d757600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561213357600080fd5b6005548411151561214357600080fd5b6006549150836006819055507f0e0a217b45fa8e6dc38c0fda88bbbb9b96178275cacb888c6808412f591107dc3383600654604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561221357600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561226f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156122ab57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915083600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa51743acc566a17de801f1b15ea2b3b0ef044d425ccb02be8d95d44455436d203383600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390a1600192505050919050565b600b5481565b600c60149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156124b157600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561250d57600080fd5b600554612518612e75565b10151561252457600080fd5b60008411151561253357600080fd5b6007549150836007819055507fe8f5c522733efafaa9c4f460ea05ee7b1605a75153e07df85282591614d9f7393383600754604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b600d6020528060005260406000206000915054906101000a900460ff1681565b67016345785d8a000081565b678ac7230489e8000081565b635aa8c87081565b620dbba081565b60065481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156126d357600080fd5b6102c65a03f115156126e457600080fd5b50505060405180519050905090565b600a5481565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561273d57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561279957600080fd5b600654841015156127a957600080fd5b6127b1612e75565b841115156127be57600080fd5b6005549150836005819055507f2862939a113df50e6874fd0ebe19f330e3a50d2de096a9ac037b427bd17d3a433383600554604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1600192505050919050565b600080600080600080339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561289257600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061293b5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561294657600080fd5b600554612951612e75565b10151561295d57600080fd5b60008911151561296c57600080fd5b60008811151561297b57600080fd5b612995600860ff16600a0a8a61343390919063ffffffff16565b94506129b1600860ff16600a0a8961343390919063ffffffff16565b93506129c6848661348190919063ffffffff16565b9250600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612a8d57600080fd5b6102c65a03f11515612a9e57600080fd5b505050604051805190509150818311151515612ab957600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e0f14c5f8b87878b6000604051602001526040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018260ff1660ff168152602001945050505050602060405180830381600087803b1515612b9c57600080fd5b6102c65a03f11515612bad57600080fd5b505050604051805190501515612bc257600080fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515612cb157600080fd5b6102c65a03f11515612cc257600080fd5b505050604051805190501515612cd757600080fd5b612cec8360095461348190919063ffffffff16565b600981905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515612db757600080fd5b6102c65a03f11515612dc857600080fd5b5050506040518051905091506000821415612de757612de561349f565b505b7ffdec941f50161ee3bd56739e1e7b2747b09b0e0936ea55d83e3e6f7b9a2a1fa58a8489604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018260ff1660ff168152602001935050505060405180910390a15050505050949350505050565b6012600a0a81565b600042905090565b60055481565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612f2f5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b905080915050919050565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905080915050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ff457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561303057600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561315e57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156131ba57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156131f657600080fd5b60008460ff16148061320b575060018460ff16145b151561321657600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663797f202e86866000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018260ff1660ff16815260200192505050602060405180830381600087803b15156132e957600080fd5b6102c65a03f115156132fa57600080fd5b50505060405180519050915060008211151561331557600080fd5b600954821115151561332657600080fd5b61333b8260095461341a90919063ffffffff16565b60098190555060019250505092915050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060028111156133ac57fe5b8160028111156133b857fe5b14156133c75760009150613414565b600160028111156133d457fe5b8160028111156133e057fe5b148061340157506002808111156133f357fe5b8160028111156133ff57fe5b145b1561340f5760019150613414565b600091505b50919050565b600082821115151561342857fe5b818303905092915050565b60008082840290506000841480613454575082848281151561345157fe5b04145b151561345c57fe5b8091505092915050565b600080828481151561347457fe5b0490508091505092915050565b600080828401905083811015151561349557fe5b8091505092915050565b600080600c60149054906101000a900460ff161515156134be57600080fd5b6001600c60146101000a81548160ff021916908315150217905550600860ff16600a0a631ad2748002600954101561363357613512600954600860ff16600a0a631ad274800261341a90919063ffffffff16565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15156135a457600080fd5b6102c65a03f115156135b557600080fd5b5050507f23ff0e75edf108e3d0392d92e13e8c8a868ef19001bd49f9e94876dc46dff87f33826135e3612e75565b604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b7f66b6851664a82efe6b871e434faba2b11421d2dad65eb71a344ae76cca8a2b863361365d612e75565b604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050905600a165627a7a723058208ea21b3f395e336b88d7d2aa561d5e9994ca2032511309440b06f6028e4f9a850029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4000000000000000000000000784b96cd15ffa57e91b495d5c5b4f2b195fe3b3b000000000000000000000000aec1e80c1b32d8129e34d8180204c9dbbc52df04
-----Decoded View---------------
Arg [0] : _tokenContract (address): 0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4
Arg [1] : _ledgerContract (address): 0x784B96cd15ffA57E91b495D5C5b4F2B195Fe3B3B
Arg [2] : _wallet (address): 0xaeC1E80c1b32d8129e34D8180204c9DbBc52Df04
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4
Arg [1] : 000000000000000000000000784b96cd15ffa57e91b495d5c5b4f2b195fe3b3b
Arg [2] : 000000000000000000000000aec1e80c1b32d8129e34d8180204c9dbbc52df04
Swarm Source
bzzr://8ea21b3f395e336b88d7d2aa561d5e9994ca2032511309440b06f6028e4f9a85
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.