ETH Price: $2,818.45 (-4.46%)
 

Overview

ETH Balance

Scroll LogoScroll LogoScroll Logo0 ETH

ETH Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ConftBadge

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 1000 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

import {Attestation} from "@ethereum-attestation-service/eas-contracts/contracts/Common.sol";
import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import {ScrollBadgeDefaultURI} from "../../lib/canvas/src/badge/extensions/ScrollBadgeDefaultURI.sol";
import {ScrollBadgeSingleton} from "../../lib/canvas/src/badge/extensions/ScrollBadgeSingleton.sol";
import {ScrollBadge} from "../../lib/canvas/src/badge/ScrollBadge.sol";

contract ConftBadge is ScrollBadge, ScrollBadgeSingleton, ScrollBadgeDefaultURI {
    address public mintAddress;

    constructor(
        address resolver,
        string memory tokenUri,
        address initialMintAddress
    ) ScrollBadge(resolver) ScrollBadgeDefaultURI(tokenUri) {
        mintAddress = initialMintAddress;
    }

    function onIssueBadge(Attestation calldata attestation)
        internal
        override(ScrollBadge, ScrollBadgeSingleton)
        returns (bool)
    {
        if (!super.onIssueBadge(attestation)) {
            return false;
        }

        return IERC721(mintAddress).balanceOf(attestation.recipient) > 0;
    }

    function onRevokeBadge(Attestation calldata attestation)
        internal
        override(ScrollBadge, ScrollBadgeSingleton)
        returns (bool)
    {
        return super.onRevokeBadge(attestation);
    }

    function getBadgeTokenURI(bytes32 uid) internal view override returns (string memory) {
        return defaultBadgeURI;
    }
}

File 2 of 11 : Common.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// A representation of an empty/uninitialized UID.
bytes32 constant EMPTY_UID = 0;

// A zero expiration represents an non-expiring attestation.
uint64 constant NO_EXPIRATION_TIME = 0;

error AccessDenied();
error DeadlineExpired();
error InvalidEAS();
error InvalidLength();
error InvalidSignature();
error NotFound();

/// @notice A struct representing ECDSA signature data.
struct Signature {
    uint8 v; // The recovery ID.
    bytes32 r; // The x-coordinate of the nonce R.
    bytes32 s; // The signature data.
}

/// @notice A struct representing a single attestation.
struct Attestation {
    bytes32 uid; // A unique identifier of the attestation.
    bytes32 schema; // The unique identifier of the schema.
    uint64 time; // The time when the attestation was created (Unix timestamp).
    uint64 expirationTime; // The time when the attestation expires (Unix timestamp).
    uint64 revocationTime; // The time when the attestation was revoked (Unix timestamp).
    bytes32 refUID; // The UID of the related attestation.
    address recipient; // The recipient of the attestation.
    address attester; // The attester/sender of the attestation.
    bool revocable; // Whether the attestation is revocable.
    bytes data; // Custom attestation data.
}

