ETH Price: $2,128.29 (+7.97%)

Contract

0xBe0701f9D7bB1612e8731e2c0DB1fD8ee4AEcB0a
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xB7b80925...AA6BB32a9
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
ClaimHolderPresigned

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 2018-10-16
*/

// Written by Nick Poulden, Tyler Yasaka, and the Origin Protocol Team.
pragma solidity ^0.4.13;

library ClaimHolderLibrary {
    event ClaimAdded(bytes32 indexed claimId, uint256 indexed topic, uint256 scheme, address indexed issuer, bytes signature, bytes data, string uri);
    event ClaimRemoved(bytes32 indexed claimId, uint256 indexed topic, uint256 scheme, address indexed issuer, bytes signature, bytes data, string uri);

    struct Claim {
        uint256 topic;
        uint256 scheme;
        address issuer; // msg.sender
        bytes signature; // this.address + topic + data
        bytes data;
        string uri;
    }

    struct Claims {
        mapping (bytes32 => Claim) byId;
        mapping (uint256 => bytes32[]) byTopic;
    }

    function addClaim(
        KeyHolderLibrary.KeyHolderData storage _keyHolderData,
        Claims storage _claims,
        uint256 _topic,
        uint256 _scheme,
        address _issuer,
        bytes _signature,
        bytes _data,
        string _uri
    )
        public
        returns (bytes32 claimRequestId)
    {
        if (msg.sender != address(this)) {
            require(KeyHolderLibrary.keyHasPurpose(_keyHolderData, keccak256(abi.encodePacked(msg.sender)), 3), "Sender does not have claim signer key");
        }

        bytes32 claimId = keccak256(abi.encodePacked(_issuer, _topic));

        if (_claims.byId[claimId].issuer != _issuer) {
            _claims.byTopic[_topic].push(claimId);
        }

        _claims.byId[claimId].topic = _topic;
        _claims.byId[claimId].scheme = _scheme;
        _claims.byId[claimId].issuer = _issuer;
        _claims.byId[claimId].signature = _signature;
        _claims.byId[claimId].data = _data;
        _claims.byId[claimId].uri = _uri;

        emit ClaimAdded(
            claimId,
            _topic,
            _scheme,
            _issuer,
            _signature,
            _data,
            _uri
        );

        return claimId;
    }

    function addClaims(
        KeyHolderLibrary.KeyHolderData storage _keyHolderData,
        Claims storage _claims,
        uint256[] _topic,
        address[] _issuer,
        bytes _signature,
        bytes _data,
        uint256[] _offsets
    )
        public
    {
        uint offset = 0;
        for (uint16 i = 0; i < _topic.length; i++) {
            addClaim(
                _keyHolderData,
                _claims,
                _topic[i],
                1,
                _issuer[i],
                getBytes(_signature, (i * 65), 65),
                getBytes(_data, offset, _offsets[i]),
                ""
            );
            offset += _offsets[i];
        }
    }

    function removeClaim(
        KeyHolderLibrary.KeyHolderData storage _keyHolderData,
        Claims storage _claims,
        bytes32 _claimId
    )
        public
        returns (bool success)
    {
        if (msg.sender != address(this)) {
            require(KeyHolderLibrary.keyHasPurpose(_keyHolderData, keccak256(abi.encodePacked(msg.sender)), 1), "Sender does not have management key");
        }

        emit ClaimRemoved(
            _claimId,
            _claims.byId[_claimId].topic,
            _claims.byId[_claimId].scheme,
            _claims.byId[_claimId].issuer,
            _claims.byId[_claimId].signature,
            _claims.byId[_claimId].data,
            _claims.byId[_claimId].uri
        );

        delete _claims.byId[_claimId];
        return true;
    }

    function getClaim(Claims storage _claims, bytes32 _claimId)
        public
        view
        returns(
          uint256 topic,
          uint256 scheme,
          address issuer,
          bytes signature,
          bytes data,
          string uri
        )
    {
        return (
            _claims.byId[_claimId].topic,
            _claims.byId[_claimId].scheme,
            _claims.byId[_claimId].issuer,
            _claims.byId[_claimId].signature,
            _claims.byId[_claimId].data,
            _claims.byId[_claimId].uri
        );
    }

    function getBytes(bytes _str, uint256 _offset, uint256 _length)
        internal
        pure
        returns (bytes)
    {
        bytes memory sig = new bytes(_length);
        uint256 j = 0;
        for (uint256 k = _offset; k < _offset + _length; k++) {
            sig[j] = _str[k];
            j++;
        }
        return sig;
    }
}

contract ERC725 {

    uint256 constant MANAGEMENT_KEY = 1;
    uint256 constant ACTION_KEY = 2;
    uint256 constant CLAIM_SIGNER_KEY = 3;
    uint256 constant ENCRYPTION_KEY = 4;

    event KeyAdded(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType);
    event KeyRemoved(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType);
    event ExecutionRequested(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);
    event Executed(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);
    event Approved(uint256 indexed executionId, bool approved);

    function getKey(bytes32 _key) public view returns(uint256[] purposes, uint256 keyType, bytes32 key);
    function keyHasPurpose(bytes32 _key, uint256 _purpose) public view returns (bool exists);
    function getKeysByPurpose(uint256 _purpose) public view returns(bytes32[] keys);
    function addKey(bytes32 _key, uint256 _purpose, uint256 _keyType) public returns (bool success);
    function removeKey(bytes32 _key, uint256 _purpose) public returns (bool success);
    function execute(address _to, uint256 _value, bytes _data) public returns (uint256 executionId);
    function approve(uint256 _id, bool _approve) public returns (bool success);
}

