Contract 0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb

 

TxHash Block Age From To Value [TxFee]
0xf612f15f357f45e2ee4b96748e6c3909302cff7aba2bb7bf8a4a03632879493e692816359 days 8 hrs agoGemini_1  IN   0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb0 Ether0.00066369875
0x3ee482d3abdac19920d04d6fad100109d87c69ad5bb5976bc1a4f083517b5c44683872274 days 6 hrs agoGemini_1  IN   0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb0 Ether0.00055801
0xa4c8cc5b68351b76c3f8182c7a7516b46257c16c83f5c03c0606c886ba1da348680298180 days 4 hrs agoGemini_1  IN   0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb0 Ether0.00128181
0x6f483707f129fcb795c10061baab90cf5c258592db0f34b9b2f59828ddf9232d680296880 days 4 hrs agoGemini_1  IN   0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb0 Ether0.00128181
0x6e630097ece441a940e1c7b2a761879b2a1c6009a61f4cf6b89227bbb8030fea680295480 days 4 hrs agoGemini_1  IN   0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb0 Ether0.00128181
0x3aa8bcc633f2aedf44d2a4589fbef18d0eb5d0db0100cbc007134cc6460fde58680294080 days 4 hrs agoGemini_1  IN   0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb0 Ether0.00128181
0x5cb096618ea6684e96b17661dc1a5d69ad3039ff038449b0fcec4549947e8ffc680291980 days 4 hrs agoGemini_1  IN   0x1789cca7430aacbdb7c89f9b5695a9c06e4764eb0 Ether0.00143181
0xafe7cbbcc615bb97a213bbcf8cdf123a4d734eb69789bb9e17a46a6cc77da6496301731162 days 7 hrs ago0x4c2f150fc90fed3d8281114c2349f1906cde5346  IN   Contract Creation0 Ether0.022385286
[ Download CSV Export 

Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
Warning: The compiled contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) Solidity Compiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: Custodian
Compiler Version: v0.4.21+commit.dfe3193c
Optimization Enabled: Yes
Runs (Optimizer):  200


Contract Source Code
pragma solidity ^0.4.21;

/** @title  A dual control contract.
  *
  * @notice  A general purpose contract that implements dual control over
  * co-operating contracts through a callback mechanism.
  *
  * @dev  This contract implements dual control through a 2-of-N
  * threshold multi-signature scheme. The contract recognizes a set of N signers,
  * and will unlock requests with signatures from any distinct pair of them.
  * This contract signals the unlocking through a co-operative callback
  * scheme.
  * This contract also provides time lock and revocation features.
  * Requests made by a 'primary' account have a default time lock applied.
  * All other request must pay a 1 ETH stake and have an extended time lock
  * applied.
  * A request that is completed will prevent all previous pending requests
  * that share the same callback from being completed: this is the
  * revocation feature.
  *
  * @author  Gemini Trust Company, LLC
  */
