Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Aggregator C... | 11034079 | 4 days ago | IN | 0 S | 0.0023933 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
DLOFactory
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "@contracts/DebitaProxyContract.sol"; interface DLOImplementation { struct LendInfo { address lendOrderAddress; bool perpetual; bool lonelyLender; bool[] oraclesPerPairActivated; uint[] maxLTVs; uint apr; uint maxDuration; uint minDuration; address owner; address principle; address[] acceptedCollaterals; address[] oracle_Collaterals; uint[] maxRatio; address oracle_Principle; uint startedLendingAmount; uint availableAmount; } function getLendInfo() external view returns (LendInfo memory); function isActive() external view returns (bool); function initialize( address _aggregatorContract, bool _perpetual, bool[] memory _oraclesActivated, bool _lonelyLender, uint[] memory _LTVs, uint _apr, uint _maxDuration, uint _minDuration, address _owner, address _principle, address[] memory _acceptedCollaterals, address[] memory _oracles_Collateral, uint[] memory _ratio, address _oracleID_Principle, uint _startedLendingAmount ) external; } contract DLOFactory { event LendOrderCreated( address indexed lendOrder, address indexed owner, uint apr, uint maxDuration, uint minDuration, uint[] LTVs, uint[] Ratios, uint availableAmount, bool isActive, bool perpetual ); event LendOrderUpdated( address indexed lendOrder, address indexed owner, uint apr, uint maxDuration, uint minDuration, uint[] LTVs, uint[] Ratios, uint availableAmount, bool isActive, bool perpetual ); event LendOrderDeleted( address indexed lendOrder, address indexed owner, uint apr, uint maxDuration, uint minDuration, uint[] LTVs, uint[] Ratios, uint availableAmount, bool isActive, bool perpetual ); mapping(address => bool) public isLendOrderLegit; // is lend order a legit order from the factory mapping(address => uint) public LendOrderIndex; // index of the lend order in the allActiveLendOrders array mapping(uint => address) public allActiveLendOrders; // all active lend orders uint public activeOrdersCount; address aggregatorContract; address public implementationContract; address public owner; constructor(address _implementationContract) { owner = msg.sender; implementationContract = _implementationContract; } modifier onlyLendOrder() { require(isLendOrderLegit[msg.sender], "Only lend order"); _; } /** * @dev Create a new lend order * @param _perpetual is the lend order perpetual (compunding interest, every time the borrower pays the interest, the tokens come back to the order so the lender can lend it again) * @param _oraclesActivated array of booleans to activate oracles for each pair with collateral * @param _lonelyLender if true, the lend order is only for one lender * @param _LTVs array of max LTVs for each collateral * @param _apr annual percentage rate you want to lend the tokens for * @param _maxDuration max duration of the loan * @param _minDuration min duration of the loan * @param _acceptedCollaterals array of accepted collaterals * @param _principle address of the principle token * @param _oracles_Collateral array of oracles for each collateral * @param _ratio array of max ratios for each collateral * @param _oracleID_Principle address of the oracle for the principle token * @param _startedLendingAmount initial amount of the principle token that is available for lending * @return address of the new lend order */ function createLendOrder( bool _perpetual, bool[] memory _oraclesActivated, bool _lonelyLender, uint[] memory _LTVs, uint _apr, uint _maxDuration, uint _minDuration, address[] memory _acceptedCollaterals, address _principle, address[] memory _oracles_Collateral, uint[] memory _ratio, address _oracleID_Principle, uint _startedLendingAmount ) external returns (address) { require(_minDuration <= _maxDuration, "Invalid duration"); require(_LTVs.length == _acceptedCollaterals.length, "Invalid LTVs"); require( _oracles_Collateral.length == _acceptedCollaterals.length, "Invalid length" ); require( _oraclesActivated.length == _acceptedCollaterals.length, "Invalid oracles" ); require(_ratio.length == _acceptedCollaterals.length, "Invalid ratio"); DebitaProxyContract lendOfferProxy = new DebitaProxyContract( implementationContract ); DLOImplementation lendOffer = DLOImplementation( address(lendOfferProxy) ); lendOffer.initialize( aggregatorContract, _perpetual, _oraclesActivated, _lonelyLender, _LTVs, _apr, _maxDuration, _minDuration, msg.sender, _principle, _acceptedCollaterals, _oracles_Collateral, _ratio, _oracleID_Principle, _startedLendingAmount ); SafeERC20.safeTransferFrom( IERC20(_principle), msg.sender, address(lendOffer), _startedLendingAmount ); uint balance = IERC20(_principle).balanceOf(address(lendOffer)); require(balance >= _startedLendingAmount, "Transfer failed"); isLendOrderLegit[address(lendOffer)] = true; LendOrderIndex[address(lendOffer)] = activeOrdersCount; allActiveLendOrders[activeOrdersCount] = address(lendOffer); activeOrdersCount++; emit LendOrderCreated( address(lendOffer), msg.sender, _apr, _maxDuration, _minDuration, _LTVs, _ratio, _startedLendingAmount, true, _perpetual ); return address(lendOffer); } // function to delete a lend order from index // only lend order can call this function function deleteOrder(address _lendOrder) external onlyLendOrder { uint index = LendOrderIndex[_lendOrder]; LendOrderIndex[_lendOrder] = 0; // switch index of the last borrow order to the deleted borrow order allActiveLendOrders[index] = allActiveLendOrders[activeOrdersCount - 1]; LendOrderIndex[allActiveLendOrders[activeOrdersCount - 1]] = index; // take out last borrow order allActiveLendOrders[activeOrdersCount - 1] = address(0); activeOrdersCount--; } function getActiveOrders( uint offset, uint limit ) public returns (DLOImplementation.LendInfo[] memory) { uint length = limit; if (length > activeOrdersCount) { length = activeOrdersCount; } DLOImplementation.LendInfo[] memory result = new DLOImplementation.LendInfo[](length - offset); for (uint i = 0; (i + offset) < limit; i++) { if ((i + offset) > (activeOrdersCount) - 1) { break; } result[i] = DLOImplementation(allActiveLendOrders[offset + i]) .getLendInfo(); } return result; } function setAggregatorContract(address _aggregatorContract) external { require(msg.sender == owner, "Only owner can set aggregator contract"); require(aggregatorContract == address(0), "Already set"); aggregatorContract = _aggregatorContract; } function emitUpdate(address _lendOrder) external onlyLendOrder { DLOImplementation lendOrder = DLOImplementation(_lendOrder); DLOImplementation.LendInfo memory lendInfo = lendOrder.getLendInfo(); emit LendOrderUpdated( _lendOrder, lendInfo.owner, lendInfo.apr, lendInfo.maxDuration, lendInfo.minDuration, lendInfo.maxLTVs, lendInfo.maxRatio, lendInfo.availableAmount, lendOrder.isActive(), lendInfo.perpetual ); } function emitDelete(address _lendOrder) external onlyLendOrder { DLOImplementation lendOrder = DLOImplementation(_lendOrder); DLOImplementation.LendInfo memory lendInfo = lendOrder.getLendInfo(); emit LendOrderDeleted( _lendOrder, lendInfo.owner, lendInfo.apr, lendInfo.maxDuration, lendInfo.minDuration, lendInfo.maxLTVs, lendInfo.maxRatio, lendInfo.availableAmount, lendOrder.isActive(), lendInfo.perpetual ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.2.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../IERC20.sol"; import {IERC1363} from "../../../interfaces/IERC1363.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC-20 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 IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { /** * @dev An operation with an ERC-20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful. */ function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) { return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful. */ function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) { return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value))); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. * * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. */ function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. * * IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client" * smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using * this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract * that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior. */ function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. * * NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function * only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being * set here. */ function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value)); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0))); _callOptionalReturn(token, approvalCall); } } /** * @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * Reverts if the returned value is other than `true`. */ function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { if (to.code.length == 0) { safeTransfer(token, to, value); } else if (!token.transferAndCall(to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target * has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * Reverts if the returned value is other than `true`. */ function transferFromAndCallRelaxed( IERC1363 token, address from, address to, uint256 value, bytes memory data ) internal { if (to.code.length == 0) { safeTransferFrom(token, from, to, value); } else if (!token.transferFromAndCall(from, to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no * code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when * targeting contracts. * * NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}. * Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall} * once without retrying, and relies on the returned value to be true. * * Reverts if the returned value is other than `true`. */ function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal { if (to.code.length == 0) { forceApprove(token, to, value); } else if (!token.approveAndCall(to, value, data)) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements. */ function _callOptionalReturn(IERC20 token, bytes memory data) private { uint256 returnSize; uint256 returnValue; assembly ("memory-safe") { let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) // bubble errors if iszero(success) { let ptr := mload(0x40) returndatacopy(ptr, 0, returndatasize()) revert(ptr, returndatasize()) } returnSize := returndatasize() returnValue := mload(0) } if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { bool success; uint256 returnSize; uint256 returnValue; assembly ("memory-safe") { success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20) returnSize := returndatasize() returnValue := mload(0) } return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1); } }
pragma solidity ^0.8.0; import "@openzeppelin/contracts/proxy/Proxy.sol"; contract DebitaProxyContract is Proxy { constructor(address _logic) { bytes32 implementationPosition = bytes32( uint256(keccak256("eip1967.implementationSlot")) - 1 ); assembly { sstore(implementationPosition, _logic) } } function _implementation() internal view override returns (address) { bytes32 implementationPosition = bytes32( uint256(keccak256("eip1967.implementationSlot")) - 1 ); address implementationAddress; // sload and return implementationPosition assembly { implementationAddress := sload(implementationPosition) } return implementationAddress; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (interfaces/IERC1363.sol) pragma solidity ^0.8.20; import {IERC20} from "./IERC20.sol"; import {IERC165} from "./IERC165.sol"; /** * @title IERC1363 * @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363]. * * Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract * after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction. */ interface IERC1363 is IERC20, IERC165 { /* * Note: the ERC-165 identifier for this interface is 0xb0202a11. * 0xb0202a11 === * bytes4(keccak256('transferAndCall(address,uint256)')) ^ * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^ * bytes4(keccak256('approveAndCall(address,uint256)')) ^ * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) */ /** * @dev Moves a `value` amount of tokens from the caller's account to `to` * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferAndCall(address to, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from the caller's account to `to` * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @param data Additional data with no specified format, sent in call to `to`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferFromAndCall(address from, address to, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism * and then calls {IERC1363Receiver-onTransferReceived} on `to`. * @param from The address which you want to send tokens from. * @param to The address which you want to transfer to. * @param value The amount of tokens to be transferred. * @param data Additional data with no specified format, sent in call to `to`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function approveAndCall(address spender, uint256 value) external returns (bool); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. * @param data Additional data with no specified format, sent in call to `spender`. * @return A boolean value indicating whether the operation succeeded unless throwing. */ function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol) pragma solidity ^0.8.20; /** * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to * be specified by overriding the virtual {_implementation} function. * * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a * different contract through the {_delegate} function. * * The success and return data of the delegated call will be returned back to the caller of the proxy. */ abstract contract Proxy { /** * @dev Delegates the current call to `implementation`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _delegate(address implementation) internal virtual { assembly { // Copy msg.data. We take full control of memory in this inline assembly // block because it will not return to Solidity code. We overwrite the // Solidity scratch pad at memory position 0. calldatacopy(0, 0, calldatasize()) // Call the implementation. // out and outsize are 0 because we don't know the size yet. let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) // Copy the returned data. returndatacopy(0, 0, returndatasize()) switch result // delegatecall returns 0 on error. case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } /** * @dev This is a virtual function that should be overridden so it returns the address to which the fallback * function and {_fallback} should delegate. */ function _implementation() internal view virtual returns (address); /** * @dev Delegates the current call to the address returned by `_implementation()`. * * This function does not return to its internal call site, it will return directly to the external caller. */ function _fallback() internal virtual { _delegate(_implementation()); } /** * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other * function in the contract matches the call data. */ fallback() external payable virtual { _fallback(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "../utils/introspection/IERC165.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "remappings": [ "@pythnetwork/pyth-sdk-solidity/=node_modules/@pythnetwork/pyth-sdk-solidity/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@contracts/=contracts/", "@aerodrome/=lib/contracts/contracts/", "forge-std/=lib/forge-std/src/", "@redstone-finance/evm-connector/dist/contracts/=lib/redstone-oracles-monorepo/packages/evm-connector/contracts/", "@chainlink/=lib/foundry-chainlink-toolkit/", "@opengsn/=lib/contracts/lib/gsn/packages/", "@uniswap/v3-core/=lib/contracts/lib/v3-core/", "chainlink-brownie-contracts/=lib/foundry-chainlink-toolkit/lib/chainlink-brownie-contracts/contracts/src/v0.6/vendor/@arbitrum/nitro-contracts/src/", "contracts/=lib/contracts/contracts/", "ds-test/=lib/contracts/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "foundry-chainlink-toolkit/=lib/foundry-chainlink-toolkit/", "gsn/=lib/contracts/lib/", "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "redstone-oracles-monorepo/=lib/redstone-oracles-monorepo/", "utils/=lib/contracts/test/utils/", "v3-core/=lib/contracts/lib/v3-core/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "shanghai", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_implementationContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lendOrder","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"apr","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minDuration","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"LTVs","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"Ratios","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"availableAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"},{"indexed":false,"internalType":"bool","name":"perpetual","type":"bool"}],"name":"LendOrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lendOrder","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"apr","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minDuration","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"LTVs","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"Ratios","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"availableAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"},{"indexed":false,"internalType":"bool","name":"perpetual","type":"bool"}],"name":"LendOrderDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lendOrder","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"apr","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minDuration","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"LTVs","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"Ratios","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"availableAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isActive","type":"bool"},{"indexed":false,"internalType":"bool","name":"perpetual","type":"bool"}],"name":"LendOrderUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LendOrderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeOrdersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allActiveLendOrders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_perpetual","type":"bool"},{"internalType":"bool[]","name":"_oraclesActivated","type":"bool[]"},{"internalType":"bool","name":"_lonelyLender","type":"bool"},{"internalType":"uint256[]","name":"_LTVs","type":"uint256[]"},{"internalType":"uint256","name":"_apr","type":"uint256"},{"internalType":"uint256","name":"_maxDuration","type":"uint256"},{"internalType":"uint256","name":"_minDuration","type":"uint256"},{"internalType":"address[]","name":"_acceptedCollaterals","type":"address[]"},{"internalType":"address","name":"_principle","type":"address"},{"internalType":"address[]","name":"_oracles_Collateral","type":"address[]"},{"internalType":"uint256[]","name":"_ratio","type":"uint256[]"},{"internalType":"address","name":"_oracleID_Principle","type":"address"},{"internalType":"uint256","name":"_startedLendingAmount","type":"uint256"}],"name":"createLendOrder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lendOrder","type":"address"}],"name":"deleteOrder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lendOrder","type":"address"}],"name":"emitDelete","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lendOrder","type":"address"}],"name":"emitUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"getActiveOrders","outputs":[{"components":[{"internalType":"address","name":"lendOrderAddress","type":"address"},{"internalType":"bool","name":"perpetual","type":"bool"},{"internalType":"bool","name":"lonelyLender","type":"bool"},{"internalType":"bool[]","name":"oraclesPerPairActivated","type":"bool[]"},{"internalType":"uint256[]","name":"maxLTVs","type":"uint256[]"},{"internalType":"uint256","name":"apr","type":"uint256"},{"internalType":"uint256","name":"maxDuration","type":"uint256"},{"internalType":"uint256","name":"minDuration","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"principle","type":"address"},{"internalType":"address[]","name":"acceptedCollaterals","type":"address[]"},{"internalType":"address[]","name":"oracle_Collaterals","type":"address[]"},{"internalType":"uint256[]","name":"maxRatio","type":"uint256[]"},{"internalType":"address","name":"oracle_Principle","type":"address"},{"internalType":"uint256","name":"startedLendingAmount","type":"uint256"},{"internalType":"uint256","name":"availableAmount","type":"uint256"}],"internalType":"struct DLOImplementation.LendInfo[]","name":"","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementationContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLendOrderLegit","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":"_aggregatorContract","type":"address"}],"name":"setAggregatorContract","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60803461007a57601f61184038819003918201601f19168301916001600160401b0383118484101761007e5780849260209460405283398101031261007a57516001600160a01b0381169081900361007a5760018060a01b03193381600654161760065560055416176005556040516117ad90816100938239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f90813560e01c9081630ed96b2814611101575080633ff1b8d6146110e357806349e6f2ed146110aa5780637c95cdc614610d31578063896dd7f714610cf35780638d91e38e14610bcb5780638da5cb5b14610ba25780639967cf6014610acd57806399e7d05614610aa4578063a0b4e227146103b4578063b148414c146102425763cadbe0e0146100a2575f80fd5b3461023f5760208060031936011261023b576100bc611133565b903383528281526100d360ff604085205416611351565b6040516349b1b18760e01b8152916001600160a01b0390811691908484600481865afa93841561023057859461020c575b50610100840151169260a081015160c08201519160e08101519060808101516101808201516101e083015191604051936308bcf8b560e21b855288856004818d5afa948515610201578c95610197575b50907f440cf0b67b0cddcdcb38693e8828793790ea2c44cc7bd1af5a5d3137ba131ea2986101919695949392015115159460405198899889611301565b0390a380f35b9594509291908886813d83116101fa575b6101b281836111d9565b810103126101f6577f440cf0b67b0cddcdcb38693e8828793790ea2c44cc7bd1af5a5d3137ba131ea2986101e8610191976113b0565b959650989390919293610154565b8b80fd5b503d6101a8565b6040513d8e823e3d90fd5b6102299194503d8087833e61022181836111d9565b810190611481565b925f610104565b6040513d87823e3d90fd5b5080fd5b80fd5b503461023f5760208060031936011261023b5761025d611133565b9033835282815261027460ff604085205416611351565b6040516349b1b18760e01b8152916001600160a01b0390811691908484600481865afa938415610230578594610398575b50610100840151169260a081015160c08201519160e08101519060808101516101808201516101e083015191604051936308bcf8b560e21b855288856004818d5afa948515610201578c95610332575b50907f4b93895284b971d61ca2e8a72dd94981060a6d29e417f629f92d824ba81fdcc7986101919695949392015115159460405198899889611301565b9594509291908886813d8311610391575b61034d81836111d9565b810103126101f6577f4b93895284b971d61ca2e8a72dd94981060a6d29e417f629f92d824ba81fdcc798610383610191976113b0565b9596509893909192936102f5565b503d610343565b6103ad9194503d8087833e61022181836111d9565b925f6102a5565b503461023f576101a036600319011261023f5760043590811515820361023f576024359167ffffffffffffffff831161023b573660238401121561023b57826004013591610401836111fb565b9361040f60405195866111d9565b83855260208501906024829560051b82010190368211610a8757602401915b818310610a8b5750505060443592831515840361023b5760643567ffffffffffffffff811161088557610465903690600401611213565b9460e43567ffffffffffffffff8111610a8757610486903690600401611271565b6101043591906001600160a01b0383168303610a83576101243567ffffffffffffffff8111610a7f576104bd903690600401611271565b9067ffffffffffffffff6101443511610a7f576104e03661014435600401611213565b94610164356001600160a01b0381169003610a7b5760a43560c43511610a43578951825103610a0f5782518251036109d95783518251036109a257855182510361096d57600554604051906001600160a01b031667ffffffffffffffff610111830190811190831117610959576101116116678339610111820152602081610111810103019088f098891561094e576004546001600160a01b039a8b169a168a3b1561094a5794919390928b899460405197889563df1aaf1d60e01b87526101e487019160048801528d151560248801526101e060448801525180915261020486019790875b8181106109215750505061064f926105fb869798610662969461063c94151560648a01526003198983030160848a015261114d565b9060843560a488015260a43560c488015260c43560e48801523361010488015260018060a01b038b1661012488015260031987830301610144880152611180565b8481036003190161016486015290611180565b828103600319016101848401528761114d565b610164356001600160a01b03166101a4830152610184356101c48301520381838a5af18015610916576108e6575b506040516323b872dd60e01b6020820152336024820152856044820152610184356064820152606481528060a081011067ffffffffffffffff60a0830111176108d25760a0810160405280516020918591908301826001600160a01b0386165af1156108c75782513d6108be57506001600160a01b0381163b155b61089c576040516370a0823160e01b81526004810186905290602090829060249082906001600160a01b03165afa90811561089157839161085b575b506101843511610824576020946107fe7fb38a206b4b00d385edabb08c46d436837c987d18560cb50d15175cc2e9b6e05c9260408588809752808a52818120600160ff1982541617905560035460018b528083832055815260028a5220856001600160601b0360a01b8254161790556107c16003546112df565b6003556107f060405193608435855260a4358a86015260c435604086015261010080606087015285019061114d565b90838203608085015261114d565b936101843560a0830152600160c0830152151560e08201528033940390a3604051908152f35b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b90506020813d602011610889575b81610876602093836111d9565b8101031261088557515f610747565b8280fd5b3d9150610869565b6040513d85823e3d90fd5b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b6001141561070b565b6040513d84823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff819492941161090257604052915f610690565b634e487b7160e01b82526041600452602482fd5b6040513d86823e3d90fd5b9350939650945092956020806001928751151581520195019101928d918b9693899698956105c6565b8880fd5b6040513d89823e3d90fd5b634e487b7160e01b89526041600452602489fd5b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420726174696f60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206f7261636c657360881b6044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964204c54567360a01b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606490fd5b8680fd5b8580fd5b8480fd5b8380fd5b82358015158103610a835781526020928301920161042e565b503461023f578060031936011261023f576005546040516001600160a01b039091168152602090f35b503461023f57602036600319011261023f57610ae7611133565b6006546001600160a01b039081163303610b4e5760045491818316610b1b5716906001600160601b0360a01b161760045580f35b60405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e481cd95d60aa1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602660248201527f4f6e6c79206f776e65722063616e207365742061676772656761746f7220636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b503461023f578060031936011261023f576006546040516001600160a01b039091168152602090f35b503461023f5760208060031936011261023b57610be6611133565b338352828252610bfc60ff604085205416611351565b6001600160a01b03908116835260018252604083208054908490556003545f19939190848101908111610cdf578552600282528260408620541692818652604086206001600160601b0360a01b9485825416179055600354858101908111610ccb578652600283526040862054168552600182526040852055600354838101908111610cb75790600291855252604083209081541690556003548015610ca3570160035580f35b634e487b7160e01b83526011600452602483fd5b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b87526011600452602487fd5b634e487b7160e01b86526011600452602486fd5b503461023f57602036600319011261023f5760209060ff906040906001600160a01b03610d1e611133565b1681528084522054166040519015158152f35b503461023f57604036600319011261023f5760043560249081359081600354908184116110a1575b82840393841161108e5793610d6d846111fb565b93610d7b60405195866111d9565b808552610d8a601f19916111fb565b01865b8181106110095750505f19820191821190865b86610dab868361138f565b1015610ffc5782610dbc868361138f565b90610fe9578410610e575780610dd46004928761138f565b895260026020526040808a205490516349b1b18760e01b8152928a9184919082906001600160a01b03165afa8015610e4c57610e2d928a91610e32575b50610e1c828961163e565b52610e27818861163e565b506112df565b610da0565b610e4691503d808c833e61022181836111d9565b5f610e11565b6040513d8b823e3d90fd5b50505050509190505b604051918291602080840190808552835180925260408501928160408460051b880101950193815b848310610e955787870388f35b9193959092949650603f1988820301835284875191610200928382019360018060a01b0394858351168452848301511515858501526040830151151560408501526060918284015192850152815180915284610220850192019087905b808210610fcd575050509160019491610f96610f82610f6e610f228897608080870151908883039089015261114d565b60a0808601519087015260c0808601519087015260e085015160e08701526101008781870151169087015261012087818701511690870152610140808601519087830390880152611180565b610160808501519086830390870152611180565b61018080840151908583039086015261114d565b926101a0908183015116908301526101c080820151908301526101e080910151910152980193019301909287969593949294610e88565b8251151584528b96938401939092019160019190910190610ef2565b634e487b7160e01b895260116004528289fd5b5050505050919050610e60565b60209060409793975161101b816111bc565b898152828a818301528a6040830152606080808401528060808401528b60a08401528b60c08401528b60e08401528b6101008401528b61012084015280610140840152806101608401526101808301528a6101a08301528a6101c08301528a6101e0830152828901015201959195610d8d565b634e487b7160e01b865260116004528486fd5b92508092610d59565b503461023f57602036600319011261023f576020906040906001600160a01b036110d2611133565b168152600183522054604051908152f35b503461023f578060031936011261023f576020600354604051908152f35b90503461023b57602036600319011261023b576004358252600260209081526040909220546001600160a01b03168152f35b600435906001600160a01b038216820361114957565b5f80fd5b9081518082526020808093019301915f5b82811061116c575050505090565b83518552938101939281019260010161115e565b9081518082526020808093019301915f5b82811061119f575050505090565b83516001600160a01b031685529381019392810192600101611191565b610200810190811067ffffffffffffffff8211176108d257604052565b90601f8019910116810190811067ffffffffffffffff8211176108d257604052565b67ffffffffffffffff81116108d25760051b60200190565b81601f820112156111495780359161122a836111fb565b9261123860405194856111d9565b808452602092838086019260051b820101928311611149578301905b828210611262575050505090565b81358152908301908301611254565b81601f8201121561114957803591611288836111fb565b9261129660405194856111d9565b808452602092838086019260051b820101928311611149578301905b8282106112c0575050505090565b81356001600160a01b03811681036111495781529083019083016112b2565b5f1981146112ed5760010190565b634e487b7160e01b5f52601160045260245ffd5b969361133d9360e0979a99969361132f938a5260208a015260408901526101008060608a015288019061114d565b90868203608088015261114d565b9560a0850152151560c08401521515910152565b1561135857565b60405162461bcd60e51b815260206004820152600f60248201526e27b7363c903632b7321037b93232b960891b6044820152606490fd5b919082018092116112ed57565b51906001600160a01b038216820361114957565b5190811515820361114957565b81601f82011215611149578051916113d4836111fb565b926113e260405194856111d9565b808452602092838086019260051b820101928311611149578301905b82821061140c575050505090565b815181529083019083016113fe565b81601f8201121561114957805191611432836111fb565b9261144060405194856111d9565b808452602092838086019260051b820101928311611149578301905b82821061146a575050505090565b8380916114768461139c565b81520191019061145c565b602091828282031261114957815167ffffffffffffffff928382116111495701916102008383031261114957604051936114ba856111bc565b6114c38461139c565b85526114d08185016113b0565b818601526114e0604085016113b0565b604086015260608401518281116111495784019083601f830112156111495781519161150b836111fb565b9261151960405194856111d9565b808452828085019160051b83010191868311611149578301905b828210611627575050505060608501526080830151818111611149578261155b9185016113bd565b608085015260a083015160a085015260c083015160c085015260e083015160e085015261010061158c81850161139c565b9085015261012061159e81850161139c565b908501526101408084015182811161114957836115bc91860161141b565b908501526101608084015182811161114957836115da91860161141b565b908501526101809182840151918211611149576115f89184016113bd565b908301526101a061160a81830161139c565b908301526101c080820151908301526101e0809101519082015290565b838091611633846113b0565b815201910190611533565b80518210156116525760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfe60803461007f57601f61011138819003918201601f19168301916001600160401b038311848410176100835780849260209460405283398101031261007f57516001600160a01b038116810361007f577f6c2e6ad0697ee74b6b109859efe075280fbb8639fd0923b952c65a4373bc191855604051607990816100988239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040527f6c2e6ad0697ee74b6b109859efe075280fbb8639fd0923b952c65a4373bc1918545f808092368280378136915af43d82803e15603f573d90f35b3d90fdfea2646970667358221220dc53c46fbbb536817120bbfe2ad4353676b0c05f64ede996df0aaa9938acc5ed64736f6c63430008140033a2646970667358221220a41f9d7e49441c8b775ec7bf2a0fc401aead4c493713ebbf7047aea9aa0d108764736f6c634300081400330000000000000000000000003ac4f83dd109ba480d66bba202392d4df03e7d8d
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f90813560e01c9081630ed96b2814611101575080633ff1b8d6146110e357806349e6f2ed146110aa5780637c95cdc614610d31578063896dd7f714610cf35780638d91e38e14610bcb5780638da5cb5b14610ba25780639967cf6014610acd57806399e7d05614610aa4578063a0b4e227146103b4578063b148414c146102425763cadbe0e0146100a2575f80fd5b3461023f5760208060031936011261023b576100bc611133565b903383528281526100d360ff604085205416611351565b6040516349b1b18760e01b8152916001600160a01b0390811691908484600481865afa93841561023057859461020c575b50610100840151169260a081015160c08201519160e08101519060808101516101808201516101e083015191604051936308bcf8b560e21b855288856004818d5afa948515610201578c95610197575b50907f440cf0b67b0cddcdcb38693e8828793790ea2c44cc7bd1af5a5d3137ba131ea2986101919695949392015115159460405198899889611301565b0390a380f35b9594509291908886813d83116101fa575b6101b281836111d9565b810103126101f6577f440cf0b67b0cddcdcb38693e8828793790ea2c44cc7bd1af5a5d3137ba131ea2986101e8610191976113b0565b959650989390919293610154565b8b80fd5b503d6101a8565b6040513d8e823e3d90fd5b6102299194503d8087833e61022181836111d9565b810190611481565b925f610104565b6040513d87823e3d90fd5b5080fd5b80fd5b503461023f5760208060031936011261023b5761025d611133565b9033835282815261027460ff604085205416611351565b6040516349b1b18760e01b8152916001600160a01b0390811691908484600481865afa938415610230578594610398575b50610100840151169260a081015160c08201519160e08101519060808101516101808201516101e083015191604051936308bcf8b560e21b855288856004818d5afa948515610201578c95610332575b50907f4b93895284b971d61ca2e8a72dd94981060a6d29e417f629f92d824ba81fdcc7986101919695949392015115159460405198899889611301565b9594509291908886813d8311610391575b61034d81836111d9565b810103126101f6577f4b93895284b971d61ca2e8a72dd94981060a6d29e417f629f92d824ba81fdcc798610383610191976113b0565b9596509893909192936102f5565b503d610343565b6103ad9194503d8087833e61022181836111d9565b925f6102a5565b503461023f576101a036600319011261023f5760043590811515820361023f576024359167ffffffffffffffff831161023b573660238401121561023b57826004013591610401836111fb565b9361040f60405195866111d9565b83855260208501906024829560051b82010190368211610a8757602401915b818310610a8b5750505060443592831515840361023b5760643567ffffffffffffffff811161088557610465903690600401611213565b9460e43567ffffffffffffffff8111610a8757610486903690600401611271565b6101043591906001600160a01b0383168303610a83576101243567ffffffffffffffff8111610a7f576104bd903690600401611271565b9067ffffffffffffffff6101443511610a7f576104e03661014435600401611213565b94610164356001600160a01b0381169003610a7b5760a43560c43511610a43578951825103610a0f5782518251036109d95783518251036109a257855182510361096d57600554604051906001600160a01b031667ffffffffffffffff610111830190811190831117610959576101116116678339610111820152602081610111810103019088f098891561094e576004546001600160a01b039a8b169a168a3b1561094a5794919390928b899460405197889563df1aaf1d60e01b87526101e487019160048801528d151560248801526101e060448801525180915261020486019790875b8181106109215750505061064f926105fb869798610662969461063c94151560648a01526003198983030160848a015261114d565b9060843560a488015260a43560c488015260c43560e48801523361010488015260018060a01b038b1661012488015260031987830301610144880152611180565b8481036003190161016486015290611180565b828103600319016101848401528761114d565b610164356001600160a01b03166101a4830152610184356101c48301520381838a5af18015610916576108e6575b506040516323b872dd60e01b6020820152336024820152856044820152610184356064820152606481528060a081011067ffffffffffffffff60a0830111176108d25760a0810160405280516020918591908301826001600160a01b0386165af1156108c75782513d6108be57506001600160a01b0381163b155b61089c576040516370a0823160e01b81526004810186905290602090829060249082906001600160a01b03165afa90811561089157839161085b575b506101843511610824576020946107fe7fb38a206b4b00d385edabb08c46d436837c987d18560cb50d15175cc2e9b6e05c9260408588809752808a52818120600160ff1982541617905560035460018b528083832055815260028a5220856001600160601b0360a01b8254161790556107c16003546112df565b6003556107f060405193608435855260a4358a86015260c435604086015261010080606087015285019061114d565b90838203608085015261114d565b936101843560a0830152600160c0830152151560e08201528033940390a3604051908152f35b60405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606490fd5b90506020813d602011610889575b81610876602093836111d9565b8101031261088557515f610747565b8280fd5b3d9150610869565b6040513d85823e3d90fd5b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b6001141561070b565b6040513d84823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff819492941161090257604052915f610690565b634e487b7160e01b82526041600452602482fd5b6040513d86823e3d90fd5b9350939650945092956020806001928751151581520195019101928d918b9693899698956105c6565b8880fd5b6040513d89823e3d90fd5b634e487b7160e01b89526041600452602489fd5b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420726174696f60981b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206f7261636c657360881b6044820152606490fd5b60405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964204c54567360a01b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b210323ab930ba34b7b760811b6044820152606490fd5b8680fd5b8580fd5b8480fd5b8380fd5b82358015158103610a835781526020928301920161042e565b503461023f578060031936011261023f576005546040516001600160a01b039091168152602090f35b503461023f57602036600319011261023f57610ae7611133565b6006546001600160a01b039081163303610b4e5760045491818316610b1b5716906001600160601b0360a01b161760045580f35b60405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e481cd95d60aa1b6044820152606490fd5b60405162461bcd60e51b815260206004820152602660248201527f4f6e6c79206f776e65722063616e207365742061676772656761746f7220636f6044820152651b9d1c9858dd60d21b6064820152608490fd5b503461023f578060031936011261023f576006546040516001600160a01b039091168152602090f35b503461023f5760208060031936011261023b57610be6611133565b338352828252610bfc60ff604085205416611351565b6001600160a01b03908116835260018252604083208054908490556003545f19939190848101908111610cdf578552600282528260408620541692818652604086206001600160601b0360a01b9485825416179055600354858101908111610ccb578652600283526040862054168552600182526040852055600354838101908111610cb75790600291855252604083209081541690556003548015610ca3570160035580f35b634e487b7160e01b83526011600452602483fd5b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b87526011600452602487fd5b634e487b7160e01b86526011600452602486fd5b503461023f57602036600319011261023f5760209060ff906040906001600160a01b03610d1e611133565b1681528084522054166040519015158152f35b503461023f57604036600319011261023f5760043560249081359081600354908184116110a1575b82840393841161108e5793610d6d846111fb565b93610d7b60405195866111d9565b808552610d8a601f19916111fb565b01865b8181106110095750505f19820191821190865b86610dab868361138f565b1015610ffc5782610dbc868361138f565b90610fe9578410610e575780610dd46004928761138f565b895260026020526040808a205490516349b1b18760e01b8152928a9184919082906001600160a01b03165afa8015610e4c57610e2d928a91610e32575b50610e1c828961163e565b52610e27818861163e565b506112df565b610da0565b610e4691503d808c833e61022181836111d9565b5f610e11565b6040513d8b823e3d90fd5b50505050509190505b604051918291602080840190808552835180925260408501928160408460051b880101950193815b848310610e955787870388f35b9193959092949650603f1988820301835284875191610200928382019360018060a01b0394858351168452848301511515858501526040830151151560408501526060918284015192850152815180915284610220850192019087905b808210610fcd575050509160019491610f96610f82610f6e610f228897608080870151908883039089015261114d565b60a0808601519087015260c0808601519087015260e085015160e08701526101008781870151169087015261012087818701511690870152610140808601519087830390880152611180565b610160808501519086830390870152611180565b61018080840151908583039086015261114d565b926101a0908183015116908301526101c080820151908301526101e080910151910152980193019301909287969593949294610e88565b8251151584528b96938401939092019160019190910190610ef2565b634e487b7160e01b895260116004528289fd5b5050505050919050610e60565b60209060409793975161101b816111bc565b898152828a818301528a6040830152606080808401528060808401528b60a08401528b60c08401528b60e08401528b6101008401528b61012084015280610140840152806101608401526101808301528a6101a08301528a6101c08301528a6101e0830152828901015201959195610d8d565b634e487b7160e01b865260116004528486fd5b92508092610d59565b503461023f57602036600319011261023f576020906040906001600160a01b036110d2611133565b168152600183522054604051908152f35b503461023f578060031936011261023f576020600354604051908152f35b90503461023b57602036600319011261023b576004358252600260209081526040909220546001600160a01b03168152f35b600435906001600160a01b038216820361114957565b5f80fd5b9081518082526020808093019301915f5b82811061116c575050505090565b83518552938101939281019260010161115e565b9081518082526020808093019301915f5b82811061119f575050505090565b83516001600160a01b031685529381019392810192600101611191565b610200810190811067ffffffffffffffff8211176108d257604052565b90601f8019910116810190811067ffffffffffffffff8211176108d257604052565b67ffffffffffffffff81116108d25760051b60200190565b81601f820112156111495780359161122a836111fb565b9261123860405194856111d9565b808452602092838086019260051b820101928311611149578301905b828210611262575050505090565b81358152908301908301611254565b81601f8201121561114957803591611288836111fb565b9261129660405194856111d9565b808452602092838086019260051b820101928311611149578301905b8282106112c0575050505090565b81356001600160a01b03811681036111495781529083019083016112b2565b5f1981146112ed5760010190565b634e487b7160e01b5f52601160045260245ffd5b969361133d9360e0979a99969361132f938a5260208a015260408901526101008060608a015288019061114d565b90868203608088015261114d565b9560a0850152151560c08401521515910152565b1561135857565b60405162461bcd60e51b815260206004820152600f60248201526e27b7363c903632b7321037b93232b960891b6044820152606490fd5b919082018092116112ed57565b51906001600160a01b038216820361114957565b5190811515820361114957565b81601f82011215611149578051916113d4836111fb565b926113e260405194856111d9565b808452602092838086019260051b820101928311611149578301905b82821061140c575050505090565b815181529083019083016113fe565b81601f8201121561114957805191611432836111fb565b9261144060405194856111d9565b808452602092838086019260051b820101928311611149578301905b82821061146a575050505090565b8380916114768461139c565b81520191019061145c565b602091828282031261114957815167ffffffffffffffff928382116111495701916102008383031261114957604051936114ba856111bc565b6114c38461139c565b85526114d08185016113b0565b818601526114e0604085016113b0565b604086015260608401518281116111495784019083601f830112156111495781519161150b836111fb565b9261151960405194856111d9565b808452828085019160051b83010191868311611149578301905b828210611627575050505060608501526080830151818111611149578261155b9185016113bd565b608085015260a083015160a085015260c083015160c085015260e083015160e085015261010061158c81850161139c565b9085015261012061159e81850161139c565b908501526101408084015182811161114957836115bc91860161141b565b908501526101608084015182811161114957836115da91860161141b565b908501526101809182840151918211611149576115f89184016113bd565b908301526101a061160a81830161139c565b908301526101c080820151908301526101e0809101519082015290565b838091611633846113b0565b815201910190611533565b80518210156116525760209160051b010190565b634e487b7160e01b5f52603260045260245ffdfe60803461007f57601f61011138819003918201601f19168301916001600160401b038311848410176100835780849260209460405283398101031261007f57516001600160a01b038116810361007f577f6c2e6ad0697ee74b6b109859efe075280fbb8639fd0923b952c65a4373bc191855604051607990816100988239f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040527f6c2e6ad0697ee74b6b109859efe075280fbb8639fd0923b952c65a4373bc1918545f808092368280378136915af43d82803e15603f573d90f35b3d90fdfea2646970667358221220dc53c46fbbb536817120bbfe2ad4353676b0c05f64ede996df0aaa9938acc5ed64736f6c63430008140033a2646970667358221220a41f9d7e49441c8b775ec7bf2a0fc401aead4c493713ebbf7047aea9aa0d108764736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003ac4f83dd109ba480d66bba202392d4df03e7d8d
-----Decoded View---------------
Arg [0] : _implementationContract (address): 0x3aC4F83Dd109ba480D66BbA202392D4df03E7d8D
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003ac4f83dd109ba480d66bba202392d4df03e7d8d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.