contract ERC735 {

    event ClaimRequested(uint256 indexed claimRequestId, uint256 indexed topic, uint256 scheme, address indexed issuer, bytes signature, bytes data, string uri);
    event ClaimAdded(bytes32 indexed claimId, uint256 indexed topic, uint256 scheme, address indexed issuer, bytes signature, bytes data, string uri);
    event ClaimRemoved(bytes32 indexed claimId, uint256 indexed topic, uint256 scheme, address indexed issuer, bytes signature, bytes data, string uri);
    event ClaimChanged(bytes32 indexed claimId, uint256 indexed topic, uint256 scheme, address indexed issuer, bytes signature, bytes data, string uri);

    struct Claim {
        uint256 topic;
        uint256 scheme;
        address issuer; // msg.sender
        bytes signature; // this.address + topic + data
        bytes data;
        string uri;
    }

    function getClaim(bytes32 _claimId) public view returns(uint256 topic, uint256 scheme, address issuer, bytes signature, bytes data, string uri);
    function getClaimIdsByTopic(uint256 _topic) public view returns(bytes32[] claimIds);
    function addClaim(uint256 _topic, uint256 _scheme, address issuer, bytes _signature, bytes _data, string _uri) public returns (bytes32 claimRequestId);
    function removeClaim(bytes32 _claimId) public returns (bool success);
}

contract KeyHolder is ERC725 {
    KeyHolderLibrary.KeyHolderData keyHolderData;

    constructor() public {
        KeyHolderLibrary.init(keyHolderData);
    }

    function getKey(bytes32 _key)
        public
        view
        returns(uint256[] purposes, uint256 keyType, bytes32 key)
    {
        return KeyHolderLibrary.getKey(keyHolderData, _key);
    }

    function getKeyPurposes(bytes32 _key)
        public
        view
        returns(uint256[] purposes)
    {
        return KeyHolderLibrary.getKeyPurposes(keyHolderData, _key);
    }

    function getKeysByPurpose(uint256 _purpose)
        public
        view
        returns(bytes32[] _keys)
    {
        return KeyHolderLibrary.getKeysByPurpose(keyHolderData, _purpose);
    }

    function addKey(bytes32 _key, uint256 _purpose, uint256 _type)
        public
        returns (bool success)
    {
        return KeyHolderLibrary.addKey(keyHolderData, _key, _purpose, _type);
    }

    function approve(uint256 _id, bool _approve)
        public
        returns (bool success)
    {
        return KeyHolderLibrary.approve(keyHolderData, _id, _approve);
    }

    function execute(address _to, uint256 _value, bytes _data)
        public
        returns (uint256 executionId)
    {
        return KeyHolderLibrary.execute(keyHolderData, _to, _value, _data);
    }

    function removeKey(bytes32 _key, uint256 _purpose)
        public
        returns (bool success)
    {
        return KeyHolderLibrary.removeKey(keyHolderData, _key, _purpose);
    }

    function keyHasPurpose(bytes32 _key, uint256 _purpose)
        public
        view
        returns(bool exists)
    {
        return KeyHolderLibrary.keyHasPurpose(keyHolderData, _key, _purpose);
    }

}

contract ClaimHolder is KeyHolder, ERC735 {

    ClaimHolderLibrary.Claims claims;

    function addClaim(
        uint256 _topic,
        uint256 _scheme,
        address _issuer,
        bytes _signature,
        bytes _data,
        string _uri
    )
        public
        returns (bytes32 claimRequestId)
    {
        return ClaimHolderLibrary.addClaim(
            keyHolderData,
            claims,
            _topic,
            _scheme,
            _issuer,
            _signature,
            _data,
            _uri
        );
    }

    function addClaims(
        uint256[] _topic,
        address[] _issuer,
        bytes _signature,
        bytes _data,
        uint256[] _offsets
    )
        public
    {
        ClaimHolderLibrary.addClaims(
            keyHolderData,
            claims,
            _topic,
            _issuer,
            _signature,
            _data,
            _offsets
        );
    }

    function removeClaim(bytes32 _claimId) public returns (bool success) {
        return ClaimHolderLibrary.removeClaim(keyHolderData, claims, _claimId);
    }

    function getClaim(bytes32 _claimId)
        public
        view
        returns(
            uint256 topic,
            uint256 scheme,
            address issuer,
            bytes signature,
            bytes data,
            string uri
        )
    {
        return ClaimHolderLibrary.getClaim(claims, _claimId);
    }

    function getClaimIdsByTopic(uint256 _topic)
        public
        view
        returns(bytes32[] claimIds)
    {
        return claims.byTopic[_topic];
    }
}

