Contract 0x2371c3764abf450c60a9985a74f8ce08a8fc7449

 
Ad
Crypto.com
Txn Hash Method
Block
From
To
Value
0x3b5241efc2d3c88736c8ffc226a5bb11918adcabac5f56af09fc99e9df08c1a1Register126612002021-06-18 22:55:283 days 21 hrs ago0x12b19061afb33c5f227e9cc1fecff6b9e5ed2c02 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.001302850510.5
0x24ef8bb45a9ac707b92e6d1e2ba02480fb9b92f959b4ef51b241c54759c44d77Register126121182021-06-11 8:10:4011 days 11 hrs ago0x2b8b2bfa75a41dfb57d08e8e187f52c5c28b7095 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.0012408110
0x8938592cd31ba8a37484a5428727a88b678bbb844d26480bc70cd6adb149a674Register125750122021-06-05 14:40:2717 days 5 hrs ago0x4154076cad570bfd483972e4ce8f3a70469881f2 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00272978222
0x8881737acd2fddce08d5c85ef3234bddcc574d1208eef32506d76d244c74c54aRegister125279522021-05-29 7:39:1124 days 12 hrs ago0xa7bf3c065e8126c55f462ed30c2a7f3707a2d81c IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.0022396220
0x154cb44a4fa935dd26d4f20c18a02ded34f5317c355b933ea4be17331c6d3a9fRegister125278912021-05-29 7:24:5324 days 12 hrs ago0xcf736e0192fc8932dd6536785b056e0944835a7d IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.0022396220
0x7053f8a3118c7eafc0e13082c24382a3da8a2cd8fc48bbdb9bae9578ee1fc6bdRegister125263552021-05-29 1:43:0124 days 18 hrs ago0x5ff4fbd6953c0c5e14a737e12029f57373bd7c34 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.0011198110
0xd8bb5b8f858da4d29ad67b97f705ee88173fbbaa6b443ee0cc2e5767a1cca743Register125026462021-05-25 9:19:0628 days 10 hrs ago0xdaebc78fac18556d123e2ee26a0eebcbe8bcdf15 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.0049632440
0xfd2b4e880c54397b1856f97e44724487ce63bc5ae34ed653fa658778344d8504Register124430372021-05-16 3:16:4137 days 16 hrs ago0xa42de320ed335e02b3ec161260cb56c691e4accf IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00707261757
0xd089cf73ad896c5c3a6600a9f48175e7054829f0be22602d4dc2d04b1a072b8dRegister123733132021-05-05 9:01:2248 days 11 hrs ago0x4d0f4d8f9ca20eb595c80543496f265f09c743ef IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00347426828
0x3a6f3e82d7e123c0a7910c87be4ed48a724124a90b3643683ba3ceec6122510aRegister123616142021-05-03 13:50:3250 days 6 hrs ago0xea5f20e4dc53ec16d8f00bb891596513988799da IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00483915939
0x67f8107a9ed3659904f1d2470f3ced9d6220dff3672b0d7ed658d71e04b69a88Register123543082021-05-02 10:52:5951 days 9 hrs ago0xe75e5868ae64ea99ae1caec16f6a55244bf21e2b IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00285386323
0xba749edf1fc15cc71595a841cd7d9d97bc40fbdc830134cbdc59726ab966b1f9Register123485312021-05-01 13:20:2252 days 6 hrs ago0x6af85211a1fba3a83d3f28f523163f5212d25301 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00333033406826.840000233
0xec7192ba9b5fae712885332b1f9c832959c4ed78a841bd34a90817f02e96816fRegister123460362021-05-01 4:01:1852 days 16 hrs ago0x615dc36606bfff5c6aa68fe65d75f21a610e2ff1 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00347426828
0x72844a3d9ccb655980c7200d49b97c30881d529fb3cb7d61430ffd631f8e8ba2Register123459682021-05-01 3:48:5752 days 16 hrs ago0xbabd07e2357acd6d3ba000759f188665241fc2cd IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00359834929
0xe78b9bd001fd0cb3363f6d2d1cbfe2105d06c463e1242d5e322e9f3a907ba624Register123278002021-04-28 8:24:3155 days 11 hrs ago0x1637c85a80aa35331b5eda25421f8bf5d031f08c IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00483915939
0x842485fcc39771a5f4522f25b4d2fb8c26f2156041ff1f1428185b34533504baRegister123273432021-04-28 6:38:5555 days 13 hrs ago0x19beaa9b5a605d4274c008b2085de9cb2b2cf166 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.01127364514290.857142857
0x2f400148dc914fd57bdabeeb98f38b574bdebd9f7c852e99171ad42a299d5290Register123024652021-04-24 10:42:5859 days 9 hrs ago0x84bb508404b3b00b34eddcb86be8bc4ff8193c9f IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00604697454
0xfe92b8685841d0610824b14a27e0db0b4c63c62b67387785abfc1efeb4416815Register122524462021-04-16 17:23:1467 days 2 hrs ago0xa474465a08371adcdd460aaf2159ea29b3e4acf0 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.02109377170
0x3878fd588b69a3e7578d74d8de4468051e9ab777a6d8821eee1a2ae6a12dbb51Register122378762021-04-14 11:17:5869 days 8 hrs ago0xb3cbc4078a014619760c181689c959d4c13f40c5 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.012837821785114.642857143
0xc39c5dbeda0014dbc8c5e230b55dd9889276857fc6e3f422d80692069b6a58c5Register122318652021-04-13 12:55:1770 days 7 hrs ago0xdfbb6a37dec4ee67d71e9ebcf0013834d1a888a4 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.0082653176173.81
0x5c6326e897fc078f18cf1ac08650d7eb21a5b05cce301bf8214d4149c3194cf9Register122168732021-04-11 5:57:4372 days 14 hrs ago0x30edcc31d9bb774c78e2c2f75296e7ad3df2bddb IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00739074685466.000007629
0xd9f90c4bcd964a4e19ed005c5b35d35199c77f785b9685f94ded1195d3876048Register122119802021-04-10 11:50:5573 days 8 hrs ago0x49adfb135996449a23e236b199bc6cffbe92bc78 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.00839857575
0xf02375eb70e40b06d652012428abaeb6a30aa1f340d51e59cd940d0ce678d3c6Register122115792021-04-10 10:23:3573 days 9 hrs ago0xf359465e55c1f46c43469c9fdb33acab5bc987fd IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.0132697485118.5
0xf65e2d7da93a3f391eaf36f6577495985a5f5b009ce01f0181c9389f7cf6926eRegister121985892021-04-08 10:17:4975 days 9 hrs ago0x4112ea9feb334f26b8d59c8e151db9eee15744fc IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.012541872112
0x4b621e49798038a2d41980f4a9bbb6f001cf76e48a703a5ff5fa7563642b03bbRegister121793922021-04-05 11:25:3878 days 8 hrs ago0x44f0bbc983aee3e4a4565e8a69697e6a01267f12 IN  0x2371c3764abf450c60a9985a74f8ce08a8fc74490 Ether0.01097413898
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
InsightsNetworkMigrationToEOS

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-03-07
*/