/// @notice A helper function to work with unchecked iterators in loops.
function uncheckedInc(uint256 i) pure returns (uint256 j) {
    unchecked {
        j = i + 1;
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.20;

import {IERC165} from "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
     *   {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the address zero.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

import {ScrollBadge} from "../ScrollBadge.sol";

/// @title ScrollBadgeDefaultURI
/// @notice This contract sets a default badge URI.
abstract contract ScrollBadgeDefaultURI is ScrollBadge {
    string public defaultBadgeURI;

    constructor(string memory _defaultBadgeURI) {
        defaultBadgeURI = _defaultBadgeURI;
    }

    /// @inheritdoc ScrollBadge
    function badgeTokenURI(bytes32 uid) public view override returns (string memory) {
        if (uid == bytes32(0)) {
            return defaultBadgeURI;
        }

        return getBadgeTokenURI(uid);
    }

    /// @notice Returns the token URI corresponding to a certain badge UID.
    /// @param uid The badge UID.
    /// @return The badge token URI (same format as ERC721).
    function getBadgeTokenURI(bytes32 uid) internal view virtual returns (string memory);
}

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

import {Attestation} from "@ethereum-attestation-service/eas-contracts/contracts/Common.sol";

import {ScrollBadge} from "../ScrollBadge.sol";
import {SingletonBadge} from "../../Errors.sol";

/// @title ScrollBadgeSingleton
/// @notice This contract only allows one active badge per wallet.
abstract contract ScrollBadgeSingleton is ScrollBadge {
    /// @inheritdoc ScrollBadge
    function onIssueBadge(Attestation calldata attestation) internal virtual override returns (bool) {
        if (!super.onIssueBadge(attestation)) {
            return false;
        }

        if (hasBadge(attestation.recipient)) {
            revert SingletonBadge();
        }

        return true;
    }

    /// @inheritdoc ScrollBadge
    function onRevokeBadge(Attestation calldata attestation) internal virtual override returns (bool) {
        return super.onRevokeBadge(attestation);
    }
}

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

import {Attestation} from "@ethereum-attestation-service/eas-contracts/contracts/Common.sol";

import {decodeBadgeData} from "../Common.sol";
import {IScrollBadge} from "../interfaces/IScrollBadge.sol";
import {IScrollBadgeResolver} from "../interfaces/IScrollBadgeResolver.sol";
import {AttestationBadgeMismatch, Unauthorized} from "../Errors.sol";

/// @title ScrollBadge
/// @notice This contract implements the basic functionalities of a Scroll badge.
///         It serves as the base contract for more complex badge functionalities.
abstract contract ScrollBadge is IScrollBadge {
    // The global Scroll badge resolver contract.
    address public immutable resolver;

    // wallet address => badge count
    mapping(address => uint256) private _userBadgeCount;

    /// @dev Creates a new ScrollBadge instance.
    /// @param resolver_ The address of the global Scroll badge resolver contract.
    constructor(address resolver_) {
        resolver = resolver_;
    }

    /// @inheritdoc IScrollBadge
    function issueBadge(Attestation calldata attestation) public returns (bool) {
        // only callable from resolver
        if (msg.sender != address(resolver)) {
            revert Unauthorized();
        }

        // delegate logic to subcontract
        if (!onIssueBadge(attestation)) {
            return false;
        }

        _userBadgeCount[attestation.recipient] += 1;

        emit IssueBadge(attestation.uid);
        return true;
    }

    /// @inheritdoc IScrollBadge
    function revokeBadge(Attestation calldata attestation) public returns (bool) {
        // only callable from resolver
        if (msg.sender != address(resolver)) {
            revert Unauthorized();
        }

        // delegate logic to subcontract
        if (!onRevokeBadge(attestation)) {
            return false;
        }

        _userBadgeCount[attestation.recipient] -= 1;

        emit RevokeBadge(attestation.uid);
        return true;
    }

    /// @notice A resolver callback that should be implemented by child contracts.
    /// @param {attestation} The new attestation.
    /// @return Whether the attestation is valid.
    function onIssueBadge(Attestation calldata /*attestation*/ ) internal virtual returns (bool) {
        return true;
    }

    /// @notice A resolver callback that should be implemented by child contracts.
    /// @param {attestation} The existing attestation to be revoked.
    /// @return Whether the attestation can be revoked.
    function onRevokeBadge(Attestation calldata /*attestation*/ ) internal virtual returns (bool) {
        return true;
    }

    /// @inheritdoc IScrollBadge
    function getAndValidateBadge(bytes32 uid) public view returns (Attestation memory) {
        Attestation memory attestation = IScrollBadgeResolver(resolver).getAndValidateBadge(uid);

        (address badge,) = decodeBadgeData(attestation.data);

        if (badge != address(this)) {
            revert AttestationBadgeMismatch(uid);
        }

        return attestation;
    }

    /// @inheritdoc IScrollBadge
    function badgeTokenURI(bytes32 uid) public view virtual returns (string memory);

    /// @inheritdoc IScrollBadge
    function hasBadge(address user) public view virtual returns (bool) {
        return _userBadgeCount[user] > 0;
    }
}

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

uint256 constant MAX_ATTACHED_BADGE_NUM = 48;

string constant SCROLL_BADGE_SCHEMA = "address badge, bytes payload";

function decodeBadgeData(bytes memory data) pure returns (address, bytes memory) {
    return abi.decode(data, (address, bytes));
}

File 9 of 11 : Errors.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

error Unauthorized();
error CannotUpgrade(bytes32 uid);

// attestation errors
// note: these don't include the uid since it is not known prior to the attestation.
error BadgeNotAllowed(address badge);
error BadgeNotFound(address badge);
error ExpirationDisabled();
error MissingPayload();
error ResolverPaymentsDisabled();
error RevocationDisabled();
error SingletonBadge();
error UnknownSchema();

// query errors
error AttestationBadgeMismatch(bytes32 uid);
error AttestationExpired(bytes32 uid);
error AttestationNotFound(bytes32 uid);
error AttestationOwnerMismatch(bytes32 uid);
error AttestationRevoked(bytes32 uid);
error AttestationSchemaMismatch(bytes32 uid);

// profile errors
error BadgeCountReached();
error LengthMismatch();
error TokenNotOwnedByUser(address token, uint256 tokenId);

// profile registry errors
error CallerIsNotUserProfile();
error DuplicatedUsername();
error ExpiredSignature();
error ImplementationNotContract();
error InvalidReferrer();
error InvalidSignature();
error InvalidUsername();
error MsgValueMismatchWithMintFee();
error ProfileAlreadyMinted();

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

import {Attestation} from "@ethereum-attestation-service/eas-contracts/contracts/Common.sol";

interface IScrollBadge {
    event IssueBadge(bytes32 indexed uid);
    event RevokeBadge(bytes32 indexed uid);

    /// @notice A resolver callback invoked in the `issueBadge` function in the parent contract.
    /// @param attestation The new attestation.
    /// @return Whether the attestation is valid.
    function issueBadge(Attestation calldata attestation) external returns (bool);

    /// @notice A resolver callback invoked in the `revokeBadge` function in the parent contract.
    /// @param attestation The new attestation.
    /// @return Whether the attestation can be revoked.
    function revokeBadge(Attestation calldata attestation) external returns (bool);

    /// @notice Validate and return a Scroll badge attestation.
    /// @param uid The attestation UID.
    /// @return The attestation.
    function getAndValidateBadge(bytes32 uid) external view returns (Attestation memory);

    /// @notice Returns the token URI corresponding to a certain badge UID, or the default
    ///         badge token URI if the pass UID is 0x0.
    /// @param uid The badge UID, or 0x0.
    /// @return The badge token URI (same format as ERC721).
    function badgeTokenURI(bytes32 uid) external view returns (string memory);

    /// @notice Returns true if the user has one or more of this badge.
    /// @param user The user's wallet address.
    /// @return True if the user has one or more of this badge.
    function hasBadge(address user) external view returns (bool);
}

// SPDX-License-Identifier: MIT

pragma solidity 0.8.24;

import {Attestation} from "@ethereum-attestation-service/eas-contracts/contracts/Common.sol";

interface IScrollBadgeResolver {
    /**
     *
     * Events *
     *
     */

    /// @dev Emitted when a new badge is issued.
    /// @param uid The UID of the new badge attestation.
    event IssueBadge(bytes32 indexed uid);

    /// @dev Emitted when a badge is revoked.
    /// @param uid The UID of the revoked badge attestation.
    event RevokeBadge(bytes32 indexed uid);

    /// @dev Emitted when the auto-attach status of a badge is updated.
    /// @param badge The address of the badge contract.
    /// @param enable Auto-attach was enabled if true, disabled if false.
    event UpdateAutoAttachWhitelist(address indexed badge, bool indexed enable);

    /**
     *
     * Public View Functions *
     *
     */

    /// @notice Return the Scroll badge attestation schema.
    /// @return The GUID of the Scroll badge attestation schema.
    function schema() external returns (bytes32);

    /// @notice The profile registry contract.
    /// @return The address of the profile registry.
    function registry() external returns (address);

    /// @notice The global EAS contract.
    /// @return The address of the global EAS contract.
    function eas() external returns (address);

    /// @notice Validate and return a Scroll badge attestation.
    /// @param uid The attestation UID.
    /// @return The attestation.
    function getAndValidateBadge(bytes32 uid) external view returns (Attestation memory);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"resolver","type":"address"},{"internalType":"string","name":"tokenUri","type":"string"},{"internalType":"address","name":"initialMintAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"uid","type":"bytes32"}],"name":"AttestationBadgeMismatch","type":"error"},{"inputs":[],"name":"SingletonBadge","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"uid","type":"bytes32"}],"name":"IssueBadge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"uid","type":"bytes32"}],"name":"RevokeBadge","type":"event"},{"inputs":[{"internalType":"bytes32","name":"uid","type":"bytes32"}],"name":"badgeTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultBadgeURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"uid","type":"bytes32"}],"name":"getAndValidateBadge","outputs":[{"components":[{"internalType":"bytes32","name":"uid","type":"bytes32"},{"internalType":"bytes32","name":"schema","type":"bytes32"},{"internalType":"uint64","name":"time","type":"uint64"},{"internalType":"uint64","name":"expirationTime","type":"uint64"},{"internalType":"uint64","name":"revocationTime","type":"uint64"},{"internalType":"bytes32","name":"refUID","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"attester","type":"address"},{"internalType":"bool","name":"revocable","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Attestation","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"hasBadge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"uid","type":"bytes32"},{"internalType":"bytes32","name":"schema","type":"bytes32"},{"internalType":"uint64","name":"time","type":"uint64"},{"internalType":"uint64","name":"expirationTime","type":"uint64"},{"internalType":"uint64","name":"revocationTime","type":"uint64"},{"internalType":"bytes32","name":"refUID","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"attester","type":"address"},{"internalType":"bool","name":"revocable","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Attestation","name":"attestation","type":"tuple"}],"name":"issueBadge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resolver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"bytes32","name":"uid","type":"bytes32"},{"internalType":"bytes32","name":"schema","type":"bytes32"},{"internalType":"uint64","name":"time","type":"uint64"},{"internalType":"uint64","name":"expirationTime","type":"uint64"},{"internalType":"uint64","name":"revocationTime","type":"uint64"},{"internalType":"bytes32","name":"refUID","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"address","name":"attester","type":"address"},{"internalType":"bool","name":"revocable","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Attestation","name":"attestation","type":"tuple"}],"name":"revokeBadge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b5060405162000f3f38038062000f3f8339810160408190526200003491620000ae565b6001600160a01b0383166080528160016200005082826200023a565b5050600280546001600160a01b0319166001600160a01b039290921691909117905550620003069050565b80516001600160a01b03811681146200009357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600080600060608486031215620000c457600080fd5b620000cf846200007b565b602085810151919450906001600160401b0380821115620000ef57600080fd5b818701915087601f8301126200010457600080fd5b81518181111562000119576200011962000098565b604051601f8201601f19908116603f0116810190838211818310171562000144576200014462000098565b816040528281528a868487010111156200015d57600080fd5b600093505b8284101562000181578484018601518185018701529285019262000162565b6000868483010152809750505050505050620001a0604085016200007b565b90509250925092565b600181811c90821680620001be57607f821691505b602082108103620001df57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000235576000816000526020600020601f850160051c81016020861015620002105750805b601f850160051c820191505b8181101562000231578281556001016200021c565b5050505b505050565b81516001600160401b0381111562000256576200025662000098565b6200026e81620002678454620001a9565b84620001e5565b602080601f831160018114620002a657600084156200028d5750858301515b600019600386901b1c1916600185901b17855562000231565b600085815260208120601f198616915b82811015620002d757888601518255948401946001909101908401620002b6565b5085821015620002f65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051610c0962000336600039600081816092015281816102420152818161039901526105080152610c096000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638298b0301161005b5780638298b0301461013f5780638c6f12f014610152578063b1a3a35f14610172578063d753a63d1461017a57600080fd5b806304f3bcec1461008d57806324830563146100d1578063425d4980146100f15780635e50864f14610104575b600080fd5b6100b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e46100df366004610731565b61018d565b6040516100c8919061079a565b6002546100b4906001600160a01b031681565b61012f6101123660046107cc565b6001600160a01b0316600090815260208190526040902054151590565b60405190151581526020016100c8565b61012f61014d3660046107e9565b610235565b610165610160366004610731565b610311565b6040516100c89190610825565b6100e461046d565b61012f6101883660046107e9565b6104fb565b60608161022657600180546101a1906108fc565b80601f01602080910402602001604051908101604052809291908181526020018280546101cd906108fc565b801561021a5780601f106101ef5761010080835404028352916020019161021a565b820191906000526020600020905b8154815290600101906020018083116101fd57829003601f168201915b50505050509050919050565b61022f826105d7565b92915050565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461027f576040516282b42960e81b815260040160405180910390fd5b610288826105e6565b61029457506000919050565b60016000806102a960e0860160c087016107cc565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546102d8919061094c565b90915550506040518235907f504e4727721de18c6bf7f66448a6ff6da00aa4b1f00b6034e71723ae7ce6373a90600090a2506001919050565b604080516101408101825260008082526020820181905281830181905260608083018290526080830182905260a0830182905260c0830182905260e08301829052610100830182905261012083015291517f8c6f12f0000000000000000000000000000000000000000000000000000000008152600481018490529091906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638c6f12f090602401600060405180830381865afa1580156103e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104089190810190610a5f565b9050600061041a8261012001516105f1565b5090506001600160a01b0381163014610466576040517fb923d2610000000000000000000000000000000000000000000000000000000081526004810185905260240160405180910390fd5b5092915050565b6001805461047a906108fc565b80601f01602080910402602001604051908101604052809291908181526020018280546104a6906108fc565b80156104f35780601f106104c8576101008083540402835291602001916104f3565b820191906000526020600020905b8154815290600101906020018083116104d657829003601f168201915b505050505081565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610545576040516282b42960e81b815260040160405180910390fd5b61054e82610612565b61055a57506000919050565b600160008061056f60e0860160c087016107cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461059e9190610b56565b90915550506040518235907fa0785ec0b9bf31a5475d33c716fb9f500f0ea0bb9e4bc10ec39d5db763c1da1590600090a2506001919050565b6060600180546101a1906108fc565b600061022f826106d4565b60006060828060200190518101906106099190610b69565b91509150915091565b600061061d826106dd565b61062957506000919050565b6002546000906001600160a01b03166370a0823161064d60e0860160c087016107cc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610bba565b1192915050565b6000600161022f565b60006106f261011260e0840160c085016107cc565b15610729576040517f18b2623200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001919050565b60006020828403121561074357600080fd5b5035919050565b60005b8381101561076557818101518382015260200161074d565b50506000910152565b6000815180845261078681602086016020860161074a565b601f01601f19169290920160200192915050565b6020815260006107ad602083018461076e565b9392505050565b6001600160a01b03811681146107c957600080fd5b50565b6000602082840312156107de57600080fd5b81356107ad816107b4565b6000602082840312156107fb57600080fd5b813567ffffffffffffffff81111561081257600080fd5b820161014081850312156107ad57600080fd5b60208152815160208201526020820151604082015260006040830151610857606084018267ffffffffffffffff169052565b50606083015167ffffffffffffffff8116608084015250608083015167ffffffffffffffff811660a08401525060a083015160c083015260c08301516108a860e08401826001600160a01b03169052565b5060e08301516101006108c5818501836001600160a01b03169052565b84015190506101206108da8482018315159052565b8401516101408481015290506108f461016084018261076e565b949350505050565b600181811c9082168061091057607f821691505b60208210810361093057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561022f5761022f610936565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff811182821017156109995761099961095f565b60405290565b805167ffffffffffffffff811681146109b757600080fd5b919050565b80516109b7816107b4565b805180151581146109b757600080fd5b600082601f8301126109e857600080fd5b815167ffffffffffffffff80821115610a0357610a0361095f565b604051601f8301601f19908116603f01168101908282118183101715610a2b57610a2b61095f565b81604052838152866020858801011115610a4457600080fd5b610a5584602083016020890161074a565b9695505050505050565b600060208284031215610a7157600080fd5b815167ffffffffffffffff80821115610a8957600080fd5b908301906101408286031215610a9e57600080fd5b610aa6610975565b8251815260208301516020820152610ac06040840161099f565b6040820152610ad16060840161099f565b6060820152610ae26080840161099f565b608082015260a083015160a0820152610afd60c084016109bc565b60c0820152610b0e60e084016109bc565b60e0820152610100610b218185016109c7565b908201526101208381015183811115610b3957600080fd5b610b45888287016109d7565b918301919091525095945050505050565b8082018082111561022f5761022f610936565b60008060408385031215610b7c57600080fd5b8251610b87816107b4565b602084015190925067ffffffffffffffff811115610ba457600080fd5b610bb0858286016109d7565b9150509250929050565b600060208284031215610bcc57600080fd5b505191905056fea2646970667358221220ddbd16db84837130d82ca72a3004b3575237111787b3a150a1e937ee154d5b3164736f6c634300081800330000000000000000000000004560fecd62b14a463be44d40fe5cfd595eec01130000000000000000000000000000000000000000000000000000000000000060000000000000000000000000cf7f37b4916ac5c530c863f8c8bb26ec1e8d2ccb000000000000000000000000000000000000000000000000000000000000003868747470733a2f2f6175746f636f6e7472616374732e636f6e66742e6170702f6d657461646174612f7363726f6c6c6d696e7462616467650000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638298b0301161005b5780638298b0301461013f5780638c6f12f014610152578063b1a3a35f14610172578063d753a63d1461017a57600080fd5b806304f3bcec1461008d57806324830563146100d1578063425d4980146100f15780635e50864f14610104575b600080fd5b6100b47f0000000000000000000000004560fecd62b14a463be44d40fe5cfd595eec011381565b6040516001600160a01b0390911681526020015b60405180910390f35b6100e46100df366004610731565b61018d565b6040516100c8919061079a565b6002546100b4906001600160a01b031681565b61012f6101123660046107cc565b6001600160a01b0316600090815260208190526040902054151590565b60405190151581526020016100c8565b61012f61014d3660046107e9565b610235565b610165610160366004610731565b610311565b6040516100c89190610825565b6100e461046d565b61012f6101883660046107e9565b6104fb565b60608161022657600180546101a1906108fc565b80601f01602080910402602001604051908101604052809291908181526020018280546101cd906108fc565b801561021a5780601f106101ef5761010080835404028352916020019161021a565b820191906000526020600020905b8154815290600101906020018083116101fd57829003601f168201915b50505050509050919050565b61022f826105d7565b92915050565b6000336001600160a01b037f0000000000000000000000004560fecd62b14a463be44d40fe5cfd595eec0113161461027f576040516282b42960e81b815260040160405180910390fd5b610288826105e6565b61029457506000919050565b60016000806102a960e0860160c087016107cc565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546102d8919061094c565b90915550506040518235907f504e4727721de18c6bf7f66448a6ff6da00aa4b1f00b6034e71723ae7ce6373a90600090a2506001919050565b604080516101408101825260008082526020820181905281830181905260608083018290526080830182905260a0830182905260c0830182905260e08301829052610100830182905261012083015291517f8c6f12f0000000000000000000000000000000000000000000000000000000008152600481018490529091906001600160a01b037f0000000000000000000000004560fecd62b14a463be44d40fe5cfd595eec01131690638c6f12f090602401600060405180830381865afa1580156103e0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104089190810190610a5f565b9050600061041a8261012001516105f1565b5090506001600160a01b0381163014610466576040517fb923d2610000000000000000000000000000000000000000000000000000000081526004810185905260240160405180910390fd5b5092915050565b6001805461047a906108fc565b80601f01602080910402602001604051908101604052809291908181526020018280546104a6906108fc565b80156104f35780601f106104c8576101008083540402835291602001916104f3565b820191906000526020600020905b8154815290600101906020018083116104d657829003601f168201915b505050505081565b6000336001600160a01b037f0000000000000000000000004560fecd62b14a463be44d40fe5cfd595eec01131614610545576040516282b42960e81b815260040160405180910390fd5b61054e82610612565b61055a57506000919050565b600160008061056f60e0860160c087016107cc565b6001600160a01b03166001600160a01b03168152602001908152602001600020600082825461059e9190610b56565b90915550506040518235907fa0785ec0b9bf31a5475d33c716fb9f500f0ea0bb9e4bc10ec39d5db763c1da1590600090a2506001919050565b6060600180546101a1906108fc565b600061022f826106d4565b60006060828060200190518101906106099190610b69565b91509150915091565b600061061d826106dd565b61062957506000919050565b6002546000906001600160a01b03166370a0823161064d60e0860160c087016107cc565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190610bba565b1192915050565b6000600161022f565b60006106f261011260e0840160c085016107cc565b15610729576040517f18b2623200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001919050565b60006020828403121561074357600080fd5b5035919050565b60005b8381101561076557818101518382015260200161074d565b50506000910152565b6000815180845261078681602086016020860161074a565b601f01601f19169290920160200192915050565b6020815260006107ad602083018461076e565b9392505050565b6001600160a01b03811681146107c957600080fd5b50565b6000602082840312156107de57600080fd5b81356107ad816107b4565b6000602082840312156107fb57600080fd5b813567ffffffffffffffff81111561081257600080fd5b820161014081850312156107ad57600080fd5b60208152815160208201526020820151604082015260006040830151610857606084018267ffffffffffffffff169052565b50606083015167ffffffffffffffff8116608084015250608083015167ffffffffffffffff811660a08401525060a083015160c083015260c08301516108a860e08401826001600160a01b03169052565b5060e08301516101006108c5818501836001600160a01b03169052565b84015190506101206108da8482018315159052565b8401516101408481015290506108f461016084018261076e565b949350505050565b600181811c9082168061091057607f821691505b60208210810361093057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561022f5761022f610936565b634e487b7160e01b600052604160045260246000fd5b604051610140810167ffffffffffffffff811182821017156109995761099961095f565b60405290565b805167ffffffffffffffff811681146109b757600080fd5b919050565b80516109b7816107b4565b805180151581146109b757600080fd5b600082601f8301126109e857600080fd5b815167ffffffffffffffff80821115610a0357610a0361095f565b604051601f8301601f19908116603f01168101908282118183101715610a2b57610a2b61095f565b81604052838152866020858801011115610a4457600080fd5b610a5584602083016020890161074a565b9695505050505050565b600060208284031215610a7157600080fd5b815167ffffffffffffffff80821115610a8957600080fd5b908301906101408286031215610a9e57600080fd5b610aa6610975565b8251815260208301516020820152610ac06040840161099f565b6040820152610ad16060840161099f565b6060820152610ae26080840161099f565b608082015260a083015160a0820152610afd60c084016109bc565b60c0820152610b0e60e084016109bc565b60e0820152610100610b218185016109c7565b908201526101208381015183811115610b3957600080fd5b610b45888287016109d7565b918301919091525095945050505050565b8082018082111561022f5761022f610936565b60008060408385031215610b7c57600080fd5b8251610b87816107b4565b602084015190925067ffffffffffffffff811115610ba457600080fd5b610bb0858286016109d7565b9150509250929050565b600060208284031215610bcc57600080fd5b505191905056fea2646970667358221220ddbd16db84837130d82ca72a3004b3575237111787b3a150a1e937ee154d5b3164736f6c63430008180033

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

