Contract 0x0000000000d132a69d773c838080dc4fa478388f 6

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc4613b72b8811a1c7d9c4df4211848fbfa38a1f3cc9df20f40e5f2068429a984Transfer Ownersh...205205302022-08-17 15:58:1341 days 2 hrs ago0x939c8d89ebc11fa45e576215e2353673ad0ba18a IN  0x0000000000d132a69d773c838080dc4fa478388f0 ETH0.000063822427 ETH
0xa3f7f8f944cc1fa49f921794869ac88e735f875f30b262c6d063f2aaf475a6a3Accept Conduit O...205204992022-08-17 15:57:5041 days 2 hrs ago0x939c8d89ebc11fa45e576215e2353673ad0ba18a IN  0x0000000000d132a69d773c838080dc4fa478388f0 ETH0.000056008677 ETH
0xbcb586c2e514f7fee4bb8f2164ef03901701a5d66c965846f2c9e936c0268b5dUpdate Revoker205204682022-08-17 15:57:5041 days 2 hrs ago0x939c8d89ebc11fa45e576215e2353673ad0ba18a IN  0x0000000000d132a69d773c838080dc4fa478388f0 ETH0.000057334111 ETH
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0xa3f7f8f944cc1fa49f921794869ac88e735f875f30b262c6d063f2aaf475a6a3205204992022-08-17 15:57:5041 days 2 hrs ago 0x0000000000d132a69d773c838080dc4fa478388f 0x00000000f9490004c11cef243f5400493c00ad630 ETH
0x0ff4da11dbd98589e69b6c06b0f920ea5dced6f6dde90077c76d9b852b093dec204251422022-08-16 17:07:5242 days 1 hr ago 0x0000000000ffe8b47b3e2130213b802212439497  Contract Creation0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ConduitCaptain

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan on 2022-08-16
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;

/**
 * @title ConduitCaptainInterface
 * @author 0age
 * @notice ConduitCaptainInterface contains function endpoints, events, and error
 *         declarations for the ConduitCaptain contract.
 */
interface ConduitCaptainInterface {
    /**
     * @dev Emit an event whenever a revoker role is updated by the owner.
     *
     * @param revoker The address of the new revoker role.
     */
    event RevokerUpdated(address revoker);

    /**
     * @dev Revert with an error when attempting to set a conduit controller
     *      that does not contain contract code.
     */
    error InvalidConduitController(address conduitController);

    /**
     * @dev Revert with an error when attempting to call closeChannel from an
     *      account that does not currently hold the revoker role.
     */
    error InvalidRevoker();

    /**
     * @dev Revert with an error when attempting to register a revoker and
     *      supplying the null address.
     */
    error RevokerIsNullAddress();

    /**
     * @notice Initiate conduit ownership transfer by assigning a new potential
     *         owner for the given conduit. Only callable by the owner.
     *
     * @param conduit           The conduit for which to initiate ownership
     *                          transfer.
     * @param newPotentialOwner The new potential owner to set.
     */
    function transferConduitOwnership(
        address conduit,
        address newPotentialOwner
    ) external;

    /**
     * @notice Clear the currently set potential owner, if any, from a conduit.
     *         Only callable by the owner.
     *
     * @param conduit The conduit for which to cancel ownership transfer.
     */
    function cancelConduitOwnershipTransfer(address conduit) external;

    /**
     * @notice Accept ownership of a given conduit once this contract has been
     *         set as the current potential owner. Only callable by the owner.
     *
     * @param conduit The conduit for which to accept ownership transfer.
     */
    function acceptConduitOwnership(address conduit) external;

    /**
     * @notice Open or close a channel on a given conduit, thereby allowing the
     *         specified account to execute transfers against that conduit.
     *         Extreme care must be taken when updating channels, as malicious
     *         or vulnerable channels can transfer any ERC20, ERC721 and ERC1155
     *         tokens where the token holder has granted the conduit approval.
     *         Only the owner may call this function.
     *
     * @param conduit The conduit for which to open or close the channel.
     * @param channel The channel to open or close on the conduit.
     * @param isOpen  A boolean indicating whether to open or close the channel.
     */
    function updateChannel(
        address conduit,
        address channel,
        bool isOpen
    ) external;

