dexorder
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1155.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC1155} from "../token/ERC1155/IERC1155.sol";
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1155MetadataURI.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC1155MetadataURI} from "../token/ERC1155/extensions/IERC1155MetadataURI.sol";
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1155Receiver.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC1155Receiver} from "../token/ERC1155/IERC1155Receiver.sol";
|
||||
17
lib_openzeppelin_contracts/contracts/interfaces/IERC1271.sol
Normal file
17
lib_openzeppelin_contracts/contracts/interfaces/IERC1271.sol
Normal file
@@ -0,0 +1,17 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface of the ERC-1271 standard signature validation method for
|
||||
* contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].
|
||||
*/
|
||||
interface IERC1271 {
|
||||
/**
|
||||
* @dev Should return whether the signature provided is valid for the provided data
|
||||
* @param hash Hash of the data to be signed
|
||||
* @param signature Signature byte array associated with _data
|
||||
*/
|
||||
function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);
|
||||
}
|
||||
86
lib_openzeppelin_contracts/contracts/interfaces/IERC1363.sol
Normal file
86
lib_openzeppelin_contracts/contracts/interfaces/IERC1363.sol
Normal file
@@ -0,0 +1,86 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.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);
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1363Receiver.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @title IERC1363Receiver
|
||||
* @dev Interface for any contract that wants to support `transferAndCall` or `transferFromAndCall`
|
||||
* from ERC-1363 token contracts.
|
||||
*/
|
||||
interface IERC1363Receiver {
|
||||
/**
|
||||
* @dev Whenever ERC-1363 tokens are transferred to this contract via `transferAndCall` or `transferFromAndCall`
|
||||
* by `operator` from `from`, this function is called.
|
||||
*
|
||||
* NOTE: To accept the transfer, this must return
|
||||
* `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))`
|
||||
* (i.e. 0x88a7ca5c, or its own function selector).
|
||||
*
|
||||
* @param operator The address which called `transferAndCall` or `transferFromAndCall` function.
|
||||
* @param from The address which are tokens transferred from.
|
||||
* @param value The amount of tokens transferred.
|
||||
* @param data Additional data with no specified format.
|
||||
* @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` if transfer is allowed unless throwing.
|
||||
*/
|
||||
function onTransferReceived(
|
||||
address operator,
|
||||
address from,
|
||||
uint256 value,
|
||||
bytes calldata data
|
||||
) external returns (bytes4);
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1363Spender.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @title ERC1363Spender
|
||||
* @dev Interface for any contract that wants to support `approveAndCall`
|
||||
* from ERC-1363 token contracts.
|
||||
*/
|
||||
interface IERC1363Spender {
|
||||
/**
|
||||
* @dev Whenever an ERC-1363 token `owner` approves this contract via `approveAndCall`
|
||||
* to spend their tokens, this function is called.
|
||||
*
|
||||
* NOTE: To accept the approval, this must return
|
||||
* `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))`
|
||||
* (i.e. 0x7b04a2d0, or its own function selector).
|
||||
*
|
||||
* @param owner The address which called `approveAndCall` function and previously owned the tokens.
|
||||
* @param value The amount of tokens to be spent.
|
||||
* @param data Additional data with no specified format.
|
||||
* @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` if approval is allowed unless throwing.
|
||||
*/
|
||||
function onApprovalReceived(address owner, uint256 value, bytes calldata data) external returns (bytes4);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// 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";
|
||||
@@ -0,0 +1,20 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1820Implementer.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface for an ERC-1820 implementer, as defined in the
|
||||
* https://eips.ethereum.org/EIPS/eip-1820#interface-implementation-erc1820implementerinterface[ERC].
|
||||
* Used by contracts that will be registered as implementers in the
|
||||
* {IERC1820Registry}.
|
||||
*/
|
||||
interface IERC1820Implementer {
|
||||
/**
|
||||
* @dev Returns a special value (`ERC1820_ACCEPT_MAGIC`) if this contract
|
||||
* implements `interfaceHash` for `account`.
|
||||
*
|
||||
* See {IERC1820Registry-setInterfaceImplementer}.
|
||||
*/
|
||||
function canImplementInterfaceForAddress(bytes32 interfaceHash, address account) external view returns (bytes32);
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1820Registry.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface of the global ERC-1820 Registry, as defined in the
|
||||
* https://eips.ethereum.org/EIPS/eip-1820[ERC]. Accounts may register
|
||||
* implementers for interfaces in this registry, as well as query support.
|
||||
*
|
||||
* Implementers may be shared by multiple accounts, and can also implement more
|
||||
* than a single interface for each account. Contracts can implement interfaces
|
||||
* for themselves, but externally-owned accounts (EOA) must delegate this to a
|
||||
* contract.
|
||||
*
|
||||
* {IERC165} interfaces can also be queried via the registry.
|
||||
*
|
||||
* For an in-depth explanation and source code analysis, see the ERC text.
|
||||
*/
|
||||
interface IERC1820Registry {
|
||||
event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer);
|
||||
|
||||
event ManagerChanged(address indexed account, address indexed newManager);
|
||||
|
||||
/**
|
||||
* @dev Sets `newManager` as the manager for `account`. A manager of an
|
||||
* account is able to set interface implementers for it.
|
||||
*
|
||||
* By default, each account is its own manager. Passing a value of `0x0` in
|
||||
* `newManager` will reset the manager to this initial state.
|
||||
*
|
||||
* Emits a {ManagerChanged} event.
|
||||
*
|
||||
* Requirements:
|
||||
*
|
||||
* - the caller must be the current manager for `account`.
|
||||
*/
|
||||
function setManager(address account, address newManager) external;
|
||||
|
||||
/**
|
||||
* @dev Returns the manager for `account`.
|
||||
*
|
||||
* See {setManager}.
|
||||
*/
|
||||
function getManager(address account) external view returns (address);
|
||||
|
||||
/**
|
||||
* @dev Sets the `implementer` contract as ``account``'s implementer for
|
||||
* `interfaceHash`.
|
||||
*
|
||||
* `account` being the zero address is an alias for the caller's address.
|
||||
* The zero address can also be used in `implementer` to remove an old one.
|
||||
*
|
||||
* See {interfaceHash} to learn how these are created.
|
||||
*
|
||||
* Emits an {InterfaceImplementerSet} event.
|
||||
*
|
||||
* Requirements:
|
||||
*
|
||||
* - the caller must be the current manager for `account`.
|
||||
* - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not
|
||||
* end in 28 zeroes).
|
||||
* - `implementer` must implement {IERC1820Implementer} and return true when
|
||||
* queried for support, unless `implementer` is the caller. See
|
||||
* {IERC1820Implementer-canImplementInterfaceForAddress}.
|
||||
*/
|
||||
function setInterfaceImplementer(address account, bytes32 _interfaceHash, address implementer) external;
|
||||
|
||||
/**
|
||||
* @dev Returns the implementer of `interfaceHash` for `account`. If no such
|
||||
* implementer is registered, returns the zero address.
|
||||
*
|
||||
* If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28
|
||||
* zeroes), `account` will be queried for support of it.
|
||||
*
|
||||
* `account` being the zero address is an alias for the caller's address.
|
||||
*/
|
||||
function getInterfaceImplementer(address account, bytes32 _interfaceHash) external view returns (address);
|
||||
|
||||
/**
|
||||
* @dev Returns the interface hash for an `interfaceName`, as defined in the
|
||||
* corresponding
|
||||
* https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the ERC].
|
||||
*/
|
||||
function interfaceHash(string calldata interfaceName) external pure returns (bytes32);
|
||||
|
||||
/**
|
||||
* @notice Updates the cache with whether the contract implements an ERC-165 interface or not.
|
||||
* @param account Address of the contract for which to update the cache.
|
||||
* @param interfaceId ERC-165 interface for which to update the cache.
|
||||
*/
|
||||
function updateERC165Cache(address account, bytes4 interfaceId) external;
|
||||
|
||||
/**
|
||||
* @notice Checks whether a contract implements an ERC-165 interface or not.
|
||||
* If the result is not cached a direct lookup on the contract address is performed.
|
||||
* If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling
|
||||
* {updateERC165Cache} with the contract address.
|
||||
* @param account Address of the contract to check.
|
||||
* @param interfaceId ERC-165 interface to check.
|
||||
* @return True if `account` implements `interfaceId`, false otherwise.
|
||||
*/
|
||||
function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool);
|
||||
|
||||
/**
|
||||
* @notice Checks whether a contract implements an ERC-165 interface or not without using or updating the cache.
|
||||
* @param account Address of the contract to check.
|
||||
* @param interfaceId ERC-165 interface to check.
|
||||
* @return True if `account` implements `interfaceId`, false otherwise.
|
||||
*/
|
||||
function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool);
|
||||
}
|
||||
24
lib_openzeppelin_contracts/contracts/interfaces/IERC1967.sol
Normal file
24
lib_openzeppelin_contracts/contracts/interfaces/IERC1967.sol
Normal file
@@ -0,0 +1,24 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1967.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC.
|
||||
*/
|
||||
interface IERC1967 {
|
||||
/**
|
||||
* @dev Emitted when the implementation is upgraded.
|
||||
*/
|
||||
event Upgraded(address indexed implementation);
|
||||
|
||||
/**
|
||||
* @dev Emitted when the admin account has changed.
|
||||
*/
|
||||
event AdminChanged(address previousAdmin, address newAdmin);
|
||||
|
||||
/**
|
||||
* @dev Emitted when the beacon is changed.
|
||||
*/
|
||||
event BeaconUpgraded(address indexed beacon);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// 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";
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20Metadata.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol";
|
||||
19
lib_openzeppelin_contracts/contracts/interfaces/IERC2309.sol
Normal file
19
lib_openzeppelin_contracts/contracts/interfaces/IERC2309.sol
Normal file
@@ -0,0 +1,19 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC2309.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev ERC-2309: ERC-721 Consecutive Transfer Extension.
|
||||
*/
|
||||
interface IERC2309 {
|
||||
/**
|
||||
* @dev Emitted when the tokens from `fromTokenId` to `toTokenId` are transferred from `fromAddress` to `toAddress`.
|
||||
*/
|
||||
event ConsecutiveTransfer(
|
||||
uint256 indexed fromTokenId,
|
||||
uint256 toTokenId,
|
||||
address indexed fromAddress,
|
||||
address indexed toAddress
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC2612.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC20Permit} from "../token/ERC20/extensions/IERC20Permit.sol";
|
||||
|
||||
interface IERC2612 is IERC20Permit {}
|
||||
23
lib_openzeppelin_contracts/contracts/interfaces/IERC2981.sol
Normal file
23
lib_openzeppelin_contracts/contracts/interfaces/IERC2981.sol
Normal file
@@ -0,0 +1,23 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC2981.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC165} from "../utils/introspection/IERC165.sol";
|
||||
|
||||
/**
|
||||
* @dev Interface for the NFT Royalty Standard.
|
||||
*
|
||||
* A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
|
||||
* support for royalty payments across all NFT marketplaces and ecosystem participants.
|
||||
*/
|
||||
interface IERC2981 is IERC165 {
|
||||
/**
|
||||
* @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
|
||||
* exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
|
||||
*/
|
||||
function royaltyInfo(
|
||||
uint256 tokenId,
|
||||
uint256 salePrice
|
||||
) external view returns (address receiver, uint256 royaltyAmount);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC3156.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC3156FlashBorrower} from "./IERC3156FlashBorrower.sol";
|
||||
import {IERC3156FlashLender} from "./IERC3156FlashLender.sol";
|
||||
@@ -0,0 +1,27 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC3156FlashBorrower.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface of the ERC-3156 FlashBorrower, as defined in
|
||||
* https://eips.ethereum.org/EIPS/eip-3156[ERC-3156].
|
||||
*/
|
||||
interface IERC3156FlashBorrower {
|
||||
/**
|
||||
* @dev Receive a flash loan.
|
||||
* @param initiator The initiator of the loan.
|
||||
* @param token The loan currency.
|
||||
* @param amount The amount of tokens lent.
|
||||
* @param fee The additional amount of tokens to repay.
|
||||
* @param data Arbitrary data structure, intended to contain user-defined parameters.
|
||||
* @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan"
|
||||
*/
|
||||
function onFlashLoan(
|
||||
address initiator,
|
||||
address token,
|
||||
uint256 amount,
|
||||
uint256 fee,
|
||||
bytes calldata data
|
||||
) external returns (bytes32);
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC3156FlashLender.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC3156FlashBorrower} from "./IERC3156FlashBorrower.sol";
|
||||
|
||||
/**
|
||||
* @dev Interface of the ERC-3156 FlashLender, as defined in
|
||||
* https://eips.ethereum.org/EIPS/eip-3156[ERC-3156].
|
||||
*/
|
||||
interface IERC3156FlashLender {
|
||||
/**
|
||||
* @dev The amount of currency available to be lended.
|
||||
* @param token The loan currency.
|
||||
* @return The amount of `token` that can be borrowed.
|
||||
*/
|
||||
function maxFlashLoan(address token) external view returns (uint256);
|
||||
|
||||
/**
|
||||
* @dev The fee to be charged for a given loan.
|
||||
* @param token The loan currency.
|
||||
* @param amount The amount of tokens lent.
|
||||
* @return The amount of `token` to be charged for the loan, on top of the returned principal.
|
||||
*/
|
||||
function flashFee(address token, uint256 amount) external view returns (uint256);
|
||||
|
||||
/**
|
||||
* @dev Initiate a flash loan.
|
||||
* @param receiver The receiver of the tokens in the loan, and the receiver of the callback.
|
||||
* @param token The loan currency.
|
||||
* @param amount The amount of tokens lent.
|
||||
* @param data Arbitrary data structure, intended to contain user-defined parameters.
|
||||
*/
|
||||
function flashLoan(
|
||||
IERC3156FlashBorrower receiver,
|
||||
address token,
|
||||
uint256 amount,
|
||||
bytes calldata data
|
||||
) external returns (bool);
|
||||
}
|
||||
230
lib_openzeppelin_contracts/contracts/interfaces/IERC4626.sol
Normal file
230
lib_openzeppelin_contracts/contracts/interfaces/IERC4626.sol
Normal file
@@ -0,0 +1,230 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC20} from "../token/ERC20/IERC20.sol";
|
||||
import {IERC20Metadata} from "../token/ERC20/extensions/IERC20Metadata.sol";
|
||||
|
||||
/**
|
||||
* @dev Interface of the ERC-4626 "Tokenized Vault Standard", as defined in
|
||||
* https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].
|
||||
*/
|
||||
interface IERC4626 is IERC20, IERC20Metadata {
|
||||
event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);
|
||||
|
||||
event Withdraw(
|
||||
address indexed sender,
|
||||
address indexed receiver,
|
||||
address indexed owner,
|
||||
uint256 assets,
|
||||
uint256 shares
|
||||
);
|
||||
|
||||
/**
|
||||
* @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.
|
||||
*
|
||||
* - MUST be an ERC-20 token contract.
|
||||
* - MUST NOT revert.
|
||||
*/
|
||||
function asset() external view returns (address assetTokenAddress);
|
||||
|
||||
/**
|
||||
* @dev Returns the total amount of the underlying asset that is “managed” by Vault.
|
||||
*
|
||||
* - SHOULD include any compounding that occurs from yield.
|
||||
* - MUST be inclusive of any fees that are charged against assets in the Vault.
|
||||
* - MUST NOT revert.
|
||||
*/
|
||||
function totalAssets() external view returns (uint256 totalManagedAssets);
|
||||
|
||||
/**
|
||||
* @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal
|
||||
* scenario where all the conditions are met.
|
||||
*
|
||||
* - MUST NOT be inclusive of any fees that are charged against assets in the Vault.
|
||||
* - MUST NOT show any variations depending on the caller.
|
||||
* - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.
|
||||
* - MUST NOT revert.
|
||||
*
|
||||
* NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the
|
||||
* “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and
|
||||
* from.
|
||||
*/
|
||||
function convertToShares(uint256 assets) external view returns (uint256 shares);
|
||||
|
||||
/**
|
||||
* @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal
|
||||
* scenario where all the conditions are met.
|
||||
*
|
||||
* - MUST NOT be inclusive of any fees that are charged against assets in the Vault.
|
||||
* - MUST NOT show any variations depending on the caller.
|
||||
* - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.
|
||||
* - MUST NOT revert.
|
||||
*
|
||||
* NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the
|
||||
* “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and
|
||||
* from.
|
||||
*/
|
||||
function convertToAssets(uint256 shares) external view returns (uint256 assets);
|
||||
|
||||
/**
|
||||
* @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,
|
||||
* through a deposit call.
|
||||
*
|
||||
* - MUST return a limited value if receiver is subject to some deposit limit.
|
||||
* - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.
|
||||
* - MUST NOT revert.
|
||||
*/
|
||||
function maxDeposit(address receiver) external view returns (uint256 maxAssets);
|
||||
|
||||
/**
|
||||
* @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given
|
||||
* current on-chain conditions.
|
||||
*
|
||||
* - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit
|
||||
* call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called
|
||||
* in the same transaction.
|
||||
* - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the
|
||||
* deposit would be accepted, regardless if the user has enough tokens approved, etc.
|
||||
* - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.
|
||||
* - MUST NOT revert.
|
||||
*
|
||||
* NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in
|
||||
* share price or some other type of condition, meaning the depositor will lose assets by depositing.
|
||||
*/
|
||||
function previewDeposit(uint256 assets) external view returns (uint256 shares);
|
||||
|
||||
/**
|
||||
* @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.
|
||||
*
|
||||
* - MUST emit the Deposit event.
|
||||
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
|
||||
* deposit execution, and are accounted for during deposit.
|
||||
* - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not
|
||||
* approving enough underlying tokens to the Vault contract, etc).
|
||||
*
|
||||
* NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.
|
||||
*/
|
||||
function deposit(uint256 assets, address receiver) external returns (uint256 shares);
|
||||
|
||||
/**
|
||||
* @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.
|
||||
* - MUST return a limited value if receiver is subject to some mint limit.
|
||||
* - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.
|
||||
* - MUST NOT revert.
|
||||
*/
|
||||
function maxMint(address receiver) external view returns (uint256 maxShares);
|
||||
|
||||
/**
|
||||
* @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given
|
||||
* current on-chain conditions.
|
||||
*
|
||||
* - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call
|
||||
* in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the
|
||||
* same transaction.
|
||||
* - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint
|
||||
* would be accepted, regardless if the user has enough tokens approved, etc.
|
||||
* - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.
|
||||
* - MUST NOT revert.
|
||||
*
|
||||
* NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in
|
||||
* share price or some other type of condition, meaning the depositor will lose assets by minting.
|
||||
*/
|
||||
function previewMint(uint256 shares) external view returns (uint256 assets);
|
||||
|
||||
/**
|
||||
* @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.
|
||||
*
|
||||
* - MUST emit the Deposit event.
|
||||
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint
|
||||
* execution, and are accounted for during mint.
|
||||
* - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not
|
||||
* approving enough underlying tokens to the Vault contract, etc).
|
||||
*
|
||||
* NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.
|
||||
*/
|
||||
function mint(uint256 shares, address receiver) external returns (uint256 assets);
|
||||
|
||||
/**
|
||||
* @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the
|
||||
* Vault, through a withdraw call.
|
||||
*
|
||||
* - MUST return a limited value if owner is subject to some withdrawal limit or timelock.
|
||||
* - MUST NOT revert.
|
||||
*/
|
||||
function maxWithdraw(address owner) external view returns (uint256 maxAssets);
|
||||
|
||||
/**
|
||||
* @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,
|
||||
* given current on-chain conditions.
|
||||
*
|
||||
* - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw
|
||||
* call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if
|
||||
* called
|
||||
* in the same transaction.
|
||||
* - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though
|
||||
* the withdrawal would be accepted, regardless if the user has enough shares, etc.
|
||||
* - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
|
||||
* - MUST NOT revert.
|
||||
*
|
||||
* NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in
|
||||
* share price or some other type of condition, meaning the depositor will lose assets by depositing.
|
||||
*/
|
||||
function previewWithdraw(uint256 assets) external view returns (uint256 shares);
|
||||
|
||||
/**
|
||||
* @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.
|
||||
*
|
||||
* - MUST emit the Withdraw event.
|
||||
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
|
||||
* withdraw execution, and are accounted for during withdraw.
|
||||
* - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner
|
||||
* not having enough shares, etc).
|
||||
*
|
||||
* Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.
|
||||
* Those methods should be performed separately.
|
||||
*/
|
||||
function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);
|
||||
|
||||
/**
|
||||
* @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,
|
||||
* through a redeem call.
|
||||
*
|
||||
* - MUST return a limited value if owner is subject to some withdrawal limit or timelock.
|
||||
* - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.
|
||||
* - MUST NOT revert.
|
||||
*/
|
||||
function maxRedeem(address owner) external view returns (uint256 maxShares);
|
||||
|
||||
/**
|
||||
* @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,
|
||||
* given current on-chain conditions.
|
||||
*
|
||||
* - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call
|
||||
* in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the
|
||||
* same transaction.
|
||||
* - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the
|
||||
* redemption would be accepted, regardless if the user has enough shares, etc.
|
||||
* - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.
|
||||
* - MUST NOT revert.
|
||||
*
|
||||
* NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in
|
||||
* share price or some other type of condition, meaning the depositor will lose assets by redeeming.
|
||||
*/
|
||||
function previewRedeem(uint256 shares) external view returns (uint256 assets);
|
||||
|
||||
/**
|
||||
* @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.
|
||||
*
|
||||
* - MUST emit the Withdraw event.
|
||||
* - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the
|
||||
* redeem execution, and are accounted for during redeem.
|
||||
* - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner
|
||||
* not having enough shares, etc).
|
||||
*
|
||||
* NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.
|
||||
* Those methods should be performed separately.
|
||||
*/
|
||||
function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);
|
||||
}
|
||||
20
lib_openzeppelin_contracts/contracts/interfaces/IERC4906.sol
Normal file
20
lib_openzeppelin_contracts/contracts/interfaces/IERC4906.sol
Normal file
@@ -0,0 +1,20 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4906.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC165} from "./IERC165.sol";
|
||||
import {IERC721} from "./IERC721.sol";
|
||||
|
||||
/// @title ERC-721 Metadata Update Extension
|
||||
interface IERC4906 is IERC165, IERC721 {
|
||||
/// @dev This event emits when the metadata of a token is changed.
|
||||
/// So that the third-party platforms such as NFT market could
|
||||
/// timely update the images and related attributes of the NFT.
|
||||
event MetadataUpdate(uint256 _tokenId);
|
||||
|
||||
/// @dev This event emits when the metadata of a range of tokens is changed.
|
||||
/// So that the third-party platforms such as NFT market could
|
||||
/// timely update the images and related attributes of the NFTs.
|
||||
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
|
||||
}
|
||||
28
lib_openzeppelin_contracts/contracts/interfaces/IERC5267.sol
Normal file
28
lib_openzeppelin_contracts/contracts/interfaces/IERC5267.sol
Normal file
@@ -0,0 +1,28 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
interface IERC5267 {
|
||||
/**
|
||||
* @dev MAY be emitted to signal that the domain could have changed.
|
||||
*/
|
||||
event EIP712DomainChanged();
|
||||
|
||||
/**
|
||||
* @dev returns the fields and values that describe the domain separator used by this contract for EIP-712
|
||||
* signature.
|
||||
*/
|
||||
function eip712Domain()
|
||||
external
|
||||
view
|
||||
returns (
|
||||
bytes1 fields,
|
||||
string memory name,
|
||||
string memory version,
|
||||
uint256 chainId,
|
||||
address verifyingContract,
|
||||
bytes32 salt,
|
||||
uint256[] memory extensions
|
||||
);
|
||||
}
|
||||
16
lib_openzeppelin_contracts/contracts/interfaces/IERC5313.sol
Normal file
16
lib_openzeppelin_contracts/contracts/interfaces/IERC5313.sol
Normal file
@@ -0,0 +1,16 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5313.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface for the Light Contract Ownership Standard.
|
||||
*
|
||||
* A standardized minimal interface required to identify an account that controls a contract
|
||||
*/
|
||||
interface IERC5313 {
|
||||
/**
|
||||
* @dev Gets the address of the owner.
|
||||
*/
|
||||
function owner() external view returns (address);
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5805.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IVotes} from "../governance/utils/IVotes.sol";
|
||||
import {IERC6372} from "./IERC6372.sol";
|
||||
|
||||
interface IERC5805 is IERC6372, IVotes {}
|
||||
17
lib_openzeppelin_contracts/contracts/interfaces/IERC6372.sol
Normal file
17
lib_openzeppelin_contracts/contracts/interfaces/IERC6372.sol
Normal file
@@ -0,0 +1,17 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC6372.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
interface IERC6372 {
|
||||
/**
|
||||
* @dev Clock used for flagging checkpoints. Can be overridden to implement timestamp based checkpoints (and voting).
|
||||
*/
|
||||
function clock() external view returns (uint48);
|
||||
|
||||
/**
|
||||
* @dev Description of the clock
|
||||
*/
|
||||
// solhint-disable-next-line func-name-mixedcase
|
||||
function CLOCK_MODE() external view returns (string memory);
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC721} from "../token/ERC721/IERC721.sol";
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721Enumerable.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC721Enumerable} from "../token/ERC721/extensions/IERC721Enumerable.sol";
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721Metadata.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC721Metadata} from "../token/ERC721/extensions/IERC721Metadata.sol";
|
||||
@@ -0,0 +1,6 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC721Receiver.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import {IERC721Receiver} from "../token/ERC721/IERC721Receiver.sol";
|
||||
200
lib_openzeppelin_contracts/contracts/interfaces/IERC777.sol
Normal file
200
lib_openzeppelin_contracts/contracts/interfaces/IERC777.sol
Normal file
@@ -0,0 +1,200 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC777.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface of the ERC-777 Token standard as defined in the ERC.
|
||||
*
|
||||
* This contract uses the
|
||||
* https://eips.ethereum.org/EIPS/eip-1820[ERC-1820 registry standard] to let
|
||||
* token holders and recipients react to token movements by using setting implementers
|
||||
* for the associated interfaces in said registry. See {IERC1820Registry} and
|
||||
* {IERC1820Implementer}.
|
||||
*/
|
||||
interface IERC777 {
|
||||
/**
|
||||
* @dev Emitted when `amount` tokens are created by `operator` and assigned to `to`.
|
||||
*
|
||||
* Note that some additional user `data` and `operatorData` can be logged in the event.
|
||||
*/
|
||||
event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
|
||||
|
||||
/**
|
||||
* @dev Emitted when `operator` destroys `amount` tokens from `account`.
|
||||
*
|
||||
* Note that some additional user `data` and `operatorData` can be logged in the event.
|
||||
*/
|
||||
event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
|
||||
|
||||
/**
|
||||
* @dev Emitted when `operator` is made operator for `tokenHolder`.
|
||||
*/
|
||||
event AuthorizedOperator(address indexed operator, address indexed tokenHolder);
|
||||
|
||||
/**
|
||||
* @dev Emitted when `operator` is revoked its operator status for `tokenHolder`.
|
||||
*/
|
||||
event RevokedOperator(address indexed operator, address indexed tokenHolder);
|
||||
|
||||
/**
|
||||
* @dev Returns the name of the token.
|
||||
*/
|
||||
function name() external view returns (string memory);
|
||||
|
||||
/**
|
||||
* @dev Returns the symbol of the token, usually a shorter version of the
|
||||
* name.
|
||||
*/
|
||||
function symbol() external view returns (string memory);
|
||||
|
||||
/**
|
||||
* @dev Returns the smallest part of the token that is not divisible. This
|
||||
* means all token operations (creation, movement and destruction) must have
|
||||
* amounts that are a multiple of this number.
|
||||
*
|
||||
* For most token contracts, this value will equal 1.
|
||||
*/
|
||||
function granularity() external view returns (uint256);
|
||||
|
||||
/**
|
||||
* @dev Returns the amount of tokens in existence.
|
||||
*/
|
||||
function totalSupply() external view returns (uint256);
|
||||
|
||||
/**
|
||||
* @dev Returns the amount of tokens owned by an account (`owner`).
|
||||
*/
|
||||
function balanceOf(address owner) external view returns (uint256);
|
||||
|
||||
/**
|
||||
* @dev Moves `amount` tokens from the caller's account to `recipient`.
|
||||
*
|
||||
* If send or receive hooks are registered for the caller and `recipient`,
|
||||
* the corresponding functions will be called with `data` and empty
|
||||
* `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
|
||||
*
|
||||
* Emits a {Sent} event.
|
||||
*
|
||||
* Requirements
|
||||
*
|
||||
* - the caller must have at least `amount` tokens.
|
||||
* - `recipient` cannot be the zero address.
|
||||
* - if `recipient` is a contract, it must implement the {IERC777Recipient}
|
||||
* interface.
|
||||
*/
|
||||
function send(address recipient, uint256 amount, bytes calldata data) external;
|
||||
|
||||
/**
|
||||
* @dev Destroys `amount` tokens from the caller's account, reducing the
|
||||
* total supply.
|
||||
*
|
||||
* If a send hook is registered for the caller, the corresponding function
|
||||
* will be called with `data` and empty `operatorData`. See {IERC777Sender}.
|
||||
*
|
||||
* Emits a {Burned} event.
|
||||
*
|
||||
* Requirements
|
||||
*
|
||||
* - the caller must have at least `amount` tokens.
|
||||
*/
|
||||
function burn(uint256 amount, bytes calldata data) external;
|
||||
|
||||
/**
|
||||
* @dev Returns true if an account is an operator of `tokenHolder`.
|
||||
* Operators can send and burn tokens on behalf of their owners. All
|
||||
* accounts are their own operator.
|
||||
*
|
||||
* See {operatorSend} and {operatorBurn}.
|
||||
*/
|
||||
function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
|
||||
|
||||
/**
|
||||
* @dev Make an account an operator of the caller.
|
||||
*
|
||||
* See {isOperatorFor}.
|
||||
*
|
||||
* Emits an {AuthorizedOperator} event.
|
||||
*
|
||||
* Requirements
|
||||
*
|
||||
* - `operator` cannot be calling address.
|
||||
*/
|
||||
function authorizeOperator(address operator) external;
|
||||
|
||||
/**
|
||||
* @dev Revoke an account's operator status for the caller.
|
||||
*
|
||||
* See {isOperatorFor} and {defaultOperators}.
|
||||
*
|
||||
* Emits a {RevokedOperator} event.
|
||||
*
|
||||
* Requirements
|
||||
*
|
||||
* - `operator` cannot be calling address.
|
||||
*/
|
||||
function revokeOperator(address operator) external;
|
||||
|
||||
/**
|
||||
* @dev Returns the list of default operators. These accounts are operators
|
||||
* for all token holders, even if {authorizeOperator} was never called on
|
||||
* them.
|
||||
*
|
||||
* This list is immutable, but individual holders may revoke these via
|
||||
* {revokeOperator}, in which case {isOperatorFor} will return false.
|
||||
*/
|
||||
function defaultOperators() external view returns (address[] memory);
|
||||
|
||||
/**
|
||||
* @dev Moves `amount` tokens from `sender` to `recipient`. The caller must
|
||||
* be an operator of `sender`.
|
||||
*
|
||||
* If send or receive hooks are registered for `sender` and `recipient`,
|
||||
* the corresponding functions will be called with `data` and
|
||||
* `operatorData`. See {IERC777Sender} and {IERC777Recipient}.
|
||||
*
|
||||
* Emits a {Sent} event.
|
||||
*
|
||||
* Requirements
|
||||
*
|
||||
* - `sender` cannot be the zero address.
|
||||
* - `sender` must have at least `amount` tokens.
|
||||
* - the caller must be an operator for `sender`.
|
||||
* - `recipient` cannot be the zero address.
|
||||
* - if `recipient` is a contract, it must implement the {IERC777Recipient}
|
||||
* interface.
|
||||
*/
|
||||
function operatorSend(
|
||||
address sender,
|
||||
address recipient,
|
||||
uint256 amount,
|
||||
bytes calldata data,
|
||||
bytes calldata operatorData
|
||||
) external;
|
||||
|
||||
/**
|
||||
* @dev Destroys `amount` tokens from `account`, reducing the total supply.
|
||||
* The caller must be an operator of `account`.
|
||||
*
|
||||
* If a send hook is registered for `account`, the corresponding function
|
||||
* will be called with `data` and `operatorData`. See {IERC777Sender}.
|
||||
*
|
||||
* Emits a {Burned} event.
|
||||
*
|
||||
* Requirements
|
||||
*
|
||||
* - `account` cannot be the zero address.
|
||||
* - `account` must have at least `amount` tokens.
|
||||
* - the caller must be an operator for `account`.
|
||||
*/
|
||||
function operatorBurn(address account, uint256 amount, bytes calldata data, bytes calldata operatorData) external;
|
||||
|
||||
event Sent(
|
||||
address indexed operator,
|
||||
address indexed from,
|
||||
address indexed to,
|
||||
uint256 amount,
|
||||
bytes data,
|
||||
bytes operatorData
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC777Recipient.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface of the ERC-777 Tokens Recipient standard as defined in the ERC.
|
||||
*
|
||||
* Accounts can be notified of {IERC777} tokens being sent to them by having a
|
||||
* contract implement this interface (contract holders can be their own
|
||||
* implementer) and registering it on the
|
||||
* https://eips.ethereum.org/EIPS/eip-1820[ERC-1820 global registry].
|
||||
*
|
||||
* See {IERC1820Registry} and {IERC1820Implementer}.
|
||||
*/
|
||||
interface IERC777Recipient {
|
||||
/**
|
||||
* @dev Called by an {IERC777} token contract whenever tokens are being
|
||||
* moved or created into a registered account (`to`). The type of operation
|
||||
* is conveyed by `from` being the zero address or not.
|
||||
*
|
||||
* This call occurs _after_ the token contract's state is updated, so
|
||||
* {IERC777-balanceOf}, etc., can be used to query the post-operation state.
|
||||
*
|
||||
* This function may revert to prevent the operation from being executed.
|
||||
*/
|
||||
function tokensReceived(
|
||||
address operator,
|
||||
address from,
|
||||
address to,
|
||||
uint256 amount,
|
||||
bytes calldata userData,
|
||||
bytes calldata operatorData
|
||||
) external;
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC777Sender.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Interface of the ERC-777 Tokens Sender standard as defined in the ERC.
|
||||
*
|
||||
* {IERC777} Token holders can be notified of operations performed on their
|
||||
* tokens by having a contract implement this interface (contract holders can be
|
||||
* their own implementer) and registering it on the
|
||||
* https://eips.ethereum.org/EIPS/eip-1820[ERC-1820 global registry].
|
||||
*
|
||||
* See {IERC1820Registry} and {IERC1820Implementer}.
|
||||
*/
|
||||
interface IERC777Sender {
|
||||
/**
|
||||
* @dev Called by an {IERC777} token contract whenever a registered holder's
|
||||
* (`from`) tokens are about to be moved or destroyed. The type of operation
|
||||
* is conveyed by `to` being the zero address or not.
|
||||
*
|
||||
* This call occurs _before_ the token contract's state is updated, so
|
||||
* {IERC777-balanceOf}, etc., can be used to query the pre-operation state.
|
||||
*
|
||||
* This function may revert to prevent the operation from being executed.
|
||||
*/
|
||||
function tokensToSend(
|
||||
address operator,
|
||||
address from,
|
||||
address to,
|
||||
uint256 amount,
|
||||
bytes calldata userData,
|
||||
bytes calldata operatorData
|
||||
) external;
|
||||
}
|
||||
82
lib_openzeppelin_contracts/contracts/interfaces/README.adoc
Normal file
82
lib_openzeppelin_contracts/contracts/interfaces/README.adoc
Normal file
@@ -0,0 +1,82 @@
|
||||
= Interfaces
|
||||
|
||||
[.readme-notice]
|
||||
NOTE: This document is better viewed at https://docs.openzeppelin.com/contracts/api/interfaces
|
||||
|
||||
== List of standardized interfaces
|
||||
These interfaces are available as `.sol` files, and also as compiler `.json` ABI files (through the npm package). These
|
||||
are useful to interact with third party contracts that implement them.
|
||||
|
||||
- {IERC20}
|
||||
- {IERC20Errors}
|
||||
- {IERC20Metadata}
|
||||
- {IERC165}
|
||||
- {IERC721}
|
||||
- {IERC721Receiver}
|
||||
- {IERC721Enumerable}
|
||||
- {IERC721Metadata}
|
||||
- {IERC721Errors}
|
||||
- {IERC777}
|
||||
- {IERC777Recipient}
|
||||
- {IERC777Sender}
|
||||
- {IERC1155}
|
||||
- {IERC1155Receiver}
|
||||
- {IERC1155MetadataURI}
|
||||
- {IERC1155Errors}
|
||||
- {IERC1271}
|
||||
- {IERC1363}
|
||||
- {IERC1363Receiver}
|
||||
- {IERC1363Spender}
|
||||
- {IERC1820Implementer}
|
||||
- {IERC1820Registry}
|
||||
- {IERC1822Proxiable}
|
||||
- {IERC2612}
|
||||
- {IERC2981}
|
||||
- {IERC3156FlashLender}
|
||||
- {IERC3156FlashBorrower}
|
||||
- {IERC4626}
|
||||
- {IERC4906}
|
||||
- {IERC5267}
|
||||
- {IERC5313}
|
||||
- {IERC5805}
|
||||
- {IERC6372}
|
||||
|
||||
== Detailed ABI
|
||||
|
||||
{{IERC20Errors}}
|
||||
|
||||
{{IERC721Errors}}
|
||||
|
||||
{{IERC1155Errors}}
|
||||
|
||||
{{IERC1271}}
|
||||
|
||||
{{IERC1363}}
|
||||
|
||||
{{IERC1363Receiver}}
|
||||
|
||||
{{IERC1363Spender}}
|
||||
|
||||
{{IERC1820Implementer}}
|
||||
|
||||
{{IERC1820Registry}}
|
||||
|
||||
{{IERC1822Proxiable}}
|
||||
|
||||
{{IERC2612}}
|
||||
|
||||
{{IERC2981}}
|
||||
|
||||
{{IERC3156FlashLender}}
|
||||
|
||||
{{IERC3156FlashBorrower}}
|
||||
|
||||
{{IERC4626}}
|
||||
|
||||
{{IERC5313}}
|
||||
|
||||
{{IERC5267}}
|
||||
|
||||
{{IERC5805}}
|
||||
|
||||
{{IERC6372}}
|
||||
@@ -0,0 +1,20 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC1822.sol)
|
||||
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev ERC-1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified
|
||||
* proxy whose upgrades are fully controlled by the current implementation.
|
||||
*/
|
||||
interface IERC1822Proxiable {
|
||||
/**
|
||||
* @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation
|
||||
* address.
|
||||
*
|
||||
* IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks
|
||||
* bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this
|
||||
* function revert if invoked through a proxy.
|
||||
*/
|
||||
function proxiableUUID() external view returns (bytes32);
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
/**
|
||||
* @dev Standard ERC-20 Errors
|
||||
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
|
||||
*/
|
||||
interface IERC20Errors {
|
||||
/**
|
||||
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
|
||||
* @param sender Address whose tokens are being transferred.
|
||||
* @param balance Current balance for the interacting account.
|
||||
* @param needed Minimum amount required to perform a transfer.
|
||||
*/
|
||||
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the token `sender`. Used in transfers.
|
||||
* @param sender Address whose tokens are being transferred.
|
||||
*/
|
||||
error ERC20InvalidSender(address sender);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the token `receiver`. Used in transfers.
|
||||
* @param receiver Address to which tokens are being transferred.
|
||||
*/
|
||||
error ERC20InvalidReceiver(address receiver);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
|
||||
* @param spender Address that may be allowed to operate on tokens without being their owner.
|
||||
* @param allowance Amount of tokens a `spender` is allowed to operate with.
|
||||
* @param needed Minimum amount required to perform a transfer.
|
||||
*/
|
||||
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
|
||||
* @param approver Address initiating an approval operation.
|
||||
*/
|
||||
error ERC20InvalidApprover(address approver);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
|
||||
* @param spender Address that may be allowed to operate on tokens without being their owner.
|
||||
*/
|
||||
error ERC20InvalidSpender(address spender);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Standard ERC-721 Errors
|
||||
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
|
||||
*/
|
||||
interface IERC721Errors {
|
||||
/**
|
||||
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
|
||||
* Used in balance queries.
|
||||
* @param owner Address of the current owner of a token.
|
||||
*/
|
||||
error ERC721InvalidOwner(address owner);
|
||||
|
||||
/**
|
||||
* @dev Indicates a `tokenId` whose `owner` is the zero address.
|
||||
* @param tokenId Identifier number of a token.
|
||||
*/
|
||||
error ERC721NonexistentToken(uint256 tokenId);
|
||||
|
||||
/**
|
||||
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
|
||||
* @param sender Address whose tokens are being transferred.
|
||||
* @param tokenId Identifier number of a token.
|
||||
* @param owner Address of the current owner of a token.
|
||||
*/
|
||||
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the token `sender`. Used in transfers.
|
||||
* @param sender Address whose tokens are being transferred.
|
||||
*/
|
||||
error ERC721InvalidSender(address sender);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the token `receiver`. Used in transfers.
|
||||
* @param receiver Address to which tokens are being transferred.
|
||||
*/
|
||||
error ERC721InvalidReceiver(address receiver);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
|
||||
* @param operator Address that may be allowed to operate on tokens without being their owner.
|
||||
* @param tokenId Identifier number of a token.
|
||||
*/
|
||||
error ERC721InsufficientApproval(address operator, uint256 tokenId);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
|
||||
* @param approver Address initiating an approval operation.
|
||||
*/
|
||||
error ERC721InvalidApprover(address approver);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
|
||||
* @param operator Address that may be allowed to operate on tokens without being their owner.
|
||||
*/
|
||||
error ERC721InvalidOperator(address operator);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Standard ERC-1155 Errors
|
||||
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
|
||||
*/
|
||||
interface IERC1155Errors {
|
||||
/**
|
||||
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
|
||||
* @param sender Address whose tokens are being transferred.
|
||||
* @param balance Current balance for the interacting account.
|
||||
* @param needed Minimum amount required to perform a transfer.
|
||||
* @param tokenId Identifier number of a token.
|
||||
*/
|
||||
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the token `sender`. Used in transfers.
|
||||
* @param sender Address whose tokens are being transferred.
|
||||
*/
|
||||
error ERC1155InvalidSender(address sender);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the token `receiver`. Used in transfers.
|
||||
* @param receiver Address to which tokens are being transferred.
|
||||
*/
|
||||
error ERC1155InvalidReceiver(address receiver);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
|
||||
* @param operator Address that may be allowed to operate on tokens without being their owner.
|
||||
* @param owner Address of the current owner of a token.
|
||||
*/
|
||||
error ERC1155MissingApprovalForAll(address operator, address owner);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
|
||||
* @param approver Address initiating an approval operation.
|
||||
*/
|
||||
error ERC1155InvalidApprover(address approver);
|
||||
|
||||
/**
|
||||
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
|
||||
* @param operator Address that may be allowed to operate on tokens without being their owner.
|
||||
*/
|
||||
error ERC1155InvalidOperator(address operator);
|
||||
|
||||
/**
|
||||
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
|
||||
* Used in batch transfers.
|
||||
* @param idsLength Length of the array of token identifiers
|
||||
* @param valuesLength Length of the array of token amounts
|
||||
*/
|
||||
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
|
||||
}
|
||||
Reference in New Issue
Block a user