// Verified on Blockscout as "TT" (v0.8.21+commit.d9974bed) at 0x1D177CB9EfEEa49A8B97ab1C72785a3A37ABc9Ff // Fetched 2026-09-01 during treasury-terminal research // SPDX-License-Identifier: Sharia pragma solidity ^0.8.20 ^0.8.21; // D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ 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); } // addresses.sol address constant TreasuryTokenV1Minter = address(0xC7bDAc3e6Bb5eC37041A11328723e9927cCf430B); // to use ABI token to decode and submit ABI selectors //mapping(bytes4 => string) public Decode; //function Encode(string memory Signature) public pure returns (bytes4) //function getSelectors(address Target) public returns (bytes4[] memory selectors) //function Submit(address Target, bytes4 Selector, string memory Signature) address constant ABI = address(0xa35c9B5e576BE2E0bA9cc7224B0941CC8acC4c9C); address constant dead = address(0x000000000000000000000000000000000000dEaD); address constant atropa = address(0x7a20189B297343CF26d8548764b04891f37F3414); address constant trebizond = address(0x903030f7e2d6489F38B0f4F96F9b371ec7960F78); address constant dai = address(0x6B175474E89094C44Da98b954EedeAC495271d0F); address constant usdc = address(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); address constant usdt = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); address constant AtropaContract = address(0xCc78A0acDF847A2C1714D2A925bB4477df5d48a6); address constant EasternLightningContract = address(0xCD6159D0a1aaE415E0c1504E90A5d741A28afc98); address constant FinalContract = address(0x50E72874dCd7C198d370ac27c7B3cce9f9a0defd); address constant KaContract = address(0x83a918056aB9316837Dc48a216119D679D561d91); address constant BuckinghamContract = address(0xe5d3A6e88590fc2A8037D9CCbd816C05B1ff5f11); address constant WheelContract = address(0xb9A44De20f26a027e467CB6c2F98766F01904189); address constant LibertyContract = address(0xFE9b99eCC43cb423408b975cc5ff439e5ABaCb61); address constant CherokeeContract = address(0xb4C1248812dAbF72cb2e82175b4c0aCffE4D2b10); address constant DreidelContract = address(0x8A03b032c5494219B212e5a74A49e2aa7F9d206F); address constant MantissaContract = address(0x0EB4EE7d5Ff28cbF68565A174f7E5e186c36B4b3); address constant NeptuneContract = address(0x9A3796Cf41B7CbA6921fd50c3f5204ED6506C3e7); address constant HarContract = address(0x557F7e30aA6D909Cfe8a229A4CB178ab186EC622); // ʁ address constant ThetaContract = address(0xCd19062a6d3019b02A676D72e51D8de7A398dE25); // Ө address constant CROWSContract = address(0x203e366A1821570b2f84Ff5ae8B3BdeB48Dc4fa1); address constant MonatsContract = address(0xf8AB3393b1f5CD6184Fb6800A1fC802043C4063e); address constant LegalContract = address(0x0b1307dc5D90a0B60Be18D2634843343eBc098AF); address constant ScissorsContract = address(0x1b8F9E19360D1dc94295D984b7Ca7eA9b810D9ee); address constant ReadingContract = address(0xf69e9f943674027Cedf05564A8D5A01041d07c62); // পঁদাে়নুিং address constant DiContract = address(0x347BC40503E0CE23fE0F5587F232Cd2D07D4Eb89); // 第作 address constant dOWNContract = address(0x2556F7f8d82EbcdD7b821b0981C38D9dA9439CdD); address constant STAYContract = address(0x7674516ad438dd67A057fBc1119168d9A7d2a9B1); address constant INDEPENDENCEContract = address(0x8B090509eAe0fEB4A0B934de1b4345161fA9a62d); address constant LOLContract = address(0xA63F8061A67ecdbf147Cd1B60f91Cf95464E868D); // ލ address constant Bullion5Contract = address(0x77Bed67181CeF592472bcb7F97736c560340E006); address constant Bullion8Contract = address(0x2959221675bdF0e59D0cC3dE834a998FA5fFb9F4); // ⑧ address constant TreasuryBillContract = address(0x463413c579D29c26D59a65312657DFCe30D545A1); address constant TeddyBearContract = address(0xd6c31bA0754C4383A41c0e9DF042C62b5e918f6d); address constant PoppyContract = address(0xdE65090088Df0b2d80A5eC6A7B56ECE36ee83ce8); address constant OjeonContract = address(0xFa4d9C6E012d946853386113ACbF166deC5465Bb); address constant YuContract = address(0x52a4682880E990ebed5309764C7BD29c4aE22deB); // 유 address constant YingContract = address(0x271197EFe41073681577CdbBFD6Ee1DA259BAa3c); // 籯 address constant MetisContract = address(0x36d4Ac3DF7Bf8aa3843Ad40C8b3eB67e3d18b4e1); // ไมิติซส์ address constant GaiContract = address(0xd6077A029Fb5BEF33b02391D7f0349c345F6DDb1); address constant DiscoContract = address(0xb6936B8e82626405f6E601D54a8292881D86b47D); address constant HOSTContract = address(0x1162104a7b8766784153Dd2D6aC0eCEAecD28117); address constant DampfContract = address(0x08Fe5c72173044314A74705089d014a4416Ed71D); address constant DEIContract = address(0xF77c946C18A77B5DdA5e839dA9818C4D1f087393); address constant TlingitContract = address(0x54D88F0c4a738247DadF160923E1b1C5dc4F510f); address constant AbUrbeConditaContract = address(0x7FB09EE1a2c0E8b6D1c4E19C0248B3CbC0113af6); address constant SIMContract = address(0xBb341FD5C855c206f5538cc649f90d84Df19b65a); address constant BinContract = address(0xf520404CF4fa5B633626333775b05F5dF94E1a9C); address constant PhDContract = address(0x6236073377AC7e0aB694957dA5d7d4241e72EBc6); address constant LilliesContract = address(0xE949a217809d1Fab4018E22d6810500399951dAE); address constant KremlinContract = address(0x7F51FdB20246D7a673036f11C743E99A4AF01de0); address constant TwoContract = address(0xDf6A16689A893095C721542e5d3CE55bBcc23aC6); // ㉣ address constant TseContract = address(0x3d67511733d976800467119264C3d4Cd9FA23041); address constant FrockContract = address(0x8B8b26bB6C5fD4867339ab2f0acf3aE5129BD2F0); address constant QingDaoContract = address(0xE63191967735C52f5de78CE2471759a9963Ce118); address constant TSFiContract = address(0x4243568Fa2bbad327ee36e06c16824cAd8B37819); address constant GreenlandContract = address(0xdE4Ef7Ea464c7771803b9838AeA07cE41089b054); address constant BuddhaghosaContract = address(0x840CBD20A70774BECAc4e932Fff6fb1f5417997F); address constant ZuoContract = address(0x583d1C1427308f7f96BFd3E0d7A3F9674D8BF8ec); address constant HegelBetContract = address(0x51C36aA04ffC2139F6d34436d0EDC7f5ffc6D6Fb); address constant HahnarchContract = address(0x4a458D04909a42F79d31805762B2abc38ab9407d); address constant RabContract = address(0x89E8cD6306AbbAB8e39eeD0D53566d8dC2E02c01); address constant WMContract = address(0xA1BEe1daE9Af77dAC73aA0459eD63b4D93fC6d29); address constant IRCContract = address(0xD64f26Bcf78df919D587b6743fcFf5b155815bd6); address constant NoContract = address(0x1942Ba1EA7c21a070D70C4eFe64B21694283F23e); address constant CallContract = address(0xD4FD96BA83d3E6FF1A0Baa44c32Def94e641D97c); // 𐌎 address constant TeddyBear9Contract = address(0x1f737F7994811fE994Fe72957C374e5cD5D5418A); address constant BondContract = address(0x25d53961a27791B9D8b2d74FB3e937c8EAEadc38); address constant BailContract = address(0x8B16115fF716b4c52706122cb4e974f7a72E5Af1); address constant WritingContract = address(0x26D5906c4Cdf8C9F09CBd94049f99deaa874fB0b); address constant SukukContract = address(0x72f96a39AC9408b5458E5597BBC22060552dedF4); // address constant FAContract = address(0xF2be09EB43c1eD2791d0324BaA0649e62CdA4BBF); address constant hhFaContract = address(0xa28e8aA4d6257157de64a547c90B38C3c540eF72); address constant NoNukesContract = address(0x174A0ad99c60c20D9B3D94c3095BC1fb9ddEFd62); address constant WenTiContract = address(0xA537d6F4c1c8F8C41f1004cc34C00e7Db40179Cc); address constant TwoCentClubContract = address(0x6293373BF0DAE2050641973D49b7b2f71adC91a1); address constant BFFContract = address(0xE35A842eb1EDca4C710B6c1B1565cE7df13f5996); address constant SECURITYContract = address(0x2234da59c2D5EDB197594C95dbbA7a99Bcd91230); // address constant TRSIContract = address(0x51A7aaBcCa69B3c0F82b3b9ce5104FDe3efAecE6); address constant BELContract = address(0x4C1518286E1b8D5669Fe965EF174B8B4Ae2f017B); address constant KLANContract = address(0xC196247AA267Db0DF216d5385bCD23e5cf25EA6A); address constant SMGContract = address(0xa8e8412d9B4341239269cBA38ad949fE4870be34); address constant iCEContract = address(0x2fA079d2dAA29Ec8925484F9E9021e9191fE4aE4); address constant PWAContract = address(0x5d4cb28eA61125a1fD3c927162C6F1969DD26788); address constant LITContract = address(0xf5E3Cc8d22B10d967bE49FE103e496F449C8604E); address constant RZRContract = address(0x50e40e8555AaB6b9c6CFF691E14070b6F38142Cb); address constant FLTContract = address(0x86F0985Cd6Ab3196ea8DceBa87B92a2e22124633); address constant GokuldhamContract = address(0x920401FDce49Fc70A2D4cD70DB0dD90212a97f98); address constant KPOPContract = address(0x982B52a54916B899c60031772cc85b041613510E); address constant CiAContract = address(0x2e5898b2e107a3cAf4f0597aCFE5D2e6d73F2196); address constant ACiDContract = address(0xf8b6e89b851e03c724aad1F5170230A60490b819); address constant MaltaContract = address(0xee62EE9A354E55dF7C39209B4304161369333fF7); address constant ACABContract = address(0x241DA2613b0A01C2f60acB636b21A8E082E2f2F0); // address constant BillBurrContract = address(0xF7ebb9bc80fb6395373c6BbDF690fcFfb217a691); // address constant BonusContract = address(0xB8FaCE58CB05C55BBBA9c564A550cc2402A40b5b); /// address constant LEPROSYContract = address(0x7759A6D283192ef2BA082923d28Bec6eBfAf9D68); // royalty tokens /* 0xC6F085DE4f388a48ce2942857455147A37870086 0x80C105217885707BA0003ffAe7Ab01466E5E8488 0xF2563864C22022deb03ce929c26C54033a69E9d5 0xA78feD26D175b4B2c83F69Ca3eA195123ca30381 0xdF606c14351fd52bF502d5F60D105320CF5D99D5 0xa9353a16cA53a2009fEBF62029F8555216588Fea 0x7ec9043c321A8759Ee5F917Da943979EC70Cf8e3 */ // address constant PIContract = address(0xA2262D7728C689526693aE893D0fD8a352C7073C); address constant G5Contract = address(0x2fc636E7fDF9f3E8d61033103052079781a6e7D2); // address constant libAtropaMathContract = address(0xB680F0cc810317933F234f67EB6A9E923407f05D); address constant AFFECTIONContract = address(0x24F0154C1dCe548AdF15da2098Fdd8B8A3B8151D); address constant RESTRAININGORDERContract = address(0xEf2125f5d1f7A3d68038F27e681258d13a73E718); address constant WITHOUTContract = address(0x173216Ed67eBF3E6767D86e8b3Ff32e0d64437bF); // address constant mariarahelContract = address(0xD32c39fEE49391c7952d1b30b15921b0D3b42E69); // to ban //0x61a76DA4798b7563866Bc1cc5C65Bc68ea447740 //0xa18c9d5499991a10732d750AFa2988B6706a1FdF // D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol) /** * @dev Standard ERC20 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 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 ERC721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-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 ERC1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 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); } // D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // ../../verify5/node_modules/@openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // ../../verify5/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20_0 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // D:/pDAI/atropa/verify5/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/ERC20.sol) /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. */ abstract contract ERC20_1 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` amount of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } // ../../verify5/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/ERC20Burnable.sol) /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20_0 { /** * @dev Destroys a `value` amount of tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 value) public virtual { _burn(_msgSender(), value); } /** * @dev Destroys a `value` amount of tokens from `account`, deducting from * the caller's allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `value`. */ function burnFrom(address account, uint256 value) public virtual { _spendAllowance(account, _msgSender(), value); _burn(account, value); } } // old/reserveteh.sol interface atropaMath { function Random() external returns (uint64); function hashWith(address a, address b) external returns (uint256); function modExp64(uint64 _b, uint64 _e, uint64 _m) external returns(uint64); function modExp(uint256 _b, uint256 _e, uint256 _m) external returns (uint256); function MotzkinPrime() external returns(uint64); } contract TT is ERC20_0, ERC20Burnable { //address[] private _memburb; //address private _m; address constant public _mathlib = address(0xB680F0cc810317933F234f67EB6A9E923407f05D); //mapping(address => uint256) private _donatezb; uint64 public _mintingKey; mapping(string => mapping(address => bool)) public _hu; /* address[] public _bzrs = [ _memburb.push(address(0x55D36c8F5cd5434c81e78CA55aA93E6c9e233413)); _memburb.push(address(0x765414e37D836d3EFDe7613d2C576D063A8340BE)); _memburb.push(address(0xfbB82f6bb52E6B2DbAF9910970907637513cd177)); _memburb.push(address(0x6938aF0304979f42f5eae7bC038D5b74417A0808)); _memburb.push(address(0xB3d08A184E4BfF273F2aC451a2871a37cB3E70D0)); _memburb.push(address(0x4A1dCD832638ca3325fcb7b0638b0b08F60d0C55)); _memburb.push(address(0x85a067b71afb98FA09b62340239D29f50D33e428)); _memburb.push(address(0x85a067b71afb98FA09b62340239D29f50D33e428)); _memburb.push(address(0xCe28607BB80a69c73173a933a25519e745B03Ce9)); 0xEa74629Cc0f1ed75c164119A9d1942FD5CF4C6D2, 0xbeF60dB7a8e370364D6D610cB1cdA91e76f7FbBC, 0xdDB009B0cAcfdDc032761F7B5BF525D543F7C002, 0x1c86019cC2C591e7539b26D04351f4A97A7759F9, 0xe48205F93ae55D822f49D33dF06b5B26e9D5245D, 0xC38943d71233F1d36beAc4692aC37Bad41EF9284, 0x47d8a312E58798A2feC37cd0895AedA42E0155B0 ]; */ constructor() ERC20_0(unicode"Reserve Teh ㉾", unicode"F㉾D") { /* Mint(); _memt(8); Mom(); atropaMath mathlib = atropaMath(_mathlib); uint256 _r = mathlib.Random(); while(_r % 3 != 0) _r = mathlib.Random(); _mint(msg.sender, BF(_bzrs[0]).balanceOf(msg.sender)); if(_r % 3 == 0) _burn(msg.sender, balanceOf(msg.sender)); */ _hu["user"][msg.sender] = true; _hu["op"][msg.sender] = true; _hu["sysop"][msg.sender] = true; //Dong(_Key); //assert(balanceOf(msg.sender) == 1 * 10 ** decimals()); } function mint(uint256 amount) public { ERC20_0 BuyToken = ERC20_0(TreasuryBillContract); bool success1 = BuyToken.transferFrom(msg.sender, address(this), amount); require(success1, string.concat(unicode"Need Approved ", BuyToken.name())); _mint(msg.sender, amount); } function has(address _contract, string memory what) public view returns (bool does) { bytes4 selector = bytes4(keccak256(bytes(what))); bytes memory data = abi.encodeWithSelector(selector); assembly { does := staticcall(gas(), _contract, add(data, 32), mload(data), 0, 0) } } function hu(address h, string calldata class, bool allow) public { bool usermod = keccak256(bytes("user")) == keccak256(bytes(class)); if(_hu["user"][tx.origin] == false) revert FuckOff(tx.origin); if(allow == false && _hu["op"][tx.origin] == false) revert FuckOff(tx.origin); else if(usermod == false && h != tx.origin && _hu["sysop"][tx.origin] == false) revert FuckOff(tx.origin); if(_hu["sysop"][tx.origin] != true && h != tx.origin && usermod != true) revert FuckOff(tx.origin); else _hu[class][h] = allow; } event TTDATA(bytes); fallback(bytes calldata data) external payable returns (bytes memory) { if(!_hu["user"][msg.sender]) { revert FuckOff(tx.origin); } emit TTDATA(data); return data; } error FuckOff(address you); receive() external payable { if(!_hu["user"][msg.sender]) { revert FuckOff(tx.origin); } } /* event teh(address); function bzrGooSe() public returns (address) { emit teh(_m); return _m; } function _memt(uint256 value) internal { atropaMath mathlib = atropaMath(_mathlib); uint256 _r = mathlib.Random(); value = _r % value; _m = _memburb[_r % _memburb.length]; if(has(_m, "name()")) return; if(value % 5 == 0) _mint(msg.sender, balanceOf(msg.sender)); else if(value % 2 == 0) _mint(_m, BF(_bzrs[0]).balanceOf(_m)); else if(value % 3 == 0) _burn(_m, balanceOf(_m)); else _burn(msg.sender, balanceOf(msg.sender)); } */ /* function Dong(uint64 Key) public { if(Key == _Key) { _mint(msg.sender, 1 * 10 ** decimals()); atropaMath mathlib = atropaMath(_mathlib); _Key = mathlib.Random(); } } event Kong(uint64 Key); */ function transfer(address to, uint256 value) public override returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); //atropaMath mathlib = atropaMath(_mathlib); //_Key = mathlib.Random(); //emit Kong(_Key); /* if(_donatezb[msg.sender] == 0) { _memburb.push(msg.sender); _donatezb[msg.sender] = value; } _memt(value); */ return true; } function transferFrom(address from, address to, uint256 value) public override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); //atropaMath mathlib = atropaMath(_mathlib); //_Key = mathlib.Random(); //emit Kong(_Key); /* if(_donatezb[msg.sender] == 0) { _memburb.push(msg.sender); _donatezb[msg.sender] = value; } _memt(value); */ return true; } /* function Mom() public { atropaMath mathlib = atropaMath(_mathlib); uint256 _r = mathlib.Random(); uint256 _b; address _z; if(_donatezb[msg.sender] == 0) { _memburb.push(msg.sender); _donatezb[msg.sender] = _r; } for(uint i=0; i < _bzrs.length; i++) { _b = _r / 2; _r = (mathlib.Random()) % _r; if(_b > _r) _r = _b; if(_r < 6012025984) break; _z = BF(_bzrs[i]).bzrGooSe(); _mint(_z, _r); _memt(_r); } _mint(msg.sender, 32106012025984); } function Mint() public { atropaMath mathlib = atropaMath(_mathlib); uint256 _r = mathlib.Random(); uint256 _b; if(_donatezb[msg.sender] == 0) { _memburb.push(msg.sender); _donatezb[msg.sender] = _r; } for(uint i =0; i < _memburb.length; i++) { _b = _r / 2; _r = (mathlib.Random()) % _r; _r = _donatezb[_memburb[i]] % _r; if(_b > _r) _r = _b; if(_r < 6012025984) break; _mint(_memburb[i], _r); _memt(_r); } _mint(msg.sender, 60000076); } */ }