    /**
     * @notice Close a channel on a given conduit, thereby preventing the
     *         specified account from executing transfers against that conduit.
     *         Only the designated revoker may call this function.
     *
     * @param conduit The conduit for which to close the channel.
     * @param channel The channel to close on the conduit.
     */
    function closeChannel(address conduit, address channel) external;

    /**
     * @notice Set a revoker role that can close channels. Only the owner may
     *         call this function.
     *
     * @param revoker The account to set as the revoker.
     */
    function updateRevoker(address revoker) external;

    /**
     * @notice External view function to retrieve the address of the revoker
     *         role that can close channels.
     *
     * @return revoker The account set as the revoker.
     */
    function getRevoker() external view returns (address revoker);

    /**
     * @notice External view function to retrieve the address of the
     *         ConduitController referenced by the contract
     *
     * @return conduitController The address of the ConduitController.
     */
    function getConduitController()
        external
        view
        returns (address conduitController);
}


/**
 * @title ConduitControllerInterface
 * @author 0age
 * @notice ConduitControllerInterface contains relevant external function
 *         interfaces for a conduit controller contract.
 */
interface ConduitControllerInterface {
    /**
     * @notice Initiate conduit ownership transfer by assigning a new potential
     *         owner for the given conduit. Once set, the new potential owner
     *         may call `acceptOwnership` to claim ownership of the conduit.
     *         Only the owner of the conduit in question may call this function.
     *
     * @param conduit The conduit for which to initiate ownership transfer.
     */
    function transferOwnership(address conduit, address newPotentialOwner)
        external;

    /**
     * @notice Clear the currently set potential owner, if any, from a conduit.
     *         Only the owner of the conduit in question may call this function.
     *
     * @param conduit The conduit for which to cancel ownership transfer.
     */
    function cancelOwnershipTransfer(address conduit) external;

    /**
     * @notice Accept ownership of a supplied conduit. Only accounts that the
     *         current owner has set as the new potential owner may call this
     *         function.
     *
     * @param conduit The conduit for which to accept ownership.
     */
    function acceptOwnership(address conduit) external;

    /**
     * @notice Open or close a channel on a given conduit, thereby allowing the
     *         specified account to execute transfers against that conduit.
     *         Extreme care must be taken when updating channels, as malicious
     *         or vulnerable channels can transfer any ERC20, ERC721 and ERC1155
     *         tokens where the token holder has granted the conduit approval.
     *         Only the owner of the conduit in question may call this function.
     *
     * @param conduit The conduit for which to open or close the channel.
     * @param channel The channel to open or close on the conduit.
     * @param isOpen  A boolean indicating whether to open or close the channel.
     */
    function updateChannel(
        address conduit,
        address channel,
        bool isOpen
    ) external;
}


/**
 * @title   TwoStepOwnableInterface
 * @author  OpenSea Protocol
 * @notice  TwoStepOwnableInterface contains all external function interfaces,
 *          events and errors for the TwoStepOwnable contract.
 */
interface TwoStepOwnableInterface {
    /**
     * @dev Emit an event whenever the contract owner registers a new potential
     *      owner.
     *
     * @param newPotentialOwner The new potential owner of the contract.
     */
    event PotentialOwnerUpdated(address newPotentialOwner);

    /**
     * @dev Emit an event whenever contract ownership is transferred.
     *
     * @param previousOwner The previous owner of the contract.
     * @param newOwner      The new owner of the contract.
     */
    event OwnershipTransferred(address previousOwner, address newOwner);

    /**
     * @dev Revert with an error when attempting to set an initial owner when
     *      one has already been set.
     */
    error OwnerAlreadySet(address currentOwner);

    /**
     * @dev Revert with an error when attempting to call a function with the
     *      onlyOwner modifier from an account other than that of the owner.
     */
    error CallerIsNotOwner();

    /**
     * @dev Revert with an error when attempting to register an initial owner
     *      and supplying the null address.
     */
    error InitialOwnerIsNullAddress();

