More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,703 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 5603433 | 2374 days ago | IN | 0.522 ETH | 0.00005464 | ||||
Transfer | 5538300 | 2385 days ago | IN | 0.105 ETH | 0.00021857 | ||||
Transfer | 5538300 | 2385 days ago | IN | 0.11 ETH | 0.00016393 | ||||
Transfer | 5538300 | 2385 days ago | IN | 0.11 ETH | 0.00008196 | ||||
Transfer | 5538300 | 2385 days ago | IN | 0.11 ETH | 0.00008196 | ||||
Transfer | 5538300 | 2385 days ago | IN | 0.11 ETH | 0.00010928 | ||||
Transfer | 5538300 | 2385 days ago | IN | 0.11 ETH | 0.00021857 | ||||
Transfer | 5538299 | 2385 days ago | IN | 0.11 ETH | 0.00010928 | ||||
Transfer | 5538297 | 2385 days ago | IN | 0.11 ETH | 0.00010928 | ||||
Transfer | 5538296 | 2385 days ago | IN | 0.11 ETH | 0.00002732 | ||||
Transfer | 5535171 | 2386 days ago | IN | 0.11051014 ETH | 0.00005464 | ||||
Finalize | 5532604 | 2386 days ago | IN | 0 ETH | 0.00047086 | ||||
End Sale | 5532583 | 2386 days ago | IN | 0 ETH | 0.00063355 | ||||
Transfer | 5532530 | 2386 days ago | IN | 0.8 ETH | 0.00049362 | ||||
Transfer | 5532466 | 2386 days ago | IN | 25 ETH | 0.00189856 | ||||
Transfer | 5532447 | 2386 days ago | IN | 0.235 ETH | 0.00327704 | ||||
Transfer | 5532439 | 2386 days ago | IN | 0.59 ETH | 0.00085435 | ||||
Transfer | 5532433 | 2386 days ago | IN | 0.3 ETH | 0.00389204 | ||||
Transfer | 5532421 | 2386 days ago | IN | 0.1 ETH | 0.00028478 | ||||
Transfer | 5532403 | 2386 days ago | IN | 0.9 ETH | 0.00056956 | ||||
Transfer | 5532397 | 2386 days ago | IN | 1.98 ETH | 0.00159856 | ||||
Transfer | 5532381 | 2386 days ago | IN | 2 ETH | 0.00075942 | ||||
Transfer | 5532367 | 2386 days ago | IN | 0.2 ETH | 0.00056956 | ||||
Transfer | 5532361 | 2386 days ago | IN | 7 ETH | 0.00198315 | ||||
Transfer | 5532350 | 2386 days ago | IN | 0.25 ETH | 0.00029631 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5532530 | 2386 days ago | 0.8 ETH | ||||
5532466 | 2386 days ago | 25 ETH | ||||
5532447 | 2386 days ago | 0.235 ETH | ||||
5532439 | 2386 days ago | 0.59 ETH | ||||
5532433 | 2386 days ago | 0.3 ETH | ||||
5532421 | 2386 days ago | 0.1 ETH | ||||
5532403 | 2386 days ago | 0.9 ETH | ||||
5532397 | 2386 days ago | 1.98 ETH | ||||
5532381 | 2386 days ago | 2 ETH | ||||
5532367 | 2386 days ago | 0.2 ETH | ||||
5532361 | 2386 days ago | 7 ETH | ||||
5532339 | 2386 days ago | 0.16 ETH | ||||
5532336 | 2386 days ago | 0.14532349 ETH | ||||
5532335 | 2386 days ago | 0.75 ETH | ||||
5532333 | 2386 days ago | 0.6 ETH | ||||
5532330 | 2386 days ago | 0.06022418 ETH | ||||
5532328 | 2386 days ago | 0.1 ETH | ||||
5532318 | 2386 days ago | 9.99 ETH | ||||
5532312 | 2386 days ago | 0.1 ETH | ||||
5532284 | 2386 days ago | 0.99 ETH | ||||
5532282 | 2386 days ago | 2.083 ETH | ||||
5532264 | 2386 days ago | 100 ETH | ||||
5532204 | 2386 days ago | 10 ETH | ||||
5532176 | 2386 days ago | 28.95 ETH | ||||
5532159 | 2386 days ago | 1.5 ETH |
Loading...
Loading
Contract Name:
SignalsCrowdsale
Compiler Version
v0.4.20+commit.3155dd80
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-03-12 */ pragma solidity ^0.4.20; /** * @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 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 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) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, 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) returns (bool) { 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) constant returns (uint256 balance) { return balances[_owner]; } } /** * @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)) internal 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)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].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) public 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) public 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 Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } /** * @title Pausable token * * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner public returns (bool) { mintingFinished = true; MintFinished(); return true; } } /* * Company reserve pool where the tokens will be locked for two years * @title Company token reserve */ contract AdviserTimeLock is Ownable{ SignalsToken token; uint256 withdrawn; uint start; event TokensWithdrawn(address owner, uint amount); /* * Constructor changing owner to owner multisig & setting time lock * @param address of the Signals Token contract * @param address of the owner multisig */ function AdviserTimeLock(address _token, address _owner) public{ token = SignalsToken(_token); owner = _owner; start = now; } /* * Only function for periodical tokens withdrawal (with monthly allowance) * @dev Will withdraw the whole allowance; */ function withdraw() onlyOwner public { require(now - start >= 25920000); uint toWithdraw = canWithdraw(); token.transfer(owner, toWithdraw); withdrawn += toWithdraw; TokensWithdrawn(owner, toWithdraw); } /* * Only function for the tokens withdrawal (with two years time lock) * @dev Based on division down rounding */ function canWithdraw() public view returns (uint256) { uint256 sinceStart = now - start; uint256 allowed = (sinceStart/2592000)*504546000000000; uint256 toWithdraw; if (allowed > token.balanceOf(address(this))) { toWithdraw = token.balanceOf(address(this)); } else { toWithdraw = allowed - withdrawn; } return toWithdraw; } /* * Function to clean up the state and moved not allocated tokens to custody */ function cleanUp() onlyOwner public { require(token.balanceOf(address(this)) == 0); selfdestruct(owner); } } /* * Pre-allocation pool for company advisers * @title Advisory pool */ contract AdvisoryPool is Ownable{ SignalsToken token; /* * @dev constant addresses of all advisers */ address constant ADVISER1 = 0x7915D5A865FE68C63112be5aD3DCA5187EB08f24; address constant ADVISER2 = 0x31cFF39AA68B91fa7C957272A6aA8fB8F7b69Cb0; address constant ADVISER3 = 0x358b3aeec9fae5ab15fe28d2fe6c7c9fda596857; address constant ADVISER4 = 0x1011FC646261eb5d4aB875886f1470d4919d83c8; address constant ADVISER5 = 0xcc04Cd98da89A9172372aEf4B62BEDecd01A7F5a; address constant ADVISER6 = 0xECD791f8E548D46A9711D853Ead7edC685Ca4ee8; address constant ADVISER7 = 0x38B58e5783fd4D077e422B3362E9d6B265484e3f; address constant ADVISER8 = 0x2934205135A129F995AC891C143cCae83ce175c7; address constant ADVISER9 = 0x9F5D00F4A383bAd14DEfA9aee53C5AF2ad9ad32F; address constant ADVISER10 = 0xBE993c982Fc5a0C0360CEbcEf9e4d2727339d96B; address constant ADVISER11 = 0xdf1E2126eB638335eFAb91a834db4c57Cbe18735; address constant ADVISER12 = 0x8A404969Ad1BCD3F566A7796722f535eD9cA22b2; address constant ADVISER13 = 0x066a8aD6fA94AC83e1AFB5Aa7Dc62eD1D2654bB2; address constant ADVISER14 = 0xA1425Fa987d1b724306d93084b93D62F37482c4b; address constant ADVISER15 = 0x4633515904eE5Bc18bEB70277455525e84a51e90; address constant ADVISER16 = 0x230783Afd438313033b07D39E3B9bBDBC7817759; address constant ADVISER17 = 0xe8b9b07c1cca9aE9739Cec3D53004523Ab206CAc; address constant ADVISER18 = 0x0E73f16CfE7F545C0e4bB63A9Eef18De8d7B422d; address constant ADVISER19 = 0x6B4c6B603ca72FE7dde971CF833a58415737826D; address constant ADVISER20 = 0x823D3123254a3F9f9d3759FE3Fd7d15e21a3C5d8; address constant ADVISER21 = 0x0E48bbc496Ae61bb790Fc400D1F1a57520f772Df; address constant ADVISER22 = 0x06Ee8eCc0145CcaCEc829490e3c557f577BE0e85; address constant ADVISER23 = 0xbE56bFF75A1cB085674Cc37a5C8746fF6C43C442; address constant ADVISER24 = 0xb442b5297E4aEf19E489530E69dFef7fae27F4A5; address constant ADVISER25 = 0x50EF1d6a7435C7FB3dB7c204b74EB719b1EE3dab; address constant ADVISER26 = 0x3e9fed606822D5071f8a28d2c8B51E6964160CB2; AdviserTimeLock public tokenLocker23; /* * Constructor changing owner to owner multisig & calling the allocation * @param address of the Signals Token contract * @param address of the owner multisig */ function AdvisoryPool(address _token, address _owner) public { owner = _owner; token = SignalsToken(_token); } /* * Allocation function, tokens get allocated from this contract as current token owner * @dev only accessible from the constructor */ function initiate() public onlyOwner { require(token.balanceOf(address(this)) == 18500000000000000); tokenLocker23 = new AdviserTimeLock(address(token), ADVISER23); token.transfer(ADVISER1, 380952380000000); token.transfer(ADVISER2, 380952380000000); token.transfer(ADVISER3, 659200000000000); token.transfer(ADVISER4, 95238100000000); token.transfer(ADVISER5, 1850000000000000); token.transfer(ADVISER6, 15384620000000); token.transfer(ADVISER7, 62366450000000); token.transfer(ADVISER8, 116805560000000); token.transfer(ADVISER9, 153846150000000); token.transfer(ADVISER10, 10683760000000); token.transfer(ADVISER11, 114285710000000); token.transfer(ADVISER12, 576923080000000); token.transfer(ADVISER13, 76190480000000); token.transfer(ADVISER14, 133547010000000); token.transfer(ADVISER15, 96153850000000); token.transfer(ADVISER16, 462500000000000); token.transfer(ADVISER17, 462500000000000); token.transfer(ADVISER18, 399865380000000); token.transfer(ADVISER19, 20032050000000); token.transfer(ADVISER20, 35559130000000); token.transfer(ADVISER21, 113134000000000); token.transfer(ADVISER22, 113134000000000); token.transfer(address(tokenLocker23), 5550000000000000); token.transfer(ADVISER23, 1850000000000000); token.transfer(ADVISER24, 100000000000000); token.transfer(ADVISER25, 100000000000000); token.transfer(ADVISER26, 2747253000000000); } /* * Clean up function for token loss prevention and cleaning up Ethereum blockchain * @dev call to clean up the contract */ function cleanUp() onlyOwner public { uint256 notAllocated = token.balanceOf(address(this)); token.transfer(owner, notAllocated); selfdestruct(owner); } } /* * Pre-allocation pool for the community, will be govern by a company multisig * @title Community pool */ contract CommunityPool is Ownable{ SignalsToken token; event CommunityTokensAllocated(address indexed member, uint amount); /* * Constructor changing owner to owner multisig * @param address of the Signals Token contract * @param address of the owner multisig */ function CommunityPool(address _token, address _owner) public{ token = SignalsToken(_token); owner = _owner; } /* * Function to alloc tokens to a community member * @param address of community member * @param uint amount units of tokens to be given away */ function allocToMember(address member, uint amount) public onlyOwner { require(amount > 0); token.transfer(member, amount); CommunityTokensAllocated(member, amount); } /* * Clean up function * @dev call to clean up the contract after all tokens were assigned */ function clean() public onlyOwner { require(token.balanceOf(address(this)) == 0); selfdestruct(owner); } } /* * Company reserve pool where the tokens will be locked for two years * @title Company token reserve */ contract CompanyReserve is Ownable{ SignalsToken token; uint256 withdrawn; uint start; /* * Constructor changing owner to owner multisig & setting time lock * @param address of the Signals Token contract * @param address of the owner multisig */ function CompanyReserve(address _token, address _owner) public { token = SignalsToken(_token); owner = _owner; start = now; } event TokensWithdrawn(address owner, uint amount); /* * Only function for the tokens withdrawal (3% anytime, 5% after one year, 10% after two year) * @dev Will withdraw the whole allowance; */ function withdraw() onlyOwner public { require(now - start >= 25920000); uint256 toWithdraw = canWithdraw(); withdrawn += toWithdraw; token.transfer(owner, toWithdraw); TokensWithdrawn(owner, toWithdraw); } /* * Checker function to find out how many tokens can be withdrawn. * note: percentage of the token.totalSupply * @dev Based on division down rounding */ function canWithdraw() public view returns (uint256) { uint256 sinceStart = now - start; uint256 allowed; if (sinceStart >= 0) { allowed = 555000000000000; } else if (sinceStart >= 31536000) { // one year difference allowed = 1480000000000000; } else if (sinceStart >= 63072000) { // two years difference allowed = 3330000000000000; } else { return 0; } return allowed - withdrawn; } /* * Function to clean up the state and moved not allocated tokens to custody */ function cleanUp() onlyOwner public { require(token.balanceOf(address(this)) == 0); selfdestruct(owner); } } /** * @title Signals token * @dev Mintable token created for Signals.Network */ contract PresaleToken is PausableToken, MintableToken { // Standard token variables string constant public name = "SGNPresaleToken"; string constant public symbol = "SGN"; uint8 constant public decimals = 9; event TokensBurned(address initiatior, address indexed _partner, uint256 _tokens); /* * Constructor which pauses the token at the time of creation */ function PresaleToken() public { pause(); } /* * @dev Token burn function to be called at the time of token swap * @param _partner address to use for token balance buring * @param _tokens uint256 amount of tokens to burn */ function burnTokens(address _partner, uint256 _tokens) public onlyOwner { require(balances[_partner] >= _tokens); balances[_partner] -= _tokens; totalSupply -= _tokens; TokensBurned(msg.sender, _partner, _tokens); } } /** * @title Signals token * @dev Mintable token created for Signals.Network */ contract SignalsToken is PausableToken, MintableToken { // Standard token variables string constant public name = "Signals Network Token"; string constant public symbol = "SGN"; uint8 constant public decimals = 9; } contract PrivateRegister is Ownable { struct contribution { bool approved; uint8 extra; } mapping (address => contribution) verified; event ApprovedInvestor(address indexed investor); event BonusesRegistered(address indexed investor, uint8 extra); /* * Approve function to adjust allowance to investment of each individual investor * @param _investor address sets the beneficiary for later use * @param _referral address to pay a commission in token to * @param _commission uint8 expressed as a number between 0 and 5 */ function approve(address _investor, uint8 _extra) onlyOwner public{ require(!isContract(_investor)); verified[_investor].approved = true; if (_extra <= 100) { verified[_investor].extra = _extra; BonusesRegistered(_investor, _extra); } ApprovedInvestor(_investor); } /* * Constant call to find out if an investor is registered * @param _investor address to be checked * @return bool is true is _investor was approved */ function approved(address _investor) view public returns (bool) { return verified[_investor].approved; } /* * Constant call to find out the referral and commission to bound to an investor * @param _investor address to be checked * @return address of the referral, returns 0x0 if there is none * @return uint8 commission to be paid out on any investment */ function getBonuses(address _investor) view public returns (uint8 extra) { return verified[_investor].extra; } /* * Check if address is a contract to prevent contracts from participating the direct sale. * @param addr address to be checked * @return boolean of it is or isn't an contract address * @credits Manuel Aráoz */ function isContract(address addr) public view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } } contract CrowdsaleRegister is Ownable { struct contribution { bool approved; uint8 commission; uint8 extra; } mapping (address => contribution) verified; event ApprovedInvestor(address indexed investor); event BonusesRegistered(address indexed investor, uint8 commission, uint8 extra); /* * Approve function to adjust allowance to investment of each individual investor * @param _investor address sets the beneficiary for later use * @param _referral address to pay a commission in token to * @param _commission uint8 expressed as a number between 0 and 5 */ function approve(address _investor, uint8 _commission, uint8 _extra) onlyOwner public{ require(!isContract(_investor)); verified[_investor].approved = true; if (_commission <= 15 && _extra <= 5) { verified[_investor].commission = _commission; verified[_investor].extra = _extra; BonusesRegistered(_investor, _commission, _extra); } ApprovedInvestor(_investor); } /* * Constant call to find out if an investor is registered * @param _investor address to be checked * @return bool is true is _investor was approved */ function approved(address _investor) view public returns (bool) { return verified[_investor].approved; } /* * Constant call to find out the referral and commission to bound to an investor * @param _investor address to be checked * @return address of the referral, returns 0x0 if there is none * @return uint8 commission to be paid out on any investment */ function getBonuses(address _investor) view public returns (uint8 commission, uint8 extra) { return (verified[_investor].commission, verified[_investor].extra); } /* * Check if address is a contract to prevent contracts from participating the direct sale. * @param addr address to be checked * @return boolean of it is or isn't an contract address * @credits Manuel Aráoz */ function isContract(address addr) public view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } } /* * Token pool for the presale tokens swap * @title PresalePool * @dev Requires to transfer ownership of both PresaleToken contracts to this contract */ contract PresalePool is Ownable { PresaleToken public PublicPresale; PresaleToken public PartnerPresale; SignalsToken token; CrowdsaleRegister registry; /* * Compensation coefficient based on the difference between the max ETHUSD price during the presale * and price fix for mainsale */ uint256 compensation1; uint256 compensation2; // Date after which all tokens left will be transfered to the company reserve uint256 deadLine; event SupporterResolved(address indexed supporter, uint256 burned, uint256 created); event PartnerResolved(address indexed partner, uint256 burned, uint256 created); /* * Constructor changing owner to owner multisig, setting all the contract addresses & compensation rates * @param address of the Signals Token contract * @param address of the KYC registry * @param address of the owner multisig * @param uint rate of the compensation for early investors * @param uint rate of the compensation for partners */ function PresalePool(address _token, address _registry, address _owner, uint comp1, uint comp2) public { owner = _owner; PublicPresale = PresaleToken(0x15fEcCA27add3D28C55ff5b01644ae46edF15821); PartnerPresale = PresaleToken(0xa70435D1a3AD4149B0C13371E537a22002Ae530d); token = SignalsToken(_token); registry = CrowdsaleRegister(_registry); compensation1 = comp1; compensation2 = comp2; deadLine = now + 30 days; } /* * Fallback function for simple contract usage, only calls the swap() * @dev left for simpler interaction */ function() public { swap(); } /* * Function swapping the presale tokens for the Signal tokens regardless on the presale pool * @dev requires having ownership of the two presale contracts * @dev requires the calling party to finish the KYC process fully */ function swap() public { require(registry.approved(msg.sender)); uint256 oldBalance; uint256 newBalance; if (PublicPresale.balanceOf(msg.sender) > 0) { oldBalance = PublicPresale.balanceOf(msg.sender); newBalance = oldBalance * compensation1 / 100; PublicPresale.burnTokens(msg.sender, oldBalance); token.transfer(msg.sender, newBalance); SupporterResolved(msg.sender, oldBalance, newBalance); } if (PartnerPresale.balanceOf(msg.sender) > 0) { oldBalance = PartnerPresale.balanceOf(msg.sender); newBalance = oldBalance * compensation2 / 100; PartnerPresale.burnTokens(msg.sender, oldBalance); token.transfer(msg.sender, newBalance); PartnerResolved(msg.sender, oldBalance, newBalance); } } /* * Function swapping the presale tokens for the Signal tokens regardless on the presale pool * @dev initiated from Signals (passing the ownership to a oracle to handle a script is recommended) * @dev requires having ownership of the two presale contracts * @dev requires the calling party to finish the KYC process fully */ function swapFor(address whom) onlyOwner public returns(bool) { require(registry.approved(whom)); uint256 oldBalance; uint256 newBalance; if (PublicPresale.balanceOf(whom) > 0) { oldBalance = PublicPresale.balanceOf(whom); newBalance = oldBalance * compensation1 / 100; PublicPresale.burnTokens(whom, oldBalance); token.transfer(whom, newBalance); SupporterResolved(whom, oldBalance, newBalance); } if (PartnerPresale.balanceOf(whom) > 0) { oldBalance = PartnerPresale.balanceOf(whom); newBalance = oldBalance * compensation2 / 100; PartnerPresale.burnTokens(whom, oldBalance); token.transfer(whom, newBalance); SupporterResolved(whom, oldBalance, newBalance); } return true; } /* * Function to clean up the state and moved not allocated tokens to custody */ function clean() onlyOwner public { require(now >= deadLine); uint256 notAllocated = token.balanceOf(address(this)); token.transfer(owner, notAllocated); selfdestruct(owner); } } /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale. * Crowdsales have a start and end timestamps, where investors can make * token purchases and the crowdsale will assign them tokens based * on a token per ETH rate. Funds collected are forwarded to a wallet * as they arrive. */ contract Crowdsale { using SafeMath for uint256; // The token being sold SignalsToken public token; // address where funds are collected address public wallet; // amount of raised money in wei uint256 public weiRaised; // start/end related uint256 public startTime; bool public hasEnded; /** * event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function Crowdsale(address _token, address _wallet) public { require(_wallet != 0x0); token = SignalsToken(_token); wallet = _wallet; } // fallback function can be used to buy tokens function () public payable { buyTokens(msg.sender); } // low level token purchase function function buyTokens(address beneficiary) private {} // send ether to the fund collection wallet // override to create custom fund forwarding mechanisms function forwardFunds() internal { wallet.transfer(msg.value); } // @return true if the transaction can buy tokens function validPurchase() internal constant returns (bool) {} } /** * @title FinalizableCrowdsale * @dev Extension of Crowdsale where an owner can do extra work * after finishing. */ contract FinalizableCrowdsale is Crowdsale, Ownable { using SafeMath for uint256; bool public isFinalized = false; event Finalized(); /** * @dev Must be called after crowdsale ends, to do some extra finalization * work. Calls the contract's finalization function. */ function finalize() onlyOwner public { require(!isFinalized); require(hasEnded); finalization(); Finalized(); isFinalized = true; } /** * @dev Can be overridden to add finalization logic. The overriding function * should call super.finalization() to ensure the chain of finalization is * executed entirely. */ function finalization() internal { } } contract SignalsCrowdsale is FinalizableCrowdsale { // Cap & price related values uint256 public constant HARD_CAP = 18000*(10**18); uint256 public toBeRaised = 18000*(10**18); uint256 public constant PRICE = 360000; uint256 public tokensSold; uint256 public constant maxTokens = 185000000*(10**9); // Allocation constants uint constant ADVISORY_SHARE = 18500000*(10**9); //FIXED uint constant BOUNTY_SHARE = 3700000*(10**9); // FIXED uint constant COMMUNITY_SHARE = 37000000*(10**9); //FIXED uint constant COMPANY_SHARE = 33300000*(10**9); //FIXED uint constant PRESALE_SHARE = 7856217611546440; // FIXED; // Address pointers address constant ADVISORS = 0x98280b2FD517a57a0B8B01b674457Eb7C6efa842; // TODO: change address constant BOUNTY = 0x8726D7ac344A0BaBFd16394504e1cb978c70479A; // TODO: change address constant COMMUNITY = 0x90CDbC88aB47c432Bd47185b9B0FDA1600c22102; // TODO: change address constant COMPANY = 0xC010b2f2364372205055a299B28ef934f090FE92; // TODO: change address constant PRESALE = 0x7F3a38fa282B16973feDD1E227210Ec020F2481e; // TODO: change CrowdsaleRegister register; PrivateRegister register2; // Start & End related vars bool public ready; // Events event SaleWillStart(uint256 time); event SaleReady(); event SaleEnds(uint256 tokensLeft); function SignalsCrowdsale(address _token, address _wallet, address _register, address _register2) public FinalizableCrowdsale() Crowdsale(_token, _wallet) { register = CrowdsaleRegister(_register); register2 = PrivateRegister(_register2); } // @return true if the transaction can buy tokens function validPurchase() internal constant returns (bool) { bool started = (startTime <= now); bool nonZeroPurchase = msg.value != 0; bool capNotReached = (weiRaised < HARD_CAP); bool approved = register.approved(msg.sender); bool approved2 = register2.approved(msg.sender); return ready && started && !hasEnded && nonZeroPurchase && capNotReached && (approved || approved2); } /* * Buy in function to be called from the fallback function * @param beneficiary address */ function buyTokens(address beneficiary) private { require(beneficiary != 0x0); require(validPurchase()); uint256 weiAmount = msg.value; // base discount uint256 discount = ((toBeRaised*10000)/HARD_CAP)*15; // calculate token amount to be created uint256 tokens; // update state weiRaised = weiRaised.add(weiAmount); toBeRaised = toBeRaised.sub(weiAmount); uint commission; uint extra; uint premium; if (register.approved(beneficiary)) { (commission, extra) = register.getBonuses(beneficiary); // If extra access granted then give additional % if (extra > 0) { discount += extra*10000; } tokens = howMany(msg.value, discount); // If referral was involved, give some percent to the source if (commission > 0) { premium = tokens.mul(commission).div(100); token.mint(BOUNTY, premium); } } else { extra = register2.getBonuses(beneficiary); if (extra > 0) { discount = extra*10000; tokens = howMany(msg.value, discount); } } token.mint(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); tokensSold += tokens + premium; forwardFunds(); assert(token.totalSupply() <= maxTokens); } /* * Helper token emission functions * @param value uint256 of the wei amount that gets invested * @return uint256 of how many tokens can one get */ function howMany(uint256 value, uint256 discount) public view returns (uint256){ uint256 actualPrice = PRICE * (1000000 - discount) / 1000000; return value / actualPrice; } /* * Function to do preallocations - MANDATORY to continue * @dev It's separated so it doesn't have to run in constructor */ function initialize() public onlyOwner { require(!ready); // Pre-allocation to pools token.mint(ADVISORS,ADVISORY_SHARE); token.mint(BOUNTY,BOUNTY_SHARE); token.mint(COMMUNITY,COMMUNITY_SHARE); token.mint(COMPANY,COMPANY_SHARE); token.mint(PRESALE,PRESALE_SHARE); tokensSold = PRESALE_SHARE; ready = true; SaleReady(); } /* * Function to do set or adjust the startTime - NOT MANDATORY but good for future start */ function changeStart(uint256 _time) public onlyOwner { startTime = _time; SaleWillStart(_time); } /* * Function end or pause the sale * @dev It's MANDATORY to finalize() */ function endSale(bool end) public onlyOwner { require(startTime <= now); uint256 tokensLeft = maxTokens - token.totalSupply(); if (tokensLeft > 0) { token.mint(wallet, tokensLeft); } hasEnded = end; SaleEnds(tokensLeft); } /* * Adjust finalization to transfer token ownership to the fund holding address for further use */ function finalization() internal { token.finishMinting(); token.transferOwnership(wallet); } /* * Clean up function to get the contract selfdestructed - OPTIONAL */ function cleanUp() public onlyOwner { require(isFinalized); selfdestruct(owner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"toBeRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"HARD_CAP","outputs":[{"name":"","type":"uint256"}],"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":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ready","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"value","type":"uint256"},{"name":"discount","type":"uint256"}],"name":"howMany","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"startTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PRICE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_time","type":"uint256"}],"name":"changeStart","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"end","type":"bool"}],"name":"endSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","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":false,"inputs":[],"name":"cleanUp","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_wallet","type":"address"},{"name":"_register","type":"address"},{"name":"_register2","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"time","type":"uint256"}],"name":"SaleWillStart","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleReady","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokensLeft","type":"uint256"}],"name":"SaleEnds","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"}]
Contract Creation Code
60606040526000600460156101000a81548160ff0219169083151502179055506903cfc82e37e9a7400000600555341561003857600080fd5b604051608080611fbc83398101604052808051906020019091908051906020019091908051906020019091908051906020019091905050838360008173ffffffffffffffffffffffffffffffffffffffff161415151561009757600080fd5b816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505033600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050611dcc806101f06000396000f300606060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063110fd65f1461011d5780633a03171c146101465780634042b66f1461016f5780634bb278f314610198578063518ab2a8146101ad578063521eb273146101d65780636defbf801461022b5780636e9423901461025857806378e97925146102985780638129fc1c146102c15780638d4e4083146102d65780638d859f3e146103035780638da5cb5b1461032c578063d1d5190c14610381578063dc646367146103a4578063e8315742146103c9578063ecb70fb7146103f2578063f2fde38b1461041f578063f6c5c80d14610458578063fc0c546a1461046d575b61011b336104c2565b005b341561012857600080fd5b610130610bc4565b6040518082815260200191505060405180910390f35b341561015157600080fd5b610159610bca565b6040518082815260200191505060405180910390f35b341561017a57600080fd5b610182610bd8565b6040518082815260200191505060405180910390f35b34156101a357600080fd5b6101ab610bde565b005b34156101b857600080fd5b6101c0610cc2565b6040518082815260200191505060405180910390f35b34156101e157600080fd5b6101e9610cc8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023657600080fd5b61023e610cee565b604051808215151515815260200191505060405180910390f35b341561026357600080fd5b6102826004808035906020019091908035906020019091905050610d01565b6040518082815260200191505060405180910390f35b34156102a357600080fd5b6102ab610d34565b6040518082815260200191505060405180910390f35b34156102cc57600080fd5b6102d4610d3a565b005b34156102e157600080fd5b6102e9611318565b604051808215151515815260200191505060405180910390f35b341561030e57600080fd5b61031661132b565b6040518082815260200191505060405180910390f35b341561033757600080fd5b61033f611332565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038c57600080fd5b6103a26004808035906020019091905050611358565b005b34156103af57600080fd5b6103c7600480803515159060200190919050506113f5565b005b34156103d457600080fd5b6103dc611681565b6040518082815260200191505060405180910390f35b34156103fd57600080fd5b61040561168d565b604051808215151515815260200191505060405180910390f35b341561042a57600080fd5b610456600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116a0565b005b341561046357600080fd5b61046b6117f8565b005b341561047857600080fd5b6104806118aa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060008060008060008773ffffffffffffffffffffffffffffffffffffffff16141515156104f157600080fd5b6104f96118cf565b151561050457600080fd5b349550600f6903cfc82e37e9a74000006127106005540281151561052457fe5b0402945061053d86600254611b1b90919063ffffffff16565b60028190555061055886600554611b3990919063ffffffff16565b600581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8b964e6886000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561062357600080fd5b6102c65a03f1151561063457600080fd5b505050604051805190501561088e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e3047d9886000604051604001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b151561070757600080fd5b6102c65a03f1151561071857600080fd5b505050604051805190602001805190508160ff1691508060ff1690508093508194505050600082111561074f576127108202850194505b6107593486610d01565b935060008311156108895761078a606461077c8587611b5290919063ffffffff16565b611b8590919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19738726d7ac344a0babfd16394504e1cb978c70479a836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561086c57600080fd5b6102c65a03f1151561087d57600080fd5b50505060405180519050505b610991565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e3047d9886000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561095357600080fd5b6102c65a03f1151561096457600080fd5b5050506040518051905060ff1691506000821115610990576127108202945061098d3486610d01565b93505b5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988866000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610a5d57600080fd5b6102c65a03f11515610a6e57600080fd5b50505060405180519050508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188887604051808381526020018281526020019250505060405180910390a3808401600660008282540192505081905550610b00611ba0565b6702914085137280006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610b9657600080fd5b6102c65a03f11515610ba757600080fd5b5050506040518051905011151515610bbb57fe5b50505050505050565b60055481565b6903cfc82e37e9a740000081565b60025481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c3a57600080fd5b600460159054906101000a900460ff16151515610c5657600080fd5b600460009054906101000a900460ff161515610c7157600080fd5b610c79611c04565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a16001600460156101000a81548160ff021916908315150217905550565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860149054906101000a900460ff1681565b600080620f424083620f42400362057e4002811515610d1c57fe5b0490508084811515610d2a57fe5b0491505092915050565b60035481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d9657600080fd5b600860149054906101000a900460ff16151515610db257600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f197398280b2fd517a57a0b8b01b674457eb7c6efa8426641b9a6e85840006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610e9957600080fd5b6102c65a03f11515610eaa57600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19738726d7ac344a0babfd16394504e1cb978c70479a660d252161ab40006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610f9c57600080fd5b6102c65a03f11515610fad57600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f197390cdbc88ab47c432bd47185b9b0fda1600c221026683734dd0b080006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561109f57600080fd5b6102c65a03f115156110b057600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1973c010b2f2364372205055a299b28ef934f090fe9266764e2c6f0540006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156111a257600080fd5b6102c65a03f115156111b357600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19737f3a38fa282b16973fedd1e227210ec020f2481e661be9303403af486000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156112a557600080fd5b6102c65a03f115156112b657600080fd5b5050506040518051905050661be9303403af486006819055506001600860146101000a81548160ff0219169083151502179055507fb953f4139cc37f3ecfce61ef481bf89916b7b7e88f721471c1b5b3be396f01e260405160405180910390a1565b600460159054906101000a900460ff1681565b62057e4081565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113b457600080fd5b806003819055507fbd497855048a1edceda7bc0b52200b6b4fd5025fc634396bbc7ce4491408414e816040518082815260200191505060405180910390a150565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145357600080fd5b426003541115151561146457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156114f157600080fd5b6102c65a03f1151561150257600080fd5b50505060405180519050670291408513728000039050600081111561162c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561160f57600080fd5b6102c65a03f1151561162057600080fd5b50505060405180519050505b81600460006101000a81548160ff0219169083151502179055507fb5f94935825016cc4015d8809c4b6bd8b525088a6e57455a147803c9096db088816040518082815260200191505060405180910390a15050565b67029140851372800081565b600460009054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116fc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561173857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561185457600080fd5b600460159054906101000a900460ff16151561186f57600080fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000804260035411159450600034141593506903cfc82e37e9a7400000600254109250600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8b964e6336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156119bd57600080fd5b6102c65a03f115156119ce57600080fd5b505050604051805190509150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8b964e6336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611a9f57600080fd5b6102c65a03f11515611ab057600080fd5b505050604051805190509050600860149054906101000a900460ff168015611ad55750845b8015611aee5750600460009054906101000a900460ff16155b8015611af75750835b8015611b005750825b8015611b1157508180611b105750805b5b9550505050505090565b6000808284019050838110151515611b2f57fe5b8091505092915050565b6000828211151515611b4757fe5b818303905092915050565b60008082840290506000841480611b735750828482811515611b7057fe5b04145b1515611b7b57fe5b8091505092915050565b6000808284811515611b9357fe5b0490508091505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515611c0257600080fd5b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611c9157600080fd5b6102c65a03f11515611ca257600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515611d8a57600080fd5b6102c65a03f11515611d9b57600080fd5b5050505600a165627a7a7230582046571b5c195fa800f1305a3c4fa80bd18c4321653933e44d077970efcbddf40a0029000000000000000000000000b2135ab9695a7678dd590b1a996cb0f37bcb0718000000000000000000000000233e11479f9d36f5cc632a78884189e1b9502128000000000000000000000000d5d7d89a913f0aeb3b9a4a685a7c846e8220fc0700000000000000000000000096d0040b4f84224c1dc7faf1d99eab3f91c52e4d
Deployed Bytecode
0x606060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063110fd65f1461011d5780633a03171c146101465780634042b66f1461016f5780634bb278f314610198578063518ab2a8146101ad578063521eb273146101d65780636defbf801461022b5780636e9423901461025857806378e97925146102985780638129fc1c146102c15780638d4e4083146102d65780638d859f3e146103035780638da5cb5b1461032c578063d1d5190c14610381578063dc646367146103a4578063e8315742146103c9578063ecb70fb7146103f2578063f2fde38b1461041f578063f6c5c80d14610458578063fc0c546a1461046d575b61011b336104c2565b005b341561012857600080fd5b610130610bc4565b6040518082815260200191505060405180910390f35b341561015157600080fd5b610159610bca565b6040518082815260200191505060405180910390f35b341561017a57600080fd5b610182610bd8565b6040518082815260200191505060405180910390f35b34156101a357600080fd5b6101ab610bde565b005b34156101b857600080fd5b6101c0610cc2565b6040518082815260200191505060405180910390f35b34156101e157600080fd5b6101e9610cc8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561023657600080fd5b61023e610cee565b604051808215151515815260200191505060405180910390f35b341561026357600080fd5b6102826004808035906020019091908035906020019091905050610d01565b6040518082815260200191505060405180910390f35b34156102a357600080fd5b6102ab610d34565b6040518082815260200191505060405180910390f35b34156102cc57600080fd5b6102d4610d3a565b005b34156102e157600080fd5b6102e9611318565b604051808215151515815260200191505060405180910390f35b341561030e57600080fd5b61031661132b565b6040518082815260200191505060405180910390f35b341561033757600080fd5b61033f611332565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561038c57600080fd5b6103a26004808035906020019091905050611358565b005b34156103af57600080fd5b6103c7600480803515159060200190919050506113f5565b005b34156103d457600080fd5b6103dc611681565b6040518082815260200191505060405180910390f35b34156103fd57600080fd5b61040561168d565b604051808215151515815260200191505060405180910390f35b341561042a57600080fd5b610456600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506116a0565b005b341561046357600080fd5b61046b6117f8565b005b341561047857600080fd5b6104806118aa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008060008060008060008773ffffffffffffffffffffffffffffffffffffffff16141515156104f157600080fd5b6104f96118cf565b151561050457600080fd5b349550600f6903cfc82e37e9a74000006127106005540281151561052457fe5b0402945061053d86600254611b1b90919063ffffffff16565b60028190555061055886600554611b3990919063ffffffff16565b600581905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8b964e6886000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561062357600080fd5b6102c65a03f1151561063457600080fd5b505050604051805190501561088e57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e3047d9886000604051604001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019150506040805180830381600087803b151561070757600080fd5b6102c65a03f1151561071857600080fd5b505050604051805190602001805190508160ff1691508060ff1690508093508194505050600082111561074f576127108202850194505b6107593486610d01565b935060008311156108895761078a606461077c8587611b5290919063ffffffff16565b611b8590919063ffffffff16565b90506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19738726d7ac344a0babfd16394504e1cb978c70479a836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561086c57600080fd5b6102c65a03f1151561087d57600080fd5b50505060405180519050505b610991565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638e3047d9886000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561095357600080fd5b6102c65a03f1151561096457600080fd5b5050506040518051905060ff1691506000821115610990576127108202945061098d3486610d01565b93505b5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1988866000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610a5d57600080fd5b6102c65a03f11515610a6e57600080fd5b50505060405180519050508673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188887604051808381526020018281526020019250505060405180910390a3808401600660008282540192505081905550610b00611ba0565b6702914085137280006000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515610b9657600080fd5b6102c65a03f11515610ba757600080fd5b5050506040518051905011151515610bbb57fe5b50505050505050565b60055481565b6903cfc82e37e9a740000081565b60025481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c3a57600080fd5b600460159054906101000a900460ff16151515610c5657600080fd5b600460009054906101000a900460ff161515610c7157600080fd5b610c79611c04565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a16001600460156101000a81548160ff021916908315150217905550565b60065481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860149054906101000a900460ff1681565b600080620f424083620f42400362057e4002811515610d1c57fe5b0490508084811515610d2a57fe5b0491505092915050565b60035481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d9657600080fd5b600860149054906101000a900460ff16151515610db257600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f197398280b2fd517a57a0b8b01b674457eb7c6efa8426641b9a6e85840006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610e9957600080fd5b6102c65a03f11515610eaa57600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19738726d7ac344a0babfd16394504e1cb978c70479a660d252161ab40006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610f9c57600080fd5b6102c65a03f11515610fad57600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f197390cdbc88ab47c432bd47185b9b0fda1600c221026683734dd0b080006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561109f57600080fd5b6102c65a03f115156110b057600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1973c010b2f2364372205055a299b28ef934f090fe9266764e2c6f0540006000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156111a257600080fd5b6102c65a03f115156111b357600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19737f3a38fa282b16973fedd1e227210ec020f2481e661be9303403af486000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156112a557600080fd5b6102c65a03f115156112b657600080fd5b5050506040518051905050661be9303403af486006819055506001600860146101000a81548160ff0219169083151502179055507fb953f4139cc37f3ecfce61ef481bf89916b7b7e88f721471c1b5b3be396f01e260405160405180910390a1565b600460159054906101000a900460ff1681565b62057e4081565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113b457600080fd5b806003819055507fbd497855048a1edceda7bc0b52200b6b4fd5025fc634396bbc7ce4491408414e816040518082815260200191505060405180910390a150565b6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561145357600080fd5b426003541115151561146457600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156114f157600080fd5b6102c65a03f1151561150257600080fd5b50505060405180519050670291408513728000039050600081111561162c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561160f57600080fd5b6102c65a03f1151561162057600080fd5b50505060405180519050505b81600460006101000a81548160ff0219169083151502179055507fb5f94935825016cc4015d8809c4b6bd8b525088a6e57455a147803c9096db088816040518082815260200191505060405180910390a15050565b67029140851372800081565b600460009054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156116fc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561173857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561185457600080fd5b600460159054906101000a900460ff16151561186f57600080fd5b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000804260035411159450600034141593506903cfc82e37e9a7400000600254109250600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8b964e6336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15156119bd57600080fd5b6102c65a03f115156119ce57600080fd5b505050604051805190509150600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d8b964e6336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b1515611a9f57600080fd5b6102c65a03f11515611ab057600080fd5b505050604051805190509050600860149054906101000a900460ff168015611ad55750845b8015611aee5750600460009054906101000a900460ff16155b8015611af75750835b8015611b005750825b8015611b1157508180611b105750805b5b9550505050505090565b6000808284019050838110151515611b2f57fe5b8091505092915050565b6000828211151515611b4757fe5b818303905092915050565b60008082840290506000841480611b735750828482811515611b7057fe5b04145b1515611b7b57fe5b8091505092915050565b6000808284811515611b9357fe5b0490508091505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501515611c0257600080fd5b565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637d64bcb46000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611c9157600080fd5b6102c65a03f11515611ca257600080fd5b50505060405180519050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2fde38b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1515611d8a57600080fd5b6102c65a03f11515611d9b57600080fd5b5050505600a165627a7a7230582046571b5c195fa800f1305a3c4fa80bd18c4321653933e44d077970efcbddf40a0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b2135ab9695a7678dd590b1a996cb0f37bcb0718000000000000000000000000233e11479f9d36f5cc632a78884189e1b9502128000000000000000000000000d5d7d89a913f0aeb3b9a4a685a7c846e8220fc0700000000000000000000000096d0040b4f84224c1dc7faf1d99eab3f91c52e4d
-----Decoded View---------------
Arg [0] : _token (address): 0xB2135AB9695a7678Dd590B1A996CB0f37BCB0718
Arg [1] : _wallet (address): 0x233E11479F9D36f5cc632a78884189E1b9502128
Arg [2] : _register (address): 0xd5D7D89a913F0AeB3B9a4a685a7c846e8220fc07
Arg [3] : _register2 (address): 0x96d0040B4F84224c1dc7faF1d99Eab3f91C52e4D
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b2135ab9695a7678dd590b1a996cb0f37bcb0718
Arg [1] : 000000000000000000000000233e11479f9d36f5cc632a78884189e1b9502128
Arg [2] : 000000000000000000000000d5d7d89a913f0aeb3b9a4a685a7c846e8220fc07
Arg [3] : 00000000000000000000000096d0040b4f84224c1dc7faf1d99eab3f91c52e4d
Swarm Source
bzzr://46571b5c195fa800f1305a3c4fa80bd18c4321653933e44d077970efcbddf40a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.