Contract 0x0000007b02230091a7ed01230072f7006a004d60 11

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbbc80a3426b561bba031d135898bc3e06baaf6aaaeecffd51512170be45f91a8Create Conduit204351582022-08-16 19:36:5441 days 22 hrs ago0x939c8d89ebc11fa45e576215e2353673ad0ba18a IN  0x0000007b02230091a7ed01230072f7006a004d600 ETH0.000107502806 ETH
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0xbbc80a3426b561bba031d135898bc3e06baaf6aaaeecffd51512170be45f91a8204351582022-08-16 19:36:5441 days 22 hrs ago 0x0000007b02230091a7ed01230072f7006a004d60 0x00000000f9490004c11cef243f5400493c00ad630 ETH
0x74f4c6433935967b773b3caa5825f5741812dbcde5871019b427dc39eb1b5f49204251032022-08-16 17:07:0742 days 30 mins ago 0x0000000000ffe8b47b3e2130213b802212439497  Contract Creation0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ConduitCreator

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Arbiscan on 2022-08-16
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.14;

/**
 * @title ConduitCreatorInterface
 * @author 0age
 * @notice ConduitCreatorInterface contains function endpoints and an error
 *         declaration for the ConduitCreator contract.
 */
interface ConduitCreatorInterface {
    // Declare custom error for an invalid conduit creator.
    error InvalidConduitCreator();

    /**
     * @notice Deploy a new conduit on a given conduit controller using a
     *         supplied conduit key and assigning an initial owner for the
     *         deployed conduit. Only callable by the conduit creator.
     *
     * @param conduitController The conduit controller used to deploy the
     *                          conduit.
     * @param conduitKey        The conduit key used to deploy the
     *                          conduit.
     * @param initialOwner      The initial owner to set for the new
     *                          conduit.
     *
     * @return conduit The address of the newly deployed conduit.
     */
    function createConduit(
        ConduitControllerInterface conduitController,
        bytes32 conduitKey,
        address initialOwner
    ) external returns (address conduit);

    /**
     * @notice Initiate conduit ownership transfer by assigning a new potential
     *         owner for the given conduit. Only callable by the conduit
     *         creator.
     *
     * @param conduitController The conduit controller used to deploy the
     *                          conduit.
     * @param conduit           The conduit for which to initiate ownership
     *                          transfer.
     */
    function transferOwnership(
        ConduitControllerInterface conduitController,
        address conduit,
        address newPotentialOwner
    ) external;

    /**
     * @notice Clear the currently set potential owner, if any, from a conduit.
     *         Only callable by the conduit creator.
     *
     * @param conduitController The conduit controller used to deploy the
     *                          conduit.
     * @param conduit           The conduit for which to cancel ownership
     *                          transfer.
     */
    function cancelOwnershipTransfer(
        ConduitControllerInterface conduitController,
        address conduit
    ) external;
}

/**
 * @title ConduitControllerInterface
 * @author 0age
 * @notice ConduitControllerInterface contains relevant external function
 *         interfaces for a conduit controller contract.
 */
