Contract 0x87ea811785c4bd30fc104c2543cf8ed90f7eeec7

Contract Overview

Balance:
0 Ether
TxHash Block Age From To Value [TxFee]
0xb4c5b2a52e0c7a90930d481b0d879c80ef1659f8eebc0738f0ef54431e01d05340710119 hrs 8 mins ago0x1392532c5b228ba18b33bec82d255a9f8a6a24f4 IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x4d812c75ffc4da7a11b8cc453cd900ad3cc4e5869daedb194d915a4a717c6d3840708639 hrs 45 mins ago0x1392532c5b228ba18b33bec82d255a9f8a6a24f4 IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x089ee82c57b3c88de6a26840c721a5db35246ddefd9acce6b93f80948a65e97b407045211 hrs 27 mins ago0x1392532c5b228ba18b33bec82d255a9f8a6a24f4 IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0xb673cf49b2fdba4adfba2cc28a58cc3fa85ab7ff60913d3f47da3441febbda3a407042611 hrs 34 mins ago0x1392532c5b228ba18b33bec82d255a9f8a6a24f4 IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0xa163365916d0e32921517bedbc794c45ebdfa66fb0e6c59f3ddbf4603d8586a3407039311 hrs 42 mins ago0x50858f2c7873fac9398ed9c195d185089caa7967 IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.000301299
0xc55bd042e29841ba24138fce76cb19f218b53a671a35ca1b7dd669299f3a9651407038711 hrs 44 mins ago0x50858f2c7873fac9398ed9c195d185089caa7967 IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.000301299
0x8e6f9e5506bbd55507b56c9f12fc2de0ac604391ef9889110a74678a60996c58407028612 hrs 9 mins ago0x50858f2c7873fac9398ed9c195d185089caa7967 IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.000301299
0x2f8b23c1feeb4962f9542b8d72ca61099fb4ae143fec665d53d3d0147b8ad92640663461 day 4 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x3098403127cb5bacb4acb00995b0aa1846aef72b115d31a303f315e02ec48ea440663221 day 4 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0xffd01bd2419bb11b96d5891fe22a9f05a07abc5ce11ce25b0c51e444188e135240609352 days 3 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0xb394cd230ffb3201c17066994227ff1e852b0d2015f7e85bcf2510488744629640605232 days 4 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x135ca1d5a0cc4c06ef833e88c0cc835ac5b2b87717f7b2f5fe08b1238db022fd40604862 days 4 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x791f2b4dac3a44b220de3996e5f53e9ad28552b2042a203ec32f94d122a6bfa740604562 days 5 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x47495496ccf69e2a305a399736bb22a0fabcdd77705e578df98ccc1a29001af040603032 days 5 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x354d6c96a304ff86e453f12627a635dd90e91dd757d9fb9a75ffda10ad89adf340589792 days 11 hrs ago0x91d8ecb38009ae2fe17821af8c357e50e5b6071c IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x32226e4386a76a289777391854819282e9dfe312aa7b5abb7a660ee9b87dabbd40525503 days 14 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0xcf5f7a057bf41732d04c1dbae87d898398fa94905711668e4e09177283fdc75640525163 days 14 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x1ae2a1f7d72d96bcaa64194ff0436235364e732b4d1cab1f6f56f8b87d0015db40524993 days 14 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0xef04ecb48907b2e2faef5042812862f752d4a5f47bf401307707e6ffc960062540524173 days 14 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0xbba55ed601d76ebe2a22444d4f677f9895c27057cd4073ee1aebde0b42934abc40523943 days 14 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x4f64cefcf229ba4b3efc85a68c2a0f053e046e471f5b3e991f6d75fb90f7a02540523663 days 14 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x63768bfb008f9a345f25181c82ed7f34d2cdb3182d2966b667faf8056f8f3c0d40523443 days 14 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x44ed32dabf951088ad830801667970262ac4fd73f6577626f43e4cff33f5424a40522853 days 15 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x2b02463ce2eae00d6ec857eae602ea8b4dfc926d458f2c30bff4aba078d7500340522343 days 15 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
0x0a61126d320ebddfe5b31f97200f3fa97d459e36db0c13ce7f730880688c80aa40502663 days 23 hrs ago0x9adb41387812f1389d86dc41ad3d70af29439a9b IN  0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether0.00602726
[ Download CSV Export 

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0x624c05f964f8ab2c44277837d8d5e741f934a4ba1c2e98a94f3626872e321b9340712398 hrs 11 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3d09197e8c6ddef98f55df0e2bc29597ab2507180 Ether
0x624c05f964f8ab2c44277837d8d5e741f934a4ba1c2e98a94f3626872e321b9340712398 hrs 11 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x03d7f5802c96e8d95caefa7a59662f806ec7d53603ebea4dd6bd8f84e0aca8ed40712388 hrs 11 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x5913c853653ab4eb17033b8e0b305f99b3a1eb9773da052eb99143049003f28240712238 hrs 15 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0x5913c853653ab4eb17033b8e0b305f99b3a1eb9773da052eb99143049003f28240712238 hrs 15 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x821dd989dc5099081a81a5f7fe3a67035a5f5dddf08f209e592b897aa32e7e5540710169 hrs 6 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70xa961fe3b93720b7f9adf1e4baedccc41638549da0 Ether
0x821dd989dc5099081a81a5f7fe3a67035a5f5dddf08f209e592b897aa32e7e5540710169 hrs 6 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0xb4c5b2a52e0c7a90930d481b0d879c80ef1659f8eebc0738f0ef54431e01d05340710119 hrs 8 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec7  Contract Creation0 Ether
0xb3ad108c1dd2534b45b7f2c2c7adfaf754abda69b302b75d523ac19a8303c3ff40708699 hrs 43 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x976bd5e3a6c76a142292e34446c2b05973094c340 Ether
0xb3ad108c1dd2534b45b7f2c2c7adfaf754abda69b302b75d523ac19a8303c3ff40708699 hrs 43 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x4d812c75ffc4da7a11b8cc453cd900ad3cc4e5869daedb194d915a4a717c6d3840708639 hrs 45 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec7  Contract Creation0 Ether
0xbc73f70ff844516179ea97da281df94ca3d4b37bd83b946197b89971eb9fe3d6407057810 hrs 56 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0xbc73f70ff844516179ea97da281df94ca3d4b37bd83b946197b89971eb9fe3d6407057810 hrs 56 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x9793f3f2de021237022f444814bdd0a113d0de5961d9d3c52bf928981cf3b6ed407055611 hrs 1 min ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0x9793f3f2de021237022f444814bdd0a113d0de5961d9d3c52bf928981cf3b6ed407055611 hrs 1 min ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0xeaff1a1271412d387b8a43dbde36266215e7a3e222050a98ed0672066aefd7f0407055411 hrs 2 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0xeaff1a1271412d387b8a43dbde36266215e7a3e222050a98ed0672066aefd7f0407055411 hrs 2 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x324b23964398fd9a9f5c3c502c133e2715c1b6ae4d39f52e95a1b4e5c6d68cf7407053211 hrs 7 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0x324b23964398fd9a9f5c3c502c133e2715c1b6ae4d39f52e95a1b4e5c6d68cf7407053211 hrs 7 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x1eaefb1c1751fdb14f94065140fd3ee4a0eaa6420a7f0e3f5ab01c220319e0cb407053111 hrs 8 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0x1eaefb1c1751fdb14f94065140fd3ee4a0eaa6420a7f0e3f5ab01c220319e0cb407053111 hrs 8 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0x7e37d5cc7274ae46b15da95a5be3985c94f9dc98986dc1bb862e53a0beffd2f3407053011 hrs 8 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0x7e37d5cc7274ae46b15da95a5be3985c94f9dc98986dc1bb862e53a0beffd2f3407053011 hrs 8 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
0xcaf9635c5c5d305ab8003f2e97a4496d92adf68900d488225fc98141cdffef9a407052911 hrs 8 mins ago0x87ea811785c4bd30fc104c2543cf8ed90f7eeec70x3eb3de6b05a31f3f13331579bc7869fbe428ee4e0 Ether
0xcaf9635c5c5d305ab8003f2e97a4496d92adf68900d488225fc98141cdffef9a407052911 hrs 8 mins ago0xda8c6dce9e9a85e6f9df7b09b2354da44cb483310x87ea811785c4bd30fc104c2543cf8ed90f7eeec70 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
MetaIdentityManager

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity 0.4.15;


contract Owned {
    address public owner;
    modifier onlyOwner() {
        require(isOwner(msg.sender));
        _;
    }

    function Owned() { owner = msg.sender; }

    function isOwner(address addr) public returns(bool) { return addr == owner; }

    function transfer(address newOwner) public onlyOwner {
        if (newOwner != address(this)) {
            owner = newOwner;
        }
    }
}

contract Proxy is Owned {
    event Forwarded (address indexed destination, uint value, bytes data);
    event Received (address indexed sender, uint value);

    function () payable { Received(msg.sender, msg.value); }

    function forward(address destination, uint value, bytes data) public onlyOwner {
        require(destination.call.value(value)(data));
        Forwarded(destination, value, data);
    }
}


contract MetaIdentityManager {
    uint adminTimeLock;
    uint userTimeLock;
    uint adminRate;
    address relay;

    event LogIdentityCreated(
        address indexed identity,
        address indexed creator,
        address owner,
        address indexed recoveryKey);

    event LogOwnerAdded(
        address indexed identity,
        address indexed owner,
        address instigator);

    event LogOwnerRemoved(
        address indexed identity,
        address indexed owner,
        address instigator);

    event LogRecoveryChanged(
        address indexed identity,
        address indexed recoveryKey,
        address instigator);

    event LogMigrationInitiated(
        address indexed identity,
        address indexed newIdManager,
        address instigator);

    event LogMigrationCanceled(
        address indexed identity,
        address indexed newIdManager,
        address instigator);

    event LogMigrationFinalized(
        address indexed identity,
        address indexed newIdManager,
        address instigator);

    mapping(address => mapping(address => uint)) owners;
    mapping(address => address) recoveryKeys;
    mapping(address => mapping(address => uint)) limiter;
    mapping(address => uint) public migrationInitiated;
    mapping(address => address) public migrationNewAddress;

    modifier onlyAuthorized() {
        require(msg.sender == relay || checkMessageData(msg.sender));
        _;
    }

    modifier onlyOwner(address identity, address sender) {
        require(isOwner(identity, sender));
        _;
    }

    modifier onlyOlderOwner(address identity, address sender) {
        require(isOlderOwner(identity, sender));
        _;
    }

    modifier onlyRecovery(address identity, address sender) {
        require(recoveryKeys[identity] == sender);
        _;
    }

    modifier rateLimited(Proxy identity, address sender) {
        require(limiter[identity][sender] < (now - adminRate));
        limiter[identity][sender] = now;
        _;
    }

    modifier validAddress(address addr) { //protects against some weird attacks
        require(addr != address(0));
        _;
    }

    /// @dev Contract constructor sets initial timelocks and meta-tx relay address
    /// @param _userTimeLock Time before new owner added by recovery can control proxy
    /// @param _adminTimeLock Time before new owner can add/remove owners
    /// @param _adminRate Time period used for rate limiting a given key for admin functionality
    /// @param _relayAddress Address of meta transaction relay contract
    function MetaIdentityManager(uint _userTimeLock, uint _adminTimeLock, uint _adminRate, address _relayAddress) {
        require(_adminTimeLock >= _userTimeLock);
        adminTimeLock = _adminTimeLock;
        userTimeLock = _userTimeLock;
        adminRate = _adminRate;
        relay = _relayAddress;
    }

    /// @dev Creates a new proxy contract for an owner and recovery
    /// @param owner Key who can use this contract to control proxy. Given full power
    /// @param recoveryKey Key of recovery network or address from seed to recovery proxy
    /// Gas cost of ~300,000
    function createIdentity(address owner, address recoveryKey) public validAddress(recoveryKey) {
        Proxy identity = new Proxy();
        owners[identity][owner] = now - adminTimeLock; // This is to ensure original owner has full power from day one
        recoveryKeys[identity] = recoveryKey;
        LogIdentityCreated(identity, msg.sender, owner,  recoveryKey);
    }

    /// @dev Creates a new proxy contract for an owner and recovery and allows an initial forward call which would be to set the registry in our case
    /// @param owner Key who can use this contract to control proxy. Given full power
    /// @param recoveryKey Key of recovery network or address from seed to recovery proxy
    /// @param destination Address of contract to be called after proxy is created
    /// @param data of function to be called at the destination contract
    function createIdentityWithCall(address owner, address recoveryKey, address destination, bytes data) public validAddress(recoveryKey) {
        Proxy identity = new Proxy();
        owners[identity][owner] = now - adminTimeLock; // This is to ensure original owner has full power from day one
        recoveryKeys[identity] = recoveryKey;
        LogIdentityCreated(identity, msg.sender, owner,  recoveryKey);
        identity.forward(destination, 0, data);
    }

    /// @dev Allows a user to transfer control of existing proxy to this contract. Must come through proxy
    /// @param owner Key who can use this contract to control proxy. Given full power
    /// @param recoveryKey Key of recovery network or address from seed to recovery proxy
    /// Note: User must change owner of proxy to this contract after calling this
    function registerIdentity(address owner, address recoveryKey) public validAddress(recoveryKey) {
        require(recoveryKeys[msg.sender] == 0); // Deny any funny business
        owners[msg.sender][owner] = now - adminTimeLock; // Owner has full power from day one
        recoveryKeys[msg.sender] = recoveryKey;
        LogIdentityCreated(msg.sender, msg.sender, owner, recoveryKey);
    }

    /// @dev Allows a user to forward a call through their proxy.
    function forwardTo(address sender, Proxy identity, address destination, uint value, bytes data) public
        onlyAuthorized
        onlyOwner(identity, sender)
    {
        identity.forward(destination, value, data);
    }

    /// @dev Allows an olderOwner to add a new owner instantly
    function addOwner(address sender, Proxy identity, address newOwner) public
        onlyAuthorized
        onlyOlderOwner(identity, sender)
        rateLimited(identity, sender)
    {
        require(!isOwner(identity, newOwner));
        owners[identity][newOwner] = now - userTimeLock;
        LogOwnerAdded(identity, newOwner, sender);
    }

    /// @dev Allows a recoveryKey to add a new owner with userTimeLock waiting time
    function addOwnerFromRecovery(address sender, Proxy identity, address newOwner) public
        onlyAuthorized
        onlyRecovery(identity, sender)
        rateLimited(identity, sender)
    {
        require(!isOwner(identity, newOwner));
        owners[identity][newOwner] = now;
        LogOwnerAdded(identity, newOwner, sender);
    }

    /// @dev Allows an owner to remove another owner instantly
    function removeOwner(address sender, Proxy identity, address owner) public
        onlyAuthorized
        onlyOlderOwner(identity, sender)
        rateLimited(identity, sender)
    {
        // an owner should not be allowed to remove itself
        require(sender != owner);
        delete owners[identity][owner];
        LogOwnerRemoved(identity, owner, sender);
    }

    /// @dev Allows an owner to change the recoveryKey instantly
    function changeRecovery(address sender, Proxy identity, address recoveryKey) public
        onlyAuthorized
        onlyOlderOwner(identity, sender)
        rateLimited(identity, sender)
        validAddress(recoveryKey)
    {
        recoveryKeys[identity] = recoveryKey;
        LogRecoveryChanged(identity, recoveryKey, sender);
    }

    /// @dev Allows an owner to begin process of transfering proxy to new IdentityManager
    function initiateMigration(address sender, Proxy identity, address newIdManager) public
        onlyAuthorized
        onlyOlderOwner(identity, sender)
    {
        migrationInitiated[identity] = now;
        migrationNewAddress[identity] = newIdManager;
        LogMigrationInitiated(identity, newIdManager, sender);
    }

    /// @dev Allows an owner to cancel the process of transfering proxy to new IdentityManager
    function cancelMigration(address sender, Proxy identity) public
        onlyAuthorized
        onlyOwner(identity, sender)
    {
        address canceledManager = migrationNewAddress[identity];
        delete migrationInitiated[identity];
        delete migrationNewAddress[identity];
        LogMigrationCanceled(identity, canceledManager, sender);
    }

    /// @dev Allows an owner to finalize and completly transfer proxy to new IdentityManager
    /// Note: before transfering to a new address, make sure this address is "ready to recieve" the proxy.
    /// Not doing so risks the proxy becoming stuck.
    function finalizeMigration(address sender, Proxy identity) onlyAuthorized onlyOlderOwner(identity, sender) {
        require(migrationInitiated[identity] != 0 && migrationInitiated[identity] + adminTimeLock < now);
        address newIdManager = migrationNewAddress[identity];
        delete migrationInitiated[identity];
        delete migrationNewAddress[identity];
        identity.transfer(newIdManager);
        delete recoveryKeys[identity];
        // We can only delete the owner that we know of. All other owners
        // needs to be removed before a call to this method.
        delete owners[identity][sender];
        LogMigrationFinalized(identity, newIdManager, sender);
    }

    //Checks that address a is the first input in msg.data.
    //Has very minimal gas overhead.
    function checkMessageData(address a) internal constant returns (bool t) {
        if (msg.data.length < 36) return false;
        assembly {
            let mask := 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
            t := eq(a, and(mask, calldataload(4)))
        }
    }

    function isOwner(address identity, address owner) public constant returns (bool) {
        return (owners[identity][owner] > 0 && (owners[identity][owner] + userTimeLock) <= now);
    }

    function isOlderOwner(address identity, address owner) public constant returns (bool) {
        return (owners[identity][owner] > 0 && (owners[identity][owner] + adminTimeLock) <= now);
    }

    function isRecovery(address identity, address recoveryKey) public constant returns (bool) {
        return recoveryKeys[identity] == recoveryKey;
    }
}

Contract ABI

[{"constant":true,"inputs":[{"name":"identity","type":"address"},{"name":"recoveryKey","type":"address"}],"name":"isRecovery","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"},{"name":"owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"},{"name":"newIdManager","type":"address"}],"name":"initiateMigration","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"},{"name":"recoveryKey","type":"address"}],"name":"changeRecovery","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"identity","type":"address"},{"name":"owner","type":"address"}],"name":"isOlderOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"recoveryKey","type":"address"},{"name":"destination","type":"address"},{"name":"data","type":"bytes"}],"name":"createIdentityWithCall","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"migrationNewAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"},{"name":"destination","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"forwardTo","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"},{"name":"newOwner","type":"address"}],"name":"addOwnerFromRecovery","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"recoveryKey","type":"address"}],"name":"registerIdentity","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"identity","type":"address"},{"name":"owner","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"}],"name":"cancelMigration","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"},{"name":"newOwner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"identity","type":"address"}],"name":"finalizeMigration","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"migrationInitiated","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"recoveryKey","type":"address"}],"name":"createIdentity","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_userTimeLock","type":"uint256"},{"name":"_adminTimeLock","type":"uint256"},{"name":"_adminRate","type":"uint256"},{"name":"_relayAddress","type":"address"}],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identity","type":"address"},{"indexed":true,"name":"creator","type":"address"},{"indexed":false,"name":"owner","type":"address"},{"indexed":true,"name":"recoveryKey","type":"address"}],"name":"LogIdentityCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identity","type":"address"},{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"instigator","type":"address"}],"name":"LogOwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identity","type":"address"},{"indexed":true,"name":"owner","type":"address"},{"indexed":false,"name":"instigator","type":"address"}],"name":"LogOwnerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identity","type":"address"},{"indexed":true,"name":"recoveryKey","type":"address"},{"indexed":false,"name":"instigator","type":"address"}],"name":"LogRecoveryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identity","type":"address"},{"indexed":true,"name":"newIdManager","type":"address"},{"indexed":false,"name":"instigator","type":"address"}],"name":"LogMigrationInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identity","type":"address"},{"indexed":true,"name":"newIdManager","type":"address"},{"indexed":false,"name":"instigator","type":"address"}],"name":"LogMigrationCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"identity","type":"address"},{"indexed":true,"name":"newIdManager","type":"address"},{"indexed":false,"name":"instigator","type":"address"}],"name":"LogMigrationFinalized","type":"event"}]

