More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 421 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Sale | 21464141 | 2 hrs ago | IN | 0.005 ETH | 0.0020672 | ||||
Batch Sale | 21463763 | 3 hrs ago | IN | 0.005 ETH | 0.00071885 | ||||
Batch Sale | 21463588 | 4 hrs ago | IN | 0.005 ETH | 0.00152611 | ||||
Batch Sale | 21463243 | 5 hrs ago | IN | 0.005 ETH | 0.00110882 | ||||
Batch Sale | 21463169 | 5 hrs ago | IN | 0.005 ETH | 0.00627796 | ||||
Batch Sale | 21462749 | 6 hrs ago | IN | 0.005 ETH | 0.00103438 | ||||
Batch Sale | 21462711 | 6 hrs ago | IN | 0.005 ETH | 0.00118868 | ||||
Batch Sale | 21462634 | 7 hrs ago | IN | 0.005 ETH | 0.00436211 | ||||
Batch Sale | 21462171 | 8 hrs ago | IN | 0.005 ETH | 0.00272831 | ||||
Batch Sale | 21462162 | 8 hrs ago | IN | 0.005 ETH | 0.00241556 | ||||
Batch Sale | 21462091 | 9 hrs ago | IN | 0.005 ETH | 0.00112121 | ||||
Batch Sale | 21462054 | 9 hrs ago | IN | 0.005 ETH | 0.00187948 | ||||
Batch Sale | 21462038 | 9 hrs ago | IN | 0.005 ETH | 0.00431775 | ||||
Batch Sale | 21462021 | 9 hrs ago | IN | 0.005 ETH | 0.02532529 | ||||
Batch Sale | 21461985 | 9 hrs ago | IN | 0.005 ETH | 0.00134385 | ||||
Batch Sale | 21461343 | 11 hrs ago | IN | 0.005 ETH | 0.00082414 | ||||
Batch Sale | 21461235 | 11 hrs ago | IN | 0.005 ETH | 0.00598666 | ||||
Batch Sale | 21460768 | 13 hrs ago | IN | 0.005 ETH | 0.00238976 | ||||
Batch Sale | 21460472 | 14 hrs ago | IN | 0.005 ETH | 0.0024958 | ||||
Batch Sale | 21460457 | 14 hrs ago | IN | 0.005 ETH | 0.00214139 | ||||
Batch Sale | 21460449 | 14 hrs ago | IN | 0.005 ETH | 0.00115252 | ||||
Batch Sale | 21460439 | 14 hrs ago | IN | 0.005 ETH | 0.00158784 | ||||
Batch Sale | 21460421 | 14 hrs ago | IN | 0.005 ETH | 0.00155168 | ||||
Batch Sale | 21460342 | 14 hrs ago | IN | 0.005 ETH | 0.00198946 | ||||
Batch Sale | 21460254 | 15 hrs ago | IN | 0.005 ETH | 0.00167122 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21464141 | 2 hrs ago | 0.00499999 ETH | ||||
21464141 | 2 hrs ago | 0 ETH | ||||
21463763 | 3 hrs ago | 0.00499999 ETH | ||||
21463763 | 3 hrs ago | 0 ETH | ||||
21463588 | 4 hrs ago | 0.00499999 ETH | ||||
21463588 | 4 hrs ago | 0 ETH | ||||
21463243 | 5 hrs ago | 0.00499999 ETH | ||||
21463243 | 5 hrs ago | 0 ETH | ||||
21463169 | 5 hrs ago | 0.00499997 ETH | ||||
21463169 | 5 hrs ago | 0.00000003 ETH | ||||
21462749 | 6 hrs ago | 0.00499999 ETH | ||||
21462749 | 6 hrs ago | 0 ETH | ||||
21462711 | 6 hrs ago | 0.00499999 ETH | ||||
21462711 | 6 hrs ago | 0 ETH | ||||
21462634 | 7 hrs ago | 0.00499998 ETH | ||||
21462634 | 7 hrs ago | 0.00000001 ETH | ||||
21462171 | 8 hrs ago | 0.00499997 ETH | ||||
21462171 | 8 hrs ago | 0.00000002 ETH | ||||
21462162 | 8 hrs ago | 0.00499998 ETH | ||||
21462162 | 8 hrs ago | 0.00000002 ETH | ||||
21462091 | 9 hrs ago | 0.00499999 ETH | ||||
21462091 | 9 hrs ago | 0 ETH | ||||
21462054 | 9 hrs ago | 0.00499998 ETH | ||||
21462054 | 9 hrs ago | 0.00000001 ETH | ||||
21462038 | 9 hrs ago | 0.00499997 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Harvest
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 100000 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.27; // _.-^-._ .--. // .-' _ '-. |__| // / |_| \| | // / \ | // /| _____ |\ | // | |==|==| | | // |---|---|---|---|---| |--|--| | | // |---|---|---|---|---| |==|==| | | // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // ____________ Harvest.art v4 _____________ import "./IHarvest.sol"; import "solady/auth/Ownable.sol"; import "solady/utils/ReentrancyGuard.sol"; contract Harvest is IHarvest, Ownable, ReentrancyGuard { IBidTicket public bidTicket; address public theBarn; address public theFarmer; uint256 public salePrice = 1 gwei; uint256 public serviceFee = 0.001 ether; uint256 public maxTokensPerTx = 500; uint256 public bidTicketTokenId = 1; uint256 public bidTicketMultiplier = 1; constructor( address owner_, address theBarn_, address theFarmer_, address bidTicket_ ) { _initializeOwner(owner_); theBarn = theBarn_; theFarmer = theFarmer_; bidTicket = IBidTicket(bidTicket_); } /** * batchSale - Sell tokens from one or more contracts in a single transaction * * @param types The types of tokens to transfer. * @param contracts The addresses of the token contracts. * @param tokenIds The IDs of the tokens to transfer. * @param counts The counts of the tokens to transfer. * * Protip: for repeated contracts, use address(0) to save a little gas. */ function batchSale( TokenType[] calldata types, address[] calldata contracts, uint256[] calldata tokenIds, uint256[] calldata counts, bool skipBidTicket ) external payable nonReentrant { uint256 totalTokens = types.length; uint256 totalSalePrice = salePrice * totalTokens; address currentContract; TokenType currentType; require(totalTokens > 0 && totalTokens == contracts.length && totalTokens == tokenIds.length && totalTokens == counts.length, InvalidParamsLength()); require(contracts[0] != address(0), InvalidTokenContract()); require(totalTokens <= maxTokensPerTx, MaxTokensPerTxReached()); require(msg.value >= serviceFee, InvalidServiceFee()); emit Sale(msg.sender, totalSalePrice); if (!skipBidTicket) { bidTicket.mint(msg.sender, bidTicketTokenId, totalTokens * bidTicketMultiplier); } for (uint256 i; i < totalTokens; ++i) { currentType = types[i]; if (contracts[i] != address(0)) { currentContract = contracts[i]; } if (currentType == TokenType.ERC20) { IERC20(currentContract).transferFrom(msg.sender, theBarn, counts[i]); } else if (currentType == TokenType.ERC721) { IERC721(currentContract).transferFrom(msg.sender, theBarn, tokenIds[i]); } else if (currentType == TokenType.ERC1155) { IERC1155(currentContract).safeTransferFrom(msg.sender, theBarn, tokenIds[i], counts[i], ""); } else { revert InvalidTokenType(); } } (bool paymentSuccess,) = payable(msg.sender).call{value: totalSalePrice}(""); require(paymentSuccess, TransferFailed()); if (msg.value > totalSalePrice) { (bool farmerSuccess,) = payable(theFarmer).call{value: msg.value - totalSalePrice}(""); require(farmerSuccess, TransferFailed()); } } /** * Owner-only functions */ function setBarn(address theBarn_) external onlyOwner { theBarn = theBarn_; } function setFarmer(address theFarmer_) external onlyOwner { theFarmer = theFarmer_; } function setBidTicketAddress(address bidTicket_) external onlyOwner { bidTicket = IBidTicket(bidTicket_); } function setBidTicketMultiplier(uint256 bidTicketMultiplier_) external onlyOwner { bidTicketMultiplier = bidTicketMultiplier_; } function setBidTicketTokenId(uint256 bidTicketTokenId_) external onlyOwner { bidTicketTokenId = bidTicketTokenId_; } function setMaxTokensPerTx(uint256 maxTokensPerTx_) external onlyOwner { maxTokensPerTx = maxTokensPerTx_; } function setSalePrice(uint256 salePrice_) external onlyOwner { salePrice = salePrice_; } function setServiceFee(uint256 serviceFee_) external onlyOwner { serviceFee = serviceFee_; } /** * Emergency withdrawal functions just in case apes don't read */ function withdrawBalance() external onlyOwner { (bool success,) = payable(msg.sender).call{value: address(this).balance}(""); require(success, TransferFailed()); } function withdrawERC20(address tokenAddress, uint256 amount) external onlyOwner { IERC20(tokenAddress).transfer(msg.sender, amount); } function withdrawERC721(address tokenAddress, uint256 tokenId, address to) external onlyOwner { IERC721(tokenAddress).safeTransferFrom(address(this), to, tokenId); } receive() external payable {} fallback() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity 0.8.27; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "./IBidTicket.sol"; enum TokenType { ERC20, ERC721, ERC1155 } interface IHarvest { event Sale(address indexed user, uint256 indexed salePrice); error DuplicateToken(); error InsufficientBalance(); error InvalidParamsLength(); error InvalidServiceFee(); error InvalidTokenContract(); error InvalidTokenContractLength(); error InvalidTokenType(); error MaxTokensPerTxReached(); error TransferFailed(); error SalePriceTooHigh(); error ServiceFeeTooLow(); function batchSale( TokenType[] calldata types, address[] calldata contracts, uint256[] calldata tokenIds, uint256[] calldata counts, bool skipBidTicket ) external payable; function bidTicket() external view returns (IBidTicket); function theBarn() external view returns (address); function theFarmer() external view returns (address); function salePrice() external view returns (uint256); function serviceFee() external view returns (uint256); function maxTokensPerTx() external view returns (uint256); function bidTicketTokenId() external view returns (uint256); function bidTicketMultiplier() external view returns (uint256); function setBarn(address _theBarn) external; function setBidTicketAddress(address bidTicket_) external; function setBidTicketMultiplier(uint256 multiplier) external; function setBidTicketTokenId(uint256 bidTicketTokenId_) external; function setFarmer(address _theFarmer) external; function setMaxTokensPerTx(uint256 _maxTokensPerTx) external; function setSalePrice(uint256 _price) external; function setServiceFee(uint256 _serviceFee) external; function withdrawBalance() external; function withdrawERC20(address tokenAddress, uint256 amount) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Simple single owner authorization mixin. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol) /// /// @dev Note: /// This implementation does NOT auto-initialize the owner to `msg.sender`. /// You MUST call the `_initializeOwner` in the constructor / initializer. /// /// While the ownable portion follows /// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility, /// the nomenclature for the 2-step ownership handover may be unique to this codebase. abstract contract Ownable { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CUSTOM ERRORS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The caller is not authorized to call the function. error Unauthorized(); /// @dev The `newOwner` cannot be the zero address. error NewOwnerIsZeroAddress(); /// @dev The `pendingOwner` does not have a valid handover request. error NoHandoverRequest(); /// @dev Cannot double-initialize. error AlreadyInitialized(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* EVENTS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The ownership is transferred from `oldOwner` to `newOwner`. /// This event is intentionally kept the same as OpenZeppelin's Ownable to be /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), /// despite it not being as lightweight as a single argument event. event OwnershipTransferred(address indexed oldOwner, address indexed newOwner); /// @dev An ownership handover to `pendingOwner` has been requested. event OwnershipHandoverRequested(address indexed pendingOwner); /// @dev The ownership handover to `pendingOwner` has been canceled. event OwnershipHandoverCanceled(address indexed pendingOwner); /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`. uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE = 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0; /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE = 0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d; /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE = 0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* STORAGE */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The owner slot is given by: /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`. /// It is intentionally chosen to be a high value /// to avoid collision with lower slots. /// The choice of manual storage layout is to enable compatibility /// with both regular and upgradeable contracts. bytes32 internal constant _OWNER_SLOT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927; /// The ownership handover slot of `newOwner` is given by: /// ``` /// mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED)) /// let handoverSlot := keccak256(0x00, 0x20) /// ``` /// It stores the expiry timestamp of the two-step ownership handover. uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* INTERNAL FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Override to return true to make `_initializeOwner` prevent double-initialization. function _guardInitializeOwner() internal pure virtual returns (bool guard) {} /// @dev Initializes the owner directly without authorization guard. /// This function must be called upon initialization, /// regardless of whether the contract is upgradeable or not. /// This is to enable generalization to both regular and upgradeable contracts, /// and to save gas in case the initial owner is not the caller. /// For performance reasons, this function will not check if there /// is an existing owner. function _initializeOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT if sload(ownerSlot) { mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`. revert(0x1c, 0x04) } // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } else { /// @solidity memory-safe-assembly assembly { // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(_OWNER_SLOT, newOwner) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } } /// @dev Sets the owner directly without authorization guard. function _setOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) } } else { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, newOwner) } } } /// @dev Throws if the sender is not the owner. function _checkOwner() internal view virtual { /// @solidity memory-safe-assembly assembly { // If the caller is not the stored owner, revert. if iszero(eq(caller(), sload(_OWNER_SLOT))) { mstore(0x00, 0x82b42900) // `Unauthorized()`. revert(0x1c, 0x04) } } } /// @dev Returns how long a two-step ownership handover is valid for in seconds. /// Override to return a different value if needed. /// Made internal to conserve bytecode. Wrap it in a public function if needed. function _ownershipHandoverValidFor() internal view virtual returns (uint64) { return 48 * 3600; } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC UPDATE FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Allows the owner to transfer the ownership to `newOwner`. function transferOwnership(address newOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { if iszero(shl(96, newOwner)) { mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`. revert(0x1c, 0x04) } } _setOwner(newOwner); } /// @dev Allows the owner to renounce their ownership. function renounceOwnership() public payable virtual onlyOwner { _setOwner(address(0)); } /// @dev Request a two-step ownership handover to the caller. /// The request will automatically expire in 48 hours (172800 seconds) by default. function requestOwnershipHandover() public payable virtual { unchecked { uint256 expires = block.timestamp + _ownershipHandoverValidFor(); /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to `expires`. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), expires) // Emit the {OwnershipHandoverRequested} event. log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller()) } } } /// @dev Cancels the two-step ownership handover to the caller, if any. function cancelOwnershipHandover() public payable virtual { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), 0) // Emit the {OwnershipHandoverCanceled} event. log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller()) } } /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`. /// Reverts if there is no existing ownership handover requested by `pendingOwner`. function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) let handoverSlot := keccak256(0x0c, 0x20) // If the handover does not exist, or has expired. if gt(timestamp(), sload(handoverSlot)) { mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`. revert(0x1c, 0x04) } // Set the handover slot to 0. sstore(handoverSlot, 0) } _setOwner(pendingOwner); } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC READ FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Returns the owner of the contract. function owner() public view virtual returns (address result) { /// @solidity memory-safe-assembly assembly { result := sload(_OWNER_SLOT) } } /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`. function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { // Compute the handover slot. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) // Load the handover slot. result := sload(keccak256(0x0c, 0x20)) } } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* MODIFIERS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Marks a function as only callable by the owner. modifier onlyOwner() virtual { _checkOwner(); _; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Reentrancy guard mixin. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/utils/ReentrancyGuard.sol) abstract contract ReentrancyGuard { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CUSTOM ERRORS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Unauthorized reentrant call. error Reentrancy(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* STORAGE */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Equivalent to: `uint72(bytes9(keccak256("_REENTRANCY_GUARD_SLOT")))`. /// 9 bytes is large enough to avoid collisions with lower slots, /// but not too large to result in excessive bytecode bloat. uint256 private constant _REENTRANCY_GUARD_SLOT = 0x929eee149b4bd21268; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* REENTRANCY GUARD */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Guards a function from reentrancy. modifier nonReentrant() virtual { /// @solidity memory-safe-assembly assembly { if eq(sload(_REENTRANCY_GUARD_SLOT), address()) { mstore(0x00, 0xab143c06) // `Reentrancy()`. revert(0x1c, 0x04) } sstore(_REENTRANCY_GUARD_SLOT, address()) } _; /// @solidity memory-safe-assembly assembly { sstore(_REENTRANCY_GUARD_SLOT, codesize()) } } /// @dev Guards a view function from read-only reentrancy. modifier nonReadReentrant() virtual { /// @solidity memory-safe-assembly assembly { if eq(sload(_REENTRANCY_GUARD_SLOT), address()) { mstore(0x00, 0xab143c06) // `Reentrancy()`. revert(0x1c, 0x04) } } _; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.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 // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.20; import {IERC165} from "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC-1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[ERC]. */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` amount of tokens of type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the value of tokens of token type `id` owned by `account`. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the zero address. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers a `value` amount of tokens of type `id` from `from` to `to`. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155Received} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `value` amount. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * WARNING: This function can potentially allow a reentrancy attack when transferring tokens * to an untrusted contract, when invoking {onERC1155BatchReceived} on the receiver. * Ensure to follow the checks-effects-interactions pattern and consider employing * reentrancy guards when interacting with untrusted contracts. * * Emits either a {TransferSingle} or a {TransferBatch} event, depending on the length of the array arguments. * * Requirements: * * - `ids` and `values` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT pragma solidity 0.8.27; import "ERC1155P/contracts/IERC1155P.sol"; interface IBidTicket is IERC1155P { function setURI(uint256 tokenId, string calldata tokenURI) external; function mint(address to, uint256 id, uint256 amount) external; function mintBatch(address to, uint256[] calldata ids, uint256[] calldata amounts) external; function burn(address from, uint256 id, uint256 amount) external; function burnBatch(address from, uint256[] calldata ids, uint256[] calldata amounts) external; function setHarvestContract(address harvestContract_) external; function setAuctionsContract(address auctionsContract_) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.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); }
// SPDX-License-Identifier: MIT // ERC721P Contracts v1.1 pragma solidity ^0.8.20; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155P { /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Arrays cannot be different lengths. */ error ArrayLengthMismatch(); /** * Cannot burn from the zero address. */ error BurnFromZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The quantity of tokens being burned is greater than account balance. */ error BurnExceedsBalance(); /** * The quantity of tokens being transferred is greater than account balance. */ error TransferExceedsBalance(); /** * The resulting token balance exceeds the maximum storable by ERC1155P */ error ExceedsMaximumBalance(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * Cannot safely transfer to a contract that does not implement the * ERC1155Receiver interface. */ error TransferToNonERC1155ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * Exceeds max token ID */ error ExceedsMaximumTokenId(); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "ERC1155P/=lib/ERC1155P/", "solady/=lib/solady/src/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 100000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "cancun", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"theBarn_","type":"address"},{"internalType":"address","name":"theFarmer_","type":"address"},{"internalType":"address","name":"bidTicket_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"DuplicateToken","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidParamsLength","type":"error"},{"inputs":[],"name":"InvalidServiceFee","type":"error"},{"inputs":[],"name":"InvalidTokenContract","type":"error"},{"inputs":[],"name":"InvalidTokenContractLength","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[],"name":"MaxTokensPerTxReached","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Reentrancy","type":"error"},{"inputs":[],"name":"SalePriceTooHigh","type":"error"},{"inputs":[],"name":"ServiceFeeTooLow","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"Sale","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"enum TokenType[]","name":"types","type":"uint8[]"},{"internalType":"address[]","name":"contracts","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"counts","type":"uint256[]"},{"internalType":"bool","name":"skipBidTicket","type":"bool"}],"name":"batchSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"bidTicket","outputs":[{"internalType":"contract IBidTicket","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidTicketMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidTicketTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"maxTokensPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"salePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"serviceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"theBarn_","type":"address"}],"name":"setBarn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bidTicket_","type":"address"}],"name":"setBidTicketAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bidTicketMultiplier_","type":"uint256"}],"name":"setBidTicketMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bidTicketTokenId_","type":"uint256"}],"name":"setBidTicketTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"theFarmer_","type":"address"}],"name":"setFarmer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTokensPerTx_","type":"uint256"}],"name":"setMaxTokensPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"salePrice_","type":"uint256"}],"name":"setSalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"serviceFee_","type":"uint256"}],"name":"setServiceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"theBarn","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"theFarmer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60803461011457601f61168b38819003918201601f19168301916001600160401b0383118484101761011857808492608094604052833981010312610114576100478161012c565b906100546020820161012c565b61006c60606100656040850161012c565b930161012c565b633b9aca0060035566038d7ea4c680006004556101f4600555600160068190556007556001600160a01b03909316638b78c6d8198190555f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600180546001600160a01b03199081166001600160a01b0393841617909155600280548216938316939093179092555f8054909216921691909117905560405161154a90816101418239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101145756fe6080806040526004361015610011575b005b5f905f3560e01c9081630b45c68b1461123a575080631919fed7146111fb57806325692962146111945780633b342a8514611112578063481eb12b146110d35780634da2bda11461108257806354d1f13d1461102057806358da22dc14610fe15780635cdf76f814610fa25780635e307a4814610f675780635fd8c71014610ef1578063715018a614610e545780637b9f76b514610d4b57806386898b0f14610d0f5780638abdf5aa14610cd35780638da5cb5b14610c6257806394bc8be61461054657806395723b991461050a578063a1db97821461042f578063b18786f1146103dd578063b9bed05e1461039c578063e2ed781c1461031a578063e5f96b741461029a578063f04e283e1461022e578063f2fde38b146101d1578063f51f96dd146101955763fee81cf40361000f57346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610179611287565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600354604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610204611287565b61020c61145c565b8060601b156102215761021e90611493565b80f35b637448fbae82526004601cfd5b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610261611287565b61026961145c565b63389a75e1600c528082526020600c208054421161028d57908261021e9255611493565b636f5e881883526004601cfd5b50346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff6102e7611287565b6102ef61145c565b167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815580f35b50346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff610367611287565b61036f61145c565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025580f35b50346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576103d461145c565b60043560055580f35b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925780602073ffffffffffffffffffffffffffffffffffffffff6044610481611287565b61048961145c565b60405194859384927fa9059cbb0000000000000000000000000000000000000000000000000000000084523360048501526024356024850152165af180156104ff576104d3575080f35b6104f49060203d6020116104f8575b6104ec81836112db565b810190611444565b5080f35b503d6104e2565b6040513d84823e3d90fd5b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600654604051908152f35b5060a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff8111610c5e576105919036906004016112aa565b9060243567ffffffffffffffff811161099d576105b29036906004016112aa565b9060443567ffffffffffffffff8111610b61576105d39036906004016112aa565b909160643567ffffffffffffffff8111610a72576105f59036906004016112aa565b909360843593841594851503610c5a573068929eee149b4bd212685414610c4d573068929eee149b4bd212685561062e896003546113a6565b988a9581151580610c44575b80610c3b575b80610c32575b15610c0a578815610bdd5773ffffffffffffffffffffffffffffffffffffffff61066f87611423565b1615610bb5576005548211610b8d576004543410610b6557908b92918b337fc6851889326b4ff916523ef06f539b4cf0b81d78fc6e0f97c30e6223d18319908680a3610ab8575b825b8181106107ac57838c8180808084335af16106d1611349565b5015610784578034116106ef575b503868929eee149b4bd212685580f35b73ffffffffffffffffffffffffffffffffffffffff6002541690340390348211610757578280809381935af1610723611349565b501561072f57816106df565b807f90b8ec180000000000000000000000000000000000000000000000000000000060049252fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004827f90b8ec18000000000000000000000000000000000000000000000000000000008152fd5b6107b781838d6113e6565b356003811015610ab45773ffffffffffffffffffffffffffffffffffffffff6107e96107e4848e8c6113e6565b611423565b16610a9e575b806108c757508060208a8a610821610882958b73ffffffffffffffffffffffffffffffffffffffff60015416946113e6565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529035604482015294859283918a919083906064820190565b0393165af19182156108bc5760019261089e575b505b016106b8565b6108b59060203d81116104f8576104ec81836112db565b505f610896565b6040513d87823e3d90fd5b600181036109a5575073ffffffffffffffffffffffffffffffffffffffff881673ffffffffffffffffffffffffffffffffffffffff6001541661090b8386896113e6565b35823b156109a1576040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448201529085908290606490829084905af19081156108bc578591610988575b5050600190610898565b81610992916112db565b61099d57835f61097e565b8380fd5b8680fd5b9293509091600203610a7657908b929173ffffffffffffffffffffffffffffffffffffffff881673ffffffffffffffffffffffffffffffffffffffff600154168a6109fd848a6109f6828a8d6113e6565b35936113e6565b3592803b15610a725787928360c49260405196879586947ff242432a00000000000000000000000000000000000000000000000000000000865233600487015260248601526044850152606484015260a060848401528160a48401525af19081156108bc578591610988575050600190610898565b8780fd5b60048c7fa1e9dd9d000000000000000000000000000000000000000000000000000000008152fd5b9750610aae6107e4828c8a6113e6565b976107ef565b8480fd5b73ffffffffffffffffffffffffffffffffffffffff835416600654610adf600754846113a6565b823b15610b6157606486928360405195869485937f156e29f6000000000000000000000000000000000000000000000000000000008552336004860152602485015260448401525af1908115610b56578491610b3d575b50506106b6565b81610b47916112db565b610b5257825f610b36565b8280fd5b6040513d86823e3d90fd5b8580fd5b60048c7fab44c461000000000000000000000000000000000000000000000000000000008152fd5b60048c7fbb8eb9c4000000000000000000000000000000000000000000000000000000008152fd5b60048c7f29bdfb34000000000000000000000000000000000000000000000000000000008152fd5b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60048c7ff950c6c4000000000000000000000000000000000000000000000000000000008152fd5b50848214610646565b50828214610640565b5088821461063a565b63ab143c068a526004601cfd5b8980fd5b5080fd5b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600454604051908152f35b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600754604051908152f35b5034610e505760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610d83611287565b6044359073ffffffffffffffffffffffffffffffffffffffff82168203610e505773ffffffffffffffffffffffffffffffffffffffff90610dc261145c565b16803b15610e50576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff929092166024808401919091523560448301525f908290606490829084905af18015610e4557610e39575080f35b61000f91505f906112db565b6040513d5f823e3d90fd5b5f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610e8561145c565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755005b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610f2761145c565b5f80808047335af1610f37611349565b5015610f3f57005b7f90b8ec18000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e50576020600554604051908152f35b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610fd961145c565b600480359055005b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505761101861145c565b600435600755005b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505761110a61145c565b600435600655005b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505773ffffffffffffffffffffffffffffffffffffffff61115e611287565b61116661145c565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505761123261145c565b600435600355005b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610e5057565b9181601f84011215610e505782359167ffffffffffffffff8311610e50576020808501948460051b010111610e5057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761131c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3d156113a1573d9067ffffffffffffffff821161131c576040519161139660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846112db565b82523d5f602084013e565b606090565b818102929181159184041417156113b957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908110156113f65760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3573ffffffffffffffffffffffffffffffffffffffff81168103610e505790565b90816020910312610e5057518015158103610e505790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754330361148657565b6382b429005f526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275556fea2646970667358221220f599e037482efa8e05f6b1069423dc8d45178f1594c1f26d5f299ca0c4ebfac764736f6c634300081b003300000000000000000000000069b1a9f37ffee30a992388a46883c6880527b818000000000000000000000000996e1d4ce3e1e558889832832004b2466153adbe000000000000000000000000d3f9340cbc7c1109fc15aa8687bfb7bec06eea6c00000000000000000000000062613aa9594d0116b5ca23acd37dddac90c67e5c
Deployed Bytecode
0x6080806040526004361015610011575b005b5f905f3560e01c9081630b45c68b1461123a575080631919fed7146111fb57806325692962146111945780633b342a8514611112578063481eb12b146110d35780634da2bda11461108257806354d1f13d1461102057806358da22dc14610fe15780635cdf76f814610fa25780635e307a4814610f675780635fd8c71014610ef1578063715018a614610e545780637b9f76b514610d4b57806386898b0f14610d0f5780638abdf5aa14610cd35780638da5cb5b14610c6257806394bc8be61461054657806395723b991461050a578063a1db97821461042f578063b18786f1146103dd578063b9bed05e1461039c578063e2ed781c1461031a578063e5f96b741461029a578063f04e283e1461022e578063f2fde38b146101d1578063f51f96dd146101955763fee81cf40361000f57346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610179611287565b9063389a75e1600c5252602080600c2054604051908152f35b80fd5b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600354604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610204611287565b61020c61145c565b8060601b156102215761021e90611493565b80f35b637448fbae82526004601cfd5b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257610261611287565b61026961145c565b63389a75e1600c528082526020600c208054421161028d57908261021e9255611493565b636f5e881883526004601cfd5b50346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff6102e7611287565b6102ef61145c565b167fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815580f35b50346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925773ffffffffffffffffffffffffffffffffffffffff610367611287565b61036f61145c565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025580f35b50346101925760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576103d461145c565b60043560055580f35b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346101925760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925780602073ffffffffffffffffffffffffffffffffffffffff6044610481611287565b61048961145c565b60405194859384927fa9059cbb0000000000000000000000000000000000000000000000000000000084523360048501526024356024850152165af180156104ff576104d3575080f35b6104f49060203d6020116104f8575b6104ec81836112db565b810190611444565b5080f35b503d6104e2565b6040513d84823e3d90fd5b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600654604051908152f35b5060a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760043567ffffffffffffffff8111610c5e576105919036906004016112aa565b9060243567ffffffffffffffff811161099d576105b29036906004016112aa565b9060443567ffffffffffffffff8111610b61576105d39036906004016112aa565b909160643567ffffffffffffffff8111610a72576105f59036906004016112aa565b909360843593841594851503610c5a573068929eee149b4bd212685414610c4d573068929eee149b4bd212685561062e896003546113a6565b988a9581151580610c44575b80610c3b575b80610c32575b15610c0a578815610bdd5773ffffffffffffffffffffffffffffffffffffffff61066f87611423565b1615610bb5576005548211610b8d576004543410610b6557908b92918b337fc6851889326b4ff916523ef06f539b4cf0b81d78fc6e0f97c30e6223d18319908680a3610ab8575b825b8181106107ac57838c8180808084335af16106d1611349565b5015610784578034116106ef575b503868929eee149b4bd212685580f35b73ffffffffffffffffffffffffffffffffffffffff6002541690340390348211610757578280809381935af1610723611349565b501561072f57816106df565b807f90b8ec180000000000000000000000000000000000000000000000000000000060049252fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004827f90b8ec18000000000000000000000000000000000000000000000000000000008152fd5b6107b781838d6113e6565b356003811015610ab45773ffffffffffffffffffffffffffffffffffffffff6107e96107e4848e8c6113e6565b611423565b16610a9e575b806108c757508060208a8a610821610882958b73ffffffffffffffffffffffffffffffffffffffff60015416946113e6565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529035604482015294859283918a919083906064820190565b0393165af19182156108bc5760019261089e575b505b016106b8565b6108b59060203d81116104f8576104ec81836112db565b505f610896565b6040513d87823e3d90fd5b600181036109a5575073ffffffffffffffffffffffffffffffffffffffff881673ffffffffffffffffffffffffffffffffffffffff6001541661090b8386896113e6565b35823b156109a1576040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015260448201529085908290606490829084905af19081156108bc578591610988575b5050600190610898565b81610992916112db565b61099d57835f61097e565b8380fd5b8680fd5b9293509091600203610a7657908b929173ffffffffffffffffffffffffffffffffffffffff881673ffffffffffffffffffffffffffffffffffffffff600154168a6109fd848a6109f6828a8d6113e6565b35936113e6565b3592803b15610a725787928360c49260405196879586947ff242432a00000000000000000000000000000000000000000000000000000000865233600487015260248601526044850152606484015260a060848401528160a48401525af19081156108bc578591610988575050600190610898565b8780fd5b60048c7fa1e9dd9d000000000000000000000000000000000000000000000000000000008152fd5b9750610aae6107e4828c8a6113e6565b976107ef565b8480fd5b73ffffffffffffffffffffffffffffffffffffffff835416600654610adf600754846113a6565b823b15610b6157606486928360405195869485937f156e29f6000000000000000000000000000000000000000000000000000000008552336004860152602485015260448401525af1908115610b56578491610b3d575b50506106b6565b81610b47916112db565b610b5257825f610b36565b8280fd5b6040513d86823e3d90fd5b8580fd5b60048c7fab44c461000000000000000000000000000000000000000000000000000000008152fd5b60048c7fbb8eb9c4000000000000000000000000000000000000000000000000000000008152fd5b60048c7f29bdfb34000000000000000000000000000000000000000000000000000000008152fd5b60248c7f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b60048c7ff950c6c4000000000000000000000000000000000000000000000000000000008152fd5b50848214610646565b50828214610640565b5088821461063a565b63ab143c068a526004601cfd5b8980fd5b5080fd5b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101925760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600454604051908152f35b503461019257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610192576020600754604051908152f35b5034610e505760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610d83611287565b6044359073ffffffffffffffffffffffffffffffffffffffff82168203610e505773ffffffffffffffffffffffffffffffffffffffff90610dc261145c565b16803b15610e50576040517f42842e0e00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff929092166024808401919091523560448301525f908290606490829084905af18015610e4557610e39575080f35b61000f91505f906112db565b6040513d5f823e3d90fd5b5f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610e8561145c565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755005b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610f2761145c565b5f80808047335af1610f37611349565b5015610f3f57005b7f90b8ec18000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e50576020600554604051908152f35b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057610fd961145c565b600480359055005b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505761101861145c565b600435600755005b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e5057602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505761110a61145c565b600435600655005b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505773ffffffffffffffffffffffffffffffffffffffff61115e611287565b61116661145c565b167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b34610e505760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505761123261145c565b600435600355005b34610e50575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e505760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610e5057565b9181601f84011215610e505782359167ffffffffffffffff8311610e50576020808501948460051b010111610e5057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761131c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3d156113a1573d9067ffffffffffffffff821161131c576040519161139660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846112db565b82523d5f602084013e565b606090565b818102929181159184041417156113b957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908110156113f65760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3573ffffffffffffffffffffffffffffffffffffffff81168103610e505790565b90816020910312610e5057518015158103610e505790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392754330361148657565b6382b429005f526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275556fea2646970667358221220f599e037482efa8e05f6b1069423dc8d45178f1594c1f26d5f299ca0c4ebfac764736f6c634300081b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000069b1a9f37ffee30a992388a46883c6880527b818000000000000000000000000996e1d4ce3e1e558889832832004b2466153adbe000000000000000000000000d3f9340cbc7c1109fc15aa8687bfb7bec06eea6c00000000000000000000000062613aa9594d0116b5ca23acd37dddac90c67e5c
-----Decoded View---------------
Arg [0] : owner_ (address): 0x69B1A9f37fFEe30a992388A46883c6880527B818
Arg [1] : theBarn_ (address): 0x996e1d4ce3e1e558889832832004B2466153adbe
Arg [2] : theFarmer_ (address): 0xd3F9340Cbc7c1109fc15aa8687bFB7Bec06eeA6c
Arg [3] : bidTicket_ (address): 0x62613AA9594D0116b5CA23aCd37dDDAc90c67E5c
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000069b1a9f37ffee30a992388a46883c6880527b818
Arg [1] : 000000000000000000000000996e1d4ce3e1e558889832832004b2466153adbe
Arg [2] : 000000000000000000000000d3f9340cbc7c1109fc15aa8687bfb7bec06eea6c
Arg [3] : 00000000000000000000000062613aa9594d0116b5ca23acd37dddac90c67e5c
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.