    /**
     * @dev Revert with an error when attempting to register a new potential
     *      owner and supplying the null address.
     */
    error NewPotentialOwnerIsNullAddress();

    /**
     * @dev Revert with an error when attempting to claim ownership of the
     *      contract with a caller that is not the current potential owner.
     */
    error CallerIsNotNewPotentialOwner();

    /**
     * @notice Initiate ownership transfer by assigning a new potential owner
     *         to this contract. Once set, the new potential owner may call
     *         `acceptOwnership` to claim ownership. Only the owner may call
     *         this function.
     *
     * @param newPotentialOwner The address for which to initiate ownership
     *                          transfer to.
     */
    function transferOwnership(address newPotentialOwner) external;

    /**
     * @notice Clear the currently set potential owner, if any. Only the owner
     *         of this contract may call this function.
     */
    function cancelOwnershipTransfer() external;

    /**
     * @notice Accept ownership of this contract. Only the account that the
     *         current owner has set as the new potential owner may call this
     *         function.
     */
    function acceptOwnership() external;

    /**
     * @notice An external view function that returns the potential owner.
     *
     * @return The address of the potential owner.
     */
    function potentialOwner() external view returns (address);

    /**
     * @notice An external view function that returns the owner.
     *
     * @return The address of the owner.
     */
    function owner() external view returns (address);
}


/**
 * @title   TwoStepOwnable
 * @author  OpenSea Protocol Team
 * @notice  TwoStepOwnable provides access control for inheriting contracts,
 *          where the ownership of the contract can be exchanged via a two step
 *          process. A potential owner is set by the current owner by calling
 *          `transferOwnership`, then accepted by the new potential owner by
 *          calling `acceptOwnership`.
 */
abstract contract TwoStepOwnable is TwoStepOwnableInterface {
    // The address of the owner.
    address private _owner;

    // The address of the new potential owner.
    address private _potentialOwner;

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        // Ensure that the caller is the owner.
        if (msg.sender != _owner) {
            revert CallerIsNotOwner();
        }

        // Continue with function execution.
        _;
    }

    /**
     * @notice Initiate ownership transfer by assigning a new potential owner
     *         to this contract. Once set, the new potential owner may call
     *         `acceptOwnership` to claim ownership. Only the owner may call
     *         this function.
     *
     * @param newPotentialOwner The address for which to initiate ownership
     *                          transfer to.
     */
    function transferOwnership(address newPotentialOwner)
        external
        override
        onlyOwner
    {
        // Ensure the new potential owner is not an invalid address.
        if (newPotentialOwner == address(0)) {
            revert NewPotentialOwnerIsNullAddress();
        }

        // Emit an event indicating that the potential owner has been updated.
        emit PotentialOwnerUpdated(newPotentialOwner);

        // Set the new potential owner as the potential owner.
        _potentialOwner = newPotentialOwner;
    }

    /**
     * @notice Clear the currently set potential owner, if any. Only the owner
     *         of this contract may call this function.
     */
    function cancelOwnershipTransfer() external override onlyOwner {
        // Emit an event indicating that the potential owner has been cleared.
        emit PotentialOwnerUpdated(address(0));

        // Clear the current new potential owner.
        delete _potentialOwner;
    }

    /**
     * @notice Accept ownership of this contract. Only the account that the
     *         current owner has set as the new potential owner may call this
     *         function.
     */
    function acceptOwnership() external override {
        // Ensure the caller is the potential owner.
        if (msg.sender != _potentialOwner) {
            // Revert, indicating that caller is not current potential owner.
            revert CallerIsNotNewPotentialOwner();
        }

        // Emit an event indicating that the potential owner has been cleared.
        emit PotentialOwnerUpdated(address(0));

        // Clear the current new potential owner.
        delete _potentialOwner;

        // Set the caller as the owner of this contract.
        _setOwner(msg.sender);
    }

    /**
     * @notice An external view function that returns the potential owner.
     *
     * @return The address of the potential owner.
     */
    function potentialOwner() external view override returns (address) {
        return _potentialOwner;
    }

    /**
     * @notice A public view function that returns the owner.
     *
     * @return The address of the owner.
     */
    function owner() public view override returns (address) {
        return _owner;
    }

    /**
     * @notice Internal function that sets the inital owner of the base
     *         contract. The initial owner must not already be set.
     *         To be called in the constructor or when initializing a proxy.
     *
     * @param initialOwner The address to set for initial ownership.
     */
    function _setInitialOwner(address initialOwner) internal {
        // Ensure that an initial owner has been supplied.
        if (initialOwner == address(0)) {
            revert InitialOwnerIsNullAddress();
        }

        // Ensure that the owner has not already been set.
        if (_owner != address(0)) {
            revert OwnerAlreadySet(_owner);
        }

        // Set the initial owner.
        _setOwner(initialOwner);
    }

    /**
     * @notice Private function that sets a new owner and emits a corresponding
     *         event.
     *
     * @param newOwner The address to assign as the new owner.
     */
    function _setOwner(address newOwner) private {
        // Emit an event indicating that the new owner has been set.
        emit OwnershipTransferred(_owner, newOwner);

        // Set the new owner.
        _owner = newOwner;
    }
}