// File: zeppelin-solidity/contracts/ownership/Ownable.sol

pragma solidity ^0.4.24;


/**
 * @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 OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: zeppelin-solidity/contracts/lifecycle/Destructible.sol

pragma solidity ^0.4.24;



/**
 * @title Destructible
 * @dev Base contract that can be destroyed by owner. All funds in contract will be sent to the owner.
 */
contract Destructible is Ownable {
  /**
   * @dev Transfers the current balance to the owner and terminates the contract.
   */
  function destroy() public onlyOwner {
    selfdestruct(owner);
  }

  function destroyAndSend(address _recipient) public onlyOwner {
    selfdestruct(_recipient);
  }
}

// File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

pragma solidity ^0.4.24;


/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * See https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address _who) public view returns (uint256);
  function transfer(address _to, uint256 _value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: zeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.4.24;


/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // assert(_b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold
    return _a / _b;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    assert(_b <= _a);
    return _a - _b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    c = _a + _b;
    assert(c >= _a);
    return c;
  }
}

// File: zeppelin-solidity/contracts/token/ERC20/BasicToken.sol

pragma solidity ^0.4.24;




/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) internal balances;

  uint256 internal totalSupply_;

  /**
  * @dev Total number of tokens in existence
  */
  function totalSupply() public view returns (uint256) {
    return totalSupply_;
  }

  /**
  * @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(_value <= balances[msg.sender]);
    require(_to != address(0));

    balances[msg.sender] = balances[msg.sender].sub(_value);
    balances[_to] = balances[_to].add(_value);
    emit 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 view returns (uint256) {
    return balances[_owner];
  }

}

// File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.4.24;



/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address _owner, address _spender)
    public view 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
  );
}

// File: zeppelin-solidity/contracts/token/ERC20/StandardToken.sol

pragma solidity ^0.4.24;




/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * https://github.com/ethereum/EIPs/issues/20
 * 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(_value <= balances[_from]);
    require(_value <= allowed[_from][msg.sender]);
    require(_to != address(0));

    balances[_from] = balances[_from].sub(_value);
    balances[_to] = balances[_to].add(_value);
    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
    emit 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;
    emit 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
    view
    returns (uint256)
  {
    return allowed[_owner][_spender];
  }

  /**
   * @dev Increase the amount of tokens that an owner allowed to a 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
   * @param _spender The address which will spend the funds.
   * @param _addedValue The amount of tokens to increase the allowance by.
   */
  function increaseApproval(
    address _spender,
    uint256 _addedValue
  )
    public
    returns (bool)
  {
    allowed[msg.sender][_spender] = (
      allowed[msg.sender][_spender].add(_addedValue));
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

  /**
   * @dev Decrease the amount of tokens that an owner allowed to a spender.
   * approve should be called when allowed[_spender] == 0. To decrement
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   * @param _spender The address which will spend the funds.
   * @param _subtractedValue The amount of tokens to decrease the allowance by.
   */
  function decreaseApproval(
    address _spender,
    uint256 _subtractedValue
  )
    public
    returns (bool)
  {
    uint256 oldValue = allowed[msg.sender][_spender];
    if (_subtractedValue >= oldValue) {
      allowed[msg.sender][_spender] = 0;
    } else {
      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
    }
    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

}

// File: zeppelin-solidity/contracts/lifecycle/Pausable.sol

pragma solidity ^0.4.24;



/**
 * @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() public onlyOwner whenNotPaused {
    paused = true;
    emit Pause();
  }

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

// File: zeppelin-solidity/contracts/token/ERC20/PausableToken.sol

pragma solidity ^0.4.24;




/**
 * @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);
  }
}

// File: zeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol

pragma solidity ^0.4.24;



/**
 * @title DetailedERC20 token
 * @dev The decimals are only for visualization purposes.
 * All the operations are done using the smallest and indivisible token unit,
 * just as on Ethereum all the operations are done in wei.
 */
contract DetailedERC20 is ERC20 {
  string public name;
  string public symbol;
  uint8 public decimals;

  constructor(string _name, string _symbol, uint8 _decimals) public {
    name = _name;
    symbol = _symbol;
    decimals = _decimals;
  }
}

// File: zeppelin-solidity/contracts/token/ERC20/MintableToken.sol

pragma solidity ^0.4.24;




/**
 * @title Mintable token
 * @dev Simple ERC20 Token example, with mintable token creation
 * 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);
    _;
  }

  modifier hasMintPermission() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @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
  )
    public
    hasMintPermission
    canMint
    returns (bool)
  {
    totalSupply_ = totalSupply_.add(_amount);
    balances[_to] = balances[_to].add(_amount);
    emit Mint(_to, _amount);
    emit Transfer(address(0), _to, _amount);
    return true;
  }

  /**
   * @dev Function to stop minting new tokens.
   * @return True if the operation was successful.
   */
  function finishMinting() public onlyOwner canMint returns (bool) {
    mintingFinished = true;
    emit MintFinished();
    return true;
  }
}

