Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 8 from a total of 8 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Asset | 19266319 | 382 days ago | IN | 0 ETH | 0.00113143 | ||||
Withdraw Asset | 19266311 | 382 days ago | IN | 0 ETH | 0.00076679 | ||||
Transfer Ownersh... | 18573366 | 479 days ago | IN | 0 ETH | 0.00090727 | ||||
Transfer | 14846860 | 1017 days ago | IN | 1 ETH | 0.00057709 | ||||
Add Available Lo... | 14725465 | 1036 days ago | IN | 0 ETH | 0.00206644 | ||||
Set Consumer | 14725461 | 1036 days ago | IN | 0 ETH | 0.0020532 | ||||
Add Available Co... | 14725461 | 1036 days ago | IN | 0 ETH | 0.0021583 | ||||
Transfer | 14725444 | 1036 days ago | IN | 1 ETH | 0.00092706 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 19266311 | 382 days ago | 1.37204814 ETH | ||||
Collect Installm... | 17812864 | 586 days ago | 0.0494 ETH | ||||
Collect Installm... | 17812862 | 586 days ago | 0.0494 ETH | ||||
Collect Installm... | 17229746 | 668 days ago | 0.0494 ETH | ||||
Transfer | 17090190 | 687 days ago | 0.034 ETH | ||||
Collect Installm... | 17087610 | 688 days ago | 0.052115 ETH | ||||
Transfer | 17087600 | 688 days ago | 0.20846 ETH | ||||
Collect Installm... | 17038699 | 695 days ago | 0.0475 ETH | ||||
Transfer | 17038693 | 695 days ago | 0.19 ETH | ||||
Collect Installm... | 17038642 | 695 days ago | 0.13274999 ETH | ||||
Transfer | 17038630 | 695 days ago | 0.17699999 ETH | ||||
Collect Installm... | 16947048 | 708 days ago | 0.00955 ETH | ||||
Transfer | 16947038 | 708 days ago | 0.0191 ETH | ||||
Collect Installm... | 16946415 | 708 days ago | 0.035 ETH | ||||
Transfer | 16946406 | 708 days ago | 0.07 ETH | ||||
Collect Installm... | 16939351 | 709 days ago | 0.0323 ETH | ||||
Transfer | 16939346 | 709 days ago | 0.1292 ETH | ||||
Collect Installm... | 16932265 | 710 days ago | 0.055 ETH | ||||
Transfer | 16932256 | 710 days ago | 0.11 ETH | ||||
Transfer | 16932204 | 710 days ago | 0.104 ETH | ||||
Collect Installm... | 16898162 | 715 days ago | 0.0925 ETH | ||||
Transfer | 16898131 | 715 days ago | 0.185 ETH | ||||
Collect Installm... | 16893017 | 715 days ago | 0.0245 ETH | ||||
Transfer | 16892998 | 715 days ago | 0.049 ETH | ||||
Collect Installm... | 16869919 | 719 days ago | 0.004992 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AssetManager
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./interfaces/IAssetManager.sol"; import "./interfaces/ITwapOraclePriceFeed.sol"; import "./libraries/TribeOneHelper.sol"; contract AssetManager is Ownable, ReentrancyGuard, IAssetManager { event AddAvailableLoanAsset(address _sender, address _asset); event SetLoanTwapOracle(address _asset, address _twap); event RemoveAvailableLoanAsset(address _sender, address _asset); event AddAvailableCollateralAsset(address _sender, address _asset); event RemoveAvailableCollateralAsset(address _sender, address _asset); event SetConsumer(address _setter, address _consumer); event SetAutomaticLoanLimit(address _setter, uint256 _oldLimit, uint256 _newLimit); event TransferAsset(address indexed _requester, address _to, address _token, uint256 _amount); event WithdrawAsset(address indexed _to, address _token, uint256 _amount); event SetTwapOracle(address indexed _asset, address _twap, address _user); mapping(address => bool) private availableLoanAsset; mapping(address => bool) private availableCollateralAsset; address private _consumer; uint256 public automaticLoanLimit = 200; // For now we allows NFTs only below 200 usd price address public immutable WETH; // This should be uniswap WETH address address public immutable USDC; // This should be uniswap USDC address mapping(address => address) private twapOracles; // loanAsset => twapOracle constructor(address _WETH, address _USDC) { require(_WETH != address(0) && _USDC != address(0), "AssetManager: ZERO address"); // Adding Native coins availableCollateralAsset[address(0)] = true; availableLoanAsset[address(0)] = true; WETH = _WETH; USDC = _USDC; } receive() external payable {} modifier onlyConsumer() { require(msg.sender == _consumer, "Not consumer"); _; } function consumer() external view returns (address) { return _consumer; } function priceOracle(address asset) external view returns (address) { return twapOracles[asset]; } function addAvailableLoanAsset(address _asset) external onlyOwner nonReentrant { require(!availableLoanAsset[_asset], "Already available"); availableLoanAsset[_asset] = true; emit AddAvailableLoanAsset(msg.sender, _asset); } function removeAvailableLoanAsset(address _asset) external onlyOwner nonReentrant { require(availableLoanAsset[_asset], "Already removed"); availableLoanAsset[_asset] = false; emit RemoveAvailableLoanAsset(msg.sender, _asset); } function addAvailableCollateralAsset(address _asset) external onlyOwner nonReentrant { require(!availableCollateralAsset[_asset], "Already available"); availableCollateralAsset[_asset] = true; emit AddAvailableCollateralAsset(msg.sender, _asset); } function removeAvailableCollateralAsset(address _asset) external onlyOwner nonReentrant { require(availableCollateralAsset[_asset], "Already removed"); availableCollateralAsset[_asset] = false; emit RemoveAvailableCollateralAsset(msg.sender, _asset); } function isAvailableLoanAsset(address _asset) external view override returns (bool) { return availableLoanAsset[_asset]; } function isAvailableCollateralAsset(address _asset) external view override returns (bool) { return availableCollateralAsset[_asset]; } function setConsumer(address _consumer_) external onlyOwner { require(_consumer_ != _consumer, "Already set as consumer"); require(_consumer_ != address(0), "ZERO_ADDRESS"); _consumer = _consumer_; emit SetConsumer(msg.sender, _consumer_); } function setLoanAssetTwapOracle(address _asset, address _twap) external onlyOwner nonReentrant { require(availableLoanAsset[_asset], "AssetManager: Invalid loan asset"); address token0 = ITwapOraclePriceFeed(_twap).token0(); address token1 = ITwapOraclePriceFeed(_twap).token1(); if (_asset == address(0)) { require((token0 == WETH && token1 == USDC) || (token0 == USDC && token1 == WETH), "AssetManager: Invalid twap"); } else { require((token0 == _asset && token1 == USDC) || (token0 == USDC && token1 == _asset), "AssetManager: Invalid twap"); } twapOracles[_asset] = _twap; emit SetTwapOracle(_asset, _twap, msg.sender); } function setAutomaticLoanLimit(uint256 _newLimit) external onlyOwner { require(automaticLoanLimit != _newLimit, "AssetManager: New value is same as old"); uint256 oldLimit = automaticLoanLimit; automaticLoanLimit = _newLimit; emit SetAutomaticLoanLimit(msg.sender, oldLimit, _newLimit); } function isValidAutomaticLoan(address _asset, uint256 _amountIn) external view override returns (bool) { require(availableLoanAsset[_asset], "AssetManager: Invalid loan asset"); uint256 usdcAmount; if (_asset == USDC) { usdcAmount = _amountIn; } else { address _twap = twapOracles[_asset]; require(_twap != address(0), "AssetManager: Twap oracle was not set"); if (_asset == address(0)) { _asset = WETH; } usdcAmount = ITwapOraclePriceFeed(_twap).consult(_asset, _amountIn); } return usdcAmount <= automaticLoanLimit * (10**IERC20Metadata(USDC).decimals()); } function requestETH(address _to, uint256 _amount) external override onlyConsumer { require(address(this).balance >= _amount, "Asset Manager: Insufficient balance"); TribeOneHelper.safeTransferETH(_to, _amount); emit TransferAsset(msg.sender, _to, address(0), _amount); } function requestToken( address _to, address _token, uint256 _amount ) external override onlyConsumer { require(IERC20(_token).balanceOf(address(this)) >= _amount, "Asset Manager: Insufficient balance"); TribeOneHelper.safeTransfer(_token, _to, _amount); emit TransferAsset(msg.sender, _to, _token, _amount); } function withdrawAsset( address _to, address _token, uint256 _amount ) external onlyOwner { require(_to != address(0), "ZERO Address"); if (_token == address(0)) { _amount = address(this).balance; TribeOneHelper.safeTransferETH(msg.sender, _amount); } else { TribeOneHelper.safeTransfer(_token, msg.sender, _amount); } emit WithdrawAsset(_to, _token, _amount); } function collectInstallment( address _currency, uint256 _amount, uint256 _interest, bool _collateral ) external payable override onlyConsumer { if (_currency == address(0)) { require(msg.value == _amount, "Wrong msg.value"); } else { TribeOneHelper.safeTransferFrom(_currency, msg.sender, address(this), _amount); } // We will supplement more detail in V2 // 80% interest will go to Funding pool rewarder contract, 20% wil be burn // If _collateral is true, then we transfer whole amount to funding pool } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.0; interface IAssetManager { function isAvailableLoanAsset(address _asset) external returns (bool); function isAvailableCollateralAsset(address _asset) external returns (bool); function isValidAutomaticLoan(address _asset, uint256 _amountIn) external returns (bool); function requestETH(address _to, uint256 _amount) external; function requestToken( address _to, address _token, uint256 _amount ) external; function collectInstallment( address _currency, uint256 _amount, uint256 _interest, bool _collateral ) external payable; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.0; interface ITwapOraclePriceFeed { function token0() external returns (address); function token1() external returns (address); function consult(address token, uint256 amountIn) external view returns (uint256 amountOut); }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; library TribeOneHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "TransferHelper::safeApprove: approve failed"); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "TribeOneHelper::safeTransfer: transfer failed"); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "TribeOneHelper::transferFrom: transferFrom failed"); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "TribeOneHelper::safeTransferETH: ETH transfer failed"); } function safeTransferAsset( address token, address to, uint256 value ) internal { if (token == address(0)) { safeTransferETH(to, value); } else { safeTransfer(token, to, value); } } function safeNFTApproveForAll( address nft, address operator, bool approved ) internal { // bytes4(keccak256(bytes('setApprovalForAll(address,bool)'))); (bool success, ) = nft.call(abi.encodeWithSelector(0xa22cb465, operator, approved)); require(success, "TribeOneHelper::safeNFTApproveForAll: Failed"); } function safeTransferNFT( address _nft, address _from, address _to, bool isERC721, uint256 _tokenId ) internal { if (isERC721) { IERC721(_nft).safeTransferFrom(_from, _to, _tokenId); } else { IERC1155(_nft).safeTransferFrom(_from, _to, _tokenId, 1, "0x00"); } } /** * @dev this function calculates expected price of NFT based on created LTV and fund amount, * LTV: 10000 = 100%; _slippage: 10000 = 100% */ function getExpectedPrice( uint256 _fundAmount, uint256 _percentage, uint256 _slippage ) internal pure returns (uint256) { require(_percentage != 0, "TribeOneHelper: percentage should not be 0"); return (_fundAmount * (10000 + _slippage)) / _percentage; } }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_WETH","type":"address"},{"internalType":"address","name":"_USDC","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_sender","type":"address"},{"indexed":false,"internalType":"address","name":"_asset","type":"address"}],"name":"AddAvailableCollateralAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_sender","type":"address"},{"indexed":false,"internalType":"address","name":"_asset","type":"address"}],"name":"AddAvailableLoanAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_sender","type":"address"},{"indexed":false,"internalType":"address","name":"_asset","type":"address"}],"name":"RemoveAvailableCollateralAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_sender","type":"address"},{"indexed":false,"internalType":"address","name":"_asset","type":"address"}],"name":"RemoveAvailableLoanAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_setter","type":"address"},{"indexed":false,"internalType":"uint256","name":"_oldLimit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"SetAutomaticLoanLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_setter","type":"address"},{"indexed":false,"internalType":"address","name":"_consumer","type":"address"}],"name":"SetConsumer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"address","name":"_twap","type":"address"}],"name":"SetLoanTwapOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_asset","type":"address"},{"indexed":false,"internalType":"address","name":"_twap","type":"address"},{"indexed":false,"internalType":"address","name":"_user","type":"address"}],"name":"SetTwapOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_requester","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"WithdrawAsset","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"addAvailableCollateralAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"addAvailableLoanAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"automaticLoanLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_currency","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_interest","type":"uint256"},{"internalType":"bool","name":"_collateral","type":"bool"}],"name":"collectInstallment","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"consumer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"isAvailableCollateralAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"isAvailableLoanAsset","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"isValidAutomaticLoan","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"priceOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"removeAvailableCollateralAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"}],"name":"removeAvailableLoanAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"requestETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"requestToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLimit","type":"uint256"}],"name":"setAutomaticLoanLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_consumer_","type":"address"}],"name":"setConsumer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_twap","type":"address"}],"name":"setLoanAssetTwapOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405260c86005553480156200001657600080fd5b506040516200214c3803806200214c833981016040819052620000399162000181565b60006200004562000160565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180556001600160a01b03821615801590620000b457506001600160a01b03811615155b620000dc5760405162461bcd60e51b8152600401620000d390620001b8565b60405180910390fd5b600080527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff805460ff19908116600190811790925560026020527fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b805490911690911790556001600160601b0319606092831b8116608052911b1660a052620001ef565b3390565b80516001600160a01b03811681146200017c57600080fd5b919050565b6000806040838503121562000194578182fd5b6200019f8362000164565b9150620001af6020840162000164565b90509250929050565b6020808252601a908201527f41737365744d616e616765723a205a45524f2061646472657373000000000000604082015260600190565b60805160601c60a05160601c611ef26200025a60003960008181610bff01528181610d2c01528181610dde0152818161105901528181611095015281816111440152611180015260008181610c860152818161101d015281816110d101526112620152611ef26000f3fe6080604052600436106101395760003560e01c80637cad9f80116100ab578063a80c0fcb1161006f578063a80c0fcb1461033e578063ad5c46481461035e578063b4fd729614610373578063cc16574114610388578063e9ad871c146103a8578063f2fde38b146103c857610140565b80637cad9f80146102bf57806384bc2109146102e157806389a30271146103015780638d12bec0146103165780638da5cb5b1461032957610140565b806346355931116100fd578063463559311461020a5780634965162a1461022a5780635a59fe121461024a57806363a579d51461026a5780636f59503f1461028a578063715018a6146102aa57610140565b806303a45b2e1461014557806308409d7714610167578063092ae4dc1461019d5780632951f1b2146101bd57806345d999e5146101ea57610140565b3661014057005b600080fd5b34801561015157600080fd5b506101656101603660046116d5565b6103e8565b005b34801561017357600080fd5b506101876101823660046116d5565b6104f8565b6040516101949190611932565b60405180910390f35b3480156101a957600080fd5b506101656101b836600461174c565b610516565b3480156101c957600080fd5b506101dd6101d83660046116d5565b6105ed565b60405161019491906118a6565b3480156101f657600080fd5b506101656102053660046116d5565b61060b565b34801561021657600080fd5b506101656102253660046116d5565b610700565b34801561023657600080fd5b5061016561024536600461174c565b6107f4565b34801561025657600080fd5b5061016561026536600461181c565b610902565b34801561027657600080fd5b506101656102853660046116d5565b6109ab565b34801561029657600080fd5b506101656102a536600461178c565b610a96565b3480156102b657600080fd5b50610165610b34565b3480156102cb57600080fd5b506102d4610bbd565b6040516101949190611d41565b3480156102ed57600080fd5b506101876102fc36600461178c565b610bc3565b34801561030d57600080fd5b506101dd610ddc565b6101656103243660046117b7565b610e00565b34801561033557600080fd5b506101dd610e6e565b34801561034a57600080fd5b50610165610359366004611714565b610e7d565b34801561036a57600080fd5b506101dd611260565b34801561037f57600080fd5b506101dd611284565b34801561039457600080fd5b506101876103a33660046116d5565b611293565b3480156103b457600080fd5b506101656103c33660046116d5565b6112b1565b3480156103d457600080fd5b506101656103e33660046116d5565b6113a2565b6103f0611462565b6001600160a01b0316610401610e6e565b6001600160a01b0316146104305760405162461bcd60e51b815260040161042790611aea565b60405180910390fd5b600260015414156104535760405162461bcd60e51b815260040161042790611cb6565b600260018190556001600160a01b0382166000908152602091909152604090205460ff16156104945760405162461bcd60e51b815260040161042790611a09565b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f4b8552befb3575c2944a1c44b568d5e87187e79de48331fd45ab251f09b281f4906104e990339084906118ba565b60405180910390a15060018055565b6001600160a01b031660009081526003602052604090205460ff1690565b61051e611462565b6001600160a01b031661052f610e6e565b6001600160a01b0316146105555760405162461bcd60e51b815260040161042790611aea565b6001600160a01b03831661057b5760405162461bcd60e51b815260040161042790611b8e565b6001600160a01b03821661059a5750476105953382611466565b6105a5565b6105a58233836114f8565b826001600160a01b03167f603c9f8bbe22d703e50963d4ec4d2aea4f7c8dd28de33bf36de740e5817fe31183836040516105e09291906118f8565b60405180910390a2505050565b6001600160a01b039081166000908152600660205260409020541690565b610613611462565b6001600160a01b0316610624610e6e565b6001600160a01b03161461064a5760405162461bcd60e51b815260040161042790611aea565b6002600154141561066d5760405162461bcd60e51b815260040161042790611cb6565b60026001556001600160a01b03811660009081526003602052604090205460ff16156106ab5760405162461bcd60e51b815260040161042790611a09565b6001600160a01b03811660009081526003602052604090819020805460ff19166001179055517f900809311d03ed855b3a322b8e963ca5b93bb69992987393e671eda26bec59e1906104e990339084906118ba565b610708611462565b6001600160a01b0316610719610e6e565b6001600160a01b03161461073f5760405162461bcd60e51b815260040161042790611aea565b600260015414156107625760405162461bcd60e51b815260040161042790611cb6565b600260018190556001600160a01b0382166000908152602091909152604090205460ff166107a25760405162461bcd60e51b815260040161042790611b65565b6001600160a01b03811660009081526002602052604090819020805460ff19169055517ff243657fe92d46df5f68763dd9f8e707b4d09bfc34409b17fbf1433a52141802906104e990339084906118ba565b6004546001600160a01b0316331461081e5760405162461bcd60e51b8152600401610427906119ac565b6040516370a0823160e01b815281906001600160a01b038416906370a082319061084c9030906004016118a6565b60206040518083038186803b15801561086457600080fd5b505afa158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c9190611834565b10156108ba5760405162461bcd60e51b815260040161042790611aa7565b6108c58284836114f8565b336001600160a01b03167ff808703b6316618a6ee95fff3bf2181070b23daeec601dc3c6ef8b1869c65d0b8484846040516105e0939291906118d4565b61090a611462565b6001600160a01b031661091b610e6e565b6001600160a01b0316146109415760405162461bcd60e51b815260040161042790611aea565b8060055414156109635760405162461bcd60e51b815260040161042790611b1f565b60058054908290556040517f6367ada99aef7b7824e0f36eb959bb76fc70738ef3bfd8e5c655a3c61ff228189061099f90339084908690611911565b60405180910390a15050565b6109b3611462565b6001600160a01b03166109c4610e6e565b6001600160a01b0316146109ea5760405162461bcd60e51b815260040161042790611aea565b6004546001600160a01b0382811691161415610a185760405162461bcd60e51b8152600401610427906119d2565b6001600160a01b038116610a3e5760405162461bcd60e51b815260040161042790611a81565b600480546001600160a01b0319166001600160a01b0383161790556040517ff6b99d0f2b141c9cb65850bcc5e4e65803781156968314aebb7367321f1c8a3990610a8b90339084906118ba565b60405180910390a150565b6004546001600160a01b03163314610ac05760405162461bcd60e51b8152600401610427906119ac565b80471015610ae05760405162461bcd60e51b815260040161042790611aa7565b610aea8282611466565b336001600160a01b03167ff808703b6316618a6ee95fff3bf2181070b23daeec601dc3c6ef8b1869c65d0b83600084604051610b28939291906118d4565b60405180910390a25050565b610b3c611462565b6001600160a01b0316610b4d610e6e565b6001600160a01b031614610b735760405162461bcd60e51b815260040161042790611aea565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b6001600160a01b03821660009081526002602052604081205460ff16610bfb5760405162461bcd60e51b815260040161042790611c05565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415610c3e575081610d2a565b6001600160a01b038085166000908152600660205260409020541680610c765760405162461bcd60e51b815260040161042790611c3a565b6001600160a01b038516610ca8577f000000000000000000000000000000000000000000000000000000000000000094505b604051633ddac95360e01b81526001600160a01b03821690633ddac95390610cd690889088906004016118f8565b60206040518083038186803b158015610cee57600080fd5b505afa158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d269190611834565b9150505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8357600080fd5b505afa158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb919061184c565b610dc690600a611d90565b600554610dd39190611e61565b10159392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004546001600160a01b03163314610e2a5760405162461bcd60e51b8152600401610427906119ac565b6001600160a01b038416610e5c57823414610e575760405162461bcd60e51b81526004016104279061193d565b610e68565b610e68843330866115e5565b50505050565b6000546001600160a01b031690565b610e85611462565b6001600160a01b0316610e96610e6e565b6001600160a01b031614610ebc5760405162461bcd60e51b815260040161042790611aea565b60026001541415610edf5760405162461bcd60e51b815260040161042790611cb6565b600260018190556001600160a01b0383166000908152602091909152604090205460ff16610f1f5760405162461bcd60e51b815260040161042790611c05565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f5c57600080fd5b505af1158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9491906116f8565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fd357600080fd5b505af1158015610fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b91906116f8565b90506001600160a01b038416611126577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614801561108d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316145b8061110557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614801561110557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316145b6111215760405162461bcd60e51b815260040161042790611c7f565b6111ec565b836001600160a01b0316826001600160a01b031614801561117857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316145b806111d057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480156111d05750836001600160a01b0316816001600160a01b0316145b6111ec5760405162461bcd60e51b815260040161042790611c7f565b6001600160a01b038481166000818152600660205260409081902080546001600160a01b0319169387169390931790925590517f51b67444bfcd9519022e35fa60ea42fcd1e7d1bd133e78492fc40e65fc653a389061124e90869033906118ba565b60405180910390a25050600180555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6004546001600160a01b031690565b6001600160a01b031660009081526002602052604090205460ff1690565b6112b9611462565b6001600160a01b03166112ca610e6e565b6001600160a01b0316146112f05760405162461bcd60e51b815260040161042790611aea565b600260015414156113135760405162461bcd60e51b815260040161042790611cb6565b60026001556001600160a01b03811660009081526003602052604090205460ff166113505760405162461bcd60e51b815260040161042790611b65565b6001600160a01b03811660009081526003602052604090819020805460ff19169055517fbdbdc6b1de4a38b46320e6e465b6f0125fa919c9a3400a8d57b4a27434c50521906104e990339084906118ba565b6113aa611462565b6001600160a01b03166113bb610e6e565b6001600160a01b0316146113e15760405162461bcd60e51b815260040161042790611aea565b6001600160a01b0381166114075760405162461bcd60e51b815260040161042790611966565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604080516000808252602082019092526001600160a01b038416908390604051611490919061186d565b60006040518083038185875af1925050503d80600081146114cd576040519150601f19603f3d011682016040523d82523d6000602084013e6114d2565b606091505b50509050806114f35760405162461bcd60e51b815260040161042790611ced565b505050565b600080846001600160a01b031663a9059cbb858560405160240161151d9291906118f8565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611556919061186d565b6000604051808303816000865af19150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091508180156115c25750805115806115c25750808060200190518101906115c29190611800565b6115de5760405162461bcd60e51b815260040161042790611a34565b5050505050565b600080856001600160a01b03166323b872dd86868660405160240161160c939291906118d4565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611645919061186d565b6000604051808303816000865af19150503d8060008114611682576040519150601f19603f3d011682016040523d82523d6000602084013e611687565b606091505b50915091508180156116b15750805115806116b15750808060200190518101906116b19190611800565b6116cd5760405162461bcd60e51b815260040161042790611bb4565b505050505050565b6000602082840312156116e6578081fd5b81356116f181611e96565b9392505050565b600060208284031215611709578081fd5b81516116f181611e96565b60008060408385031215611726578081fd5b823561173181611e96565b9150602083013561174181611e96565b809150509250929050565b600080600060608486031215611760578081fd5b833561176b81611e96565b9250602084013561177b81611e96565b929592945050506040919091013590565b6000806040838503121561179e578182fd5b82356117a981611e96565b946020939093013593505050565b600080600080608085870312156117cc578081fd5b84356117d781611e96565b9350602085013592506040850135915060608501356117f581611eae565b939692955090935050565b600060208284031215611811578081fd5b81516116f181611eae565b60006020828403121561182d578081fd5b5035919050565b600060208284031215611845578081fd5b5051919050565b60006020828403121561185d578081fd5b815160ff811681146116f1578182fd5b60008251815b8181101561188d5760208186018101518583015201611873565b8181111561189b5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b6020808252600f908201526e57726f6e67206d73672e76616c756560881b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600c908201526b2737ba1031b7b739bab6b2b960a11b604082015260600190565b60208082526017908201527f416c72656164792073657420617320636f6e73756d6572000000000000000000604082015260600190565b602080825260119082015270416c726561647920617661696c61626c6560781b604082015260600190565b6020808252602d908201527f54726962654f6e6548656c7065723a3a736166655472616e736665723a20747260408201526c185b9cd9995c8819985a5b1959609a1b606082015260800190565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b60208082526023908201527f4173736574204d616e616765723a20496e73756666696369656e742062616c616040820152626e636560e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f41737365744d616e616765723a204e65772076616c75652069732073616d6520604082015265185cc81bdb1960d21b606082015260800190565b6020808252600f908201526e105b1c9958591e481c995b5bdd9959608a1b604082015260600190565b6020808252600c908201526b5a45524f204164647265737360a01b604082015260600190565b60208082526031908201527f54726962654f6e6548656c7065723a3a7472616e7366657246726f6d3a207472604082015270185b9cd9995c919c9bdb4819985a5b1959607a1b606082015260800190565b6020808252818101527f41737365744d616e616765723a20496e76616c6964206c6f616e206173736574604082015260600190565b60208082526025908201527f41737365744d616e616765723a2054776170206f7261636c6520776173206e6f6040820152641d081cd95d60da1b606082015260800190565b6020808252601a908201527f41737365744d616e616765723a20496e76616c69642074776170000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526034908201527f54726962654f6e6548656c7065723a3a736166655472616e736665724554483a60408201527308115512081d1c985b9cd9995c8819985a5b195960621b606082015260800190565b90815260200190565b80825b6001808611611d5c5750611d87565b818704821115611d6e57611d6e611e80565b80861615611d7b57918102915b9490941c938002611d4d565b94509492505050565b60006116f160001960ff851684600082611dac575060016116f1565b81611db9575060006116f1565b8160018114611dcf5760028114611dd957611e06565b60019150506116f1565b60ff841115611dea57611dea611e80565b6001841b915084821115611e0057611e00611e80565b506116f1565b5060208310610133831016604e8410600b8410161715611e39575081810a83811115611e3457611e34611e80565b6116f1565b611e468484846001611d4a565b808604821115611e5857611e58611e80565b02949350505050565b6000816000190483118215151615611e7b57611e7b611e80565b500290565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611eab57600080fd5b50565b8015158114611eab57600080fdfea2646970667358221220346ea6f1683a18591612b070fe63017031bed5b41d300b8fd776cedcbf45a7a764736f6c63430008000033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Deployed Bytecode
0x6080604052600436106101395760003560e01c80637cad9f80116100ab578063a80c0fcb1161006f578063a80c0fcb1461033e578063ad5c46481461035e578063b4fd729614610373578063cc16574114610388578063e9ad871c146103a8578063f2fde38b146103c857610140565b80637cad9f80146102bf57806384bc2109146102e157806389a30271146103015780638d12bec0146103165780638da5cb5b1461032957610140565b806346355931116100fd578063463559311461020a5780634965162a1461022a5780635a59fe121461024a57806363a579d51461026a5780636f59503f1461028a578063715018a6146102aa57610140565b806303a45b2e1461014557806308409d7714610167578063092ae4dc1461019d5780632951f1b2146101bd57806345d999e5146101ea57610140565b3661014057005b600080fd5b34801561015157600080fd5b506101656101603660046116d5565b6103e8565b005b34801561017357600080fd5b506101876101823660046116d5565b6104f8565b6040516101949190611932565b60405180910390f35b3480156101a957600080fd5b506101656101b836600461174c565b610516565b3480156101c957600080fd5b506101dd6101d83660046116d5565b6105ed565b60405161019491906118a6565b3480156101f657600080fd5b506101656102053660046116d5565b61060b565b34801561021657600080fd5b506101656102253660046116d5565b610700565b34801561023657600080fd5b5061016561024536600461174c565b6107f4565b34801561025657600080fd5b5061016561026536600461181c565b610902565b34801561027657600080fd5b506101656102853660046116d5565b6109ab565b34801561029657600080fd5b506101656102a536600461178c565b610a96565b3480156102b657600080fd5b50610165610b34565b3480156102cb57600080fd5b506102d4610bbd565b6040516101949190611d41565b3480156102ed57600080fd5b506101876102fc36600461178c565b610bc3565b34801561030d57600080fd5b506101dd610ddc565b6101656103243660046117b7565b610e00565b34801561033557600080fd5b506101dd610e6e565b34801561034a57600080fd5b50610165610359366004611714565b610e7d565b34801561036a57600080fd5b506101dd611260565b34801561037f57600080fd5b506101dd611284565b34801561039457600080fd5b506101876103a33660046116d5565b611293565b3480156103b457600080fd5b506101656103c33660046116d5565b6112b1565b3480156103d457600080fd5b506101656103e33660046116d5565b6113a2565b6103f0611462565b6001600160a01b0316610401610e6e565b6001600160a01b0316146104305760405162461bcd60e51b815260040161042790611aea565b60405180910390fd5b600260015414156104535760405162461bcd60e51b815260040161042790611cb6565b600260018190556001600160a01b0382166000908152602091909152604090205460ff16156104945760405162461bcd60e51b815260040161042790611a09565b6001600160a01b03811660009081526002602052604090819020805460ff19166001179055517f4b8552befb3575c2944a1c44b568d5e87187e79de48331fd45ab251f09b281f4906104e990339084906118ba565b60405180910390a15060018055565b6001600160a01b031660009081526003602052604090205460ff1690565b61051e611462565b6001600160a01b031661052f610e6e565b6001600160a01b0316146105555760405162461bcd60e51b815260040161042790611aea565b6001600160a01b03831661057b5760405162461bcd60e51b815260040161042790611b8e565b6001600160a01b03821661059a5750476105953382611466565b6105a5565b6105a58233836114f8565b826001600160a01b03167f603c9f8bbe22d703e50963d4ec4d2aea4f7c8dd28de33bf36de740e5817fe31183836040516105e09291906118f8565b60405180910390a2505050565b6001600160a01b039081166000908152600660205260409020541690565b610613611462565b6001600160a01b0316610624610e6e565b6001600160a01b03161461064a5760405162461bcd60e51b815260040161042790611aea565b6002600154141561066d5760405162461bcd60e51b815260040161042790611cb6565b60026001556001600160a01b03811660009081526003602052604090205460ff16156106ab5760405162461bcd60e51b815260040161042790611a09565b6001600160a01b03811660009081526003602052604090819020805460ff19166001179055517f900809311d03ed855b3a322b8e963ca5b93bb69992987393e671eda26bec59e1906104e990339084906118ba565b610708611462565b6001600160a01b0316610719610e6e565b6001600160a01b03161461073f5760405162461bcd60e51b815260040161042790611aea565b600260015414156107625760405162461bcd60e51b815260040161042790611cb6565b600260018190556001600160a01b0382166000908152602091909152604090205460ff166107a25760405162461bcd60e51b815260040161042790611b65565b6001600160a01b03811660009081526002602052604090819020805460ff19169055517ff243657fe92d46df5f68763dd9f8e707b4d09bfc34409b17fbf1433a52141802906104e990339084906118ba565b6004546001600160a01b0316331461081e5760405162461bcd60e51b8152600401610427906119ac565b6040516370a0823160e01b815281906001600160a01b038416906370a082319061084c9030906004016118a6565b60206040518083038186803b15801561086457600080fd5b505afa158015610878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c9190611834565b10156108ba5760405162461bcd60e51b815260040161042790611aa7565b6108c58284836114f8565b336001600160a01b03167ff808703b6316618a6ee95fff3bf2181070b23daeec601dc3c6ef8b1869c65d0b8484846040516105e0939291906118d4565b61090a611462565b6001600160a01b031661091b610e6e565b6001600160a01b0316146109415760405162461bcd60e51b815260040161042790611aea565b8060055414156109635760405162461bcd60e51b815260040161042790611b1f565b60058054908290556040517f6367ada99aef7b7824e0f36eb959bb76fc70738ef3bfd8e5c655a3c61ff228189061099f90339084908690611911565b60405180910390a15050565b6109b3611462565b6001600160a01b03166109c4610e6e565b6001600160a01b0316146109ea5760405162461bcd60e51b815260040161042790611aea565b6004546001600160a01b0382811691161415610a185760405162461bcd60e51b8152600401610427906119d2565b6001600160a01b038116610a3e5760405162461bcd60e51b815260040161042790611a81565b600480546001600160a01b0319166001600160a01b0383161790556040517ff6b99d0f2b141c9cb65850bcc5e4e65803781156968314aebb7367321f1c8a3990610a8b90339084906118ba565b60405180910390a150565b6004546001600160a01b03163314610ac05760405162461bcd60e51b8152600401610427906119ac565b80471015610ae05760405162461bcd60e51b815260040161042790611aa7565b610aea8282611466565b336001600160a01b03167ff808703b6316618a6ee95fff3bf2181070b23daeec601dc3c6ef8b1869c65d0b83600084604051610b28939291906118d4565b60405180910390a25050565b610b3c611462565b6001600160a01b0316610b4d610e6e565b6001600160a01b031614610b735760405162461bcd60e51b815260040161042790611aea565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b60055481565b6001600160a01b03821660009081526002602052604081205460ff16610bfb5760405162461bcd60e51b815260040161042790611c05565b60007f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316846001600160a01b03161415610c3e575081610d2a565b6001600160a01b038085166000908152600660205260409020541680610c765760405162461bcd60e51b815260040161042790611c3a565b6001600160a01b038516610ca8577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc294505b604051633ddac95360e01b81526001600160a01b03821690633ddac95390610cd690889088906004016118f8565b60206040518083038186803b158015610cee57600080fd5b505afa158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d269190611834565b9150505b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8357600080fd5b505afa158015610d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbb919061184c565b610dc690600a611d90565b600554610dd39190611e61565b10159392505050565b7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6004546001600160a01b03163314610e2a5760405162461bcd60e51b8152600401610427906119ac565b6001600160a01b038416610e5c57823414610e575760405162461bcd60e51b81526004016104279061193d565b610e68565b610e68843330866115e5565b50505050565b6000546001600160a01b031690565b610e85611462565b6001600160a01b0316610e96610e6e565b6001600160a01b031614610ebc5760405162461bcd60e51b815260040161042790611aea565b60026001541415610edf5760405162461bcd60e51b815260040161042790611cb6565b600260018190556001600160a01b0383166000908152602091909152604090205460ff16610f1f5760405162461bcd60e51b815260040161042790611c05565b6000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610f5c57600080fd5b505af1158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9491906116f8565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610fd357600080fd5b505af1158015610fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b91906116f8565b90506001600160a01b038416611126577f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316826001600160a01b031614801561108d57507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316816001600160a01b0316145b8061110557507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316826001600160a01b031614801561110557507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316816001600160a01b0316145b6111215760405162461bcd60e51b815260040161042790611c7f565b6111ec565b836001600160a01b0316826001600160a01b031614801561117857507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316816001600160a01b0316145b806111d057507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b0316826001600160a01b03161480156111d05750836001600160a01b0316816001600160a01b0316145b6111ec5760405162461bcd60e51b815260040161042790611c7f565b6001600160a01b038481166000818152600660205260409081902080546001600160a01b0319169387169390931790925590517f51b67444bfcd9519022e35fa60ea42fcd1e7d1bd133e78492fc40e65fc653a389061124e90869033906118ba565b60405180910390a25050600180555050565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6004546001600160a01b031690565b6001600160a01b031660009081526002602052604090205460ff1690565b6112b9611462565b6001600160a01b03166112ca610e6e565b6001600160a01b0316146112f05760405162461bcd60e51b815260040161042790611aea565b600260015414156113135760405162461bcd60e51b815260040161042790611cb6565b60026001556001600160a01b03811660009081526003602052604090205460ff166113505760405162461bcd60e51b815260040161042790611b65565b6001600160a01b03811660009081526003602052604090819020805460ff19169055517fbdbdc6b1de4a38b46320e6e465b6f0125fa919c9a3400a8d57b4a27434c50521906104e990339084906118ba565b6113aa611462565b6001600160a01b03166113bb610e6e565b6001600160a01b0316146113e15760405162461bcd60e51b815260040161042790611aea565b6001600160a01b0381166114075760405162461bcd60e51b815260040161042790611966565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b604080516000808252602082019092526001600160a01b038416908390604051611490919061186d565b60006040518083038185875af1925050503d80600081146114cd576040519150601f19603f3d011682016040523d82523d6000602084013e6114d2565b606091505b50509050806114f35760405162461bcd60e51b815260040161042790611ced565b505050565b600080846001600160a01b031663a9059cbb858560405160240161151d9291906118f8565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611556919061186d565b6000604051808303816000865af19150503d8060008114611593576040519150601f19603f3d011682016040523d82523d6000602084013e611598565b606091505b50915091508180156115c25750805115806115c25750808060200190518101906115c29190611800565b6115de5760405162461bcd60e51b815260040161042790611a34565b5050505050565b600080856001600160a01b03166323b872dd86868660405160240161160c939291906118d4565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611645919061186d565b6000604051808303816000865af19150503d8060008114611682576040519150601f19603f3d011682016040523d82523d6000602084013e611687565b606091505b50915091508180156116b15750805115806116b15750808060200190518101906116b19190611800565b6116cd5760405162461bcd60e51b815260040161042790611bb4565b505050505050565b6000602082840312156116e6578081fd5b81356116f181611e96565b9392505050565b600060208284031215611709578081fd5b81516116f181611e96565b60008060408385031215611726578081fd5b823561173181611e96565b9150602083013561174181611e96565b809150509250929050565b600080600060608486031215611760578081fd5b833561176b81611e96565b9250602084013561177b81611e96565b929592945050506040919091013590565b6000806040838503121561179e578182fd5b82356117a981611e96565b946020939093013593505050565b600080600080608085870312156117cc578081fd5b84356117d781611e96565b9350602085013592506040850135915060608501356117f581611eae565b939692955090935050565b600060208284031215611811578081fd5b81516116f181611eae565b60006020828403121561182d578081fd5b5035919050565b600060208284031215611845578081fd5b5051919050565b60006020828403121561185d578081fd5b815160ff811681146116f1578182fd5b60008251815b8181101561188d5760208186018101518583015201611873565b8181111561189b5782828501525b509190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b901515815260200190565b6020808252600f908201526e57726f6e67206d73672e76616c756560881b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600c908201526b2737ba1031b7b739bab6b2b960a11b604082015260600190565b60208082526017908201527f416c72656164792073657420617320636f6e73756d6572000000000000000000604082015260600190565b602080825260119082015270416c726561647920617661696c61626c6560781b604082015260600190565b6020808252602d908201527f54726962654f6e6548656c7065723a3a736166655472616e736665723a20747260408201526c185b9cd9995c8819985a5b1959609a1b606082015260800190565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b60208082526023908201527f4173736574204d616e616765723a20496e73756666696369656e742062616c616040820152626e636560e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f41737365744d616e616765723a204e65772076616c75652069732073616d6520604082015265185cc81bdb1960d21b606082015260800190565b6020808252600f908201526e105b1c9958591e481c995b5bdd9959608a1b604082015260600190565b6020808252600c908201526b5a45524f204164647265737360a01b604082015260600190565b60208082526031908201527f54726962654f6e6548656c7065723a3a7472616e7366657246726f6d3a207472604082015270185b9cd9995c919c9bdb4819985a5b1959607a1b606082015260800190565b6020808252818101527f41737365744d616e616765723a20496e76616c6964206c6f616e206173736574604082015260600190565b60208082526025908201527f41737365744d616e616765723a2054776170206f7261636c6520776173206e6f6040820152641d081cd95d60da1b606082015260800190565b6020808252601a908201527f41737365744d616e616765723a20496e76616c69642074776170000000000000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526034908201527f54726962654f6e6548656c7065723a3a736166655472616e736665724554483a60408201527308115512081d1c985b9cd9995c8819985a5b195960621b606082015260800190565b90815260200190565b80825b6001808611611d5c5750611d87565b818704821115611d6e57611d6e611e80565b80861615611d7b57918102915b9490941c938002611d4d565b94509492505050565b60006116f160001960ff851684600082611dac575060016116f1565b81611db9575060006116f1565b8160018114611dcf5760028114611dd957611e06565b60019150506116f1565b60ff841115611dea57611dea611e80565b6001841b915084821115611e0057611e00611e80565b506116f1565b5060208310610133831016604e8410600b8410161715611e39575081810a83811115611e3457611e34611e80565b6116f1565b611e468484846001611d4a565b808604821115611e5857611e58611e80565b02949350505050565b6000816000190483118215151615611e7b57611e7b611e80565b500290565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611eab57600080fd5b50565b8015158114611eab57600080fdfea2646970667358221220346ea6f1683a18591612b070fe63017031bed5b41d300b8fd776cedcbf45a7a764736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
-----Decoded View---------------
Arg [0] : _WETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [1] : _USDC (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.