Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
FrogFrensStakingV2
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT /** * ______ ______ _____ _ _ _ * | ___| | ___| / ___| | | | (_) * | |_ _ __ ___ __ _| |_ _ __ ___ _ __ ___ \ `--.| |_ __ _| | ___ _ __ __ _ * | _| '__/ _ \ / _` | _| '__/ _ \ '_ \/ __| `--. \ __/ _` | |/ / | '_ \ / _` | * | | | | | (_) | (_| | | | | | __/ | | \__ \/\__/ / || (_| | <| | | | | (_| | * \_| |_| \___/ \__, \_| |_| \___|_| |_|___/\____/ \__\__,_|_|\_\_|_| |_|\__, | * __/ | __/ | * |___/ |___/ */ pragma solidity 0.8.3; import "./IERC721.sol"; import "./ReentrancyGuard.sol"; import "./IERC721Receiver.sol"; import "./IERC20.sol"; contract FrogFrensStakingV2 is IERC721Receiver, ReentrancyGuard { IERC721 public _fren; IERC20 public _spawn; address public _admin; uint256 public rewardsPerSecond = 555555555555555; mapping(uint256 => uint256) private rewards; mapping(address => uint256) public rewardsClaimed; struct userStakeNft { uint256[] id; mapping(uint256 => uint256) tokenIndex; } mapping(address => userStakeNft) private userNFTs; struct Stake { uint256 startTime; address owner; } // TokenID => Stake mapping(uint256 => Stake) public receipt; event NftStaked(address indexed staker, uint256 tokenId, uint256 time); event NftUnStaked(address indexed staker, uint256 tokenId, uint256 time); event StakePayout( address indexed staker, uint256 tokenId, uint256 stakeAmount, uint256 startTime, uint256 endTime ); //event StakeRewardUpdated(uint256 traitType, uint256 rewardPerSecond); modifier onlyStaker(uint256 tokenId) { // require that msg.sender is the owner of this nft require( receipt[tokenId].owner == msg.sender, "onlyStaker: Caller is not NFT stake owner"); _; } modifier onlyAdmin() { require(msg.sender == _admin, "reclaimTokens: Caller is not the ADMIN"); _; } constructor( address admin_, IERC20 spawn_, IERC721 fren_ ) { _admin = admin_; _spawn = spawn_; _fren = fren_; } /** * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } //User must give this contract permission to take ownership of it. function stakeToken(uint256[] memory tokenId) public nonReentrant { // allow for staking multiple NFTS at one time. for (uint256 i = 0; i < tokenId.length; i++) { _stakeToken(tokenId[i]); } } function getStakeContractBalance() public view returns (uint256) { return _spawn.balanceOf(address(this)); } function getPendingStakeRewards(uint256 tokenId) public view returns (uint256) { // do not return if NFT not staked uint256 timePassed = block.timestamp - receipt[tokenId].startTime; return (rewardsPerSecond * timePassed); } function unStakeToken(uint256[] memory tokenId) public nonReentrant { for (uint256 indx = 0; indx < tokenId.length; indx++) { _unStakeToken(tokenId[indx]); } } function _unStakeToken(uint256 tokenId) internal onlyStaker(tokenId) { // payout stake, this should be safe as the function is non-reentrant _payoutStake(tokenId); userStakeNft storage nftStaked = userNFTs[msg.sender]; uint256 lastIndex = nftStaked.id.length - 1; uint256 lastIndexKey = nftStaked.id[lastIndex]; nftStaked.id[nftStaked.tokenIndex[tokenId]] = lastIndexKey; nftStaked.tokenIndex[lastIndexKey] = nftStaked.tokenIndex[tokenId]; if (nftStaked.id.length > 0) { nftStaked.id.pop(); delete nftStaked.tokenIndex[tokenId]; } // delete stake record, effectively unstaking it delete receipt[tokenId]; // return token _fren.safeTransferFrom(address(this), msg.sender, tokenId); emit NftUnStaked(msg.sender, tokenId, block.timestamp); } function claimSpawn(uint256[] memory tokenId) external { for (uint256 indx = 0; indx < tokenId.length; indx++) { _claimSpawn(tokenId[indx]); } } function _claimSpawn(uint256 tokenId) internal nonReentrant onlyStaker(tokenId) { // This 'payout first' should be safe as the function is nonReentrant _payoutStake(tokenId); // // update receipt with a new time receipt[tokenId].startTime = block.timestamp; } function reclaimTokens() external onlyAdmin { _spawn.transfer(_admin, _spawn.balanceOf(address(this))); } function _stakeToken(uint256 tokenId) internal { // take possession of the NFT _fren.safeTransferFrom(msg.sender, address(this), tokenId); userStakeNft storage user = userNFTs[msg.sender]; user.id.push(tokenId); user.tokenIndex[tokenId] = user.id.length - 1; receipt[tokenId] = Stake({ startTime: block.timestamp, owner: msg.sender }); emit NftStaked(msg.sender, tokenId, block.timestamp); } function _payoutStake(uint256 tokenId) internal { /* NOTE : Must be called from non-reentrant function to be safe!*/ // double check that the receipt exists and we're not staking from time 0 require( receipt[tokenId].startTime > 0, "_payoutStake: Can not stake from time 0"); // earned amount is difference between the stake start time, current time multiplied by reward amount uint256 timeStaked = block.timestamp - receipt[tokenId].startTime; uint256 payout = timeStaked * rewardsPerSecond; // If contract does not have enough tokens to pay out, return the NFT without payment // This prevent a NFT being locked in the contract when empty if (_spawn.balanceOf(address(this)) < payout) { emit StakePayout( msg.sender, tokenId, 0, receipt[tokenId].startTime, block.timestamp ); return; } // payout stake _handlePayout(receipt[tokenId].owner, payout); emit StakePayout( msg.sender, tokenId, payout, receipt[tokenId].startTime, block.timestamp ); } function _handlePayout(address to, uint256 payout) private { _transferToken(to, payout); rewardsClaimed[to] += payout; } function _transferToken(address to, uint256 amount) private { _spawn.transfer(to, amount); } function setRewardsPerSecond(uint256 _newRewardsPerSecond) public onlyAdmin { rewardsPerSecond = _newRewardsPerSecond; } function getTokensStaked(address staker) public view returns (uint256[] memory) { return userNFTs[staker].id; } function nftDepositor(uint256 tokenId) public view returns (address) { address nftStaker = receipt[tokenId].owner; return nftStaker; } function balanceOf(address owner) public view returns (uint256) { return getTokensStaked(owner).length; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 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`, checking first that contract recipients * are aware of the ERC721 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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @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); /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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 `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
[{"inputs":[{"internalType":"address","name":"admin_","type":"address"},{"internalType":"contract IERC20","name":"spawn_","type":"address"},{"internalType":"contract IERC721","name":"fren_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"NftStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"NftUnStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"StakePayout","type":"event"},{"inputs":[],"name":"_admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_fren","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_spawn","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"claimSpawn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getPendingStakeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakeContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getTokensStaked","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nftDepositor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"receipt","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reclaimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newRewardsPerSecond","type":"uint256"}],"name":"setRewardsPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"stakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"unStakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526601f9465b8ab8e360045534801561001b57600080fd5b5060405161124538038061124583398101604081905261003a91610081565b60016000819055600380546001600160a01b039586166001600160a01b031991821617909155600280549486169482169490941790935580549190931691161790556100e5565b600080600060608486031215610095578283fd5b83516100a0816100cd565b60208501519093506100b1816100cd565b60408501519092506100c2816100cd565b809150509250925092565b6001600160a01b03811681146100e257600080fd5b50565b611151806100f46000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063a2aa4337116100a2578063cbeb09aa11610071578063cbeb09aa14610276578063d3f730fd14610289578063da7b84a7146102a9578063eacdaabc146102bc578063fac8440e146102c55761010b565b8063a2aa4337146101fb578063b72e4cfe14610248578063bf8f02181461025b578063c0da6203146102635761010b565b80633c54caa5116100de5780633c54caa51461019f57806352eb7796146101a757806370a08231146101c75780638863cfb6146101e85761010b565b806301bc45c914610110578063072317a314610140578063150b7a02146101555780631728bb981461018c575b600080fd5b600354610123906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015361014e366004610e53565b6102f1565b005b610173610163366004610d9b565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610137565b600154610123906001600160a01b031681565b610153610379565b6101ba6101b5366004610d81565b6104ac565b6040516101379190610f4b565b6101da6101d5366004610d81565b610519565b604051908152602001610137565b6101536101f6366004610e53565b61052b565b61022b610209366004610f1b565b600860205260009081526040902080546001909101546001600160a01b031682565b604080519283526001600160a01b03909116602083015201610137565b610153610256366004610e53565b61057d565b6101da6105f3565b6101da610271366004610f1b565b610674565b610153610284366004610f1b565b6106a6565b6101da610297366004610d81565b60066020526000908152604090205481565b600254610123906001600160a01b031681565b6101da60045481565b6101236102d3366004610f1b565b6000908152600860205260409020600101546001600160a01b031690565b6002600054141561031d5760405162461bcd60e51b815260040161031490610fd5565b60405180910390fd5b600260009081555b81518110156103705761035e82828151811061035157634e487b7160e01b600052603260045260246000fd5b60200260200101516106d5565b80610368816110d4565b915050610325565b50506001600055565b6003546001600160a01b031633146103a35760405162461bcd60e51b815260040161031490610f8f565b6002546003546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a082319060240160206040518083038186803b1580156103f357600080fd5b505afa158015610407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061042b9190610f33565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561047157600080fd5b505af1158015610485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a99190610efb565b50565b6001600160a01b03811660009081526007602090815260409182902080548351818402810184019094528084526060939283018282801561050c57602002820191906000526020600020905b8154815260200190600101908083116104f8575b505050505090505b919050565b6000610524826104ac565b5192915050565b60005b81518110156105795761056782828151811061055a57634e487b7160e01b600052603260045260246000fd5b60200260200101516108eb565b80610571816110d4565b91505061052e565b5050565b600260005414156105a05760405162461bcd60e51b815260040161031490610fd5565b600260009081555b8151811015610370576105e18282815181106105d457634e487b7160e01b600052603260045260246000fd5b602002602001015161096f565b806105eb816110d4565b9150506105a8565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561063757600080fd5b505afa15801561064b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066f9190610f33565b905090565b600081815260086020526040812054819061068f90426110bd565b90508060045461069f919061109e565b9392505050565b6003546001600160a01b031633146106d05760405162461bcd60e51b815260040161031490610f8f565b600455565b60008181526008602052604090206001015481906001600160a01b031633146107105760405162461bcd60e51b81526004016103149061100c565b61071982610aa7565b3360009081526007602052604081208054909190610739906001906110bd565b9050600082600001828154811061076057634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050808360000184600101600088815260200190815260200160002054815481106107a657634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101929092558681526001850190915260408082205483835291205582541561081d5782548390806107f357634e487b7160e01b600052603160045260246000fd5b60008281526020808220830160001990810183905590920190925586825260018501905260408120555b600085815260086020526040808220918255600191820180546001600160a01b031916905590549051632142170760e11b8152306004820152336024820152604481018790526001600160a01b03909116906342842e0e90606401600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b5050604080518881524260208201523393507f32bc6caf9c29ce36f00f0386a4015fd281d5d4058d348d1a684a24a05c9b324d92500160405180910390a25050505050565b6002600054141561090e5760405162461bcd60e51b815260040161031490610fd5565b600260009081558181526008602052604090206001015481906001600160a01b0316331461094e5760405162461bcd60e51b81526004016103149061100c565b61095782610aa7565b50600090815260086020526040812042905560019055565b600154604051632142170760e11b8152336004820152306024820152604481018390526001600160a01b03909116906342842e0e90606401600060405180830381600087803b1580156109c157600080fd5b505af11580156109d5573d6000803e3d6000fd5b50503360009081526007602090815260408220805460018181018355828552929093209092018590558154919350610a0e9250906110bd565b60008381526001838101602090815260408084209490945583518085018552428082523382840181815289875260088552958790209251835594519190930180546001600160a01b0319166001600160a01b0390921691909117905583518681529081019190915290917f2209f5ab1e50b2a6cab82d8f63686a6991f8d51072e1c8c6e752570697c29c46910160405180910390a25050565b600081815260086020526040902054610b125760405162461bcd60e51b815260206004820152602760248201527f5f7061796f75745374616b653a2043616e206e6f74207374616b652066726f6d60448201526602074696d6520360cc1b6064820152608401610314565b600081815260086020526040812054610b2b90426110bd565b9050600060045482610b3d919061109e565b6002546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190610f33565b1015610c235760008381526008602090815260408083205481518781529283019390935281019190915242606082015233907f7e8de6a1e6682f9d48e1dca794f42aa811c7a6515c3e9bf64713fd7ece9e8e139060800160405180910390a250506104a9565b600083815260086020526040902060010154610c48906001600160a01b031682610ca4565b60008381526008602090815260409182902054825186815291820184905281830152426060820152905133917f7e8de6a1e6682f9d48e1dca794f42aa811c7a6515c3e9bf64713fd7ece9e8e13919081900360800190a2505050565b610cae8282610cdf565b6001600160a01b03821660009081526006602052604081208054839290610cd6908490611086565b90915550505050565b60025460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015610d2d57600080fd5b505af1158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d659190610efb565b505050565b80356001600160a01b038116811461051457600080fd5b600060208284031215610d92578081fd5b61069f82610d6a565b60008060008060808587031215610db0578283fd5b610db985610d6a565b93506020610dc8818701610d6a565b935060408601359250606086013567ffffffffffffffff80821115610deb578384fd5b818801915088601f830112610dfe578384fd5b813581811115610e1057610e10611105565b610e22601f8201601f19168501611055565b91508082528984828501011115610e37578485fd5b8084840185840137810190920192909252939692955090935050565b60006020808385031215610e65578182fd5b823567ffffffffffffffff80821115610e7c578384fd5b818501915085601f830112610e8f578384fd5b813581811115610ea157610ea1611105565b8060051b9150610eb2848301611055565b8181528481019084860184860187018a1015610ecc578788fd5b8795505b83861015610eee578035835260019590950194918601918601610ed0565b5098975050505050505050565b600060208284031215610f0c578081fd5b8151801515811461069f578182fd5b600060208284031215610f2c578081fd5b5035919050565b600060208284031215610f44578081fd5b5051919050565b6020808252825182820181905260009190848201906040850190845b81811015610f8357835183529284019291840191600101610f67565b50909695505050505050565b60208082526026908201527f7265636c61696d546f6b656e733a2043616c6c6572206973206e6f74207468656040820152651020a226a4a760d11b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526029908201527f6f6e6c795374616b65723a2043616c6c6572206973206e6f74204e465420737460408201526830b5b29037bbb732b960b91b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561107e5761107e611105565b604052919050565b60008219821115611099576110996110ef565b500190565b60008160001904831182151516156110b8576110b86110ef565b500290565b6000828210156110cf576110cf6110ef565b500390565b60006000198214156110e8576110e86110ef565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b4e12731664da4bac3a241f23669fbf6ec90698771abf9dbe40fb542d51990ce64736f6c63430008030033000000000000000000000000cf5e0e57a75505b3be1845f0e087c4d2061ed85500000000000000000000000052628f8ea702c51c19b43897d67e4b2845a71b08000000000000000000000000dc3a5c2d973b52652f87a22002ff1502fbe91b26
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cf5e0e57a75505b3be1845f0e087c4d2061ed85500000000000000000000000052628f8ea702c51c19b43897d67e4b2845a71b08000000000000000000000000dc3a5c2d973b52652f87a22002ff1502fbe91b26
-----Decoded View---------------
Arg [0] : admin_ (address): 0xcf5e0e57a75505b3be1845f0e087c4d2061ed855
Arg [1] : spawn_ (address): 0x52628f8ea702c51c19b43897d67e4b2845a71b08
Arg [2] : fren_ (address): 0xdc3a5c2d973b52652f87a22002ff1502fbe91b26
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000cf5e0e57a75505b3be1845f0e087c4d2061ed855
Arg [1] : 00000000000000000000000052628f8ea702c51c19b43897d67e4b2845a71b08
Arg [2] : 000000000000000000000000dc3a5c2d973b52652f87a22002ff1502fbe91b26
Deployed ByteCode Sourcemap
832:6795:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;954:21;;;;;-1:-1:-1;;;;;954:21:0;;;;;;-1:-1:-1;;;;;3290:32:6;;;3272:51;;3260:2;3245:18;954:21:0;;;;;;;;3364:191;;;;;;:::i;:::-;;:::i;:::-;;2466:200;;;;;;:::i;:::-;-1:-1:-1;;;2466:200:0;;;;;;;;;;-1:-1:-1;;;;;;4795:33:6;;;4777:52;;4765:2;4750:18;2466:200:0;4732:103:6;902:20:0;;;;;-1:-1:-1;;;;;902:20:0;;;4961:117;;;:::i;7219:123::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7508:117::-;;;;;;:::i;:::-;;:::i;:::-;;;7016:25:6;;;7004:2;6989:18;7508:117:0;6971:76:6;4449:176:0;;;;;;:::i;:::-;;:::i;1404:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1404:40:0;;;;;;;7226:25:6;;;-1:-1:-1;;;;;7287:32:6;;;7282:2;7267:18;;7260:60;7199:18;1404:40:0;7181:145:6;2743:231:0;;;;;;:::i;:::-;;:::i;2980:120::-;;;:::i;3106:252::-;;;;;;:::i;:::-;;:::i;7081:132::-;;;;;;:::i;:::-;;:::i;1090:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;928:20;;;;;-1:-1:-1;;;;;928:20:0;;;981:49;;;;;;7348:154;;;;;;:::i;:::-;7408:7;7447:16;;;:7;:16;;;;;:22;;;-1:-1:-1;;;;;7447:22:0;;7348:154;3364:191;1744:1:5;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:5;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;3442:107:0::1;3472:7;:14;3465:4;:21;3442:107;;;3510:28;3524:7;3532:4;3524:13;;;;;;-1:-1:-1::0;;;3524:13:0::1;;;;;;;;;;;;;;;3510;:28::i;:::-;3488:6:::0;::::1;::::0;::::1;:::i;:::-;;;;3442:107;;;-1:-1:-1::0;;1701:1:5;2628:7;:22;3364:191:0:o;4961:117::-;2136:6;;-1:-1:-1;;;;;2136:6:0;2122:10;:20;2114:71;;;;-1:-1:-1;;;2114:71:0;;;;;;;:::i;:::-;5015:6:::1;::::0;5031::::1;::::0;5039:31:::1;::::0;-1:-1:-1;;;5039:31:0;;5064:4:::1;5039:31;::::0;::::1;3272:51:6::0;-1:-1:-1;;;;;5015:6:0;;::::1;::::0;:15:::1;::::0;5031:6:::1;::::0;5015;;5039:16:::1;::::0;3245:18:6;;5039:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5015:56;::::0;-1:-1:-1;;;;;;5015:56:0::1;::::0;;;;;;-1:-1:-1;;;;;3906:32:6;;;5015:56:0::1;::::0;::::1;3888:51:6::0;3955:18;;;3948:34;3861:18;;5015:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4961:117::o:0;7219:123::-;-1:-1:-1;;;;;7316:16:0;;;;;;:8;:16;;;;;;;;;7309:26;;;;;;;;;;;;;;;;;7281:16;;7309:26;;;7316:16;7309:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7219:123;;;;:::o;7508:117::-;7563:7;7589:22;7605:5;7589:15;:22::i;:::-;:29;;7508:117;-1:-1:-1;;7508:117:0:o;4449:176::-;4519:12;4514:105;4544:7;:14;4537:4;:21;4514:105;;;4582:26;4594:7;4602:4;4594:13;;;;;;-1:-1:-1;;;4594:13:0;;;;;;;;;;;;;;;4582:11;:26::i;:::-;4560:6;;;;:::i;:::-;;;;4514:105;;;;4449:176;:::o;2743:231::-;1744:1:5;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:5;;;;;;;:::i;:::-;1744:1;2455:7;:18;;;2875:93:0::1;2899:7;:14;2895:1;:18;2875:93;;;2934:23;2946:7;2954:1;2946:10;;;;;;-1:-1:-1::0;;;2946:10:0::1;;;;;;;;;;;;;;;2934:11;:23::i;:::-;2915:3:::0;::::1;::::0;::::1;:::i;:::-;;;;2875:93;;2980:120:::0;3062:6;;:31;;-1:-1:-1;;;3062:31:0;;3087:4;3062:31;;;3272:51:6;3036:7:0;;-1:-1:-1;;;;;3062:6:0;;:16;;3245:18:6;;3062:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3055:38;;2980:120;:::o;3106:252::-;3176:7;3277:16;;;:7;:16;;;;;:26;3176:7;;3259:44;;:15;:44;:::i;:::-;3238:65;;3340:10;3321:16;;:29;;;;:::i;:::-;3313:38;3106:252;-1:-1:-1;;;3106:252:0:o;7081:132::-;2136:6;;-1:-1:-1;;;;;2136:6:0;2122:10;:20;2114:71;;;;-1:-1:-1;;;2114:71:0;;;;;;;:::i;:::-;7167:16:::1;:39:::0;7081:132::o;3561:882::-;1977:16;;;;:7;:16;;;;;:22;;;3621:7;;-1:-1:-1;;;;;1977:22:0;2003:10;1977:36;1956:103;;;;-1:-1:-1;;;1956:103:0;;;;;;;:::i;:::-;3718:21:::1;3731:7;3718:12;:21::i;:::-;3792:10;3750:30;3783:20:::0;;;:8:::1;:20;::::0;;;;3833:19;;3783:20;;3750:30;3833:23:::1;::::0;3855:1:::1;::::0;3833:23:::1;:::i;:::-;3813:43;;3866:20;3889:9;:12;;3902:9;3889:23;;;;;;-1:-1:-1::0;;;3889:23:0::1;;;;;;;;;;;;;;;;;3866:46;;3968:12;3922:9;:12;;3935:9;:20;;:29;3956:7;3935:29;;;;;;;;;;;;3922:43;;;;;;-1:-1:-1::0;;;3922:43:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;:58:::0;;;;4027:29;;;:20:::1;::::0;::::1;:29:::0;;;;;;;;3990:34;;;;;:66;4070:19;;:23;4066:122:::1;;4109:18:::0;;:9;;:18;::::1;;-1:-1:-1::0;;;4109:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;4109:18:0;;;;;;;;;;;;4148:29;;;4109:18:::1;4148:20:::0;::::1;:29:::0;;;;;4141:36;4066:122:::1;4262:16;::::0;;;:7:::1;:16;::::0;;;;;4255:23;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;4255:23:0::1;::::0;;4313:5;;:58;;-1:-1:-1;;;4313:58:0;;4344:4:::1;4313:58;::::0;::::1;3574:34:6::0;4351:10:0::1;3624:18:6::0;;;3617:43;3676:18;;;3669:34;;;-1:-1:-1;;;;;4313:5:0;;::::1;::::0;:22:::1;::::0;3509:18:6;;4313:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;4387:49:0::1;::::0;;7909:25:6;;;4420:15:0::1;7965:2:6::0;7950:18;;7943:34;4399:10:0::1;::::0;-1:-1:-1;4387:49:0::1;::::0;-1:-1:-1;7882:18:6;4387:49:0::1;;;;;;;2069:1;;;3561:882:::0;;:::o;4631:324::-;1744:1:5;2325:7;;:19;;2317:63;;;;-1:-1:-1;;;2317:63:5;;;;;;;:::i;:::-;1744:1;2455:7;:18;;;1977:16:0;;;:7:::1;:16;::::0;;;;:22:::1;;::::0;4726:7;;-1:-1:-1;;;;;1977:22:0::1;2003:10;1977:36;1956:103;;;;-1:-1:-1::0;;;1956:103:0::1;;;;;;;:::i;:::-;4827:21:::2;4840:7;4827:12;:21::i;:::-;-1:-1:-1::0;4904:16:0::2;::::0;;;:7:::2;:16;::::0;;;;4933:15:::2;4904:44:::0;;1701:1:5;2628:22;;4631:324:0:o;5084:486::-;5179:5;;:58;;-1:-1:-1;;;5179:58:0;;5202:10;5179:58;;;3574:34:6;5222:4:0;3624:18:6;;;3617:43;3676:18;;;3669:34;;;-1:-1:-1;;;;;5179:5:0;;;;:22;;3509:18:6;;5179:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5285:10:0;5248:25;5276:20;;;:8;:20;;;;;;;5306:21;;;;;;;;;;;;;;;;;;;;;5364:14;;5276:20;;-1:-1:-1;5364:18:0;;-1:-1:-1;5306:21:0;5364:18;:::i;:::-;5337:24;;;;:15;;;;:24;;;;;;;;:45;;;;5412:88;;;;;;;5443:15;5412:88;;;5479:10;5412:88;;;;;;5393:16;;;:7;:16;;;;;;:107;;;;;;;;;;;;-1:-1:-1;;;;;;5393:107:0;-1:-1:-1;;;;;5393:107:0;;;;;;;;;5516:47;;7909:25:6;;;7950:18;;;7943:34;;;;5479:10:0;;5516:47;;7882:18:6;5516:47:0;;;;;;;5084:486;;:::o;5576:1243::-;5830:1;5801:16;;;:7;:16;;;;;:26;5792:83;;;;-1:-1:-1;;;5792:83:0;;5894:2:6;5792:83:0;;;5876:21:6;5933:2;5913:18;;;5906:30;5972:34;5952:18;;;5945:62;-1:-1:-1;;;6023:18:6;;;6016:37;6070:19;;5792:83:0;5866:229:6;5792:83:0;5996:18;6035:16;;;:7;:16;;;;;:26;6017:44;;:15;:44;:::i;:::-;5996:65;;6071:14;6101:16;;6088:10;:29;;;;:::i;:::-;6296:6;;:31;;-1:-1:-1;;;6296:31:0;;6321:4;6296:31;;;3272:51:6;6071:46:0;;-1:-1:-1;6071:46:0;;-1:-1:-1;;;;;6296:6:0;;;;:16;;3245:18:6;;6296:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;6292:270;;;6439:1;6458:16;;;:7;:16;;;;;;;;:26;6357:174;;7570:25:6;;;7611:18;;;7604:34;;;;7654:18;;7647:34;;;;6502:15:0;7712:2:6;7697:18;;7690:34;6386:10:0;;6357:174;;7557:3:6;7542:19;6357:174:0;;;;;;;6545:7;;;;6292:270;6610:16;;;;:7;:16;;;;;:22;;;6596:45;;-1:-1:-1;;;;;6610:22:0;6634:6;6596:13;:45::i;:::-;6747:16;;;;:7;:16;;;;;;;;;:26;6657:155;;7570:25:6;;;7611:18;;;7604:34;;;7654:18;;;7647:34;6787:15:0;7712:2:6;7697:18;;7690:34;6657:155:0;;6682:10;;6657:155;;;;;;7557:3:6;6657:155:0;;;5576:1243;;;:::o;6825:140::-;6894:26;6909:2;6913:6;6894:14;:26::i;:::-;-1:-1:-1;;;;;6930:18:0;;;;;;:14;:18;;;;;:28;;6952:6;;6930:18;:28;;6952:6;;6930:28;:::i;:::-;;;;-1:-1:-1;;;;6825:140:0:o;6971:104::-;7041:6;;:27;;-1:-1:-1;;;7041:27:0;;-1:-1:-1;;;;;3906:32:6;;;7041:27:0;;;3888:51:6;3955:18;;;3948:34;;;7041:6:0;;;;:15;;3861:18:6;;7041:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6971:104;;:::o;14:173:6:-;82:20;;-1:-1:-1;;;;;131:31:6;;121:42;;111:2;;177:1;174;167:12;192:196;;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:1025::-;;;;;565:3;553:9;544:7;540:23;536:33;533:2;;;587:6;579;572:22;533:2;615:29;634:9;615:29;:::i;:::-;605:39;;663:2;684:38;718:2;707:9;703:18;684:38;:::i;:::-;674:48;;769:2;758:9;754:18;741:32;731:42;;824:2;813:9;809:18;796:32;847:18;888:2;880:6;877:14;874:2;;;909:6;901;894:22;874:2;952:6;941:9;937:22;927:32;;997:7;990:4;986:2;982:13;978:27;968:2;;1024:6;1016;1009:22;968:2;1065;1052:16;1087:2;1083;1080:10;1077:2;;;1093:18;;:::i;:::-;1135:53;1178:2;1159:13;;-1:-1:-1;;1155:27:6;1151:36;;1135:53;:::i;:::-;1122:66;;1211:2;1204:5;1197:17;1251:7;1246:2;1241;1237;1233:11;1229:20;1226:33;1223:2;;;1277:6;1269;1262:22;1223:2;1337;1332;1328;1324:11;1319:2;1312:5;1308:14;1295:45;1360:14;;1356:23;;;1349:39;;;;523:895;;;;-1:-1:-1;523:895:6;;-1:-1:-1;;523:895:6:o;1423:1002::-;;1538:2;1581;1569:9;1560:7;1556:23;1552:32;1549:2;;;1602:6;1594;1587:22;1549:2;1647:9;1634:23;1676:18;1717:2;1709:6;1706:14;1703:2;;;1738:6;1730;1723:22;1703:2;1781:6;1770:9;1766:22;1756:32;;1826:7;1819:4;1815:2;1811:13;1807:27;1797:2;;1853:6;1845;1838:22;1797:2;1894;1881:16;1916:2;1912;1909:10;1906:2;;;1922:18;;:::i;:::-;1968:2;1965:1;1961:10;1951:20;;1991:28;2015:2;2011;2007:11;1991:28;:::i;:::-;2053:15;;;2084:12;;;;2116:11;;;2146;;;2142:20;;2139:33;-1:-1:-1;2136:2:6;;;2190:6;2182;2175:22;2136:2;2217:6;2208:15;;2232:163;2246:2;2243:1;2240:9;2232:163;;;2303:17;;2291:30;;2264:1;2257:9;;;;;2341:12;;;;2373;;2232:163;;;-1:-1:-1;2414:5:6;1518:907;-1:-1:-1;;;;;;;;1518:907:6:o;2430:297::-;;2550:2;2538:9;2529:7;2525:23;2521:32;2518:2;;;2571:6;2563;2556:22;2518:2;2608:9;2602:16;2661:5;2654:13;2647:21;2640:5;2637:32;2627:2;;2688:6;2680;2673:22;2732:190;;2844:2;2832:9;2823:7;2819:23;2815:32;2812:2;;;2865:6;2857;2850:22;2812:2;-1:-1:-1;2893:23:6;;2802:120;-1:-1:-1;2802:120:6:o;2927:194::-;;3050:2;3038:9;3029:7;3025:23;3021:32;3018:2;;;3071:6;3063;3056:22;3018:2;-1:-1:-1;3099:16:6;;3008:113;-1:-1:-1;3008:113:6:o;3993:635::-;4164:2;4216:21;;;4286:13;;4189:18;;;4308:22;;;3993:635;;4164:2;4387:15;;;;4361:2;4346:18;;;3993:635;4433:169;4447:6;4444:1;4441:13;4433:169;;;4508:13;;4496:26;;4577:15;;;;4542:12;;;;4469:1;4462:9;4433:169;;;-1:-1:-1;4619:3:6;;4144:484;-1:-1:-1;;;;;;4144:484:6:o;5285:402::-;5487:2;5469:21;;;5526:2;5506:18;;;5499:30;5565:34;5560:2;5545:18;;5538:62;-1:-1:-1;;;5631:2:6;5616:18;;5609:36;5677:3;5662:19;;5459:228::o;6100:355::-;6302:2;6284:21;;;6341:2;6321:18;;;6314:30;6380:33;6375:2;6360:18;;6353:61;6446:2;6431:18;;6274:181::o;6460:405::-;6662:2;6644:21;;;6701:2;6681:18;;;6674:30;6740:34;6735:2;6720:18;;6713:62;-1:-1:-1;;;6806:2:6;6791:18;;6784:39;6855:3;6840:19;;6634:231::o;8384:275::-;8455:2;8449:9;8520:2;8501:13;;-1:-1:-1;;8497:27:6;8485:40;;8555:18;8540:34;;8576:22;;;8537:62;8534:2;;;8602:18;;:::i;:::-;8638:2;8631:22;8429:230;;-1:-1:-1;8429:230:6:o;8664:128::-;;8735:1;8731:6;8728:1;8725:13;8722:2;;;8741:18;;:::i;:::-;-1:-1:-1;8777:9:6;;8712:80::o;8797:168::-;;8903:1;8899;8895:6;8891:14;8888:1;8885:21;8880:1;8873:9;8866:17;8862:45;8859:2;;;8910:18;;:::i;:::-;-1:-1:-1;8950:9:6;;8849:116::o;8970:125::-;;9038:1;9035;9032:8;9029:2;;;9043:18;;:::i;:::-;-1:-1:-1;9080:9:6;;9019:76::o;9100:135::-;;-1:-1:-1;;9160:17:6;;9157:2;;;9180:18;;:::i;:::-;-1:-1:-1;9227:1:6;9216:13;;9147:88::o;9240:127::-;9301:10;9296:3;9292:20;9289:1;9282:31;9332:4;9329:1;9322:15;9356:4;9353:1;9346:15;9372:127;9433:10;9428:3;9424:20;9421:1;9414:31;9464:4;9461:1;9454:15;9488:4;9485:1;9478:15
Swarm Source
ipfs://b4e12731664da4bac3a241f23669fbf6ec90698771abf9dbe40fb542d51990ce
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.