Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 5 from a total of 5 transactions
Latest 7 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21046404 | 69 days ago | Contract Creation | 0 ETH | |||
21046404 | 69 days ago | Contract Creation | 0 ETH | |||
20719505 | 115 days ago | Contract Creation | 0 ETH | |||
20719505 | 115 days ago | Contract Creation | 0 ETH | |||
20705886 | 117 days ago | Contract Creation | 0 ETH | |||
20705886 | 117 days ago | Contract Creation | 0 ETH | |||
20705886 | 117 days ago | 0.00000001 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
ERC1155ProxyFactory
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // @author: NFT Studios pragma solidity ^0.8.18; import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol"; import {DTOs} from "./../libraries/dtos.sol"; import {SignatureProtected} from "./../libraries/SignatureProtected.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; interface IERC1155 { function init( address owner, uint96 royalty, string memory name, string memory symbol, bool transferLocked, address metadataResolver ) external; function addMinter(address minter) external; function transferOwnership(address owner) external; function owner() external returns (address); } interface IMinter { function init( address owner, address signerAddress, address feeRecipient, uint256[] memory availableTokens, DTOs.Recipient[] memory recipients, address erc1155Address ) external; } interface IMetadataResolver { function setBaseURI(address _address, string memory _baseURI) external; } contract ERC1155ProxyFactory is Ownable, SignatureProtected { address public paymentRecipient; address public erc1155Address; address public minterAddress; string public metadataBaseUrl; IMetadataResolver public metadataResolver; event NewContract( string indexed iuuid, string uuid, address token, address minter, uint256[] extras ); constructor( address _erc1155Address, address _minterAddress, string memory _metadataBaseUrl, address _metadataResolverAddress, address _signerAddress, address _paymentRecipient ) { paymentRecipient = _paymentRecipient; erc1155Address = _erc1155Address; minterAddress = _minterAddress; metadataBaseUrl = _metadataBaseUrl; metadataResolver = IMetadataResolver(_metadataResolverAddress); initSignatureProtected(_signerAddress); } // Only Owner function setERC721Address(address _erc1155Address) external onlyOwner { erc1155Address = _erc1155Address; } function setMinterAddress(address _minterAddress) external onlyOwner { minterAddress = _minterAddress; } function setMetadataResolverAddress( address _metadataResolverAddress ) external onlyOwner { metadataResolver = IMetadataResolver(_metadataResolverAddress); } function setMetadataBaseUrl( string memory _metadataBaseUrl ) external onlyOwner { metadataBaseUrl = _metadataBaseUrl; } function setPaymentRecipient(address _paymentRecipient) external onlyOwner { paymentRecipient = _paymentRecipient; } // Public function create( DTOs.Create1155ContractDto calldata _createDto ) external payable { validateSignature( abi.encodePacked( keccak256(abi.encodePacked(_createDto.uuid)), _createDto.paymentAmount, _createDto.extras ), _createDto.signature ); handlePayment(_createDto.paymentAmount); address cloneErc1155Address = Clones.clone(erc1155Address); IERC1155 erc1155 = IERC1155(cloneErc1155Address); erc1155.init( _createDto.owner, _createDto.royaltyPercentage, _createDto.name, _createDto.symbol, _createDto.transferLocked, address(metadataResolver) ); address cloneMinterAddress = Clones.clone(minterAddress); IMinter minter = IMinter(cloneMinterAddress); minter.init( _createDto.owner, _createDto.signer, paymentRecipient, _createDto.availableTokens, _createDto.recipients, cloneErc1155Address ); erc1155.addMinter(cloneMinterAddress); erc1155.transferOwnership(_createDto.owner); metadataResolver.setBaseURI( cloneErc1155Address, string(abi.encodePacked(metadataBaseUrl, _createDto.uuid, "/")) ); emit NewContract( _createDto.uuid, _createDto.uuid, cloneErc1155Address, cloneMinterAddress, _createDto.extras ); } function handlePayment(uint256 paymentAmount) internal { if (paymentAmount == 0) { return; } require( msg.value >= paymentAmount, "The payment amount has not been satisfied" ); (bool success, ) = address(paymentRecipient).call{value: msg.value}(""); require(success, "Payable: Transfer failed"); } function encodeBytes32String( string memory source ) private pure returns (bytes32 result) { bytes memory tempBytes = bytes(source); if (tempBytes.length == 0) { return 0x0; } assembly { result := mload(add(tempBytes, 32)) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "./IAccessControl.sol"; import {Context} from "../utils/Context.sol"; import {ERC165} from "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ```solidity * bytes32 public constant MY_ROLE = keccak256("MY_ROLE"); * ``` * * Roles can be used to represent a set of permissions. To restrict access to a * function call, use {hasRole}: * * ```solidity * function foo() public { * require(hasRole(MY_ROLE, msg.sender)); * ... * } * ``` * * Roles can be granted and revoked dynamically via the {grantRole} and * {revokeRole} functions. Each role has an associated admin role, and only * accounts that have a role's admin role can call {grantRole} and {revokeRole}. * * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means * that only accounts with this role will be able to grant or revoke other * roles. More complex role relationships can be created by using * {_setRoleAdmin}. * * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to * grant and revoke this role. Extra precautions should be taken to secure * accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } mapping(bytes32 role => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) public view virtual returns (bool) { return _roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) { return _roles[role].adminRole; } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _grantRole(role, account); } /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) { _revokeRole(role, account); } /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { bytes32 previousAdminRole = getRoleAdmin(role); _roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { if (!hasRole(role, account)) { _roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { if (hasRole(role, account)) { _roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` * * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite * {RoleAdminChanged} not being emitted signaling this. */ event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole); /** * @dev Emitted when `account` is granted `role`. * * `sender` is the account that originated the contract call, an admin role * bearer except when using {AccessControl-_setupRole}. */ event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Emitted when `account` is revoked `role`. * * `sender` is the account that originated the contract call: * - if using `revokeRole`, it is the admin role bearer * - if using `renounceRole`, it is the role bearer (i.e. `account`) */ event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender); /** * @dev Returns `true` if `account` has been granted `role`. */ function hasRole(bytes32 role, address account) external view returns (bool); /** * @dev Returns the admin role that controls `role`. See {grantRole} and * {revokeRole}. * * To change a role's admin, use {AccessControl-_setRoleAdmin}. */ function getRoleAdmin(bytes32 role) external view returns (bytes32); /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function grantRole(bytes32 role, address account) external; /** * @dev Revokes `role` from `account`. * * If `account` had been granted `role`, emits a {RoleRevoked} event. * * Requirements: * * - the caller must have ``role``'s admin role. */ function revokeRole(bytes32 role, address account) external; /** * @dev Revokes `role` from the calling account. * * Roles are often managed via {grantRole} and {revokeRole}: this function's * purpose is to provide a mechanism for accounts to lose their privileges * if they are compromised (such as when a trusted device is misplaced). * * If the calling account had been granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/Clones.sol) pragma solidity ^0.8.20; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. */ library Clones { /** * @dev A clone instance deployment failed. */ error ERC1167FailedCreateClone(); /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create(0, 0x09, 0x37) } if (instance == address(0)) { revert ERC1167FailedCreateClone(); } } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create2(0, 0x09, 0x37, salt) } if (instance == address(0)) { revert ERC1167FailedCreateClone(); } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(add(ptr, 0x38), deployer) mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) mstore(add(ptr, 0x14), implementation) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) mstore(add(ptr, 0x58), salt) mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) predicted := keccak256(add(ptr, 0x43), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt ) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.20; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS } /** * @dev The signature derives the `address(0)`. */ error ECDSAInvalidSignature(); /** * @dev The signature has an invalid length. */ error ECDSAInvalidSignatureLength(uint256 length); /** * @dev The signature has an S value that is in the upper half order. */ error ECDSAInvalidSignatureS(bytes32 s); /** * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not * return address(0) without also returning an error description. Errors are documented using an enum (error type) * and a bytes32 providing additional information about the error. * * If no error is returned, then the address can be used for verification purposes. * * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length)); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature); _throwError(error, errorArg); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] */ function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) { unchecked { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); // We do not check for an overflow here since the shift operation results in 0 or 1. uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. */ function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs); _throwError(error, errorArg); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError, bytes32) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS, s); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature, bytes32(0)); } return (signer, RecoverError.NoError, bytes32(0)); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s); _throwError(error, errorArg); return recovered; } /** * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided. */ function _throwError(RecoverError error, bytes32 errorArg) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert ECDSAInvalidSignature(); } else if (error == RecoverError.InvalidSignatureLength) { revert ECDSAInvalidSignatureLength(uint256(errorArg)); } else if (error == RecoverError.InvalidSignatureS) { revert ECDSAInvalidSignatureS(errorArg); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// 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.0; library DTOs { struct Recipient { address addr; uint256 percentage; } struct Create721ContractDto { address owner; string uuid; string name; string symbol; bool transferLocked; uint96 royaltyPercentage; uint256 maxSupply; address signer; Recipient[] recipients; uint256 paymentAmount; uint256[] extras; bytes signature; } struct Create1155ContractDto { address owner; string uuid; string name; string symbol; bool transferLocked; uint96 royaltyPercentage; uint256[] availableTokens; address signer; Recipient[] recipients; uint256 paymentAmount; uint256[] extras; bytes signature; } }
// SPDX-License-Identifier: MIT // @author: NFT Studios pragma solidity ^0.8.18; import "@openzeppelin/contracts/access/Ownable.sol"; import {ECDSA} from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; abstract contract SignatureProtected is Ownable { address public signerAddress; constructor() Ownable(msg.sender) {} function initSignatureProtected(address _signerAddress) internal { signerAddress = _signerAddress; } function setSignerAddress(address _signerAddress) external onlyOwner { signerAddress = _signerAddress; } function validateSignature( bytes memory packedParams, bytes calldata signature ) internal view { require( ECDSA.recover(generateHash(packedParams), signature) == signerAddress, "SignatureProtected: Invalid signature for the caller" ); } function generateHash( bytes memory packedParams ) private view returns (bytes32) { bytes32 _hash = keccak256( bytes.concat( abi.encodePacked(address(this), msg.sender), packedParams ) ); bytes memory result = abi.encodePacked( "\x19Ethereum Signed Message:\n32", _hash ); return keccak256(result); } }
{ "evmVersion": "paris", "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_erc1155Address","type":"address"},{"internalType":"address","name":"_minterAddress","type":"address"},{"internalType":"string","name":"_metadataBaseUrl","type":"string"},{"internalType":"address","name":"_metadataResolverAddress","type":"address"},{"internalType":"address","name":"_signerAddress","type":"address"},{"internalType":"address","name":"_paymentRecipient","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[],"name":"ERC1167FailedCreateClone","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"iuuid","type":"string"},{"indexed":false,"internalType":"string","name":"uuid","type":"string"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"extras","type":"uint256[]"}],"name":"NewContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"string","name":"uuid","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"bool","name":"transferLocked","type":"bool"},{"internalType":"uint96","name":"royaltyPercentage","type":"uint96"},{"internalType":"uint256[]","name":"availableTokens","type":"uint256[]"},{"internalType":"address","name":"signer","type":"address"},{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"internalType":"struct DTOs.Recipient[]","name":"recipients","type":"tuple[]"},{"internalType":"uint256","name":"paymentAmount","type":"uint256"},{"internalType":"uint256[]","name":"extras","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct DTOs.Create1155ContractDto","name":"_createDto","type":"tuple"}],"name":"create","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"erc1155Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataBaseUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metadataResolver","outputs":[{"internalType":"contract IMetadataResolver","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paymentRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_erc1155Address","type":"address"}],"name":"setERC721Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_metadataBaseUrl","type":"string"}],"name":"setMetadataBaseUrl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_metadataResolverAddress","type":"address"}],"name":"setMetadataResolverAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minterAddress","type":"address"}],"name":"setMinterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_paymentRecipient","type":"address"}],"name":"setPaymentRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002fd638038062002fd68339818101604052810190620000379190620004f2565b33600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000ad5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000a49190620005be565b60405180910390fd5b620000be81620001f260201b60201c565b5080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836005908162000193919062000826565b5082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001e682620002b660201b60201c565b5050505050506200090d565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200033b826200030e565b9050919050565b6200034d816200032e565b81146200035957600080fd5b50565b6000815190506200036d8162000342565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003c8826200037d565b810181811067ffffffffffffffff82111715620003ea57620003e96200038e565b5b80604052505050565b6000620003ff620002fa565b90506200040d8282620003bd565b919050565b600067ffffffffffffffff82111562000430576200042f6200038e565b5b6200043b826200037d565b9050602081019050919050565b60005b83811015620004685780820151818401526020810190506200044b565b60008484015250505050565b60006200048b620004858462000412565b620003f3565b905082815260208101848484011115620004aa57620004a962000378565b5b620004b784828562000448565b509392505050565b600082601f830112620004d757620004d662000373565b5b8151620004e984826020860162000474565b91505092915050565b60008060008060008060c0878903121562000512576200051162000304565b5b60006200052289828a016200035c565b96505060206200053589828a016200035c565b955050604087015167ffffffffffffffff81111562000559576200055862000309565b5b6200056789828a01620004bf565b94505060606200057a89828a016200035c565b93505060806200058d89828a016200035c565b92505060a0620005a089828a016200035c565b9150509295509295509295565b620005b8816200032e565b82525050565b6000602082019050620005d56000830184620005ad565b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200062e57607f821691505b602082108103620006445762000643620005e6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006ae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200066f565b620006ba86836200066f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200070762000701620006fb84620006d2565b620006dc565b620006d2565b9050919050565b6000819050919050565b6200072383620006e6565b6200073b62000732826200070e565b8484546200067c565b825550505050565b600090565b6200075262000743565b6200075f81848462000718565b505050565b5b8181101562000787576200077b60008262000748565b60018101905062000765565b5050565b601f821115620007d657620007a0816200064a565b620007ab846200065f565b81016020851015620007bb578190505b620007d3620007ca856200065f565b83018262000764565b50505b505050565b600082821c905092915050565b6000620007fb60001984600802620007db565b1980831691505092915050565b6000620008168383620007e8565b9150826002028217905092915050565b6200083182620005db565b67ffffffffffffffff8111156200084d576200084c6200038e565b5b62000859825462000615565b620008668282856200078b565b600060209050601f8311600181146200089e576000841562000889578287015190505b62000895858262000808565b86555062000905565b601f198416620008ae866200064a565b60005b82811015620008d857848901518255600182019150602085019450602081019050620008b1565b86831015620008f85784890151620008f4601f891682620007e8565b8355505b6001600288020188555050505b505050505050565b6126b9806200091d6000396000f3fe6080604052600436106100f35760003560e01c806349f3f1a61161008a5780639a03d9a3116100595780639a03d9a3146102d1578063a0c76f62146102fa578063a3106b9514610325578063f2fde38b1461034e576100f3565b806349f3f1a6146102395780635b7633d014610264578063715018a61461028f5780638da5cb5b146102a6576100f3565b80632b1eaf29116100c65780632b1eaf29146101915780632d76119d146101bc57806333d7b176146101e557806334d722c91461020e576100f3565b8063046dc166146100f857806305142002146101215780630dded2ab1461014c5780632983c4b814610168575b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a91906113fc565b610377565b005b34801561012d57600080fd5b506101366103c3565b6040516101439190611438565b60405180910390f35b61016660048036038101906101619190611478565b6103e9565b005b34801561017457600080fd5b5061018f600480360381019061018a91906113fc565b6108e5565b005b34801561019d57600080fd5b506101a6610931565b6040516101b39190611438565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611607565b610957565b005b3480156101f157600080fd5b5061020c600480360381019061020791906113fc565b610972565b005b34801561021a57600080fd5b506102236109be565b6040516102309190611438565b60405180910390f35b34801561024557600080fd5b5061024e6109e4565b60405161025b91906116cf565b60405180910390f35b34801561027057600080fd5b50610279610a72565b6040516102869190611438565b60405180910390f35b34801561029b57600080fd5b506102a4610a98565b005b3480156102b257600080fd5b506102bb610aac565b6040516102c89190611438565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906113fc565b610ad5565b005b34801561030657600080fd5b5061030f610b21565b60405161031c9190611750565b60405180910390f35b34801561033157600080fd5b5061034c600480360381019061034791906113fc565b610b47565b005b34801561035a57600080fd5b50610375600480360381019061037091906113fc565b610b93565b005b61037f610c19565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104728180602001906103fc919061177a565b60405160200161040d92919061180d565b604051602081830303815290604052805190602001208261012001358380610140019061043a9190611826565b60405160200161044d9493929190611954565b6040516020818303038152906040528280610160019061046d919061198f565b610ca0565b610480816101200135610d8a565b60006104ad600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ea9565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16634b700fc38460000160208101906104e391906113fc565b8560a00160208101906104f69190611a36565b868060400190610506919061177a565b888060600190610516919061177a565b8a60800160208101906105299190611a9b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518963ffffffff1660e01b815260040161056f989796959493929190611b13565b600060405180830381600087803b15801561058957600080fd5b505af115801561059d573d6000803e3d6000fd5b5050505060006105ce600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ea9565b905060008190508073ffffffffffffffffffffffffffffffffffffffff1663128a3abf86600001602081019061060491906113fc565b8760e001602081019061061791906113fc565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898060c0019061064a9190611826565b8b80610100019061065b9190611b86565b8c6040518963ffffffff1660e01b815260040161067f989796959493929190611db5565b600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663983b2d56836040518263ffffffff1660e01b81526004016106ea9190611438565b600060405180830381600087803b15801561070457600080fd5b505af1158015610718573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b86600001602081019061074b91906113fc565b6040518263ffffffff1660e01b81526004016107679190611438565b600060405180830381600087803b15801561078157600080fd5b505af1158015610795573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663884336518560058880602001906107ea919061177a565b6040516020016107fc93929190611f6c565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610828929190611f9d565b600060405180830381600087803b15801561084257600080fd5b505af1158015610856573d6000803e3d6000fd5b5050505084806020019061086a919061177a565b60405161087892919061180d565b60405180910390207f33cbc8d9bff712d6199a0f3dc8bd053690efd03287805defdbee7a53a52f36608680602001906108b1919061177a565b87868a8061014001906108c49190611826565b6040516108d696959493929190611fcd565b60405180910390a25050505050565b6108ed610c19565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61095f610c19565b806005908161096e91906121b1565b5050565b61097a610c19565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600580546109f190611e57565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1d90611e57565b8015610a6a5780601f10610a3f57610100808354040283529160200191610a6a565b820191906000526020600020905b815481529060010190602001808311610a4d57829003601f168201915b505050505081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aa0610c19565b610aaa6000610f5a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610add610c19565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b4f610c19565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b9b610c19565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c0d5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c049190611438565b60405180910390fd5b610c1681610f5a565b50565b610c2161101e565b73ffffffffffffffffffffffffffffffffffffffff16610c3f610aac565b73ffffffffffffffffffffffffffffffffffffffff1614610c9e57610c6261101e565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c959190611438565b60405180910390fd5b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d2f610ce585611026565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110aa565b73ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c906122f5565b60405180910390fd5b505050565b6000810315610ea65780341015610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90612387565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610e1e906123d8565b60006040518083038185875af1925050503d8060008114610e5b576040519150601f19603f3d011682016040523d82523d6000602084013e610e60565b606091505b5050905080610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90612439565b60405180910390fd5b505b50565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f55576040517fc2f868f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080303360405160200161103c9291906124a1565b6040516020818303038152906040528360405160200161105d929190612509565b6040516020818303038152906040528051906020012090506000816040516020016110889190612579565b6040516020818303038152906040529050808051906020012092505050919050565b6000806000806110ba86866110d6565b9250925092506110ca8282611132565b82935050505092915050565b6000806000604184510361111b5760008060006020870151925060408701519150606087015160001a905061110d88828585611296565b95509550955050505061112b565b60006002855160001b9250925092505b9250925092565b600060038111156111465761114561259f565b5b8260038111156111595761115861259f565b5b031561129257600160038111156111735761117261259f565b5b8260038111156111865761118561259f565b5b036111bd576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156111d1576111d061259f565b5b8260038111156111e4576111e361259f565b5b03611229578060001c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161122091906125dd565b60405180910390fd5b60038081111561123c5761123b61259f565b5b82600381111561124f5761124e61259f565b5b0361129157806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016112889190612607565b60405180910390fd5b5b5050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c11156112d6576000600385925092509250611380565b6000600188888888604051600081526020016040526040516112fb949392919061263e565b6020604051602081039080840390855afa15801561131d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137157600060016000801b93509350935050611380565b8060008060001b935093509350505b9450945094915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113c98261139e565b9050919050565b6113d9816113be565b81146113e457600080fd5b50565b6000813590506113f6816113d0565b92915050565b60006020828403121561141257611411611394565b5b6000611420848285016113e7565b91505092915050565b611432816113be565b82525050565b600060208201905061144d6000830184611429565b92915050565b600080fd5b6000610180828403121561146f5761146e611453565b5b81905092915050565b60006020828403121561148e5761148d611394565b5b600082013567ffffffffffffffff8111156114ac576114ab611399565b5b6114b884828501611458565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611514826114cb565b810181811067ffffffffffffffff82111715611533576115326114dc565b5b80604052505050565b600061154661138a565b9050611552828261150b565b919050565b600067ffffffffffffffff821115611572576115716114dc565b5b61157b826114cb565b9050602081019050919050565b82818337600083830152505050565b60006115aa6115a584611557565b61153c565b9050828152602081018484840111156115c6576115c56114c6565b5b6115d1848285611588565b509392505050565b600082601f8301126115ee576115ed6114c1565b5b81356115fe848260208601611597565b91505092915050565b60006020828403121561161d5761161c611394565b5b600082013567ffffffffffffffff81111561163b5761163a611399565b5b611647848285016115d9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561168a57808201518184015260208101905061166f565b60008484015250505050565b60006116a182611650565b6116ab818561165b565b93506116bb81856020860161166c565b6116c4816114cb565b840191505092915050565b600060208201905081810360008301526116e98184611696565b905092915050565b6000819050919050565b600061171661171161170c8461139e565b6116f1565b61139e565b9050919050565b6000611728826116fb565b9050919050565b600061173a8261171d565b9050919050565b61174a8161172f565b82525050565b60006020820190506117656000830184611741565b92915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126117975761179661176b565b5b80840192508235915067ffffffffffffffff8211156117b9576117b8611770565b5b6020830192506001820236038313156117d5576117d4611775565b5b509250929050565b600081905092915050565b60006117f483856117dd565b9350611801838584611588565b82840190509392505050565b600061181a8284866117e8565b91508190509392505050565b600080833560016020038436030381126118435761184261176b565b5b80840192508235915067ffffffffffffffff82111561186557611864611770565b5b60208301925060208202360383131561188157611880611775565b5b509250929050565b6000819050919050565b6000819050919050565b6118ae6118a982611889565b611893565b82525050565b6000819050919050565b6000819050919050565b6118d96118d4826118b4565b6118be565b82525050565b600081905092915050565b600080fd5b82818337505050565b600061190483856118df565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611937576119366118ea565b5b6020830292506119488385846118ef565b82840190509392505050565b6000611960828761189d565b60208201915061197082866118c8565b6020820191506119818284866118f8565b915081905095945050505050565b600080833560016020038436030381126119ac576119ab61176b565b5b80840192508235915067ffffffffffffffff8211156119ce576119cd611770565b5b6020830192506001820236038313156119ea576119e9611775565b5b509250929050565b60006bffffffffffffffffffffffff82169050919050565b611a13816119f2565b8114611a1e57600080fd5b50565b600081359050611a3081611a0a565b92915050565b600060208284031215611a4c57611a4b611394565b5b6000611a5a84828501611a21565b91505092915050565b60008115159050919050565b611a7881611a63565b8114611a8357600080fd5b50565b600081359050611a9581611a6f565b92915050565b600060208284031215611ab157611ab0611394565b5b6000611abf84828501611a86565b91505092915050565b611ad1816119f2565b82525050565b6000611ae3838561165b565b9350611af0838584611588565b611af9836114cb565b840190509392505050565b611b0d81611a63565b82525050565b600060c082019050611b28600083018b611429565b611b35602083018a611ac8565b8181036040830152611b4881888a611ad7565b90508181036060830152611b5d818688611ad7565b9050611b6c6080830185611b04565b611b7960a0830184611429565b9998505050505050505050565b60008083356001602003843603038112611ba357611ba261176b565b5b80840192508235915067ffffffffffffffff821115611bc557611bc4611770565b5b602083019250604082023603831315611be157611be0611775565b5b509250929050565b600082825260208201905092915050565b6000611c068385611be9565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611c3957611c386118ea565b5b602083029250611c4a8385846118ef565b82840190509392505050565b600082825260208201905092915050565b6000819050919050565b6000611c8060208401846113e7565b905092915050565b611c91816113be565b82525050565b611ca0816118b4565b8114611cab57600080fd5b50565b600081359050611cbd81611c97565b92915050565b6000611cd26020840184611cae565b905092915050565b611ce3816118b4565b82525050565b60408201611cfa6000830183611c71565b611d076000850182611c88565b50611d156020830183611cc3565b611d226020850182611cda565b50505050565b6000611d348383611ce9565b60408301905092915050565b600082905092915050565b6000604082019050919050565b6000611d648385611c56565b9350611d6f82611c67565b8060005b85811015611da857611d858284611d40565b611d8f8882611d28565b9750611d9a83611d4b565b925050600181019050611d73565b5085925050509392505050565b600060c082019050611dca600083018b611429565b611dd7602083018a611429565b611de46040830189611429565b8181036060830152611df7818789611bfa565b90508181036080830152611e0c818587611d58565b9050611e1b60a0830184611429565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e6f57607f821691505b602082108103611e8257611e81611e28565b5b50919050565b60008190508160005260206000209050919050565b60008154611eaa81611e57565b611eb481866117dd565b94506001821660008114611ecf5760018114611ee457611f17565b60ff1983168652811515820286019350611f17565b611eed85611e88565b60005b83811015611f0f57815481890152600182019150602081019050611ef0565b838801955050505b50505092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000611f566001836117dd565b9150611f6182611f20565b600182019050919050565b6000611f788286611e9d565b9150611f858284866117e8565b9150611f9082611f49565b9150819050949350505050565b6000604082019050611fb26000830185611429565b8181036020830152611fc48184611696565b90509392505050565b60006080820190508181036000830152611fe881888a611ad7565b9050611ff76020830187611429565b6120046040830186611429565b8181036060830152612017818486611bfa565b9050979650505050505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026120717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612034565b61207b8683612034565b95508019841693508086168417925050509392505050565b60006120ae6120a96120a4846118b4565b6116f1565b6118b4565b9050919050565b6000819050919050565b6120c883612093565b6120dc6120d4826120b5565b848454612041565b825550505050565b600090565b6120f16120e4565b6120fc8184846120bf565b505050565b5b81811015612120576121156000826120e9565b600181019050612102565b5050565b601f8211156121655761213681611e88565b61213f84612024565b8101602085101561214e578190505b61216261215a85612024565b830182612101565b50505b505050565b600082821c905092915050565b60006121886000198460080261216a565b1980831691505092915050565b60006121a18383612177565b9150826002028217905092915050565b6121ba82611650565b67ffffffffffffffff8111156121d3576121d26114dc565b5b6121dd8254611e57565b6121e8828285612124565b600060209050601f83116001811461221b5760008415612209578287015190505b6122138582612195565b86555061227b565b601f19841661222986611e88565b60005b828110156122515784890151825560018201915060208501945060208101905061222c565b8683101561226e578489015161226a601f891682612177565b8355505b6001600288020188555050505b505050505050565b7f5369676e617475726550726f7465637465643a20496e76616c6964207369676e60008201527f617475726520666f72207468652063616c6c6572000000000000000000000000602082015250565b60006122df60348361165b565b91506122ea82612283565b604082019050919050565b6000602082019050818103600083015261230e816122d2565b9050919050565b7f546865207061796d656e7420616d6f756e7420686173206e6f74206265656e2060008201527f7361746973666965640000000000000000000000000000000000000000000000602082015250565b600061237160298361165b565b915061237c82612315565b604082019050919050565b600060208201905081810360008301526123a081612364565b9050919050565b600081905092915050565b50565b60006123c26000836123a7565b91506123cd826123b2565b600082019050919050565b60006123e3826123b5565b9150819050919050565b7f50617961626c653a205472616e73666572206661696c65640000000000000000600082015250565b600061242360188361165b565b915061242e826123ed565b602082019050919050565b6000602082019050818103600083015261245281612416565b9050919050565b60008160601b9050919050565b600061247182612459565b9050919050565b600061248382612466565b9050919050565b61249b612496826113be565b612478565b82525050565b60006124ad828561248a565b6014820191506124bd828461248a565b6014820191508190509392505050565b600081519050919050565b60006124e3826124cd565b6124ed81856123a7565b93506124fd81856020860161166c565b80840191505092915050565b600061251582856124d8565b915061252182846124d8565b91508190509392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612563601c836117dd565b915061256e8261252d565b601c82019050919050565b600061258482612556565b9150612590828461189d565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6125d7816118b4565b82525050565b60006020820190506125f260008301846125ce565b92915050565b61260181611889565b82525050565b600060208201905061261c60008301846125f8565b92915050565b600060ff82169050919050565b61263881612622565b82525050565b600060808201905061265360008301876125f8565b612660602083018661262f565b61266d60408301856125f8565b61267a60608301846125f8565b9594505050505056fea2646970667358221220a04755f56904d6eb7ade11894a96430a15bcf62b524da8118a66e0b90df45d5c64736f6c634300081800330000000000000000000000005d65ba3ccba554ceb300971b5396eb6ae7398fcd00000000000000000000000097866d75d7053e61557e2584f2c263defcefba8800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ca81d6c500d8201dd46edd2f974caab533ef497000000000000000000000000e16c1623c1aa7d919cd2241d8b36d9e79c1be2a20000000000000000000000007df748c0587ffe7e30bb10d5e28d611d408591e4000000000000000000000000000000000000000000000000000000000000004c68747470733a2f2f6275696c64747265652d636c6f7564666c6172652d776f726b65722d73746167696e672e6e667473747564696f732e776f726b6572732e6465762f6d657461646174612f0000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106100f35760003560e01c806349f3f1a61161008a5780639a03d9a3116100595780639a03d9a3146102d1578063a0c76f62146102fa578063a3106b9514610325578063f2fde38b1461034e576100f3565b806349f3f1a6146102395780635b7633d014610264578063715018a61461028f5780638da5cb5b146102a6576100f3565b80632b1eaf29116100c65780632b1eaf29146101915780632d76119d146101bc57806333d7b176146101e557806334d722c91461020e576100f3565b8063046dc166146100f857806305142002146101215780630dded2ab1461014c5780632983c4b814610168575b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a91906113fc565b610377565b005b34801561012d57600080fd5b506101366103c3565b6040516101439190611438565b60405180910390f35b61016660048036038101906101619190611478565b6103e9565b005b34801561017457600080fd5b5061018f600480360381019061018a91906113fc565b6108e5565b005b34801561019d57600080fd5b506101a6610931565b6040516101b39190611438565b60405180910390f35b3480156101c857600080fd5b506101e360048036038101906101de9190611607565b610957565b005b3480156101f157600080fd5b5061020c600480360381019061020791906113fc565b610972565b005b34801561021a57600080fd5b506102236109be565b6040516102309190611438565b60405180910390f35b34801561024557600080fd5b5061024e6109e4565b60405161025b91906116cf565b60405180910390f35b34801561027057600080fd5b50610279610a72565b6040516102869190611438565b60405180910390f35b34801561029b57600080fd5b506102a4610a98565b005b3480156102b257600080fd5b506102bb610aac565b6040516102c89190611438565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f391906113fc565b610ad5565b005b34801561030657600080fd5b5061030f610b21565b60405161031c9190611750565b60405180910390f35b34801561033157600080fd5b5061034c600480360381019061034791906113fc565b610b47565b005b34801561035a57600080fd5b50610375600480360381019061037091906113fc565b610b93565b005b61037f610c19565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104728180602001906103fc919061177a565b60405160200161040d92919061180d565b604051602081830303815290604052805190602001208261012001358380610140019061043a9190611826565b60405160200161044d9493929190611954565b6040516020818303038152906040528280610160019061046d919061198f565b610ca0565b610480816101200135610d8a565b60006104ad600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ea9565b905060008190508073ffffffffffffffffffffffffffffffffffffffff16634b700fc38460000160208101906104e391906113fc565b8560a00160208101906104f69190611a36565b868060400190610506919061177a565b888060600190610516919061177a565b8a60800160208101906105299190611a9b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518963ffffffff1660e01b815260040161056f989796959493929190611b13565b600060405180830381600087803b15801561058957600080fd5b505af115801561059d573d6000803e3d6000fd5b5050505060006105ce600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610ea9565b905060008190508073ffffffffffffffffffffffffffffffffffffffff1663128a3abf86600001602081019061060491906113fc565b8760e001602081019061061791906113fc565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16898060c0019061064a9190611826565b8b80610100019061065b9190611b86565b8c6040518963ffffffff1660e01b815260040161067f989796959493929190611db5565b600060405180830381600087803b15801561069957600080fd5b505af11580156106ad573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663983b2d56836040518263ffffffff1660e01b81526004016106ea9190611438565b600060405180830381600087803b15801561070457600080fd5b505af1158015610718573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff1663f2fde38b86600001602081019061074b91906113fc565b6040518263ffffffff1660e01b81526004016107679190611438565b600060405180830381600087803b15801561078157600080fd5b505af1158015610795573d6000803e3d6000fd5b50505050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663884336518560058880602001906107ea919061177a565b6040516020016107fc93929190611f6c565b6040516020818303038152906040526040518363ffffffff1660e01b8152600401610828929190611f9d565b600060405180830381600087803b15801561084257600080fd5b505af1158015610856573d6000803e3d6000fd5b5050505084806020019061086a919061177a565b60405161087892919061180d565b60405180910390207f33cbc8d9bff712d6199a0f3dc8bd053690efd03287805defdbee7a53a52f36608680602001906108b1919061177a565b87868a8061014001906108c49190611826565b6040516108d696959493929190611fcd565b60405180910390a25050505050565b6108ed610c19565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61095f610c19565b806005908161096e91906121b1565b5050565b61097a610c19565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600580546109f190611e57565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1d90611e57565b8015610a6a5780601f10610a3f57610100808354040283529160200191610a6a565b820191906000526020600020905b815481529060010190602001808311610a4d57829003601f168201915b505050505081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610aa0610c19565b610aaa6000610f5a565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610add610c19565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b4f610c19565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b9b610c19565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c0d5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c049190611438565b60405180910390fd5b610c1681610f5a565b50565b610c2161101e565b73ffffffffffffffffffffffffffffffffffffffff16610c3f610aac565b73ffffffffffffffffffffffffffffffffffffffff1614610c9e57610c6261101e565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c959190611438565b60405180910390fd5b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d2f610ce585611026565b84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506110aa565b73ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c906122f5565b60405180910390fd5b505050565b6000810315610ea65780341015610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd90612387565b60405180910390fd5b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1634604051610e1e906123d8565b60006040518083038185875af1925050503d8060008114610e5b576040519150601f19603f3d011682016040523d82523d6000602084013e610e60565b606091505b5050905080610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90612439565b60405180910390fd5b505b50565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f55576040517fc2f868f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080303360405160200161103c9291906124a1565b6040516020818303038152906040528360405160200161105d929190612509565b6040516020818303038152906040528051906020012090506000816040516020016110889190612579565b6040516020818303038152906040529050808051906020012092505050919050565b6000806000806110ba86866110d6565b9250925092506110ca8282611132565b82935050505092915050565b6000806000604184510361111b5760008060006020870151925060408701519150606087015160001a905061110d88828585611296565b95509550955050505061112b565b60006002855160001b9250925092505b9250925092565b600060038111156111465761114561259f565b5b8260038111156111595761115861259f565b5b031561129257600160038111156111735761117261259f565b5b8260038111156111865761118561259f565b5b036111bd576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156111d1576111d061259f565b5b8260038111156111e4576111e361259f565b5b03611229578060001c6040517ffce698f700000000000000000000000000000000000000000000000000000000815260040161122091906125dd565b60405180910390fd5b60038081111561123c5761123b61259f565b5b82600381111561124f5761124e61259f565b5b0361129157806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016112889190612607565b60405180910390fd5b5b5050565b60008060007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08460001c11156112d6576000600385925092509250611380565b6000600188888888604051600081526020016040526040516112fb949392919061263e565b6020604051602081039080840390855afa15801561131d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361137157600060016000801b93509350935050611380565b8060008060001b935093509350505b9450945094915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113c98261139e565b9050919050565b6113d9816113be565b81146113e457600080fd5b50565b6000813590506113f6816113d0565b92915050565b60006020828403121561141257611411611394565b5b6000611420848285016113e7565b91505092915050565b611432816113be565b82525050565b600060208201905061144d6000830184611429565b92915050565b600080fd5b6000610180828403121561146f5761146e611453565b5b81905092915050565b60006020828403121561148e5761148d611394565b5b600082013567ffffffffffffffff8111156114ac576114ab611399565b5b6114b884828501611458565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611514826114cb565b810181811067ffffffffffffffff82111715611533576115326114dc565b5b80604052505050565b600061154661138a565b9050611552828261150b565b919050565b600067ffffffffffffffff821115611572576115716114dc565b5b61157b826114cb565b9050602081019050919050565b82818337600083830152505050565b60006115aa6115a584611557565b61153c565b9050828152602081018484840111156115c6576115c56114c6565b5b6115d1848285611588565b509392505050565b600082601f8301126115ee576115ed6114c1565b5b81356115fe848260208601611597565b91505092915050565b60006020828403121561161d5761161c611394565b5b600082013567ffffffffffffffff81111561163b5761163a611399565b5b611647848285016115d9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561168a57808201518184015260208101905061166f565b60008484015250505050565b60006116a182611650565b6116ab818561165b565b93506116bb81856020860161166c565b6116c4816114cb565b840191505092915050565b600060208201905081810360008301526116e98184611696565b905092915050565b6000819050919050565b600061171661171161170c8461139e565b6116f1565b61139e565b9050919050565b6000611728826116fb565b9050919050565b600061173a8261171d565b9050919050565b61174a8161172f565b82525050565b60006020820190506117656000830184611741565b92915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126117975761179661176b565b5b80840192508235915067ffffffffffffffff8211156117b9576117b8611770565b5b6020830192506001820236038313156117d5576117d4611775565b5b509250929050565b600081905092915050565b60006117f483856117dd565b9350611801838584611588565b82840190509392505050565b600061181a8284866117e8565b91508190509392505050565b600080833560016020038436030381126118435761184261176b565b5b80840192508235915067ffffffffffffffff82111561186557611864611770565b5b60208301925060208202360383131561188157611880611775565b5b509250929050565b6000819050919050565b6000819050919050565b6118ae6118a982611889565b611893565b82525050565b6000819050919050565b6000819050919050565b6118d96118d4826118b4565b6118be565b82525050565b600081905092915050565b600080fd5b82818337505050565b600061190483856118df565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611937576119366118ea565b5b6020830292506119488385846118ef565b82840190509392505050565b6000611960828761189d565b60208201915061197082866118c8565b6020820191506119818284866118f8565b915081905095945050505050565b600080833560016020038436030381126119ac576119ab61176b565b5b80840192508235915067ffffffffffffffff8211156119ce576119cd611770565b5b6020830192506001820236038313156119ea576119e9611775565b5b509250929050565b60006bffffffffffffffffffffffff82169050919050565b611a13816119f2565b8114611a1e57600080fd5b50565b600081359050611a3081611a0a565b92915050565b600060208284031215611a4c57611a4b611394565b5b6000611a5a84828501611a21565b91505092915050565b60008115159050919050565b611a7881611a63565b8114611a8357600080fd5b50565b600081359050611a9581611a6f565b92915050565b600060208284031215611ab157611ab0611394565b5b6000611abf84828501611a86565b91505092915050565b611ad1816119f2565b82525050565b6000611ae3838561165b565b9350611af0838584611588565b611af9836114cb565b840190509392505050565b611b0d81611a63565b82525050565b600060c082019050611b28600083018b611429565b611b35602083018a611ac8565b8181036040830152611b4881888a611ad7565b90508181036060830152611b5d818688611ad7565b9050611b6c6080830185611b04565b611b7960a0830184611429565b9998505050505050505050565b60008083356001602003843603038112611ba357611ba261176b565b5b80840192508235915067ffffffffffffffff821115611bc557611bc4611770565b5b602083019250604082023603831315611be157611be0611775565b5b509250929050565b600082825260208201905092915050565b6000611c068385611be9565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611c3957611c386118ea565b5b602083029250611c4a8385846118ef565b82840190509392505050565b600082825260208201905092915050565b6000819050919050565b6000611c8060208401846113e7565b905092915050565b611c91816113be565b82525050565b611ca0816118b4565b8114611cab57600080fd5b50565b600081359050611cbd81611c97565b92915050565b6000611cd26020840184611cae565b905092915050565b611ce3816118b4565b82525050565b60408201611cfa6000830183611c71565b611d076000850182611c88565b50611d156020830183611cc3565b611d226020850182611cda565b50505050565b6000611d348383611ce9565b60408301905092915050565b600082905092915050565b6000604082019050919050565b6000611d648385611c56565b9350611d6f82611c67565b8060005b85811015611da857611d858284611d40565b611d8f8882611d28565b9750611d9a83611d4b565b925050600181019050611d73565b5085925050509392505050565b600060c082019050611dca600083018b611429565b611dd7602083018a611429565b611de46040830189611429565b8181036060830152611df7818789611bfa565b90508181036080830152611e0c818587611d58565b9050611e1b60a0830184611429565b9998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611e6f57607f821691505b602082108103611e8257611e81611e28565b5b50919050565b60008190508160005260206000209050919050565b60008154611eaa81611e57565b611eb481866117dd565b94506001821660008114611ecf5760018114611ee457611f17565b60ff1983168652811515820286019350611f17565b611eed85611e88565b60005b83811015611f0f57815481890152600182019150602081019050611ef0565b838801955050505b50505092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000611f566001836117dd565b9150611f6182611f20565b600182019050919050565b6000611f788286611e9d565b9150611f858284866117e8565b9150611f9082611f49565b9150819050949350505050565b6000604082019050611fb26000830185611429565b8181036020830152611fc48184611696565b90509392505050565b60006080820190508181036000830152611fe881888a611ad7565b9050611ff76020830187611429565b6120046040830186611429565b8181036060830152612017818486611bfa565b9050979650505050505050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026120717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612034565b61207b8683612034565b95508019841693508086168417925050509392505050565b60006120ae6120a96120a4846118b4565b6116f1565b6118b4565b9050919050565b6000819050919050565b6120c883612093565b6120dc6120d4826120b5565b848454612041565b825550505050565b600090565b6120f16120e4565b6120fc8184846120bf565b505050565b5b81811015612120576121156000826120e9565b600181019050612102565b5050565b601f8211156121655761213681611e88565b61213f84612024565b8101602085101561214e578190505b61216261215a85612024565b830182612101565b50505b505050565b600082821c905092915050565b60006121886000198460080261216a565b1980831691505092915050565b60006121a18383612177565b9150826002028217905092915050565b6121ba82611650565b67ffffffffffffffff8111156121d3576121d26114dc565b5b6121dd8254611e57565b6121e8828285612124565b600060209050601f83116001811461221b5760008415612209578287015190505b6122138582612195565b86555061227b565b601f19841661222986611e88565b60005b828110156122515784890151825560018201915060208501945060208101905061222c565b8683101561226e578489015161226a601f891682612177565b8355505b6001600288020188555050505b505050505050565b7f5369676e617475726550726f7465637465643a20496e76616c6964207369676e60008201527f617475726520666f72207468652063616c6c6572000000000000000000000000602082015250565b60006122df60348361165b565b91506122ea82612283565b604082019050919050565b6000602082019050818103600083015261230e816122d2565b9050919050565b7f546865207061796d656e7420616d6f756e7420686173206e6f74206265656e2060008201527f7361746973666965640000000000000000000000000000000000000000000000602082015250565b600061237160298361165b565b915061237c82612315565b604082019050919050565b600060208201905081810360008301526123a081612364565b9050919050565b600081905092915050565b50565b60006123c26000836123a7565b91506123cd826123b2565b600082019050919050565b60006123e3826123b5565b9150819050919050565b7f50617961626c653a205472616e73666572206661696c65640000000000000000600082015250565b600061242360188361165b565b915061242e826123ed565b602082019050919050565b6000602082019050818103600083015261245281612416565b9050919050565b60008160601b9050919050565b600061247182612459565b9050919050565b600061248382612466565b9050919050565b61249b612496826113be565b612478565b82525050565b60006124ad828561248a565b6014820191506124bd828461248a565b6014820191508190509392505050565b600081519050919050565b60006124e3826124cd565b6124ed81856123a7565b93506124fd81856020860161166c565b80840191505092915050565b600061251582856124d8565b915061252182846124d8565b91508190509392505050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000612563601c836117dd565b915061256e8261252d565b601c82019050919050565b600061258482612556565b9150612590828461189d565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6125d7816118b4565b82525050565b60006020820190506125f260008301846125ce565b92915050565b61260181611889565b82525050565b600060208201905061261c60008301846125f8565b92915050565b600060ff82169050919050565b61263881612622565b82525050565b600060808201905061265360008301876125f8565b612660602083018661262f565b61266d60408301856125f8565b61267a60608301846125f8565b9594505050505056fea2646970667358221220a04755f56904d6eb7ade11894a96430a15bcf62b524da8118a66e0b90df45d5c64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005d65ba3ccba554ceb300971b5396eb6ae7398fcd00000000000000000000000097866d75d7053e61557e2584f2c263defcefba8800000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ca81d6c500d8201dd46edd2f974caab533ef497000000000000000000000000e16c1623c1aa7d919cd2241d8b36d9e79c1be2a20000000000000000000000007df748c0587ffe7e30bb10d5e28d611d408591e4000000000000000000000000000000000000000000000000000000000000004c68747470733a2f2f6275696c64747265652d636c6f7564666c6172652d776f726b65722d73746167696e672e6e667473747564696f732e776f726b6572732e6465762f6d657461646174612f0000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _erc1155Address (address): 0x5D65Ba3cCbA554CEb300971b5396eB6ae7398FcD
Arg [1] : _minterAddress (address): 0x97866d75D7053e61557E2584F2c263DEFCEfba88
Arg [2] : _metadataBaseUrl (string): https://buildtree-cloudflare-worker-staging.nftstudios.workers.dev/metadata/
Arg [3] : _metadataResolverAddress (address): 0x6Ca81d6C500d8201dd46eDd2F974cAab533ef497
Arg [4] : _signerAddress (address): 0xe16C1623c1AA7D919cd2241d8b36d9E79C1Be2A2
Arg [5] : _paymentRecipient (address): 0x7df748C0587FfE7e30bB10D5E28d611D408591e4
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000005d65ba3ccba554ceb300971b5396eb6ae7398fcd
Arg [1] : 00000000000000000000000097866d75d7053e61557e2584f2c263defcefba88
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000006ca81d6c500d8201dd46edd2f974caab533ef497
Arg [4] : 000000000000000000000000e16c1623c1aa7d919cd2241d8b36d9e79c1be2a2
Arg [5] : 0000000000000000000000007df748c0587ffe7e30bb10d5e28d611d408591e4
Arg [6] : 000000000000000000000000000000000000000000000000000000000000004c
Arg [7] : 68747470733a2f2f6275696c64747265652d636c6f7564666c6172652d776f72
Arg [8] : 6b65722d73746167696e672e6e667473747564696f732e776f726b6572732e64
Arg [9] : 65762f6d657461646174612f0000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.