{"abi":[{"name":"InvalidInitialization","type":"error","inputs":[]},{"name":"Module_OrchestratorCallbackFailed","type":"error","inputs":[{"name":"funcSig","type":"string","internalType":"string"}]},{"name":"Module__CallerNotAuthorized","type":"error","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"caller","type":"address","internalType":"address"}]},{"name":"Module__InvalidAddress","type":"error","inputs":[]},{"name":"Module__InvalidMetadata","type":"error","inputs":[]},{"name":"Module__InvalidOrchestratorAddress","type":"error","inputs":[]},{"name":"Module__LM_ExternalPriceSetter__InvalidPrice","type":"error","inputs":[]},{"name":"Module__OnlyCallableByOrchestrator","type":"error","inputs":[]},{"name":"Module__OnlyCallableByPaymentClient","type":"error","inputs":[]},{"name":"NotInitializing","type":"error","inputs":[]},{"name":"OraclePrice__ZeroPrice","type":"error","inputs":[]},{"name":"Initialized","type":"event","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"name":"IssuancePriceSet","type":"event","inputs":[{"name":"price_","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"caller_","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"ModuleInitialized","type":"event","inputs":[{"name":"parentOrchestrator","type":"address","indexed":true,"internalType":"address"},{"name":"metadata","type":"tuple","indexed":false,"components":[{"name":"majorVersion","type":"uint256","internalType":"uint256"},{"name":"minorVersion","type":"uint256","internalType":"uint256"},{"name":"patchVersion","type":"uint256","internalType":"uint256"},{"name":"url","type":"string","internalType":"string"},{"name":"title","type":"string","internalType":"string"}],"internalType":"struct IModule_v1.Metadata"}],"anonymous":false},{"name":"ProtocolFeeTransferred","type":"event","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"},{"name":"treasury","type":"address","indexed":true,"internalType":"address"},{"name":"feeAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"RedemptionPriceSet","type":"event","inputs":[{"name":"price_","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"caller_","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"getCollateralTokenDecimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"getPriceForIssuance","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"getPriceForRedemption","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"getPriceSetterRole","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"name":"getPriceSetterRoleAdmin","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"name":"grantModuleRole","type":"function","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"grantModuleRoleBatched","type":"function","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"targets","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"identifier","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"name":"init","type":"function","inputs":[{"name":"orchestrator_","type":"address","internalType":"contract IOrchestrator_v1"},{"name":"metadata_","type":"tuple","components":[{"name":"majorVersion","type":"uint256","internalType":"uint256"},{"name":"minorVersion","type":"uint256","internalType":"uint256"},{"name":"patchVersion","type":"uint256","internalType":"uint256"},{"name":"url","type":"string","internalType":"string"},{"name":"title","type":"string","internalType":"string"}],"internalType":"struct IModule_v1.Metadata"},{"name":"configData_","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"isTrustedForwarder","type":"function","inputs":[{"name":"forwarder","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"orchestrator","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IOrchestrator_v1"}],"stateMutability":"view"},{"name":"revokeModuleRole","type":"function","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"revokeModuleRoleBatched","type":"function","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"targets","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setIssuanceAndRedemptionPrice","type":"function","inputs":[{"name":"issuancePrice_","type":"uint256","internalType":"uint256"},{"name":"redemptionPrice_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setIssuancePrice","type":"function","inputs":[{"name":"price_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"setRedemptionPrice","type":"function","inputs":[{"name":"price_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"supportsInterface","type":"function","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"name":"title","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"trustedForwarder","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"url","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"version","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"}],"metadata":{"compiler":{"version":"0.8.23+commit.f704f362"},"language":"Solidity","output":{"abi":[{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[{"internalType":"string","name":"funcSig","type":"string"}],"name":"Module_OrchestratorCallbackFailed","type":"error"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"caller","type":"address"}],"name":"Module__CallerNotAuthorized","type":"error"},{"inputs":[],"name":"Module__InvalidAddress","type":"error"},{"inputs":[],"name":"Module__InvalidMetadata","type":"error"},{"inputs":[],"name":"Module__InvalidOrchestratorAddress","type":"error"},{"inputs":[],"name":"Module__LM_ExternalPriceSetter__InvalidPrice","type":"error"},{"inputs":[],"name":"Module__OnlyCallableByOrchestrator","type":"error"},{"inputs":[],"name":"Module__OnlyCallableByPaymentClient","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"OraclePrice__ZeroPrice","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"price_","type":"uint256"},{"indexed":true,"internalType":"address","name":"caller_","type":"address"}],"name":"IssuancePriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"parentOrchestrator","type":"address"},{"components":[{"internalType":"uint256","name":"majorVersion","type":"uint256"},{"internalType":"uint256","name":"minorVersion","type":"uint256"},{"internalType":"uint256","name":"patchVersion","type":"uint256"},{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"title","type":"string"}],"indexed":false,"internalType":"struct IModule_v1.Metadata","name":"metadata","type":"tuple"}],"name":"ModuleInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"treasury","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"ProtocolFeeTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"price_","type":"uint256"},{"indexed":true,"internalType":"address","name":"caller_","type":"address"}],"name":"RedemptionPriceSet","type":"event"},{"inputs":[],"name":"getCollateralTokenDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceForIssuance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceForRedemption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceSetterRole","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPriceSetterRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"target","type":"address"}],"name":"grantModuleRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address[]","name":"targets","type":"address[]"}],"name":"grantModuleRoleBatched","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"identifier","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IOrchestrator_v1","name":"orchestrator_","type":"address"},{"components":[{"internalType":"uint256","name":"majorVersion","type":"uint256"},{"internalType":"uint256","name":"minorVersion","type":"uint256"},{"internalType":"uint256","name":"patchVersion","type":"uint256"},{"internalType":"string","name":"url","type":"string"},{"internalType":"string","name":"title","type":"string"}],"internalType":"struct IModule_v1.Metadata","name":"metadata_","type":"tuple"},{"internalType":"bytes","name":"configData_","type":"bytes"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orchestrator","outputs":[{"internalType":"contract IOrchestrator_v1","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"target","type":"address"}],"name":"revokeModuleRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address[]","name":"targets","type":"address[]"}],"name":"revokeModuleRoleBatched","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"issuancePrice_","type":"uint256"},{"internalType":"uint256","name":"redemptionPrice_","type":"uint256"}],"name":"setIssuanceAndRedemptionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setIssuancePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setRedemptionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"title","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedForwarder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"url","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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 module requires the following MANDATORY setup steps:                 1. Configure Price Setter Role:                    - Purpose: The price setter role is authorized to set                               prices for issuance and redemption operations.                    - How:     The OrchestratorAdmin (or PRICE_SETTER_ROLE_ADMIN                               if configured) must:                               1. Retrieve the price setter role identifier.                               2. Grant the role to desired addresses.                    - Example: module.grantModuleRole(                                module.getPriceSetterRole(),                                operatorAddress                               );                 OPTIONAL setup steps for enhanced administration:                 1. Custom Price Setter Role Admin:                    - Purpose: Enables delegation of price setter role                               management to a dedicated admin role instead of                               relying on the OrchestratorAdmin. This allows                               for more granular access control and operational                               flexibility.                    - How:     The OrchestratorAdmin must:                               1. Generate the role IDs for both roles.                               2. Transfer admin rights through the Authorizer.                    - Example: authorizer.transferAdminRole(                               authorizer.generateRoleId(                                 moduleAddress,                                 module.getPriceSetterRole()                               ),                               authorizer.generateRoleId(                                 moduleAddress,                                 module.getPriceSetterRoleAdmin()                                )                               );","custom:standard-version":"v1.0.0","custom:version":"v1.0.0","details":"This contract inherits from:          - ILM_Oracle_Permissioned_v1: Implementation interface.          - IOraclePrice_v1: Oracle price interface.          - Module_v1: Base module functionality.          Key features:              - Two separate price feeds for issuance and redemption.                The contract maintains two separate price feeds for issuance                and redemption operations.              - Manual price setting.                Prices are manually set by the price setter role and must be                non-zero values.              - Price decimal denominations.                Prices are always given as amount of collateral going in/coming                out. Prices are denominated in collateral token decimals. For                example:                - To price issuing 1 token at 1.5 collateral with 6 decimal                  collateral: 1_500_000                - To price redeeming 1 token at 0.5 collateral with 6 decimal                  collateral: 500_000","errors":{"InvalidInitialization()":[{"details":"The contract is already initialized."}],"Module_OrchestratorCallbackFailed(string)":[{"params":{"funcSig":"The signature of the function called."}}],"Module__CallerNotAuthorized(bytes32,address)":[{"params":{"caller":"The address that is required to have the role.","role":"The role that is required."}}],"Module__InvalidAddress()":[{"details":"Invalid Address."}],"NotInitializing()":[{"details":"The contract is not initializing."}]},"events":{"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."},"IssuancePriceSet(uint256,address)":{"params":{"caller_":"The address that set the price.","price_":"The price that was set."}},"ModuleInitialized(address,(uint256,uint256,uint256,string,string))":{"params":{"metadata":"The metadata of the module.","parentOrchestrator":"The address of the {Orchestrator_v1} the module is linked to."}},"ProtocolFeeTransferred(address,address,uint256)":{"params":{"feeAmount":"The fee amount transferred to the treasury.","token":"The token received as protocol fee.","treasury":"The protocol treasury address receiving the token fee amount."}},"RedemptionPriceSet(uint256,address)":{"params":{"caller_":"The address that set the price.","price_":"The price that was set."}}},"kind":"dev","methods":{"getCollateralTokenDecimals()":{"details":"Decimals in which the issuance and redemption prices         are denominated.","returns":{"_0":"decimals_ The decimals of the collateral token."}},"getPriceForIssuance()":{"details":"Must be non-zero and denominated in collateral token decimals.         For example: With 6 decimal collateral token,         - To price 1 issuance token at 1.5 collateral, returns 1_500_000         - To price 1 issuance token at 0.5 collateral, returns 500_000","returns":{"_0":"Current issuance price in collateral token decimals"}},"getPriceForRedemption()":{"details":"Must be non-zero and denominated in collateral token decimals.         For example: With 6 decimal collateral token,         - To price 1 issuance token at 1.5 collateral, returns 1_500_000         - To price 1 issuance token at 0.5 collateral, returns 500_000","returns":{"_0":"Current redemption price in collateral token decimals"}},"getPriceSetterRole()":{"returns":{"_0":"bytes32 The PRICE_SETTER_ROLE identifier"}},"getPriceSetterRoleAdmin()":{"returns":{"_0":"bytes32 The PRICE_SETTER_ROLE_ADMIN identifier"}},"grantModuleRole(bytes32,address)":{"params":{"role":"The role to grant.","target":"The target address to grant the role to."}},"grantModuleRoleBatched(bytes32,address[])":{"params":{"role":"The role to grant.","targets":"The target addresses to grant the role to."}},"identifier()":{"details":"The identifier is defined as the keccak256 hash of the module's         abi packed encoded major version, url and title.","returns":{"_0":"The module's identifier."}},"init(address,(uint256,uint256,uint256,string,string),bytes)":{"details":"CAN be overridden by downstream contract.MUST call `__Module_init()`.","params":{"configData_":"The config data of the module, comprised of:     - address: collateralToken: The collateral token address.","metadata_":"The metadata of the module.","orchestrator_":"The orchestrator contract."}},"isTrustedForwarder(address)":{"details":"We imitate here the EIP2771 Standard to enable metatransactions         As it currently stands we dont want to feed the forwarder address to each module individually and we decided to         move this to the orchestrator.","params":{"forwarder":"The contract address to be verified."},"returns":{"_0":"bool Is the given address the trusted forwarder."}},"orchestrator()":{"returns":{"_0":"The module's {Orchestrator_1}."}},"revokeModuleRole(bytes32,address)":{"params":{"role":"The role to revoke.","target":"The target address to revoke the role from."}},"revokeModuleRoleBatched(bytes32,address[])":{"params":{"role":"The role to revoke.","targets":"The target addresses to revoke the role from."}},"setIssuanceAndRedemptionPrice(uint256,uint256)":{"details":"Both prices must be non-zero. Both the issuance and redemption         prices should be denominated in the collateral token decimals.         For example, if the collateral token has 6 decimals and the         issuance and redemption price are both 1.5, the issuancePrice_         and redemptionPrice_ parameters should be 1500000.","params":{"issuancePrice_":"The issuance price to set, denominated in the         collateral token decimals.","redemptionPrice_":"The redemption price to set, denominated in         the collateral token decimals."}},"setIssuancePrice(uint256)":{"details":"Must be non-zero and denominated in collateral token decimals.         For example: With 6 decimal collateral token,         - To price 1 issuance token at 1.5 collateral, use 1_500_000         - To price 1 issuance token at 0.5 collateral, use 500_000","params":{"price_":"The issuance price in collateral token decimals"}},"setRedemptionPrice(uint256)":{"details":"Must be non-zero and denominated in collateral token decimals.         For example: With 6 decimal collateral token,         - To price 1 issuance token at 1.5 collateral, use 1_500_000         - To price 1 issuance token at 0.5 collateral, use 500_000","params":{"price_":"The redemption price in collateral token decimals"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"title()":{"returns":{"_0":"The module's title."}},"trustedForwarder()":{"details":"We imitate here the EIP2771 Standard to enable metatransactions.         As it currently stands we dont want to feed the forwarder address to each module individually and we decided to         move this to the orchestrator.","returns":{"_0":"address The trusted forwarder."}},"url()":{"returns":{"_0":"The module's URL."}},"version()":{"returns":{"_0":"The module's major version.","_1":"The module's minor version.","_2":"The module's patch version."}}},"stateVariables":{"PRICE_SETTER_ROLE":{"details":"This role should be granted to trusted price feeders only."},"PRICE_SETTER_ROLE_ADMIN":{"details":"This role should be set as the role admin within the Authorizer         module."},"__gap":{"details":"Storage gap for upgradeable contracts."},"_collateralTokenDecimals":{"details":"This is the token used to pay/buy with."}},"title":"Manual External Price Oracle Implementation.","version":1},"userdoc":{"errors":{"Module_OrchestratorCallbackFailed(string)":[{"notice":"{Orchestrator_v1} callback triggered failed."}],"Module__CallerNotAuthorized(bytes32,address)":[{"notice":"Function is only callable by authorized caller."}],"Module__InvalidMetadata()":[{"notice":"Given metadata invalid."}],"Module__InvalidOrchestratorAddress()":[{"notice":"Given {Orchestrator_v1} address invalid."}],"Module__LM_ExternalPriceSetter__InvalidPrice()":[{"notice":"Thrown when attempting to set a price to zero."}],"Module__OnlyCallableByOrchestrator()":[{"notice":"Function is only callable by the {Orchestrator_v1}."}],"Module__OnlyCallableByPaymentClient()":[{"notice":"Function is only callable by a {IERC20PaymentClientBase_v2}."}],"OraclePrice__ZeroPrice()":[{"notice":"Thrown when price returned is zero."}]},"events":{"IssuancePriceSet(uint256,address)":{"notice":"Emitted when an issuance price is set."},"ModuleInitialized(address,(uint256,uint256,uint256,string,string))":{"notice":"Module has been initialized."},"ProtocolFeeTransferred(address,address,uint256)":{"notice":"Event emitted when protocol fee has been transferred to the treasury."},"RedemptionPriceSet(uint256,address)":{"notice":"Emitted when a redemption price is set."}},"kind":"user","methods":{"getCollateralTokenDecimals()":{"notice":"Gets the decimals of the collateral token."},"getPriceForIssuance()":{"notice":"Gets current price for token issuance (buying tokens)         Price represents how much collateral is paid for 1 issuance token."},"getPriceForRedemption()":{"notice":"Gets current price for token redemption (selling tokens)         Price represents how much collateral is returned for 1 issuance token."},"getPriceSetterRole()":{"notice":"Gets the price setter role identifier."},"getPriceSetterRoleAdmin()":{"notice":"Gets the price setter role admin identifier."},"grantModuleRole(bytes32,address)":{"notice":"Grants a module role to a target address."},"grantModuleRoleBatched(bytes32,address[])":{"notice":"Grants a module role to multiple target addresses."},"identifier()":{"notice":"Returns the module's identifier."},"init(address,(uint256,uint256,uint256,string,string),bytes)":{"notice":"The module's initializer function."},"isTrustedForwarder(address)":{"notice":"Checks if the provided address is the trusted forwarder."},"orchestrator()":{"notice":"Returns the module's {Orchestrator_v1} interface, {IOrchestrator_v1}."},"revokeModuleRole(bytes32,address)":{"notice":"Revokes a module role from a target address."},"revokeModuleRoleBatched(bytes32,address[])":{"notice":"Revokes a module role from multiple target addresses."},"setIssuanceAndRedemptionPrice(uint256,uint256)":{"notice":"Sets both issuance and redemption prices atomically, denominated         in the collateral token decimals."},"setIssuancePrice(uint256)":{"notice":"Sets the issuance price for token issuance (buying tokens)         Price represents how much collateral is paid for 1 issuance token."},"setRedemptionPrice(uint256)":{"notice":"Sets the redemption price for token redemption (selling tokens)         Price represents how much collateral is returned for 1 issuance token."},"title()":{"notice":"Returns the module's title."},"trustedForwarder()":{"notice":"Returns the trusted forwarder."},"url()":{"notice":"Returns the module's URL."},"version()":{"notice":"Returns the module's version."}},"notice":"This contract provides a manual price feed mechanism for token          operations, allowing authorized users to set and update prices          for both issuance (buying) and redemption (selling) operations.","version":1}},"settings":{"compilationTarget":{"src/modules/logicModule/LM_Oracle_Permissioned_v1.sol":"LM_Oracle_Permissioned_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/metatx/ERC2771ContextUpgradeable.sol":{"keccak256":"0x14b59e8cd5720c9cd31616450874b462f575bb52b387df2a54dbd26f9a07adf8","license":"MIT","urls":["bzz-raw://082df479035347a88472f330b089b421d798e4bb016f36b46ed80182e188b9ac","dweb:/ipfs/QmZMCdVxCB3Lb5bf98YSF4HZFNShDkyyFg9Mg1s9oeM5ov"]},"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/utils/ContextUpgradeable.sol":{"keccak256":"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397","license":"MIT","urls":["bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9","dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV"]},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","license":"MIT","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"]},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","license":"MIT","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"]},"lib/openzeppelin-contracts/contracts/access/extensions/IAccessControlEnumerable.sol":{"keccak256":"0xc1435f102633849858e75d7bed14c636f25448ceb3406d82992b0f2df52f4306","license":"MIT","urls":["bzz-raw://ce1815e3a1da24f91b8e2ec24cf09d0d46e0fbeddcbe2cb0d8b2e05b91ceb7b3","dweb:/ipfs/QmYTy1AQB5EV5jwuGsB49yykng2oG3x5ss4bDjFNxk3He4"]},"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol":{"keccak256":"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c","license":"MIT","urls":["bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa","dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM"]},"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"]},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","license":"MIT","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"]},"src/external/fees/interfaces/IFeeManager_v1.sol":{"keccak256":"0x655d93b595c66254f5432c3142c114da5479c75d4d67b59f9e221d58bf04ae7e","license":"LGPL-3.0-only","urls":["bzz-raw://54f7a5771189d06997dddc37b53082d3d8b747bd7fcb5efbeb8b4ee921d3e705","dweb:/ipfs/QmQQvoJsRQbSg6od3P1Z7f83gyKVBjoM4PsaEPRAVW2icQ"]},"src/external/governance/interfaces/IGovernor_v1.sol":{"keccak256":"0xa81ca9425e5029ec50fb4ae8810cdb308afe038094946ba9b093739d9919e73e","license":"LGPL-3.0-only","urls":["bzz-raw://9e8ad2de7f26bdcfb2fde7d1ca5aa3553dd78f48540515f69a9a53ca12192e91","dweb:/ipfs/QmTJNvwLBrWp25av97EeLVkxKbYVXvECEB1GDJqZXuVFK2"]},"src/external/interfaces/IERC2771Context.sol":{"keccak256":"0xdb0580aaaba4ae2c0d9e10412ff83f3c7efe99949e241a07ccfa1cb92a2ba0db","license":"LGPL-3.0-only","urls":["bzz-raw://82fc191e17b3221d8965ed5da2560f29b1c25216be3515a73134da5761a6e421","dweb:/ipfs/QmRUHmePb4mbtYnG69D2TX3Y7USfz97SCffFn9DR3jWruZ"]},"src/factories/interfaces/IModuleFactory_v1.sol":{"keccak256":"0x242182fa6fb04f642848a9b9ac7259df0109d7e6c872320f2f237d293c2e0b6d","license":"LGPL-3.0-only","urls":["bzz-raw://a0e09c61a9c4d69f493e12c7c0f7376055a70cd8cde738ca64920706ad3495c9","dweb:/ipfs/QmeQ1Pdtv5xkb37yXX8sGbUe7AGKEjGZar6H7jc5TxK3uf"]},"src/factories/interfaces/IOrchestratorFactory_v1.sol":{"keccak256":"0xfb9d598f8dae48593c457d36520414dd5f6ee5bbc2978c4413a561c03a8037b9","license":"LGPL-3.0-only","urls":["bzz-raw://677d9acc88f389fb3323b77bf0b0679a9461546d7c1dd30b7d44d3756dfe0d80","dweb:/ipfs/QmW6CojPhFAu9WpmyJAVdNht5ZnF43Zu54zsVTcJzxuXYu"]},"src/modules/authorizer/IAuthorizer_v1.sol":{"keccak256":"0x07cda177f585d2dd94f54c4952e6dda485031ce4f68419eaf2f20a008d1a0888","license":"LGPL-3.0-only","urls":["bzz-raw://1b6434ad6f00da437a16e279cf3ac531d6d678df7978cb36e79a7011ff3f429e","dweb:/ipfs/QmUuhJcpJfShLvhacrppPu4bKpjfXCvbvpCLNX6apwWGtW"]},"src/modules/base/IModule_v1.sol":{"keccak256":"0xb65a41b4f09b31b5be362c386368b11b108127b7967dee494204820d904d6c68","license":"LGPL-3.0-only","urls":["bzz-raw://783eb2d07590a2506a5782a8be7635e561463e5cf8f570b3e800c8659ab5ae88","dweb:/ipfs/QmRJfmMCdoe9cq1D7fyyGDZ3qTsAdeQe3QWdwgPThyDxFY"]},"src/modules/base/Module_v1.sol":{"keccak256":"0xacb11b21b5b6e0ea5ae273ad9054c75d1174cfb9a5dfd27e6447daf71f1ef1db","license":"LGPL-3.0-only","urls":["bzz-raw://caad3925a4e28df6dd1795d9ef00c3b03239fad1906bbe71f2be018aadc97727","dweb:/ipfs/QmWJgYCzdpFujykopsnbsHYrwWMVe6AyzJmre3tRg2gxHq"]},"src/modules/fundingManager/IFundingManager_v1.sol":{"keccak256":"0xe6c1d1bc7a0d7f33ca1a4637aa1ec0ad4dbf6e11eac145f4e8cf81e8eb54c4c4","license":"LGPL-3.0-only","urls":["bzz-raw://d24621594eecad89facdf7f4bbeb3657c7ade3a75d6630f3afadbc10247afaf8","dweb:/ipfs/QmZcnkbQovFALKYNpWA1J8GSoSDMiNbEA6dEtWBqh59o2H"]},"src/modules/lib/LibMetadata.sol":{"keccak256":"0x9a524b8697167b605c0b980b3e81688d448922ab38cd040f2b1c664946666c4a","license":"LGPL-3.0-only","urls":["bzz-raw://5dd325f05f6812218a7f808af5afc1ec6cf95f1250c33d4dd1ad01ec4b041d50","dweb:/ipfs/Qmem29JZSEpYLDqJn4cBxawGokbzo3taqHtb3UyyDvmB8G"]},"src/modules/logicModule/LM_Oracle_Permissioned_v1.sol":{"keccak256":"0x5deef2f2c3929cfefa7f4b7c4f7812d5380a08e6bd6bd11a55601c08fb815128","license":"LGPL-3.0-only","urls":["bzz-raw://453957b0c83f3979b1aa8fad6a103ae7cf2bdd3d24b24b432923a90e34ad4698","dweb:/ipfs/QmPN2zHGqgpZNdJyRiAFAGdpVzNkx1H2Yen1kj332WSbAW"]},"src/modules/logicModule/interfaces/IERC20PaymentClientBase_v1.sol":{"keccak256":"0xe3a2f6fd8ad6b79d74174a07422a4e455f21a4dbd4b1adbff379e1b5374bef00","license":"LGPL-3.0-only","urls":["bzz-raw://88b49ae256b7f0c455b4915187c7fd42906ac817c571599d6e66052a9c5517b1","dweb:/ipfs/QmcHBtkPEK5i55K6wdSiGyci9v1NULhZ3E4HKhaLtJGHFr"]},"src/modules/logicModule/interfaces/IERC20PaymentClientBase_v2.sol":{"keccak256":"0x7c3fe1e46b2335b6b659a2cb9a0ae88bbf104c9fc7ed71e0a831f934cb5289f1","license":"LGPL-3.0-only","urls":["bzz-raw://e03e17f0ce34842473e68f0e0764cf1ad2b6ece1c8d26c07058acec7f20d071f","dweb:/ipfs/QmZoG1P2pqnhjYTMXzi64rn2X6TUNEawn1R5e6MpVrEHBQ"]},"src/modules/logicModule/interfaces/ILM_Oracle_Permissioned_v1.sol":{"keccak256":"0x0faac880bed16a6dd3e549f438e1d628c8b6838755d52ba013db6e1e12e93ac5","license":"LGPL-3.0-only","urls":["bzz-raw://f1de860149d4c22819e3cbcde9474d65b5f669e101cc49f7478cd4d52f7118e4","dweb:/ipfs/QmbW3pWVAp8QKxmbVVjRm1L4DfmoNcNMoDpWQENR9t1KYm"]},"src/modules/logicModule/interfaces/IOraclePrice_v1.sol":{"keccak256":"0x51b58184c34da0f3f5e8d1402890dbd788da94a61587b4a8b63db0494a779d3e","license":"LGPL-3.0-only","urls":["bzz-raw://bf691ab38351887dedcdc00b6381de07b5d20ce342469508b76073f84e759b56","dweb:/ipfs/QmWGQKphsb7AyZdu9ZMVtDTTVDUCUtK4VeZyDpRmtKdk1M"]},"src/modules/paymentProcessor/IPaymentProcessor_v1.sol":{"keccak256":"0x3687e55fd1a121f5d3ca3974ec9e5d37ef295dad7708086f7e2a295d117dbd34","license":"LGPL-3.0-only","urls":["bzz-raw://0d79c0df597c7b442aed3797d0e1f26fe6c4e0b6b6130a1c2815497e6378d768","dweb:/ipfs/QmSqyzqo6FRMkzdqNoikDoteXknckPNvpwgd4XyicpzeBm"]},"src/modules/paymentProcessor/IPaymentProcessor_v2.sol":{"keccak256":"0x8d45f6d5dbb01beeee65158eef9520fab7bda09452fe836142122e37682daa9b","license":"LGPL-3.0-only","urls":["bzz-raw://39f706ba7c68d384c8d815ca737b9e024692e49bb9c930ea70b207d9bf23d4f9","dweb:/ipfs/QmdYS1aCUmtWTymRaUGLR8e9YK7v4s9JMxPoaMMoMnebHD"]},"src/orchestrator/interfaces/IModuleManagerBase_v1.sol":{"keccak256":"0x2abd1abb278da305c6a47d11ef31ef7a7de2aebf017957b0013497de8e2aa2eb","license":"LGPL-3.0-only","urls":["bzz-raw://5d49aac1e351f80bce5c27fb0934577d64551c25fcbad6dd172b6eee7b8bf57a","dweb:/ipfs/QmRdR4Ut7gV9Zp295ciYnwYqjdXKxZAAegVhtsGpetiwsC"]},"src/orchestrator/interfaces/IOrchestrator_v1.sol":{"keccak256":"0xefa7776b6fcebcd49da7398c0ebb56210138818e1e20baa4c174d1a5f45eca7f","license":"LGPL-3.0-only","urls":["bzz-raw://dde9c8d7982913b904aa0b27384958658ebcdd4b37fa70d409014d8b116f59dc","dweb:/ipfs/QmfJtQvdSyTkzonanLABKVvRp13bqGQRWu4ZfeRGfqRmAn"]},"src/proxies/interfaces/IInverterBeacon_v1.sol":{"keccak256":"0x23cd7a4ada497ebd9834d521843673881427d563906662156e748366a6a03fb5","license":"LGPL-3.0-only","urls":["bzz-raw://49cbce7e794b38126494ee0c4a26f9807fc284e0e5c59ad8a1a229e60f196e66","dweb:/ipfs/Qma3hZfASQ6Gaa4anDhTmhNA1HPiYSD6eJ9Gnn817rP8VJ"]}},"version":1},"matchId":"13581541","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-01-12T08:02:49Z","match":"exact_match","chainId":"1","address":"0x62c49b6138D9926FCf86Bb15B66193FCc9004470"}