Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 5 from a total of 5 transactions
Latest 7 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x3d602d80 | 21046404 | 487 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 21046404 | 487 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 20719505 | 533 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 20719505 | 533 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 20705886 | 534 days ago | Contract Creation | 0 ETH | |||
| 0x3d602d80 | 20705886 | 534 days ago | Contract Creation | 0 ETH | |||
| Transfer | 20705886 | 534 days ago | 0.00000001 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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 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
Contract ABI
API[{"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
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.