Source Code
Latest 25 from a total of 48 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Mint Castles Tok... | 203416679 | 661 days ago | IN | 0 ETH | 0.00000265 | ||||
| Mint Castles Tok... | 202723975 | 663 days ago | IN | 0 ETH | 0.00000246 | ||||
| Mint Castles ETH | 199933954 | 671 days ago | IN | 0.05 ETH | 0.00000338 | ||||
| Mint Castles Tok... | 191659956 | 695 days ago | IN | 0 ETH | 0.00002852 | ||||
| Mint Castles Tok... | 190676035 | 698 days ago | IN | 0 ETH | 0.0000301 | ||||
| Mint Castles Tok... | 190675857 | 698 days ago | IN | 0 ETH | 0.00002975 | ||||
| Mint Castles Tok... | 189372134 | 702 days ago | IN | 0 ETH | 0.00029538 | ||||
| Mint Castles Tok... | 189348810 | 702 days ago | IN | 0 ETH | 0.00030933 | ||||
| Mint Castles Tok... | 189346076 | 702 days ago | IN | 0 ETH | 0.00020105 | ||||
| Mint Castles Tok... | 189338625 | 702 days ago | IN | 0 ETH | 0.0003429 | ||||
| Mint Castles Tok... | 189331481 | 702 days ago | IN | 0 ETH | 0.00020199 | ||||
| Mint Castles Tok... | 189267934 | 702 days ago | IN | 0 ETH | 0.0002006 | ||||
| Set Castle Price... | 189219009 | 703 days ago | IN | 0 ETH | 0.00005704 | ||||
| Mint Castles Tok... | 189218196 | 703 days ago | IN | 0 ETH | 0.00009667 | ||||
| Set Castle Price... | 189218137 | 703 days ago | IN | 0 ETH | 0.00005875 | ||||
| Mint Castles Tok... | 102510132 | 969 days ago | IN | 0 ETH | 0.00006219 | ||||
| Mint Castles Tok... | 102484061 | 969 days ago | IN | 0 ETH | 0.000063 | ||||
| Mint Castles Tok... | 102483861 | 969 days ago | IN | 0 ETH | 0.00006642 | ||||
| Mint Castles Tok... | 93695859 | 995 days ago | IN | 0 ETH | 0.00015085 | ||||
| Mint Castles Tok... | 93695115 | 995 days ago | IN | 0 ETH | 0.00015133 | ||||
| Mint Castles Tok... | 93693686 | 995 days ago | IN | 0 ETH | 0.00016253 | ||||
| Mint Castles Tok... | 92612999 | 998 days ago | IN | 0 ETH | 0.00011178 | ||||
| Mint Castles Tok... | 92464730 | 999 days ago | IN | 0 ETH | 0.00009546 | ||||
| Mint Castles Tok... | 88713901 | 1010 days ago | IN | 0 ETH | 0.00024709 | ||||
| Mint Castles ETH | 86250083 | 1017 days ago | IN | 0.05 ETH | 0.00023731 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MasterCastles
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.17;
import "./ManagerModifier.sol";
import "./nfts/interfaces/ICastlesGenOne.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
contract MasterCastles is ManagerModifier, ReentrancyGuard, IERC721Receiver {
ICastleNFT public castleContract;
using SafeMath for uint256;
// Prices store the address of the token and the price
mapping(address => uint256) public castlePrices;
uint256 public castlePriceETH;
// store token balances
mapping(address => uint256) public tokenBalances;
constructor(address _manager, address _castlesContract) ManagerModifier(_manager) {
castleContract = ICastleNFT(_castlesContract);
}
// Price definition functions
// Set castle prices
function setCastlePrices(address _token, uint256 _price) external onlyManager {
castlePrices[_token] = _price;
}
// Set price in eth
function setCastlePriceETH(uint256 _price) external onlyManager {
castlePriceETH = _price;
}
// Transfer ownership
function transferContractOwnership(address _newOwner) external onlyAdmin {
castleContract.transferOwnership(_newOwner);
}
// Castle contract functions
function mintCastlesToken(uint256[] memory _ids, address _token) external nonReentrant {
// Check that the token is defined in the prices
require(castlePrices[_token] != 0, "Invalid token prices");
// Check that the sender has enough balance of the token
require(IERC20(_token).balanceOf(msg.sender) >= castlePrices[_token].mul(_ids.length), "Not enough balance");
// Transfer the token to this contract
IERC20(_token).transferFrom(msg.sender, address(this), castlePrices[_token].mul(_ids.length));
// Increase token balances
tokenBalances[_token] = tokenBalances[_token].add(castlePrices[_token].mul(_ids.length));
_mintCastles(msg.sender, _ids);
}
// Mint castles with ETH
function mintCastlesETH(uint256[] memory _ids) external payable nonReentrant {
require(msg.value >= castlePriceETH.mul(_ids.length), "Not enough balance");
_mintCastles(msg.sender, _ids);
}
// Privileged minting functions
function privilegedMintCastles(address _to, uint256[] memory _ids) external onlyMinter nonReentrant {
_mintCastles(_to, _ids);
}
// Internal minting functions
function _mintCastles(address _to, uint256[] memory _ids) internal {
for (uint256 i = 0; i < _ids.length; i++) {
castleContract.ownerClaim(_ids[i]);
castleContract.safeTransferFrom(address(this), _to, _ids[i]);
}
}
// Function to transfer a castle to a new owner from this contract
function transferCastle(address _to, uint256 _id) external onlyManager {
castleContract.safeTransferFrom(address(this), _to, _id);
}
// Change base URI
function setBaseURICastles(string calldata _baseURI) external onlyAdmin {
castleContract.setBaseURI(_baseURI);
}
// Withdraw tokens functions
// Added to be able to receive ETH
receive() external payable {
// Do nothing or add logic as needed.
}
function ownerWithdraw() external onlyManager {
castleContract.ownerWithdraw();
payable(msg.sender).transfer(address(this).balance);
}
function withdrawTokens(
address token,
uint256 amount
)
external
onlyManager
{
IERC20(token).transfer(msg.sender, amount);
tokenBalances[token] = tokenBalances[token].sub(amount);
}
// IERC721Receiver implementation
function onERC721Received(address, address, uint256, bytes calldata) external pure override returns (bytes4) {
return this.onERC721Received.selector;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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 amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` 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 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the subtraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}pragma solidity ^0.8.17;
interface IManager {
function isAdmin(address _addr) external view returns (bool);
function isManager(address _addr, uint256 _type) external view returns (bool);
function addManager(address _addr, uint256 _type) external;
function removeManager(address _addr, uint256 _type) external;
function addAdmin(address _addr) external;
function removeAdmin(address _addr) external;
}// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.17;
import "./interfaces/ITokenManager.sol";
abstract contract ManagerModifier {
//=======================================
// Immutables
//=======================================
IManager public immutable MANAGER;
//=======================================
// Constructor
//=======================================
constructor(address _manager) {
MANAGER = IManager(_manager);
}
//=======================================
// Modifiers
//=======================================
modifier onlyAdmin() {
require(MANAGER.isAdmin(msg.sender), "Manager: Not an Admin");
_;
}
modifier onlyManager() {
require(MANAGER.isManager(msg.sender, 0), "Manager: Not manager");
_;
}
modifier onlyMinter() {
require(MANAGER.isManager(msg.sender, 1), "Manager: Not minter");
_;
}
modifier onlyTokenMinter() {
require(MANAGER.isManager(msg.sender, 2), "Manager: Not token minter");
_;
}
modifier onlyBinder() {
require(MANAGER.isManager(msg.sender, 3), "Manager: Not binder");
_;
}
modifier onlyOracle() {
require(MANAGER.isManager(msg.sender, 4), "Manager: Not oracle");
_;
}
}pragma solidity ^0.8.0;
interface ICastleNFT {
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function transferOwnership(address newOwner) external;
function setBaseURI(string calldata baseTokenURI) external;
function ownerClaim(uint256 tokenId) external;
function setPrice(uint256 newPrice) external;
function ownerWithdraw() external;
function totalSupply() external;
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_castlesContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"MANAGER","outputs":[{"internalType":"contract IManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"castleContract","outputs":[{"internalType":"contract ICastleNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"castlePriceETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"castlePrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"mintCastlesETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"address","name":"_token","type":"address"}],"name":"mintCastlesToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"ownerWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"privilegedMintCastles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURICastles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setCastlePriceETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setCastlePrices","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"transferCastle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferContractOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a060405234801561001057600080fd5b5060405161159138038061159183398101604081905261002f91610078565b6001600160a01b039182166080526001600081905580546001600160a01b031916919092161790556100ab565b80516001600160a01b038116811461007357600080fd5b919050565b6000806040838503121561008b57600080fd5b6100948361005c565b91506100a26020840161005c565b90509250929050565b6080516114936100fe600039600081816101b40152818161037d015281816104e601528181610673015281816107ac015281816108da01528181610c3601528181610d190152610dc901526114936000f3fe6080604052600436106100f75760003560e01c8063a843c51f1161008a578063d94bc0b111610059578063d94bc0b1146102d4578063e1142010146102f4578063eb83f01514610321578063fd2d4bf71461034157600080fd5b8063a843c51f14610254578063a9a60e4e14610274578063cdfcfea214610294578063d8c722a8146102b457600080fd5b80631b2df850116100c65780631b2df850146101a25780634311de8f146101ee578063523fba7f14610203578063987ff3ce1461023e57600080fd5b806306b091f914610103578063079ec6521461012557806314f6f8f814610145578063150b7a021461015857600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b5061012361011e36600461105a565b610361565b005b34801561013157600080fd5b5061012361014036600461105a565b6104ca565b610123610153366004611135565b6105e6565b34801561016457600080fd5b506101846101733660046111bb565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156101ae57600080fd5b506101d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610199565b3480156101fa57600080fd5b50610123610657565b34801561020f57600080fd5b5061023061021e36600461122a565b60046020526000908152604090205481565b604051908152602001610199565b34801561024a57600080fd5b5061023060035481565b34801561026057600080fd5b5061012361026f36600461122a565b610797565b34801561028057600080fd5b5061012361028f366004611245565b6108c5565b3480156102a057600080fd5b506101236102af366004611287565b6109c3565b3480156102c057600080fd5b506101236102cf3660046112d5565b610c1a565b3480156102e057600080fd5b506101236102ef366004611323565b610cfd565b34801561030057600080fd5b5061023061030f36600461122a565b60026020526000908152604090205481565b34801561032d57600080fd5b506001546101d6906001600160a01b031681565b34801561034d57600080fd5b5061012361035c36600461105a565b610dad565b6040516365e6a4df60e11b8152336004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cbcd49be90604401602060405180830381865afa1580156103cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f0919061133c565b6104155760405162461bcd60e51b815260040161040c90611365565b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610462573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610486919061133c565b506001600160a01b0382166000908152600460205260409020546104aa9082610e74565b6001600160a01b0390921660009081526004602052604090209190915550565b6040516365e6a4df60e11b8152336004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610559919061133c565b6105755760405162461bcd60e51b815260040161040c90611365565b600154604051632142170760e11b81523060048201526001600160a01b03848116602483015260448201849052909116906342842e0e906064015b600060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050505050565b6105ee610e89565b80516003546105fc91610ee2565b3410156106405760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015260640161040c565b61064a3382610eee565b6106546001600055565b50565b6040516365e6a4df60e11b8152336004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cbcd49be90604401602060405180830381865afa1580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e6919061133c565b6107025760405162461bcd60e51b815260040161040c90611365565b600160009054906101000a90046001600160a01b03166001600160a01b0316634311de8f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561075257600080fd5b505af1158015610766573d6000803e3d6000fd5b50506040513392504780156108fc029250906000818181858888f19350505050158015610654573d6000803e3d6000fd5b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c90602401602060405180830381865afa1580156107fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081f919061133c565b6108635760405162461bcd60e51b815260206004820152601560248201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604482015260640161040c565b60015460405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b90602401600060405180830381600087803b1580156108aa57600080fd5b505af11580156108be573d6000803e3d6000fd5b5050505050565b604051630935e01b60e21b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906324d7806c90602401602060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061133c565b6109915760405162461bcd60e51b815260206004820152601560248201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604482015260640161040c565b6001546040516355f804b360e01b81526001600160a01b03909116906355f804b3906105b09085908590600401611393565b6109cb610e89565b6001600160a01b0381166000908152600260205260408120549003610a295760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420746f6b656e2070726963657360601b604482015260640161040c565b81516001600160a01b038216600090815260026020526040902054610a4d91610ee2565b6040516370a0823160e01b81523360048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113c2565b1015610af85760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015260640161040c565b81516001600160a01b03821660008181526002602052604090205490916323b872dd9133913091610b2891610ee2565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba0919061133c565b5081516001600160a01b038216600090815260026020526040902054610be991610bca9190610ee2565b6001600160a01b03831660009081526004602052604090205490611032565b6001600160a01b038216600090815260046020526040902055610c0c3383610eee565b610c166001600055565b5050565b6040516365e6a4df60e11b8152336004820152600160248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca9919061133c565b610ceb5760405162461bcd60e51b815260206004820152601360248201527226b0b730b3b2b91d102737ba1036b4b73a32b960691b604482015260640161040c565b610cf3610e89565b610c0c8282610eee565b6040516365e6a4df60e11b8152336004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c919061133c565b610da85760405162461bcd60e51b815260040161040c90611365565b600355565b6040516365e6a4df60e11b8152336004820152600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c919061133c565b610e585760405162461bcd60e51b815260040161040c90611365565b6001600160a01b03909116600090815260026020526040902055565b6000610e8082846113f1565b90505b92915050565b600260005403610edb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161040c565b6002600055565b6000610e808284611404565b60005b815181101561102d5760015482516001600160a01b039091169063434f48c490849084908110610f2357610f2361141b565b60200260200101516040518263ffffffff1660e01b8152600401610f4991815260200190565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505060015484516001600160a01b0390911692506342842e0e915030908690869086908110610fa857610fa861141b565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561100257600080fd5b505af1158015611016573d6000803e3d6000fd5b50505050808061102590611431565b915050610ef1565b505050565b6000610e80828461144a565b80356001600160a01b038116811461105557600080fd5b919050565b6000806040838503121561106d57600080fd5b6110768361103e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126110ab57600080fd5b8135602067ffffffffffffffff808311156110c8576110c8611084565b8260051b604051601f19603f830116810181811084821117156110ed576110ed611084565b60405293845285810183019383810192508785111561110b57600080fd5b83870191505b8482101561112a57813583529183019190830190611111565b979650505050505050565b60006020828403121561114757600080fd5b813567ffffffffffffffff81111561115e57600080fd5b61116a8482850161109a565b949350505050565b60008083601f84011261118457600080fd5b50813567ffffffffffffffff81111561119c57600080fd5b6020830191508360208285010111156111b457600080fd5b9250929050565b6000806000806000608086880312156111d357600080fd5b6111dc8661103e565b94506111ea6020870161103e565b935060408601359250606086013567ffffffffffffffff81111561120d57600080fd5b61121988828901611172565b969995985093965092949392505050565b60006020828403121561123c57600080fd5b610e808261103e565b6000806020838503121561125857600080fd5b823567ffffffffffffffff81111561126f57600080fd5b61127b85828601611172565b90969095509350505050565b6000806040838503121561129a57600080fd5b823567ffffffffffffffff8111156112b157600080fd5b6112bd8582860161109a565b9250506112cc6020840161103e565b90509250929050565b600080604083850312156112e857600080fd5b6112f18361103e565b9150602083013567ffffffffffffffff81111561130d57600080fd5b6113198582860161109a565b9150509250929050565b60006020828403121561133557600080fd5b5035919050565b60006020828403121561134e57600080fd5b8151801515811461135e57600080fd5b9392505050565b60208082526014908201527326b0b730b3b2b91d102737ba1036b0b730b3b2b960611b604082015260600190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156113d457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8357610e836113db565b8082028115828204841417610e8357610e836113db565b634e487b7160e01b600052603260045260246000fd5b600060018201611443576114436113db565b5060010190565b80820180821115610e8357610e836113db56fea2646970667358221220102764e3fd60643e435d4b07cb3f3dee1bedcc2a71a691f422de43518de242d264736f6c634300081100330000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e200000000000000000000000071f5c328241fc3e03a8c79edcd510037802d369c
Deployed Bytecode
0x6080604052600436106100f75760003560e01c8063a843c51f1161008a578063d94bc0b111610059578063d94bc0b1146102d4578063e1142010146102f4578063eb83f01514610321578063fd2d4bf71461034157600080fd5b8063a843c51f14610254578063a9a60e4e14610274578063cdfcfea214610294578063d8c722a8146102b457600080fd5b80631b2df850116100c65780631b2df850146101a25780634311de8f146101ee578063523fba7f14610203578063987ff3ce1461023e57600080fd5b806306b091f914610103578063079ec6521461012557806314f6f8f814610145578063150b7a021461015857600080fd5b366100fe57005b600080fd5b34801561010f57600080fd5b5061012361011e36600461105a565b610361565b005b34801561013157600080fd5b5061012361014036600461105a565b6104ca565b610123610153366004611135565b6105e6565b34801561016457600080fd5b506101846101733660046111bb565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156101ae57600080fd5b506101d67f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e281565b6040516001600160a01b039091168152602001610199565b3480156101fa57600080fd5b50610123610657565b34801561020f57600080fd5b5061023061021e36600461122a565b60046020526000908152604090205481565b604051908152602001610199565b34801561024a57600080fd5b5061023060035481565b34801561026057600080fd5b5061012361026f36600461122a565b610797565b34801561028057600080fd5b5061012361028f366004611245565b6108c5565b3480156102a057600080fd5b506101236102af366004611287565b6109c3565b3480156102c057600080fd5b506101236102cf3660046112d5565b610c1a565b3480156102e057600080fd5b506101236102ef366004611323565b610cfd565b34801561030057600080fd5b5061023061030f36600461122a565b60026020526000908152604090205481565b34801561032d57600080fd5b506001546101d6906001600160a01b031681565b34801561034d57600080fd5b5061012361035c36600461105a565b610dad565b6040516365e6a4df60e11b8152336004820152600060248201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b03169063cbcd49be90604401602060405180830381865afa1580156103cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103f0919061133c565b6104155760405162461bcd60e51b815260040161040c90611365565b60405180910390fd5b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610462573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610486919061133c565b506001600160a01b0382166000908152600460205260409020546104aa9082610e74565b6001600160a01b0390921660009081526004602052604090209190915550565b6040516365e6a4df60e11b8152336004820152600060248201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610535573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610559919061133c565b6105755760405162461bcd60e51b815260040161040c90611365565b600154604051632142170760e11b81523060048201526001600160a01b03848116602483015260448201849052909116906342842e0e906064015b600060405180830381600087803b1580156105ca57600080fd5b505af11580156105de573d6000803e3d6000fd5b505050505050565b6105ee610e89565b80516003546105fc91610ee2565b3410156106405760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015260640161040c565b61064a3382610eee565b6106546001600055565b50565b6040516365e6a4df60e11b8152336004820152600060248201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b03169063cbcd49be90604401602060405180830381865afa1580156106c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e6919061133c565b6107025760405162461bcd60e51b815260040161040c90611365565b600160009054906101000a90046001600160a01b03166001600160a01b0316634311de8f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561075257600080fd5b505af1158015610766573d6000803e3d6000fd5b50506040513392504780156108fc029250906000818181858888f19350505050158015610654573d6000803e3d6000fd5b604051630935e01b60e21b81523360048201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b0316906324d7806c90602401602060405180830381865afa1580156107fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081f919061133c565b6108635760405162461bcd60e51b815260206004820152601560248201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604482015260640161040c565b60015460405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b90602401600060405180830381600087803b1580156108aa57600080fd5b505af11580156108be573d6000803e3d6000fd5b5050505050565b604051630935e01b60e21b81523360048201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b0316906324d7806c90602401602060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061133c565b6109915760405162461bcd60e51b815260206004820152601560248201527426b0b730b3b2b91d102737ba1030b71020b236b4b760591b604482015260640161040c565b6001546040516355f804b360e01b81526001600160a01b03909116906355f804b3906105b09085908590600401611393565b6109cb610e89565b6001600160a01b0381166000908152600260205260408120549003610a295760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420746f6b656e2070726963657360601b604482015260640161040c565b81516001600160a01b038216600090815260026020526040902054610a4d91610ee2565b6040516370a0823160e01b81523360048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab591906113c2565b1015610af85760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b604482015260640161040c565b81516001600160a01b03821660008181526002602052604090205490916323b872dd9133913091610b2891610ee2565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015610b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba0919061133c565b5081516001600160a01b038216600090815260026020526040902054610be991610bca9190610ee2565b6001600160a01b03831660009081526004602052604090205490611032565b6001600160a01b038216600090815260046020526040902055610c0c3383610eee565b610c166001600055565b5050565b6040516365e6a4df60e11b8152336004820152600160248201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca9919061133c565b610ceb5760405162461bcd60e51b815260206004820152601360248201527226b0b730b3b2b91d102737ba1036b4b73a32b960691b604482015260640161040c565b610cf3610e89565b610c0c8282610eee565b6040516365e6a4df60e11b8152336004820152600060248201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610d68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8c919061133c565b610da85760405162461bcd60e51b815260040161040c90611365565b600355565b6040516365e6a4df60e11b8152336004820152600060248201527f0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e26001600160a01b03169063cbcd49be90604401602060405180830381865afa158015610e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3c919061133c565b610e585760405162461bcd60e51b815260040161040c90611365565b6001600160a01b03909116600090815260026020526040902055565b6000610e8082846113f1565b90505b92915050565b600260005403610edb5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161040c565b6002600055565b6000610e808284611404565b60005b815181101561102d5760015482516001600160a01b039091169063434f48c490849084908110610f2357610f2361141b565b60200260200101516040518263ffffffff1660e01b8152600401610f4991815260200190565b600060405180830381600087803b158015610f6357600080fd5b505af1158015610f77573d6000803e3d6000fd5b505060015484516001600160a01b0390911692506342842e0e915030908690869086908110610fa857610fa861141b565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561100257600080fd5b505af1158015611016573d6000803e3d6000fd5b50505050808061102590611431565b915050610ef1565b505050565b6000610e80828461144a565b80356001600160a01b038116811461105557600080fd5b919050565b6000806040838503121561106d57600080fd5b6110768361103e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126110ab57600080fd5b8135602067ffffffffffffffff808311156110c8576110c8611084565b8260051b604051601f19603f830116810181811084821117156110ed576110ed611084565b60405293845285810183019383810192508785111561110b57600080fd5b83870191505b8482101561112a57813583529183019190830190611111565b979650505050505050565b60006020828403121561114757600080fd5b813567ffffffffffffffff81111561115e57600080fd5b61116a8482850161109a565b949350505050565b60008083601f84011261118457600080fd5b50813567ffffffffffffffff81111561119c57600080fd5b6020830191508360208285010111156111b457600080fd5b9250929050565b6000806000806000608086880312156111d357600080fd5b6111dc8661103e565b94506111ea6020870161103e565b935060408601359250606086013567ffffffffffffffff81111561120d57600080fd5b61121988828901611172565b969995985093965092949392505050565b60006020828403121561123c57600080fd5b610e808261103e565b6000806020838503121561125857600080fd5b823567ffffffffffffffff81111561126f57600080fd5b61127b85828601611172565b90969095509350505050565b6000806040838503121561129a57600080fd5b823567ffffffffffffffff8111156112b157600080fd5b6112bd8582860161109a565b9250506112cc6020840161103e565b90509250929050565b600080604083850312156112e857600080fd5b6112f18361103e565b9150602083013567ffffffffffffffff81111561130d57600080fd5b6113198582860161109a565b9150509250929050565b60006020828403121561133557600080fd5b5035919050565b60006020828403121561134e57600080fd5b8151801515811461135e57600080fd5b9392505050565b60208082526014908201527326b0b730b3b2b91d102737ba1036b0b730b3b2b960611b604082015260600190565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602082840312156113d457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e8357610e836113db565b8082028115828204841417610e8357610e836113db565b634e487b7160e01b600052603260045260246000fd5b600060018201611443576114436113db565b5060010190565b80820180821115610e8357610e836113db56fea2646970667358221220102764e3fd60643e435d4b07cb3f3dee1bedcc2a71a691f422de43518de242d264736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e200000000000000000000000071f5c328241fc3e03a8c79edcd510037802d369c
-----Decoded View---------------
Arg [0] : _manager (address): 0x8937fF68da18e97B58109b598a6f0EbbF82DA3E2
Arg [1] : _castlesContract (address): 0x71f5C328241fC3e03A8c79eDCD510037802D369c
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000008937ff68da18e97b58109b598a6f0ebbf82da3e2
Arg [1] : 00000000000000000000000071f5c328241fc3e03a8c79edcd510037802d369c
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.