0000000000000000000000004560fecd62b14a463be44d40fe5cfd595eec01130000000000000000000000000000000000000000000000000000000000000060000000000000000000000000cf7f37b4916ac5c530c863f8c8bb26ec1e8d2ccb000000000000000000000000000000000000000000000000000000000000003868747470733a2f2f6175746f636f6e7472616374732e636f6e66742e6170702f6d657461646174612f7363726f6c6c6d696e7462616467650000000000000000

-----Decoded View---------------
Arg [0] : resolver (address): 0x4560FECd62B14A463bE44D40fE5Cfd595eEc0113
Arg [1] : tokenUri (string): https://autocontracts.conft.app/metadata/scrollmintbadge
Arg [2] : initialMintAddress (address): 0xCF7f37B4916AC5c530C863f8c8bB26Ec1e8d2Ccb

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000004560fecd62b14a463be44d40fe5cfd595eec0113
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 000000000000000000000000cf7f37b4916ac5c530c863f8c8bb26ec1e8d2ccb
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000038
Arg [4] : 68747470733a2f2f6175746f636f6e7472616374732e636f6e66742e6170702f
Arg [5] : 6d657461646174612f7363726f6c6c6d696e7462616467650000000000000000


Block Transaction Gas Used Reward
view all blocks sequenced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

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.