// SPDX-License-Identifier: UNLICENSED // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Partition { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event TransferPartition( address indexed from, address indexed to, bytes32 indexed fromId, bytes32 toId, uint256 value, bytes data ); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event ApprovalPartition( address indexed owner, address indexed spender, bytes32 indexed id, uint256 value, bytes data ); /** * @dev Emitted when a partition has been deprecated * a call to {approve}. `value` is the new allowance. */ event DeprecatePartition(bytes32 indexed id, bytes data); /** * @dev Returns the amount of tokens in existence. */ function totalSupply(bytes32 id) external view returns (uint256); /** * @dev Returns a boolean indicating if a partition is deprecated. */ function deprecated(bytes32 id) external view returns (bool); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account, bytes32 id) external view returns (uint256); /** * @dev Moves `amount` 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, bytes32 id, uint256 amount, bytes memory data) 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, bytes32 id) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, bytes32 id, uint256 amount, bytes memory data) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, bytes32 id, uint256 amount, bytes memory data) external returns (bool); }