contract ClaimHolderRegistered is ClaimHolder {

    constructor (
        address _userRegistryAddress
    )
        public
    {
        V00_UserRegistry userRegistry = V00_UserRegistry(_userRegistryAddress);
        userRegistry.registerUser();
    }
}

contract ClaimHolderPresigned is ClaimHolderRegistered {

    constructor(
        address _userRegistryAddress,
        uint256[] _topic,
        address[] _issuer,
        bytes _signature,
        bytes _data,
        uint256[] _offsets
    )
        ClaimHolderRegistered(_userRegistryAddress)
        public
    {
        ClaimHolderLibrary.addClaims(
            keyHolderData,
            claims,
            _topic,
            _issuer,
            _signature,
            _data,
            _offsets
        );
    }
}

library KeyHolderLibrary {
    event KeyAdded(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType);
    event KeyRemoved(bytes32 indexed key, uint256 indexed purpose, uint256 indexed keyType);
    event ExecutionRequested(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);
    event ExecutionFailed(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);
    event Executed(uint256 indexed executionId, address indexed to, uint256 indexed value, bytes data);
    event Approved(uint256 indexed executionId, bool approved);

    struct Key {
        uint256[] purposes; //e.g., MANAGEMENT_KEY = 1, ACTION_KEY = 2, etc.
        uint256 keyType; // e.g. 1 = ECDSA, 2 = RSA, etc.
        bytes32 key;
    }

    struct KeyHolderData {
        uint256 executionNonce;
        mapping (bytes32 => Key) keys;
        mapping (uint256 => bytes32[]) keysByPurpose;
        mapping (uint256 => Execution) executions;
    }

    struct Execution {
        address to;
        uint256 value;
        bytes data;
        bool approved;
        bool executed;
    }

    function init(KeyHolderData storage _keyHolderData)
        public
    {
        bytes32 _key = keccak256(abi.encodePacked(msg.sender));
        _keyHolderData.keys[_key].key = _key;
        _keyHolderData.keys[_key].purposes.push(1);
        _keyHolderData.keys[_key].keyType = 1;
        _keyHolderData.keysByPurpose[1].push(_key);
        emit KeyAdded(_key, 1, 1);
    }

    function getKey(KeyHolderData storage _keyHolderData, bytes32 _key)
        public
        view
        returns(uint256[] purposes, uint256 keyType, bytes32 key)
    {
        return (
            _keyHolderData.keys[_key].purposes,
            _keyHolderData.keys[_key].keyType,
            _keyHolderData.keys[_key].key
        );
    }

    function getKeyPurposes(KeyHolderData storage _keyHolderData, bytes32 _key)
        public
        view
        returns(uint256[] purposes)
    {
        return (_keyHolderData.keys[_key].purposes);
    }

    function getKeysByPurpose(KeyHolderData storage _keyHolderData, uint256 _purpose)
        public
        view
        returns(bytes32[] _keys)
    {
        return _keyHolderData.keysByPurpose[_purpose];
    }

    function addKey(KeyHolderData storage _keyHolderData, bytes32 _key, uint256 _purpose, uint256 _type)
        public
        returns (bool success)
    {
        require(_keyHolderData.keys[_key].key != _key, "Key already exists"); // Key should not already exist
        if (msg.sender != address(this)) {
            require(keyHasPurpose(_keyHolderData, keccak256(abi.encodePacked(msg.sender)), 1), "Sender does not have management key"); // Sender has MANAGEMENT_KEY
        }

        _keyHolderData.keys[_key].key = _key;
        _keyHolderData.keys[_key].purposes.push(_purpose);
        _keyHolderData.keys[_key].keyType = _type;

        _keyHolderData.keysByPurpose[_purpose].push(_key);

        emit KeyAdded(_key, _purpose, _type);

        return true;
    }

    function approve(KeyHolderData storage _keyHolderData, uint256 _id, bool _approve)
        public
        returns (bool success)
    {
        require(keyHasPurpose(_keyHolderData, keccak256(abi.encodePacked(msg.sender)), 2), "Sender does not have action key");
        require(!_keyHolderData.executions[_id].executed, "Already executed");

        emit Approved(_id, _approve);

        if (_approve == true) {
            _keyHolderData.executions[_id].approved = true;
            success = _keyHolderData.executions[_id].to.call(_keyHolderData.executions[_id].data, 0);
            if (success) {
                _keyHolderData.executions[_id].executed = true;
                emit Executed(
                    _id,
                    _keyHolderData.executions[_id].to,
                    _keyHolderData.executions[_id].value,
                    _keyHolderData.executions[_id].data
                );
                return;
            } else {
                emit ExecutionFailed(
                    _id,
                    _keyHolderData.executions[_id].to,
                    _keyHolderData.executions[_id].value,
                    _keyHolderData.executions[_id].data
                );
                return;
            }
        } else {
            _keyHolderData.executions[_id].approved = false;
        }
        return true;
    }

    function execute(KeyHolderData storage _keyHolderData, address _to, uint256 _value, bytes _data)
        public
        returns (uint256 executionId)
    {
        require(!_keyHolderData.executions[_keyHolderData.executionNonce].executed, "Already executed");
        _keyHolderData.executions[_keyHolderData.executionNonce].to = _to;
        _keyHolderData.executions[_keyHolderData.executionNonce].value = _value;
        _keyHolderData.executions[_keyHolderData.executionNonce].data = _data;

        emit ExecutionRequested(_keyHolderData.executionNonce, _to, _value, _data);

        if (keyHasPurpose(_keyHolderData, keccak256(abi.encodePacked(msg.sender)),1) || keyHasPurpose(_keyHolderData, keccak256(abi.encodePacked(msg.sender)),2)) {
            approve(_keyHolderData, _keyHolderData.executionNonce, true);
        }

        _keyHolderData.executionNonce++;
        return _keyHolderData.executionNonce-1;
    }

    function removeKey(KeyHolderData storage _keyHolderData, bytes32 _key, uint256 _purpose)
        public
        returns (bool success)
    {
        if (msg.sender != address(this)) {
            require(keyHasPurpose(_keyHolderData, keccak256(abi.encodePacked(msg.sender)), 1), "Sender does not have management key"); // Sender has MANAGEMENT_KEY
        }

        require(_keyHolderData.keys[_key].key == _key, "No such key");
        emit KeyRemoved(_key, _purpose, _keyHolderData.keys[_key].keyType);

        // Remove purpose from key
        uint256[] storage purposes = _keyHolderData.keys[_key].purposes;
        for (uint i = 0; i < purposes.length; i++) {
            if (purposes[i] == _purpose) {
                purposes[i] = purposes[purposes.length - 1];
                delete purposes[purposes.length - 1];
                purposes.length--;
                break;
            }
        }

        // If no more purposes, delete key
        if (purposes.length == 0) {
            delete _keyHolderData.keys[_key];
        }

        // Remove key from keysByPurpose
        bytes32[] storage keys = _keyHolderData.keysByPurpose[_purpose];
        for (uint j = 0; j < keys.length; j++) {
            if (keys[j] == _key) {
                keys[j] = keys[keys.length - 1];
                delete keys[keys.length - 1];
                keys.length--;
                break;
            }
        }

        return true;
    }

    function keyHasPurpose(KeyHolderData storage _keyHolderData, bytes32 _key, uint256 _purpose)
        public
        view
        returns(bool result)
    {
        bool isThere;
        if (_keyHolderData.keys[_key].key == 0) {
            return false;
        }

        uint256[] storage purposes = _keyHolderData.keys[_key].purposes;
        for (uint i = 0; i < purposes.length; i++) {
            if (purposes[i] <= _purpose) {
                isThere = true;
                break;
            }
        }
        return isThere;
    }
}

