Overview
APE Balance
APE Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
8754369 | 37 days ago | Contract Creation | 0 APE |
Loading...
Loading
Contract Name:
ConduitCaptain
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at apescan.io on 2025-01-24 */ // 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 Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"}]
Contract Creation Code
60a060405234801561001057600080fd5b50604051610b1c380380610b1c83398101604081905261002f916101fd565b826001600160a01b03163b60000361006a57604051630f32b36360e41b81526001600160a01b03841660048201526024015b60405180910390fd5b6001600160a01b03831660805261008082610091565b610089816100fd565b505050610240565b6001600160a01b0381166100b857604051631dda595d60e11b815260040160405180910390fd5b6000546001600160a01b0316156100f157600054604051633164930960e11b81526001600160a01b039091166004820152602401610061565b6100fa81610178565b50565b6001600160a01b0381166101245760405163a23a682f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f5549026e79f4449c2656308378875b265aaf4002b1ef696785f9439da13d4e369060200160405180910390a150565b600054604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146101f857600080fd5b919050565b60008060006060848603121561021257600080fd5b61021b846101e1565b9250610229602085016101e1565b9150610237604085016101e1565b90509250925092565b60805161089e61027e600039600081816101a5015281816102360152818161035a015281816104050152818161053801526105b1015261089e6000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063cf72618e11610066578063cf72618e1461017f578063d792782414610192578063ef316365146101a3578063f2fde38b146101c957600080fd5b80638da5cb5b14610148578063bed6304114610159578063cc6b2d721461016c57600080fd5b806313ad9cab146100d457806323452b9c146100e95780632db71ae1146100f15780635bb05674146101045780637762df251461011757806379ba509714610140575b600080fd5b6100e76100e23660046107c7565b6101dc565b005b6100e7610297565b6100e76100ff366004610813565b610308565b6100e7610112366004610846565b6103bb565b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6100e7610465565b6000546001600160a01b0316610124565b6100e7610167366004610813565b6104df565b6100e761017a366004610846565b610567565b6100e761018d366004610846565b6105e0565b6002546001600160a01b0316610124565b7f0000000000000000000000000000000000000000000000000000000000000000610124565b6100e76101d7366004610846565b610617565b6000546001600160a01b0316331461020757604051636db2465f60e01b815260040160405180910390fd5b6040516313ad9cab60e01b81526001600160a01b038481166004830152838116602483015282151560448301527f000000000000000000000000000000000000000000000000000000000000000016906313ad9cab90606401600060405180830381600087803b15801561027a57600080fd5b505af115801561028e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146102c257604051636db2465f60e01b815260040160405180910390fd5b604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b0319169055565b6000546001600160a01b0316331461033357604051636db2465f60e01b815260040160405180910390fd5b604051636d43542160e01b81526001600160a01b03838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d435421906044015b600060405180830381600087803b15801561039f57600080fd5b505af11580156103b3573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103e657604051636db2465f60e01b815260040160405180910390fd5b604051637b37e56160e01b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b37e561906024015b600060405180830381600087803b15801561044a57600080fd5b505af115801561045e573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146104905760405163356e005760e01b815260040160405180910390fd5b604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b03191690556104dd336106c7565b565b6002546001600160a01b0316331461050a57604051632c8c06e360e11b815260040160405180910390fd5b6040516313ad9cab60e01b81526001600160a01b0383811660048301528281166024830152600060448301527f000000000000000000000000000000000000000000000000000000000000000016906313ad9cab90606401610385565b6000546001600160a01b0316331461059257604051636db2465f60e01b815260040160405180910390fd5b6040516351710e4560e01b81526001600160a01b0382811660048301527f000000000000000000000000000000000000000000000000000000000000000016906351710e4590602401610430565b6000546001600160a01b0316331461060b57604051636db2465f60e01b815260040160405180910390fd5b61061481610730565b50565b6000546001600160a01b0316331461064257604051636db2465f60e01b815260040160405180910390fd5b6001600160a01b03811661066957604051637621b06160e01b815260040160405180910390fd5b6040516001600160a01b03821681527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600054604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166107575760405163a23a682f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f5549026e79f4449c2656308378875b265aaf4002b1ef696785f9439da13d4e369060200160405180910390a150565b80356001600160a01b03811681146107c257600080fd5b919050565b6000806000606084860312156107dc57600080fd5b6107e5846107ab565b92506107f3602085016107ab565b91506040840135801515811461080857600080fd5b809150509250925092565b6000806040838503121561082657600080fd5b61082f836107ab565b915061083d602084016107ab565b90509250929050565b60006020828403121561085857600080fd5b610861826107ab565b939250505056fea26469706673582212207240b240728dd6b724a39b8d7d9bf8f2ef40fc1eaf27821ac8ed2a76cd09fdc864736f6c634300080f003300000000000000000000000000000000f9490004c11cef243f5400493c00ad63000000000000000000000000e80a65eb7a3018deda407e621ef5fb5b416678ca000000000000000000000000e80a65eb7a3018deda407e621ef5fb5b416678ca
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638da5cb5b1161008c578063cf72618e11610066578063cf72618e1461017f578063d792782414610192578063ef316365146101a3578063f2fde38b146101c957600080fd5b80638da5cb5b14610148578063bed6304114610159578063cc6b2d721461016c57600080fd5b806313ad9cab146100d457806323452b9c146100e95780632db71ae1146100f15780635bb05674146101045780637762df251461011757806379ba509714610140575b600080fd5b6100e76100e23660046107c7565b6101dc565b005b6100e7610297565b6100e76100ff366004610813565b610308565b6100e7610112366004610846565b6103bb565b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b6100e7610465565b6000546001600160a01b0316610124565b6100e7610167366004610813565b6104df565b6100e761017a366004610846565b610567565b6100e761018d366004610846565b6105e0565b6002546001600160a01b0316610124565b7f00000000000000000000000000000000f9490004c11cef243f5400493c00ad63610124565b6100e76101d7366004610846565b610617565b6000546001600160a01b0316331461020757604051636db2465f60e01b815260040160405180910390fd5b6040516313ad9cab60e01b81526001600160a01b038481166004830152838116602483015282151560448301527f00000000000000000000000000000000f9490004c11cef243f5400493c00ad6316906313ad9cab90606401600060405180830381600087803b15801561027a57600080fd5b505af115801561028e573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146102c257604051636db2465f60e01b815260040160405180910390fd5b604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b0319169055565b6000546001600160a01b0316331461033357604051636db2465f60e01b815260040160405180910390fd5b604051636d43542160e01b81526001600160a01b03838116600483015282811660248301527f00000000000000000000000000000000f9490004c11cef243f5400493c00ad631690636d435421906044015b600060405180830381600087803b15801561039f57600080fd5b505af11580156103b3573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031633146103e657604051636db2465f60e01b815260040160405180910390fd5b604051637b37e56160e01b81526001600160a01b0382811660048301527f00000000000000000000000000000000f9490004c11cef243f5400493c00ad631690637b37e561906024015b600060405180830381600087803b15801561044a57600080fd5b505af115801561045e573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146104905760405163356e005760e01b815260040160405180910390fd5b604051600081527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b03191690556104dd336106c7565b565b6002546001600160a01b0316331461050a57604051632c8c06e360e11b815260040160405180910390fd5b6040516313ad9cab60e01b81526001600160a01b0383811660048301528281166024830152600060448301527f00000000000000000000000000000000f9490004c11cef243f5400493c00ad6316906313ad9cab90606401610385565b6000546001600160a01b0316331461059257604051636db2465f60e01b815260040160405180910390fd5b6040516351710e4560e01b81526001600160a01b0382811660048301527f00000000000000000000000000000000f9490004c11cef243f5400493c00ad6316906351710e4590602401610430565b6000546001600160a01b0316331461060b57604051636db2465f60e01b815260040160405180910390fd5b61061481610730565b50565b6000546001600160a01b0316331461064257604051636db2465f60e01b815260040160405180910390fd5b6001600160a01b03811661066957604051637621b06160e01b815260040160405180910390fd5b6040516001600160a01b03821681527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600054604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166107575760405163a23a682f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f5549026e79f4449c2656308378875b265aaf4002b1ef696785f9439da13d4e369060200160405180910390a150565b80356001600160a01b03811681146107c257600080fd5b919050565b6000806000606084860312156107dc57600080fd5b6107e5846107ab565b92506107f3602085016107ab565b91506040840135801515811461080857600080fd5b809150509250925092565b6000806040838503121561082657600080fd5b61082f836107ab565b915061083d602084016107ab565b90509250929050565b60006020828403121561085857600080fd5b610861826107ab565b939250505056fea26469706673582212207240b240728dd6b724a39b8d7d9bf8f2ef40fc1eaf27821ac8ed2a76cd09fdc864736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000f9490004c11cef243f5400493c00ad63000000000000000000000000e80a65eb7a3018deda407e621ef5fb5b416678ca000000000000000000000000e80a65eb7a3018deda407e621ef5fb5b416678ca
-----Decoded View---------------
Arg [0] : conduitController (address): 0x00000000F9490004C11Cef243f5400493c00Ad63
Arg [1] : initialOwner (address): 0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA
Arg [2] : initialRevoker (address): 0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000f9490004c11cef243f5400493c00ad63
Arg [1] : 000000000000000000000000e80a65eb7a3018deda407e621ef5fb5b416678ca
Arg [2] : 000000000000000000000000e80a65eb7a3018deda407e621ef5fb5b416678ca
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
Swarm Source
ipfs://7240b240728dd6b724a39b8d7d9bf8f2ef40fc1eaf27821ac8ed2a76cd09fdc8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
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.