interface ConduitControllerInterface {
    /**
     * @notice Deploy a new conduit using a supplied conduit key and assign an
     *         initial owner for the deployed conduit.
     *
     * @param conduitKey   The conduit key used to deploy the conduit.
     * @param initialOwner The initial owner to set for the new conduit.
     *
     * @return conduit The address of the newly deployed conduit.
     */
    function createConduit(bytes32 conduitKey, address initialOwner)
        external
        returns (address conduit);

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

/**
 * @title ConduitCreator
 * @author 0age
 * @notice ConduitCreator allows a specific account to create new conduits on
           arbitrary conduit controllers.
 */
contract ConduitCreator is ConduitCreatorInterface {
    // Set the conduit creator as an immutable argument.
    address internal immutable _CONDUIT_CREATOR;

    /**
     * @notice Modifier to ensure that only the conduit creator can call a given
     *         function.
     */
    modifier onlyCreator() {
        // Ensure that the caller is the conduit creator.
        if (msg.sender != _CONDUIT_CREATOR) {
            revert InvalidConduitCreator();
        }

        // Proceed with function execution.
        _;
    }

    /**
     * @dev Initialize contract by setting the conduit creator.
     */
    constructor(address conduitCreator) {
        // Set the conduit creator as an immutable argument.
        _CONDUIT_CREATOR = conduitCreator;
    }

    /**
     * @notice Deploy a new conduit on a given conduit controller using a
     *         supplied conduit key and assigning an initial owner for the
     *         deployed conduit. Only callable by the conduit creator.
     *
     * @param conduitController The conduit controller used to deploy the
     *                          conduit.
     * @param conduitKey        The conduit key used to deploy the
     *                          conduit.
     * @param initialOwner      The initial owner to set for the new
     *                          conduit.
     *
     * @return conduit The address of the newly deployed conduit.
     */
    function createConduit(
        ConduitControllerInterface conduitController,
        bytes32 conduitKey,
        address initialOwner
    ) external override onlyCreator returns (address conduit) {
        // Call the conduit controller to create the conduit.
        conduit = conduitController.createConduit(conduitKey, initialOwner);
    }

    /**
     * @notice Initiate conduit ownership transfer by assigning a new potential
     *         owner for the given conduit. Only callable by the conduit
     *         creator.
     *
     * @param conduitController The conduit controller used to deploy the
     *                          conduit.
     * @param conduit           The conduit for which to initiate ownership
     *                          transfer.
     */
    function transferOwnership(
        ConduitControllerInterface conduitController,
        address conduit,
        address newPotentialOwner
    ) external override onlyCreator {
        // Call the conduit controller to transfer conduit ownership.
        conduitController.transferOwnership(conduit, newPotentialOwner);
    }

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"conduitCreator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidConduitCreator","type":"error"},{"inputs":[{"internalType":"contract ConduitControllerInterface","name":"conduitController","type":"address"},{"internalType":"address","name":"conduit","type":"address"}],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ConduitControllerInterface","name":"conduitController","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"address","name":"initialOwner","type":"address"}],"name":"createConduit","outputs":[{"internalType":"address","name":"conduit","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract ConduitControllerInterface","name":"conduitController","type":"address"},{"internalType":"address","name":"conduit","type":"address"},{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b5060405161048138038061048183398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516103e96100986000396000818160a801528181610150015261020301526103e96000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630b9a2c92146100465780636b760a941461005b578063c773d1ee1461006e575b600080fd5b6100596100543660046102d4565b61009d565b005b61005961006936600461030d565b610145565b61008161007c366004610358565b6101f6565b6040516001600160a01b03909116815260200160405180910390f35b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100e6576040516301aa4cc960e41b815260040160405180910390fd5b604051637b37e56160e01b81526001600160a01b038281166004830152831690637b37e56190602401600060405180830381600087803b15801561012957600080fd5b505af115801561013d573d6000803e3d6000fd5b505050505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018e576040516301aa4cc960e41b815260040160405180910390fd5b604051636d43542160e01b81526001600160a01b0383811660048301528281166024830152841690636d43542190604401600060405180830381600087803b1580156101d957600080fd5b505af11580156101ed573d6000803e3d6000fd5b50505050505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610241576040516301aa4cc960e41b815260040160405180910390fd5b604051631e5164ef60e21b8152600481018490526001600160a01b03838116602483015285169063794593bc906044016020604051808303816000875af1158015610290573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b4919061038f565b949350505050565b6001600160a01b03811681146102d157600080fd5b50565b600080604083850312156102e757600080fd5b82356102f2816102bc565b91506020830135610302816102bc565b809150509250929050565b60008060006060848603121561032257600080fd5b833561032d816102bc565b9250602084013561033d816102bc565b9150604084013561034d816102bc565b809150509250925092565b60008060006060848603121561036d57600080fd5b8335610378816102bc565b925060208401359150604084013561034d816102bc565b6000602082840312156103a157600080fd5b81516103ac816102bc565b939250505056fea2646970667358221220cf5c5c029d4895631072969b0034e7ce0588d405885351c9962b96db8173a51164736f6c634300080e0033000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a

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

000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a

-----Decoded View---------------
Arg [0] : conduitCreator (address): 0x939c8d89ebc11fa45e576215e2353673ad0ba18a

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000939c8d89ebc11fa45e576215e2353673ad0ba18a


Deployed ByteCode Sourcemap

4167:3290:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7164:290;;;;;;:::i;:::-;;:::i;:::-;;6426:334;;;;;;:::i;:::-;;:::i;5625:350::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2025:32:1;;;2007:51;;1995:2;1980:18;5625:350:0;;;;;;;7164:290;4558:10;-1:-1:-1;;;;;4572:16:0;4558:30;;4554:93;;4612:23;;-1:-1:-1;;;4612:23:0;;;;;;;;;;;4554:93;7396:50:::1;::::0;-1:-1:-1;;;7396:50:0;;-1:-1:-1;;;;;2025:32:1;;;7396:50:0::1;::::0;::::1;2007:51:1::0;7396:41:0;::::1;::::0;::::1;::::0;1980:18:1;;7396:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7164:290:::0;;:::o;6426:334::-;4558:10;-1:-1:-1;;;;;4572:16:0;4558:30;;4554:93;;4612:23;;-1:-1:-1;;;4612:23:0;;;;;;;;;;;4554:93;6689:63:::1;::::0;-1:-1:-1;;;6689:63:0;;-1:-1:-1;;;;;2299:15:1;;;6689:63:0::1;::::0;::::1;2281:34:1::0;2351:15;;;2331:18;;;2324:43;6689:35:0;::::1;::::0;::::1;::::0;2216:18:1;;6689:63:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;6426:334:::0;;;:::o;5625:350::-;5809:15;4558:10;-1:-1:-1;;;;;4572:16:0;4558:30;;4554:93;;4612:23;;-1:-1:-1;;;4612:23:0;;;;;;;;;;;4554:93;5910:57:::1;::::0;-1:-1:-1;;;5910:57:0;;::::1;::::0;::::1;2552:25:1::0;;;-1:-1:-1;;;;;2613:32:1;;;2593:18;;;2586:60;5910:31:0;::::1;::::0;::::1;::::0;2525:18:1;;5910:57:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5900:67:::0;5625:350;-1:-1:-1;;;;5625:350:0:o;14:159:1:-;-1:-1:-1;;;;;117:31:1;;107:42;;97:70;;163:1;160;153:12;97:70;14:159;:::o;178:477::-;279:6;287;340:2;328:9;319:7;315:23;311:32;308:52;;;356:1;353;346:12;308:52;395:9;382:23;414:59;467:5;414:59;:::i;:::-;492:5;-1:-1:-1;549:2:1;534:18;;521:32;562:61;521:32;562:61;:::i;:::-;642:7;632:17;;;178:477;;;;;:::o;660:646::-;770:6;778;786;839:2;827:9;818:7;814:23;810:32;807:52;;;855:1;852;845:12;807:52;894:9;881:23;913:59;966:5;913:59;:::i;:::-;991:5;-1:-1:-1;1048:2:1;1033:18;;1020:32;1061:61;1020:32;1061:61;:::i;:::-;1141:7;-1:-1:-1;1200:2:1;1185:18;;1172:32;1213:61;1172:32;1213:61;:::i;:::-;1293:7;1283:17;;;660:646;;;;;:::o;1311:545::-;1421:6;1429;1437;1490:2;1478:9;1469:7;1465:23;1461:32;1458:52;;;1506:1;1503;1496:12;1458:52;1545:9;1532:23;1564:59;1617:5;1564:59;:::i;:::-;1642:5;-1:-1:-1;1694:2:1;1679:18;;1666:32;;-1:-1:-1;1750:2:1;1735:18;;1722:32;1763:61;1722:32;1763:61;:::i;2657:279::-;2727:6;2780:2;2768:9;2759:7;2755:23;2751:32;2748:52;;;2796:1;2793;2786:12;2748:52;2828:9;2822:16;2847:59;2900:5;2847:59;:::i;:::-;2925:5;2657:279;-1:-1:-1;;;2657:279:1:o

Metadata Hash

cf5c5c029d4895631072969b0034e7ce0588d405885351c9962b96db8173a511
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.