contract V00_UserRegistry {
    /*
    * Events
    */

    event NewUser(address _address, address _identity);

    /*
    * Storage
    */

    // Mapping from ethereum wallet to ERC725 identity
    mapping(address => address) public users;

    /*
    * Public functions
    */

    /// @dev registerUser(): Add a user to the registry
    function registerUser()
        public
    {
        users[tx.origin] = msg.sender;
        emit NewUser(tx.origin, msg.sender);
    }

    /// @dev clearUser(): Remove user from the registry
    function clearUser()
        public
    {
        users[msg.sender] = 0;
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_key","type":"bytes32"}],"name":"getKey","outputs":[{"name":"purposes","type":"uint256[]"},{"name":"keyType","type":"uint256"},{"name":"key","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"bytes32"},{"name":"_purpose","type":"uint256"},{"name":"_type","type":"uint256"}],"name":"addKey","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_topic","type":"uint256[]"},{"name":"_issuer","type":"address[]"},{"name":"_signature","type":"bytes"},{"name":"_data","type":"bytes"},{"name":"_offsets","type":"uint256[]"}],"name":"addClaims","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_claimId","type":"bytes32"}],"name":"removeClaim","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_key","type":"bytes32"},{"name":"_purpose","type":"uint256"}],"name":"removeKey","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"},{"name":"_approve","type":"bool"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_topic","type":"uint256"}],"name":"getClaimIdsByTopic","outputs":[{"name":"claimIds","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_purpose","type":"uint256"}],"name":"getKeysByPurpose","outputs":[{"name":"_keys","type":"bytes32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_topic","type":"uint256"},{"name":"_scheme","type":"uint256"},{"name":"_issuer","type":"address"},{"name":"_signature","type":"bytes"},{"name":"_data","type":"bytes"},{"name":"_uri","type":"string"}],"name":"addClaim","outputs":[{"name":"claimRequestId","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"execute","outputs":[{"name":"executionId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_claimId","type":"bytes32"}],"name":"getClaim","outputs":[{"name":"topic","type":"uint256"},{"name":"scheme","type":"uint256"},{"name":"issuer","type":"address"},{"name":"signature","type":"bytes"},{"name":"data","type":"bytes"},{"name":"uri","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_key","type":"bytes32"},{"name":"_purpose","type":"uint256"}],"name":"keyHasPurpose","outputs":[{"name":"exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_key","type":"bytes32"}],"name":"getKeyPurposes","outputs":[{"name":"purposes","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_userRegistryAddress","type":"address"},{"name":"_topic","type":"uint256[]"},{"name":"_issuer","type":"address[]"},{"name":"_signature","type":"bytes"},{"name":"_data","type":"bytes"},{"name":"_offsets","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"claimRequestId","type":"uint256"},{"indexed":true,"name":"topic","type":"uint256"},{"indexed":false,"name":"scheme","type":"uint256"},{"indexed":true,"name":"issuer","type":"address"},{"indexed":false,"name":"signature","type":"bytes"},{"indexed":false,"name":"data","type":"bytes"},{"indexed":false,"name":"uri","type":"string"}],"name":"ClaimRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"claimId","type":"bytes32"},{"indexed":true,"name":"topic","type":"uint256"},{"indexed":false,"name":"scheme","type":"uint256"},{"indexed":true,"name":"issuer","type":"address"},{"indexed":false,"name":"signature","type":"bytes"},{"indexed":false,"name":"data","type":"bytes"},{"indexed":false,"name":"uri","type":"string"}],"name":"ClaimAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"claimId","type":"bytes32"},{"indexed":true,"name":"topic","type":"uint256"},{"indexed":false,"name":"scheme","type":"uint256"},{"indexed":true,"name":"issuer","type":"address"},{"indexed":false,"name":"signature","type":"bytes"},{"indexed":false,"name":"data","type":"bytes"},{"indexed":false,"name":"uri","type":"string"}],"name":"ClaimRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"claimId","type":"bytes32"},{"indexed":true,"name":"topic","type":"uint256"},{"indexed":false,"name":"scheme","type":"uint256"},{"indexed":true,"name":"issuer","type":"address"},{"indexed":false,"name":"signature","type":"bytes"},{"indexed":false,"name":"data","type":"bytes"},{"indexed":false,"name":"uri","type":"string"}],"name":"ClaimChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"key","type":"bytes32"},{"indexed":true,"name":"purpose","type":"uint256"},{"indexed":true,"name":"keyType","type":"uint256"}],"name":"KeyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"key","type":"bytes32"},{"indexed":true,"name":"purpose","type":"uint256"},{"indexed":true,"name":"keyType","type":"uint256"}],"name":"KeyRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"executionId","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"value","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ExecutionRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"executionId","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"value","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"Executed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"executionId","type":"uint256"},{"indexed":false,"name":"approved","type":"bool"}],"name":"Approved","type":"event"}]

