{"abi":[{"type":"function","name":"enforce","inputs":[{"name":"subject","type":"address","internalType":"address"},{"name":"evidence","type":"bytes","internalType":"bytes"},{"name":"checkType","type":"uint8","internalType":"enum Check"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTarget","inputs":[{"name":"_guarded","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trait","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"event","name":"Enforced","inputs":[{"name":"subject","type":"address","indexed":true,"internalType":"address"},{"name":"guarded","type":"address","indexed":true,"internalType":"address"},{"name":"evidence","type":"bytes","indexed":false,"internalType":"bytes"},{"name":"checkType","type":"uint8","indexed":false,"internalType":"enum Check"}],"anonymous":false},{"type":"event","name":"TargetSet","inputs":[{"name":"guarded","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AlreadyEnforced","inputs":[]},{"type":"error","name":"CannotPostCheckWhenSkipped","inputs":[]},{"type":"error","name":"CannotPreCheckWhenSkipped","inputs":[]},{"type":"error","name":"MainCheckAlreadyEnforced","inputs":[]},{"type":"error","name":"MainCheckNotEnforced","inputs":[]},{"type":"error","name":"PreCheckNotEnforced","inputs":[]},{"type":"error","name":"TargetAlreadySet","inputs":[]},{"type":"error","name":"TargetNotSet","inputs":[]},{"type":"error","name":"TargetOnly","inputs":[]},{"type":"error","name":"UnsuccessfulCheck","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"enforce(address,bytes,uint8)":"14423fde","setTarget(address)":"776d1a01","trait()":"ce343deb"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AlreadyEnforced\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotPostCheckWhenSkipped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotPreCheckWhenSkipped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MainCheckAlreadyEnforced\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MainCheckNotEnforced\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PreCheckNotEnforced\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetAlreadySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetOnly\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsuccessfulCheck\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"subject\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guarded\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"evidence\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"enum Check\",\"name\":\"checkType\",\"type\":\"uint8\"}],\"name\":\"Enforced\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guarded\",\"type\":\"address\"}],\"name\":\"TargetSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"subject\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"evidence\",\"type\":\"bytes\"},{\"internalType\":\"enum Check\",\"name\":\"checkType\",\"type\":\"uint8\"}],\"name\":\"enforce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_guarded\",\"type\":\"address\"}],\"name\":\"setTarget\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"trait\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Adds granular error reporting and event logging for advanced enforcement scenarios.\",\"events\":{\"Enforced(address,address,bytes,uint8)\":{\"params\":{\"checkType\":\"The type of check performed (PRE, MAIN, POST).\",\"evidence\":\"Custom validation data.\",\"guarded\":\"Address of the protected contract.\",\"subject\":\"Address that passed the validation.\"}},\"TargetSet(address)\":{\"params\":{\"guarded\":\"Address of the protected contract.\"}}},\"kind\":\"dev\",\"methods\":{\"enforce(address,bytes,uint8)\":{\"details\":\"Delegates validation logic to the corresponding phase's check method.\",\"params\":{\"checkType\":\"The type of check performed (PRE, MAIN, POST).\",\"evidence\":\"Custom validation data.\",\"subject\":\"Address to validate.\"}},\"setTarget(address)\":{\"details\":\"This function is restricted to the owner and can only be called once.\",\"params\":{\"_guarded\":\"The address of the protected contract.\"}},\"trait()\":{\"details\":\"This is typically used to distinguish policy implementations (e.g., \\\"Semaphore\\\").\",\"returns\":{\"_0\":\"The policy trait string.\"}}},\"title\":\"IAdvancedPolicy\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyEnforced()\":[{\"notice\":\"Error thrown when a user is already enforced.\"}],\"CannotPostCheckWhenSkipped()\":[{\"notice\":\"Error thrown when a post-check is attempted while post-checks are skipped.\"}],\"CannotPreCheckWhenSkipped()\":[{\"notice\":\"Error thrown when a pre-check is attempted while pre-checks are skipped.\"}],\"MainCheckAlreadyEnforced()\":[{\"notice\":\"Error thrown when multiple main checks are attempted but not allowed.\"}],\"MainCheckNotEnforced()\":[{\"notice\":\"Error thrown when a post-check is attempted without a prior main check.\"}],\"PreCheckNotEnforced()\":[{\"notice\":\"Error thrown when a main check is attempted without a prior pre-check.\"}],\"TargetAlreadySet()\":[{\"notice\":\"Error thrown when attempting to set the guarded more than once.\"}],\"TargetNotSet()\":[{\"notice\":\"Error thrown when the guarded contract is not set.\"}],\"TargetOnly()\":[{\"notice\":\"Error thrown when a function is restricted to calls from the guarded contract.\"}],\"UnsuccessfulCheck()\":[{\"notice\":\"Error thrown when a validation check fails.\"}],\"ZeroAddress()\":[{\"notice\":\"Error thrown when a zero address is provided where not allowed.\"}]},\"events\":{\"Enforced(address,address,bytes,uint8)\":{\"notice\":\"Emitted when a subject successfully passes a validation check.\"},\"TargetSet(address)\":{\"notice\":\"Emitted when the guarded contract is successfully set.\"}},\"kind\":\"user\",\"methods\":{\"enforce(address,bytes,uint8)\":{\"notice\":\"Enforces a specific phase of the policy check on a given subject.\"},\"setTarget(address)\":{\"notice\":\"Sets the contract address to be protected by this policy.\"},\"trait()\":{\"notice\":\"Retrieves the policy trait identifier.\"}},\"notice\":\"Extends IPolicy with support for multi-phase validation checks (pre, main, post).\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/interfaces/IAdvancedPolicy.sol\":\"IAdvancedPolicy\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200000},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":@semaphore-protocol/=node_modules/@semaphore-protocol/\",\":@solady/=node_modules/solady/\",\":@zk-kit/=node_modules/@zk-kit/\",\":eth-gas-reporter/=node_modules/eth-gas-reporter/\",\":forge-std/=node_modules/forge-std/\",\":hardhat/=node_modules/hardhat/\",\":poseidon-solidity/=node_modules/poseidon-solidity/\",\":solady/=node_modules/solady/\"]},\"sources\":{\"contracts/interfaces/IAdvancedChecker.sol\":{\"keccak256\":\"0x6e6682ecc5cb0eb88ca8d7c2ff024f7351917e30b01c01b4670f36a4d6e0a24d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb311bf62e81e1ae8a6e7874d2cdfff4a5dd04b4bcba11796858fe248e6926e5\",\"dweb:/ipfs/Qmd4vtmw5WQUw8Ui4EV7aGW9ATvddC5cEWHyunT8paW2R4\"]},\"contracts/interfaces/IAdvancedPolicy.sol\":{\"keccak256\":\"0x135e6b4dfb7b7608cd3916d4ecf697eddf3ae782998ac1f5789fb78fb0c9eb4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c7532f05af171df261d988ae40824b1e55a2a7e59eb74d0be1832a8d5c02481\",\"dweb:/ipfs/QmYE4QYWQBwamssEbrhnvGr2hA4yfdtKnm4UCpgHZZNKEy\"]},\"contracts/interfaces/IPolicy.sol\":{\"keccak256\":\"0x82f96940502cdd880f1eacc03cd8c3895f306283efa907610c899a1f5509f78c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5baf97f88beb3155f244dc301ee040786780bf6762fbaaf569e2e86b17729b3f\",\"dweb:/ipfs/Qmec9wzmmFwkQHDthMo9QaFtYqa7CadjiCP2JMsgFGGaxU\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AlreadyEnforced"},{"inputs":[],"type":"error","name":"CannotPostCheckWhenSkipped"},{"inputs":[],"type":"error","name":"CannotPreCheckWhenSkipped"},{"inputs":[],"type":"error","name":"MainCheckAlreadyEnforced"},{"inputs":[],"type":"error","name":"MainCheckNotEnforced"},{"inputs":[],"type":"error","name":"PreCheckNotEnforced"},{"inputs":[],"type":"error","name":"TargetAlreadySet"},{"inputs":[],"type":"error","name":"TargetNotSet"},{"inputs":[],"type":"error","name":"TargetOnly"},{"inputs":[],"type":"error","name":"UnsuccessfulCheck"},{"inputs":[],"type":"error","name":"ZeroAddress"},{"inputs":[{"internalType":"address","name":"subject","type":"address","indexed":true},{"internalType":"address","name":"guarded","type":"address","indexed":true},{"internalType":"bytes","name":"evidence","type":"bytes","indexed":false},{"internalType":"enum Check","name":"checkType","type":"uint8","indexed":false}],"type":"event","name":"Enforced","anonymous":false},{"inputs":[{"internalType":"address","name":"guarded","type":"address","indexed":true}],"type":"event","name":"TargetSet","anonymous":false},{"inputs":[{"internalType":"address","name":"subject","type":"address"},{"internalType":"bytes","name":"evidence","type":"bytes"},{"internalType":"enum Check","name":"checkType","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"enforce"},{"inputs":[{"internalType":"address","name":"_guarded","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setTarget"},{"inputs":[],"stateMutability":"pure","type":"function","name":"trait","outputs":[{"internalType":"string","name":"","type":"string"}]}],"devdoc":{"kind":"dev","methods":{"enforce(address,bytes,uint8)":{"details":"Delegates validation logic to the corresponding phase's check method.","params":{"checkType":"The type of check performed (PRE, MAIN, POST).","evidence":"Custom validation data.","subject":"Address to validate."}},"setTarget(address)":{"details":"This function is restricted to the owner and can only be called once.","params":{"_guarded":"The address of the protected contract."}},"trait()":{"details":"This is typically used to distinguish policy implementations (e.g., \"Semaphore\").","returns":{"_0":"The policy trait string."}}},"version":1},"userdoc":{"kind":"user","methods":{"enforce(address,bytes,uint8)":{"notice":"Enforces a specific phase of the policy check on a given subject."},"setTarget(address)":{"notice":"Sets the contract address to be protected by this policy."},"trait()":{"notice":"Retrieves the policy trait identifier."}},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","@semaphore-protocol/=node_modules/@semaphore-protocol/","@solady/=node_modules/solady/","@zk-kit/=node_modules/@zk-kit/","eth-gas-reporter/=node_modules/eth-gas-reporter/","forge-std/=node_modules/forge-std/","hardhat/=node_modules/hardhat/","poseidon-solidity/=node_modules/poseidon-solidity/","solady/=node_modules/solady/"],"optimizer":{"enabled":true,"runs":200000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"contracts/interfaces/IAdvancedPolicy.sol":"IAdvancedPolicy"},"evmVersion":"prague","libraries":{}},"sources":{"contracts/interfaces/IAdvancedChecker.sol":{"keccak256":"0x6e6682ecc5cb0eb88ca8d7c2ff024f7351917e30b01c01b4670f36a4d6e0a24d","urls":["bzz-raw://bb311bf62e81e1ae8a6e7874d2cdfff4a5dd04b4bcba11796858fe248e6926e5","dweb:/ipfs/Qmd4vtmw5WQUw8Ui4EV7aGW9ATvddC5cEWHyunT8paW2R4"],"license":"MIT"},"contracts/interfaces/IAdvancedPolicy.sol":{"keccak256":"0x135e6b4dfb7b7608cd3916d4ecf697eddf3ae782998ac1f5789fb78fb0c9eb4f","urls":["bzz-raw://4c7532f05af171df261d988ae40824b1e55a2a7e59eb74d0be1832a8d5c02481","dweb:/ipfs/QmYE4QYWQBwamssEbrhnvGr2hA4yfdtKnm4UCpgHZZNKEy"],"license":"MIT"},"contracts/interfaces/IPolicy.sol":{"keccak256":"0x82f96940502cdd880f1eacc03cd8c3895f306283efa907610c899a1f5509f78c","urls":["bzz-raw://5baf97f88beb3155f244dc301ee040786780bf6762fbaaf569e2e86b17729b3f","dweb:/ipfs/Qmec9wzmmFwkQHDthMo9QaFtYqa7CadjiCP2JMsgFGGaxU"],"license":"MIT"}},"version":1},"id":53}