{"abi":[{"type":"function","name":"onAfterCallSystem","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"systemId","type":"bytes32","internalType":"ResourceId"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"onBeforeCallSystem","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"systemId","type":"bytes32","internalType":"ResourceId"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceID","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"onAfterCallSystem(address,bytes32,bytes)":"973d8f99","onBeforeCallSystem(address,bytes32,bytes)":"c3323031","supportsInterface(bytes4)":"01ffc9a7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"ResourceId\",\"name\":\"systemId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"onAfterCallSystem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"ResourceId\",\"name\":\"systemId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"onBeforeCallSystem\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"MUD (https://mud.dev) by Lattice (https://lattice.xyz)\",\"details\":\"Interface defining system hooks for external functionality. Provides pre and post hooks that can be triggered before and after a system call respectively. This interface adheres to the ERC-165 standard for determining interface support.\",\"kind\":\"dev\",\"methods\":{\"onAfterCallSystem(address,bytes32,bytes)\":{\"details\":\"Provides the ability to add custom logic or checks after a system call completes.\",\"params\":{\"callData\":\"Data that was sent as part of the system call.\",\"msgSender\":\"The original sender of the system call.\",\"systemId\":\"The identifier for the system that was called.\"}},\"onBeforeCallSystem(address,bytes32,bytes)\":{\"details\":\"Provides the ability to add custom logic or checks before a system is invoked.\",\"params\":{\"callData\":\"Data being sent as part of the system call.\",\"msgSender\":\"The original sender of the system call.\",\"systemId\":\"The identifier for the system being called.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Interface identification is specified in ERC-165. This function uses less than 30,000 gas.\",\"params\":{\"interfaceID\":\"The interface identifier, as specified in ERC-165.\"},\"returns\":{\"_0\":\"True if the contract implements `interfaceID` and `interfaceID` is not 0xffffffff, false otherwise.\"}}},\"title\":\"ISystemHook\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onAfterCallSystem(address,bytes32,bytes)\":{\"notice\":\"Executes after a system call.\"},\"onBeforeCallSystem(address,bytes32,bytes)\":{\"notice\":\"Executes before a system call.\"},\"supportsInterface(bytes4)\":{\"notice\":\"Query if a contract implements an interface.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/@latticexyz/world/src/ISystemHook.sol\":\"ISystemHook\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":3000},\"remappings\":[\":@dk1a/solidity-stringutils/=node_modules/@dk1a/solidity-stringutils/\",\":@latticexyz/=node_modules/@latticexyz/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":base/=src/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solmate/=node_modules/solmate/src/\"]},\"sources\":{\"node_modules/@latticexyz/store/src/Bytes.sol\":{\"keccak256\":\"0x7dec900f9c9e7dff59430fa6f520e76c56338c3e829201aea140d49342e4fef8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e55c1dfcda94dcc64b8577949b2e92a9d3fc44f5fba1ae77ceacccfdc8e22e35\",\"dweb:/ipfs/QmS7uRJbEQYkPuZ5Dz5aSNjaaxj9PA8RtxUeUGN2W3jZx6\"]},\"node_modules/@latticexyz/store/src/ResourceId.sol\":{\"keccak256\":\"0x889423054511cf8a83f5dfd65a0f984dc514aba798ef3db139b59d395b2327e2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40b9495d455c87db8b063e291ca3973dc3ba1163f09c5d7446241a9e1cb69ed0\",\"dweb:/ipfs/Qmek1JKVjPUpoXnKwu66HfPS9rHstKtWTuBmG8YFxbPEWQ\"]},\"node_modules/@latticexyz/store/src/storeResourceTypes.sol\":{\"keccak256\":\"0x1c4cb6b3ecf76f614479ab304d7de3ade0e99c7ccfd07717b57c92f699a27261\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c9b0e0c9b3b5610d6fd65a8ffd7c54df390a34ccc70d58f4a055c49ad1ea586\",\"dweb:/ipfs/QmP6ffpnR7aRyvq9AiUkVNH6LbGfFP3NDq7E2n2PVcHhp2\"]},\"node_modules/@latticexyz/world/src/IERC165.sol\":{\"keccak256\":\"0xe3d9074a1be3247be67ff4dd2c9e41481650ddaa799285a249736bb85673e33d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0b6743ee1e6d0c74927bf17fc1da0cad7575aa7634871b94190ffbdb4c28c2a7\",\"dweb:/ipfs/Qma5bNsPJSBTesWxg3eAAMUBTDE7UjqWaHF7eMiGwP87jr\"]},\"node_modules/@latticexyz/world/src/ISystemHook.sol\":{\"keccak256\":\"0x81f1743d7ca6a9c7efc4997cf95e603ccb2070885265ca0e540f461aa7430721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://93d99e78b541b33ecd501bf0cd407a78cef490fec8eaef2f188bddb9e293a99f\",\"dweb:/ipfs/QmPrcMDxwhvBZTr2AxoGqJA9L3Mjx27KBc98h3gXSsa3PM\"]},\"node_modules/@latticexyz/world/src/WorldResourceId.sol\":{\"keccak256\":\"0xaff9a22fac8a0f6eee5763b07a7ccb623c829d37922b85e42e914aad2ad417ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e598f0274d6d97c0a09806bf4fd1f0d054c310cf51b2123f5ce6380d6f3186ea\",\"dweb:/ipfs/QmaaVvqm21YsCgxozDyShcM17jKUXJhf2y26bk2YzPYZoM\"]},\"node_modules/@latticexyz/world/src/constants.sol\":{\"keccak256\":\"0xb8320f88ed5519a4fe2554ad94815ce328a50fef7719932375d6ce695265c2f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a8f5de30fbcc63e469e46ad4a4d4bcd7d8e4b4f2d31fcf62a04aca48d999af22\",\"dweb:/ipfs/QmXw1jDQM2szfRY3tAGrRy6fEzte6yVFgebJAqCLMDHndV\"]},\"node_modules/@latticexyz/world/src/worldResourceTypes.sol\":{\"keccak256\":\"0xeb042e7d3638430f6fd394107f3237cf14e4325154f0098624e8a7826584d465\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39e0b8eb87616b661f5a4f2fd7e1a727bd19b7fd8d40ad3d93fda26822f433ea\",\"dweb:/ipfs/QmacYMatKV9pwEwirVRY9a6r89RoNs5yk99ic37ieWA8Dk\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"ResourceId","name":"systemId","type":"bytes32"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"onAfterCallSystem"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"ResourceId","name":"systemId","type":"bytes32"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"onBeforeCallSystem"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{"onAfterCallSystem(address,bytes32,bytes)":{"details":"Provides the ability to add custom logic or checks after a system call completes.","params":{"callData":"Data that was sent as part of the system call.","msgSender":"The original sender of the system call.","systemId":"The identifier for the system that was called."}},"onBeforeCallSystem(address,bytes32,bytes)":{"details":"Provides the ability to add custom logic or checks before a system is invoked.","params":{"callData":"Data being sent as part of the system call.","msgSender":"The original sender of the system call.","systemId":"The identifier for the system being called."}},"supportsInterface(bytes4)":{"details":"Interface identification is specified in ERC-165. This function uses less than 30,000 gas.","params":{"interfaceID":"The interface identifier, as specified in ERC-165."},"returns":{"_0":"True if the contract implements `interfaceID` and `interfaceID` is not 0xffffffff, false otherwise."}}},"version":1},"userdoc":{"kind":"user","methods":{"onAfterCallSystem(address,bytes32,bytes)":{"notice":"Executes after a system call."},"onBeforeCallSystem(address,bytes32,bytes)":{"notice":"Executes before a system call."},"supportsInterface(bytes4)":{"notice":"Query if a contract implements an interface."}},"version":1}},"settings":{"remappings":["@dk1a/solidity-stringutils/=node_modules/@dk1a/solidity-stringutils/","@latticexyz/=node_modules/@latticexyz/","@openzeppelin/=node_modules/@openzeppelin/","base/=src/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/","solmate/=node_modules/solmate/src/"],"optimizer":{"enabled":true,"runs":3000},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"node_modules/@latticexyz/world/src/ISystemHook.sol":"ISystemHook"},"evmVersion":"paris","libraries":{}},"sources":{"node_modules/@latticexyz/store/src/Bytes.sol":{"keccak256":"0x7dec900f9c9e7dff59430fa6f520e76c56338c3e829201aea140d49342e4fef8","urls":["bzz-raw://e55c1dfcda94dcc64b8577949b2e92a9d3fc44f5fba1ae77ceacccfdc8e22e35","dweb:/ipfs/QmS7uRJbEQYkPuZ5Dz5aSNjaaxj9PA8RtxUeUGN2W3jZx6"],"license":"MIT"},"node_modules/@latticexyz/store/src/ResourceId.sol":{"keccak256":"0x889423054511cf8a83f5dfd65a0f984dc514aba798ef3db139b59d395b2327e2","urls":["bzz-raw://40b9495d455c87db8b063e291ca3973dc3ba1163f09c5d7446241a9e1cb69ed0","dweb:/ipfs/Qmek1JKVjPUpoXnKwu66HfPS9rHstKtWTuBmG8YFxbPEWQ"],"license":"MIT"},"node_modules/@latticexyz/store/src/storeResourceTypes.sol":{"keccak256":"0x1c4cb6b3ecf76f614479ab304d7de3ade0e99c7ccfd07717b57c92f699a27261","urls":["bzz-raw://2c9b0e0c9b3b5610d6fd65a8ffd7c54df390a34ccc70d58f4a055c49ad1ea586","dweb:/ipfs/QmP6ffpnR7aRyvq9AiUkVNH6LbGfFP3NDq7E2n2PVcHhp2"],"license":"MIT"},"node_modules/@latticexyz/world/src/IERC165.sol":{"keccak256":"0xe3d9074a1be3247be67ff4dd2c9e41481650ddaa799285a249736bb85673e33d","urls":["bzz-raw://0b6743ee1e6d0c74927bf17fc1da0cad7575aa7634871b94190ffbdb4c28c2a7","dweb:/ipfs/Qma5bNsPJSBTesWxg3eAAMUBTDE7UjqWaHF7eMiGwP87jr"],"license":"MIT"},"node_modules/@latticexyz/world/src/ISystemHook.sol":{"keccak256":"0x81f1743d7ca6a9c7efc4997cf95e603ccb2070885265ca0e540f461aa7430721","urls":["bzz-raw://93d99e78b541b33ecd501bf0cd407a78cef490fec8eaef2f188bddb9e293a99f","dweb:/ipfs/QmPrcMDxwhvBZTr2AxoGqJA9L3Mjx27KBc98h3gXSsa3PM"],"license":"MIT"},"node_modules/@latticexyz/world/src/WorldResourceId.sol":{"keccak256":"0xaff9a22fac8a0f6eee5763b07a7ccb623c829d37922b85e42e914aad2ad417ee","urls":["bzz-raw://e598f0274d6d97c0a09806bf4fd1f0d054c310cf51b2123f5ce6380d6f3186ea","dweb:/ipfs/QmaaVvqm21YsCgxozDyShcM17jKUXJhf2y26bk2YzPYZoM"],"license":"MIT"},"node_modules/@latticexyz/world/src/constants.sol":{"keccak256":"0xb8320f88ed5519a4fe2554ad94815ce328a50fef7719932375d6ce695265c2f5","urls":["bzz-raw://a8f5de30fbcc63e469e46ad4a4d4bcd7d8e4b4f2d31fcf62a04aca48d999af22","dweb:/ipfs/QmXw1jDQM2szfRY3tAGrRy6fEzte6yVFgebJAqCLMDHndV"],"license":"MIT"},"node_modules/@latticexyz/world/src/worldResourceTypes.sol":{"keccak256":"0xeb042e7d3638430f6fd394107f3237cf14e4325154f0098624e8a7826584d465","urls":["bzz-raw://39e0b8eb87616b661f5a4f2fd7e1a727bd19b7fd8d40ad3d93fda26822f433ea","dweb:/ipfs/QmacYMatKV9pwEwirVRY9a6r89RoNs5yk99ic37ieWA8Dk"],"license":"MIT"}},"version":1},"ast":{"absolutePath":"node_modules/@latticexyz/world/src/ISystemHook.sol","id":47659,"exportedSymbols":{"IERC165":[47584],"ISystemHook":[47658],"ResourceId":[9486]},"nodeType":"SourceUnit","src":"32:1393:108","nodes":[{"id":47628,"nodeType":"PragmaDirective","src":"32:25:108","nodes":[],"literals":["solidity",">=","0.8",".24"]},{"id":47630,"nodeType":"ImportDirective","src":"59:40:108","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/IERC165.sol","file":"./IERC165.sol","nameLocation":"-1:-1:-1","scope":47659,"sourceUnit":47585,"symbolAliases":[{"foreign":{"id":47629,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47584,"src":"68:7:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":47632,"nodeType":"ImportDirective","src":"100:51:108","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/WorldResourceId.sol","file":"./WorldResourceId.sol","nameLocation":"-1:-1:-1","scope":47659,"sourceUnit":48859,"symbolAliases":[{"foreign":{"id":47631,"name":"ResourceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9486,"src":"109:10:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":47658,"nodeType":"ContractDefinition","src":"500:924:108","nodes":[{"id":47646,"nodeType":"FunctionDefinition","src":"874:100:108","nodes":[],"documentation":{"id":47636,"nodeType":"StructuredDocumentation","src":"537:334:108","text":" @notice Executes before a system call.\n @dev Provides the ability to add custom logic or checks before a system is invoked.\n @param msgSender The original sender of the system call.\n @param systemId The identifier for the system being called.\n @param callData Data being sent as part of the system call."},"functionSelector":"c3323031","implemented":false,"kind":"function","modifiers":[],"name":"onBeforeCallSystem","nameLocation":"883:18:108","parameters":{"id":47644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47638,"mutability":"mutable","name":"msgSender","nameLocation":"910:9:108","nodeType":"VariableDeclaration","scope":47646,"src":"902:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47637,"name":"address","nodeType":"ElementaryTypeName","src":"902:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47641,"mutability":"mutable","name":"systemId","nameLocation":"932:8:108","nodeType":"VariableDeclaration","scope":47646,"src":"921:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$9486","typeString":"ResourceId"},"typeName":{"id":47640,"nodeType":"UserDefinedTypeName","pathNode":{"id":47639,"name":"ResourceId","nameLocations":["921:10:108"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"921:10:108"},"referencedDeclaration":9486,"src":"921:10:108","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$9486","typeString":"ResourceId"}},"visibility":"internal"},{"constant":false,"id":47643,"mutability":"mutable","name":"callData","nameLocation":"955:8:108","nodeType":"VariableDeclaration","scope":47646,"src":"942:21:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47642,"name":"bytes","nodeType":"ElementaryTypeName","src":"942:5:108","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"901:63:108"},"returnParameters":{"id":47645,"nodeType":"ParameterList","parameters":[],"src":"973:0:108"},"scope":47658,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":47657,"nodeType":"FunctionDefinition","src":"1323:99:108","nodes":[],"documentation":{"id":47647,"nodeType":"StructuredDocumentation","src":"978:342:108","text":" @notice Executes after a system call.\n @dev Provides the ability to add custom logic or checks after a system call completes.\n @param msgSender The original sender of the system call.\n @param systemId The identifier for the system that was called.\n @param callData Data that was sent as part of the system call."},"functionSelector":"973d8f99","implemented":false,"kind":"function","modifiers":[],"name":"onAfterCallSystem","nameLocation":"1332:17:108","parameters":{"id":47655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47649,"mutability":"mutable","name":"msgSender","nameLocation":"1358:9:108","nodeType":"VariableDeclaration","scope":47657,"src":"1350:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47648,"name":"address","nodeType":"ElementaryTypeName","src":"1350:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47652,"mutability":"mutable","name":"systemId","nameLocation":"1380:8:108","nodeType":"VariableDeclaration","scope":47657,"src":"1369:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$9486","typeString":"ResourceId"},"typeName":{"id":47651,"nodeType":"UserDefinedTypeName","pathNode":{"id":47650,"name":"ResourceId","nameLocations":["1369:10:108"],"nodeType":"IdentifierPath","referencedDeclaration":9486,"src":"1369:10:108"},"referencedDeclaration":9486,"src":"1369:10:108","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$9486","typeString":"ResourceId"}},"visibility":"internal"},{"constant":false,"id":47654,"mutability":"mutable","name":"callData","nameLocation":"1403:8:108","nodeType":"VariableDeclaration","scope":47657,"src":"1390:21:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47653,"name":"bytes","nodeType":"ElementaryTypeName","src":"1390:5:108","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1349:63:108"},"returnParameters":{"id":47656,"nodeType":"ParameterList","parameters":[],"src":"1421:0:108"},"scope":47658,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":47634,"name":"IERC165","nameLocations":["525:7:108"],"nodeType":"IdentifierPath","referencedDeclaration":47584,"src":"525:7:108"},"id":47635,"nodeType":"InheritanceSpecifier","src":"525:7:108"}],"canonicalName":"ISystemHook","contractDependencies":[],"contractKind":"interface","documentation":{"id":47633,"nodeType":"StructuredDocumentation","src":"153:346:108","text":" @title ISystemHook\n @author MUD (https://mud.dev) by Lattice (https://lattice.xyz)\n @dev Interface defining system hooks for external functionality.\n Provides pre and post hooks that can be triggered before and after a system call respectively.\n This interface adheres to the ERC-165 standard for determining interface support."},"fullyImplemented":false,"linearizedBaseContracts":[47658,47584],"name":"ISystemHook","nameLocation":"510:11:108","scope":47659,"usedErrors":[],"usedEvents":[]}],"license":"MIT"},"id":108}