0x60806040523480156200001157600080fd5b50604051620016e2380380620016e283398101604081815282516020840151828501516060860151608087015160a08801517f30864be500000000000000000000000000000000000000000000000000000000885260006004890181905296519598948501979385019692850195918501940192889291737d26ae0838c4e15a87e9d3b26b03a0256c7554d8916330864be59160248083019286929190829003018186803b158015620000c357600080fd5b505af4158015620000d8573d6000803e3d6000fd5b5050505081905080600160a060020a0316634d3820eb6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b1580156200013757600080fd5b505af11580156200014c573d6000803e3d6000fd5b5050505050507379b152da4ad8fb774700639bed68a965b044064463428e59ee6000600488888888886040518863ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180888152602001878152602001806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b83811015620001fe578181015183820152602001620001e4565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b838110156200023f57818101518382015260200162000225565b50505050905001868103845289818151815260200191508051906020019080838360005b838110156200027d57818101518382015260200162000263565b50505050905090810190601f168015620002ab5780820380516001836020036101000a031916815260200191505b5086810383528851815288516020918201918a019080838360005b83811015620002e0578181015183820152602001620002c6565b50505050905090810190601f1680156200030e5780820380516001836020036101000a031916815260200191505b508681038252875181528751602091820191808a01910280838360005b83811015620003455781810151838201526020016200032b565b505050509050019c5050505050505050505050505060006040518083038186803b1580156200037357600080fd5b505af415801562000388573d6000803e3d6000fd5b5050505050505050505061134080620003a26000396000f3006080604052600436106100ab5763ffffffff60e060020a60003504166312aaac7081146100b05780631d3812401461012957806321c148f01461015b5780634eee424a146102a057806353d413c5146102b8578063747442d3146102d357806380e9e9e1146102f05780639010f72614610358578063b1a34e0d14610370578063b61d27f61461046a578063c9100bcb146104d3578063d202158d14610656578063fb307b3414610671575b600080fd5b3480156100bc57600080fd5b506100c8600435610689565b60408051602080820185905291810183905260608082528551908201528451909182916080830191878101910280838360005b838110156101135781810151838201526020016100fb565b5050505090500194505050505060405180910390f35b34801561013557600080fd5b506101476004356024356044356107a2565b604080519115158252519081900360200190f35b34801561016757600080fd5b506040805160206004803580820135838102808601850190965280855261029e95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506108589650505050505050565b005b3480156102ac57600080fd5b50610147600435610a72565b3480156102c457600080fd5b50610147600435602435610b1e565b3480156102df57600080fd5b506101476004356024351515610bcc565b3480156102fc57600080fd5b50610308600435610c48565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034457818101518382015260200161032c565b505050509050019250505060405180910390f35b34801561036457600080fd5b50610308600435610cab565b34801561037c57600080fd5b50604080516020601f606435600481810135928301849004840285018401909552818452610458948035946024803595600160a060020a0360443516953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610d999650505050505050565b60408051918252519081900360200190f35b34801561047657600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610458948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610f909650505050505050565b3480156104df57600080fd5b506104eb600435611071565b6040518087815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561055457818101518382015260200161053c565b50505050905090810190601f1680156105815780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156105b457818101518382015260200161059c565b50505050905090810190601f1680156105e15780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156106145781810151838201526020016105fc565b50505050905090810190601f1680156106415780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561066257600080fd5b50610147600435602435611226565b34801561067d57600080fd5b506103086004356112a1565b604080517fb01a9fb3000000000000000000000000000000000000000000000000000000008152600060048201819052602482018490529151606092918291737d26ae0838c4e15a87e9d3b26b03a0256c7554d89163b01a9fb39160448083019286929190829003018186803b15801561070257600080fd5b505af4158015610716573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561073f57600080fd5b81019080805164010000000081111561075757600080fd5b8201602081018481111561076a57600080fd5b815185602082028301116401000000008211171561078757600080fd5b50506020820151604090920151909891975095509350505050565b604080517f5d601c3a0000000000000000000000000000000000000000000000000000000081526000600482018190526024820186905260448201859052606482018490529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d891635d601c3a916084808301926020929190829003018186803b15801561082457600080fd5b505af4158015610838573d6000803e3d6000fd5b505050506040513d602081101561084e57600080fd5b5051949350505050565b7379b152da4ad8fb774700639bed68a965b044064463428e59ee6000600488888888886040518863ffffffff1660e060020a02815260040180888152602001878152602001806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156108e95781810151838201526020016108d1565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b83811015610928578181015183820152602001610910565b50505050905001868103845289818151815260200191508051906020019080838360005b8381101561096457818101518382015260200161094c565b50505050905090810190601f1680156109915780820380516001836020036101000a031916815260200191505b5086810383528851815288516020918201918a019080838360005b838110156109c45781810151838201526020016109ac565b50505050905090810190601f1680156109f15780820380516001836020036101000a031916815260200191505b508681038252875181528751602091820191808a01910280838360005b83811015610a26578181015183820152602001610a0e565b505050509050019c5050505050505050505050505060006040518083038186803b158015610a5357600080fd5b505af4158015610a67573d6000803e3d6000fd5b505050505050505050565b604080517f5c02fae10000000000000000000000000000000000000000000000000000000081526000600482810182905260248301526044820184905291517379b152da4ad8fb774700639bed68a965b044064491635c02fae1916064808301926020929190829003018186803b158015610aec57600080fd5b505af4158015610b00573d6000803e3d6000fd5b505050506040513d6020811015610b1657600080fd5b505192915050565b604080517f3f47616d00000000000000000000000000000000000000000000000000000000815260006004820181905260248201859052604482018490529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d891633f47616d916064808301926020929190829003018186803b158015610b9957600080fd5b505af4158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519392505050565b604080517f67d4865f0000000000000000000000000000000000000000000000000000000081526000600482018190526024820185905283151560448301529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d8916367d4865f916064808301926020929190829003018186803b158015610b9957600080fd5b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610c9f57602002820191906000526020600020905b81548152600190910190602001808311610c8a575b50505050509050919050565b6060737d26ae0838c4e15a87e9d3b26b03a0256c7554d863746199f96000846040518363ffffffff1660e060020a028152600401808381526020018281526020019250505060006040518083038186803b158015610d0857600080fd5b505af4158015610d1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610d4557600080fd5b810190808051640100000000811115610d5d57600080fd5b82016020810184811115610d7057600080fd5b8151856020820283011164010000000082111715610d8d57600080fd5b50909695505050505050565b60007379b152da4ad8fb774700639bed68a965b044064463bd2d0c28600060048a8a8a8a8a8a6040518963ffffffff1660e060020a0281526004018089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015610e46578181015183820152602001610e2e565b50505050905090810190601f168015610e735780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015610ea6578181015183820152602001610e8e565b50505050905090810190601f168015610ed35780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b83811015610f06578181015183820152602001610eee565b50505050905090810190601f168015610f335780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060206040518083038186803b158015610f5957600080fd5b505af4158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b5051979650505050505050565b6000737d26ae0838c4e15a87e9d3b26b03a0256c7554d863e9356c6f60008686866040518563ffffffff1660e060020a0281526004018085815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561102457818101518382015260200161100c565b50505050905090810190601f1680156110515780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038186803b15801561082457600080fd5b600080600060608060607379b152da4ad8fb774700639bed68a965b0440644638522d0eb6004896040518363ffffffff1660e060020a0281526004018083815260200182600019166000191681526020019250505060006040518083038186803b1580156110de57600080fd5b505af41580156110f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260c081101561111b57600080fd5b815160208301516040840151606085018051939592949193918301929164010000000081111561114a57600080fd5b8201602081018481111561115d57600080fd5b815164010000000081118282018710171561117757600080fd5b5050929190602001805164010000000081111561119357600080fd5b820160208101848111156111a657600080fd5b81516401000000008111828201871017156111c057600080fd5b505092919060200180516401000000008111156111dc57600080fd5b820160208101848111156111ef57600080fd5b815164010000000081118282018710171561120957600080fd5b505092919050505095509550955095509550955091939550919395565b604080517fd8188a4000000000000000000000000000000000000000000000000000000000815260006004820181905260248201859052604482018490529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d89163d8188a40916064808301926020929190829003018186803b158015610b9957600080fd5b604080517f0f982bac000000000000000000000000000000000000000000000000000000008152600060048201819052602482018490529151606092737d26ae0838c4e15a87e9d3b26b03a0256c7554d892630f982bac9260448083019392829003018186803b158015610d0857600080fd00a165627a7a723058204695574c5651e91aec145f839a14c41ab9d29e47b770841930742ee27c6ed3c50029000000000000000000000000a4428439ec214cc68240552ec93298d1da39111400000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000b000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3bd3979aabb1cf2afb55dc2ea4af6abc8373b7a7a4051a1a04e9847b136d73f9e744c792112cc1c2e61826a7f90bb188f1e10b49d8cc1b94861503256b00420971bb7781c2eec904b67a2f10cf93f385bdad4d34940042642f9dbf158dd08950a0f11b060d2e90da78973b07aa747876efbd34ab5fe75e2c56178f59eb13b8d5adb1b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000605c0d26271c07e598a446bc20c482af07f59a8ea8df961f17f4e4ed387fde6b9fcaa54e1b0a1dbfc8e1ecf2baef72247781ea07547f878d8b29b21543d990a3659f9fd1e46d9ca1343d71ce80c5e83f22b6ca4df369a7985891d95321e54e286f0000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000020