contract Custodian {

    // TYPES
    /** @dev  The `Request` struct stores a pending unlocking.
      * `callbackAddress` and `callbackSelector` are the data required to
      * make a callback. The custodian completes the process by
      * calling `callbackAddress.call(callbackSelector, lockId)`, which
      * signals to the contract co-operating with the Custodian that
      * the 2-of-N signatures have been provided and verified.
      */
    struct Request {
        bytes32 lockId;
        bytes4 callbackSelector; // bytes4 and address can be packed into 1 word
        address callbackAddress;
        uint256 idx;
        uint256 timestamp;
        bool extended;
    }

    // EVENTS
    /// @dev  Emitted by successful `requestUnlock` calls.
    event Requested(
        bytes32 _lockId,
        address _callbackAddress,
        bytes4  _callbackSelector,
        uint256 _nonce,
        address _whitelistedAddress,
        bytes32 _requestMsgHash,
        uint256 _timeLockExpiry
    );

    /// @dev  Emitted by `completeUnlock` calls on requests in the time-locked state.
    event TimeLocked(
        uint256 _timeLockExpiry,
        bytes32 _requestMsgHash
    );

    /// @dev  Emitted by successful `completeUnlock` calls.
    event Completed(
        bytes32 _lockId,
        bytes32 _requestMsgHash,
        address _signer1,
        address _signer2
    );

    /// @dev  Emitted by `completeUnlock` calls where the callback failed.
    event Failed(
        bytes32 _lockId,
        bytes32 _requestMsgHash,
        address _signer1,
        address _signer2
    );

    /// @dev  Emitted by successful `extendRequestTimeLock` calls.
    event TimeLockExtended(
        uint256 _timeLockExpiry,
        bytes32 _requestMsgHash
    );

    // MEMBERS
    /** @dev  The count of all requests.
      * This value is used as a nonce, incorporated into the request hash.
      */
    uint256 public requestCount;

    /// @dev  The set of signers: signatures from two signers unlock a pending request.
    mapping (address => bool) public signerSet;

    /// @dev  The map of request hashes to pending requests.
    mapping (bytes32 => Request) public requestMap;

    /// @dev  The map of callback addresses to callback selectors to request indexes.
    mapping (address => mapping (bytes4 => uint256)) public lastCompletedIdxs;

    /** @dev  The default period of time (in seconds) to time-lock requests.
      * All requests will be subject to this default time lock, and the duration
      * is fixed at contract creation.
      */
    uint256 public defaultTimeLock;

    /** @dev  The extended period of time (in seconds) to time-lock requests.
      * Requests not from the primary account are subject to this time lock.
      * The primary account may also elect to extend the time lock on requests
      * that originally received the default.
      */
    uint256 public extendedTimeLock;

    /// @dev  The primary account is the privileged account for making requests.
    address public primary;

    // CONSTRUCTOR
    function Custodian(
        address[] _signers,
        uint256 _defaultTimeLock,
        uint256 _extendedTimeLock,
        address _primary
    )
        public
    {
        // check for at least two `_signers`
        require(_signers.length >= 2);

        // validate time lock params
        require(_defaultTimeLock <= _extendedTimeLock);
        defaultTimeLock = _defaultTimeLock;
        extendedTimeLock = _extendedTimeLock;

        primary = _primary;

        // explicitly initialize `requestCount` to zero
        requestCount = 0;
        // turn the array into a set
        for (uint i = 0; i < _signers.length; i++) {
            // no zero addresses or duplicates
            require(_signers[i] != address(0) && !signerSet[_signers[i]]);
            signerSet[_signers[i]] = true;
        }
    }

    // MODIFIERS
    modifier onlyPrimary {
        require(msg.sender == primary);
        _;
    }

    // METHODS
    /** @notice  Requests an unlocking with a lock identifier and a callback.
      *
      * @dev  If called by an account other than the primary a 1 ETH stake
      * must be paid. This is an anti-spam measure. As well as the callback
      * and the lock identifier parameters a 'whitelisted address' is required
      * for compatibility with existing signature schemes.
      *
      * @param  _lockId  The identifier of a pending request in a co-operating contract.
      * @param  _callbackAddress  The address of a co-operating contract.
      * @param  _callbackSelector  The function selector of a function within
      * the co-operating contract at address `_callbackAddress`.
      * @param  _whitelistedAddress  An address whitelisted in existing
      * offline control protocols.
      *
      * @return  requestMsgHash  The hash of a request message to be signed.
      */
    function requestUnlock(
        bytes32 _lockId,
        address _callbackAddress,
        bytes4 _callbackSelector,
        address _whitelistedAddress
    )
        public
        payable
        returns (bytes32 requestMsgHash)
    {
        require(msg.sender == primary || msg.value >= 1 ether);

        // disallow using a zero value for the callback address
        require(_callbackAddress != address(0));

        uint256 requestIdx = ++requestCount;
        // compute a nonce value
        // - the blockhash prevents prediction of future nonces
        // - the address of this contract prevents conflicts with co-operating contracts using this scheme
        // - the counter prevents conflicts arising from multiple txs within the same block
        uint256 nonce = uint256(keccak256(block.blockhash(block.number - 1), address(this), requestIdx));

        requestMsgHash = keccak256(nonce, _whitelistedAddress, uint256(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF));

        requestMap[requestMsgHash] = Request({
            lockId: _lockId,
            callbackSelector: _callbackSelector,
            callbackAddress: _callbackAddress,
            idx: requestIdx,
            timestamp: block.timestamp,
            extended: false
        });

        // compute the expiry time
        uint256 timeLockExpiry = block.timestamp;
        if (msg.sender == primary) {
            timeLockExpiry += defaultTimeLock;
        } else {
            timeLockExpiry += extendedTimeLock;

            // any sender that is not the creator will get the extended time lock
            requestMap[requestMsgHash].extended = true;
        }

        emit Requested(_lockId, _callbackAddress, _callbackSelector, nonce, _whitelistedAddress, requestMsgHash, timeLockExpiry);
    }

    /** @notice  Completes a pending unlocking with two signatures.
      *
      * @dev  Given a request message hash as two signatures of it from
      * two distinct signers in the signer set, this function completes the
      * unlocking of the pending request by executing the callback.
      *
      * @param  _requestMsgHash  The request message hash of a pending request.
      * @param  _recoveryByte1  The public key recovery byte (27 or 28)
      * @param  _ecdsaR1  The R component of an ECDSA signature (R, S) pair
      * @param  _ecdsaS1  The S component of an ECDSA signature (R, S) pair
      * @param  _recoveryByte2  The public key recovery byte (27 or 28)
      * @param  _ecdsaR2  The R component of an ECDSA signature (R, S) pair
      * @param  _ecdsaS2  The S component of an ECDSA signature (R, S) pair
      *
      * @return  success  True if the callback successfully executed.
      */
    function completeUnlock(
        bytes32 _requestMsgHash,
        uint8 _recoveryByte1, bytes32 _ecdsaR1, bytes32 _ecdsaS1,
        uint8 _recoveryByte2, bytes32 _ecdsaR2, bytes32 _ecdsaS2
    )
        public
        returns (bool success)
    {
        Request storage request = requestMap[_requestMsgHash];

        // copy storage to locals before `delete`
        bytes32 lockId = request.lockId;
        address callbackAddress = request.callbackAddress;
        bytes4 callbackSelector = request.callbackSelector;

        // failing case of the lookup if the callback address is zero
        require(callbackAddress != address(0));

        // reject confirms of earlier withdrawals buried under later confirmed withdrawals
        require(request.idx > lastCompletedIdxs[callbackAddress][callbackSelector]);

        address signer1 = ecrecover(_requestMsgHash, _recoveryByte1, _ecdsaR1, _ecdsaS1);
        require(signerSet[signer1]);

        address signer2 = ecrecover(_requestMsgHash, _recoveryByte2, _ecdsaR2, _ecdsaS2);
        require(signerSet[signer2]);
        require(signer1 != signer2);

        if (request.extended && ((block.timestamp - request.timestamp) < extendedTimeLock)) {
            emit TimeLocked(request.timestamp + extendedTimeLock, _requestMsgHash);
            return false;
        } else if ((block.timestamp - request.timestamp) < defaultTimeLock) {
            emit TimeLocked(request.timestamp + defaultTimeLock, _requestMsgHash);
            return false;
        } else {
            if (address(this).balance > 0) {
                // reward sender with anti-spam payments
                // ignore send success (assign to `success` but this will be overwritten)
                success = msg.sender.send(address(this).balance);
            }

            // raise the waterline for the last completed unlocking
            lastCompletedIdxs[callbackAddress][callbackSelector] = request.idx;
            // and delete the request
            delete requestMap[_requestMsgHash];

            // invoke callback
            success = callbackAddress.call(callbackSelector, lockId);

            if (success) {
                emit Completed(lockId, _requestMsgHash, signer1, signer2);
            } else {
                emit Failed(lockId, _requestMsgHash, signer1, signer2);
            }
        }
    }

    /** @notice  Reclaim the storage of a pending request that is uncompleteable.
      *
      * @dev  If a pending request shares the callback (address and selector) of
      * a later request has has been completed, then the request can no longer
      * be completed. This function will reclaim the contract storage of the
      * pending request.
      *
      * @param  _requestMsgHash  The request message hash of a pending request.
      */
    function deleteUncompletableRequest(bytes32 _requestMsgHash) public {
        Request storage request = requestMap[_requestMsgHash];

        uint256 idx = request.idx;

        require(0 < idx && idx < lastCompletedIdxs[request.callbackAddress][request.callbackSelector]);

        delete requestMap[_requestMsgHash];
    }

    /** @notice  Extend the time lock of a pending request.
      *
      * @dev  Requests made by the primary account receive the default time lock.
      * This function allows the primary account to apply the extended time lock
      * to one its own requests.
      *
      * @param  _requestMsgHash  The request message hash of a pending request.
      */
    function extendRequestTimeLock(bytes32 _requestMsgHash) public onlyPrimary {
        Request storage request = requestMap[_requestMsgHash];

        // reject ‘null’ results from the map lookup
        // this can only be the case if an unknown `_requestMsgHash` is received
        require(request.callbackAddress != address(0));

        // `extendRequestTimeLock` must be idempotent
        require(request.extended != true);

        // set the `extended` flag; note that this is never unset
        request.extended = true;

        emit TimeLockExtended(request.timestamp + extendedTimeLock, _requestMsgHash);
    }
}