// File: zeppelin-solidity/contracts/token/ERC20/CappedToken.sol

pragma solidity ^0.4.24;



/**
 * @title Capped token
 * @dev Mintable token with a token cap.
 */
contract CappedToken is MintableToken {

  uint256 public cap;

  constructor(uint256 _cap) public {
    require(_cap > 0);
    cap = _cap;
  }

  /**
   * @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
  )
    public
    returns (bool)
  {
    require(totalSupply_.add(_amount) <= cap);

    return super.mint(_to, _amount);
  }

}

// File: contracts/InsightsNetwork1.sol

pragma solidity ^0.4.4;

contract InsightsNetwork1 {
  address public owner; // Creator
  address public successor; // May deactivate contract
  mapping (address => uint) public balances;    // Who has what
  mapping (address => uint) public unlockTimes; // When balances unlock
  bool public active;
  uint256 _totalSupply; // Sum of minted tokens

  string public constant name = "INS";
  string public constant symbol = "INS";
  uint8 public constant decimals = 0;

  function InsightsNetwork1() {
    owner = msg.sender;
    active = true;
  }

  function register(address newTokenHolder, uint issueAmount) { // Mint tokens and assign to new owner
    require(active);
    require(msg.sender == owner);   // Only creator can register
    require(balances[newTokenHolder] == 0); // Accounts can only be registered once

    _totalSupply += issueAmount;
    Mint(newTokenHolder, issueAmount);  // Trigger event

    require(balances[newTokenHolder] < (balances[newTokenHolder] + issueAmount));   // Overflow check
    balances[newTokenHolder] += issueAmount;
    Transfer(address(0), newTokenHolder, issueAmount);  // Trigger event

    uint currentTime = block.timestamp; // seconds since the Unix epoch
    uint unlockTime = currentTime + 365*24*60*60; // one year out from the current time
    assert(unlockTime > currentTime); // check for overflow
    unlockTimes[newTokenHolder] = unlockTime;
  }

  function totalSupply() constant returns (uint256) {   // ERC20 compliance
    return _totalSupply;
  }

  function transfer(address _to, uint256 _value) returns (bool success) {   // ERC20 compliance
    return false;
  }

  function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {    // ERC20 compliance
    return false;
  }

  function approve(address _spender, uint256 _value) returns (bool success) {   // ERC20 compliance
    return false;
  }

  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {   // ERC20 compliance
    return 0;   // No transfer allowance
  }

  function balanceOf(address _owner) constant returns (uint256 balance) {   // ERC20 compliance
    return balances[_owner];
  }

  function getUnlockTime(address _accountHolder) constant returns (uint256) {
    return unlockTimes[_accountHolder];
  }

  event Mint(address indexed _to, uint256 _amount);
  event Transfer(address indexed _from, address indexed _to, uint256 _value);
  event Approval(address indexed _owner, address indexed _spender, uint256 _value);

  function makeSuccessor(address successorAddr) {
    require(active);
    require(msg.sender == owner);
    //require(successorAddr == address(0));
    successor = successorAddr;
  }

  function deactivate() {
    require(active);
    require(msg.sender == owner || (successor != address(0) && msg.sender == successor));   // Called by creator or successor
    active = false;
  }
}

// File: contracts/InsightsNetwork2Base.sol

pragma solidity ^0.4.18;






contract InsightsNetwork2Base is DetailedERC20("Insights Network", "INSTAR", 18), PausableToken, CappedToken{

    uint256 constant ATTOTOKEN_FACTOR = 10**18;

    address public predecessor;
    address public successor;

    uint constant MAX_LENGTH = 1024;
    uint constant MAX_PURCHASES = 64;
    
    mapping (address => uint256[]) public lockedBalances;
    mapping (address => uint256[]) public unlockTimes;
    mapping (address => bool) public imported;

    event Import(address indexed account, uint256 amount, uint256 unlockTime);    

    function InsightsNetwork2Base() public CappedToken(300*1000000*ATTOTOKEN_FACTOR) {
        paused = true;
        mintingFinished = true;
    }

    function activate(address _predecessor) public onlyOwner {
        require(predecessor == 0);
        require(_predecessor != 0);
        require(predecessorDeactivated(_predecessor));
        predecessor = _predecessor;
        unpause();
        mintingFinished = false;
    }

    function lockedBalanceOf(address account) public view returns (uint256 balance) {
        uint256 amount;
        for (uint256 index = 0; index < lockedBalances[account].length; index++)
            if (unlockTimes[account][index] > now)
                amount += lockedBalances[account][index];
        return amount;
    }

    function mintBatch(address[] accounts, uint256[] amounts) public onlyOwner canMint returns (bool) {
        require(accounts.length == amounts.length);
        require(accounts.length <= MAX_LENGTH);
        for (uint index = 0; index < accounts.length; index++)
            require(mint(accounts[index], amounts[index]));
        return true;
    }

    function mintUnlockTime(address account, uint256 amount, uint256 unlockTime) public onlyOwner canMint returns (bool) {
        require(unlockTime > now);
        require(lockedBalances[account].length < MAX_PURCHASES);
        lockedBalances[account].push(amount);
        unlockTimes[account].push(unlockTime);
        return super.mint(account, amount);
    }

    function mintUnlockTimeBatch(address[] accounts, uint256[] amounts, uint256 unlockTime) public onlyOwner canMint returns (bool) {
        require(accounts.length == amounts.length);
        require(accounts.length <= MAX_LENGTH);
        for (uint index = 0; index < accounts.length; index++)
            require(mintUnlockTime(accounts[index], amounts[index], unlockTime));
        return true;
    }

    function mintLockPeriod(address account, uint256 amount, uint256 lockPeriod) public onlyOwner canMint returns (bool) {
        return mintUnlockTime(account, amount, now + lockPeriod);
    }

    function mintLockPeriodBatch(address[] accounts, uint256[] amounts, uint256 lockPeriod) public onlyOwner canMint returns (bool) {
        return mintUnlockTimeBatch(accounts, amounts, now + lockPeriod);
    }

    function importBalance(address account) public onlyOwner canMint returns (bool);

    function importBalanceBatch(address[] accounts) public onlyOwner canMint returns (bool) {
        require(accounts.length <= MAX_LENGTH);
        for (uint index = 0; index < accounts.length; index++)
            require(importBalance(accounts[index]));
        return true;
    }

    function transfer(address to, uint256 value) public returns (bool) {
        require(value <= balances[msg.sender] - lockedBalanceOf(msg.sender));
        return super.transfer(to, value);
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        require(value <= balances[from] - lockedBalanceOf(from));
        return super.transferFrom(from, to, value);
    }

    function selfDestruct(address _successor) public onlyOwner whenPaused {
        require(mintingFinished);
        successor = _successor;
        selfdestruct(owner);
    }

    function predecessorDeactivated(address _predecessor) internal view onlyOwner returns (bool);

}

// File: contracts/InsightsNetwork3.sol

pragma solidity ^0.4.18;



contract InsightsNetwork3 is InsightsNetwork2Base {

    function importBalance(address account) public onlyOwner canMint returns (bool) {
        require(!imported[account]);
        InsightsNetwork2Base source = InsightsNetwork2Base(predecessor);
        uint256 amount = source.balanceOf(account);
        require(amount > 0);
        imported[account] = true;
        uint256 mintAmount = amount - source.lockedBalanceOf(account);
        if (mintAmount > 0) {
            Import(account, mintAmount, now);
            assert(mint(account, mintAmount));
            amount -= mintAmount;
        }
        for (uint index = 0; amount > 0; index++) {
            uint256 unlockTime = source.unlockTimes(account, index);
            if ( unlockTime > now ) {
                mintAmount = source.lockedBalances(account, index);
                Import(account, mintAmount, unlockTime);
                assert(mintUnlockTime(account, mintAmount, unlockTime));
                amount -= mintAmount;
            }
        }
        return true;
    }

    function predecessorDeactivated(address _predecessor) internal view onlyOwner returns (bool) {
        return InsightsNetwork2Base(_predecessor).paused() && InsightsNetwork2Base(_predecessor).mintingFinished();
    }

}

// File: contracts/InsightsNetworkMigrationToEOS.sol

pragma solidity ^0.4.24;




contract InsightsNetworkMigrationToEOS is Destructible, Pausable {

    InsightsNetwork3 public tokenContract;

    mapping(address => string) public eosPublicKeys;
    mapping(address => uint256) public changeTime;

    uint256 public constant gracePeriod = 24 * 60 * 60;

    event Register(address indexed account);
    event Reject(address indexed account);

    constructor(address _tokenContractAddr) public {
        tokenContract = InsightsNetwork3(_tokenContractAddr);
        paused = true;
    }

    function register(string eosPublicKey) public whenNotPaused {
        require(tokenContract.balanceOf(msg.sender) > 0);

        require(bytes(eosPublicKey).length == 53 && bytes(eosPublicKey)[0] == "E" && bytes(eosPublicKey)[1] == "O" && bytes(eosPublicKey)[2] == "S");
        require(bytes(eosPublicKeys[msg.sender]).length == 0);

        eosPublicKeys[msg.sender] = eosPublicKey;
        changeTime[msg.sender] = block.timestamp;

        emit Register(msg.sender);
    }

    function reject() public whenNotPaused {
        require(bytes(eosPublicKeys[msg.sender]).length > 0);
        require((changeTime[msg.sender] + gracePeriod) > block.timestamp);

        delete eosPublicKeys[msg.sender];
        delete changeTime[msg.sender];

        emit Reject(msg.sender);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"eosPublicKeys","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"reject","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"destroy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gracePeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"changeTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"eosPublicKey","type":"string"}],"name":"register","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"destroyAndSend","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_tokenContractAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"Register","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"Reject","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

60806040526000805460a060020a60ff021916905534801561002057600080fd5b50604051602080610b2e83398101604052516000805460018054600160a060020a03909416600160a060020a031994851617905560a060020a60ff0219921633179190911674010000000000000000000000000000000000000000179055610aa18061008d6000396000f3006080604052600436106100cf5763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663331c7de381146100d45780633f4ba83a1461016a5780634dc415de1461018157806355a373d6146101965780635c975abb146101c7578063715018a6146101f057806383197ef0146102055780638456cb591461021a5780638da5cb5b1461022f578063a06db7dc14610244578063c79ce19a1461026b578063f2c298be1461028c578063f2fde38b146102e5578063f5074f4114610306575b600080fd5b3480156100e057600080fd5b506100f5600160a060020a0360043516610327565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561012f578181015183820152602001610117565b50505050905090810190601f16801561015c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561017657600080fd5b5061017f6103c0565b005b34801561018d57600080fd5b5061017f610436565b3480156101a257600080fd5b506101ab6104ec565b60408051600160a060020a039092168252519081900360200190f35b3480156101d357600080fd5b506101dc6104fb565b604080519115158252519081900360200190f35b3480156101fc57600080fd5b5061017f61050b565b34801561021157600080fd5b5061017f610577565b34801561022657600080fd5b5061017f61059c565b34801561023b57600080fd5b506101ab610617565b34801561025057600080fd5b50610259610626565b60408051918252519081900360200190f35b34801561027757600080fd5b50610259600160a060020a036004351661062d565b34801561029857600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261017f94369492936024939284019190819084018382808284375094975061063f9650505050505050565b3480156102f157600080fd5b5061017f600160a060020a03600435166108d3565b34801561031257600080fd5b5061017f600160a060020a03600435166108f6565b600260208181526000928352604092839020805484516001821615610100026000190190911693909304601f81018390048302840183019094528383529192908301828280156103b85780601f1061038d576101008083540402835291602001916103b8565b820191906000526020600020905b81548152906001019060200180831161039b57829003601f168201915b505050505081565b600054600160a060020a031633146103d757600080fd5b60005460a060020a900460ff1615156103ef57600080fd5b6000805474ff0000000000000000000000000000000000000000191681556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b339190a1565b60005460a060020a900460ff161561044d57600080fd5b3360009081526002602081905260408220546000196101006001831615020116041161047857600080fd5b3360009081526003602052604090205442620151809091011161049a57600080fd5b3360009081526002602052604081206104b291610996565b33600081815260036020526040808220829055517fe87a127e630432a36e6ce7e0bcd8342ad7957812ec5c3220489f036e5e84c2769190a2565b600154600160a060020a031681565b60005460a060020a900460ff1681565b600054600160a060020a0316331461052257600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a0316331461058e57600080fd5b600054600160a060020a0316ff5b600054600160a060020a031633146105b357600080fd5b60005460a060020a900460ff16156105ca57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1781556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff6259190a1565b600054600160a060020a031681565b6201518081565b60036020526000908152604090205481565b60005460a060020a900460ff161561065657600080fd5b600154604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051600092600160a060020a0316916370a0823191602480830192602092919082900301818787803b1580156106bb57600080fd5b505af11580156106cf573d6000803e3d6000fd5b505050506040513d60208110156106e557600080fd5b5051116106f157600080fd5b80516035148015610764575080600081518110151561070c57fe5b90602001015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f4500000000000000000000000000000000000000000000000000000000000000145b80156107d2575080600181518110151561077a57fe5b90602001015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f4f00000000000000000000000000000000000000000000000000000000000000145b801561084057508060028151811015156107e857fe5b90602001015160f860020a900460f860020a027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f5300000000000000000000000000000000000000000000000000000000000000145b151561084b57600080fd5b336000908152600260208190526040909120546000196101006001831615020116041561087757600080fd5b3360009081526002602090815260409091208251610897928401906109da565b5033600081815260036020526040808220429055517feeda149c76076b34d4b9d8896c2f7efc0d33d1c7b53ea3c5db490d64613f603a9190a250565b600054600160a060020a031633146108ea57600080fd5b6108f381610919565b50565b600054600160a060020a0316331461090d57600080fd5b80600160a060020a0316ff5b600160a060020a038116151561092e57600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b50805460018160011615610100020316600290046000825580601f106109bc57506108f3565b601f0160209004906000526020600020908101906108f39190610a58565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10610a1b57805160ff1916838001178555610a48565b82800160010185558215610a48579182015b82811115610a48578251825591602001919060010190610a2d565b50610a54929150610a58565b5090565b610a7291905b80821115610a545760008155600101610a5e565b905600a165627a7a72305820166295508bc56dd0a224031d87d9e2db61e166d04e4a739c83a65a7f2fc48ad50029000000000000000000000000c72fe8e3dd5bef0f9f31f259399f301272ef2a2d

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

000000000000000000000000c72fe8e3dd5bef0f9f31f259399f301272ef2a2d

-----Decoded View---------------
Arg [0] : _tokenContractAddr (address): 0xc72fe8e3dd5bef0f9f31f259399f301272ef2a2d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c72fe8e3dd5bef0f9f31f259399f301272ef2a2d


Swarm Source

bzzr://166295508bc56dd0a224031d87d9e2db61e166d04e4a739c83a65a7f2fc48ad5
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.