Deployed Bytecode

0x6080604052600436106100ab5763ffffffff60e060020a60003504166312aaac7081146100b05780631d3812401461012957806321c148f01461015b5780634eee424a146102a057806353d413c5146102b8578063747442d3146102d357806380e9e9e1146102f05780639010f72614610358578063b1a34e0d14610370578063b61d27f61461046a578063c9100bcb146104d3578063d202158d14610656578063fb307b3414610671575b600080fd5b3480156100bc57600080fd5b506100c8600435610689565b60408051602080820185905291810183905260608082528551908201528451909182916080830191878101910280838360005b838110156101135781810151838201526020016100fb565b5050505090500194505050505060405180910390f35b34801561013557600080fd5b506101476004356024356044356107a2565b604080519115158252519081900360200190f35b34801561016757600080fd5b506040805160206004803580820135838102808601850190965280855261029e95369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a99890198929750908201955093508392508501908490808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750506040805187358901803560208181028481018201909552818452989b9a9989019892975090820195509350839250850190849080828437509497506108589650505050505050565b005b3480156102ac57600080fd5b50610147600435610a72565b3480156102c457600080fd5b50610147600435602435610b1e565b3480156102df57600080fd5b506101476004356024351515610bcc565b3480156102fc57600080fd5b50610308600435610c48565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561034457818101518382015260200161032c565b505050509050019250505060405180910390f35b34801561036457600080fd5b50610308600435610cab565b34801561037c57600080fd5b50604080516020601f606435600481810135928301849004840285018401909552818452610458948035946024803595600160a060020a0360443516953695608494930191819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a99988101979196509182019450925082915084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610d999650505050505050565b60408051918252519081900360200190f35b34801561047657600080fd5b50604080516020600460443581810135601f8101849004840285018401909552848452610458948235600160a060020a0316946024803595369594606494920191908190840183828082843750949750610f909650505050505050565b3480156104df57600080fd5b506104eb600435611071565b6040518087815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b8381101561055457818101518382015260200161053c565b50505050905090810190601f1680156105815780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b838110156105b457818101518382015260200161059c565b50505050905090810190601f1680156105e15780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b838110156106145781810151838201526020016105fc565b50505050905090810190601f1680156106415780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390f35b34801561066257600080fd5b50610147600435602435611226565b34801561067d57600080fd5b506103086004356112a1565b604080517fb01a9fb3000000000000000000000000000000000000000000000000000000008152600060048201819052602482018490529151606092918291737d26ae0838c4e15a87e9d3b26b03a0256c7554d89163b01a9fb39160448083019286929190829003018186803b15801561070257600080fd5b505af4158015610716573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052606081101561073f57600080fd5b81019080805164010000000081111561075757600080fd5b8201602081018481111561076a57600080fd5b815185602082028301116401000000008211171561078757600080fd5b50506020820151604090920151909891975095509350505050565b604080517f5d601c3a0000000000000000000000000000000000000000000000000000000081526000600482018190526024820186905260448201859052606482018490529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d891635d601c3a916084808301926020929190829003018186803b15801561082457600080fd5b505af4158015610838573d6000803e3d6000fd5b505050506040513d602081101561084e57600080fd5b5051949350505050565b7379b152da4ad8fb774700639bed68a965b044064463428e59ee6000600488888888886040518863ffffffff1660e060020a02815260040180888152602001878152602001806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b838110156108e95781810151838201526020016108d1565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b83811015610928578181015183820152602001610910565b50505050905001868103845289818151815260200191508051906020019080838360005b8381101561096457818101518382015260200161094c565b50505050905090810190601f1680156109915780820380516001836020036101000a031916815260200191505b5086810383528851815288516020918201918a019080838360005b838110156109c45781810151838201526020016109ac565b50505050905090810190601f1680156109f15780820380516001836020036101000a031916815260200191505b508681038252875181528751602091820191808a01910280838360005b83811015610a26578181015183820152602001610a0e565b505050509050019c5050505050505050505050505060006040518083038186803b158015610a5357600080fd5b505af4158015610a67573d6000803e3d6000fd5b505050505050505050565b604080517f5c02fae10000000000000000000000000000000000000000000000000000000081526000600482810182905260248301526044820184905291517379b152da4ad8fb774700639bed68a965b044064491635c02fae1916064808301926020929190829003018186803b158015610aec57600080fd5b505af4158015610b00573d6000803e3d6000fd5b505050506040513d6020811015610b1657600080fd5b505192915050565b604080517f3f47616d00000000000000000000000000000000000000000000000000000000815260006004820181905260248201859052604482018490529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d891633f47616d916064808301926020929190829003018186803b158015610b9957600080fd5b505af4158015610bad573d6000803e3d6000fd5b505050506040513d6020811015610bc357600080fd5b50519392505050565b604080517f67d4865f0000000000000000000000000000000000000000000000000000000081526000600482018190526024820185905283151560448301529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d8916367d4865f916064808301926020929190829003018186803b158015610b9957600080fd5b600081815260056020908152604091829020805483518184028101840190945280845260609392830182828015610c9f57602002820191906000526020600020905b81548152600190910190602001808311610c8a575b50505050509050919050565b6060737d26ae0838c4e15a87e9d3b26b03a0256c7554d863746199f96000846040518363ffffffff1660e060020a028152600401808381526020018281526020019250505060006040518083038186803b158015610d0857600080fd5b505af4158015610d1c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015610d4557600080fd5b810190808051640100000000811115610d5d57600080fd5b82016020810184811115610d7057600080fd5b8151856020820283011164010000000082111715610d8d57600080fd5b50909695505050505050565b60007379b152da4ad8fb774700639bed68a965b044064463bd2d0c28600060048a8a8a8a8a8a6040518963ffffffff1660e060020a0281526004018089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a03168152602001806020018060200180602001848103845287818151815260200191508051906020019080838360005b83811015610e46578181015183820152602001610e2e565b50505050905090810190601f168015610e735780820380516001836020036101000a031916815260200191505b50848103835286518152865160209182019188019080838360005b83811015610ea6578181015183820152602001610e8e565b50505050905090810190601f168015610ed35780820380516001836020036101000a031916815260200191505b50848103825285518152855160209182019187019080838360005b83811015610f06578181015183820152602001610eee565b50505050905090810190601f168015610f335780820380516001836020036101000a031916815260200191505b509b50505050505050505050505060206040518083038186803b158015610f5957600080fd5b505af4158015610f6d573d6000803e3d6000fd5b505050506040513d6020811015610f8357600080fd5b5051979650505050505050565b6000737d26ae0838c4e15a87e9d3b26b03a0256c7554d863e9356c6f60008686866040518563ffffffff1660e060020a0281526004018085815260200184600160a060020a0316600160a060020a0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561102457818101518382015260200161100c565b50505050905090810190601f1680156110515780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038186803b15801561082457600080fd5b600080600060608060607379b152da4ad8fb774700639bed68a965b0440644638522d0eb6004896040518363ffffffff1660e060020a0281526004018083815260200182600019166000191681526020019250505060006040518083038186803b1580156110de57600080fd5b505af41580156110f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260c081101561111b57600080fd5b815160208301516040840151606085018051939592949193918301929164010000000081111561114a57600080fd5b8201602081018481111561115d57600080fd5b815164010000000081118282018710171561117757600080fd5b5050929190602001805164010000000081111561119357600080fd5b820160208101848111156111a657600080fd5b81516401000000008111828201871017156111c057600080fd5b505092919060200180516401000000008111156111dc57600080fd5b820160208101848111156111ef57600080fd5b815164010000000081118282018710171561120957600080fd5b505092919050505095509550955095509550955091939550919395565b604080517fd8188a4000000000000000000000000000000000000000000000000000000000815260006004820181905260248201859052604482018490529151737d26ae0838c4e15a87e9d3b26b03a0256c7554d89163d8188a40916064808301926020929190829003018186803b158015610b9957600080fd5b604080517f0f982bac000000000000000000000000000000000000000000000000000000008152600060048201819052602482018490529151606092737d26ae0838c4e15a87e9d3b26b03a0256c7554d892630f982bac9260448083019392829003018186803b158015610d0857600080fd00a165627a7a723058204695574c5651e91aec145f839a14c41ab9d29e47b770841930742ee27c6ed3c50029

Libraries Used

KeyHolderLibrary : 0x7d26ae0838c4e15a87e9d3b26b03a0256c7554d8Unverified
ClaimHolderLibrary : 0x79b152da4ad8fb774700639bed68a965b0440644Unverified

Swarm Source

bzzr://4695574c5651e91aec145f839a14c41ab9d29e47b770841930742ee27c6ed3c5

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

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.