{"abi":[{"name":"ERC20ExceededCap","type":"error","inputs":[{"name":"increasedSupply","type":"uint256","internalType":"uint256"},{"name":"cap","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientAllowance","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientBalance","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidApprover","type":"error","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidCap","type":"error","inputs":[{"name":"cap","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidReceiver","type":"error","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSender","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSpender","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"name":"ERC20Issuance_Blacklist_BatchLimitExceeded","type":"error","inputs":[{"name":"provided_","type":"uint256","internalType":"uint256"},{"name":"limit_","type":"uint256","internalType":"uint256"}]},{"name":"ERC20Issuance_Blacklist_BlacklistedAddress","type":"error","inputs":[{"name":"account_","type":"address","internalType":"address"}]},{"name":"ERC20Issuance_Blacklist_NotBlacklistManager","type":"error","inputs":[]},{"name":"ERC20Issuance_Blacklist_ZeroAddress","type":"error","inputs":[]},{"name":"IERC20Issuance__CallerIsNotMinter","type":"error","inputs":[]},{"name":"InvalidInitialization","type":"error","inputs":[]},{"name":"NotInitializing","type":"error","inputs":[]},{"name":"OwnableInvalidOwner","type":"error","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"name":"OwnableUnauthorizedAccount","type":"error","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"name":"AddedToBlacklist","type":"event","inputs":[{"name":"account_","type":"address","indexed":true,"internalType":"address"},{"name":"blacklistManager_","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BlacklistManagerUpdated","type":"event","inputs":[{"name":"account_","type":"address","indexed":true,"internalType":"address"},{"name":"allowed_","type":"bool","indexed":false,"internalType":"bool"},{"name":"tokenOwner_","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Initialized","type":"event","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"name":"MinterSet","type":"event","inputs":[{"name":"minter","type":"address","indexed":true,"internalType":"address"},{"name":"allowed","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"RemovedFromBlacklist","type":"event","inputs":[{"name":"account_","type":"address","indexed":true,"internalType":"address"},{"name":"blacklistManager_","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"BATCH_LIMIT","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"__ERC20IssuanceBlacklist_init","type":"function","inputs":[{"name":"name_","type":"string","internalType":"string"},{"name":"symbol_","type":"string","internalType":"string"},{"name":"decimals_","type":"uint8","internalType":"uint8"},{"name":"maxSupply_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"__ERC20Issuance_init","type":"function","inputs":[{"name":"name_","type":"string","internalType":"string"},{"name":"symbol_","type":"string","internalType":"string"},{"name":"decimals_","type":"uint8","internalType":"uint8"},{"name":"maxSupply_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"addToBlacklist","type":"function","inputs":[{"name":"account_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"addToBlacklistBatched","type":"function","inputs":[{"name":"accounts_","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"allowance","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"allowedMinters","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"burn","type":"function","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"cap","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"isBlacklistManager","type":"function","inputs":[{"name":"account_","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"isBlacklisted","type":"function","inputs":[{"name":"account_","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"mint","type":"function","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"removeFromBlacklist","type":"function","inputs":[{"name":"account_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"removeFromBlacklistBatched","type":"function","inputs":[{"name":"accounts_","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"setBlacklistManager","type":"function","inputs":[{"name":"manager_","type":"address","internalType":"address"},{"name":"allowed_","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setMinter","type":"function","inputs":[{"name":"_minter","type":"address","internalType":"address"},{"name":"_allowed","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"spendAllowance","type":"function","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_spender","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"increasedSupply","type":"uint256"},{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"ERC20ExceededCap","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"cap","type":"uint256"}],"name":"ERC20InvalidCap","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"uint256","name":"provided_","type":"uint256"},{"internalType":"uint256","name":"limit_","type":"uint256"}],"name":"ERC20Issuance_Blacklist_BatchLimitExceeded","type":"error"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"ERC20Issuance_Blacklist_BlacklistedAddress","type":"error"},{"inputs":[],"name":"ERC20Issuance_Blacklist_NotBlacklistManager","type":"error"},{"inputs":[],"name":"ERC20Issuance_Blacklist_ZeroAddress","type":"error"},{"inputs":[],"name":"IERC20Issuance__CallerIsNotMinter","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account_","type":"address"},{"indexed":true,"internalType":"address","name":"blacklistManager_","type":"address"}],"name":"AddedToBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account_","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed_","type":"bool"},{"indexed":true,"internalType":"address","name":"tokenOwner_","type":"address"}],"name":"BlacklistManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"MinterSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account_","type":"address"},{"indexed":true,"internalType":"address","name":"blacklistManager_","type":"address"}],"name":"RemovedFromBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BATCH_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"__ERC20IssuanceBlacklist_init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"__ERC20Issuance_init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts_","type":"address[]"}],"name":"addToBlacklistBatched","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedMinters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"isBlacklistManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts_","type":"address[]"}],"name":"removeFromBlacklistBatched","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager_","type":"address"},{"internalType":"bool","name":"allowed_","type":"bool"}],"name":"setBlacklistManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"bool","name":"_allowed","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"spendAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Zealynx Security","custom:security-contact":"security@inverter.network                          In case of any concerns or findings, please refer to                          our Security Policy at security.inverter.network or                          email us directly!","custom:setup":"This contract requires the following MANDATORY setup steps:                  1. Set Minter:                     - Purpose: The contract needs a minter to handle token                                minting and burning operations. Without this                                permission, the workflow cannot mint or burn                                tokens.                     - How:     The owner of the contract must call the                                setMinter function to authorize the Funding                                Manager of the workflow                     - Example: token.setMinter(fundingManagerAddress, true);                  2. Set Blacklist Manager:                     - Purpose: The contract needs a blacklist manager to handle                                blacklisting operations. This role can add or                                remove addresses from the blacklist.                     - How:     The owner of the contract must call the                                setBlacklistManager function to authorize a                                trusted address                     - Example: token.setBlacklistManager(trustedAddress, true);","custom:standard-version":"v1.0.0","custom:version":"v1.0.0","details":"This contract inherits from:              - IERC20Issuance_Blacklist_v1              - ERC20IssuanceUpgradeable_v1          Key features:              - Individual address blacklisting              - Batch blacklisting operations (multiple addresses at once)              - Role-based access control:                  * Contract owner assigns blacklist managers                  * Only blacklist managers can add/remove addresses from blacklist              - Support for contract upgrades through OpenZeppelin's                upgradeable pattern          Access control structure:              - Owner: Controls who can be a blacklist manager              - Blacklist Manager: Controls which addresses are blacklisted","errors":{"ERC20ExceededCap(uint256,uint256)":[{"details":"Total supply cap has been exceeded."}],"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidCap(uint256)":[{"details":"The supplied cap is not a valid cap."}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}],"InvalidInitialization()":[{"details":"The contract is already initialized."}],"NotInitializing()":[{"details":"The contract is not initializing."}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"events":{"AddedToBlacklist(address,address)":{"params":{"account_":"The address that was blacklisted.","blacklistManager_":"The address that added the address to the blacklist."}},"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"BlacklistManagerUpdated(address,bool,address)":{"params":{"account_":"The address that was granted or revoked the role.","allowed_":"Whether the role was granted (true) or revoked (false).","tokenOwner_":"The address that owns the token."}},"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."},"RemovedFromBlacklist(address,address)":{"params":{"account_":"The address that was removed from blacklist.","blacklistManager_":"The address that removed the address from the blacklist."}},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"__ERC20IssuanceBlacklist_init(string,string,uint8,uint256)":{"params":{"decimals_":"The number of decimals of the token.","maxSupply_":"The maximum supply of the token.","name_":"The name of the token.","symbol_":"The symbol of the token."}},"__ERC20Issuance_init(string,string,uint8,uint256)":{"params":{"decimals_":"The number of decimals of the token.","maxSupply_":"The maximum supply of the token.","name_":"The name of the token.","symbol_":"The symbol of the token."}},"addToBlacklist(address)":{"details":"May revert with ERC20Issuance_Blacklist_ZeroAddress.","params":{"account_":"The address to the blacklist."}},"addToBlacklistBatched(address[])":{"details":"May revert with ERC20Issuance_Blacklist_ZeroAddress         The array size should not exceed the block gas limit. Consider         using smaller batches (e.g., 100-200 addresses) to ensure         transaction success.","params":{"accounts_":"Array of addresses to the blacklist."}},"allowance(address,address)":{"details":"See {IERC20-allowance}."},"approve(address,uint256)":{"details":"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."},"balanceOf(address)":{"details":"See {IERC20-balanceOf}."},"burn(address,uint256)":{"params":{"_amount":"The amount of tokens to burn.","_from":"The address of the owner or approved address."}},"cap()":{"details":"Returns the cap on the token's total supply."},"decimals()":{"details":"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}."},"isBlacklistManager(address)":{"params":{"account_":"The address to check."},"returns":{"_0":"True if address is a blacklist manager."}},"isBlacklisted(address)":{"params":{"account_":"The address to check."},"returns":{"_0":"True if address is blacklisted."}},"mint(address,uint256)":{"params":{"_amount":"The amount of tokens to mint.","_to":"The address of the recipient."}},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"removeFromBlacklist(address)":{"details":"May revert with ERC20Issuance_Blacklist_ZeroAddress.","params":{"account_":"The address to remove."}},"removeFromBlacklistBatched(address[])":{"details":"May revert with ERC20Issuance_Blacklist_ZeroAddress         The array size should not exceed the block gas limit. Consider         using smaller batches (e.g., 100-200 addresses) to ensure         transaction success.","params":{"accounts_":"Array of addresses to remove."}},"renounceOwnership()":{"details":"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."},"setBlacklistManager(address,bool)":{"details":"May revert with ERC20Issuance_Blacklist_ZeroAddress.","params":{"allowed_":"Whether to grant (true) or revoke (false) the role.","manager_":"The address to grant or revoke the role from."}},"setMinter(address,bool)":{"params":{"_allowed":"If the address is allowed to mint or not.","_minter":"The address of the minter."}},"spendAllowance(address,address,uint256)":{"params":{"_amount":"The amount of tokens to spend.","_from":"The address of the owner.","_spender":"The address of the spender."}},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"See {IERC20-totalSupply}."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"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`."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"title":"ERC20 Issuance Token with Blacklist Functionality (Upgradeable)","version":1},"userdoc":{"errors":{"ERC20Issuance_Blacklist_BatchLimitExceeded(uint256,uint256)":[{"notice":"Thrown when batch operation exceeds the maximum allowed size."}],"ERC20Issuance_Blacklist_BlacklistedAddress(address)":[{"notice":"Thrown when attempting to mint tokens to a blacklisted address."}],"ERC20Issuance_Blacklist_NotBlacklistManager()":[{"notice":"Thrown when caller does not have blacklist manager role."}],"ERC20Issuance_Blacklist_ZeroAddress()":[{"notice":"Thrown when attempting to blacklist the zero address."}]},"events":{"AddedToBlacklist(address,address)":{"notice":"Emitted when an address is added to the blacklist."},"BlacklistManagerUpdated(address,bool,address)":{"notice":"Emitted when a blacklist manager role is granted or revoked."},"MinterSet(address,bool)":{"notice":"Emitted when the minter is set."},"RemovedFromBlacklist(address,address)":{"notice":"Emitted when an address is removed from the blacklist."}},"kind":"user","methods":{"BATCH_LIMIT()":{"notice":"Maximum number of addresses that can be blacklisted in a batch."},"__ERC20IssuanceBlacklist_init(string,string,uint8,uint256)":{"notice":"Initializes the ERC20IssuanceUpgradeable_Blacklist_v1 contract."},"__ERC20Issuance_init(string,string,uint8,uint256)":{"notice":"Initializes the ERC20IssuanceUpgradeable_v1 contract."},"addToBlacklist(address)":{"notice":"Adds an address to blacklist."},"addToBlacklistBatched(address[])":{"notice":"Adds multiple addresses to the blacklist."},"allowedMinters(address)":{"notice":"The mapping of allowed minters."},"burn(address,uint256)":{"notice":"Burns tokens."},"isBlacklistManager(address)":{"notice":"Checks if an address is a blacklist manager."},"isBlacklisted(address)":{"notice":"Checks if an address is blacklisted."},"mint(address,uint256)":{"notice":"Mints new tokens."},"removeFromBlacklist(address)":{"notice":"Removes an address from the blacklist."},"removeFromBlacklistBatched(address[])":{"notice":"Removes multiple addresses from the blacklist."},"setBlacklistManager(address,bool)":{"notice":"Sets or revokes blacklist manager role for an address."},"setMinter(address,bool)":{"notice":"Sets the minting rights of an address."},"spendAllowance(address,address,uint256)":{"notice":"Spend allowance."}},"notice":"An upgradeable ERC20 token implementation that extends          ERC20IssuanceUpgradeable_v1 with blacklisting capabilities, allowing          designated managers to restrict specific addresses from token operations.","version":1}},"settings":{"compilationTarget":{"src/external/token/ERC20IssuanceUpgradeable_Blacklist_v1.sol":"ERC20IssuanceUpgradeable_Blacklist_v1"},"evmVersion":"shanghai","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":750},"remappings":[":@aut/=src/modules/authorizer/",":@df/=lib/deterministic-factory/src/",":@ex/=src/external/",":@fm/=src/modules/fundingManager/",":@lm/=src/modules/logicModule/",":@lm_pc/=src/modules/logicModule/paymentClient/",":@mocks/=test/mocks/",":@modLib/=src/modules/lib/",":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",":@oz-up/=lib/openzeppelin-contracts-upgradeable/contracts/",":@oz/=lib/openzeppelin-contracts/contracts/",":@pp/=src/modules/paymentProcessor/",":@testUtilities/=test/testUtilities/",":@uma/=lib/uma-protocol/packages/core/contracts/",":@unitTest/=test/unit/",":deterministic-factory/=lib/deterministic-factory/",":ds-test/=lib/forge-std/lib/ds-test/src/",":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",":forge-std/=lib/forge-std/src/",":halmos-cheatcodes/=lib/deterministic-factory/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",":openzeppelin-contracts/=lib/openzeppelin-contracts/",":uma-protocol/=lib/uma-protocol/"]},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a","license":"MIT","urls":["bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6","dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2"]},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b","license":"MIT","urls":["bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609","dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM"]},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","license":"MIT","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"]},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20CappedUpgradeable.sol":{"keccak256":"0x5ba74fbaf087d5ca1f3d4dac8ce9bebced9006f6ffaf4e5772bc0c4c88263934","license":"MIT","urls":["bzz-raw://36df7bdd85c26c406a04a2d6e53fed7947269b2562c4656cad0dc3b04811191a","dweb:/ipfs/QmPvM6er8AwyEQ1KVSka7vXU2JywmyGh2mCy8WX6RhaxpX"]},"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","license":"MIT","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"]},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","license":"MIT","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"]},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","license":"MIT","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"]},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","license":"MIT","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"]},"src/external/token/ERC20IssuanceUpgradeable_Blacklist_v1.sol":{"keccak256":"0xb02b625f43526c54ae95ac5102784bac34ba115f69409ea3b5474303932276c3","license":"LGPL-3.0-only","urls":["bzz-raw://7bb80fb45f27ef1840a985563790d80cc0701b3a40c9032372ea81c647707a87","dweb:/ipfs/Qmekq9oN1pmziZx26rrzq6Tonsm7MxRyoJmsBcGYCCVCm5"]},"src/external/token/ERC20IssuanceUpgradeable_v1.sol":{"keccak256":"0x8446e9bad6acc1eb6451779b05c4084ac35fe9a711c1d55b1f162728d1893881","license":"LGPL-3.0-only","urls":["bzz-raw://938860b890792f68b52c40f0c718160c80ffb93293884a72198e9e45624e6d5f","dweb:/ipfs/QmWh3qcuCsWAPFVW1Tht5uF7QkTqH28T2Rd3jrS13DkYqS"]},"src/external/token/interfaces/IERC20Issuance_Blacklist_v1.sol":{"keccak256":"0xa306c8911c18f018e3745771936ea12b8fc0b1a4bdb9b77cb148067edecc5410","license":"LGPL-3.0-only","urls":["bzz-raw://2eb62c912a9ee5f3bdd16667fa397d476bcde15b2780f8d2766d98a3eba16ed1","dweb:/ipfs/QmPx3xazdXBDyPnyNQzAJ5h2WqA7GRS8qUb45tzc1yDAw4"]},"src/external/token/interfaces/IERC20Issuance_v1.sol":{"keccak256":"0x5d53a7e4983e61df8cb4729ff99bbc7c7ca7b7d880b7f7cbe491ed055b6d6e42","license":"LGPL-3.0-only","urls":["bzz-raw://6768d3bde61e888ee7fd2eacb598ad693447d91770cc4a6a0db8c3d8f23bff00","dweb:/ipfs/QmSM1NqYxjU9MqK3uL1K8ex86eriN6r9y5XCPtmPbyEWNV"]}},"version":1},"matchId":"17115765","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-02-06T16:00:19Z","match":"exact_match","chainId":"1","address":"0x9E40B6be5aFFC984F36cf118C778f0A83be20370"}