/**
 * @title ConduitCaptain
 * @author 0age
 * @notice ConduitCaptain is an owned contract where the owner can in turn update
 *         conduits that are owned by the contract. It allows for designating an
 *         account that may revoke channels from conduits.
 */
contract ConduitCaptain is TwoStepOwnable, ConduitCaptainInterface {
    // Set the conduit controller as an immutable argument.
    ConduitControllerInterface private immutable _CONDUIT_CONTROLLER;

    // Designate a storage variable for the revoker role.
    address private _revoker;

    /**
     * @dev Initialize contract by setting the conduit controller, the initial
     *      owner, and the initial revoker role.
     */
    constructor(
        address conduitController,
        address initialOwner,
        address initialRevoker
    ) {
        // Ensure that a contract is deployed to the given conduit controller.
        if (conduitController.code.length == 0) {
            revert InvalidConduitController(conduitController);
        }

        // Set the conduit controller as an immutable argument.
        _CONDUIT_CONTROLLER = ConduitControllerInterface(conduitController);

        // Set the initial owner.
        _setInitialOwner(initialOwner);

        // Set the initial revoker.
        _setRevoker(initialRevoker);
    }

    /**
     * @notice Initiate conduit ownership transfer by assigning a new potential
     *         owner for the given conduit. Only callable by the owner.
     *
     * @param conduit           The conduit for which to initiate ownership
     *                          transfer.
     * @param newPotentialOwner The new potential owner to set.
     */
    function transferConduitOwnership(
        address conduit,
        address newPotentialOwner
    ) external override onlyOwner {
        // Call the conduit controller to transfer conduit ownership.
        _CONDUIT_CONTROLLER.transferOwnership(conduit, newPotentialOwner);
    }

    /**
     * @notice Clear the currently set potential owner, if any, from a conduit.
     *         Only callable by the owner.
     *
     * @param conduit The conduit for which to cancel ownership transfer.
     */
    function cancelConduitOwnershipTransfer(address conduit)
        external
        override
        onlyOwner
    {
        // Call the conduit controller to cancel conduit ownership transfer.
        _CONDUIT_CONTROLLER.cancelOwnershipTransfer(conduit);
    }

    /**
     * @notice Accept ownership of a given conduit once this contract has been
     *         set as the current potential owner. Only callable by the owner.
     *
     * @param conduit The conduit for which to accept ownership transfer.
     */
    function acceptConduitOwnership(address conduit)
        external
        override
        onlyOwner
    {
        // Call the conduit controller to accept conduit ownership.
        _CONDUIT_CONTROLLER.acceptOwnership(conduit);
    }

    /**
     * @notice Open or close a channel on a given conduit, thereby allowing the
     *         specified account to execute transfers against that conduit.
     *         Extreme care must be taken when updating channels, as malicious
     *         or vulnerable channels can transfer any ERC20, ERC721 and ERC1155
     *         tokens where the token holder has granted the conduit approval.
     *         Only the owner may call this function.
     *
     * @param conduit The conduit for which to open or close the channel.
     * @param channel The channel to open or close on the conduit.
     * @param isOpen  A boolean indicating whether to open or close the channel.
     */
    function updateChannel(
        address conduit,
        address channel,
        bool isOpen
    ) external override onlyOwner {
        // Call the conduit controller to update channel status on the conduit.
        _CONDUIT_CONTROLLER.updateChannel(conduit, channel, isOpen);
    }

    /**
     * @notice Close a channel on a given conduit, thereby preventing the
     *         specified account from executing transfers against that conduit.
     *         Only the designated revoker may call this function.
     *
     * @param conduit The conduit for which to close the channel.
     * @param channel The channel to close on the conduit.
     */
    function closeChannel(address conduit, address channel) external override {
        // Revert if the caller is not the revoker.
        if (msg.sender != _revoker) {
            revert InvalidRevoker();
        }

        // Call the conduit controller to close the channel on the conduit.
        _CONDUIT_CONTROLLER.updateChannel(conduit, channel, false);
    }

    /**
     * @notice Set a revoker role that can close channels. Only the owner may
     *         call this function.
     *
     * @param revoker The account to set as the revoker.
     */
    function updateRevoker(address revoker) external override onlyOwner {
        // Assign the new revoker role.
        _setRevoker(revoker);
    }

    /**
     * @notice External view function to retrieve the address of the revoker
     *         role that can close channels.
     *
     * @return revoker The account set as the revoker.
     */
    function getRevoker() external view override returns (address revoker) {
        return _revoker;
    }

    /**
     * @notice External view function to retrieve the address of the
     *         ConduitController referenced by the contract
     *
     * @return conduitController The address of the ConduitController.
     */
    function getConduitController()
        external
        view
        override
        returns (address conduitController)
    {
        return address(_CONDUIT_CONTROLLER);
    }

    /**
     * @notice Internal function to set a revoker role that can close channels.
     *
     * @param revoker The account to set as the revoker.
     */
    function _setRevoker(address revoker) internal {
        // Revert if no address is supplied for the revoker role.
        if (revoker == address(0)) {
            revert RevokerIsNullAddress();
        }

        // Assign the new revoker role.
        _revoker = revoker;
        emit RevokerUpdated(revoker);
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"conduitController","type":"address"},{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"initialRevoker","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CallerIsNotNewPotentialOwner","type":"error"},{"inputs":[],"name":"CallerIsNotOwner","type":"error"},{"inputs":[],"name":"InitialOwnerIsNullAddress","type":"error"},{"inputs":[{"internalType":"address","name":"conduitController","type":"address"}],"name":"InvalidConduitController","type":"error"},{"inputs":[],"name":"InvalidRevoker","type":"error"},{"inputs":[],"name":"NewPotentialOwnerIsNullAddress","type":"error"},{"inputs":[{"internalType":"address","name":"currentOwner","type":"address"}],"name":"OwnerAlreadySet","type":"error"},{"inputs":[],"name":"RevokerIsNullAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"PotentialOwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"revoker","type":"address"}],"name":"RevokerUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"acceptConduitOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"}],"name":"cancelConduitOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"channel","type":"address"}],"name":"closeChannel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getConduitController","outputs":[{"internalType":"address","name":"conduitController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRevoker","outputs":[{"internalType":"address","name":"revoker","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"potentialOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferConduitOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"channel","type":"address"},{"internalType":"bool","name":"isOpen","type":"bool"}],"name":"updateChannel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"revoker","type":"address"}],"name":"updateRevoker","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051610b1c380380610b1c83398101604081905261002f916101fd565b826001600160a01b03163b60000361006a57604051630f32b36360e41b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b03831660805261008082610091565b610089816100fd565b505050610240565b6001600160a01b0381166100b857604051631dda595d60e11b815260040160405180910390fd5b6000546001600160a01b0316156100f157600054604051633164930960e11b81526001600160a01b039091166004820152602401610061565b6100fa81610178565b50565b6001600160a01b0381166101245760405163a23a682f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f5549026e79f4449c2656308378875b265aaf4002b1ef696785f9439da13d4e369060200160405180910390a150565b600054604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b60805161089e61027e600039600081816101a5015281816102360152818161035a015281816104050152818161053801526105b1015261089e6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063cf72618e11610066578063cf72618e1461017f578063d792782414610192578063ef316365146101a3578063f2fde38b146101c957600080fd5b80638da5cb5b14610148578063bed6304114610159578063cc6b2d721461016c57600080fd5b806313ad9cab146100d457806323452b9c146100e95780632db71ae1146100f15780635bb05674146101045780637762df251461011757806379ba509714610140575b600080fd5b6100e76100e23660046107c7565b6101dc565b005b6100e7610297565b6100e76100ff366004610813565b610308565b6100e7610112366004610846565b6103bb565b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6100e7610465565b6000546001600160a01b0316610124565b6100e7610167366004610813565b6104df565b6100e761017a366004610846565b610567565b6100e761018d366004610846565b6105e0565b6002546001600160a01b0316610124565b7f0000000000000000000000000000000000000000000000000000000000000000610124565b6100e76101d7366004610846565b610617565b6000546001600160a01b0316331461020757604051636db2465f60e01b815260040160405180910390fd5b6040516313ad9cab60e01b81526001600160a01b038481166004830152838116602483015282151560448301527f000000000000000000000000000000000000000000000000000000000000000016906313ad9cab90606401600060405180830381600087803b15801561027a57600080fd5b505af115801561028e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146102c257604051636db2465f60e01b815260040160405180910390fd5b604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b0319169055565b6000546001600160a01b0316331461033357604051636db2465f60e01b815260040160405180910390fd5b604051636d43542160e01b81526001600160a01b03838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d435421906044015b600060405180830381600087803b15801561039f57600080fd5b505af11580156103b3573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103e657604051636db2465f60e01b815260040160405180910390fd5b604051637b37e56160e01b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b37e561906024015b600060405180830381600087803b15801561044a57600080fd5b505af115801561045e573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146104905760405163356e005760e01b815260040160405180910390fd5b604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b03191690556104dd336106c7565b565b6002546001600160a01b0316331461050a57604051632c8c06e360e11b815260040160405180910390fd5b6040516313ad9cab60e01b81526001600160a01b0383811660048301528281166024830152600060448301527f000000000000000000000000000000000000000000000000000000000000000016906313ad9cab90606401610385565b6000546001600160a01b0316331461059257604051636db2465f60e01b815260040160405180910390fd5b6040516351710e4560e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906351710e4590602401610430565b6000546001600160a01b0316331461060b57604051636db2465f60e01b815260040160405180910390fd5b61061481610730565b50565b6000546001600160a01b0316331461064257604051636db2465f60e01b815260040160405180910390fd5b6001600160a01b03811661066957604051637621b06160e01b815260040160405180910390fd5b6040516001600160a01b03821681527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600054604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166107575760405163a23a682f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f5549026e79f4449c2656308378875b265aaf4002b1ef696785f9439da13d4e369060200160405180910390a150565b80356001600160a01b03811681146107c257600080fd5b919050565b6000806000606084860312156107dc57600080fd5b6107e5846107ab565b92506107f3602085016107ab565b91506040840135801515811461080857600080fd5b809150509250925092565b6000806040838503121561082657600080fd5b61082f836107ab565b915061083d602084016107ab565b90509250929050565b60006020828403121561085857600080fd5b610861826107ab565b939250505056fea26469706673582212207240b240728dd6b724a39b8d7d9bf8f2ef40fc1eaf27821ac8ed2a76cd09fdc864736f6c634300080f003300000000000000000000000000000000f9490004c11cef243f5400493c00ad63000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a

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

00000000000000000000000000000000f9490004c11cef243f5400493c00ad63000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a

-----Decoded View---------------
Arg [0] : conduitController (address): 0x00000000f9490004c11cef243f5400493c00ad63
Arg [1] : initialOwner (address): 0x939c8d89ebc11fa45e576215e2353673ad0ba18a
Arg [2] : initialRevoker (address): 0x939c8d89ebc11fa45e576215e2353673ad0ba18a

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000f9490004c11cef243f5400493c00ad63
Arg [1] : 000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a
Arg [2] : 000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a


Deployed ByteCode Sourcemap

15005:6111:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18470:291;;;;;;:::i;:::-;;:::i;:::-;;11905:286;;;:::i;16460:::-;;;;;;:::i;:::-;;:::i;16980:266::-;;;;;;:::i;:::-;;:::i;13165:108::-;13250:15;;-1:-1:-1;;;;;13250:15:0;13165:108;;;-1:-1:-1;;;;;1238:32:1;;;1220:51;;1208:2;1193:18;13165:108:0;;;;;;;12399:604;;;:::i;13412:88::-;13459:7;13486:6;-1:-1:-1;;;;;13486:6:0;13412:88;;19146:371;;;;;;:::i;:::-;;:::i;17515:241::-;;;;;;:::i;:::-;;:::i;19724:148::-;;;;;;:::i;:::-;;:::i;20086:105::-;20175:8;;-1:-1:-1;;;;;20175:8:0;20086:105;;20428:186;20586:19;20428:186;;11187:555;;;;;;:::i;:::-;;:::i;18470:291::-;10638:6;;-1:-1:-1;;;;;10638:6:0;10624:10;:20;10620:78;;10668:18;;-1:-1:-1;;;10668:18:0;;;;;;;;;;;10620:78;18694:59:::1;::::0;-1:-1:-1;;;18694:59:0;;-1:-1:-1;;;;;1534:15:1;;;18694:59:0::1;::::0;::::1;1516:34:1::0;1586:15;;;1566:18;;;1559:43;1645:14;;1638:22;1618:18;;;1611:50;18694:19:0::1;:33;::::0;::::1;::::0;1451:18:1;;18694:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18470:291:::0;;;:::o;11905:286::-;10638:6;;-1:-1:-1;;;;;10638:6:0;10624:10;:20;10620:78;;10668:18;;-1:-1:-1;;;10668:18:0;;;;;;;;;;;10620:78;12064:33:::1;::::0;12094:1:::1;1220:51:1::0;;12064:33:0::1;::::0;1208:2:1;1193:18;12064:33:0::1;;;;;;;12168:15;12161:22:::0;;-1:-1:-1;;;;;;12161:22:0::1;::::0;;11905:286::o;16460:::-;10638:6;;-1:-1:-1;;;;;10638:6:0;10624:10;:20;10620:78;;10668:18;;-1:-1:-1;;;10668:18:0;;;;;;;;;;;10620:78;16673:65:::1;::::0;-1:-1:-1;;;16673:65:0;;-1:-1:-1;;;;;1902:15:1;;;16673:65:0::1;::::0;::::1;1884:34:1::0;1954:15;;;1934:18;;;1927:43;16673:19:0::1;:37;::::0;::::1;::::0;1819:18:1;;16673:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16460:286:::0;;:::o;16980:266::-;10638:6;;-1:-1:-1;;;;;10638:6:0;10624:10;:20;10620:78;;10668:18;;-1:-1:-1;;;10668:18:0;;;;;;;;;;;10620:78;17186:52:::1;::::0;-1:-1:-1;;;17186:52:0;;-1:-1:-1;;;;;1238:32:1;;;17186:52:0::1;::::0;::::1;1220:51:1::0;17186:19:0::1;:43;::::0;::::1;::::0;1193:18:1;;17186:52:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16980:266:::0;:::o;12399:604::-;12527:15;;-1:-1:-1;;;;;12527:15:0;12513:10;:29;12509:178;;12645:30;;-1:-1:-1;;;12645:30:0;;;;;;;;;;;12509:178;12784:33;;12814:1;1220:51:1;;12784:33:0;;1208:2:1;1193:18;12784:33:0;;;;;;;12888:15;12881:22;;-1:-1:-1;;;;;;12881:22:0;;;12974:21;12984:10;12974:9;:21::i;:::-;12399:604::o;19146:371::-;19302:8;;-1:-1:-1;;;;;19302:8:0;19288:10;:22;19284:78;;19334:16;;-1:-1:-1;;;19334:16:0;;;;;;;;;;;19284:78;19451:58;;-1:-1:-1;;;19451:58:0;;-1:-1:-1;;;;;1534:15:1;;;19451:58:0;;;1516:34:1;1586:15;;;1566:18;;;1559:43;19503:5:0;1618:18:1;;;1611:50;19451:19:0;:33;;;;1451:18:1;;19451:58:0;1282:385:1;17515:241:0;10638:6;;-1:-1:-1;;;;;10638:6:0;10624:10;:20;10620:78;;10668:18;;-1:-1:-1;;;10668:18:0;;;;;;;;;;;10620:78;17704:44:::1;::::0;-1:-1:-1;;;17704:44:0;;-1:-1:-1;;;;;1238:32:1;;;17704:44:0::1;::::0;::::1;1220:51:1::0;17704:19:0::1;:35;::::0;::::1;::::0;1193:18:1;;17704:44:0::1;1074:203:1::0;19724:148:0;10638:6;;-1:-1:-1;;;;;10638:6:0;10624:10;:20;10620:78;;10668:18;;-1:-1:-1;;;10668:18:0;;;;;;;;;;;10620:78;19844:20:::1;19856:7;19844:11;:20::i;:::-;19724:148:::0;:::o;11187:555::-;10638:6;;-1:-1:-1;;;;;10638:6:0;10624:10;:20;10620:78;;10668:18;;-1:-1:-1;;;10668:18:0;;;;;;;;;;;10620:78;-1:-1:-1;;;;;11386:31:0;::::1;11382:103;;11441:32;;-1:-1:-1::0;;;11441:32:0::1;;;;;;;;;;;11382:103;11582:40;::::0;-1:-1:-1;;;;;1238:32:1;;1220:51;;11582:40:0::1;::::0;1208:2:1;1193:18;11582:40:0::1;;;;;;;11699:15;:35:::0;;-1:-1:-1;;;;;;11699:35:0::1;-1:-1:-1::0;;;;;11699:35:0;;;::::1;::::0;;;::::1;::::0;;11187:555::o;14480:238::-;14632:6;;14611:38;;;-1:-1:-1;;;;;14632:6:0;;;1884:34:1;;1954:15;;;1949:2;1934:18;;1927:43;14611:38:0;;1819:18:1;14611:38:0;;;;;;;14693:6;:17;;-1:-1:-1;;;;;;14693:17:0;-1:-1:-1;;;;;14693:17:0;;;;;;;;;;14480:238::o;20787:326::-;-1:-1:-1;;;;;20916:21:0;;20912:83;;20961:22;;-1:-1:-1;;;20961:22:0;;;;;;;;;;;20912:83;21048:8;:18;;-1:-1:-1;;;;;;21048:18:0;-1:-1:-1;;;;;21048:18:0;;;;;;;;21082:23;;1220:51:1;;;21082:23:0;;1208:2:1;1193:18;21082:23:0;;;;;;;20787:326;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:421::-;266:6;274;282;335:2;323:9;314:7;310:23;306:32;303:52;;;351:1;348;341:12;303:52;374:29;393:9;374:29;:::i;:::-;364:39;;422:38;456:2;445:9;441:18;422:38;:::i;:::-;412:48;;510:2;499:9;495:18;482:32;557:5;550:13;543:21;536:5;533:32;523:60;;579:1;576;569:12;523:60;602:5;592:15;;;192:421;;;;;:::o;618:260::-;686:6;694;747:2;735:9;726:7;722:23;718:32;715:52;;;763:1;760;753:12;715:52;786:29;805:9;786:29;:::i;:::-;776:39;;834:38;868:2;857:9;853:18;834:38;:::i;:::-;824:48;;618:260;;;;;:::o;883:186::-;942:6;995:2;983:9;974:7;970:23;966:32;963:52;;;1011:1;1008;1001:12;963:52;1034:29;1053:9;1034:29;:::i;:::-;1024:39;883:186;-1:-1:-1;;;883:186:1:o

Metadata Hash

7240b240728dd6b724a39b8d7d9bf8f2ef40fc1eaf27821ac8ed2a76cd09fdc8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.