Contract ABI
[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"signerSet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_requestMsgHash","type":"bytes32"},{"name":"_recoveryByte1","type":"uint8"},{"name":"_ecdsaR1","type":"bytes32"},{"name":"_ecdsaS1","type":"bytes32"},{"name":"_recoveryByte2","type":"uint8"},{"name":"_ecdsaR2","type":"bytes32"},{"name":"_ecdsaS2","type":"bytes32"}],"name":"completeUnlock","outputs":[{"name":"success","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"requestCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"defaultTimeLock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_requestMsgHash","type":"bytes32"}],"name":"extendRequestTimeLock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_lockId","type":"bytes32"},{"name":"_callbackAddress","type":"address"},{"name":"_callbackSelector","type":"bytes4"},{"name":"_whitelistedAddress","type":"address"}],"name":"requestUnlock","outputs":[{"name":"requestMsgHash","type":"bytes32"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"primary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"extendedTimeLock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"requestMap","outputs":[{"name":"lockId","type":"bytes32"},{"name":"callbackSelector","type":"bytes4"},{"name":"callbackAddress","type":"address"},{"name":"idx","type":"uint256"},{"name":"timestamp","type":"uint256"},{"name":"extended","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"bytes4"}],"name":"lastCompletedIdxs","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_requestMsgHash","type":"bytes32"}],"name":"deleteUncompletableRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_signers","type":"address[]"},{"name":"_defaultTimeLock","type":"uint256"},{"name":"_extendedTimeLock","type":"uint256"},{"name":"_primary","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_callbackAddress","type":"address"},{"indexed":false,"name":"_callbackSelector","type":"bytes4"},{"indexed":false,"name":"_nonce","type":"uint256"},{"indexed":false,"name":"_whitelistedAddress","type":"address"},{"indexed":false,"name":"_requestMsgHash","type":"bytes32"},{"indexed":false,"name":"_timeLockExpiry","type":"uint256"}],"name":"Requested","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_timeLockExpiry","type":"uint256"},{"indexed":false,"name":"_requestMsgHash","type":"bytes32"}],"name":"TimeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_requestMsgHash","type":"bytes32"},{"indexed":false,"name":"_signer1","type":"address"},{"indexed":false,"name":"_signer2","type":"address"}],"name":"Completed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_lockId","type":"bytes32"},{"indexed":false,"name":"_requestMsgHash","type":"bytes32"},{"indexed":false,"name":"_signer1","type":"address"},{"indexed":false,"name":"_signer2","type":"address"}],"name":"Failed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_timeLockExpiry","type":"uint256"},{"indexed":false,"name":"_requestMsgHash","type":"bytes32"}],"name":"TimeLockExtended","type":"event"}]

Contract Creation Code
6060604052341561000f57600080fd5b604051610d3d380380610d3d83398101604052808051820191906020018051919060200180519190602001805191506000905060028551101561005157600080fd5b8284111561005e57600080fd5b506004839055600582905560068054600160a060020a031916600160a060020a03831617905560008080555b845181101561014c5760008582815181106100a157fe5b90602001906020020151600160a060020a0316141580156100f65750600160008683815181106100cd57fe5b90602001906020020151600160a060020a0316815260208101919091526040016000205460ff16155b151561010157600080fd5b600180600087848151811061011257fe5b90602001906020020151600160a060020a031681526020810191909152604001600020805460ff191691151591909117905560010161008a565b5050505050610bdd806101606000396000f3006060604052600436106100955763ffffffff60e060020a6000350416631d972d41811461009a5780633b3d5b88146100cd5780635badbe4c146100fd5780639c36e14114610122578063a5ee79d314610135578063a706a2e21461014d578063c6dbdf6114610178578063c8ccaebc146101a7578063d4ecba4f146101ba578063da4b667214610220578063ea21d12d1461024c575b600080fd5b34156100a557600080fd5b6100b9600160a060020a0360043516610262565b604051901515815260200160405180910390f35b34156100d857600080fd5b6100b960043560ff60243581169060443590606435906084351660a43560c435610277565b341561010857600080fd5b610110610738565b60405190815260200160405180910390f35b341561012d57600080fd5b61011061073e565b341561014057600080fd5b61014b600435610744565b005b610110600435600160a060020a03602435811690600160e060020a03196044351690606435166107ff565b341561018357600080fd5b61018b610a74565b604051600160a060020a03909116815260200160405180910390f35b34156101b257600080fd5b610110610a83565b34156101c557600080fd5b6101d0600435610a89565b604051958652600160e060020a03199094166020860152600160a060020a039092166040808601919091526060850191909152608084019190915290151560a083015260c0909101905180910390f35b341561022b57600080fd5b610110600160a060020a0360043516600160e060020a031960243516610ad3565b341561025757600080fd5b61014b600435610af0565b60016020526000908152604090205460ff1681565b600087815260026020526040812080546001820154600160a060020a036401000000008204169060e060020a0284808315156102b257600080fd5b600160a060020a0384166000908152600360209081526040808320600160e060020a0319871684529091529020546002870154116102ef57600080fd5b60018e8e8e8e6040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af1151561034757600080fd5b505060206040510351600160a060020a03811660009081526001602052604090205490925060ff16151561037a57600080fd5b60018e8b8b8b6040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156103d257600080fd5b505060206040510351600160a060020a03811660009081526001602052604090205490915060ff16151561040557600080fd5b600160a060020a03828116908216141561041e57600080fd5b600486015460ff168015610439575060055486600301544203105b15610489577f3799203e067f005a6c8f34114ec2a3c13028f7059ad4e15694497a8428eddfc06005548760030154018f60405191825260208201526040908101905180910390a160009650610727565b6004548660030154420310156104e4577f3799203e067f005a6c8f34114ec2a3c13028f7059ad4e15694497a8428eddfc06004548760030154018f60405191825260208201526040908101905180910390a160009650610727565b600030600160a060020a031631111561052b5733600160a060020a03166108fc30600160a060020a0316319081150290604051600060405180830381858888f19a50505050505b85600201546003600086600160a060020a0316600160a060020a031681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002081905550600260008f600019166000191681526020019081526020016000206000808201600090556001820160006101000a81549063ffffffff02191690556001820160046101000a815490600160a060020a030219169055600282016000905560038201600090556004820160006101000a81549060ff0219169055505083600160a060020a03168360e060020a90048660405160e060020a63ffffffff841602815260048101919091526024016000604051808303816000875af192505050965086156106cc577ffae6acb39f0117c0632c99c9482d4544ed4214f354d09c2956893a90860eb00a858f84846040519384526020840192909252600160a060020a03908116604080850191909152911660608301526080909101905180910390a1610727565b7f217d7e370a35a14c4eb12c5cc1c1505bf1ccd7eede103f3d249c0fabeabd7616858f84846040519384526020840192909252600160a060020a03908116604080850191909152911660608301526080909101905180910390a15b505050505050979650505050505050565b60005481565b60045481565b60065460009033600160a060020a0390811691161461076257600080fd5b50600081815260026020526040902060018101546401000000009004600160a060020a0316151561079257600080fd5b600481015460ff161515600114156107a957600080fd5b60048101805460ff1916600117905560055460038201547f2ffc130c50080124976e8b843579a923e16e0bef4c5adfda2dde3e94c288ba2c91018360405191825260208201526040908101905180910390a15050565b60065460009081908190819033600160a060020a039081169116148061082d5750670de0b6b3a76400003410155b151561083857600080fd5b600160a060020a038716151561084d57600080fd5b600080546001019081905592506000194301403084604051928352600160a060020a03919091166c01000000000000000000000000026020830152603482015260540160405190819003902091508185600019604051928352600160a060020a03919091166c0100000000000000000000000002602083015260348201526054016040518091039020935060c06040519081016040908152898252600160e060020a03198816602080840191909152600160a060020a038a168284015260608301869052426080840152600060a0840181905287815260029091522081518155602082015160018201805463ffffffff191660e060020a90920491909117905560408201518160010160046101000a815481600160a060020a030219169083600160a060020a03160217905550606082015181600201556080820151816003015560a08201516004909101805491151560ff199092169190911790555050600654429033600160a060020a03908116911614156109cd57600454016109ee565b6005546000858152600260205260409020600401805460ff19166001179055015b7fdb7266ce4b13a685194a86c2cb74e34d93b88ba3a4966cf3efdf1abc8ad1cbec88888885898987604051968752600160a060020a039586166020880152600160e060020a031990941660408088019190915260608701939093529316608085015260a084019290925260c083015260e0909101905180910390a1505050949350505050565b600654600160a060020a031681565b60055481565b600260208190526000918252604090912080546001820154928201546003830154600490930154919360e060020a810293640100000000909104600160a060020a03169260ff1686565b600360209081526000928352604080842090915290825290205481565b600081815260026020819052604082209081015490918190108015610b53575060018201546401000000008104600160a060020a0316600090815260036020908152604080832060e060020a909402600160e060020a0319168352929052205481105b1515610b5e57600080fd5b50506000908152600260208190526040822082815560018101805477ffffffffffffffffffffffffffffffffffffffffffffffff191690559081018290556003810191909155600401805460ff191690555600a165627a7a723058201be4a89ad3cec2a64b2153abde14cbc54ea2d2e1e5972b730610435d6d246ef5002900000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000015180000000000000000000000000d24400ae8bfebb18ca49be86258a3c749cf468530000000000000000000000000000000000000000000000000000000000000003000000000000000000000000a94488c17686cefc08c1de70a4aeb6a2301599d90000000000000000000000003af7a2ff52c6e2388bac918b3776b82c99b5f2680000000000000000000000006ff0408efc41b2250c9e9ff820b9fac593f50191


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

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [2] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [3] : 000000000000000000000000d24400ae8bfebb18ca49be86258a3c749cf46853
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 000000000000000000000000a94488c17686cefc08c1de70a4aeb6a2301599d9
Arg [6] : 0000000000000000000000003af7a2ff52c6e2388bac918b3776b82c99b5f268
Arg [7] : 0000000000000000000000006ff0408efc41b2250c9e9ff820b9fac593f50191


   Swarm Source:
bzzr://1be4a89ad3cec2a64b2153abde14cbc54ea2d2e1e5972b730610435d6d246ef5
Block Age transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.