Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 97 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Mint Admin | 23042705 | 103 days ago | IN | 0 ETH | 0.00004523 | ||||
| Mint Admin | 23042702 | 103 days ago | IN | 0 ETH | 0.00004369 | ||||
| Mint Admin | 23042701 | 103 days ago | IN | 0 ETH | 0.00004531 | ||||
| Mint Admin | 23042699 | 103 days ago | IN | 0 ETH | 0.0000463 | ||||
| Mint Admin | 23042691 | 103 days ago | IN | 0 ETH | 0.00004717 | ||||
| Mint Admin | 23042689 | 103 days ago | IN | 0 ETH | 0.00004896 | ||||
| Mint Admin | 23042688 | 103 days ago | IN | 0 ETH | 0.00004625 | ||||
| Mint Admin | 23042685 | 103 days ago | IN | 0 ETH | 0.00004739 | ||||
| Mint Admin | 23042684 | 103 days ago | IN | 0 ETH | 0.00004885 | ||||
| Mint Admin | 23042658 | 103 days ago | IN | 0 ETH | 0.00006234 | ||||
| Mint Admin | 23042654 | 103 days ago | IN | 0 ETH | 0.00007507 | ||||
| Mint Admin | 23033027 | 104 days ago | IN | 0 ETH | 0.00019676 | ||||
| Mint Admin | 23033025 | 104 days ago | IN | 0 ETH | 0.00022112 | ||||
| Mint Admin | 23033024 | 104 days ago | IN | 0 ETH | 0.00022045 | ||||
| Mint Admin | 22966365 | 114 days ago | IN | 0 ETH | 0.00011683 | ||||
| Mint Admin | 22966364 | 114 days ago | IN | 0 ETH | 0.00012215 | ||||
| Mint Admin | 22933238 | 118 days ago | IN | 0 ETH | 0.00048898 | ||||
| Mint Admin | 22933237 | 118 days ago | IN | 0 ETH | 0.0004531 | ||||
| Mint Admin | 22924552 | 119 days ago | IN | 0 ETH | 0.00014492 | ||||
| Set Private Sale... | 22918183 | 120 days ago | IN | 0 ETH | 0.00040917 | ||||
| Mint Admin | 22916594 | 121 days ago | IN | 0 ETH | 0.00023485 | ||||
| Mint Admin | 22916593 | 121 days ago | IN | 0 ETH | 0.00024456 | ||||
| Mint Admin | 22916592 | 121 days ago | IN | 0 ETH | 0.00023185 | ||||
| Mint Admin | 22916590 | 121 days ago | IN | 0 ETH | 0.00019374 | ||||
| Mint Admin | 22911992 | 121 days ago | IN | 0 ETH | 0.00009494 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
SalesManager
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
No with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IRGBStudies} from "./IRGBStudies.sol";
contract SalesManager is AccessControl {
/// @notice Sale stage enum.
enum SaleStage {
SaleClosed,
AllowlistSale,
PublicSale
}
/// @notice RGBStudies contract.
IRGBStudies public RGBStudies;
/// @notice Treasury address.
address public treasury;
/// @notice USDC token contract.
IERC20 public usdc;
/// @notice Current sale stage.
SaleStage public saleStage;
/// @notice Sale price in USDC (6 decimals).
uint256 public salePrice;
/// @notice Allowlist mint amount.
uint256 public constant ALLOWLIST_MAX_MINT = 4;
/// @notice USDC decimals
uint256 public constant USDC_DECIMALS = 6;
/// @notice Private sale buyer for the desired token ID.
mapping(uint256 => address) public tokenIdToPrivateSaleBuyer;
/// @notice Allowlist addresses.
mapping(address => bool) public isAllowlisted;
mapping(address => uint256) public allowlistMintCount;
error TransferFailed();
error PrivateSaleNotFound();
error AllowlistSaleNotActive();
error PublicSaleNotActive();
error IncorrectAmountSent();
error InvalidBuyer();
error NotAllowlisted();
error InvalidTokenId(uint256 tokenId);
error AllowlistMintLimitReached();
error USDCTransferFailed();
error TokenIdMustBeGreaterThanZero();
event SaleStageUpdated(SaleStage newStage);
event PrivateSaleMint(address indexed to, uint256 tokenId);
event AllowlistSaleMint(address indexed to, uint256 tokenId);
event PublicSaleMint(address indexed to, uint256 tokenId);
event AdminMint(address indexed to, uint256 tokenId);
constructor(IRGBStudies _RGBStudies, address _defaultAdmin, address _treasury, address _usdc) {
RGBStudies = _RGBStudies;
_grantRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
saleStage = SaleStage.SaleClosed;
treasury = _treasury;
usdc = IERC20(_usdc);
salePrice = 1000 * (10 ** USDC_DECIMALS);
}
/// @notice Mint a token in a private sale.
/// @param to Address to mint token to.
/// @param tokenId Token ID to mint.
function mintPrivateSale(address to, uint256 tokenId) external {
address buyer = tokenIdToPrivateSaleBuyer[tokenId];
if (buyer == address(0)) revert PrivateSaleNotFound();
if (buyer != to) revert InvalidBuyer();
if (tokenId == 0) revert TokenIdMustBeGreaterThanZero();
if (tokenId > RGBStudies.maxTokenId()) revert InvalidTokenId(tokenId);
bool success = usdc.transferFrom(msg.sender, treasury, salePrice);
if (!success) revert USDCTransferFailed();
RGBStudies.mint(to, tokenId);
emit PrivateSaleMint(to, tokenId);
}
/// @notice Mint a token in the allowlist sale.
/// @param to Address to mint token to.
/// @param tokenId Token ID to mint.
function mintAllowlistSale(address to, uint256 tokenId) external {
if (saleStage != SaleStage.AllowlistSale) revert AllowlistSaleNotActive();
if (!isAllowlisted[to]) revert NotAllowlisted();
if (allowlistMintCount[to] >= ALLOWLIST_MAX_MINT) revert AllowlistMintLimitReached();
if (tokenId == 0) revert TokenIdMustBeGreaterThanZero();
if (tokenId > RGBStudies.maxTokenId()) revert InvalidTokenId(tokenId);
bool success = usdc.transferFrom(msg.sender, treasury, salePrice);
if (!success) revert USDCTransferFailed();
RGBStudies.mint(to, tokenId);
allowlistMintCount[to]++;
emit AllowlistSaleMint(to, tokenId);
}
/// @notice Mint a token in the public sale.
/// @param to Address to mint token to.
/// @param tokenId Token ID to mint.
function mintPublicSale(address to, uint256 tokenId) external {
if (saleStage != SaleStage.PublicSale) revert PublicSaleNotActive();
if (tokenId == 0) revert TokenIdMustBeGreaterThanZero();
if (tokenId > RGBStudies.maxTokenId()) revert InvalidTokenId(tokenId);
bool success = usdc.transferFrom(msg.sender, treasury, salePrice);
if (!success) revert USDCTransferFailed();
RGBStudies.mint(to, tokenId);
emit PublicSaleMint(to, tokenId);
}
/// @notice Admin mint a token.
/// @dev Only callable by the default admin role.
/// @param to Address to mint token to.
/// @param tokenId Token ID to mint.
function mintAdmin(address to, uint256 tokenId) external onlyRole(DEFAULT_ADMIN_ROLE) {
if (tokenId == 0) revert TokenIdMustBeGreaterThanZero();
if (tokenId > RGBStudies.maxTokenId()) revert InvalidTokenId(tokenId);
RGBStudies.mint(to, tokenId);
emit AdminMint(to, tokenId);
}
/// @notice Set the sale price.
/// @dev Only callable by the default admin role.
/// @param _salePrice New sale price.
function setSalePrice(uint256 _salePrice) public onlyRole(DEFAULT_ADMIN_ROLE) {
salePrice = _salePrice;
}
/// @notice Set the sale stage.
/// @dev Only callable by the default admin role.
/// @param _saleStage New sale stage.
function setSaleStage(SaleStage _saleStage) public onlyRole(DEFAULT_ADMIN_ROLE) {
saleStage = _saleStage;
emit SaleStageUpdated(_saleStage);
}
/// @notice Set the private sale config for the desired token ID.
/// @dev Only callable by the default admin role.
/// @param _tokenId Token ID to set the private sale buyer for.
/// @param _buyer Buyer to set the private sale buyer for.
function setPrivateSaleBuyer(uint256 _tokenId, address _buyer) external onlyRole(DEFAULT_ADMIN_ROLE) {
tokenIdToPrivateSaleBuyer[_tokenId] = _buyer;
}
/// @notice Set the allowlist addresses.
/// @dev Only callable by the default admin role.
/// @param addresses Addresses to set the allowlist for.
/// @param allowed Whether the addresses are allowed.
function setAllowlistAddresses(address[] calldata addresses, bool allowed) external onlyRole(DEFAULT_ADMIN_ROLE) {
for (uint256 i = 0; i < addresses.length; i++) {
isAllowlisted[addresses[i]] = allowed;
}
}
/// @notice Reset the allowlist addrewsses and mint allowances
/// @dev Only callable by the default admin role.
/// @param allowlistAddresses Addresses to reset the allowlist for.
function resetAllowlistAddresses(address[] memory allowlistAddresses) external onlyRole(DEFAULT_ADMIN_ROLE) {
for (uint256 i = 0; i < allowlistAddresses.length; i++) {
isAllowlisted[allowlistAddresses[i]] = false;
allowlistMintCount[allowlistAddresses[i]] = 0;
}
}
/// @notice Withdraw any USDC stuck in the contract.
/// @dev Only callable by the default admin role.
function withdraw() external onlyRole(DEFAULT_ADMIN_ROLE) {
uint256 balance = usdc.balanceOf(address(this));
if (balance > 0) {
bool success = usdc.transfer(treasury, balance);
if (!success) revert USDCTransferFailed();
}
}
}// 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.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
interface IRGBStudies {
function mint(address to, uint256 tokenId) external;
function maxTokenId() external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev External interface of AccessControl declared to support ERC-165 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. This account bears the admin role (for the granted role).
* Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
*/
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.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.1.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 ERC-165 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.1.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* 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[ERC 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);
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IRGBStudies","name":"_RGBStudies","type":"address"},{"internalType":"address","name":"_defaultAdmin","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_usdc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"AllowlistMintLimitReached","type":"error"},{"inputs":[],"name":"AllowlistSaleNotActive","type":"error"},{"inputs":[],"name":"IncorrectAmountSent","type":"error"},{"inputs":[],"name":"InvalidBuyer","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"InvalidTokenId","type":"error"},{"inputs":[],"name":"NotAllowlisted","type":"error"},{"inputs":[],"name":"PrivateSaleNotFound","type":"error"},{"inputs":[],"name":"PublicSaleNotActive","type":"error"},{"inputs":[],"name":"TokenIdMustBeGreaterThanZero","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"USDCTransferFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AdminMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AllowlistSaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"PrivateSaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"PublicSaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum SalesManager.SaleStage","name":"newStage","type":"uint8"}],"name":"SaleStageUpdated","type":"event"},{"inputs":[],"name":"ALLOWLIST_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RGBStudies","outputs":[{"internalType":"contract IRGBStudies","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlistMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAllowlisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintAllowlistSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintPrivateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"mintPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"allowlistAddresses","type":"address[]"}],"name":"resetAllowlistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStage","outputs":[{"internalType":"enum SalesManager.SaleStage","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowlistAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"address","name":"_buyer","type":"address"}],"name":"setPrivateSaleBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SalesManager.SaleStage","name":"_saleStage","type":"uint8"}],"name":"setSaleStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToPrivateSaleBuyer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561000f575f5ffd5b50604051612b48380380612b4883398181016040528101906100319190610350565b8360015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506100835f5f1b8461015860201b60201c565b505f600360146101000a81548160ff021916908360028111156100a9576100a86103b4565b5b02179055508160025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506006600a61013c9190610546565b6103e86101499190610590565b600481905550505050506105d1565b5f610169838361024d60201b60201c565b6102435760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506101e06102b060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610247565b5f90505b92915050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102e4826102bb565b9050919050565b5f6102f5826102da565b9050919050565b610305816102eb565b811461030f575f5ffd5b50565b5f81519050610320816102fc565b92915050565b61032f816102da565b8114610339575f5ffd5b50565b5f8151905061034a81610326565b92915050565b5f5f5f5f60808587031215610368576103676102b7565b5b5f61037587828801610312565b94505060206103868782880161033c565b93505060406103978782880161033c565b92505060606103a88782880161033c565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156104635780860481111561043f5761043e6103e1565b5b600185161561044e5780820291505b808102905061045c8561040e565b9450610423565b94509492505050565b5f8261047b5760019050610536565b81610488575f9050610536565b816001811461049e57600281146104a8576104d7565b6001915050610536565b60ff8411156104ba576104b96103e1565b5b8360020a9150848211156104d1576104d06103e1565b5b50610536565b5060208310610133831016604e8410600b841016171561050c5782820a905083811115610507576105066103e1565b5b610536565b610519848484600161041a565b925090508184048111156105305761052f6103e1565b5b81810290505b9392505050565b5f819050919050565b5f6105508261053d565b915061055b8361053d565b92506105887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461046c565b905092915050565b5f61059a8261053d565b91506105a58361053d565b92508282026105b38161053d565b915082820484148315176105ca576105c96103e1565b5b5092915050565b61256a806105de5f395ff3fe608060405234801561000f575f5ffd5b50600436106101a7575f3560e01c80634aaca86d116100f7578063bc1b8ac011610095578063d547741f1161006f578063d547741f146104a1578063d79ff99d146104bd578063e92dc838146104d9578063f51f96dd146104f7576101a7565b8063bc1b8ac014610449578063c1419def14610467578063c3a7199914610485576101a7565b806391d14854116100d157806391d14854146103c3578063a1426944146103f3578063a217fddf1461040f578063b44c57671461042d576101a7565b80634aaca86d1461036b57806361d027b31461038957806375790fa3146103a7576101a7565b80632f2ff15d116101645780633b0d76311161013e5780633b0d7631146102e35780633ccfd60b146103135780633e413bee1461031d578063433ccc3b1461033b576101a7565b80632f2ff15d1461028f57806336568abe146102ab57806338e50594146102c7576101a7565b806301ffc9a7146101ab57806305a3b809146101db57806308bfd2371461020b5780631919fed714610227578063248a9ca3146102435780632bc83d8014610273575b5f5ffd5b6101c560048036038101906101c09190611cc3565b610515565b6040516101d29190611d08565b60405180910390f35b6101f560048036038101906101f09190611d7b565b61058e565b6040516102029190611d08565b60405180910390f35b61022560048036038101906102209190611dd9565b6105ab565b005b610241600480360381019061023c9190611e17565b610a43565b005b61025d60048036038101906102589190611e75565b610a5a565b60405161026a9190611eaf565b60405180910390f35b61028d60048036038101906102889190611dd9565b610a76565b005b6102a960048036038101906102a49190611ec8565b610e57565b005b6102c560048036038101906102c09190611ec8565b610e79565b005b6102e160048036038101906102dc9190611f91565b610ef4565b005b6102fd60048036038101906102f89190611d7b565b610f9f565b60405161030a9190611ffd565b60405180910390f35b61031b610fb4565b005b610325611161565b6040516103329190612071565b60405180910390f35b61035560048036038101906103509190611e17565b611186565b6040516103629190612099565b60405180910390f35b6103736111b6565b6040516103809190612125565b60405180910390f35b6103916111c9565b60405161039e9190612099565b60405180910390f35b6103c160048036038101906103bc9190612286565b6111ee565b005b6103dd60048036038101906103d89190611ec8565b6112e4565b6040516103ea9190611d08565b60405180910390f35b61040d600480360381019061040891906122cd565b611347565b005b6104176113a7565b6040516104249190611eaf565b60405180910390f35b6104476004803603810190610442919061232e565b6113ad565b005b61045161141e565b60405161045e9190611ffd565b60405180910390f35b61046f611423565b60405161047c9190611ffd565b60405180910390f35b61049f600480360381019061049a9190611dd9565b611428565b005b6104bb60048036038101906104b69190611ec8565b61161b565b005b6104d760048036038101906104d29190611dd9565b61163d565b005b6104e161198b565b6040516104ee9190612379565b60405180910390f35b6104ff6119b0565b60405161050c9190611ffd565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105875750610586826119b6565b5b9050919050565b6006602052805f5260405f205f915054906101000a900460ff1681565b600160028111156105bf576105be6120b2565b5b600360149054906101000a900460ff1660028111156105e1576105e06120b2565b5b14610618576040517f1892035a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610698576040517f06fb10a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061070f576040517fbc015c7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8103610748576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d691906123a6565b81111561081a57806040517fed15e6cf0000000000000000000000000000000000000000000000000000000081526004016108119190611ffd565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518463ffffffff1660e01b815260040161089c939291906123d1565b6020604051808303815f875af11580156108b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108dc919061241a565b905080610915576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610971929190612445565b5f604051808303815f87803b158015610988575f5ffd5b505af115801561099a573d5f5f3e3d5ffd5b5050505060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906109eb90612499565b91905055508273ffffffffffffffffffffffffffffffffffffffff167fb450a3dd0f3423dbd491d6215e332ed30f602825f4374e6a8a88864559b17be983604051610a369190611ffd565b60405180910390a2505050565b5f5f1b610a4f81611a1f565b816004819055505050565b5f5f5f8381526020019081526020015f20600101549050919050565b5f60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b0f576040517f74455cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b74576040517fb1df0e0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8203610bad576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3b91906123a6565b821115610c7f57816040517fed15e6cf000000000000000000000000000000000000000000000000000000008152600401610c769190611ffd565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518463ffffffff1660e01b8152600401610d01939291906123d1565b6020604051808303815f875af1158015610d1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d41919061241a565b905080610d7a576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856040518363ffffffff1660e01b8152600401610dd6929190612445565b5f604051808303815f87803b158015610ded575f5ffd5b505af1158015610dff573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f90cf5be4466297dcbd647a5d1b477eed772aa0f78579ee7b4bcd2a9fc40455bb84604051610e499190611ffd565b60405180910390a250505050565b610e6082610a5a565b610e6981611a1f565b610e738383611a33565b50505050565b610e81611b1c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ee5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eef8282611b23565b505050565b5f5f1b610f0081611a1f565b5f5f90505b84849050811015610f98578260065f878785818110610f2757610f266124e0565b5b9050602002016020810190610f3c9190611d7b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610f05565b5050505050565b6007602052805f5260405f205f915090505481565b5f5f1b610fc081611a1f565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161101b9190612099565b602060405180830381865afa158015611036573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105a91906123a6565b90505f81111561115d575f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016110e2929190612445565b6020604051808303815f875af11580156110fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611122919061241a565b90508061115b576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360149054906101000a900460ff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f1b6111fa81611a1f565b5f5f90505b82518110156112df575f60065f85848151811061121f5761121e6124e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60075f85848151811061128d5761128c6124e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080806001019150506111ff565b505050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f5f1b61135381611a1f565b8160055f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f5f1b81565b5f5f1b6113b981611a1f565b81600360146101000a81548160ff021916908360028111156113de576113dd6120b2565b5b02179055507f29e3771cda0e79cc74ab62545bd4e1ab6cb5c65d9352c98a088b7ad936f85124826040516114129190612125565b60405180910390a15050565b600481565b600681565b5f5f1b61143481611a1f565b5f820361146d576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fb91906123a6565b82111561153f57816040517fed15e6cf0000000000000000000000000000000000000000000000000000000081526004016115369190611ffd565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b815260040161159b929190612445565b5f604051808303815f87803b1580156115b2575f5ffd5b505af11580156115c4573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f90363c347ac279caf3ee0f1a07c9c17f19f56b1e394697a1d23b056c2c5bb36b8360405161160e9190611ffd565b60405180910390a2505050565b61162482610a5a565b61162d81611a1f565b6116378383611b23565b50505050565b6002808111156116505761164f6120b2565b5b600360149054906101000a900460ff166002811115611672576116716120b2565b5b146116a9576040517fc7d08f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81036116e2576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561174c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177091906123a6565b8111156117b457806040517fed15e6cf0000000000000000000000000000000000000000000000000000000081526004016117ab9190611ffd565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518463ffffffff1660e01b8152600401611836939291906123d1565b6020604051808303815f875af1158015611852573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611876919061241a565b9050806118af576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b815260040161190b929190612445565b5f604051808303815f87803b158015611922575f5ffd5b505af1158015611934573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b58360405161197e9190611ffd565b60405180910390a2505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611a3081611a2b611b1c565b611c0c565b50565b5f611a3e83836112e4565b611b125760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611aaf611b1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611b16565b5f90505b92915050565b5f33905090565b5f611b2e83836112e4565b15611c02575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611b9f611b1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611c06565b5f90505b92915050565b611c1682826112e4565b611c595780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401611c5092919061250d565b60405180910390fd5b5050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ca281611c6e565b8114611cac575f5ffd5b50565b5f81359050611cbd81611c99565b92915050565b5f60208284031215611cd857611cd7611c66565b5b5f611ce584828501611caf565b91505092915050565b5f8115159050919050565b611d0281611cee565b82525050565b5f602082019050611d1b5f830184611cf9565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611d4a82611d21565b9050919050565b611d5a81611d40565b8114611d64575f5ffd5b50565b5f81359050611d7581611d51565b92915050565b5f60208284031215611d9057611d8f611c66565b5b5f611d9d84828501611d67565b91505092915050565b5f819050919050565b611db881611da6565b8114611dc2575f5ffd5b50565b5f81359050611dd381611daf565b92915050565b5f5f60408385031215611def57611dee611c66565b5b5f611dfc85828601611d67565b9250506020611e0d85828601611dc5565b9150509250929050565b5f60208284031215611e2c57611e2b611c66565b5b5f611e3984828501611dc5565b91505092915050565b5f819050919050565b611e5481611e42565b8114611e5e575f5ffd5b50565b5f81359050611e6f81611e4b565b92915050565b5f60208284031215611e8a57611e89611c66565b5b5f611e9784828501611e61565b91505092915050565b611ea981611e42565b82525050565b5f602082019050611ec25f830184611ea0565b92915050565b5f5f60408385031215611ede57611edd611c66565b5b5f611eeb85828601611e61565b9250506020611efc85828601611d67565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112611f2757611f26611f06565b5b8235905067ffffffffffffffff811115611f4457611f43611f0a565b5b602083019150836020820283011115611f6057611f5f611f0e565b5b9250929050565b611f7081611cee565b8114611f7a575f5ffd5b50565b5f81359050611f8b81611f67565b92915050565b5f5f5f60408486031215611fa857611fa7611c66565b5b5f84013567ffffffffffffffff811115611fc557611fc4611c6a565b5b611fd186828701611f12565b93509350506020611fe486828701611f7d565b9150509250925092565b611ff781611da6565b82525050565b5f6020820190506120105f830184611fee565b92915050565b5f819050919050565b5f61203961203461202f84611d21565b612016565b611d21565b9050919050565b5f61204a8261201f565b9050919050565b5f61205b82612040565b9050919050565b61206b81612051565b82525050565b5f6020820190506120845f830184612062565b92915050565b61209381611d40565b82525050565b5f6020820190506120ac5f83018461208a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600381106120f0576120ef6120b2565b5b50565b5f819050612100826120df565b919050565b5f61210f826120f3565b9050919050565b61211f81612105565b82525050565b5f6020820190506121385f830184612116565b92915050565b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6121848261213e565b810181811067ffffffffffffffff821117156121a3576121a261214e565b5b80604052505050565b5f6121b5611c5d565b90506121c1828261217b565b919050565b5f67ffffffffffffffff8211156121e0576121df61214e565b5b602082029050602081019050919050565b5f6122036121fe846121c6565b6121ac565b9050808382526020820190506020840283018581111561222657612225611f0e565b5b835b8181101561224f578061223b8882611d67565b845260208401935050602081019050612228565b5050509392505050565b5f82601f83011261226d5761226c611f06565b5b813561227d8482602086016121f1565b91505092915050565b5f6020828403121561229b5761229a611c66565b5b5f82013567ffffffffffffffff8111156122b8576122b7611c6a565b5b6122c484828501612259565b91505092915050565b5f5f604083850312156122e3576122e2611c66565b5b5f6122f085828601611dc5565b925050602061230185828601611d67565b9150509250929050565b60038110612317575f5ffd5b50565b5f813590506123288161230b565b92915050565b5f6020828403121561234357612342611c66565b5b5f6123508482850161231a565b91505092915050565b5f61236382612040565b9050919050565b61237381612359565b82525050565b5f60208201905061238c5f83018461236a565b92915050565b5f815190506123a081611daf565b92915050565b5f602082840312156123bb576123ba611c66565b5b5f6123c884828501612392565b91505092915050565b5f6060820190506123e45f83018661208a565b6123f1602083018561208a565b6123fe6040830184611fee565b949350505050565b5f8151905061241481611f67565b92915050565b5f6020828403121561242f5761242e611c66565b5b5f61243c84828501612406565b91505092915050565b5f6040820190506124585f83018561208a565b6124656020830184611fee565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6124a382611da6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124d5576124d461246c565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506125205f83018561208a565b61252d6020830184611ea0565b939250505056fea2646970667358221220adf8cab93a471b7eec22deeca9a963f85821334581de159bd8482450e88aff0c64736f6c634300081c0033000000000000000000000000ed8fcf0d78b13ce9f2476a83d51a4ce15108720a00000000000000000000000030d8a40f9a5539c1e75929bc6117e55f16c1c30300000000000000000000000042bea7cb74de14a7ffa97f874e6462377bddf2a1000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106101a7575f3560e01c80634aaca86d116100f7578063bc1b8ac011610095578063d547741f1161006f578063d547741f146104a1578063d79ff99d146104bd578063e92dc838146104d9578063f51f96dd146104f7576101a7565b8063bc1b8ac014610449578063c1419def14610467578063c3a7199914610485576101a7565b806391d14854116100d157806391d14854146103c3578063a1426944146103f3578063a217fddf1461040f578063b44c57671461042d576101a7565b80634aaca86d1461036b57806361d027b31461038957806375790fa3146103a7576101a7565b80632f2ff15d116101645780633b0d76311161013e5780633b0d7631146102e35780633ccfd60b146103135780633e413bee1461031d578063433ccc3b1461033b576101a7565b80632f2ff15d1461028f57806336568abe146102ab57806338e50594146102c7576101a7565b806301ffc9a7146101ab57806305a3b809146101db57806308bfd2371461020b5780631919fed714610227578063248a9ca3146102435780632bc83d8014610273575b5f5ffd5b6101c560048036038101906101c09190611cc3565b610515565b6040516101d29190611d08565b60405180910390f35b6101f560048036038101906101f09190611d7b565b61058e565b6040516102029190611d08565b60405180910390f35b61022560048036038101906102209190611dd9565b6105ab565b005b610241600480360381019061023c9190611e17565b610a43565b005b61025d60048036038101906102589190611e75565b610a5a565b60405161026a9190611eaf565b60405180910390f35b61028d60048036038101906102889190611dd9565b610a76565b005b6102a960048036038101906102a49190611ec8565b610e57565b005b6102c560048036038101906102c09190611ec8565b610e79565b005b6102e160048036038101906102dc9190611f91565b610ef4565b005b6102fd60048036038101906102f89190611d7b565b610f9f565b60405161030a9190611ffd565b60405180910390f35b61031b610fb4565b005b610325611161565b6040516103329190612071565b60405180910390f35b61035560048036038101906103509190611e17565b611186565b6040516103629190612099565b60405180910390f35b6103736111b6565b6040516103809190612125565b60405180910390f35b6103916111c9565b60405161039e9190612099565b60405180910390f35b6103c160048036038101906103bc9190612286565b6111ee565b005b6103dd60048036038101906103d89190611ec8565b6112e4565b6040516103ea9190611d08565b60405180910390f35b61040d600480360381019061040891906122cd565b611347565b005b6104176113a7565b6040516104249190611eaf565b60405180910390f35b6104476004803603810190610442919061232e565b6113ad565b005b61045161141e565b60405161045e9190611ffd565b60405180910390f35b61046f611423565b60405161047c9190611ffd565b60405180910390f35b61049f600480360381019061049a9190611dd9565b611428565b005b6104bb60048036038101906104b69190611ec8565b61161b565b005b6104d760048036038101906104d29190611dd9565b61163d565b005b6104e161198b565b6040516104ee9190612379565b60405180910390f35b6104ff6119b0565b60405161050c9190611ffd565b60405180910390f35b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105875750610586826119b6565b5b9050919050565b6006602052805f5260405f205f915054906101000a900460ff1681565b600160028111156105bf576105be6120b2565b5b600360149054906101000a900460ff1660028111156105e1576105e06120b2565b5b14610618576040517f1892035a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610698576040517f06fb10a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541061070f576040517fbc015c7600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8103610748576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d691906123a6565b81111561081a57806040517fed15e6cf0000000000000000000000000000000000000000000000000000000081526004016108119190611ffd565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518463ffffffff1660e01b815260040161089c939291906123d1565b6020604051808303815f875af11580156108b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108dc919061241a565b905080610915576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b8152600401610971929190612445565b5f604051808303815f87803b158015610988575f5ffd5b505af115801561099a573d5f5f3e3d5ffd5b5050505060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154809291906109eb90612499565b91905055508273ffffffffffffffffffffffffffffffffffffffff167fb450a3dd0f3423dbd491d6215e332ed30f602825f4374e6a8a88864559b17be983604051610a369190611ffd565b60405180910390a2505050565b5f5f1b610a4f81611a1f565b816004819055505050565b5f5f5f8381526020019081526020015f20600101549050919050565b5f60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b0f576040517f74455cd900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b74576040517fb1df0e0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8203610bad576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c17573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c3b91906123a6565b821115610c7f57816040517fed15e6cf000000000000000000000000000000000000000000000000000000008152600401610c769190611ffd565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518463ffffffff1660e01b8152600401610d01939291906123d1565b6020604051808303815f875af1158015610d1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d41919061241a565b905080610d7a576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1985856040518363ffffffff1660e01b8152600401610dd6929190612445565b5f604051808303815f87803b158015610ded575f5ffd5b505af1158015610dff573d5f5f3e3d5ffd5b505050508373ffffffffffffffffffffffffffffffffffffffff167f90cf5be4466297dcbd647a5d1b477eed772aa0f78579ee7b4bcd2a9fc40455bb84604051610e499190611ffd565b60405180910390a250505050565b610e6082610a5a565b610e6981611a1f565b610e738383611a33565b50505050565b610e81611b1c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ee5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610eef8282611b23565b505050565b5f5f1b610f0081611a1f565b5f5f90505b84849050811015610f98578260065f878785818110610f2757610f266124e0565b5b9050602002016020810190610f3c9190611d7b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610f05565b5050505050565b6007602052805f5260405f205f915090505481565b5f5f1b610fc081611a1f565b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161101b9190612099565b602060405180830381865afa158015611036573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105a91906123a6565b90505f81111561115d575f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016110e2929190612445565b6020604051808303815f875af11580156110fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611122919061241a565b90508061115b576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b5050565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360149054906101000a900460ff1681565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f1b6111fa81611a1f565b5f5f90505b82518110156112df575f60065f85848151811061121f5761121e6124e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60075f85848151811061128d5761128c6124e0565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080806001019150506111ff565b505050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f5f1b61135381611a1f565b8160055f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b5f5f1b81565b5f5f1b6113b981611a1f565b81600360146101000a81548160ff021916908360028111156113de576113dd6120b2565b5b02179055507f29e3771cda0e79cc74ab62545bd4e1ab6cb5c65d9352c98a088b7ad936f85124826040516114129190612125565b60405180910390a15050565b600481565b600681565b5f5f1b61143481611a1f565b5f820361146d576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fb91906123a6565b82111561153f57816040517fed15e6cf0000000000000000000000000000000000000000000000000000000081526004016115369190611ffd565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b815260040161159b929190612445565b5f604051808303815f87803b1580156115b2575f5ffd5b505af11580156115c4573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f90363c347ac279caf3ee0f1a07c9c17f19f56b1e394697a1d23b056c2c5bb36b8360405161160e9190611ffd565b60405180910390a2505050565b61162482610a5a565b61162d81611a1f565b6116378383611b23565b50505050565b6002808111156116505761164f6120b2565b5b600360149054906101000a900460ff166002811115611672576116716120b2565b5b146116a9576040517fc7d08f0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81036116e2576040517fe14aeecc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166391ba317a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561174c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177091906123a6565b8111156117b457806040517fed15e6cf0000000000000000000000000000000000000000000000000000000081526004016117ab9190611ffd565b60405180910390fd5b5f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004546040518463ffffffff1660e01b8152600401611836939291906123d1565b6020604051808303815f875af1158015611852573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611876919061241a565b9050806118af576040517fa55b288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1984846040518363ffffffff1660e01b815260040161190b929190612445565b5f604051808303815f87803b158015611922575f5ffd5b505af1158015611934573d5f5f3e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b58360405161197e9190611ffd565b60405180910390a2505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60045481565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611a3081611a2b611b1c565b611c0c565b50565b5f611a3e83836112e4565b611b125760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611aaf611b1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611b16565b5f90505b92915050565b5f33905090565b5f611b2e83836112e4565b15611c02575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611b9f611b1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611c06565b5f90505b92915050565b611c1682826112e4565b611c595780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401611c5092919061250d565b60405180910390fd5b5050565b5f604051905090565b5f5ffd5b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611ca281611c6e565b8114611cac575f5ffd5b50565b5f81359050611cbd81611c99565b92915050565b5f60208284031215611cd857611cd7611c66565b5b5f611ce584828501611caf565b91505092915050565b5f8115159050919050565b611d0281611cee565b82525050565b5f602082019050611d1b5f830184611cf9565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611d4a82611d21565b9050919050565b611d5a81611d40565b8114611d64575f5ffd5b50565b5f81359050611d7581611d51565b92915050565b5f60208284031215611d9057611d8f611c66565b5b5f611d9d84828501611d67565b91505092915050565b5f819050919050565b611db881611da6565b8114611dc2575f5ffd5b50565b5f81359050611dd381611daf565b92915050565b5f5f60408385031215611def57611dee611c66565b5b5f611dfc85828601611d67565b9250506020611e0d85828601611dc5565b9150509250929050565b5f60208284031215611e2c57611e2b611c66565b5b5f611e3984828501611dc5565b91505092915050565b5f819050919050565b611e5481611e42565b8114611e5e575f5ffd5b50565b5f81359050611e6f81611e4b565b92915050565b5f60208284031215611e8a57611e89611c66565b5b5f611e9784828501611e61565b91505092915050565b611ea981611e42565b82525050565b5f602082019050611ec25f830184611ea0565b92915050565b5f5f60408385031215611ede57611edd611c66565b5b5f611eeb85828601611e61565b9250506020611efc85828601611d67565b9150509250929050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112611f2757611f26611f06565b5b8235905067ffffffffffffffff811115611f4457611f43611f0a565b5b602083019150836020820283011115611f6057611f5f611f0e565b5b9250929050565b611f7081611cee565b8114611f7a575f5ffd5b50565b5f81359050611f8b81611f67565b92915050565b5f5f5f60408486031215611fa857611fa7611c66565b5b5f84013567ffffffffffffffff811115611fc557611fc4611c6a565b5b611fd186828701611f12565b93509350506020611fe486828701611f7d565b9150509250925092565b611ff781611da6565b82525050565b5f6020820190506120105f830184611fee565b92915050565b5f819050919050565b5f61203961203461202f84611d21565b612016565b611d21565b9050919050565b5f61204a8261201f565b9050919050565b5f61205b82612040565b9050919050565b61206b81612051565b82525050565b5f6020820190506120845f830184612062565b92915050565b61209381611d40565b82525050565b5f6020820190506120ac5f83018461208a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600381106120f0576120ef6120b2565b5b50565b5f819050612100826120df565b919050565b5f61210f826120f3565b9050919050565b61211f81612105565b82525050565b5f6020820190506121385f830184612116565b92915050565b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6121848261213e565b810181811067ffffffffffffffff821117156121a3576121a261214e565b5b80604052505050565b5f6121b5611c5d565b90506121c1828261217b565b919050565b5f67ffffffffffffffff8211156121e0576121df61214e565b5b602082029050602081019050919050565b5f6122036121fe846121c6565b6121ac565b9050808382526020820190506020840283018581111561222657612225611f0e565b5b835b8181101561224f578061223b8882611d67565b845260208401935050602081019050612228565b5050509392505050565b5f82601f83011261226d5761226c611f06565b5b813561227d8482602086016121f1565b91505092915050565b5f6020828403121561229b5761229a611c66565b5b5f82013567ffffffffffffffff8111156122b8576122b7611c6a565b5b6122c484828501612259565b91505092915050565b5f5f604083850312156122e3576122e2611c66565b5b5f6122f085828601611dc5565b925050602061230185828601611d67565b9150509250929050565b60038110612317575f5ffd5b50565b5f813590506123288161230b565b92915050565b5f6020828403121561234357612342611c66565b5b5f6123508482850161231a565b91505092915050565b5f61236382612040565b9050919050565b61237381612359565b82525050565b5f60208201905061238c5f83018461236a565b92915050565b5f815190506123a081611daf565b92915050565b5f602082840312156123bb576123ba611c66565b5b5f6123c884828501612392565b91505092915050565b5f6060820190506123e45f83018661208a565b6123f1602083018561208a565b6123fe6040830184611fee565b949350505050565b5f8151905061241481611f67565b92915050565b5f6020828403121561242f5761242e611c66565b5b5f61243c84828501612406565b91505092915050565b5f6040820190506124585f83018561208a565b6124656020830184611fee565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6124a382611da6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124d5576124d461246c565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6040820190506125205f83018561208a565b61252d6020830184611ea0565b939250505056fea2646970667358221220adf8cab93a471b7eec22deeca9a963f85821334581de159bd8482450e88aff0c64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000ed8fcf0d78b13ce9f2476a83d51a4ce15108720a00000000000000000000000030d8a40f9a5539c1e75929bc6117e55f16c1c30300000000000000000000000042bea7cb74de14a7ffa97f874e6462377bddf2a1000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
-----Decoded View---------------
Arg [0] : _RGBStudies (address): 0xeD8fcf0d78b13Ce9f2476A83D51a4Ce15108720a
Arg [1] : _defaultAdmin (address): 0x30D8A40f9A5539C1e75929BC6117e55F16c1C303
Arg [2] : _treasury (address): 0x42Bea7cb74De14A7FFA97F874E6462377bDdF2a1
Arg [3] : _usdc (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000ed8fcf0d78b13ce9f2476a83d51a4ce15108720a
Arg [1] : 00000000000000000000000030d8a40f9a5539c1e75929bc6117e55f16c1c303
Arg [2] : 00000000000000000000000042bea7cb74de14a7ffa97f874e6462377bddf2a1
Arg [3] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.