Source Code
Overview
APE Balance
More Info
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
OpenSeaSignedZoneCaptain
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import { SignedZoneCaptainSub1 } from "./SignedZoneCaptainSub1.sol"; contract OpenSeaSignedZoneCaptain is SignedZoneCaptainSub1 { constructor( address signedZoneController ) SignedZoneCaptainSub1(signedZoneController) {} /** * @notice Internal function to assert that the caller is a valid deployer. */ function _assertValidDeployer() internal view override { // Ensure that the contract is being deployed by an approved // deployer. // tx.origin is used here, because we use the SignedZoneDeployer // contract to deploy this contract, and initailize the owner, // rotator, and sanitizer roles. if ( tx.origin != address(0x939C8d89EBC11fA45e576215E2353673AD0bA18A) && tx.origin != address(0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA) && tx.origin != address(0x86D26897267711ea4b173C8C124a0A73612001da) && tx.origin != address(0xbF81D02F3Ee59E79af3D9337a186F65c9faE39F3) ) { revert InvalidDeployer(); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import { SignedZoneCaptainSub1Interface } from "./interfaces/SignedZoneCaptainSub1Interface.sol"; import { SignedZoneCaptainEventsAndErrors } from "../../interfaces/SignedZoneCaptainEventsAndErrors.sol"; import { SignedZoneControllerSub1Interface } from "../controller/interfaces/SignedZoneControllerSub1Interface.sol"; import { TwoStepOwnable } from "../../ownable/TwoStepOwnable.sol"; /** * @title SignedZoneCaptain * @author BCLeFevre * @notice SignedZoneCaptain is a contract that owns signed zones and manages * their active signers via two roles. The rotator role can update * the active signers of a zone. The sanitizer role can remove all * active signers of a zone controlled by the captain and clear the * rotator role on the captain. */ abstract contract SignedZoneCaptainSub1 is TwoStepOwnable, SignedZoneCaptainSub1Interface, SignedZoneCaptainEventsAndErrors { // The address of the signed zone controller. The signed zone controller // manages signed zones. SignedZoneControllerSub1Interface private immutable _SIGNED_ZONE_CONTROLLER; // The address of the rotator. The rotator can manage the active signers of // a zone controlled by this contract. address private _rotator; // The address of the sanitizer. The sanitizer can remove all active // signers of a zone controlled by the captain and clear the rotator role // on the captain. address private _sanitizer; /** * @dev Initialize contract by setting the signed zone controller. * * @param signedZoneController The address of the signed zone controller. */ constructor(address signedZoneController) { // Ensure that the contract is being deployed by an approved deployer. _assertValidDeployer(); // Ensure that a contract is deployed to the given signed zone controller. if (signedZoneController.code.length == 0) { revert InvalidSignedZoneController(signedZoneController); } // Set the signed zone controller. _SIGNED_ZONE_CONTROLLER = SignedZoneControllerSub1Interface( signedZoneController ); } /** * @notice External initialization called by the deployer to set the owner, * rotator and sanitizer, and create a signed zone with the given * name, API endpoint, documentation URI. This function can only be * called once, as there is a check to ensure that the current * owner is address(0) before the initialization is performed, the * owner must then be set to a non address(0) address during * initialization and finally the owner cannot be set to address(0) * after initialization. * * @param initialOwner The address to be set as the owner. * @param initialRotator The address to be set as the rotator. * @param initialSanitizer The address to be set as the sanitizer. * @param zoneName The name of the zone being created. * @param apiEndpoint The API endpoint of the zone being created. * @param documentationURI The documentation URI of the zone being created. * @param zoneSalt The salt to use when creating the zone. */ function initialize( address initialOwner, address initialRotator, address initialSanitizer, string memory zoneName, string memory apiEndpoint, string memory documentationURI, bytes32 zoneSalt ) external override { // Ensure the origin is an approved deployer. _assertValidDeployer(); // Call initialize. _initialize( initialOwner, initialRotator, initialSanitizer, zoneName, apiEndpoint, documentationURI, zoneSalt ); } /** * @notice Internal initialization function to set the owner, rotator, and * sanitizer and create a new zone with the given name, API * endpoint, documentation URI and the captain as the zone owner. * * @param initialOwner The address to be set as the owner. * @param initialRotator The address to be set as the rotator. * @param initialSanitizer The address to be set as the sanitizer. * @param zoneName The name of the zone being created. * @param apiEndpoint The API endpoint of the zone being created. * @param documentationURI The documentation URI of the zone being created. * @param zoneSalt The salt to use when creating the zone. */ function _initialize( address initialOwner, address initialRotator, address initialSanitizer, string memory zoneName, string memory apiEndpoint, string memory documentationURI, bytes32 zoneSalt ) internal { // Set the owner of the captain. _setInitialOwner(initialOwner); // Set the rotator. _setRotator(initialRotator); // Set the sanitizer. _setSanitizer(initialSanitizer); // Create a new zone, with the captain as the zone owner, the given // zone name, API endpoint, and documentation URI. SignedZoneControllerSub1Interface(_SIGNED_ZONE_CONTROLLER).createZone( zoneName, apiEndpoint, documentationURI, address(this), zoneSalt ); } /** * @notice Update the API endpoint returned by the supplied zone. * Only the owner can call this function. * * @param zone The signed zone to update the API endpoint for. * @param newApiEndpoint The new API endpoint. */ function updateZoneAPIEndpoint( address zone, string calldata newApiEndpoint ) external override { // Ensure caller is the owner. _assertCallerIsOwner(); // Call to the signed zone controller to update the zone API endpoint. _SIGNED_ZONE_CONTROLLER.updateAPIEndpoint(zone, newApiEndpoint); } /** * @notice Update the documentationURI returned by a zone. Only the owner * of the supplied zone can call this function. * * @param zone The signed zone to update the API endpoint * for. * @param newDocumentationURI The new documentation URI. */ function updateZoneDocumentationURI( address zone, string calldata newDocumentationURI ) external override { // Ensure caller is the owner. _assertCallerIsOwner(); // Call to the signed zone controller to update the zone documentation // URI. _SIGNED_ZONE_CONTROLLER.updateDocumentationURI( zone, newDocumentationURI ); } /** * @notice Update the signer for a given signed zone. * * @param zone The signed zone to update the signer for. * @param signer The signer to update. * @param active If the signer should be active or not. */ function updateZoneSigner( address zone, address signer, bool active ) external override { // Ensure caller is the owner. _assertCallerIsOwner(); // Call to the signed zone controller to update the zone signer. _SIGNED_ZONE_CONTROLLER.updateSigner(zone, signer, active); } /** * @notice Update the rotator role on the captain. * * @param newRotator The new rotator of the captain. */ function updateRotator(address newRotator) external override { // Ensure caller is owner. _assertCallerIsOwner(); // Set the new rotator. _setRotator(newRotator); } /** * @notice Update the sanitizer role on the captain. * * @param newSanitizer The new sanitizer of the captain. */ function updateSanitizer(address newSanitizer) external override { // Ensure caller is owner. _assertCallerIsOwner(); // Set the new sanitizer. _setSanitizer(newSanitizer); } /** * @notice Initiate zone ownership transfer by assigning a new potential * owner for the given zone. Only callable by the owner. * * @param zone The zone for which to initiate ownership * transfer. * @param newPotentialOwner The new potential owner to set. */ function transferZoneOwnership( address zone, address newPotentialOwner ) external override { // Ensure caller is the owner. _assertCallerIsOwner(); // Call to the signed zone controller to transfer the zone ownership. _SIGNED_ZONE_CONTROLLER.transferOwnership(zone, newPotentialOwner); } /** * @notice Clear the currently set potential owner, if any, from a zone. * Only callable by the owner. * * @param zone The zone for which to cancel ownership transfer. */ function cancelZoneOwnershipTransfer(address zone) external override { // Ensure caller is the owner. _assertCallerIsOwner(); // Call to the signed zone controller to cancel the zone ownership // transfer. _SIGNED_ZONE_CONTROLLER.cancelOwnershipTransfer(zone); } /** * @notice Accept ownership of a given zone once the address has been set * as the current potential owner. Only callable by the owner. * * @param zone The zone for which to accept ownership transfer. */ function acceptZoneOwnership(address zone) external override { // Ensure caller is the owner. _assertCallerIsOwner(); // Call to the signed zone controller to accept the zone ownership. _SIGNED_ZONE_CONTROLLER.acceptOwnership(zone); } /** * @notice Rotate the signers for a given zone. Only callable by the owner * or the rotator of the zone. * * @param zone The zone to rotate the signers for. * @param signerToRemove The signer to remove. * @param signerToAdd The signer to add. */ function rotateSigners( address zone, address signerToRemove, address signerToAdd ) external override { // Ensure caller is the owner or the rotator. _assertCallerIsOwnerOrRotator(); // Call to the signed zone controller to remove the signer. _SIGNED_ZONE_CONTROLLER.updateSigner(zone, signerToRemove, false); // Call to the signed zone controller to add the signer. _SIGNED_ZONE_CONTROLLER.updateSigner(zone, signerToAdd, true); } /** * @notice This will remove all active signers of the given zone and clear * the rotator address on the captain. Only callable by the owner * or the sanitizer of the zone. * * @param zone The zone to revoke. */ function sanitizeSignedZone(address zone) external override { // Ensure caller is the owner or the sanitizer. _assertCallerIsOwnerOrSanitizer(); // Call to the signed zone controller to sanitize the signed zone. address[] memory signers = _SIGNED_ZONE_CONTROLLER.getActiveSigners( zone ); // Loop through the signers and deactivate them. for (uint256 i = 0; i < signers.length; i++) { _SIGNED_ZONE_CONTROLLER.updateSigner(zone, signers[i], false); } // Clear the rotator role. delete _rotator; // Emit the sanitized event. emit ZoneSanitized(zone); } /** * @notice Get the rotator address. * * @return The rotator address. */ function getRotator() external view override returns (address) { return _rotator; } /** * @notice Get the sanitizer address. * * @return The sanitizer address. */ function getSanitizer() external view override returns (address) { return _sanitizer; } /** * @notice Internal function to set the rotator role on the contract, * checking to make sure the provided address is not the null * address * * @param newRotator The new rotator address. */ function _setRotator(address newRotator) internal { // Ensure new rotator is not null. if (newRotator == address(0)) { revert RotatorCannotBeNullAddress(); } _rotator = newRotator; emit RotatorUpdated(newRotator); } /** * @notice Internal function to set the sanitizer role on the contract, * checking to make sure the provided address is not the null * address * * @param newSanitizer The new sanitizer address. */ function _setSanitizer(address newSanitizer) internal { // Ensure new sanitizer is not null. if (newSanitizer == address(0)) { revert SanitizerCannotBeNullAddress(); } _sanitizer = newSanitizer; emit SanitizerUpdated(newSanitizer); } /** * @notice Internal function to assert that the caller is a valid deployer. * This must be overwritten by the contract that inherits from this * contract. This is to ensure that the caller or tx.orign is * permitted to deploy this contract. */ function _assertValidDeployer() internal view virtual { revert("Not implemented assertValidDeployer"); } /** * @dev Internal view function to revert if the caller is not the owner or * the sanitizer. */ function _assertCallerIsOwnerOrSanitizer() internal view { // Ensure caller is the owner or the sanitizer. if (msg.sender != owner() && msg.sender != _sanitizer) { revert CallerIsNotOwnerOrSanitizer(); } } /** * @dev Internal view function to revert if the caller is not the owner or * the rotator. */ function _assertCallerIsOwnerOrRotator() internal view { // Ensure caller is the owner or the rotator. if (msg.sender != owner() && msg.sender != _rotator) { revert CallerIsNotOwnerOrRotator(); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import { SignedZoneCaptainInterface } from "../../../interfaces/SignedZoneCaptainInterface.sol"; /** * @title SignedZoneCaptainSub1Interface * @author BCLeFevre * @notice SignedZoneCaptainSub1Interface contains function declarations for the * SignedZoneCaptain contract with additional functions for sub1. */ interface SignedZoneCaptainSub1Interface is SignedZoneCaptainInterface { /** * @notice External initialization called by the deployer to set the owner, * rotator and sanitizer, and create a signed zone with the given * name, API endpoint, documentation URI. * * @param initialOwner The address to be set as the owner. * @param initialRotator The address to be set as the rotator. * @param initialSanitizer The address to be set as the sanitizer. * @param zoneName The name of the zone being created. * @param apiEndpoint The API endpoint of the zone being created. * @param documentationURI The documentation URI of the zone being created. * @param zoneSalt The salt to use when creating the zone. */ function initialize( address initialOwner, address initialRotator, address initialSanitizer, string calldata zoneName, string calldata apiEndpoint, string calldata documentationURI, bytes32 zoneSalt ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /** * @notice SignedZoneCaptainEventsAndErrors contains errors and events * related to owning signed zones. */ interface SignedZoneCaptainEventsAndErrors { /** * @dev Emit an event when the contract owner updates the rotator. * * @param newRotator The new rotator of the contract. */ event RotatorUpdated(address newRotator); /** * @dev Emit an event when the contract owner updates the sanitizer. * * @param newSanitizer The new sanitizer of the contract. */ event SanitizerUpdated(address newSanitizer); /** * @dev Emit an event when the sanitizer sanitizes a zone. * * @param zone The zone address being sanitized. */ event ZoneSanitized(address zone); /** * @dev Revert with an error when attempting to deploy the contract with an * invalid deployer. */ error InvalidDeployer(); /** * @dev Revert with an error when attempting to set a zone controller * that does not contain contract code. * * @param signedZoneController The invalid address. */ error InvalidSignedZoneController(address signedZoneController); /** * @dev Revert with an error when attempting to set the rotator * to the null address. */ error RotatorCannotBeNullAddress(); /** * @dev Revert with an error when attempting to set the sanitizer * to the null address. */ error SanitizerCannotBeNullAddress(); /** * @dev Revert with an error when attempting to call a function that * requires the caller to be the owner or sanitizer of the zone. */ error CallerIsNotOwnerOrSanitizer(); /** * @dev Revert with an error when attempting to call a function that * requires the caller to be the owner or rotator of the zone. */ error CallerIsNotOwnerOrRotator(); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import { SignedZoneControllerInterface } from "../../../interfaces/SignedZoneControllerInterface.sol"; /** * @title SignedZoneControllerSub1Interface * @author BCLeFevre * @notice SignedZoneControllerSub1Interface enables the deploying of SignedZones. * SignedZones are an implementation of SIP-7 that requires orders * to be signed by an approved signer. * https://github.com/ProjectOpenSea/SIPs/blob/main/SIPS/sip-7.md * */ interface SignedZoneControllerSub1Interface is SignedZoneControllerInterface { /** * @notice Deploy a SignedZone to a precomputed address. * * @param zoneName The name for the zone returned in * getSeaportMetadata(). * @param apiEndpoint The API endpoint where orders for this zone can * be signed. * @param documentationURI The URI to the documentation describing the * behavior of the contract. Request and response * payloads are defined in SIP-7. * @param salt The salt to be used to derive the zone address * @param initialOwner The initial owner to set for the new zone. * * @return signedZone The derived address for the zone. */ function createZone( string memory zoneName, string memory apiEndpoint, string memory documentationURI, address initialOwner, bytes32 salt ) external returns (address signedZone); /** * @notice Derive the zone address associated with a salt. * * @param zoneName The name of the zone. * @param salt The salt to be used to derive the zone address. * * @return derivedAddress The derived address of the signed zone. */ function getZone( string memory zoneName, bytes32 salt ) external view returns (address derivedAddress); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import { TwoStepOwnableInterface } from "./interfaces/TwoStepOwnableInterface.sol"; /** * @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; /** * @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 { // Ensure the caller is the owner. _assertCallerIsOwner(); // Ensure the new potential owner is not an invalid address. if (newPotentialOwner == address(0)) { revert NewPotentialOwnerIsNullAddress(); } // Ensure the new potential owner is not already set. if (newPotentialOwner == _potentialOwner) { revert NewPotentialOwnerAlreadySet(_potentialOwner); } // 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 { // Ensure the caller is the owner. _assertCallerIsOwner(); // Emit an event indicating that the potential owner has been cleared. emit PotentialOwnerUpdated(address(0)); // Ensure that ownership transfer is currently possible. if (_potentialOwner == address(0)) { revert NoPotentialOwnerCurrentlySet(); } // 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); } /** * @dev Internal view function to revert if the caller is not the owner. */ function _assertCallerIsOwner() internal view { // Ensure caller is the owner. if (msg.sender != owner()) { revert CallerIsNotOwner(); } } /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /** * @title SignedZoneCaptainInterface * @author BCLeFevre * @notice SignedZoneCaptainInterface contains function declarations for the * SignedZoneCaptain contract. */ interface SignedZoneCaptainInterface { /** * @notice Update the signer for a given signed zone. * * @param zone The signed zone to update the signer for. * @param signer The signer to update. * @param active If the signer should be active or not. */ function updateZoneSigner( address zone, address signer, bool active ) external; /** * @notice Update the API endpoint returned by the supplied zone. * Only the owner can call this function. * * @param zone The signed zone to update the API endpoint for. * @param newApiEndpoint The new API endpoint. */ function updateZoneAPIEndpoint( address zone, string calldata newApiEndpoint ) external; /** * @notice Update the documentationURI returned by a zone. Only the owner * of the supplied zone can call this function. * * @param zone The signed zone to update the API endpoint * for. * @param newDocumentationURI The new documentation URI. */ function updateZoneDocumentationURI( address zone, string calldata newDocumentationURI ) external; /** * @notice Initiate zone ownership transfer by assigning a new potential * owner for the given zone. Only callable by the owner. * * @param zone The zone for which to initiate ownership * transfer. * @param newPotentialOwner The new potential owner to set. */ function transferZoneOwnership( address zone, address newPotentialOwner ) external; /** * @notice Clear the currently set potential owner, if any, from a zone. * Only callable by the owner. * * @param zone The zone for which to cancel ownership transfer. */ function cancelZoneOwnershipTransfer(address zone) external; /** * @notice Accept ownership of a given zone once the address has been set * as the current potential owner. Only callable by the owner. * * @param zone The zone for which to accept ownership transfer. */ function acceptZoneOwnership(address zone) external; /** * @notice Rotate the signers for a given zone. Only callable by the owner * or the rotator of the zone. * * @param zone The zone to rotate the signers for. * @param signerToRemove The signer to remove. * @param signerToAdd The signer to add. */ function rotateSigners( address zone, address signerToRemove, address signerToAdd ) external; /** * @notice This will remove all active signers and clear the rotator * address on the captain. Only callable by the owner or the * sanitizer of the zone. * * @param zone The zone to sanitize. */ function sanitizeSignedZone(address zone) external; /** * @notice Update the rotator role on the captain. * * @param newRotator The new rotator of the captain. */ function updateRotator(address newRotator) external; /** * @notice Update the sanitizer role on the captain. * * @param newSanitizer The new sanitizer of the captain. */ function updateSanitizer(address newSanitizer) external; /** * @notice Get the rotator address. * * @return The rotator address. */ function getRotator() external view returns (address); /** * @notice Get the sanitizer address. * * @return The sanitizer address. */ function getSanitizer() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; /** * @title SignedZoneControllerInterface * @author BCLeFevre * @notice SignedZoneControllerInterface enables the deploying of SignedZones. * SignedZones are an implementation of SIP-7 that requires orders * to be signed by an approved signer. * https://github.com/ProjectOpenSea/SIPs/blob/main/SIPS/sip-7.md * */ interface SignedZoneControllerInterface { /** * @notice Returns the active signers for the zone. * * @param signedZone The signed zone to get the active signers for. * * @return signers The active signers. */ function getActiveSigners( address signedZone ) external view returns (address[] memory signers); /** * @notice Returns additional information about the zone. * * @param zone The zone to get the additional information for. * * @return domainSeparator The domain separator used for signing. * @return zoneName The name of the zone. * @return apiEndpoint The API endpoint for the zone. * @return substandards The substandards supported by the zone. * @return documentationURI The documentation URI for the zone. */ function getAdditionalZoneInformation( address zone ) external view returns ( bytes32 domainSeparator, string memory zoneName, string memory apiEndpoint, uint256[] memory substandards, string memory documentationURI ); /** * @notice Update the API endpoint returned by the supplied zone. * Only the owner or an active signer can call this function. * * @param signedZone The signed zone to update the API endpoint for. * @param newApiEndpoint The new API endpoint. */ function updateAPIEndpoint( address signedZone, string calldata newApiEndpoint ) external; /** * @notice Update the documentationURI returned by a zone. * Only the owner or an active signer of the supplied zone can call * this function. * * @param zone The signed zone to update the API endpoint for. * @param documentationURI The new documentation URI. */ function updateDocumentationURI( address zone, string calldata documentationURI ) external; /** * @notice Update the signer for a given signed zone. * * @param signedZone The signed zone to update the signer for. * @param signer The signer to update. * @param active If the signer should be active or not. */ function updateSigner( address signedZone, address signer, bool active ) external; /** * @notice Initiate zone ownership transfer by assigning a new potential * owner for the given zone. Once set, the new potential owner * may call `acceptOwnership` to claim ownership of the zone. * Only the owner of the zone in question may call this function. * * @param zone The zone for which to initiate ownership * transfer. * @param newPotentialOwner The new potential owner of the zone. */ function transferOwnership( address zone, address newPotentialOwner ) external; /** * @notice Clear the currently set potential owner, if any, from a zone. * Only the owner of the zone in question may call this function. * * @param zone The zone for which to cancel ownership transfer. */ function cancelOwnershipTransfer(address zone) external; /** * @notice Accept ownership of a supplied zone. Only accounts that the * current owner has set as the new potential owner may call this * function. * * @param zone The zone for which to accept ownership. */ function acceptOwnership(address zone) external; /** * @notice Retrieve the current owner of a deployed zone. * * @param zone The zone for which to retrieve the associated owner. * * @return owner The owner of the supplied zone. */ function ownerOf(address zone) external view returns (address owner); /** * @notice Retrieve the potential owner, if any, for a given zone. The * current owner may set a new potential owner via * `transferOwnership` and that owner may then accept ownership of * the zone in question via `acceptOwnership`. * * @param zone The zone for which to retrieve the potential owner. * * @return potentialOwner The potential owner, if any, for the zone. */ function getPotentialOwner( address zone ) external view returns (address potentialOwner); /** * @notice Returns whether or not the supplied address is an active signer * for the supplied zone. * * @param zone The zone to check if the supplied address is an active * signer for. * @param signer The address to check if it is an active signer for * * @return active If the supplied address is an active signer for the * supplied zone. */ function isActiveSigner( address zone, address signer ) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /** * @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 call a function that * requires ownership with a caller that is not 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 call a function that * requires the owner to not have been set. */ error OwnerAlreadySet(address owner); /** * @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 set a new potential owner * that is already set. */ error NewPotentialOwnerAlreadySet(address newPotentialOwner); /** * @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(); /** * @dev Revert with an error when attempting to cancel ownership transfer * when no new potential owner is currently set. */ error NoPotentialOwnerCurrentlySet(); /** * @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); }
{ "remappings": [ "@rari-capital/solmate/=lib/solmate/", "ds-test/=lib/ds-test/src/", "forge-std/=lib/forge-std/src/", "murky/=lib/murky/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "solarray/=lib/solarray/src/", "solady/=lib/solady/", "seaport-sol/src/=src/sol/", "seaport-sol/=src/sol/", "seaport-types/src/=src/types/", "seaport-types/=src/types/", "seaport-core/src/=src/core/", "seaport-core/=src/core/", "seaport/=src/main/", "@limitbreak/creator-token-standards/=lib/erc721c-seaport/lib/creator-token-standards/src/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "ERC721A/=lib/erc721c-seaport/lib/creator-token-standards/lib/ERC721A/contracts/", "creator-token-standards/=lib/erc721c-seaport/lib/creator-token-standards/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "erc721a/=lib/erc721c-seaport/lib/creator-token-standards/lib/ERC721A/", "erc721c-seaport/=lib/erc721c-seaport/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "seaport-deploy/=lib/erc721c-seaport/lib/seaport-deploy/", "solmate/=lib/solmate/src/" ], "optimizer": { "enabled": true, "runs": 9999999 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "cancun", "viaIR": false, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"signedZoneController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CallerIsNotNewPotentialOwner","type":"error"},{"inputs":[],"name":"CallerIsNotOwner","type":"error"},{"inputs":[],"name":"CallerIsNotOwnerOrRotator","type":"error"},{"inputs":[],"name":"CallerIsNotOwnerOrSanitizer","type":"error"},{"inputs":[],"name":"InitialOwnerIsNullAddress","type":"error"},{"inputs":[],"name":"InvalidDeployer","type":"error"},{"inputs":[{"internalType":"address","name":"signedZoneController","type":"address"}],"name":"InvalidSignedZoneController","type":"error"},{"inputs":[{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"NewPotentialOwnerAlreadySet","type":"error"},{"inputs":[],"name":"NewPotentialOwnerIsNullAddress","type":"error"},{"inputs":[],"name":"NoPotentialOwnerCurrentlySet","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnerAlreadySet","type":"error"},{"inputs":[],"name":"RotatorCannotBeNullAddress","type":"error"},{"inputs":[],"name":"SanitizerCannotBeNullAddress","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":"newRotator","type":"address"}],"name":"RotatorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newSanitizer","type":"address"}],"name":"SanitizerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"zone","type":"address"}],"name":"ZoneSanitized","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zone","type":"address"}],"name":"acceptZoneOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zone","type":"address"}],"name":"cancelZoneOwnershipTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRotator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSanitizer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"initialRotator","type":"address"},{"internalType":"address","name":"initialSanitizer","type":"address"},{"internalType":"string","name":"zoneName","type":"string"},{"internalType":"string","name":"apiEndpoint","type":"string"},{"internalType":"string","name":"documentationURI","type":"string"},{"internalType":"bytes32","name":"zoneSalt","type":"bytes32"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","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":"zone","type":"address"},{"internalType":"address","name":"signerToRemove","type":"address"},{"internalType":"address","name":"signerToAdd","type":"address"}],"name":"rotateSigners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zone","type":"address"}],"name":"sanitizeSignedZone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"newPotentialOwner","type":"address"}],"name":"transferZoneOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRotator","type":"address"}],"name":"updateRotator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newSanitizer","type":"address"}],"name":"updateSanitizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zone","type":"address"},{"internalType":"string","name":"newApiEndpoint","type":"string"}],"name":"updateZoneAPIEndpoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zone","type":"address"},{"internalType":"string","name":"newDocumentationURI","type":"string"}],"name":"updateZoneDocumentationURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"zone","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"updateZoneSigner","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801562000010575f80fd5b50604051620019e1380380620019e1833981016040819052620000339162000127565b806200003e6200008b565b806001600160a01b03163b5f036200007857604051637714cc9b60e01b81526001600160a01b038216600482015260240160405180910390fd5b6001600160a01b03166080525062000156565b3273939c8d89ebc11fa45e576215e2353673ad0ba18a14801590620000c457503273e80a65eb7a3018deda407e621ef5fb5b416678ca14155b8015620000e55750327386d26897267711ea4b173c8c124a0a73612001da14155b80156200010657503273bf81d02f3ee59e79af3d9337a186f65c9fae39f314155b15620001255760405163043c669f60e01b815260040160405180910390fd5b565b5f6020828403121562000138575f80fd5b81516001600160a01b03811681146200014f575f80fd5b9392505050565b60805161182c620001b55f395f81816103370152818161048b0152818161055c015281816105f601528181610852015281816108e00152818161099801528181610a2201528181610acb01528181610b490152610fb1015261182c5ff3fe608060405234801561000f575f80fd5b506004361061012f575f3560e01c806379ba5097116100ad5780638da5cb5b1161007d5780639c7f3335116100635780639c7f33351461028c578063e74370951461029f578063f2fde38b146102b2575f80fd5b80638da5cb5b14610251578063961376591461026e575f80fd5b806379ba5097146102105780637da39913146102185780638b267deb1461022b5780638d4fd1581461023e575f80fd5b806323452b9c1161010257806344a0b6f2116100e857806344a0b6f2146101cc5780635b09b370146101df5780637762df25146101f2575f80fd5b806323452b9c146101b15780632a8306e2146101b9575f80fd5b806302f7156714610133578063089ab0c4146101485780630b8c0c9f1461015b5780631f66010a1461019e575b5f80fd5b6101466101413660046112ae565b6102c5565b005b6101466101563660046112ae565b6102d9565b60035473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6101466101ac3660046112ae565b6102ea565b610146610392565b6101466101c73660046112d0565b610446565b6101466101da366004611454565b6104f6565b6101466101ed3660046112ae565b61050d565b60015473ffffffffffffffffffffffffffffffffffffffff16610175565b610146610756565b6101466102263660046112d0565b61080d565b610146610239366004611514565b61088b565b61014661024c36600461154b565b61093b565b5f5473ffffffffffffffffffffffffffffffffffffffff16610175565b60025473ffffffffffffffffffffffffffffffffffffffff16610175565b61014661029a366004611597565b6109c7565b6101466102ad3660046112ae565b610afc565b6101466102c03660046112ae565b610b78565b6102cd610cd3565b6102d681610d23565b50565b6102e1610cd3565b6102d681610dea565b6102f2610cd3565b6040517f51710e4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000000000000000000000000000000000000016906351710e45906024015b5f604051808303815f87803b158015610379575f80fd5b505af115801561038b573d5f803e3d5ffd5b5050505050565b61039a610cd3565b6040515f81527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a160015473ffffffffffffffffffffffffffffffffffffffff1661041c576040517f85c3240900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b61044e610cd3565b6040517f541bbd3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063541bbd32906104c4908690869086906004016115d4565b5f604051808303815f87803b1580156104db575f80fd5b505af11580156104ed573d5f803e3d5ffd5b50505050505050565b6104fe610eaa565b6104ed87878787878787610f59565b610515611038565b6040517f66a2489f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906366a2489f906024015f60405180830381865afa1580156105a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105e7919081019061163d565b90505f5b81518110156106e0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dca0938384848481518110610643576106436116ea565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201525f60448201526064015f604051808303815f87803b1580156106be575f80fd5b505af11580156106d0573d5f803e3d5ffd5b5050600190920191506105eb9050565b50600280547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560405173ffffffffffffffffffffffffffffffffffffffff831681527f34e303260a4d58fdd43ad4a37dfc0c7ce1c835d4137abbc94ac6763cf7923e649060200160405180910390a15050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107a7576040517f356e005700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f81527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561080b336110ae565b565b610815610cd3565b6040517fe89fad5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063e89fad58906104c4908690869086906004016115d4565b610893610cd3565b6040517f6d43542100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f00000000000000000000000000000000000000000000000000000000000000001690636d435421906044015f604051808303815f87803b158015610921575f80fd5b505af1158015610933573d5f803e3d5ffd5b505050505050565b610943610cd3565b6040517fdca0938300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152838116602483015282151560448301527f0000000000000000000000000000000000000000000000000000000000000000169063dca09383906064016104c4565b6109cf611147565b6040517fdca0938300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301525f60448301527f0000000000000000000000000000000000000000000000000000000000000000169063dca09383906064015f604051808303815f87803b158015610a63575f80fd5b505af1158015610a75573d5f803e3d5ffd5b50506040517fdca0938300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528481166024830152600160448301527f000000000000000000000000000000000000000000000000000000000000000016925063dca0938391506064016104c4565b610b04610cd3565b6040517f7b37e56100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f00000000000000000000000000000000000000000000000000000000000000001690637b37e56190602401610362565b610b80610cd3565b73ffffffffffffffffffffffffffffffffffffffff8116610bcd576040517f7621b06100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff90811690821603610c43576001546040517f10aecd9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff821681527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461080b576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610d70576040517ff1eaab1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa061937ca7bfba5c8e5d1690098f8008aa9b45a921bf2f7c8d9a3221ceec49c6906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff8116610e37576040517f8a2a8d7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f90c3857c3ff172f31182e610725596ca9af20f2f614b4b9bd22600fd81eb21ca90602001610ddf565b3273939c8d89ebc11fa45e576215e2353673ad0ba18a14801590610ee257503273e80a65eb7a3018deda407e621ef5fb5b416678ca14155b8015610f025750327386d26897267711ea4b173c8c124a0a73612001da14155b8015610f2257503273bf81d02f3ee59e79af3d9337a186f65c9fae39f314155b1561080b576040517f043c669f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f62876111bd565b610f6b86610d23565b610f7485610dea565b6040517f0eb9251600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630eb9251690610fee9087908790879030908890600401611778565b6020604051808303815f875af115801561100a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102e91906117db565b5050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314801590611077575060035473ffffffffffffffffffffffffffffffffffffffff163314155b1561080b576040517f1b95b59200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a15f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff163314801590611186575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561080b576040517f14f1252f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661120a576040517f3bb4b2ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff1615611274575f546040517f62c9261200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610c3a565b6102d6816110ae565b73ffffffffffffffffffffffffffffffffffffffff811681146102d6575f80fd5b80356112a98161127d565b919050565b5f602082840312156112be575f80fd5b81356112c98161127d565b9392505050565b5f805f604084860312156112e2575f80fd5b83356112ed8161127d565b9250602084013567ffffffffffffffff80821115611309575f80fd5b818601915086601f83011261131c575f80fd5b81358181111561132a575f80fd5b87602082850101111561133b575f80fd5b6020830194508093505050509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113c2576113c261134e565b604052919050565b5f82601f8301126113d9575f80fd5b813567ffffffffffffffff8111156113f3576113f361134e565b61142460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161137b565b818152846020838601011115611438575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f805f60e0888a03121561146a575f80fd5b87356114758161127d565b965060208801356114858161127d565b95506114936040890161129e565b9450606088013567ffffffffffffffff808211156114af575f80fd5b6114bb8b838c016113ca565b955060808a01359150808211156114d0575f80fd5b6114dc8b838c016113ca565b945060a08a01359150808211156114f1575f80fd5b506114fe8a828b016113ca565b92505060c0880135905092959891949750929550565b5f8060408385031215611525575f80fd5b82356115308161127d565b915060208301356115408161127d565b809150509250929050565b5f805f6060848603121561155d575f80fd5b83356115688161127d565b925060208401356115788161127d565b91506040840135801515811461158c575f80fd5b809150509250925092565b5f805f606084860312156115a9575f80fd5b83356115b48161127d565b925060208401356115c48161127d565b9150604084013561158c8161127d565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f602080838503121561164e575f80fd5b825167ffffffffffffffff80821115611665575f80fd5b818501915085601f830112611678575f80fd5b81518181111561168a5761168a61134e565b8060051b915061169b84830161137b565b81815291830184019184810190888411156116b4575f80fd5b938501935b838510156116de57845192506116ce8361127d565b82825293850193908501906116b9565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81518084525f5b8181101561173b5760208185018101518683018201520161171f565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60a081525f61178a60a0830188611717565b828103602084015261179c8188611717565b905082810360408401526117b08187611717565b73ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b5f602082840312156117eb575f80fd5b81516112c98161127d56fea26469706673582212203711892ca35282776035c464cab45989cf23633874c96a97d21e3a891dc5c49864736f6c63430008180033000000000000000000000000000000657e498d54000053b69bdaad008a001dbf
Deployed Bytecode
0x608060405234801561000f575f80fd5b506004361061012f575f3560e01c806379ba5097116100ad5780638da5cb5b1161007d5780639c7f3335116100635780639c7f33351461028c578063e74370951461029f578063f2fde38b146102b2575f80fd5b80638da5cb5b14610251578063961376591461026e575f80fd5b806379ba5097146102105780637da39913146102185780638b267deb1461022b5780638d4fd1581461023e575f80fd5b806323452b9c1161010257806344a0b6f2116100e857806344a0b6f2146101cc5780635b09b370146101df5780637762df25146101f2575f80fd5b806323452b9c146101b15780632a8306e2146101b9575f80fd5b806302f7156714610133578063089ab0c4146101485780630b8c0c9f1461015b5780631f66010a1461019e575b5f80fd5b6101466101413660046112ae565b6102c5565b005b6101466101563660046112ae565b6102d9565b60035473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6101466101ac3660046112ae565b6102ea565b610146610392565b6101466101c73660046112d0565b610446565b6101466101da366004611454565b6104f6565b6101466101ed3660046112ae565b61050d565b60015473ffffffffffffffffffffffffffffffffffffffff16610175565b610146610756565b6101466102263660046112d0565b61080d565b610146610239366004611514565b61088b565b61014661024c36600461154b565b61093b565b5f5473ffffffffffffffffffffffffffffffffffffffff16610175565b60025473ffffffffffffffffffffffffffffffffffffffff16610175565b61014661029a366004611597565b6109c7565b6101466102ad3660046112ae565b610afc565b6101466102c03660046112ae565b610b78565b6102cd610cd3565b6102d681610d23565b50565b6102e1610cd3565b6102d681610dea565b6102f2610cd3565b6040517f51710e4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf16906351710e45906024015b5f604051808303815f87803b158015610379575f80fd5b505af115801561038b573d5f803e3d5ffd5b5050505050565b61039a610cd3565b6040515f81527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a160015473ffffffffffffffffffffffffffffffffffffffff1661041c576040517f85c3240900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b61044e610cd3565b6040517f541bbd3200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf169063541bbd32906104c4908690869086906004016115d4565b5f604051808303815f87803b1580156104db575f80fd5b505af11580156104ed573d5f803e3d5ffd5b50505050505050565b6104fe610eaa565b6104ed87878787878787610f59565b610515611038565b6040517f66a2489f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf909116906366a2489f906024015f60405180830381865afa1580156105a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105e7919081019061163d565b90505f5b81518110156106e0577f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf73ffffffffffffffffffffffffffffffffffffffff1663dca0938384848481518110610643576106436116ea565b60209081029190910101516040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201525f60448201526064015f604051808303815f87803b1580156106be575f80fd5b505af11580156106d0573d5f803e3d5ffd5b5050600190920191506105eb9050565b50600280547fffffffffffffffffffffffff000000000000000000000000000000000000000016905560405173ffffffffffffffffffffffffffffffffffffffff831681527f34e303260a4d58fdd43ad4a37dfc0c7ce1c835d4137abbc94ac6763cf7923e649060200160405180910390a15050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107a7576040517f356e005700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040515f81527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180547fffffffffffffffffffffffff000000000000000000000000000000000000000016905561080b336110ae565b565b610815610cd3565b6040517fe89fad5800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf169063e89fad58906104c4908690869086906004016115d4565b610893610cd3565b6040517f6d43542100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf1690636d435421906044015f604051808303815f87803b158015610921575f80fd5b505af1158015610933573d5f803e3d5ffd5b505050505050565b610943610cd3565b6040517fdca0938300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152838116602483015282151560448301527f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf169063dca09383906064016104c4565b6109cf611147565b6040517fdca0938300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283811660248301525f60448301527f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf169063dca09383906064015f604051808303815f87803b158015610a63575f80fd5b505af1158015610a75573d5f803e3d5ffd5b50506040517fdca0938300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528481166024830152600160448301527f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf16925063dca0938391506064016104c4565b610b04610cd3565b6040517f7b37e56100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf1690637b37e56190602401610362565b610b80610cd3565b73ffffffffffffffffffffffffffffffffffffffff8116610bcd576040517f7621b06100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff90811690821603610c43576001546040517f10aecd9000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024015b60405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff821681527f11a3cf439fb225bfe74225716b6774765670ec1060e3796802e62139d69974da9060200160405180910390a1600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461080b576040517f6db2465f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610d70576040517ff1eaab1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fa061937ca7bfba5c8e5d1690098f8008aa9b45a921bf2f7c8d9a3221ceec49c6906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff8116610e37576040517f8a2a8d7a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f90c3857c3ff172f31182e610725596ca9af20f2f614b4b9bd22600fd81eb21ca90602001610ddf565b3273939c8d89ebc11fa45e576215e2353673ad0ba18a14801590610ee257503273e80a65eb7a3018deda407e621ef5fb5b416678ca14155b8015610f025750327386d26897267711ea4b173c8c124a0a73612001da14155b8015610f2257503273bf81d02f3ee59e79af3d9337a186f65c9fae39f314155b1561080b576040517f043c669f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f62876111bd565b610f6b86610d23565b610f7485610dea565b6040517f0eb9251600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000657e498d54000053b69bdaad008a001dbf1690630eb9251690610fee9087908790879030908890600401611778565b6020604051808303815f875af115801561100a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102e91906117db565b5050505050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314801590611077575060035473ffffffffffffffffffffffffffffffffffffffff163314155b1561080b576040517f1b95b59200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a15f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f5473ffffffffffffffffffffffffffffffffffffffff163314801590611186575060025473ffffffffffffffffffffffffffffffffffffffff163314155b1561080b576040517f14f1252f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811661120a576040517f3bb4b2ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff1615611274575f546040517f62c9261200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610c3a565b6102d6816110ae565b73ffffffffffffffffffffffffffffffffffffffff811681146102d6575f80fd5b80356112a98161127d565b919050565b5f602082840312156112be575f80fd5b81356112c98161127d565b9392505050565b5f805f604084860312156112e2575f80fd5b83356112ed8161127d565b9250602084013567ffffffffffffffff80821115611309575f80fd5b818601915086601f83011261131c575f80fd5b81358181111561132a575f80fd5b87602082850101111561133b575f80fd5b6020830194508093505050509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113c2576113c261134e565b604052919050565b5f82601f8301126113d9575f80fd5b813567ffffffffffffffff8111156113f3576113f361134e565b61142460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161137b565b818152846020838601011115611438575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f805f60e0888a03121561146a575f80fd5b87356114758161127d565b965060208801356114858161127d565b95506114936040890161129e565b9450606088013567ffffffffffffffff808211156114af575f80fd5b6114bb8b838c016113ca565b955060808a01359150808211156114d0575f80fd5b6114dc8b838c016113ca565b945060a08a01359150808211156114f1575f80fd5b506114fe8a828b016113ca565b92505060c0880135905092959891949750929550565b5f8060408385031215611525575f80fd5b82356115308161127d565b915060208301356115408161127d565b809150509250929050565b5f805f6060848603121561155d575f80fd5b83356115688161127d565b925060208401356115788161127d565b91506040840135801515811461158c575f80fd5b809150509250925092565b5f805f606084860312156115a9575f80fd5b83356115b48161127d565b925060208401356115c48161127d565b9150604084013561158c8161127d565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f602080838503121561164e575f80fd5b825167ffffffffffffffff80821115611665575f80fd5b818501915085601f830112611678575f80fd5b81518181111561168a5761168a61134e565b8060051b915061169b84830161137b565b81815291830184019184810190888411156116b4575f80fd5b938501935b838510156116de57845192506116ce8361127d565b82825293850193908501906116b9565b98975050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81518084525f5b8181101561173b5760208185018101518683018201520161171f565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60a081525f61178a60a0830188611717565b828103602084015261179c8188611717565b905082810360408401526117b08187611717565b73ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529392505050565b5f602082840312156117eb575f80fd5b81516112c98161127d56fea26469706673582212203711892ca35282776035c464cab45989cf23633874c96a97d21e3a891dc5c49864736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000657E498D54000053B69bDaad008a001Dbf
-----Decoded View---------------
Arg [0] : signedZoneController (address): 0x000000657E498D54000053B69bDaad008a001Dbf
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000657E498D54000053B69bDaad008a001Dbf
Deployed Bytecode Sourcemap
128:998:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7713:201:6;;;;;;:::i;:::-;;:::i;:::-;;8061:211;;;;;;:::i;:::-;;:::i;12110:99::-;12192:10;;;;12110:99;;;740:42:9;728:55;;;710:74;;698:2;683:18;12110:99:6;;;;;;;9745:271;;;;;;:::i;:::-;;:::i;2110:518:3:-;;;:::i;6552:418:6:-;;;;;;:::i;:::-;;:::i;3370:609::-;;;;;;:::i;:::-;;:::i;11123:678::-;;;;;;:::i;:::-;;:::i;3573:106:3:-;3657:15;;;;3573:106;;2829:589;;;:::i;5860:348:6:-;;;;;;:::i;:::-;;:::i;8626:345::-;;;;;;:::i;:::-;;:::i;7235:337::-;;;;;;:::i;:::-;;:::i;3811:86:3:-;3858:7;3884:6;;;3811:86;;11906:95:6;11986:8;;;;11906:95;;10340:513;;;;;;:::i;:::-;;:::i;9188:307::-;;;;;;:::i;:::-;;:::i;1185:768:3:-;;;;;;:::i;:::-;;:::i;7713:201:6:-;7819:22;:20;:22::i;:::-;7884:23;7896:10;7884:11;:23::i;:::-;7713:201;:::o;8061:211::-;8171:22;:20;:22::i;:::-;8238:27;8252:12;8238:13;:27::i;9745:271::-;9855:22;:20;:22::i;:::-;9964:45;;;;;:39;728:55:9;;;9964:45:6;;;710:74:9;9964:23:6;:39;;;;683:18:9;;9964:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9745:271;:::o;2110:518:3:-;2216:22;:20;:22::i;:::-;2333:33;;2363:1;710:74:9;;2333:33:3;;698:2:9;683:18;2333:33:3;;;;;;;2446:15;;:29;:15;2442:97;;2498:30;;;;;;;;;;;;;;2442:97;2606:15;2599:22;;;;;;2110:518::o;6552:418:6:-;6728:22;:20;:22::i;:::-;6856:107;;;;;:46;:23;:46;;;;:107;;6916:4;;6934:19;;;;6856:107;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6552:418;;;:::o;3370:609::-;3707:22;:20;:22::i;:::-;3768:204;3793:12;3819:14;3847:16;3877:8;3899:11;3924:16;3954:8;3768:11;:204::i;11123:678::-;11249:33;:31;:33::i;:::-;11395:68;;;;;:40;728:55:9;;;11395:68:6;;;710:74:9;11368:24:6;;11395:23;:40;;;;;;683:18:9;;11395:68:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11368:95;;11536:9;11531:131;11555:7;:14;11551:1;:18;11531:131;;;11590:23;:36;;;11627:4;11633:7;11641:1;11633:10;;;;;;;;:::i;:::-;;;;;;;;;;;11590:61;;;;;;;;;;7294:42:9;7363:15;;;11590:61:6;;;7345:34:9;7415:15;;7395:18;;;7388:43;11645:5:6;7447:18:9;;;7440:50;7257:18;;11590:61:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11571:3:6;;;;;-1:-1:-1;11531:131:6;;-1:-1:-1;11531:131:6;;-1:-1:-1;11714:8:6;11707:15;;;;;;11775:19;;740:42:9;728:55;;710:74;;11775:19:6;;698:2:9;683:18;11775:19:6;;;;;;;11183:618;11123:678;:::o;2829:589:3:-;2955:15;;;;2941:10;:29;2937:175;;3071:30;;;;;;;;;;;;;;2937:175;3206:33;;3236:1;710:74:9;;3206:33:3;;698:2:9;683:18;3206:33:3;;;;;;;3307:15;3300:22;;;;;;3390:21;3400:10;3390:9;:21::i;:::-;2829:589::o;5860:348:6:-;6026:22;:20;:22::i;:::-;6138:63;;;;;:41;:23;:41;;;;:63;;6180:4;;6186:14;;;;6138:63;;;:::i;8626:345::-;8787:22;:20;:22::i;:::-;8898:66;;;;;:41;7754:15:9;;;8898:66:6;;;7736:34:9;7806:15;;;7786:18;;;7779:43;8898:23:6;:41;;;;7648:18:9;;8898:66:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8626:345;;:::o;7235:337::-;7401:22;:20;:22::i;:::-;7507:58;;;;;:36;7363:15:9;;;7507:58:6;;;7345:34:9;7415:15;;;7395:18;;;7388:43;7474:14;;7467:22;7447:18;;;7440:50;7507:23:6;:36;;;;7257:18:9;;7507:58:6;7088:408:9;10340:513:6;10534:31;:29;:31::i;:::-;10644:65;;;;;:36;7363:15:9;;;10644:65:6;;;7345:34:9;7415:15;;;7395:18;;;7388:43;10703:5:6;7447:18:9;;;7440:50;10644:23:6;:36;;;;7257:18:9;;10644:65:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10785:61:6;;;;;:36;7363:15:9;;;10785:61:6;;;7345:34:9;7415:15;;;7395:18;;;7388:43;10841:4:6;7447:18:9;;;7440:50;10785:23:6;:36;;-1:-1:-1;10785:36:6;;-1:-1:-1;7257:18:9;;10785:61:6;7088:408:9;9188:307:6;9306:22;:20;:22::i;:::-;9435:53;;;;;:47;728:55:9;;;9435:53:6;;;710:74:9;9435:23:6;:47;;;;683:18:9;;9435:53:6;564:226:9;1185:768:3;1310:22;:20;:22::i;:::-;1416:31;;;1412:101;;1470:32;;;;;;;;;;;;;;1412:101;1610:15;;;;;;1589:36;;;;1585:118;;1676:15;;1648:44;;;;;1676:15;;;;1648:44;;;710:74:9;683:18;;1648:44:3;;;;;;;;1585:118;1797:40;;740:42:9;728:55;;710:74;;1797:40:3;;698:2:9;683:18;1797:40:3;;;;;;;1911:15;:35;;;;;;;;;;;;;;;1185:768::o;4752:178::-;3858:7;3884:6;;;4851:10;:21;4847:77;;4895:18;;;;;;;;;;;;;;12459:273:6;12566:24;;;12562:90;;12613:28;;;;;;;;;;;;;;12562:90;12662:8;:21;;;;;;;;;;;;;12699:26;;710:74:9;;;12699:26:6;;698:2:9;683:18;12699:26:6;;;;;;;;12459:273;:::o;12988:291::-;13101:26;;;13097:94;;13150:30;;;;;;;;;;;;;;13097:94;13201:10;:25;;;;;;;;;;;;;13242:30;;710:74:9;;;13242:30:6;;698:2:9;683:18;13242:30:6;564:226:9;397:727:5;754:9;775:42;754:64;;;;:144;;-1:-1:-1;834:9:5;855:42;834:64;;754:144;:224;;;;-1:-1:-1;914:9:5;935:42;914:64;;754:224;:304;;;;-1:-1:-1;994:9:5;1015:42;994:64;;754:304;737:381;;;1090:17;;;;;;;;;;;;;;4737:842:6;5053:30;5070:12;5053:16;:30::i;:::-;5122:27;5134:14;5122:11;:27::i;:::-;5190:31;5204:16;5190:13;:31::i;:::-;5367:205;;;;;:69;5401:23;5367:69;;;;:205;;5450:8;;5472:11;;5497:16;;5535:4;;5554:8;;5367:205;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4737:842;;;;;;;:::o;13830:245::-;3858:7:3;3884:6;;;13957:10:6;:21;;;;:49;;-1:-1:-1;13996:10:6;;;;13982;:24;;13957:49;13953:116;;;14029:29;;;;;;;;;;;;;;5124:232:3;5274:6;;5253:38;;;5274:6;;;;7736:34:9;;7806:15;;;7801:2;7786:18;;7779:43;5253:38:3;;7648:18:9;5253:38:3;;;;;;;5332:6;:17;;;;;;;;;;;;;;;5124:232::o;14201:237:6:-;3858:7:3;3884:6;;;14324:10:6;:21;;;;:47;;-1:-1:-1;14363:8:6;;;;14349:10;:22;;14324:47;14320:112;;;14394:27;;;;;;;;;;;;;;4212:441:3;4342:26;;;4338:91;;4391:27;;;;;;;;;;;;;;4338:91;4520:1;4502:6;:20;:6;:20;4498:81;;4561:6;;4545:23;;;;;4561:6;;;;4545:23;;;710:74:9;683:18;;4545:23:3;564:226:9;4498:81:3;4623:23;4633:12;4623:9;:23::i;14:154:9:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:134;241:20;;270:31;241:20;270:31;:::i;:::-;173:134;;;:::o;312:247::-;371:6;424:2;412:9;403:7;399:23;395:32;392:52;;;440:1;437;430:12;392:52;479:9;466:23;498:31;523:5;498:31;:::i;:::-;548:5;312:247;-1:-1:-1;;;312:247:9:o;795:727::-;875:6;883;891;944:2;932:9;923:7;919:23;915:32;912:52;;;960:1;957;950:12;912:52;999:9;986:23;1018:31;1043:5;1018:31;:::i;:::-;1068:5;-1:-1:-1;1124:2:9;1109:18;;1096:32;1147:18;1177:14;;;1174:34;;;1204:1;1201;1194:12;1174:34;1242:6;1231:9;1227:22;1217:32;;1287:7;1280:4;1276:2;1272:13;1268:27;1258:55;;1309:1;1306;1299:12;1258:55;1349:2;1336:16;1375:2;1367:6;1364:14;1361:34;;;1391:1;1388;1381:12;1361:34;1436:7;1431:2;1422:6;1418:2;1414:15;1410:24;1407:37;1404:57;;;1457:1;1454;1447:12;1404:57;1488:2;1484;1480:11;1470:21;;1510:6;1500:16;;;;;795:727;;;;;:::o;1527:184::-;1579:77;1576:1;1569:88;1676:4;1673:1;1666:15;1700:4;1697:1;1690:15;1716:334;1787:2;1781:9;1843:2;1833:13;;1848:66;1829:86;1817:99;;1946:18;1931:34;;1967:22;;;1928:62;1925:88;;;1993:18;;:::i;:::-;2029:2;2022:22;1716:334;;-1:-1:-1;1716:334:9:o;2055:590::-;2098:5;2151:3;2144:4;2136:6;2132:17;2128:27;2118:55;;2169:1;2166;2159:12;2118:55;2205:6;2192:20;2231:18;2227:2;2224:26;2221:52;;;2253:18;;:::i;:::-;2297:114;2405:4;2336:66;2329:4;2325:2;2321:13;2317:86;2313:97;2297:114;:::i;:::-;2436:2;2427:7;2420:19;2482:3;2475:4;2470:2;2462:6;2458:15;2454:26;2451:35;2448:55;;;2499:1;2496;2489:12;2448:55;2564:2;2557:4;2549:6;2545:17;2538:4;2529:7;2525:18;2512:55;2612:1;2587:16;;;2605:4;2583:27;2576:38;;;;2591:7;2055:590;-1:-1:-1;;;2055:590:9:o;2650:1165::-;2793:6;2801;2809;2817;2825;2833;2841;2894:3;2882:9;2873:7;2869:23;2865:33;2862:53;;;2911:1;2908;2901:12;2862:53;2950:9;2937:23;2969:31;2994:5;2969:31;:::i;:::-;3019:5;-1:-1:-1;3076:2:9;3061:18;;3048:32;3089:33;3048:32;3089:33;:::i;:::-;3141:7;-1:-1:-1;3167:38:9;3201:2;3186:18;;3167:38;:::i;:::-;3157:48;;3256:2;3245:9;3241:18;3228:32;3279:18;3320:2;3312:6;3309:14;3306:34;;;3336:1;3333;3326:12;3306:34;3359:50;3401:7;3392:6;3381:9;3377:22;3359:50;:::i;:::-;3349:60;;3462:3;3451:9;3447:19;3434:33;3418:49;;3492:2;3482:8;3479:16;3476:36;;;3508:1;3505;3498:12;3476:36;3531:52;3575:7;3564:8;3553:9;3549:24;3531:52;:::i;:::-;3521:62;;3636:3;3625:9;3621:19;3608:33;3592:49;;3666:2;3656:8;3653:16;3650:36;;;3682:1;3679;3672:12;3650:36;;3705:52;3749:7;3738:8;3727:9;3723:24;3705:52;:::i;:::-;3695:62;;;3804:3;3793:9;3789:19;3776:33;3766:43;;2650:1165;;;;;;;;;;:::o;3820:388::-;3888:6;3896;3949:2;3937:9;3928:7;3924:23;3920:32;3917:52;;;3965:1;3962;3955:12;3917:52;4004:9;3991:23;4023:31;4048:5;4023:31;:::i;:::-;4073:5;-1:-1:-1;4130:2:9;4115:18;;4102:32;4143:33;4102:32;4143:33;:::i;:::-;4195:7;4185:17;;;3820:388;;;;;:::o;4213:557::-;4287:6;4295;4303;4356:2;4344:9;4335:7;4331:23;4327:32;4324:52;;;4372:1;4369;4362:12;4324:52;4411:9;4398:23;4430:31;4455:5;4430:31;:::i;:::-;4480:5;-1:-1:-1;4537:2:9;4522:18;;4509:32;4550:33;4509:32;4550:33;:::i;:::-;4602:7;-1:-1:-1;4661:2:9;4646:18;;4633:32;4703:15;;4696:23;4684:36;;4674:64;;4734:1;4731;4724:12;4674:64;4757:7;4747:17;;;4213:557;;;;;:::o;4775:529::-;4852:6;4860;4868;4921:2;4909:9;4900:7;4896:23;4892:32;4889:52;;;4937:1;4934;4927:12;4889:52;4976:9;4963:23;4995:31;5020:5;4995:31;:::i;:::-;5045:5;-1:-1:-1;5102:2:9;5087:18;;5074:32;5115:33;5074:32;5115:33;:::i;:::-;5167:7;-1:-1:-1;5226:2:9;5211:18;;5198:32;5239:33;5198:32;5239:33;:::i;5309:569::-;5508:42;5500:6;5496:55;5485:9;5478:74;5588:2;5583;5572:9;5568:18;5561:30;5627:6;5622:2;5611:9;5607:18;5600:34;5684:6;5676;5671:2;5660:9;5656:18;5643:48;5740:1;5711:22;;;5735:2;5707:31;;;5700:42;;;;5794:2;5782:15;;;5799:66;5778:88;5763:104;5759:113;;5309:569;-1:-1:-1;;5309:569:9:o;5883:1011::-;5978:6;6009:2;6052;6040:9;6031:7;6027:23;6023:32;6020:52;;;6068:1;6065;6058:12;6020:52;6101:9;6095:16;6130:18;6171:2;6163:6;6160:14;6157:34;;;6187:1;6184;6177:12;6157:34;6225:6;6214:9;6210:22;6200:32;;6270:7;6263:4;6259:2;6255:13;6251:27;6241:55;;6292:1;6289;6282:12;6241:55;6321:2;6315:9;6343:2;6339;6336:10;6333:36;;;6349:18;;:::i;:::-;6395:2;6392:1;6388:10;6378:20;;6418:28;6442:2;6438;6434:11;6418:28;:::i;:::-;6480:15;;;6550:11;;;6546:20;;;6511:12;;;;6578:19;;;6575:39;;;6610:1;6607;6600:12;6575:39;6634:11;;;;6654:210;6670:6;6665:3;6662:15;6654:210;;;6743:3;6737:10;6724:23;;6760:31;6785:5;6760:31;:::i;:::-;6804:18;;;6687:12;;;;6842;;;;6654:210;;;6883:5;5883:1011;-1:-1:-1;;;;;;;;5883:1011:9:o;6899:184::-;6951:77;6948:1;6941:88;7048:4;7045:1;7038:15;7072:4;7069:1;7062:15;7833:482;7875:3;7913:5;7907:12;7940:6;7935:3;7928:19;7965:1;7975:162;7989:6;7986:1;7983:13;7975:162;;;8051:4;8107:13;;;8103:22;;8097:29;8079:11;;;8075:20;;8068:59;8004:12;7975:162;;;7979:3;8182:1;8175:4;8166:6;8161:3;8157:16;8153:27;8146:38;8304:4;8234:66;8229:2;8221:6;8217:15;8213:88;8208:3;8204:98;8200:109;8193:116;;;7833:482;;;;:::o;8320:740::-;8621:3;8610:9;8603:22;8584:4;8648:46;8689:3;8678:9;8674:19;8666:6;8648:46;:::i;:::-;8742:9;8734:6;8730:22;8725:2;8714:9;8710:18;8703:50;8776:33;8802:6;8794;8776:33;:::i;:::-;8762:47;;8857:9;8849:6;8845:22;8840:2;8829:9;8825:18;8818:50;8885:33;8911:6;8903;8885:33;:::i;:::-;8966:42;8954:55;;;;8949:2;8934:18;;8927:83;-1:-1:-1;;9041:3:9;9026:19;9019:35;8877:41;8320:740;-1:-1:-1;;;8320:740:9:o;9065:251::-;9135:6;9188:2;9176:9;9167:7;9163:23;9159:32;9156:52;;;9204:1;9201;9194:12;9156:52;9236:9;9230:16;9255:31;9280:5;9255:31;:::i
Swarm Source
ipfs://3711892ca35282776035c464cab45989cf23633874c96a97d21e3a891dc5c498
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.