{"abi":[{"type":"function","name":"attest","inputs":[{"name":"attestationPayload","type":"tuple","internalType":"struct AttestationPayload","components":[{"name":"schemaId","type":"bytes32","internalType":"bytes32"},{"name":"expirationDate","type":"uint64","internalType":"uint64"},{"name":"subject","type":"bytes","internalType":"bytes"},{"name":"attestationData","type":"bytes","internalType":"bytes"}]},{"name":"validationPayloads","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"attestationRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract AttestationRegistry"}],"stateMutability":"view"},{"type":"function","name":"bulkAttest","inputs":[{"name":"attestationPayloads","type":"tuple[]","internalType":"struct AttestationPayload[]","components":[{"name":"schemaId","type":"bytes32","internalType":"bytes32"},{"name":"expirationDate","type":"uint64","internalType":"uint64"},{"name":"subject","type":"bytes","internalType":"bytes"},{"name":"attestationData","type":"bytes","internalType":"bytes"}]},{"name":"validationPayloads","type":"bytes[][]","internalType":"bytes[][]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bulkReplace","inputs":[{"name":"attestationIds","type":"bytes32[]","internalType":"bytes32[]"},{"name":"attestationsPayloads","type":"tuple[]","internalType":"struct AttestationPayload[]","components":[{"name":"schemaId","type":"bytes32","internalType":"bytes32"},{"name":"expirationDate","type":"uint64","internalType":"uint64"},{"name":"subject","type":"bytes","internalType":"bytes"},{"name":"attestationData","type":"bytes","internalType":"bytes"}]},{"name":"validationPayloads","type":"bytes[][]","internalType":"bytes[][]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"bulkRevoke","inputs":[{"name":"attestationIds","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getModules","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"moduleRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ModuleRegistry"}],"stateMutability":"view"},{"type":"function","name":"modules","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"portalRegistry","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract PortalRegistry"}],"stateMutability":"view"},{"type":"function","name":"replace","inputs":[{"name":"attestationId","type":"bytes32","internalType":"bytes32"},{"name":"attestationPayload","type":"tuple","internalType":"struct AttestationPayload","components":[{"name":"schemaId","type":"bytes32","internalType":"bytes32"},{"name":"expirationDate","type":"uint64","internalType":"uint64"},{"name":"subject","type":"bytes","internalType":"bytes"},{"name":"attestationData","type":"bytes","internalType":"bytes"}]},{"name":"validationPayloads","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"revoke","inputs":[{"name":"attestationId","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"router","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IRouter"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceID","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"withdraw","inputs":[{"name":"to","type":"address","internalType":"address payable"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"error","name":"OnlyPortalOwner","inputs":[]},{"type":"error","name":"WithdrawFail","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"attest((bytes32,uint64,bytes,bytes),bytes[])":"07432196","attestationRegistry()":"ed6d73f9","bulkAttest((bytes32,uint64,bytes,bytes)[],bytes[][])":"523ba7ca","bulkReplace(bytes32[],(bytes32,uint64,bytes,bytes)[],bytes[][])":"3cc30e2a","bulkRevoke(bytes32[])":"4ada8076","getModules()":"b2494df3","moduleRegistry()":"b95459e4","modules(uint256)":"81b2248a","portalRegistry()":"b6664934","replace(bytes32,(bytes32,uint64,bytes,bytes),bytes[])":"ecdbb4fd","revoke(bytes32)":"b75c7dc6","router()":"f887ea40","supportsInterface(bytes4)":"01ffc9a7","withdraw(address,uint256)":"f3fef3a3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"OnlyPortalOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawFail\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schemaId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"expirationDate\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"subject\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"internalType\":\"struct AttestationPayload\",\"name\":\"attestationPayload\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"validationPayloads\",\"type\":\"bytes[]\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"attestationRegistry\",\"outputs\":[{\"internalType\":\"contract AttestationRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schemaId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"expirationDate\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"subject\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"internalType\":\"struct AttestationPayload[]\",\"name\":\"attestationPayloads\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"validationPayloads\",\"type\":\"bytes[][]\"}],\"name\":\"bulkAttest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"attestationIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schemaId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"expirationDate\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"subject\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"internalType\":\"struct AttestationPayload[]\",\"name\":\"attestationsPayloads\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"validationPayloads\",\"type\":\"bytes[][]\"}],\"name\":\"bulkReplace\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"attestationIds\",\"type\":\"bytes32[]\"}],\"name\":\"bulkRevoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getModules\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"moduleRegistry\",\"outputs\":[{\"internalType\":\"contract ModuleRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"modules\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"portalRegistry\",\"outputs\":[{\"internalType\":\"contract PortalRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"attestationId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"schemaId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"expirationDate\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"subject\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"attestationData\",\"type\":\"bytes\"}],\"internalType\":\"struct AttestationPayload\",\"name\":\"attestationPayload\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"validationPayloads\",\"type\":\"bytes[]\"}],\"name\":\"replace\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"attestationId\",\"type\":\"bytes32\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"router\",\"outputs\":[{\"internalType\":\"contract IRouter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Consensys\",\"kind\":\"dev\",\"methods\":{\"attest((bytes32,uint64,bytes,bytes),bytes[])\":{\"details\":\"Runs all modules for the portal and registers the attestation using AttestationRegistryWARNING: Ensure that at most one module processes `msg.value` to avoid accounting issues,               as the total `msg.value` is forwarded to all modules.\",\"params\":{\"attestationPayload\":\"the payload to attest\",\"validationPayloads\":\"the payloads to validate via the modules to issue the attestations\"}},\"bulkAttest((bytes32,uint64,bytes,bytes)[],bytes[][])\":{\"details\":\"DISCLAIMER: This method may have unexpected behavior if one of the Module checks is done on the attestation ID                  as this ID won't be incremented before the end of the transaction.                  If you need to check the attestation ID, please use the `attestV2` method.\",\"params\":{\"attestationPayloads\":\"the payloads to attest\",\"validationPayloads\":\"the payloads to validate via the modules to issue the attestations\"}},\"bulkReplace(bytes32[],(bytes32,uint64,bytes,bytes)[],bytes[][])\":{\"details\":\"DISCLAIMER: This method may have unexpected behavior if one of the Module checks is done on the attestation ID                  as this ID won't be incremented before the end of the transaction.                  If you need to check the attestation ID, please use the `replaceV2` method.\",\"params\":{\"attestationIds\":\"the list of IDs of the attestations to replace\",\"attestationsPayloads\":\"the list of attestation payloads to create the new attestations and register them\",\"validationPayloads\":\"the payloads to validate via the modules to issue the attestations\"}},\"bulkRevoke(bytes32[])\":{\"params\":{\"attestationIds\":\"the IDs of the attestations to revoke\"}},\"constructor\":{\"details\":\"This sets the addresses for the AttestationRegistry, ModuleRegistry and PortalRegistry\",\"params\":{\"_modules\":\"list of modules to use for the portal (can be empty)\",\"_router\":\"Router's address\"}},\"getModules()\":{\"returns\":{\"_0\":\"The list of modules addresses linked to the Portal\"}},\"replace(bytes32,(bytes32,uint64,bytes,bytes),bytes[])\":{\"details\":\"Runs all modules for the portal and registers the attestation using AttestationRegistry\",\"params\":{\"attestationId\":\"the ID of the attestation to replace\",\"attestationPayload\":\"the attestation payload to create the new attestation and register it\",\"validationPayloads\":\"the payloads to validate via the modules to issue the attestation\"}},\"revoke(bytes32)\":{\"details\":\"By default, revocation is only possible by the portal owner We strongly encourage implementing such a rule in your Portal if you intend on overriding this method\",\"params\":{\"attestationId\":\"the ID of the attestation to revoke\"}},\"supportsInterface(bytes4)\":{\"params\":{\"interfaceID\":\"the interface identifier checked in this call\"},\"returns\":{\"_0\":\"True if the interface is supported, false otherwise\"}},\"withdraw(address,uint256)\":{\"details\":\"Only the Portal owner can withdraw funds\",\"params\":{\"amount\":\"the amount to withdraw\",\"to\":\"the address to send the funds to\"}}},\"title\":\"Abstract Portal V2\",\"version\":1},\"userdoc\":{\"errors\":{\"OnlyPortalOwner()\":[{\"notice\":\"Error thrown when someone else than the portal's owner is trying to revoke\"}],\"WithdrawFail()\":[{\"notice\":\"Error thrown when withdrawing funds fails\"}]},\"kind\":\"user\",\"methods\":{\"attest((bytes32,uint64,bytes,bytes),bytes[])\":{\"notice\":\"Attest the schema with given attestationPayload and validationPayload\"},\"bulkAttest((bytes32,uint64,bytes,bytes)[],bytes[][])\":{\"notice\":\"Bulk attest the schema with payloads to attest and validation payloads\"},\"bulkReplace(bytes32[],(bytes32,uint64,bytes,bytes)[],bytes[][])\":{\"notice\":\"Bulk replaces the attestation for the given identifiers and replaces them with new attestations\"},\"bulkRevoke(bytes32[])\":{\"notice\":\"Bulk revokes a list of attestations for the given identifiers\"},\"constructor\":{\"notice\":\"Contract constructor\"},\"getModules()\":{\"notice\":\"Get all the modules addresses used by the Portal\"},\"replace(bytes32,(bytes32,uint64,bytes,bytes),bytes[])\":{\"notice\":\"Replaces the attestation for the given identifier and replaces it with a new attestation\"},\"revoke(bytes32)\":{\"notice\":\"Revokes an attestation for the given identifier\"},\"supportsInterface(bytes4)\":{\"notice\":\"Verifies that a specific interface is implemented by the Portal, following ERC-165 specification\"},\"withdraw(address,uint256)\":{\"notice\":\"Withdraw funds from the Portal\"}},\"notice\":\"This contract is an abstracts contract with basic Portal logic         to be inherited. We strongly encourage all Portals to implement         this contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/abstracts/AbstractPortalV2.sol\":\"AbstractPortalV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=node_modules/hardhat/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/\"]},\"sources\":{\"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e89863421b4014b96a4b62be76eb3b9f0a8afe9684664a6f389124c0964bfe5c\",\"dweb:/ipfs/Qmbk7xr1irpDuU1WdxXgxELBXxs61rHhCgod7heVcvFx16\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f103ee2e4aecd37aac6ceefe670709cdd7613dee25fa2d4d9feaf7fc0aaa155e\",\"dweb:/ipfs/QmRiNZLoJk5k3HPMYGPGjZFd2ke1ZxjhJZkM45Ec9GH9hv\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b\",\"dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8b06267c5f80bad727af3e48b1382333d591dad51376399ef2f6b0ee6d58bf95\",\"dweb:/ipfs/QmdU5La1agcQvghnfMpWZGDPz2TUDTCxUwTLKmuMRXBpAx\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165CheckerUpgradeable.sol\":{\"keccak256\":\"0x94edef8687cf1335a114f7e7267fa92cb0d9e61afde8d62589aceede6c245caf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9dbcc182503f671c6bb7e2c24fe5f13e4c7604389d6cfccd074bc1d9fa7b86df\",\"dweb:/ipfs/QmdioHDNmTsJx9xMcwBvA7QJhC4MzTmDmWHiWsZpbETLXx\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol\":{\"keccak256\":\"0xc6cef87559d0aeffdf0a99803de655938a7779ec0a3cd5d4383483ad85565a09\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://92ad7e572cf44e6b4b37631b44b62f9eb9fb1cf14d9ce51c1504d5dc7ccaf758\",\"dweb:/ipfs/QmcnbqX85tsWnUXPmtuPLE4SczME2sJaTfmqEFkuAJvWhy\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"src/AttestationRegistry.sol\":{\"keccak256\":\"0x3c56f7eee3ac86a0cae61be91ede7bcbf5c8af10805ed52224f324a44a55f98b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73409f2983c864ded4be63a649c9dbd1d25928e670784cd9b6b2173e3246c23\",\"dweb:/ipfs/QmXixGjYaZzua1ucUHoBwNtN9mXbBAiB4Sg91uxiX443A2\"]},\"src/Common.sol\":{\"keccak256\":\"0x07627815aee6d7b83ae82aef10f45b54ac0be15cbbbb249300cc097475475c24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72b82fc8baf2256b13b0b36f343328bfcd7d979304c47eca5731237d744fd094\",\"dweb:/ipfs/QmQW23C75qvgR5H2cUgCJ5zZDwHCDLBbESGExwVCmJjL4k\"]},\"src/DefaultPortalV2.sol\":{\"keccak256\":\"0x7c18ba58fb72b1831c834650860b748bb6e8f7b85344184fea2ed8d6bb76eba8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://75bba0ba5980cf98d939f505925af829770a52c3268ac30a5a2157632f839522\",\"dweb:/ipfs/QmPMqALZpYKUbEeAsSwEzBB9uAnSxU7JLkmTL6P8AL5t1W\"]},\"src/ModuleRegistry.sol\":{\"keccak256\":\"0xe6f4dd301a87493d825b7b228f23fcc0dc061346525c3a3ef72acd12069a5ee0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bdef98113aa85895e6f61e27e0b946715d1d1e8d6c6a96b16e6d46025e7af88\",\"dweb:/ipfs/QmRvq2P4PmUFBnh6KSB35gryaTrJD47CNiy69yqpMCwcZx\"]},\"src/PortalRegistry.sol\":{\"keccak256\":\"0xe004c6d29a99520af021af80fcba3d1a4ec31ab836bb13e2ba3d668cedb14fb8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c61d5aab8db5cef8d3d77cb23aa8e4867abf32b434281c2405c6f46de586f8ba\",\"dweb:/ipfs/QmZZdGdskovJPnusDmZ9Rc6rWVeLibEhNF4MTFpFm87xmx\"]},\"src/SchemaRegistry.sol\":{\"keccak256\":\"0x6cf8eb42ef410d84e77214f95333e598a6c154e3b7a4e7160b06e051862c168c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://68d561d0d3c633704f902350c8f2a842a5c19300ae35b1fbeb2cf3d8ee58aaae\",\"dweb:/ipfs/QmcZ3ofnBCmkmb8FZxWc9f2oP5L2tYweaaA6q5amA7uGio\"]},\"src/abstracts/AbstractModule.sol\":{\"keccak256\":\"0xae791069d8bd3f943d06975383ae0d0231498a8bd70d0ed7c8a815a4fddc9cf8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e32efbdee61914e3b91b29aabd5ddbc202546aa910ec005f7ee63a9f57603395\",\"dweb:/ipfs/QmaWYQVQSD5mo1ujPD3rm251UkWcBDcRm8y7i7QXurE2Ky\"]},\"src/abstracts/AbstractModuleV2.sol\":{\"keccak256\":\"0x87a3060cac439296ef19c719a6abe3776c59ab858c9d935a07e0c70c57387ac3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2208b4e53226d1a08ca45ccda9686abc7d339aee8b3554823585fb3acc0c1479\",\"dweb:/ipfs/QmdFMkJ49tBRUCT5oVMFGhub9ZFWL6wzv3jiW35XsLbuYi\"]},\"src/abstracts/AbstractPortalV2.sol\":{\"keccak256\":\"0xef4d0ec62960936027d0c9271bfc76d0b913ea36dd88ef077f676c62f06ffe72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8be53b100c84b36310ea7b9c22628052f0ee258b6c1cef15d0572a652e8c2e2\",\"dweb:/ipfs/QmSE98AGeEBQk3R66wpRmkePCR8BCT6ruk3zLZTzuf2oak\"]},\"src/interfaces/IPortal.sol\":{\"keccak256\":\"0xbae2383850a8835e1202c58d5dd4c0bca4e9b631cd85efe6c4f5c62cf769c5e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8687bf6ce8049ff7d4eeadef51e55cdab58e1ec7a9fb93a2037ae43f426420a8\",\"dweb:/ipfs/QmTqX5BfttfbrJxb9yyCxFpqAix9AxAWzGLodFYHhjfrY4\"]},\"src/interfaces/IRouter.sol\":{\"keccak256\":\"0x28599dbf7e8d3903c57c0df03a6f4ee26e731452c79755525c34a1b18ddd4d9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://122078d4c05dc8a8205d766017e3880665e44e726b82aa710347e95989d338a3\",\"dweb:/ipfs/QmSToNkFkzs8cJ2xQeQqsrUBC73tDXjGirGafK6ZkfXTm2\"]},\"src/types/Enums.sol\":{\"keccak256\":\"0x6c68eecf740a3f51211c954a99b43ebc2186e7b3e79b6c984937ad5c983e45a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c185006a0fde12fd59733b01578bbeefc2c0349c5f7899cc0652d3e3dd1a142\",\"dweb:/ipfs/QmUsw5sEwBDM4skEaHHdRovDXB12F47pQtUjE4Dq2SBu3t\"]},\"src/types/Structs.sol\":{\"keccak256\":\"0x8e3d41554d3c35181c36e019deddebfa6cb52a3f7b53c73c197fa2a87184ed2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc65fc7d7491ad0a26c8dd5ca1a1bb54d935ad6b59d99463c781446d57013f2a\",\"dweb:/ipfs/QmTgtxg6oNmf6QnbEcNdQosFutUYs7tkZSeN9KVpKGtWWK\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"OnlyPortalOwner"},{"inputs":[],"type":"error","name":"WithdrawFail"},{"inputs":[{"internalType":"struct AttestationPayload","name":"attestationPayload","type":"tuple","components":[{"internalType":"bytes32","name":"schemaId","type":"bytes32"},{"internalType":"uint64","name":"expirationDate","type":"uint64"},{"internalType":"bytes","name":"subject","type":"bytes"},{"internalType":"bytes","name":"attestationData","type":"bytes"}]},{"internalType":"bytes[]","name":"validationPayloads","type":"bytes[]"}],"stateMutability":"payable","type":"function","name":"attest"},{"inputs":[],"stateMutability":"view","type":"function","name":"attestationRegistry","outputs":[{"internalType":"contract AttestationRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"struct AttestationPayload[]","name":"attestationPayloads","type":"tuple[]","components":[{"internalType":"bytes32","name":"schemaId","type":"bytes32"},{"internalType":"uint64","name":"expirationDate","type":"uint64"},{"internalType":"bytes","name":"subject","type":"bytes"},{"internalType":"bytes","name":"attestationData","type":"bytes"}]},{"internalType":"bytes[][]","name":"validationPayloads","type":"bytes[][]"}],"stateMutability":"nonpayable","type":"function","name":"bulkAttest"},{"inputs":[{"internalType":"bytes32[]","name":"attestationIds","type":"bytes32[]"},{"internalType":"struct AttestationPayload[]","name":"attestationsPayloads","type":"tuple[]","components":[{"internalType":"bytes32","name":"schemaId","type":"bytes32"},{"internalType":"uint64","name":"expirationDate","type":"uint64"},{"internalType":"bytes","name":"subject","type":"bytes"},{"internalType":"bytes","name":"attestationData","type":"bytes"}]},{"internalType":"bytes[][]","name":"validationPayloads","type":"bytes[][]"}],"stateMutability":"nonpayable","type":"function","name":"bulkReplace"},{"inputs":[{"internalType":"bytes32[]","name":"attestationIds","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"bulkRevoke"},{"inputs":[],"stateMutability":"view","type":"function","name":"getModules","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"moduleRegistry","outputs":[{"internalType":"contract ModuleRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"modules","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"portalRegistry","outputs":[{"internalType":"contract PortalRegistry","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"attestationId","type":"bytes32"},{"internalType":"struct AttestationPayload","name":"attestationPayload","type":"tuple","components":[{"internalType":"bytes32","name":"schemaId","type":"bytes32"},{"internalType":"uint64","name":"expirationDate","type":"uint64"},{"internalType":"bytes","name":"subject","type":"bytes"},{"internalType":"bytes","name":"attestationData","type":"bytes"}]},{"internalType":"bytes[]","name":"validationPayloads","type":"bytes[]"}],"stateMutability":"payable","type":"function","name":"replace"},{"inputs":[{"internalType":"bytes32","name":"attestationId","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"revoke"},{"inputs":[],"stateMutability":"view","type":"function","name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"withdraw"}],"devdoc":{"kind":"dev","methods":{"attest((bytes32,uint64,bytes,bytes),bytes[])":{"details":"Runs all modules for the portal and registers the attestation using AttestationRegistryWARNING: Ensure that at most one module processes `msg.value` to avoid accounting issues,               as the total `msg.value` is forwarded to all modules.","params":{"attestationPayload":"the payload to attest","validationPayloads":"the payloads to validate via the modules to issue the attestations"}},"bulkAttest((bytes32,uint64,bytes,bytes)[],bytes[][])":{"details":"DISCLAIMER: This method may have unexpected behavior if one of the Module checks is done on the attestation ID                  as this ID won't be incremented before the end of the transaction.                  If you need to check the attestation ID, please use the `attestV2` method.","params":{"attestationPayloads":"the payloads to attest","validationPayloads":"the payloads to validate via the modules to issue the attestations"}},"bulkReplace(bytes32[],(bytes32,uint64,bytes,bytes)[],bytes[][])":{"details":"DISCLAIMER: This method may have unexpected behavior if one of the Module checks is done on the attestation ID                  as this ID won't be incremented before the end of the transaction.                  If you need to check the attestation ID, please use the `replaceV2` method.","params":{"attestationIds":"the list of IDs of the attestations to replace","attestationsPayloads":"the list of attestation payloads to create the new attestations and register them","validationPayloads":"the payloads to validate via the modules to issue the attestations"}},"bulkRevoke(bytes32[])":{"params":{"attestationIds":"the IDs of the attestations to revoke"}},"constructor":{"details":"This sets the addresses for the AttestationRegistry, ModuleRegistry and PortalRegistry","params":{"_modules":"list of modules to use for the portal (can be empty)","_router":"Router's address"}},"getModules()":{"returns":{"_0":"The list of modules addresses linked to the Portal"}},"replace(bytes32,(bytes32,uint64,bytes,bytes),bytes[])":{"details":"Runs all modules for the portal and registers the attestation using AttestationRegistry","params":{"attestationId":"the ID of the attestation to replace","attestationPayload":"the attestation payload to create the new attestation and register it","validationPayloads":"the payloads to validate via the modules to issue the attestation"}},"revoke(bytes32)":{"details":"By default, revocation is only possible by the portal owner We strongly encourage implementing such a rule in your Portal if you intend on overriding this method","params":{"attestationId":"the ID of the attestation to revoke"}},"supportsInterface(bytes4)":{"params":{"interfaceID":"the interface identifier checked in this call"},"returns":{"_0":"True if the interface is supported, false otherwise"}},"withdraw(address,uint256)":{"details":"Only the Portal owner can withdraw funds","params":{"amount":"the amount to withdraw","to":"the address to send the funds to"}}},"version":1},"userdoc":{"kind":"user","methods":{"attest((bytes32,uint64,bytes,bytes),bytes[])":{"notice":"Attest the schema with given attestationPayload and validationPayload"},"bulkAttest((bytes32,uint64,bytes,bytes)[],bytes[][])":{"notice":"Bulk attest the schema with payloads to attest and validation payloads"},"bulkReplace(bytes32[],(bytes32,uint64,bytes,bytes)[],bytes[][])":{"notice":"Bulk replaces the attestation for the given identifiers and replaces them with new attestations"},"bulkRevoke(bytes32[])":{"notice":"Bulk revokes a list of attestations for the given identifiers"},"constructor":{"notice":"Contract constructor"},"getModules()":{"notice":"Get all the modules addresses used by the Portal"},"replace(bytes32,(bytes32,uint64,bytes,bytes),bytes[])":{"notice":"Replaces the attestation for the given identifier and replaces it with a new attestation"},"revoke(bytes32)":{"notice":"Revokes an attestation for the given identifier"},"supportsInterface(bytes4)":{"notice":"Verifies that a specific interface is implemented by the Portal, following ERC-165 specification"},"withdraw(address,uint256)":{"notice":"Withdraw funds from the Portal"}},"version":1}},"settings":{"remappings":["@openzeppelin/=node_modules/@openzeppelin/","ds-test/=lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","hardhat/=node_modules/hardhat/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/abstracts/AbstractPortalV2.sol":"AbstractPortalV2"},"evmVersion":"paris","libraries":{}},"sources":{"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"keccak256":"0x359a1ab89b46b9aba7bcad3fb651924baf4893d15153049b9976b0fc9be1358e","urls":["bzz-raw://e89863421b4014b96a4b62be76eb3b9f0a8afe9684664a6f389124c0964bfe5c","dweb:/ipfs/Qmbk7xr1irpDuU1WdxXgxELBXxs61rHhCgod7heVcvFx16"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"keccak256":"0x89be10e757d242e9b18d5a32c9fbe2019f6d63052bbe46397a430a1d60d7f794","urls":["bzz-raw://f103ee2e4aecd37aac6ceefe670709cdd7613dee25fa2d4d9feaf7fc0aaa155e","dweb:/ipfs/QmRiNZLoJk5k3HPMYGPGjZFd2ke1ZxjhJZkM45Ec9GH9hv"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"keccak256":"0x9c80f545915582e63fe206c6ce27cbe85a86fc10b9cd2a0e8c9488fb7c2ee422","urls":["bzz-raw://310136ad60820af4177a11a61d77a3686faf5fca4942b600e08fc940db38396b","dweb:/ipfs/QmbCzMNSTL7Zi7M4UCSqBrkHtp4jjxUnGbkneCZKdR1qeq"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"keccak256":"0x75097e35253e7fb282ee4d7f27a80eaacfa759923185bf17302a89cbc059c5ef","urls":["bzz-raw://8b06267c5f80bad727af3e48b1382333d591dad51376399ef2f6b0ee6d58bf95","dweb:/ipfs/QmdU5La1agcQvghnfMpWZGDPz2TUDTCxUwTLKmuMRXBpAx"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165CheckerUpgradeable.sol":{"keccak256":"0x94edef8687cf1335a114f7e7267fa92cb0d9e61afde8d62589aceede6c245caf","urls":["bzz-raw://9dbcc182503f671c6bb7e2c24fe5f13e4c7604389d6cfccd074bc1d9fa7b86df","dweb:/ipfs/QmdioHDNmTsJx9xMcwBvA7QJhC4MzTmDmWHiWsZpbETLXx"],"license":"MIT"},"node_modules/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol":{"keccak256":"0xc6cef87559d0aeffdf0a99803de655938a7779ec0a3cd5d4383483ad85565a09","urls":["bzz-raw://92ad7e572cf44e6b4b37631b44b62f9eb9fb1cf14d9ce51c1504d5dc7ccaf758","dweb:/ipfs/QmcnbqX85tsWnUXPmtuPLE4SczME2sJaTfmqEFkuAJvWhy"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/introspection/ERC165.sol":{"keccak256":"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b","urls":["bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d","dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43"],"license":"MIT"},"node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1","urls":["bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f","dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"],"license":"MIT"},"src/AttestationRegistry.sol":{"keccak256":"0x3c56f7eee3ac86a0cae61be91ede7bcbf5c8af10805ed52224f324a44a55f98b","urls":["bzz-raw://e73409f2983c864ded4be63a649c9dbd1d25928e670784cd9b6b2173e3246c23","dweb:/ipfs/QmXixGjYaZzua1ucUHoBwNtN9mXbBAiB4Sg91uxiX443A2"],"license":"MIT"},"src/Common.sol":{"keccak256":"0x07627815aee6d7b83ae82aef10f45b54ac0be15cbbbb249300cc097475475c24","urls":["bzz-raw://72b82fc8baf2256b13b0b36f343328bfcd7d979304c47eca5731237d744fd094","dweb:/ipfs/QmQW23C75qvgR5H2cUgCJ5zZDwHCDLBbESGExwVCmJjL4k"],"license":"MIT"},"src/DefaultPortalV2.sol":{"keccak256":"0x7c18ba58fb72b1831c834650860b748bb6e8f7b85344184fea2ed8d6bb76eba8","urls":["bzz-raw://75bba0ba5980cf98d939f505925af829770a52c3268ac30a5a2157632f839522","dweb:/ipfs/QmPMqALZpYKUbEeAsSwEzBB9uAnSxU7JLkmTL6P8AL5t1W"],"license":"MIT"},"src/ModuleRegistry.sol":{"keccak256":"0xe6f4dd301a87493d825b7b228f23fcc0dc061346525c3a3ef72acd12069a5ee0","urls":["bzz-raw://0bdef98113aa85895e6f61e27e0b946715d1d1e8d6c6a96b16e6d46025e7af88","dweb:/ipfs/QmRvq2P4PmUFBnh6KSB35gryaTrJD47CNiy69yqpMCwcZx"],"license":"MIT"},"src/PortalRegistry.sol":{"keccak256":"0xe004c6d29a99520af021af80fcba3d1a4ec31ab836bb13e2ba3d668cedb14fb8","urls":["bzz-raw://c61d5aab8db5cef8d3d77cb23aa8e4867abf32b434281c2405c6f46de586f8ba","dweb:/ipfs/QmZZdGdskovJPnusDmZ9Rc6rWVeLibEhNF4MTFpFm87xmx"],"license":"MIT"},"src/SchemaRegistry.sol":{"keccak256":"0x6cf8eb42ef410d84e77214f95333e598a6c154e3b7a4e7160b06e051862c168c","urls":["bzz-raw://68d561d0d3c633704f902350c8f2a842a5c19300ae35b1fbeb2cf3d8ee58aaae","dweb:/ipfs/QmcZ3ofnBCmkmb8FZxWc9f2oP5L2tYweaaA6q5amA7uGio"],"license":"MIT"},"src/abstracts/AbstractModule.sol":{"keccak256":"0xae791069d8bd3f943d06975383ae0d0231498a8bd70d0ed7c8a815a4fddc9cf8","urls":["bzz-raw://e32efbdee61914e3b91b29aabd5ddbc202546aa910ec005f7ee63a9f57603395","dweb:/ipfs/QmaWYQVQSD5mo1ujPD3rm251UkWcBDcRm8y7i7QXurE2Ky"],"license":"MIT"},"src/abstracts/AbstractModuleV2.sol":{"keccak256":"0x87a3060cac439296ef19c719a6abe3776c59ab858c9d935a07e0c70c57387ac3","urls":["bzz-raw://2208b4e53226d1a08ca45ccda9686abc7d339aee8b3554823585fb3acc0c1479","dweb:/ipfs/QmdFMkJ49tBRUCT5oVMFGhub9ZFWL6wzv3jiW35XsLbuYi"],"license":"MIT"},"src/abstracts/AbstractPortalV2.sol":{"keccak256":"0xef4d0ec62960936027d0c9271bfc76d0b913ea36dd88ef077f676c62f06ffe72","urls":["bzz-raw://c8be53b100c84b36310ea7b9c22628052f0ee258b6c1cef15d0572a652e8c2e2","dweb:/ipfs/QmSE98AGeEBQk3R66wpRmkePCR8BCT6ruk3zLZTzuf2oak"],"license":"MIT"},"src/interfaces/IPortal.sol":{"keccak256":"0xbae2383850a8835e1202c58d5dd4c0bca4e9b631cd85efe6c4f5c62cf769c5e3","urls":["bzz-raw://8687bf6ce8049ff7d4eeadef51e55cdab58e1ec7a9fb93a2037ae43f426420a8","dweb:/ipfs/QmTqX5BfttfbrJxb9yyCxFpqAix9AxAWzGLodFYHhjfrY4"],"license":"MIT"},"src/interfaces/IRouter.sol":{"keccak256":"0x28599dbf7e8d3903c57c0df03a6f4ee26e731452c79755525c34a1b18ddd4d9c","urls":["bzz-raw://122078d4c05dc8a8205d766017e3880665e44e726b82aa710347e95989d338a3","dweb:/ipfs/QmSToNkFkzs8cJ2xQeQqsrUBC73tDXjGirGafK6ZkfXTm2"],"license":"MIT"},"src/types/Enums.sol":{"keccak256":"0x6c68eecf740a3f51211c954a99b43ebc2186e7b3e79b6c984937ad5c983e45a2","urls":["bzz-raw://6c185006a0fde12fd59733b01578bbeefc2c0349c5f7899cc0652d3e3dd1a142","dweb:/ipfs/QmUsw5sEwBDM4skEaHHdRovDXB12F47pQtUjE4Dq2SBu3t"],"license":"MIT"},"src/types/Structs.sol":{"keccak256":"0x8e3d41554d3c35181c36e019deddebfa6cb52a3f7b53c73c197fa2a87184ed2a","urls":["bzz-raw://bc65fc7d7491ad0a26c8dd5ca1a1bb54d935ad6b59d99463c781446d57013f2a","dweb:/ipfs/QmTgtxg6oNmf6QnbEcNdQosFutUYs7tkZSeN9KVpKGtWWK"],"license":"MIT"}},"version":1},"id":63}