Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CommunityRewards
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/SafeERC20.sol";import "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol";import "../external/ERC721PresetMinterPauserAutoId.sol";import "../interfaces/IERC20withDec.sol";import "../interfaces/ICommunityRewards.sol";import "../protocol/core/GoldfinchConfig.sol";import "../protocol/core/ConfigHelper.sol";import "../library/CommunityRewardsVesting.sol";contract CommunityRewards is ICommunityRewards, ERC721PresetMinterPauserAutoIdUpgradeSafe, ReentrancyGuardUpgradeSafe {using SafeMath for uint256;using SafeERC20 for IERC20withDec;using ConfigHelper for GoldfinchConfig;using CommunityRewardsVesting for CommunityRewardsVesting.Rewards;/* ========== EVENTS ========== */event GoldfinchConfigUpdated(address indexed who, address configAddress);
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "../Initializable.sol";/** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with GSN meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/contract ContextUpgradeSafe is Initializable {// Empty internal constructor, to prevent people from mistakenly deploying// an instance of this contract, which should be used via inheritance.function __Context_init() internal initializer {__Context_init_unchained();}function __Context_init_unchained() internal initializer {}
1234567891011121314151617181920212223242526pragma solidity >=0.4.24 <0.7.0;/*** @title Initializable** @dev Helper contract to support initializer functions. To use it, replace* the constructor with a function that has the `initializer` modifier.* WARNING: Unlike constructors, initializer functions must be manually* invoked. This applies both to deploying an Initializable contract, as well* as extending an Initializable contract via inheritance.* WARNING: When used with inheritance, manual care must be taken to not invoke* a parent initializer twice, or ensure that all initializers are idempotent,* because this is not dealt with automatically as with constructors.*/contract Initializable {/*** @dev Indicates that the contract has been initialized.*/bool private initialized;/*** @dev Indicates that the contract is in the process of being initialized.*/bool private initializing;
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "../utils/EnumerableSet.sol";import "../utils/Address.sol";import "../GSN/Context.sol";import "../Initializable.sol";/*** @dev Contract module that allows children to implement role-based access* control mechanisms.** Roles are referred to by their `bytes32` identifier. These should be exposed* in the external API and be unique. The best way to achieve this is by* using `public constant` hash digests:** ```* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");* ```** Roles can be used to represent a set of permissions. To restrict access to a* function call, use {hasRole}:** ```* function foo() public {* require(hasRole(MY_ROLE, _msgSender()));* ...
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "./IERC165.sol";import "../Initializable.sol";/*** @dev Implementation of the {IERC165} interface.** Contracts may inherit from this and call {_registerInterface} to declare* their support of an interface.*/contract ERC165UpgradeSafe is Initializable, IERC165 {/** bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7*/bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;/*** @dev Mapping of interface ids to whether or not it's supported.*/mapping(bytes4 => bool) private _supportedInterfaces;function __ERC165_init() internal initializer {__ERC165_init_unchained();}
12345678910111213141516171819202122pragma solidity ^0.6.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);}
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;/*** @dev Standard math utilities missing in the Solidity language.*/library Math {/*** @dev Returns the largest of two numbers.*/function max(uint256 a, uint256 b) internal pure returns (uint256) {return a >= b ? a : b;}/*** @dev Returns the smallest of two numbers.*/function min(uint256 a, uint256 b) internal pure returns (uint256) {return a < b ? a : b;}/*** @dev Returns the average of two numbers. The result is rounded towards* zero.*/function average(uint256 a, uint256 b) internal pure returns (uint256) {// (a + b) / 2 can overflow, so we distribute
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;/*** @dev Wrappers over Solidity's arithmetic operations with added overflow* checks.** Arithmetic operations in Solidity wrap on overflow. This can easily result* in bugs, because programmers usually assume that an overflow raises an* error, which is the standard behavior in high level programming languages.* `SafeMath` restores this intuition by reverting the transaction when an* operation overflows.** Using this library instead of the unchecked operations eliminates an entire* class of bugs, so it's recommended to use it always.*/library SafeMath {/*** @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) {
1234567891011121314151617181920212223242526pragma solidity ^0.6.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);/**
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "./IERC20.sol";import "../../math/SafeMath.sol";import "../../utils/Address.sol";/*** @title SafeERC20* @dev Wrappers around ERC20 operations that throw on failure (when the token* contract returns false). Tokens that return no value (and instead revert or* throw on failure) are also supported, non-reverting calls are assumed to be* successful.* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.*/library SafeERC20 {using SafeMath for uint256;using Address for address;function safeTransfer(IERC20 token, address to, uint256 value) internal {_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));}function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));}
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "../../GSN/Context.sol";import "./IERC721.sol";import "./IERC721Metadata.sol";import "./IERC721Enumerable.sol";import "./IERC721Receiver.sol";import "../../introspection/ERC165.sol";import "../../math/SafeMath.sol";import "../../utils/Address.sol";import "../../utils/EnumerableSet.sol";import "../../utils/EnumerableMap.sol";import "../../utils/Strings.sol";import "../../Initializable.sol";/*** @title ERC721 Non-Fungible Token Standard basic implementation* @dev see https://eips.ethereum.org/EIPS/eip-721*/contract ERC721UpgradeSafe is Initializable, ContextUpgradeSafe, ERC165UpgradeSafe, IERC721, IERC721Metadata, IERC721Enumerable {using SafeMath for uint256;using Address for address;using EnumerableSet for EnumerableSet.UintSet;using EnumerableMap for EnumerableMap.UintToAddressMap;using Strings for uint256;
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "./ERC721.sol";import "../../utils/Pausable.sol";import "../../Initializable.sol";/*** @dev ERC721 token with pausable token transfers, minting and burning.** Useful for scenarios such as preventing trades until the end of an evaluation* period, or having an emergency switch for freezing all token transfers in the* event of a large bug.*/abstract contract ERC721PausableUpgradeSafe is Initializable, ERC721UpgradeSafe, PausableUpgradeSafe {function __ERC721Pausable_init() internal initializer {__Context_init_unchained();__ERC165_init_unchained();__Pausable_init_unchained();__ERC721Pausable_init_unchained();}function __ERC721Pausable_init_unchained() internal initializer {}
1234567891011121314151617181920212223242526pragma solidity ^0.6.2;import "../../introspection/IERC165.sol";/*** @dev Required interface of an ERC721 compliant contract.*/interface IERC721 is IERC165 {event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);event ApprovalForAll(address indexed owner, address indexed operator, bool approved);/*** @dev Returns the number of NFTs in ``owner``'s account.*/function balanceOf(address owner) external view returns (uint256 balance);/*** @dev Returns the owner of the NFT specified by `tokenId`.*/function ownerOf(uint256 tokenId) external view returns (address owner);/*** @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to* another (`to`).*
1234567891011121314pragma solidity ^0.6.2;import "./IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional enumeration extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Enumerable is IERC721 {function totalSupply() external view returns (uint256);function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);function tokenByIndex(uint256 index) external view returns (uint256);}
12345678910111213pragma solidity ^0.6.2;import "./IERC721.sol";/*** @title ERC-721 Non-Fungible Token Standard, optional metadata extension* @dev See https://eips.ethereum.org/EIPS/eip-721*/interface IERC721Metadata is IERC721 {function name() external view returns (string memory);function symbol() external view returns (string memory);function tokenURI(uint256 tokenId) external view returns (string memory);}
12345678910111213141516171819202122232425pragma solidity ^0.6.0;/*** @title ERC721 token receiver interface* @dev Interface for any contract that wants to support safeTransfers* from ERC721 asset contracts.*/interface IERC721Receiver {/*** @notice Handle the receipt of an NFT* @dev The ERC721 smart contract calls this function on the recipient* after a {IERC721-safeTransferFrom}. This function MUST return the function selector,* otherwise the caller will revert the transaction. The selector to be* returned can be obtained as `this.onERC721Received.selector`. This* function MAY throw to revert and reject the transfer.* Note: the ERC721 contract address is always the message sender.* @param operator The address which called `safeTransferFrom` function* @param from The address which previously owned the token* @param tokenId The NFT identifier which is being transferred* @param data Additional data with no specified format* @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`*/function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data)external returns (bytes4);}
1234567891011121314151617181920212223242526pragma solidity ^0.6.2;/*** @dev Collection of functions related to the address type*/library Address {/*** @dev Returns true if `account` is a contract.** [IMPORTANT]* ====* It is unsafe to assume that an address for which this function returns* false is an externally-owned account (EOA) and not a contract.** Among others, `isContract` will return false for the following* types of addresses:** - an externally-owned account* - a contract in construction* - an address where a contract will be created* - an address where a contract lived, but was destroyed* ====*/function isContract(address account) internal view returns (bool) {// According to EIP-1052, 0x0 is the value returned for not-yet created accounts// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "../math/SafeMath.sol";/*** @title Counters* @author Matt Condon (@shrugs)* @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number* of elements in a mapping, issuing ERC721 ids, or counting request ids.** Include with `using Counters for Counters.Counter;`* Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the {SafeMath}* overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never* directly accessed.*/library Counters {using SafeMath for uint256;struct Counter {// This variable should never be directly accessed by users of the library: interactions must be restricted to// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add// this feature: see https://github.com/ethereum/solidity/issues/4637uint256 _value; // default: 0}function current(Counter storage counter) internal view returns (uint256) {
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;/*** @dev Library for managing an enumerable variant of Solidity's* https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]* type.** Maps have the following properties:** - Entries are added, removed, and checked for existence in constant time* (O(1)).* - Entries are enumerated in O(n). No guarantees are made on the ordering.** ```* contract Example {* // Add the library methods* using EnumerableMap for EnumerableMap.UintToAddressMap;** // Declare a set state variable* EnumerableMap.UintToAddressMap private myMap;* }* ```** As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are* supported.*/
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```** As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256`* (`UintSet`) are supported.*/
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "../GSN/Context.sol";import "../Initializable.sol";/*** @dev Contract module which allows children to implement an emergency stop* mechanism that can be triggered by an authorized account.** This module is used through inheritance. It will make available the* modifiers `whenNotPaused` and `whenPaused`, which can be applied to* the functions of your contract. Note that they will not be pausable by* simply including this module, only once the modifiers are put in place.*/contract PausableUpgradeSafe is Initializable, ContextUpgradeSafe {/*** @dev Emitted when the pause is triggered by `account`.*/event Paused(address account);/*** @dev Emitted when the pause is lifted by `account`.*/event Unpaused(address account);bool private _paused;
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;import "../Initializable.sol";/*** @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].*/contract ReentrancyGuardUpgradeSafe is Initializable {bool private _notEntered;function __ReentrancyGuard_init() internal initializer {__ReentrancyGuard_init_unchained();}
1234567891011121314151617181920212223242526pragma solidity ^0.6.0;/*** @dev String operations.*/library Strings {/*** @dev Converts a `uint256` to its ASCII `string` representation.*/function toString(uint256 value) internal pure returns (string memory) {// Inspired by OraclizeAPI's implementation - MIT licence// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.solif (value == 0) {return "0";}uint256 temp = value;uint256 digits;while (temp != 0) {digits++;temp /= 10;}bytes memory buffer = new bytes(digits);uint256 index = digits - 1;temp = value;while (temp != 0) {
12345678910111213141516171819202122232425// SPDX-License-Identifier: MIT// solhint-disable/*This is copied from OZ preset: https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/release-v3.0.0/contracts/presets/ERC721PresetMinterPauserAutoId.solAlterations:* Make the counter public, so that we can use it in our custom mint function* Removed ERC721Burnable parent contract, but added our own custom burn function.* Removed original "mint" function, because we have a custom one.* Removed default initialization functions, because they set msg.sender as the owner, whichwe do not want, because we use a deployer account, which is separate from the protocol owner.*/pragma solidity 0.6.12;import "@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol";import "@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol";import "@openzeppelin/contracts-ethereum-package/contracts/utils/Counters.sol";import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/ERC721.sol";import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/ERC721Pausable.sol";import "@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol";/*** @dev {ERC721} token, including:** - ability for holders to burn (destroy) their tokens
1234567891011// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;interface IBackerRewards {function allocateRewards(uint256 _interestPaymentAmount) external;function onTranchedPoolDrawdown(uint256 sliceIndex) external;function setPoolTokenAccRewardsPerPrincipalDollarAtMint(address poolAddress, uint256 tokenId) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MIT// Taken from https://github.com/compound-finance/compound-protocol/blob/master/contracts/CTokenInterfaces.solpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./IERC20withDec.sol";interface ICUSDCContract is IERC20withDec {/*** User Interface ***/function mint(uint256 mintAmount) external returns (uint256);function redeem(uint256 redeemTokens) external returns (uint256);function redeemUnderlying(uint256 redeemAmount) external returns (uint256);function borrow(uint256 borrowAmount) external returns (uint256);function repayBorrow(uint256 repayAmount) external returns (uint256);function repayBorrowBehalf(address borrower, uint256 repayAmount) external returns (uint256);function liquidateBorrow(address borrower,uint256 repayAmount,address cTokenCollateral
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/IERC721.sol";import "../interfaces/IERC20withDec.sol";interface ICommunityRewards is IERC721 {function rewardsToken() external view returns (IERC20withDec);function claimableRewards(uint256 tokenId) external view returns (uint256 rewards);function totalVestedAt(uint256 start,uint256 end,uint256 granted,uint256 cliffLength,uint256 vestingInterval,uint256 revokedAt,uint256 time) external pure returns (uint256 rewards);function grant(address recipient,uint256 amount,
123456789101112131415161718192021// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;abstract contract ICreditDesk {uint256 public totalWritedowns;uint256 public totalLoansOutstanding;function setUnderwriterGovernanceLimit(address underwriterAddress, uint256 limit) external virtual;function drawdown(address creditLineAddress, uint256 amount) external virtual;function pay(address creditLineAddress, uint256 amount) external virtual;function assessCreditLine(address creditLineAddress) external virtual;function applyPayment(address creditLineAddress, uint256 amount) external virtual;function getNextPaymentAmount(address creditLineAddress, uint256 asOfBLock) external view virtual returns (uint256);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;interface ICreditLine {function borrower() external view returns (address);function limit() external view returns (uint256);function maxLimit() external view returns (uint256);function interestApr() external view returns (uint256);function paymentPeriodInDays() external view returns (uint256);function principalGracePeriodInDays() external view returns (uint256);function termInDays() external view returns (uint256);function lateFeeApr() external view returns (uint256);function isLate() external view returns (bool);function withinPrincipalGracePeriod() external view returns (bool);
123456789101112131415161718192021// SPDX-License-Identifier: MIT// Taken from https://github.com/compound-finance/compound-protocol/blob/master/contracts/CTokenInterfaces.solpragma solidity 0.6.12;pragma experimental ABIEncoderV2;interface ICurveLP {function token() external view returns (address);function get_virtual_price() external view returns (uint256);function calc_token_amount(uint256[2] calldata amounts) external view returns (uint256);function add_liquidity(uint256[2] calldata amounts,uint256 min_mint_amount,bool use_eth,address receiver) external returns (uint256);function balances(uint256 arg0) external view returns (uint256);}
1234567891011121314151617181920// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol";/*Only addition is the `decimals` function, which we need, and which both our Fidu and USDC use, along with most ERC20's.*//*** @dev Interface of the ERC20 standard as defined in the EIP.*/interface IERC20withDec is IERC20 {/*** @dev Returns the number of decimals used for the token*/function decimals() external view returns (uint8);}
1234567891011121314// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./IERC20withDec.sol";interface IFidu is IERC20withDec {function mintTo(address to, uint256 amount) external;function burnFrom(address to, uint256 amount) external;function renounceRole(bytes32 role, address account) external;}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;abstract contract IGo {uint256 public constant ID_TYPE_0 = 0;uint256 public constant ID_TYPE_1 = 1;uint256 public constant ID_TYPE_2 = 2;uint256 public constant ID_TYPE_3 = 3;uint256 public constant ID_TYPE_4 = 4;uint256 public constant ID_TYPE_5 = 5;uint256 public constant ID_TYPE_6 = 6;uint256 public constant ID_TYPE_7 = 7;uint256 public constant ID_TYPE_8 = 8;uint256 public constant ID_TYPE_9 = 9;uint256 public constant ID_TYPE_10 = 10;/// @notice Returns the address of the UniqueIdentity contract.function uniqueIdentity() external virtual returns (address);function go(address account) public view virtual returns (bool);function goOnlyIdTypes(address account, uint256[] calldata onlyIdTypes) public view virtual returns (bool);function goSeniorPool(address account) public view virtual returns (bool);
1234567891011121314// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;interface IGoldfinchConfig {function getNumber(uint256 index) external returns (uint256);function getAddress(uint256 index) external returns (address);function setAddress(uint256 index, address newAddress) external returns (address);function setNumber(uint256 index, uint256 newNumber) external returns (uint256);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;interface IGoldfinchFactory {function createCreditLine() external returns (address);function createBorrower(address owner) external returns (address);function createPool(address _borrower,uint256 _juniorFeePercent,uint256 _limit,uint256 _interestApr,uint256 _paymentPeriodInDays,uint256 _termInDays,uint256 _lateFeeApr,uint256[] calldata _allowedUIDTypes) external returns (address);function createMigratedPool(address _borrower,uint256 _juniorFeePercent,uint256 _limit,uint256 _interestApr,
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;abstract contract IPool {uint256 public sharePrice;function deposit(uint256 amount) external virtual;function withdraw(uint256 usdcAmount) external virtual;function withdrawInFidu(uint256 fiduAmount) external virtual;function collectInterestAndPrincipal(address from,uint256 interest,uint256 principal) public virtual;function transferFrom(address from,address to,uint256 amount) public virtual returns (bool);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "@openzeppelin/contracts-ethereum-package/contracts/token/ERC721/IERC721.sol";interface IPoolTokens is IERC721 {event TokenMinted(address indexed owner,address indexed pool,uint256 indexed tokenId,uint256 amount,uint256 tranche);event TokenRedeemed(address indexed owner,address indexed pool,uint256 indexed tokenId,uint256 principalRedeemed,uint256 interestRedeemed,uint256 tranche);event TokenBurned(address indexed owner, address indexed pool, uint256 indexed tokenId);
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./ITranchedPool.sol";abstract contract ISeniorPool {uint256 public sharePrice;uint256 public totalLoansOutstanding;uint256 public totalWritedowns;function deposit(uint256 amount) external virtual returns (uint256 depositShares);function depositWithPermit(uint256 amount,uint256 deadline,uint8 v,bytes32 r,bytes32 s) external virtual returns (uint256 depositShares);function withdraw(uint256 usdcAmount) external virtual returns (uint256 amount);function withdrawInFidu(uint256 fiduAmount) external virtual returns (uint256 amount);
123456789101112131415// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./ISeniorPool.sol";import "./ITranchedPool.sol";abstract contract ISeniorPoolStrategy {function getLeverageRatio(ITranchedPool pool) public view virtual returns (uint256);function invest(ISeniorPool seniorPool, ITranchedPool pool) public view virtual returns (uint256 amount);function estimateInvestment(ISeniorPool seniorPool, ITranchedPool pool) public view virtual returns (uint256);}
1234567891011121314151617181920212223// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;interface IStakingRewards {function unstake(uint256 tokenId, uint256 amount) external;function addToStake(uint256 tokenId, uint256 amount) external;function stakedBalanceOf(uint256 tokenId) external view returns (uint256);function depositToCurveAndStakeFrom(address nftRecipient,uint256 fiduAmount,uint256 usdcAmount) external;function kick(uint256 tokenId) external;function accumulatedRewardsPerToken() external view returns (uint256);function lastUpdateTime() external view returns (uint256);}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./IV2CreditLine.sol";abstract contract ITranchedPool {IV2CreditLine public creditLine;uint256 public createdAt;enum Tranches {Reserved,Senior,Junior}struct TrancheInfo {uint256 id;uint256 principalDeposited;uint256 principalSharePrice;uint256 interestSharePrice;uint256 lockedUntil;}struct PoolSlice {TrancheInfo seniorTranche;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./ICreditLine.sol";abstract contract IV2CreditLine is ICreditLine {function principal() external view virtual returns (uint256);function totalInterestAccrued() external view virtual returns (uint256);function termStartTime() external view virtual returns (uint256);function setLimit(uint256 newAmount) external virtual;function setMaxLimit(uint256 newAmount) external virtual;function setBalance(uint256 newBalance) external virtual;function setPrincipal(uint256 _principal) external virtual;function setTotalInterestAccrued(uint256 _interestAccrued) external virtual;function drawdown(uint256 amount) external virtual;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";import "@openzeppelin/contracts-ethereum-package/contracts/math/Math.sol";library CommunityRewardsVesting {using SafeMath for uint256;using CommunityRewardsVesting for Rewards;/// @dev All time values in the Rewards struct (i.e. `startTime`, `endTime`,/// `cliffLength`, `vestingInterval`, `revokedAt`) use the same units: seconds. All timestamp/// values (i.e. `startTime`, `endTime`, `revokedAt`) are seconds since the unix epoch./// @dev `cliffLength` is the duration from the start of the grant, before which has elapsed/// the vested amount remains 0./// @dev `vestingInterval` is the interval at which vesting occurs. If `vestingInterval` is not a/// factor of `vestingLength`, rewards are fully vested at the time of the last whole `vestingInterval`.struct Rewards {uint256 totalGranted;uint256 totalClaimed;uint256 startTime;uint256 endTime;uint256 cliffLength;uint256 vestingInterval;uint256 revokedAt;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol";import "@openzeppelin/contracts-ethereum-package/contracts/utils/ReentrancyGuard.sol";import "@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol";import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";import "./PauserPausable.sol";/*** @title BaseUpgradeablePausable contract* @notice This is our Base contract that most other contracts inherit from. It includes many standard* useful abilities like ugpradeability, pausability, access control, and re-entrancy guards.* @author Goldfinch*/contract BaseUpgradeablePausable isInitializable,AccessControlUpgradeSafe,PauserPausable,ReentrancyGuardUpgradeSafe{bytes32 public constant OWNER_ROLE = keccak256("OWNER_ROLE");using SafeMath for uint256;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./GoldfinchConfig.sol";import "../../interfaces/IPool.sol";import "../../interfaces/IFidu.sol";import "../../interfaces/ISeniorPool.sol";import "../../interfaces/ISeniorPoolStrategy.sol";import "../../interfaces/ICreditDesk.sol";import "../../interfaces/IERC20withDec.sol";import "../../interfaces/ICUSDCContract.sol";import "../../interfaces/IPoolTokens.sol";import "../../interfaces/IBackerRewards.sol";import "../../interfaces/IGoldfinchFactory.sol";import "../../interfaces/IGo.sol";import "../../interfaces/IStakingRewards.sol";import "../../interfaces/ICurveLP.sol";/*** @title ConfigHelper* @notice A convenience library for getting easy access to other contracts and constants within the* protocol, through the use of the GoldfinchConfig contract* @author Goldfinch*/
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;/*** @title ConfigOptions* @notice A central place for enumerating the configurable options of our GoldfinchConfig contract* @author Goldfinch*/library ConfigOptions {// NEVER EVER CHANGE THE ORDER OF THESE!// You can rename or append. But NEVER change the order.enum Numbers {TransactionLimit,TotalFundsLimit,MaxUnderwriterLimit,ReserveDenominator,WithdrawFeeDenominator,LatenessGracePeriodInDays,LatenessMaxDays,DrawdownPeriodInSeconds,TransferRestrictionPeriodInDays,LeverageRatio}
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "./BaseUpgradeablePausable.sol";import "../../interfaces/IGoldfinchConfig.sol";import "./ConfigOptions.sol";/*** @title GoldfinchConfig* @notice This contract stores mappings of useful "protocol config state", giving a central place* for all other contracts to access it. For example, the TransactionLimit, or the PoolAddress. These config vars* are enumerated in the `ConfigOptions` library, and can only be changed by admins of the protocol.* Note: While this inherits from BaseUpgradeablePausable, it is not deployed as an upgradeable contract (this* is mostly to save gas costs of having each call go through a proxy)* @author Goldfinch*/contract GoldfinchConfig is BaseUpgradeablePausable {bytes32 public constant GO_LISTER_ROLE = keccak256("GO_LISTER_ROLE");mapping(uint256 => address) public addresses;mapping(uint256 => uint256) public numbers;mapping(address => bool) public goList;
1234567891011121314151617181920212223242526// SPDX-License-Identifier: MITpragma solidity 0.6.12;pragma experimental ABIEncoderV2;import "@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol";import "@openzeppelin/contracts-ethereum-package/contracts/access/AccessControl.sol";/*** @title PauserPausable* @notice Inheriting from OpenZeppelin's Pausable contract, this does small* augmentations to make it work with a PAUSER_ROLE, leveraging the AccessControl contract.* It is meant to be inherited.* @author Goldfinch*/contract PauserPausable is AccessControlUpgradeSafe, PausableUpgradeSafe {bytes32 public constant PAUSER_ROLE = keccak256("PAUSER_ROLE");// solhint-disable-next-line func-name-mixedcasefunction __PauserPausable__init() public initializer {__Pausable_init_unchained();}/*** @dev Pauses all functions guarded by Pause*
12345678910111213141516171819202122232425{"evmVersion": "istanbul","libraries": {},"metadata": {"bytecodeHash": "ipfs","useLiteralContent": true},"optimizer": {"enabled": true,"runs": 100},"remappings": [],"outputSelection": {"*": {"*": ["evm.bytecode","evm.deployedBytecode","devdoc","userdoc","metadata","abi"]}}}
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"address","name":"configAddress","type":"address"}],"name":"GoldfinchConfigUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalUnvested","type":"uint256"}],"name":"GrantRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vestingLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cliffLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vestingInterval","type":"uint256"}],"name":"Granted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DISTRIBUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OWNER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract GoldfinchConfig","name":"_config","type":"address"},{"internalType":"uint256","name":"_tokenLaunchTimeInSeconds","type":"uint256"}],"name":"__initialize__","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_tokenIdTracker","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claimableRewards","outputs":[{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"config","outputs":[{"internalType":"contract GoldfinchConfig","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"vestingLength","type":"uint256"},{"internalType":"uint256","name":"cliffLength","type":"uint256"},{"internalType":"uint256","name":"vestingInterval","type":"uint256"}],"name":"grant","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"grants","outputs":[{"internalType":"uint256","name":"totalGranted","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"cliffLength","type":"uint256"},{"internalType":"uint256","name":"vestingInterval","type":"uint256"},{"internalType":"uint256","name":"revokedAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDistributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewards","type":"uint256"}],"name":"loadRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"revokeGrant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20withDec","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenLaunchTimeInSeconds","type":"uint256"}],"name":"setTokenLaunchTimeInSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLaunchTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"totalUnclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"},{"internalType":"uint256","name":"granted","type":"uint256"},{"internalType":"uint256","name":"cliffLength","type":"uint256"},{"internalType":"uint256","name":"vestingInterval","type":"uint256"},{"internalType":"uint256","name":"revokedAt","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"totalVestedAt","outputs":[{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unclaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateGoldfinchConfig","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50613bdf806100206000396000f3fe608060405234801561001057600080fd5b50600436106102c15760003560e01c806379502c551161017d578063b88d4fde116100d9578063d54a23d611610092578063d54a23d6146105ac578063e58378bb146105bf578063e63ab1e9146105c7578063e7a7250a146105cf578063e985e9c5146105d7578063f0bd87cc146105ea578063f62849be146105f2576102c1565b8063b88d4fde14610550578063c87b56dd14610563578063ca15c87314610576578063d1af0c7d14610589578063d539139314610591578063d547741f14610599576102c1565b806391d148541161013657806391d14854146104f757806395d89b411461050a5780639835fc7e1461051257806398bcede914610525578063a217fddf1461052d578063a22cb46514610535578063b6db75a014610548576102c1565b806379502c551461049b5780637d0781b4146104a35780638092a3b1146104b65780638456cb59146104c95780638f41ab16146104d15780639010d07c146104e4576102c1565b8063248a9ca31161022c5780634f6ccce7116101e55780634f6ccce7146104375780634f92a7281461044a5780635c975abb146104525780636352211e1461045a57806363b114721461046d5780636c0360eb1461048057806370a0823114610488576102c1565b8063248a9ca3146103d05780632f2ff15d146103e35780632f745c59146103f657806336568abe146104095780633f4ba83a1461041c57806342842e0e14610424576102c1565b806318160ddd1161027e57806318160ddd1461036757806318ce4d941461037c5780631c4b774b1461038f5780631d33267a146103a2578063205282e6146103b557806323b872dd146103bd576102c1565b806301ffc9a7146102c657806306fdde03146102ef578063081812fc14610304578063095ea7b3146103245780630997a514146103395780630c0debea14610341575b600080fd5b6102d96102d4366004612d27565b610605565b6040516102e69190612f01565b60405180910390f35b6102f7610628565b6040516102e69190612f15565b610317610312366004612cca565b6106be565b6040516102e69190612e73565b610337610332366004612c40565b61070a565b005b6102d96107a2565b61035461034f366004612cca565b6107c3565b6040516102e69796959493929190613a66565b61036f610801565b6040516102e69190612f0c565b61036f61038a366004612c6b565b61080d565b61033761039d366004612cca565b6108ab565b6103376103b0366004612cca565b6109ca565b61036f610ae5565b6103376103cb366004612af7565b610aec565b61036f6103de366004612cca565b610b24565b6103376103f1366004612ce2565b610b39565b61036f610404366004612c40565b610b81565b610337610417366004612ce2565b610bac565b610337610bee565b610337610432366004612af7565b610c2e565b61036f610445366004612cca565b610c49565b610337610c5f565b6102d9610d0d565b610317610468366004612cca565b610d16565b61036f61047b366004612d5f565b610d3e565b6102f7610d5d565b61036f610496366004612a87565b610dbe565b610317610e07565b6103376104b1366004612cca565b610e17565b61036f6104c4366004612cca565b610e41565b610337610e4c565b6103376104df366004612c2c565b610e8a565b6103176104f2366004612d06565b61108d565b6102d9610505366004612ce2565b6110a5565b6102f76110bd565b61036f610520366004612cca565b61111e565b61036f611136565b61036f61113d565b610337610543366004612bff565b611142565b6102d9611210565b61033761055e366004612b37565b61122c565b6102f7610571366004612cca565b611265565b61036f610584366004612cca565b6113af565b6103176113c6565b61036f6113df565b6103376105a7366004612ce2565b611403565b61036f6105ba366004612a87565b61143d565b61036f611485565b61036f611497565b61036f6114a9565b6102d96105e5366004612abf565b6114b0565b61036f6114de565b610337610600366004612cca565b6114f0565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b60ce8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b820191906000526020600020905b81548152906001019060200180831161069757829003601f168201915b5050505050905090565b60006106c98261159f565b6106ee5760405162461bcd60e51b81526004016106e590613563565b60405180910390fd5b50600090815260cc60205260409020546001600160a01b031690565b600061071582610d16565b9050806001600160a01b0316836001600160a01b031614156107495760405162461bcd60e51b81526004016106e5906136e6565b806001600160a01b031661075b6115ac565b6001600160a01b031614806107775750610777816105e56115ac565b6107935760405162461bcd60e51b81526004016106e5906133d2565b61079d83836115b0565b505050565b60006107be600080516020613afc8339815191526105056115ac565b905090565b6101c6602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b60006107be60ca61161e565b6101915460009060ff166108335760405162461bcd60e51b81526004016106e59061384f565b610191805460ff1916905560fb5460ff16156108615760405162461bcd60e51b81526004016106e590613378565b6108696107a2565b6108855760405162461bcd60e51b81526004016106e590613695565b6108928686868686611629565b9050610191805460ff1916600117905595945050505050565b6101915460ff166108ce5760405162461bcd60e51b81526004016106e59061384f565b610191805460ff1916905560fb5460ff16156108fc5760405162461bcd60e51b81526004016106e590613378565b3361090682610d16565b6001600160a01b03161461092c5760405162461bcd60e51b81526004016106e590613778565b60006109378261111e565b905080156109b85760008281526101c66020526040902061095890826117d7565b61097533826109656113c6565b6001600160a01b031691906117f2565b81336001600160a01b03167fd6f2c8500df5b44f11e9e48b91ff9f1b9d81bc496d55570c2b1b75bf65243f51836040516109af9190612f0c565b60405180910390a35b5050610191805460ff19166001179055565b60fb5460ff16156109ed5760405162461bcd60e51b81526004016106e590613378565b6109f5611210565b610a115760405162461bcd60e51b81526004016106e590613968565b60008181526101c6602052604090208054610a3e5760405162461bcd60e51b81526004016106e59061352c565b600681015415610a605760405162461bcd60e51b81526004016106e59061379f565b6000610a6c8242611848565b905060008111610a8e5760405162461bcd60e51b81526004016106e5906133a2565b6101c454610a9c908261185f565b6101c45542600683015560405183907f99b158d692e9c5440d29424d4441593c29ad41c52383617e45098ecb1fba2e0890610ad8908490612f0c565b60405180910390a2505050565b6101c55481565b610afd610af76115ac565b82611884565b610b195760405162461bcd60e51b81526004016106e590613727565b61079d838383611909565b60009081526065602052604090206002015490565b600082815260656020526040902060020154610b57906105056115ac565b610b735760405162461bcd60e51b81526004016106e590612fb5565b610b7d8282611a17565b5050565b6001600160a01b038216600090815260c960205260408120610ba39083611a80565b90505b92915050565b610bb46115ac565b6001600160a01b0316816001600160a01b031614610be45760405162461bcd60e51b81526004016106e5906139b3565b610b7d8282611a8c565b610c08600080516020613b658339815191526105056115ac565b610c245760405162461bcd60e51b81526004016106e5906138d3565b610c2c611af5565b565b61079d8383836040518060200160405280600081525061122c565b600080610c5760ca84611b61565b509392505050565b610c67611210565b610c835760405162461bcd60e51b81526004016106e590613968565b6101c354610c99906001600160a01b0316611b7d565b6101c380546001600160a01b0319166001600160a01b0392909216919091179055610cc26115ac565b6101c3546040516001600160a01b03928316927f7c76c17de59691df2ef36af3938c91f69cd18ad27f67a54a38e38686f0b40c4992610d0392911690612e73565b60405180910390a2565b60fb5460ff1690565b6000610ba682604051806060016040528060298152602001613b3c6029913960ca9190611bfd565b6000610d4f88888888888888611c14565b90505b979650505050505050565b60d18054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b60006001600160a01b038216610de65760405162461bcd60e51b81526004016106e59061342a565b6001600160a01b038216600090815260c960205260409020610ba69061161e565b6101c3546001600160a01b031681565b610e1f611210565b610e3b5760405162461bcd60e51b81526004016106e590613968565b6101c555565b6000610ba682611ca8565b610e66600080516020613b658339815191526105056115ac565b610e825760405162461bcd60e51b81526004016106e5906131d3565b610c2c611cc2565b600054610100900460ff1680610ea35750610ea3611d1b565b80610eb1575060005460ff16155b610ecd5760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015610ef8576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03841615801590610f1857506001600160a01b03831615155b610f345760405162461bcd60e51b81526004016106e590613032565b610f3c611d21565b610f44611da4565b610f87604051806060016040528060258152602001613b85602591396040518060400160405280600981526020016823a32496ab1916a1a960b91b815250611e22565b610f8f611d21565b610f97611d21565b610f9f611efe565b610fa7611f8a565b610fbf600080516020613b1c83398151915285610b73565b610fd7600080516020613b6583398151915285610b73565b610fef600080516020613afc83398151915285610b73565b611007600080516020613b1c8339815191528061201a565b61102d600080516020613b65833981519152600080516020613b1c83398151915261201a565b611053600080516020613afc833981519152600080516020613b1c83398151915261201a565b6101c58290556101c380546001600160a01b0319166001600160a01b0385161790558015611087576000805461ff00191690555b50505050565b6000828152606560205260408120610ba39083611a80565b6000828152606560205260408120610ba3908361202f565b60cf8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b60008181526101c660205260408120610ba690612044565b61015f5481565b600081565b61114a6115ac565b6001600160a01b0316826001600160a01b0316141561117b5760405162461bcd60e51b81526004016106e590613274565b8060cd60006111886115ac565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556111cc6115ac565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112049190612f01565b60405180910390a35050565b60006107be600080516020613b1c8339815191526105056115ac565b61123d6112376115ac565b83611884565b6112595760405162461bcd60e51b81526004016106e590613727565b61108784848484612050565b60606112708261159f565b61128c5760405162461bcd60e51b81526004016106e590613646565b600082815260d0602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156113215780601f106112f657610100808354040283529160200191611321565b820191906000526020600020905b81548152906001019060200180831161130457829003601f168201915b505060d1549394505050506002600019610100600184161502019091160461134a579050610623565b80511561137c5760d181604051602001611365929190612df2565b604051602081830303815290604052915050610623565b60d161138784612083565b604051602001611398929190612df2565b604051602081830303815290604052915050919050565b6000818152606560205260408120610ba69061161e565b6101c3546000906107be906001600160a01b031661215e565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b600082815260656020526040902060020154611421906105056115ac565b610be45760405162461bcd60e51b81526004016106e590613328565b600080805b61144b84610dbe565b81101561147e57600061145e8583610b81565b905061147361146c82611ca8565b849061185f565b925050600101611442565b5092915050565b600080516020613b1c83398151915281565b600080516020613b6583398151915281565b6101c45481565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205460ff1690565b600080516020613afc83398151915281565b6114f8611210565b6115145760405162461bcd60e51b81526004016106e590613968565b600081116115345760405162461bcd60e51b81526004016106e590613105565b6101c454611542908261185f565b6101c4556115653330836115546113c6565b6001600160a01b0316929190612169565b7fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d816040516115949190612f0c565b60405180910390a150565b6000610ba660ca8361218a565b3390565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115e582610d16565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610ba682612196565b600080851161164a5760405162461bcd60e51b81526004016106e5906137d6565b8383111561166a5760405162461bcd60e51b81526004016106e590613a02565b6101c45485111561168d5760405162461bcd60e51b81526004016106e590613886565b838211156116ad5760405162461bcd60e51b81526004016106e59061316b565b816116b6578391505b6101c4546116c4908661219a565b6101c4556116d361015f6121dc565b6116de61015f612196565b90506040518060e00160405280868152602001600081526020016101c5548152602001611717866101c55461185f90919063ffffffff16565b815260208082018690526040808301869052600060609384018190528581526101c683528190208451815591840151600183015583015160028201559082015160038201556080820151600482015560a0820151600582015560c09091015160069091015561178686826121e5565b80866001600160a01b03167f13fce371c40438299d0ef0c6274292b9b9989523253a77f15706673efe5863b8878787876040516117c69493929190613a4b565b60405180910390a395945050505050565b60018201546117e6908261185f565b82600101819055505050565b61079d8363a9059cbb60e01b8484604051602401611811929190612ee8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526122a9565b6000610ba3611857848461238e565b84549061219a565b600082820183811015610ba35760405162461bcd60e51b81526004016106e59061319c565b600061188f8261159f565b6118ab5760405162461bcd60e51b81526004016106e5906132dc565b60006118b683610d16565b9050806001600160a01b0316846001600160a01b031614806118f15750836001600160a01b03166118e6846106be565b6001600160a01b0316145b80611901575061190181856114b0565b949350505050565b826001600160a01b031661191c82610d16565b6001600160a01b0316146119425760405162461bcd60e51b81526004016106e5906135fd565b6001600160a01b0382166119685760405162461bcd60e51b81526004016106e590613230565b6119738383836123b7565b61197e6000826115b0565b6001600160a01b038316600090815260c9602052604090206119a090826123c2565b506001600160a01b038216600090815260c9602052604090206119c390826123ce565b506119d060ca82846123da565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000828152606560205260409020611a2f90826123f0565b15610b7d57611a3c6115ac565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610ba38383612405565b6000828152606560205260409020611aa4908261244a565b15610b7d57611ab16115ac565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60fb5460ff16611b175760405162461bcd60e51b81526004016106e590613004565b60fb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b4a6115ac565b604051611b579190612e73565b60405180910390a1565b6000808080611b70868661245f565b9097909650945050505050565b60006001600160a01b03821663b93f9b0a600b5b6040518263ffffffff1660e01b8152600401611bad9190612f0c565b60206040518083038186803b158015611bc557600080fd5b505afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190612aa3565b6000611c0a8484846124bb565b90505b9392505050565b6000611c20888661185f565b821015611c2f57506000610d52565b878711611c3d575084610d52565b6000808411611c4c5782611c56565b611c56848461251a565b90506000611c6e86611c68848d61219a565b90612530565b90506000611c8087611c688c8e61219a565b9050611c99611c9382611c688c86612572565b8a61251a565b9b9a5050505050505050505050565b60009081526101c660205260409020600181015490540390565b60fb5460ff1615611ce55760405162461bcd60e51b81526004016106e590613378565b60fb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b4a6115ac565b303b1590565b600054610100900460ff1680611d3a5750611d3a611d1b565b80611d48575060005460ff16155b611d645760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611d8f576000805460ff1961ff0019909116610100171660011790555b8015611da1576000805461ff00191690555b50565b600054610100900460ff1680611dbd5750611dbd611d1b565b80611dcb575060005460ff16155b611de75760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611e12576000805460ff1961ff0019909116610100171660011790555b611d8f6301ffc9a760e01b6125ac565b600054610100900460ff1680611e3b5750611e3b611d1b565b80611e49575060005460ff16155b611e655760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611e90576000805460ff1961ff0019909116610100171660011790555b8251611ea39060ce9060208601906129f4565b508151611eb79060cf9060208501906129f4565b50611ec86380ac58cd60e01b6125ac565b611ed8635b5e139f60e01b6125ac565b611ee863780e9d6360e01b6125ac565b801561079d576000805461ff0019169055505050565b600054610100900460ff1680611f175750611f17611d1b565b80611f25575060005460ff16155b611f415760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611f6c576000805460ff1961ff0019909116610100171660011790555b60fb805460ff191690558015611da1576000805461ff001916905550565b600054610100900460ff1680611fa35750611fa3611d1b565b80611fb1575060005460ff16155b611fcd5760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611ff8576000805460ff1961ff0019909116610100171660011790555b610191805460ff191660011790558015611da1576000805461ff001916905550565b60009182526065602052604090912060020155565b6000610ba3836001600160a01b0384166125fb565b6000610ba68242612613565b61205b848484611909565b6120678484848461262f565b6110875760405162461bcd60e51b81526004016106e59061307c565b6060816120a857506040805180820190915260018152600360fc1b6020820152610623565b8160005b81156120c057600101600a820491506120ac565b60608167ffffffffffffffff811180156120d957600080fd5b506040519080825280601f01601f191660200182016040528015612104576020820181803683370190505b50859350905060001982015b831561215557600a840660300160f81b8282806001900393508151811061213357fe5b60200101906001600160f81b031916908160001a905350600a84049350612110565b50949350505050565b6000610ba682612769565b611087846323b872dd60e01b85858560405160240161181193929190612ec4565b6000610ba383836125fb565b5490565b6000610ba383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612781565b80546001019055565b6001600160a01b03821661220b5760405162461bcd60e51b81526004016106e5906134b6565b6122148161159f565b156122315760405162461bcd60e51b81526004016106e590613134565b61223d600083836123b7565b6001600160a01b038216600090815260c96020526040902061225f90826123ce565b5061226c60ca82846123da565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6122bb826001600160a01b03166127ad565b6122d75760405162461bcd60e51b81526004016106e590613931565b60006060836001600160a01b0316836040516122f39190612dd6565b6000604051808303816000865af19150503d8060008114612330576040519150601f19603f3d011682016040523d82523d6000602084013e612335565b606091505b5091509150816123575760405162461bcd60e51b81526004016106e5906132a7565b80511561108757808060200190518101906123729190612cae565b6110875760405162461bcd60e51b81526004016106e590613805565b6000610ba383600201548460030154856000015486600401548760050154886006015488611c14565b61079d8383836127e6565b6000610ba38383612816565b6000610ba383836128dc565b6000611c0a84846001600160a01b038516612926565b6000610ba3836001600160a01b0384166128dc565b815460009082106124285760405162461bcd60e51b81526004016106e590612f28565b82600001828154811061243757fe5b9060005260206000200154905092915050565b6000610ba3836001600160a01b038416612816565b8154600090819083106124845760405162461bcd60e51b81526004016106e590613474565b600084600001848154811061249557fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816124eb5760405162461bcd60e51b81526004016106e59190612f15565b508460000160018203815481106124fe57fe5b9060005260206000209060020201600101549150509392505050565b60008183106125295781610ba3565b5090919050565b6000610ba383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129bd565b60008261258157506000610ba6565b8282028284828161258e57fe5b0414610ba35760405162461bcd60e51b81526004016106e5906134eb565b6001600160e01b031980821614156125d65760405162461bcd60e51b81526004016106e5906130ce565b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b60009081526001919091016020526040902054151590565b6001820154600090610ba390612629858561238e565b9061219a565b6000612643846001600160a01b03166127ad565b61264f57506001611901565b600060606001600160a01b038616630a85bd0160e11b61266d6115ac565b8988886040516024016126839493929190612e87565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516126c19190612dd6565b6000604051808303816000865af19150503d80600081146126fe576040519150601f19603f3d011682016040523d82523d6000602084013e612703565b606091505b5091509150816127355780511561271d5780518082602001fd5b60405162461bcd60e51b81526004016106e59061307c565b60008180602001905181019061274b9190612d43565b6001600160e01b031916630a85bd0160e11b14935061190192505050565b60006001600160a01b03821663b93f9b0a6012611b91565b600081848411156127a55760405162461bcd60e51b81526004016106e59190612f15565b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611901575050151592915050565b6127f183838361079d565b6127f9610d0d565b1561079d5760405162461bcd60e51b81526004016106e590612f6a565b600081815260018301602052604081205480156128d2578354600019808301919081019060009087908390811061284957fe5b906000526020600020015490508087600001848154811061286657fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061289657fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ba6565b6000915050610ba6565b60006128e883836125fb565b61291e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ba6565b506000610ba6565b60008281526001840160205260408120548061298b575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c0d565b8285600001600183038154811061299e57fe5b9060005260206000209060020201600101819055506000915050611c0d565b600081836129de5760405162461bcd60e51b81526004016106e59190612f15565b5060008385816129ea57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a3557805160ff1916838001178555612a62565b82800160010185558215612a62579182015b82811115612a62578251825591602001919060010190612a47565b50612a6e929150612a72565b5090565b5b80821115612a6e5760008155600101612a73565b600060208284031215612a98578081fd5b8135610ba381613ac2565b600060208284031215612ab4578081fd5b8151610ba381613ac2565b60008060408385031215612ad1578081fd5b8235612adc81613ac2565b91506020830135612aec81613ac2565b809150509250929050565b600080600060608486031215612b0b578081fd5b8335612b1681613ac2565b92506020840135612b2681613ac2565b929592945050506040919091013590565b60008060008060808587031215612b4c578081fd5b8435612b5781613ac2565b9350602085810135612b6881613ac2565b935060408601359250606086013567ffffffffffffffff80821115612b8b578384fd5b818801915088601f830112612b9e578384fd5b813581811115612bac578485fd5b604051601f8201601f1916810185018381118282101715612bcb578687fd5b60405281815283820185018b1015612be1578586fd5b81858501868301379081019093019390935250939692955090935050565b60008060408385031215612c11578182fd5b8235612c1c81613ac2565b91506020830135612aec81613ad7565b600080600060608486031215612b0b578283fd5b60008060408385031215612c52578182fd5b8235612c5d81613ac2565b946020939093013593505050565b600080600080600060a08688031215612c82578081fd5b8535612c8d81613ac2565b97602087013597506040870135966060810135965060800135945092505050565b600060208284031215612cbf578081fd5b8151610ba381613ad7565b600060208284031215612cdb578081fd5b5035919050565b60008060408385031215612cf4578182fd5b823591506020830135612aec81613ac2565b60008060408385031215612d18578182fd5b50508035926020909101359150565b600060208284031215612d38578081fd5b8135610ba381613ae5565b600060208284031215612d54578081fd5b8151610ba381613ae5565b600080600080600080600060e0888a031215612d79578485fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008151808452612dc2816020860160208601613a96565b601f01601f19169290920160200192915050565b60008251612de8818460208701613a96565b9190910192915050565b6000808454600180821660008114612e115760018114612e2857612e57565b60ff198316865260028304607f1686019350612e57565b600283048886526020808720875b83811015612e4f5781548a820152908501908201612e36565b505050860193505b5050508351612e6a818360208801613a96565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612eba90830184612daa565b9695505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b600060208252610ba36020830184612daa565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252602b908201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760408201526a1a1a5b19481c185d5cd95960aa1b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252602a908201527f4f776e657220616e6420636f6e666967206164647265737365732063616e6e6f6040820152697420626520656d70747960b01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b60208082526015908201527443616e6e6f74206c6f61642030207265776172647360581b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260179082015276125b9d985b1a59081d995cdd1a5b99d25b9d195c9d985b604a1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252603e908201527f4552433732315072657365744d696e7465725061757365724175746f49643a2060408201527f6d75737420686176652070617573657220726f6c6520746f2070617573650000606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526016908201527511dc985b9d081a185cc8199d5b1b1e481d995cdd195960521b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776040820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526022908201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601e908201527f4772616e74206e6f7420646566696e656420666f7220746f6b656e2069640000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4d7573742068617665206469737472696275746f7220726f6c6520746f207065604082015270393337b936903a3434b99030b1ba34b7b760791b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600d908201526c1858d8d95cdcc819195b9a5959609a1b604082015260600190565b6020808252601e908201527f4772616e742068617320616c7265616479206265656e207265766f6b65640000604082015260600190565b60208082526015908201527410d85b9b9bdd0819dc985b9d080c08185b5bdd5b9d605a1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602d908201527f43616e6e6f74206772616e7420616d6f756e742064756520746f20696e73756660408201526c66696369656e742066756e647360981b606082015260800190565b602080825260409082018190527f4552433732315072657365744d696e7465725061757365724175746f49643a20908201527f6d75737420686176652070617573657220726f6c6520746f20756e7061757365606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b6020808252602b908201527f4d75737420686176652061646d696e20726f6c6520746f20706572666f726d2060408201526a3a3434b99030b1ba34b7b760a91b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b60208082526029908201527f436c696666206c656e6774682063616e6e6f74206578636565642076657374696040820152680dcce40d8cadccee8d60bb1b606082015260800190565b93845260208401929092526040830152606082015260800190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60005b83811015613ab1578181015183820152602001613a99565b838111156110875750506000910152565b6001600160a01b0381168114611da157600080fd5b8015158114611da157600080fd5b6001600160e01b031981168114611da157600080fdfefbd454f36a7e1a388bd6fc3ab10d434aa4578f811acbbcf33afb1c697486313cb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a476f6c6466696e636820563220436f6d6d756e697479205265776172647320546f6b656e73a2646970667358221220d618eaf2a019ef24bfc6e21f96fc8caed824e09af9878566968d73b34bfb921164736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102c15760003560e01c806379502c551161017d578063b88d4fde116100d9578063d54a23d611610092578063d54a23d6146105ac578063e58378bb146105bf578063e63ab1e9146105c7578063e7a7250a146105cf578063e985e9c5146105d7578063f0bd87cc146105ea578063f62849be146105f2576102c1565b8063b88d4fde14610550578063c87b56dd14610563578063ca15c87314610576578063d1af0c7d14610589578063d539139314610591578063d547741f14610599576102c1565b806391d148541161013657806391d14854146104f757806395d89b411461050a5780639835fc7e1461051257806398bcede914610525578063a217fddf1461052d578063a22cb46514610535578063b6db75a014610548576102c1565b806379502c551461049b5780637d0781b4146104a35780638092a3b1146104b65780638456cb59146104c95780638f41ab16146104d15780639010d07c146104e4576102c1565b8063248a9ca31161022c5780634f6ccce7116101e55780634f6ccce7146104375780634f92a7281461044a5780635c975abb146104525780636352211e1461045a57806363b114721461046d5780636c0360eb1461048057806370a0823114610488576102c1565b8063248a9ca3146103d05780632f2ff15d146103e35780632f745c59146103f657806336568abe146104095780633f4ba83a1461041c57806342842e0e14610424576102c1565b806318160ddd1161027e57806318160ddd1461036757806318ce4d941461037c5780631c4b774b1461038f5780631d33267a146103a2578063205282e6146103b557806323b872dd146103bd576102c1565b806301ffc9a7146102c657806306fdde03146102ef578063081812fc14610304578063095ea7b3146103245780630997a514146103395780630c0debea14610341575b600080fd5b6102d96102d4366004612d27565b610605565b6040516102e69190612f01565b60405180910390f35b6102f7610628565b6040516102e69190612f15565b610317610312366004612cca565b6106be565b6040516102e69190612e73565b610337610332366004612c40565b61070a565b005b6102d96107a2565b61035461034f366004612cca565b6107c3565b6040516102e69796959493929190613a66565b61036f610801565b6040516102e69190612f0c565b61036f61038a366004612c6b565b61080d565b61033761039d366004612cca565b6108ab565b6103376103b0366004612cca565b6109ca565b61036f610ae5565b6103376103cb366004612af7565b610aec565b61036f6103de366004612cca565b610b24565b6103376103f1366004612ce2565b610b39565b61036f610404366004612c40565b610b81565b610337610417366004612ce2565b610bac565b610337610bee565b610337610432366004612af7565b610c2e565b61036f610445366004612cca565b610c49565b610337610c5f565b6102d9610d0d565b610317610468366004612cca565b610d16565b61036f61047b366004612d5f565b610d3e565b6102f7610d5d565b61036f610496366004612a87565b610dbe565b610317610e07565b6103376104b1366004612cca565b610e17565b61036f6104c4366004612cca565b610e41565b610337610e4c565b6103376104df366004612c2c565b610e8a565b6103176104f2366004612d06565b61108d565b6102d9610505366004612ce2565b6110a5565b6102f76110bd565b61036f610520366004612cca565b61111e565b61036f611136565b61036f61113d565b610337610543366004612bff565b611142565b6102d9611210565b61033761055e366004612b37565b61122c565b6102f7610571366004612cca565b611265565b61036f610584366004612cca565b6113af565b6103176113c6565b61036f6113df565b6103376105a7366004612ce2565b611403565b61036f6105ba366004612a87565b61143d565b61036f611485565b61036f611497565b61036f6114a9565b6102d96105e5366004612abf565b6114b0565b61036f6114de565b610337610600366004612cca565b6114f0565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b60ce8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b820191906000526020600020905b81548152906001019060200180831161069757829003601f168201915b5050505050905090565b60006106c98261159f565b6106ee5760405162461bcd60e51b81526004016106e590613563565b60405180910390fd5b50600090815260cc60205260409020546001600160a01b031690565b600061071582610d16565b9050806001600160a01b0316836001600160a01b031614156107495760405162461bcd60e51b81526004016106e5906136e6565b806001600160a01b031661075b6115ac565b6001600160a01b031614806107775750610777816105e56115ac565b6107935760405162461bcd60e51b81526004016106e5906133d2565b61079d83836115b0565b505050565b60006107be600080516020613afc8339815191526105056115ac565b905090565b6101c6602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919087565b60006107be60ca61161e565b6101915460009060ff166108335760405162461bcd60e51b81526004016106e59061384f565b610191805460ff1916905560fb5460ff16156108615760405162461bcd60e51b81526004016106e590613378565b6108696107a2565b6108855760405162461bcd60e51b81526004016106e590613695565b6108928686868686611629565b9050610191805460ff1916600117905595945050505050565b6101915460ff166108ce5760405162461bcd60e51b81526004016106e59061384f565b610191805460ff1916905560fb5460ff16156108fc5760405162461bcd60e51b81526004016106e590613378565b3361090682610d16565b6001600160a01b03161461092c5760405162461bcd60e51b81526004016106e590613778565b60006109378261111e565b905080156109b85760008281526101c66020526040902061095890826117d7565b61097533826109656113c6565b6001600160a01b031691906117f2565b81336001600160a01b03167fd6f2c8500df5b44f11e9e48b91ff9f1b9d81bc496d55570c2b1b75bf65243f51836040516109af9190612f0c565b60405180910390a35b5050610191805460ff19166001179055565b60fb5460ff16156109ed5760405162461bcd60e51b81526004016106e590613378565b6109f5611210565b610a115760405162461bcd60e51b81526004016106e590613968565b60008181526101c6602052604090208054610a3e5760405162461bcd60e51b81526004016106e59061352c565b600681015415610a605760405162461bcd60e51b81526004016106e59061379f565b6000610a6c8242611848565b905060008111610a8e5760405162461bcd60e51b81526004016106e5906133a2565b6101c454610a9c908261185f565b6101c45542600683015560405183907f99b158d692e9c5440d29424d4441593c29ad41c52383617e45098ecb1fba2e0890610ad8908490612f0c565b60405180910390a2505050565b6101c55481565b610afd610af76115ac565b82611884565b610b195760405162461bcd60e51b81526004016106e590613727565b61079d838383611909565b60009081526065602052604090206002015490565b600082815260656020526040902060020154610b57906105056115ac565b610b735760405162461bcd60e51b81526004016106e590612fb5565b610b7d8282611a17565b5050565b6001600160a01b038216600090815260c960205260408120610ba39083611a80565b90505b92915050565b610bb46115ac565b6001600160a01b0316816001600160a01b031614610be45760405162461bcd60e51b81526004016106e5906139b3565b610b7d8282611a8c565b610c08600080516020613b658339815191526105056115ac565b610c245760405162461bcd60e51b81526004016106e5906138d3565b610c2c611af5565b565b61079d8383836040518060200160405280600081525061122c565b600080610c5760ca84611b61565b509392505050565b610c67611210565b610c835760405162461bcd60e51b81526004016106e590613968565b6101c354610c99906001600160a01b0316611b7d565b6101c380546001600160a01b0319166001600160a01b0392909216919091179055610cc26115ac565b6101c3546040516001600160a01b03928316927f7c76c17de59691df2ef36af3938c91f69cd18ad27f67a54a38e38686f0b40c4992610d0392911690612e73565b60405180910390a2565b60fb5460ff1690565b6000610ba682604051806060016040528060298152602001613b3c6029913960ca9190611bfd565b6000610d4f88888888888888611c14565b90505b979650505050505050565b60d18054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b60006001600160a01b038216610de65760405162461bcd60e51b81526004016106e59061342a565b6001600160a01b038216600090815260c960205260409020610ba69061161e565b6101c3546001600160a01b031681565b610e1f611210565b610e3b5760405162461bcd60e51b81526004016106e590613968565b6101c555565b6000610ba682611ca8565b610e66600080516020613b658339815191526105056115ac565b610e825760405162461bcd60e51b81526004016106e5906131d3565b610c2c611cc2565b600054610100900460ff1680610ea35750610ea3611d1b565b80610eb1575060005460ff16155b610ecd5760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015610ef8576000805460ff1961ff0019909116610100171660011790555b6001600160a01b03841615801590610f1857506001600160a01b03831615155b610f345760405162461bcd60e51b81526004016106e590613032565b610f3c611d21565b610f44611da4565b610f87604051806060016040528060258152602001613b85602591396040518060400160405280600981526020016823a32496ab1916a1a960b91b815250611e22565b610f8f611d21565b610f97611d21565b610f9f611efe565b610fa7611f8a565b610fbf600080516020613b1c83398151915285610b73565b610fd7600080516020613b6583398151915285610b73565b610fef600080516020613afc83398151915285610b73565b611007600080516020613b1c8339815191528061201a565b61102d600080516020613b65833981519152600080516020613b1c83398151915261201a565b611053600080516020613afc833981519152600080516020613b1c83398151915261201a565b6101c58290556101c380546001600160a01b0319166001600160a01b0385161790558015611087576000805461ff00191690555b50505050565b6000828152606560205260408120610ba39083611a80565b6000828152606560205260408120610ba3908361202f565b60cf8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b60008181526101c660205260408120610ba690612044565b61015f5481565b600081565b61114a6115ac565b6001600160a01b0316826001600160a01b0316141561117b5760405162461bcd60e51b81526004016106e590613274565b8060cd60006111886115ac565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556111cc6115ac565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112049190612f01565b60405180910390a35050565b60006107be600080516020613b1c8339815191526105056115ac565b61123d6112376115ac565b83611884565b6112595760405162461bcd60e51b81526004016106e590613727565b61108784848484612050565b60606112708261159f565b61128c5760405162461bcd60e51b81526004016106e590613646565b600082815260d0602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156113215780601f106112f657610100808354040283529160200191611321565b820191906000526020600020905b81548152906001019060200180831161130457829003601f168201915b505060d1549394505050506002600019610100600184161502019091160461134a579050610623565b80511561137c5760d181604051602001611365929190612df2565b604051602081830303815290604052915050610623565b60d161138784612083565b604051602001611398929190612df2565b604051602081830303815290604052915050919050565b6000818152606560205260408120610ba69061161e565b6101c3546000906107be906001600160a01b031661215e565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b600082815260656020526040902060020154611421906105056115ac565b610be45760405162461bcd60e51b81526004016106e590613328565b600080805b61144b84610dbe565b81101561147e57600061145e8583610b81565b905061147361146c82611ca8565b849061185f565b925050600101611442565b5092915050565b600080516020613b1c83398151915281565b600080516020613b6583398151915281565b6101c45481565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205460ff1690565b600080516020613afc83398151915281565b6114f8611210565b6115145760405162461bcd60e51b81526004016106e590613968565b600081116115345760405162461bcd60e51b81526004016106e590613105565b6101c454611542908261185f565b6101c4556115653330836115546113c6565b6001600160a01b0316929190612169565b7fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d816040516115949190612f0c565b60405180910390a150565b6000610ba660ca8361218a565b3390565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115e582610d16565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610ba682612196565b600080851161164a5760405162461bcd60e51b81526004016106e5906137d6565b8383111561166a5760405162461bcd60e51b81526004016106e590613a02565b6101c45485111561168d5760405162461bcd60e51b81526004016106e590613886565b838211156116ad5760405162461bcd60e51b81526004016106e59061316b565b816116b6578391505b6101c4546116c4908661219a565b6101c4556116d361015f6121dc565b6116de61015f612196565b90506040518060e00160405280868152602001600081526020016101c5548152602001611717866101c55461185f90919063ffffffff16565b815260208082018690526040808301869052600060609384018190528581526101c683528190208451815591840151600183015583015160028201559082015160038201556080820151600482015560a0820151600582015560c09091015160069091015561178686826121e5565b80866001600160a01b03167f13fce371c40438299d0ef0c6274292b9b9989523253a77f15706673efe5863b8878787876040516117c69493929190613a4b565b60405180910390a395945050505050565b60018201546117e6908261185f565b82600101819055505050565b61079d8363a9059cbb60e01b8484604051602401611811929190612ee8565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526122a9565b6000610ba3611857848461238e565b84549061219a565b600082820183811015610ba35760405162461bcd60e51b81526004016106e59061319c565b600061188f8261159f565b6118ab5760405162461bcd60e51b81526004016106e5906132dc565b60006118b683610d16565b9050806001600160a01b0316846001600160a01b031614806118f15750836001600160a01b03166118e6846106be565b6001600160a01b0316145b80611901575061190181856114b0565b949350505050565b826001600160a01b031661191c82610d16565b6001600160a01b0316146119425760405162461bcd60e51b81526004016106e5906135fd565b6001600160a01b0382166119685760405162461bcd60e51b81526004016106e590613230565b6119738383836123b7565b61197e6000826115b0565b6001600160a01b038316600090815260c9602052604090206119a090826123c2565b506001600160a01b038216600090815260c9602052604090206119c390826123ce565b506119d060ca82846123da565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000828152606560205260409020611a2f90826123f0565b15610b7d57611a3c6115ac565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610ba38383612405565b6000828152606560205260409020611aa4908261244a565b15610b7d57611ab16115ac565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60fb5460ff16611b175760405162461bcd60e51b81526004016106e590613004565b60fb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611b4a6115ac565b604051611b579190612e73565b60405180910390a1565b6000808080611b70868661245f565b9097909650945050505050565b60006001600160a01b03821663b93f9b0a600b5b6040518263ffffffff1660e01b8152600401611bad9190612f0c565b60206040518083038186803b158015611bc557600080fd5b505afa158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba69190612aa3565b6000611c0a8484846124bb565b90505b9392505050565b6000611c20888661185f565b821015611c2f57506000610d52565b878711611c3d575084610d52565b6000808411611c4c5782611c56565b611c56848461251a565b90506000611c6e86611c68848d61219a565b90612530565b90506000611c8087611c688c8e61219a565b9050611c99611c9382611c688c86612572565b8a61251a565b9b9a5050505050505050505050565b60009081526101c660205260409020600181015490540390565b60fb5460ff1615611ce55760405162461bcd60e51b81526004016106e590613378565b60fb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b4a6115ac565b303b1590565b600054610100900460ff1680611d3a5750611d3a611d1b565b80611d48575060005460ff16155b611d645760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611d8f576000805460ff1961ff0019909116610100171660011790555b8015611da1576000805461ff00191690555b50565b600054610100900460ff1680611dbd5750611dbd611d1b565b80611dcb575060005460ff16155b611de75760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611e12576000805460ff1961ff0019909116610100171660011790555b611d8f6301ffc9a760e01b6125ac565b600054610100900460ff1680611e3b5750611e3b611d1b565b80611e49575060005460ff16155b611e655760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611e90576000805460ff1961ff0019909116610100171660011790555b8251611ea39060ce9060208601906129f4565b508151611eb79060cf9060208501906129f4565b50611ec86380ac58cd60e01b6125ac565b611ed8635b5e139f60e01b6125ac565b611ee863780e9d6360e01b6125ac565b801561079d576000805461ff0019169055505050565b600054610100900460ff1680611f175750611f17611d1b565b80611f25575060005460ff16155b611f415760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611f6c576000805460ff1961ff0019909116610100171660011790555b60fb805460ff191690558015611da1576000805461ff001916905550565b600054610100900460ff1680611fa35750611fa3611d1b565b80611fb1575060005460ff16155b611fcd5760405162461bcd60e51b81526004016106e5906135af565b600054610100900460ff16158015611ff8576000805460ff1961ff0019909116610100171660011790555b610191805460ff191660011790558015611da1576000805461ff001916905550565b60009182526065602052604090912060020155565b6000610ba3836001600160a01b0384166125fb565b6000610ba68242612613565b61205b848484611909565b6120678484848461262f565b6110875760405162461bcd60e51b81526004016106e59061307c565b6060816120a857506040805180820190915260018152600360fc1b6020820152610623565b8160005b81156120c057600101600a820491506120ac565b60608167ffffffffffffffff811180156120d957600080fd5b506040519080825280601f01601f191660200182016040528015612104576020820181803683370190505b50859350905060001982015b831561215557600a840660300160f81b8282806001900393508151811061213357fe5b60200101906001600160f81b031916908160001a905350600a84049350612110565b50949350505050565b6000610ba682612769565b611087846323b872dd60e01b85858560405160240161181193929190612ec4565b6000610ba383836125fb565b5490565b6000610ba383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612781565b80546001019055565b6001600160a01b03821661220b5760405162461bcd60e51b81526004016106e5906134b6565b6122148161159f565b156122315760405162461bcd60e51b81526004016106e590613134565b61223d600083836123b7565b6001600160a01b038216600090815260c96020526040902061225f90826123ce565b5061226c60ca82846123da565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6122bb826001600160a01b03166127ad565b6122d75760405162461bcd60e51b81526004016106e590613931565b60006060836001600160a01b0316836040516122f39190612dd6565b6000604051808303816000865af19150503d8060008114612330576040519150601f19603f3d011682016040523d82523d6000602084013e612335565b606091505b5091509150816123575760405162461bcd60e51b81526004016106e5906132a7565b80511561108757808060200190518101906123729190612cae565b6110875760405162461bcd60e51b81526004016106e590613805565b6000610ba383600201548460030154856000015486600401548760050154886006015488611c14565b61079d8383836127e6565b6000610ba38383612816565b6000610ba383836128dc565b6000611c0a84846001600160a01b038516612926565b6000610ba3836001600160a01b0384166128dc565b815460009082106124285760405162461bcd60e51b81526004016106e590612f28565b82600001828154811061243757fe5b9060005260206000200154905092915050565b6000610ba3836001600160a01b038416612816565b8154600090819083106124845760405162461bcd60e51b81526004016106e590613474565b600084600001848154811061249557fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816124eb5760405162461bcd60e51b81526004016106e59190612f15565b508460000160018203815481106124fe57fe5b9060005260206000209060020201600101549150509392505050565b60008183106125295781610ba3565b5090919050565b6000610ba383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129bd565b60008261258157506000610ba6565b8282028284828161258e57fe5b0414610ba35760405162461bcd60e51b81526004016106e5906134eb565b6001600160e01b031980821614156125d65760405162461bcd60e51b81526004016106e5906130ce565b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b60009081526001919091016020526040902054151590565b6001820154600090610ba390612629858561238e565b9061219a565b6000612643846001600160a01b03166127ad565b61264f57506001611901565b600060606001600160a01b038616630a85bd0160e11b61266d6115ac565b8988886040516024016126839493929190612e87565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516126c19190612dd6565b6000604051808303816000865af19150503d80600081146126fe576040519150601f19603f3d011682016040523d82523d6000602084013e612703565b606091505b5091509150816127355780511561271d5780518082602001fd5b60405162461bcd60e51b81526004016106e59061307c565b60008180602001905181019061274b9190612d43565b6001600160e01b031916630a85bd0160e11b14935061190192505050565b60006001600160a01b03821663b93f9b0a6012611b91565b600081848411156127a55760405162461bcd60e51b81526004016106e59190612f15565b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611901575050151592915050565b6127f183838361079d565b6127f9610d0d565b1561079d5760405162461bcd60e51b81526004016106e590612f6a565b600081815260018301602052604081205480156128d2578354600019808301919081019060009087908390811061284957fe5b906000526020600020015490508087600001848154811061286657fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061289657fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610ba6565b6000915050610ba6565b60006128e883836125fb565b61291e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610ba6565b506000610ba6565b60008281526001840160205260408120548061298b575050604080518082018252838152602080820184815286546001818101895560008981528481209551600290930290950191825591519082015586548684528188019092529290912055611c0d565b8285600001600183038154811061299e57fe5b9060005260206000209060020201600101819055506000915050611c0d565b600081836129de5760405162461bcd60e51b81526004016106e59190612f15565b5060008385816129ea57fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a3557805160ff1916838001178555612a62565b82800160010185558215612a62579182015b82811115612a62578251825591602001919060010190612a47565b50612a6e929150612a72565b5090565b5b80821115612a6e5760008155600101612a73565b600060208284031215612a98578081fd5b8135610ba381613ac2565b600060208284031215612ab4578081fd5b8151610ba381613ac2565b60008060408385031215612ad1578081fd5b8235612adc81613ac2565b91506020830135612aec81613ac2565b809150509250929050565b600080600060608486031215612b0b578081fd5b8335612b1681613ac2565b92506020840135612b2681613ac2565b929592945050506040919091013590565b60008060008060808587031215612b4c578081fd5b8435612b5781613ac2565b9350602085810135612b6881613ac2565b935060408601359250606086013567ffffffffffffffff80821115612b8b578384fd5b818801915088601f830112612b9e578384fd5b813581811115612bac578485fd5b604051601f8201601f1916810185018381118282101715612bcb578687fd5b60405281815283820185018b1015612be1578586fd5b81858501868301379081019093019390935250939692955090935050565b60008060408385031215612c11578182fd5b8235612c1c81613ac2565b91506020830135612aec81613ad7565b600080600060608486031215612b0b578283fd5b60008060408385031215612c52578182fd5b8235612c5d81613ac2565b946020939093013593505050565b600080600080600060a08688031215612c82578081fd5b8535612c8d81613ac2565b97602087013597506040870135966060810135965060800135945092505050565b600060208284031215612cbf578081fd5b8151610ba381613ad7565b600060208284031215612cdb578081fd5b5035919050565b60008060408385031215612cf4578182fd5b823591506020830135612aec81613ac2565b60008060408385031215612d18578182fd5b50508035926020909101359150565b600060208284031215612d38578081fd5b8135610ba381613ae5565b600060208284031215612d54578081fd5b8151610ba381613ae5565b600080600080600080600060e0888a031215612d79578485fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b60008151808452612dc2816020860160208601613a96565b601f01601f19169290920160200192915050565b60008251612de8818460208701613a96565b9190910192915050565b6000808454600180821660008114612e115760018114612e2857612e57565b60ff198316865260028304607f1686019350612e57565b600283048886526020808720875b83811015612e4f5781548a820152908501908201612e36565b505050860193505b5050508351612e6a818360208801613a96565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612eba90830184612daa565b9695505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b600060208252610ba36020830184612daa565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252602b908201527f4552433732315061757361626c653a20746f6b656e207472616e73666572207760408201526a1a1a5b19481c185d5cd95960aa1b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252602a908201527f4f776e657220616e6420636f6e666967206164647265737365732063616e6e6f6040820152697420626520656d70747960b01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604082015260600190565b60208082526015908201527443616e6e6f74206c6f61642030207265776172647360581b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260179082015276125b9d985b1a59081d995cdd1a5b99d25b9d195c9d985b604a1b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252603e908201527f4552433732315072657365744d696e7465725061757365724175746f49643a2060408201527f6d75737420686176652070617573657220726f6c6520746f2070617573650000606082015260800190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604082015260600190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526016908201527511dc985b9d081a185cc8199d5b1b1e481d995cdd195960521b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776040820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526022908201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601e908201527f4772616e74206e6f7420646566696e656420666f7220746f6b656e2069640000604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526031908201527f4d7573742068617665206469737472696275746f7220726f6c6520746f207065604082015270393337b936903a3434b99030b1ba34b7b760791b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600d908201526c1858d8d95cdcc819195b9a5959609a1b604082015260600190565b6020808252601e908201527f4772616e742068617320616c7265616479206265656e207265766f6b65640000604082015260600190565b60208082526015908201527410d85b9b9bdd0819dc985b9d080c08185b5bdd5b9d605a1b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252602d908201527f43616e6e6f74206772616e7420616d6f756e742064756520746f20696e73756660408201526c66696369656e742066756e647360981b606082015260800190565b602080825260409082018190527f4552433732315072657365744d696e7465725061757365724175746f49643a20908201527f6d75737420686176652070617573657220726f6c6520746f20756e7061757365606082015260800190565b6020808252601f908201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604082015260600190565b6020808252602b908201527f4d75737420686176652061646d696e20726f6c6520746f20706572666f726d2060408201526a3a3434b99030b1ba34b7b760a91b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b606082015260800190565b60208082526029908201527f436c696666206c656e6774682063616e6e6f74206578636565642076657374696040820152680dcce40d8cadccee8d60bb1b606082015260800190565b93845260208401929092526040830152606082015260800190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60005b83811015613ab1578181015183820152602001613a99565b838111156110875750506000910152565b6001600160a01b0381168114611da157600080fd5b8015158114611da157600080fd5b6001600160e01b031981168114611da157600080fdfefbd454f36a7e1a388bd6fc3ab10d434aa4578f811acbbcf33afb1c697486313cb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a476f6c6466696e636820563220436f6d6d756e697479205265776172647320546f6b656e73a2646970667358221220d618eaf2a019ef24bfc6e21f96fc8caed824e09af9878566968d73b34bfb921164736f6c634300060c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.