Contract Creation Code

6060604052341561000f57600080fd5b6040516080806116da833981016040528080519190602001805191906020018051919060200180519150505b8383101561004857600080fd5b60008390556001849055600282905560038054600160a060020a031916600160a060020a0383161790555b505050505b611653806100876000396000f300606060405236156100ca5763ffffffff60e060020a60003504166311fe12b381146100cf5780631a45fac7146101085780631e2629e1146101355780633061e0ef1461016257806332967ea01461018f5780633c8ac88e146101c8578063422e33f314610238578063701b882614610273578063754fd352146102e6578063781f5a83146103135780637ddc02d41461033a578063a596703914610373578063a949c6371461039a578063c7576ed4146103c7578063c778427b146103ee578063d10e73ab1461041f575b600080fd5b34156100da57600080fd5b6100f4600160a060020a0360043581169060243516610446565b604051901515815260200160405180910390f35b341561011357600080fd5b610133600160a060020a036004358116906024358116906044351661046d565b005b341561014057600080fd5b610133600160a060020a036004358116906024358116906044351661059f565b005b341561016d57600080fd5b610133600160a060020a0360043581169060243581169060443516610666565b005b341561019a57600080fd5b6100f4600160a060020a036004358116906024351661079a565b604051901515815260200160405180910390f35b34156101d357600080fd5b61013360048035600160a060020a03908116916024803583169260443516919060849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061080495505050505050565b005b341561024357600080fd5b610257600160a060020a03600435166109ba565b604051600160a060020a03909116815260200160405180910390f35b341561027e57600080fd5b61013360048035600160a060020a03908116916024803583169260443516916064359160a49060843590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506109d595505050505050565b005b34156102f157600080fd5b610133600160a060020a0360043581169060243581169060443516610b06565b005b341561031e57600080fd5b610133600160a060020a0360043581169060243516610c50565b005b341561034557600080fd5b6100f4600160a060020a0360043581169060243516610d23565b604051901515815260200160405180910390f35b341561037e57600080fd5b610133600160a060020a0360043581169060243516610d8d565b005b34156103a557600080fd5b610133600160a060020a0360043581169060243581169060443516610e5d565b005b34156103d257600080fd5b610133600160a060020a0360043581169060243516610f9b565b005b34156103f957600080fd5b61040d600160a060020a0360043516611153565b60405190815260200160405180910390f35b341561042a57600080fd5b610133600160a060020a0360043581169060243516611165565b005b600160a060020a038281166000908152600560205260409020548116908216145b92915050565b60035433600160a060020a039081169116148061048e575061048e33611237565b5b151561049a57600080fd5b81836104a6828261079a565b15156104b157600080fd5b600254600160a060020a038086166000908152600660209081526040808320938a168352929052205485918791429190910390106104ee57600080fd5b600160a060020a03808316600090815260066020908152604080832085851684529091529020429055878116908616141561052857600080fd5b600160a060020a038087166000818152600460209081526040808320948a1680845294909152808220919091557f5e159cd4447854ae8b4aa048f91c8daad986faab696c3685030e1a5e5a4e8ced908a9051600160a060020a03909116815260200160405180910390a35b5b50505b50505b505050565b60035433600160a060020a03908116911614806105c057506105c033611237565b5b15156105cc57600080fd5b81836105d8828261079a565b15156105e357600080fd5b600160a060020a0384811660008181526007602090815260408083204290556008909152908190208054600160a060020a03191693871693841790557fb7b4557c664a8a4a9a57f5e00f216de044a96f96fc84b70eaa6bd48cb078454190889051600160a060020a03909116815260200160405180910390a35b5b50505b505050565b60035433600160a060020a0390811691161480610687575061068733611237565b5b151561069357600080fd5b818361069f828261079a565b15156106aa57600080fd5b600254600160a060020a038086166000908152600660209081526040808320938a168352929052205485918791429190910390106106e757600080fd5b600160a060020a0380831660009081526006602090815260408083208585168452909152902042905585908116151561071f57600080fd5b600160a060020a03878116600081815260056020526040908190208054600160a060020a031916938a1693841790557fbd1ad05c16aafa75ac8c1d6b8264f47ad9f3045596f667c9476f3f749c018709908b9051600160a060020a03909116815260200160405180910390a35b5b505b50505b50505b505050565b600160a060020a03808316600090815260046020908152604080832093851683529290529081205481901180156107fb575060008054600160a060020a03808616835260046020908152604080852092871685529190529091205442910111155b90505b92915050565b600083600160a060020a038116151561081c57600080fd5b61082461125f565b604051809103906000f080151561083a57600080fd5b60008054600160a060020a038381168084526004602090815260408086208d851687528252808620429590950390945581855260059052928290208054600160a060020a0319168a8316908117909155939550331691907f14e580ab5cd452b772e031536a7c893ec705152c17b3665c6671b382c3ee6266908a9051600160a060020a03909116815260200160405180910390a481600160a060020a031663d7f31eb9856000866040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561094f5780820151818401525b602001610936565b50505050905090810190601f16801561097c5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b151561099c57600080fd5b6102c65a03f115156109ad57600080fd5b5050505b5b505050505050565b600860205260009081526040902054600160a060020a031681565b60035433600160a060020a03908116911614806109f657506109f633611237565b5b1515610a0257600080fd5b8385610a0e8282610d23565b1515610a1957600080fd5b85600160a060020a031663d7f31eb98686866040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a995780820151818401525b602001610a80565b50505050905090810190601f168015610ac65780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1515610ae657600080fd5b6102c65a03f11515610af757600080fd5b5050505b5b50505b5050505050565b60035433600160a060020a0390811691161480610b275750610b2733611237565b5b1515610b3357600080fd5b600160a060020a0380831660009081526005602052604090205483918591811690821614610b6057600080fd5b600254600160a060020a038086166000908152600660209081526040808320938a16835292905220548591879142919091039010610b9d57600080fd5b600160a060020a038083166000908152600660209081526040808320938516835292905220429055610bcf8686610d23565b15610bd957600080fd5b600160a060020a038087166000818152600460209081526040808320948a1680845294909152908190204290557f8672e8532f3edff41d3acf0cd4be6ff900e427461b81d094f0197354471cb3c6908a9051600160a060020a03909116815260200160405180910390a35b5b50505b50505b505050565b80600160a060020a0381161515610c6657600080fd5b600160a060020a033381166000908152600560205260409020541615610c8b57600080fd5b60008054600160a060020a0333811680845260046020908152604080862089851687528252808620429590950390945581855260059052928290208054918616600160a060020a031990921682179055919081907f14e580ab5cd452b772e031536a7c893ec705152c17b3665c6671b382c3ee626690879051600160a060020a03909116815260200160405180910390a45b5b505050565b600160a060020a03808316600090815260046020908152604080832093851683529290529081205481901180156107fb5750600154600160a060020a0380851660009081526004602090815260408083209387168352929052205442910111155b90505b92915050565b60035460009033600160a060020a0390811691161480610db15750610db133611237565b5b1515610dbd57600080fd5b8183610dc98282610d23565b1515610dd457600080fd5b600160a060020a03808516600081815260086020818152604080842080546007845282862095909555929091528154600160a060020a0319169091559216945084917f60e805c5650597523aba29fb00a59c856d925c672bce1ea7d579f03aef3a10ce90889051600160a060020a03909116815260200160405180910390a35b5b50505b505050565b60035433600160a060020a0390811691161480610e7e5750610e7e33611237565b5b1515610e8a57600080fd5b8183610e96828261079a565b1515610ea157600080fd5b600254600160a060020a038086166000908152600660209081526040808320938a16835292905220548591879142919091039010610ede57600080fd5b600160a060020a038083166000908152600660209081526040808320938516835292905220429055610f108686610d23565b15610f1a57600080fd5b600154600160a060020a038088166000818152600460209081526040808320948b168084529490915290819020429490940390935590917f8672e8532f3edff41d3acf0cd4be6ff900e427461b81d094f0197354471cb3c6908a9051600160a060020a03909116815260200160405180910390a35b5b50505b50505b505050565b60035460009033600160a060020a0390811691161480610fbf5750610fbf33611237565b5b1515610fcb57600080fd5b8183610fd7828261079a565b1515610fe257600080fd5b600160a060020a03841660009081526007602052604090205415801590611024575060008054600160a060020a03861682526007602052604090912054429101105b151561102f57600080fd5b600160a060020a03808516600081815260086020818152604080842080546007845282862095909555929091528154600160a060020a0319169091559216945090631a6952309085905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156110b457600080fd5b6102c65a03f115156110c557600080fd5b505050600160a060020a0380851660008181526005602090815260408083208054600160a060020a0319169055600482528083208a8616845290915280822091909155918516917f565ed5a2d5e196b82acb6ff1149b699c2b13169c7d34412d736d3c380de64f3190889051600160a060020a03909116815260200160405180910390a35b5b50505b505050565b60076020526000908152604090205481565b600081600160a060020a038116151561117d57600080fd5b61118561125f565b604051809103906000f080151561119b57600080fd5b60008054600160a060020a038381168084526004602090815260408086208b851687528252808620429590950390945581855260059052928290208054600160a060020a031916888316908117909155939550331691907f14e580ab5cd452b772e031536a7c893ec705152c17b3665c6671b382c3ee626690889051600160a060020a03909116815260200160405180910390a45b5b50505050565b6000602436101561124a5750600061125a565b50600435600160a060020a031681145b919050565b6040516103b88061127083390190560060606040525b60008054600160a060020a03191633600160a060020a03161790555b5b610387806100316000396000f3006060604052361561005f5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631a69523081146100a05780632f54bf6e146100c15780638da5cb5b146100f4578063d7f31eb914610123575b5b33600160a060020a03167f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743460405190815260200160405180910390a25b005b34156100ab57600080fd5b61009e600160a060020a036004351661018a565b005b34156100cc57600080fd5b6100e0600160a060020a03600435166101e7565b604051901515815260200160405180910390f35b34156100ff57600080fd5b6101076101fe565b604051600160a060020a03909116815260200160405180910390f35b341561012e57600080fd5b61009e60048035600160a060020a03169060248035919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061020d95505050505050565b005b610193336101e7565b151561019e57600080fd5b30600160a060020a031681600160a060020a03161415156101e2576000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b5b50565b600054600160a060020a038281169116145b919050565b600054600160a060020a031681565b610216336101e7565b151561022157600080fd5b82600160a060020a0316828260405180828051906020019080838360005b838110156102585780820151818401525b60200161023f565b50505050905090810190601f1680156102855780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876187965a03f19250505015156102a957600080fd5b82600160a060020a03167fc1de93dfa06362c6a616cde73ec17d116c0d588dd1df70f27f91b500de207c41838360405182815260406020820181815290820183818151815260200191508051906020019080838360005b838110156103195780820151818401525b602001610300565b50505050905090810190601f1680156103465780820380516001836020036101000a031916815260200191505b50935050505060405180910390a25b5b5050505600a165627a7a72305820dcb26f0fbb81926e3b3d053ffd1c1260ebb65f5b4166b74f38e53f04234042860029a165627a7a723058202bc36d84a511b64d284e78aaecf9b0dd6e38b033a0bccddb23af4c6c5aeb2de900290000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000001fa4000000000000000000000000000000000000000000000000000000000000004b0000000000000000000000000da8c6dce9e9a85e6f9df7b09b2354da44cb48331

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

0000000000000000000000000000000000000000000000000000000000000e10000000000000000000000000000000000000000000000000000000000001fa4000000000000000000000000000000000000000000000000000000000000004b0000000000000000000000000da8c6dce9e9a85e6f9df7b09b2354da44cb48331

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [1] : 000000000000000000000000000000000000000000000000000000000001fa40
Arg [2] : 00000000000000000000000000000000000000000000000000000000000004b0
Arg [3] : 000000000000000000000000da8c6dce9e9a85e6f9df7b09b2354da44cb48331

Swarm Source

bzzr://2bc36d84a511b64d284e78aaecf9b0dd6e38b033a0bccddb23af4c6c5aeb2de9
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward