From 6fadcf87b4da69396f74d1fff2c733573b59ee60 Mon Sep 17 00:00:00 2001 From: kilavvy <140459108+kilavvy@users.noreply.github.com> Date: Fri, 28 Feb 2025 12:00:00 +0100 Subject: [PATCH 1/2] Update WorldIDIdentityManagerImplV2.json --- sol/WorldIDIdentityManagerImplV2.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sol/WorldIDIdentityManagerImplV2.json b/sol/WorldIDIdentityManagerImplV2.json index 2b471d8f..90ff1692 100644 --- a/sol/WorldIDIdentityManagerImplV2.json +++ b/sol/WorldIDIdentityManagerImplV2.json @@ -1120,7 +1120,7 @@ "upgradeToAndCall(address,bytes)": "4f1ef286", "verifyProof(uint256,uint256,uint256,uint256,uint256[8])": "354ca120" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CannotRenounceOwnership\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpiredRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImplementationNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"InvalidCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDeletionIndices\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStateBridgeAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVerifier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVerifierLUT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MismatchedInputLengths\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"providedRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"latestRoot\",\"type\":\"uint256\"}],\"name\":\"NotLatestRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProofValidationFailure\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StateBridgeAlreadyDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StateBridgeAlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum WorldIDIdentityManagerImplV1.UnreducedElementType\",\"name\":\"elementType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"element\",\"type\":\"uint256\"}],\"name\":\"UnreducedElement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"depth\",\"type\":\"uint8\"}],\"name\":\"UnsupportedTreeDepth\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum WorldIDIdentityManagerImplV1.Dependency\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"DependencyUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOperator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOperator\",\"type\":\"address\"}],\"name\":\"IdentityOperatorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldExpiryTime\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"}],\"name\":\"RootHistoryExpirySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"name\":\"StateBridgeStateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enum WorldIDIdentityManagerImplV1.TreeChange\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"}],\"name\":\"TreeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_treeDepth\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialRoot\",\"type\":\"uint256\"}],\"name\":\"WorldIDIdentityManagerImplInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"WorldIDIdentityManagerImplV2Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"NO_SUCH_ROOT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"supersededTimestamp\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct WorldIDIdentityManagerImplV1.RootInfo\",\"name\":\"rootInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packedDeletionIndices\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"batchSize\",\"type\":\"uint32\"}],\"name\":\"calculateIdentityDeletionInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"startIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"identityCommitments\",\"type\":\"uint256[]\"}],\"name\":\"calculateIdentityRegistrationInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[8]\",\"name\":\"deletionProof\",\"type\":\"uint256[8]\"},{\"internalType\":\"bytes\",\"name\":\"packedDeletionIndices\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"}],\"name\":\"deleteIdentities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDeleteIdentitiesVerifierLookupTableAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisterIdentitiesVerifierLookupTableAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRootHistoryExpiry\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSemaphoreVerifierAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreeDepth\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_treeDepth\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"initialRoot\",\"type\":\"uint256\"},{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"_batchInsertionVerifiers\",\"type\":\"address\"},{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"_batchUpdateVerifiers\",\"type\":\"address\"},{\"internalType\":\"contract ISemaphoreVerifier\",\"name\":\"_semaphoreVerifier\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"_batchDeletionVerifiers\",\"type\":\"address\"}],\"name\":\"initializeV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"}],\"name\":\"queryRoot\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"supersededTimestamp\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct WorldIDIdentityManagerImplV1.RootInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[8]\",\"name\":\"insertionProof\",\"type\":\"uint256[8]\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint256[]\",\"name\":\"identityCommitments\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"}],\"name\":\"registerIdentities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"}],\"name\":\"requireValidRoot\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"newTable\",\"type\":\"address\"}],\"name\":\"setDeleteIdentitiesVerifierLookupTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newIdentityOperator\",\"type\":\"address\"}],\"name\":\"setIdentityOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"newTable\",\"type\":\"address\"}],\"name\":\"setRegisterIdentitiesVerifierLookupTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"}],\"name\":\"setRootHistoryExpiry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISemaphoreVerifier\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"setSemaphoreVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signalHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nullifierHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"externalNullifierHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256[8]\",\"name\":\"proof\",\"type\":\"uint256[8]\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Worldcoin\",\"details\":\"The manager is based on the principle of verifying externally-created Zero Knowledge Proofs to perform the deletions.This is the implementation delegated to by a proxy.\",\"errors\":{\"InvalidCommitment(uint256)\":[{\"details\":\"This error is no longer in use as we now verify the commitments off-chain within the circuit no need to check for reduced elements or invalid commitments.preserved for ABI backwards compatibility with V1, no longer used, all elements are validated by the circuit\",\"params\":{\"index\":\"The index in the array of identity commitments where the invalid commitment was found.\"}}],\"InvalidStateBridgeAddress()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"MismatchedInputLengths()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"NotLatestRoot(uint256,uint256)\":[{\"params\":{\"latestRoot\":\"The actual latest root at the time of the transaction.\",\"providedRoot\":\"The root that was provided as the `preRoot` for a transaction.\"}}],\"StateBridgeAlreadyDisabled()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"StateBridgeAlreadyEnabled()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"Unauthorized(address)\":[{\"params\":{\"user\":\"The user that attempted the action that they were not authorised for.\"}}],\"UnreducedElement(uint8,uint256)\":[{\"details\":\"`r` in this case is given by `SNARK_SCALAR_FIELD`.preserved for ABI backwards compatibility with V1, no longer used, all elements come out reduced from the circuit\",\"params\":{\"element\":\"The value of that element.\",\"elementType\":\"The kind of element that was encountered unreduced.\"}}],\"UnsupportedTreeDepth(uint8)\":[{\"params\":{\"depth\":\"Passed tree depth.\"}}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"DependencyUpdated(uint8,address,address)\":{\"params\":{\"kind\":\"The kind of dependency that was updated.\",\"newAddress\":\"The new address of that dependency.\",\"oldAddress\":\"The old address of that dependency.\"}},\"IdentityOperatorChanged(address,address)\":{\"params\":{\"newOperator\":\"The address of the new identity operator.\",\"oldOperator\":\"The address of the old identity operator.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RootHistoryExpirySet(uint256,uint256)\":{\"params\":{\"newExpiryTime\":\"The expiry time after the change.\",\"oldExpiryTime\":\"The expiry time prior to the change.\"}},\"StateBridgeStateChange(bool)\":{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\",\"params\":{\"isEnabled\":\"Set to `true` if the event comes from the state bridge being enabled, `false` otherwise.\"}},\"TreeChanged(uint256,uint8,uint256)\":{\"params\":{\"kind\":\"Either \\\"insertion\\\" or \\\"update\\\", the kind of alteration that was made to the tree.\",\"postRoot\":\"The value of the tree's root after the update.\",\"preRoot\":\"The value of the tree's root before the update.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"},\"WorldIDIdentityManagerImplInitialized(uint8,uint256)\":{\"params\":{\"_treeDepth\":\"The depth of the MerkeTree\",\"initialRoot\":\"The initial value for the `latestRoot` in the contract. When deploying this should be set to the root of the empty tree.\"}}},\"kind\":\"dev\",\"methods\":{\"NO_SUCH_ROOT()\":{\"details\":\"Can be checked against when querying for root data.\"},\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"calculateIdentityDeletionInputHash(bytes,uint256,uint256,uint32)\":{\"details\":\"Implements the computation described below.the deletion indices are packed into bytes calldata where each deletion index is 32 bits wide. The indices are encoded using abi.encodePacked for testing. We keccak hash all input to save verification gas. Inputs for the hash are arranged as follows: packedDeletionIndices || PreRoot || PostRoot 32 bits * batchSize || 256 || 256\",\"params\":{\"batchSize\":\"The number of identities that were deleted in this batch\",\"packedDeletionIndices\":\"The indices of the identities that were deleted from the tree.\",\"postRoot\":\"The root value of the tree after these deletions were made.\",\"preRoot\":\"The root value of the tree before these deletions were made.\"},\"returns\":{\"hash\":\"The input hash calculated as described below.\"}},\"calculateIdentityRegistrationInputHash(uint32,uint256,uint256,uint256[])\":{\"details\":\"Implements the computation described below.\",\"params\":{\"identityCommitments\":\"The identities that were added to the tree to produce `postRoot`.\",\"postRoot\":\"The root value of the tree after these insertions were made.\",\"preRoot\":\"The root value of the tree before these insertions were made.\",\"startIndex\":\"The index in the tree from which inserting started.\"},\"returns\":{\"hash\":\"The input hash calculated as described below. We keccak hash all input to save verification gas. Inputs are arranged as follows: StartIndex || PreRoot || PostRoot || IdComms[0] || IdComms[1] || ... || IdComms[batchSize-1] 32\\t || 256 || 256 || 256 || 256 || ... || 256 bits\"}},\"deleteIdentities(uint256[8],bytes,uint256,uint256)\":{\"custom:reverts\":\"Unauthorized If the message sender is not authorised to add identities.NotLatestRoot If the provided `preRoot` is not the latest root.ProofValidationFailure If `deletionProof` cannot be verified using the provided inputs.VerifierLookupTable.NoSuchVerifier If the batch sizes doesn't match a known verifier.InvalidDeletionIndices if the length of `packedDeletionIndices` is not a multiple of 4 (8*4 = 32 bits per index)\",\"params\":{\"postRoot\":\"The root obtained after deleting all of `identityCommitments` into the tree described by `preRoot`. Must be an element of the field `Kr`.\",\"preRoot\":\"The value for the root of the tree before the corresponding identity commitments have been deleted. Must be an element of the field `Kr`.\"}},\"getDeleteIdentitiesVerifierLookupTableAddress()\":{\"details\":\"The deletion verifier supports batch deletions of size 10, 100 and 1000 members per batch.\",\"returns\":{\"_0\":\"addr The address of the contract being used as the verifier lookup table.\"}},\"getRegisterIdentitiesVerifierLookupTableAddress()\":{\"returns\":{\"_0\":\"addr The address of the contract being used as the verifier lookup table.\"}},\"getRootHistoryExpiry()\":{\"returns\":{\"_0\":\"expiryTime The amount of time it takes for a root to expire.\"}},\"getSemaphoreVerifierAddress()\":{\"returns\":{\"_0\":\"addr The address of the contract being used as the verifier.\"}},\"getTreeDepth()\":{\"returns\":{\"_0\":\"initializedTreeDepth Tree depth.\"}},\"identityOperator()\":{\"returns\":{\"_0\":\"_ The address authorized to perform identity operations.\"}},\"initialize(uint8,uint256,address,address,address)\":{\"custom:reverts\":\"string If called more than once at the same initialisation number.UnsupportedTreeDepth If passed tree depth is not among defined values.InvalidVerifierLUT if `_batchInsertionVerifiers` or `_batchUpdateVerifiers` is set to the zero addressInvalidVerifier if `_semaphoreVerifier` is set to the zero address\",\"details\":\"Must be called exactly once.This is marked `reinitializer()` to allow for updated initialisation steps when working with upgrades based upon this contract. Be aware that there are only 256 (zero-indexed) initialisations allowed, so decide carefully when to use them. Many cases can safely be replaced by use of setters.This function is explicitly not virtual as it does not make sense to override even when upgrading. Create a separate initializer function instead.\",\"params\":{\"_batchInsertionVerifiers\":\"The verifier lookup table for batch insertions.\",\"_batchUpdateVerifiers\":\"The verifier lookup table for batch updates.\",\"_semaphoreVerifier\":\"The verifier to use for semaphore protocol proofs.\",\"_treeDepth\":\"The depth of the MerkeTree\",\"initialRoot\":\"The initial value for the `latestRoot` in the contract. When deploying this should be set to the root of the empty tree.\"}},\"initializeV2(address)\":{\"custom:reverts\":\"InvalidVerifierLUT if `_batchDeletionVerifiers` is set to the zero address\",\"details\":\"Must be called exactly onceThis is marked `reinitializer()` to allow for updated initialisation steps when working with upgrades based upon this contract. Be aware that there are only 256 (zero-indexed) initialisations allowed, so decide carefully when to use them. Many cases can safely be replaced by use of setters.This function is explicitly not virtual as it does not make sense to override even when upgrading. Create a separate initializer function instead.\",\"params\":{\"_batchDeletionVerifiers\":\"The table of verifiers for verifying batch identity deletions.\"}},\"latestRoot()\":{\"returns\":{\"_0\":\"root The value of the latest tree root.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"queryRoot(uint256)\":{\"details\":\"Should be used sparingly as the query can be quite expensive.\",\"params\":{\"root\":\"The root for which you are querying information.\"},\"returns\":{\"_0\":\"rootInfo The information about `root`, or `NO_SUCH_ROOT` if `root` does not exist. Note that if the queried root is the current, the timestamp will be invalid as the root has not been superseded.\"}},\"registerIdentities(uint256[8],uint256,uint32,uint256[],uint256)\":{\"custom:reverts\":\"Unauthorized If the message sender is not authorised to add identities.NotLatestRoot If the provided `preRoot` is not the latest root.ProofValidationFailure If `insertionProof` cannot be verified using the provided inputs.VerifierLookupTable.NoSuchVerifier If the batch sizes doesn't match a known verifier.\",\"params\":{\"identityCommitments\":\"The identities that were inserted into the tree starting at `startIndex` and `preRoot` to give `postRoot`. All of the commitments must be elements of the field `Kr`.\",\"postRoot\":\"The root obtained after inserting all of `identityCommitments` into the tree described by `preRoot`. Must be an element of the field `Kr`. (alread in reduced form)\",\"startIndex\":\"The position in the tree at which the insertions were made.\"}},\"renounceOwnership()\":{\"details\":\"This function is intentionally not `virtual` as we do not want it to be possible to renounce ownership for any WorldID implementation.This function is marked as `onlyOwner` to maintain the access restriction from the base contract.\"},\"requireValidRoot(uint256)\":{\"custom:reverts\":\"ExpiredRoot If the provided `root` has expired.NonExistentRoot If the provided `root` does not exist in the history.\",\"details\":\"A root is valid if it is either the latest root, or not the latest root but has not expired.\",\"params\":{\"root\":\"The root of the merkle tree to check for validity.\"}},\"setDeleteIdentitiesVerifierLookupTable(address)\":{\"custom:reverts\":\"InvalidVerifierLUT if `newTable` is set to the zero address\",\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newTable\":\"The new verifier lookup table to be used for verifying identity deletions.\"}},\"setIdentityOperator(address)\":{\"params\":{\"newIdentityOperator\":\"The address of the new identity operator.\"},\"returns\":{\"_0\":\"_ The address of the old identity operator.\"}},\"setRegisterIdentitiesVerifierLookupTable(address)\":{\"custom:reverts\":\"InvalidVerifierLUT if `newTable` is set to the zero address\",\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newTable\":\"The new verifier lookup table to be used for verifying identity registrations.\"}},\"setRootHistoryExpiry(uint256)\":{\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newExpiryTime\":\"The new time to use to expire roots.\"}},\"setSemaphoreVerifier(address)\":{\"custom:reverts\":\"InvalidVerifier if `newVerifier` is set to the zero address\",\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newVerifier\":\"The new verifier instance to be used for verifying semaphore proofs.\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"verifyProof(uint256,uint256,uint256,uint256,uint256[8])\":{\"custom:reverts\":\"string If the zero-knowledge proof cannot be verified for the public inputs.\",\"details\":\"Note that a double-signaling check is not included here, and should be carried by the caller.\",\"params\":{\"externalNullifierHash\":\"A keccak256 hash of the external nullifier\",\"nullifierHash\":\"The nullifier hash\",\"proof\":\"The zero-knowledge proof\",\"root\":\"The of the Merkle tree\",\"signalHash\":\"A keccak256 hash of the Semaphore signal\"}}},\"title\":\"WorldID Identity Manager Implementation Version 2\",\"version\":1},\"userdoc\":{\"errors\":{\"CannotRenounceOwnership()\":[{\"notice\":\"Thrown when an attempt is made to renounce ownership.\"}],\"ExpiredRoot()\":[{\"notice\":\"Thrown when attempting to validate a root that has expired.\"}],\"ImplementationNotInitialized()\":[{\"notice\":\"Thrown when attempting to call a function while the implementation has not been initialized.\"}],\"InvalidCommitment(uint256)\":[{\"notice\":\"Thrown when one or more of the identity commitments to be inserted is invalid.\"}],\"InvalidDeletionIndices()\":[{\"notice\":\"Thrown when the bytes calldata packedDeletionIndices array is not a multiple of 4 (to make up 32 bit indices)\"}],\"InvalidStateBridgeAddress()\":[{\"notice\":\"Thrown when attempting to set the state bridge address to the zero address.\"}],\"InvalidVerifier()\":[{\"notice\":\"Thrown when a verifier is initialized to be the zero address\"}],\"InvalidVerifierLUT()\":[{\"notice\":\"Thrown when a verifier lookup table is initialized to be the zero address\"}],\"MismatchedInputLengths()\":[{\"notice\":\"Thrown when the inputs to `removeIdentities` do not match in length.\"}],\"NonExistentRoot()\":[{\"notice\":\"Thrown when attempting to validate a root that has yet to be added to the root history.\"}],\"NotLatestRoot(uint256,uint256)\":[{\"notice\":\"Thrown when the provided root is not the very latest root.\"}],\"ProofValidationFailure()\":[{\"notice\":\"Thrown when the provided proof cannot be verified for the accompanying inputs.\"}],\"StateBridgeAlreadyDisabled()\":[{\"notice\":\"Thrown when attempting to disable the bridge when it is already disabled.\"}],\"StateBridgeAlreadyEnabled()\":[{\"notice\":\"Thrown when attempting to enable the bridge when it is already enabled.\"}],\"Unauthorized(address)\":[{\"notice\":\"Thrown when trying to execute a privileged action without being the contract manager.\"}],\"UnreducedElement(uint8,uint256)\":[{\"notice\":\"Thrown when encountering an element that should be reduced as a member of `Fr` but is not.\"}],\"UnsupportedTreeDepth(uint8)\":[{\"notice\":\"Thrown when Semaphore tree depth is not supported.\"}]},\"events\":{\"DependencyUpdated(uint8,address,address)\":{\"notice\":\"Emitted when a dependency's address is updated via an admin action.\"},\"IdentityOperatorChanged(address,address)\":{\"notice\":\"Emitted when the identity operator is changed.\"},\"RootHistoryExpirySet(uint256,uint256)\":{\"notice\":\"Emitted when the root history expiry time is changed.\"},\"StateBridgeStateChange(bool)\":{\"notice\":\"Emitted when the state bridge is enabled or disabled.\"},\"TreeChanged(uint256,uint8,uint256)\":{\"notice\":\"Emitted when the current root of the tree is updated.\"},\"WorldIDIdentityManagerImplV2Initialized()\":{\"notice\":\"Thrown when the WorldIDIdentityManagerImplV2 contract is initalized\"}},\"kind\":\"user\",\"methods\":{\"NO_SUCH_ROOT()\":{\"notice\":\"A constant representing a root that doesn't exist.\"},\"calculateIdentityDeletionInputHash(bytes,uint256,uint256,uint32)\":{\"notice\":\"Calculates the input hash for the identity deletion verifier.\"},\"calculateIdentityRegistrationInputHash(uint32,uint256,uint256,uint256[])\":{\"notice\":\"Calculates the input hash for the identity registration verifier.\"},\"getDeleteIdentitiesVerifierLookupTableAddress()\":{\"notice\":\"Gets the address for the lookup table of merkle tree verifiers used for batch identity deletions.\"},\"getRegisterIdentitiesVerifierLookupTableAddress()\":{\"notice\":\"Gets the address for the lookup table of merkle tree verifiers used for identity registrations.\"},\"getRootHistoryExpiry()\":{\"notice\":\"Gets the current amount of time used to expire roots in the history.\"},\"getSemaphoreVerifierAddress()\":{\"notice\":\"Gets the address of the verifier used for verification of semaphore proofs.\"},\"getTreeDepth()\":{\"notice\":\"Gets the Semaphore tree depth the contract was initialized with.\"},\"identityOperator()\":{\"notice\":\"Gets the address that is authorised to perform identity operations on this identity manager instance.\"},\"initialize(uint8,uint256,address,address,address)\":{\"notice\":\"Initializes the contract.\"},\"initializeV2(address)\":{\"notice\":\"Initializes the V2 implementation contract.\"},\"latestRoot()\":{\"notice\":\"Allows a caller to query the latest root.\"},\"queryRoot(uint256)\":{\"notice\":\"Allows a caller to query the root history for information about a given root.\"},\"renounceOwnership()\":{\"notice\":\"Ensures that ownership of WorldID implementations cannot be renounced.\"},\"requireValidRoot(uint256)\":{\"notice\":\"Reverts if the provided root value is not valid.\"},\"setDeleteIdentitiesVerifierLookupTable(address)\":{\"notice\":\"Sets the address for the lookup table of merkle tree verifiers used for identity deletions.\"},\"setIdentityOperator(address)\":{\"notice\":\"Sets the address that is authorised to perform identity operations on this identity manager instance.\"},\"setRegisterIdentitiesVerifierLookupTable(address)\":{\"notice\":\"Sets the address for the lookup table of merkle tree verifiers used for identity registrations.\"},\"setRootHistoryExpiry(uint256)\":{\"notice\":\"Sets the time to wait before expiring a root from the root history.\"},\"setSemaphoreVerifier(address)\":{\"notice\":\"Sets the address for the semaphore verifier to be used for verification of semaphore proofs.\"},\"verifyProof(uint256,uint256,uint256,uint256,uint256[8])\":{\"notice\":\"A verifier for the semaphore protocol.\"}},\"notice\":\"An implementation of a batch-based identity manager for the WorldID protocol.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WorldIDIdentityManagerImplV2.sol\":\"WorldIDIdentityManagerImplV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@zk-kit/=lib/zk-kit/packages/\",\":contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":ds-test/=lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":semaphore/=lib/semaphore/packages/contracts/contracts/\",\":solmate/=lib/solmate/src/\",\":zk-kit/=lib/zk-kit/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0xd712fb45b3ea0ab49679164e3895037adc26ce12879d5184feb040e01c1c07a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79ecc0838b0649460c0a538a4adb55b2b530e726c5526afc5e09c8eea4f3af13\",\"dweb:/ipfs/QmUxugyGDGGeLzDFi8QDH2vQMtCFaheiujWv58SuGVx4bZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol\":{\"keccak256\":\"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053\",\"dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol\":{\"keccak256\":\"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2\",\"dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol\":{\"keccak256\":\"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1\",\"dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a313cf42389440e2706837c91370323b85971c06afd6d056d21e2bc86459618\",\"dweb:/ipfs/QmT8XUrUvQ9aZaPKrqgRU2JVGWnaxBcUYJA7Q7K5KcLBSZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x7967d130887c4b40666cd88f8744691d4527039a1b2a38aa0de41481ef646778\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40e60cbf0e2efede4d9c169e66336a64615af7b719a896ef1f37ae8cd4614ec1\",\"dweb:/ipfs/QmYNiwY22ifhfa8yK6mLCEKfj39caYUHLqe2VBtzDnvdsV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol\":{\"keccak256\":\"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3\",\"dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0x923b9774b81c1abfb992262ae7763b6e6de77b077a7180d53c6ebb7b1c8bd648\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53445dc0431f9b45c06f567c6091da961d4087bec0010cca5bd62100fa624a38\",\"dweb:/ipfs/QmNvBYpBv183czrAqNXr76E8M3LF93ouAJFeAcHfb59Rcx\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x7cdab82b437a17902683a413c86d14f512674a0710007bf44c584a2d2d3ca833\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ffe4db7a9f3cdd5a5d019462c2859f4f98f7aae08704afdcb3ef0d08d966bbeb\",\"dweb:/ipfs/QmTCHSuoi22dAu55qv4TcENyTmv5mTpAoxmYWD8cRnEp3M\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"src/WorldIDIdentityManagerImplV1.sol\":{\"keccak256\":\"0x75e9235f2cda58708d4a8b00c101fa7da4ae1627435569a933ca6cc0d4a0783e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67a1a9a738074036270f02e42fcc4548413e3c821da3f59bc8b42ad0e49e4dcc\",\"dweb:/ipfs/QmcCroTkesx2yMbmCFJ7NiNL8xY4zqLStQzSETetCGVsCK\"]},\"src/WorldIDIdentityManagerImplV2.sol\":{\"keccak256\":\"0x473d13831a459d27dacb6547d8cc7efe806743b6dadcc6ee16261fab3115d8a5\",\"urls\":[\"bzz-raw://eb85eaa5eac5005d7eaf304d75253df79b8e9bff5433b0052dc45252f69436c9\",\"dweb:/ipfs/QmW24krKMLtY3rKCbKtTvVk2gzw7GzTWvDDKGvd878SH77\"]},\"src/abstract/WorldIDImpl.sol\":{\"keccak256\":\"0xccfff2c5d7af4e505ed13b7d46011d5544317343ea92e7beb874e4d69358e6d0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://428860598ca38e42e29892a0b4759c4d3010378f54c3b3e4392f965ff091076e\",\"dweb:/ipfs/QmYPjcDRTr1UEeSbS7ssdGjbDHzAqjRNKBsYJqKJWeL8bZ\"]},\"src/data/VerifierLookupTable.sol\":{\"keccak256\":\"0xfd213b79aaec8d205c50ab3ed5c4ebed06ae602ed526a820340adc1c76745fbc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6af992a56a7cee8124af7f16d74dc8a2a7ae5f8b3059b92d46862e44c3804b83\",\"dweb:/ipfs/QmV9bQtJ9PjnwsiiZMUGJANB3znSxJ6ACTqWv9WkQeoeB3\"]},\"src/interfaces/IBaseWorldID.sol\":{\"keccak256\":\"0xcec58605726864d72e35d62c85e002acc98d3f8fa19d01b49fff461c2767c144\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://57714fcbceb0497f3fe8906778a837082939489fbb0bd930d015ad6e971913d5\",\"dweb:/ipfs/QmQVVmLr9CEkR727ByMF96a8MbwAeB4AQQWvxneg2Avkq8\"]},\"src/interfaces/IBridge.sol\":{\"keccak256\":\"0x0931c789450d21479da5d4de8c6435fca965660f6e1bd746fff958f4c20cf2ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c564b4d4a15e8075555077a043d773bb20133548376402ff3dbc0eccb57435d\",\"dweb:/ipfs/QmXQRihAFdtfyjTNeHmx9nmNHiS1wy2658Y5aXCXo2tKSQ\"]},\"src/interfaces/ISemaphoreVerifier.sol\":{\"keccak256\":\"0xc18d214e10a4debdc5d7e0f9bfb920211debf93f99524438ced0fae03854f787\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59414e42fadace7b853ed04842d4e7b6597fb3168fda03e771c2cacd7e04720b\",\"dweb:/ipfs/QmcjV2prwiyHBaUrwpqL7f6CZBpJqscZspaDKzUnDGcaUa\"]},\"src/interfaces/ITreeVerifier.sol\":{\"keccak256\":\"0x0f4c39de6e476791f28510b61c3fb781468d1ecfd88ab15c1bdcb730e90fbd4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4facca90510d2efbb44a3ddeace04da1d5396b914b9e5d93f55d5253605c20a4\",\"dweb:/ipfs/QmSg8fYNFXLUse5xmBaayeTsk7QuuHaVLuXmJXZ4E3Mvuw\"]},\"src/interfaces/IWorldID.sol\":{\"keccak256\":\"0x577908eff2d29d96354a06ab2602ffe6b97aa9d491330efcc2fcd0a88a8acbb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa0a36a598a851b88cff364b4211dc32081f51940aa8076d9c9b7de8ab126b2f\",\"dweb:/ipfs/QmSne8aRiE8C8RuwEUSk4doETKAGaavrEYyUkwiJc5H8qc\"]},\"src/utils/CheckInitialized.sol\":{\"keccak256\":\"0xfab096b633efd580548007e97920f6088e6d8a5287db84b9aa3d595c02fefcf4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dee612c9dbad59d535e7a72b79191187fd91c06af9cb5b6f68d60274d0ee2c04\",\"dweb:/ipfs/QmVJbSQ8DAN6igasbgHjZTM4NRZ3EjrhK8wFcvUG1wPYtZ\"]},\"src/utils/SemaphoreTreeDepthValidator.sol\":{\"keccak256\":\"0x50140161de381aa963457cfd2ee8831a435bd79040f38794e6ef07365c49c872\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bcc5b8a3a6f5146aa3fdee550c3e80d828b55df63223485da3d5655a591ad661\",\"dweb:/ipfs/QmWfUzbeFoSaPV1E8QxagUnpt5zfmPXgiropUg1GcV6oZs\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CannotRenounceOwnership\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpiredRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImplementationNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"InvalidCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDeletionIndices\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStateBridgeAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVerifier\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidVerifierLUT\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MismatchedInputLengths\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"providedRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"latestRoot\",\"type\":\"uint256\"}],\"name\":\"NotLatestRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProofValidationFailure\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StateBridgeAlreadyDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StateBridgeAlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enum WorldIDIdentityManagerImplV1.UnreducedElementType\",\"name\":\"elementType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"element\",\"type\":\"uint256\"}],\"name\":\"UnreducedElement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"depth\",\"type\":\"uint8\"}],\"name\":\"UnsupportedTreeDepth\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum WorldIDIdentityManagerImplV1.Dependency\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"DependencyUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldOperator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOperator\",\"type\":\"address\"}],\"name\":\"IdentityOperatorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"oldExpiryTime\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"}],\"name\":\"RootHistoryExpirySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"name\":\"StateBridgeStateChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enum WorldIDIdentityManagerImplV1.TreeChange\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"}],\"name\":\"TreeChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_treeDepth\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"initialRoot\",\"type\":\"uint256\"}],\"name\":\"WorldIDIdentityManagerImplInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"WorldIDIdentityManagerImplV2Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"NO_SUCH_ROOT\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"supersededTimestamp\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct WorldIDIdentityManagerImplV1.RootInfo\",\"name\":\"rootInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packedDeletionIndices\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"batchSize\",\"type\":\"uint32\"}],\"name\":\"calculateIdentityDeletionInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"startIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"identityCommitments\",\"type\":\"uint256[]\"}],\"name\":\"calculateIdentityRegistrationInputHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[8]\",\"name\":\"deletionProof\",\"type\":\"uint256[8]\"},{\"internalType\":\"bytes\",\"name\":\"packedDeletionIndices\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"}],\"name\":\"deleteIdentities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDeleteIdentitiesVerifierLookupTableAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRegisterIdentitiesVerifierLookupTableAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRootHistoryExpiry\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSemaphoreVerifierAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTreeDepth\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_treeDepth\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"initialRoot\",\"type\":\"uint256\"},{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"_batchInsertionVerifiers\",\"type\":\"address\"},{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"_batchUpdateVerifiers\",\"type\":\"address\"},{\"internalType\":\"contract ISemaphoreVerifier\",\"name\":\"_semaphoreVerifier\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"_batchDeletionVerifiers\",\"type\":\"address\"}],\"name\":\"initializeV2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"}],\"name\":\"queryRoot\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"},{\"internalType\":\"uint128\",\"name\":\"supersededTimestamp\",\"type\":\"uint128\"},{\"internalType\":\"bool\",\"name\":\"isValid\",\"type\":\"bool\"}],\"internalType\":\"struct WorldIDIdentityManagerImplV1.RootInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[8]\",\"name\":\"insertionProof\",\"type\":\"uint256[8]\"},{\"internalType\":\"uint256\",\"name\":\"preRoot\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"startIndex\",\"type\":\"uint32\"},{\"internalType\":\"uint256[]\",\"name\":\"identityCommitments\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"postRoot\",\"type\":\"uint256\"}],\"name\":\"registerIdentities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"}],\"name\":\"requireValidRoot\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"newTable\",\"type\":\"address\"}],\"name\":\"setDeleteIdentitiesVerifierLookupTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newIdentityOperator\",\"type\":\"address\"}],\"name\":\"setIdentityOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract VerifierLookupTable\",\"name\":\"newTable\",\"type\":\"address\"}],\"name\":\"setRegisterIdentitiesVerifierLookupTable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newExpiryTime\",\"type\":\"uint256\"}],\"name\":\"setRootHistoryExpiry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ISemaphoreVerifier\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"setSemaphoreVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"root\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signalHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nullifierHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"externalNullifierHash\",\"type\":\"uint256\"},{\"internalType\":\"uint256[8]\",\"name\":\"proof\",\"type\":\"uint256[8]\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Worldcoin\",\"details\":\"The manager is based on the principle of verifying externally-created Zero Knowledge Proofs to perform the deletions.This is the implementation delegated to by a proxy.\",\"errors\":{\"InvalidCommitment(uint256)\":[{\"details\":\"This error is no longer in use as we now verify the commitments off-chain within the circuit no need to check for reduced elements or invalid commitments.preserved for ABI backwards compatibility with V1, no longer used, all elements are validated by the circuit\",\"params\":{\"index\":\"The index in the array of identity commitments where the invalid commitment was found.\"}}],\"InvalidStateBridgeAddress()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"MismatchedInputLengths()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"NotLatestRoot(uint256,uint256)\":[{\"params\":{\"latestRoot\":\"The actual latest root at the time of the transaction.\",\"providedRoot\":\"The root that was provided as the `preRoot` for a transaction.\"}}],\"StateBridgeAlreadyDisabled()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"StateBridgeAlreadyEnabled()\":[{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\"}],\"Unauthorized(address)\":[{\"params\":{\"user\":\"The user that attempted the action that they were not authorised for.\"}}],\"UnreducedElement(uint8,uint256)\":[{\"details\":\"`r` in this case is given by `SNARK_SCALAR_FIELD`.preserved for ABI backwards compatibility with V1, no longer used, all elements come out reduced from the circuit\",\"params\":{\"element\":\"The value of that element.\",\"elementType\":\"The kind of element that was encountered unreduced.\"}}],\"UnsupportedTreeDepth(uint8)\":[{\"params\":{\"depth\":\"Passed tree depth.\"}}]},\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"DependencyUpdated(uint8,address,address)\":{\"params\":{\"kind\":\"The kind of dependency that was updated.\",\"newAddress\":\"The new address of that dependency.\",\"oldAddress\":\"The old address of that dependency.\"}},\"IdentityOperatorChanged(address,address)\":{\"params\":{\"newOperator\":\"The address of the new identity operator.\",\"oldOperator\":\"The address of the old identity operator.\"}},\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RootHistoryExpirySet(uint256,uint256)\":{\"params\":{\"newExpiryTime\":\"The expiry time after the change.\",\"oldExpiryTime\":\"The expiry time prior to the change.\"}},\"StateBridgeStateChange(bool)\":{\"details\":\"preserved for ABI backwards compatibility with V1, no longer used\",\"params\":{\"isEnabled\":\"Set to `true` if the event comes from the state bridge being enabled, `false` otherwise.\"}},\"TreeChanged(uint256,uint8,uint256)\":{\"params\":{\"kind\":\"Either \\\"insertion\\\" or \\\"update\\\", the kind of alteration that was made to the tree.\",\"postRoot\":\"The value of the tree's root after the update.\",\"preRoot\":\"The value of the tree's root before the update.\"}},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"},\"WorldIDIdentityManagerImplInitialized(uint8,uint256)\":{\"params\":{\"_treeDepth\":\"The depth of the MerkeTree\",\"initialRoot\":\"The initial value for the `latestRoot` in the contract. When deploying this should be set to the root of the empty tree.\"}}},\"kind\":\"dev\",\"methods\":{\"NO_SUCH_ROOT()\":{\"details\":\"Can be checked against when querying for root data.\"},\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"calculateIdentityDeletionInputHash(bytes,uint256,uint256,uint32)\":{\"details\":\"Implements the computation described below.the deletion indices are packed into bytes calldata where each deletion index is 32 bits wide. The indices are encoded using abi.encodePacked for testing. We keccak hash all input to save verification gas. Inputs for the hash are arranged as follows: packedDeletionIndices || PreRoot || PostRoot 32 bits * batchSize || 256 || 256\",\"params\":{\"batchSize\":\"The number of identities that were deleted in this batch\",\"packedDeletionIndices\":\"The indices of the identities that were deleted from the tree.\",\"postRoot\":\"The root value of the tree after these deletions were made.\",\"preRoot\":\"The root value of the tree before these deletions were made.\"},\"returns\":{\"hash\":\"The input hash calculated as described below.\"}},\"calculateIdentityRegistrationInputHash(uint32,uint256,uint256,uint256[])\":{\"details\":\"Implements the computation described below.\",\"params\":{\"identityCommitments\":\"The identities that were added to the tree to produce `postRoot`.\",\"postRoot\":\"The root value of the tree after these insertions were made.\",\"preRoot\":\"The root value of the tree before these insertions were made.\",\"startIndex\":\"The index in the tree from which inserting started.\"},\"returns\":{\"hash\":\"The input hash calculated as described below. We keccak hash all input to save verification gas. Inputs are arranged as follows: StartIndex || PreRoot || PostRoot || IdComms[0] || IdComms[1] || ... || IdComms[batchSize-1] 32\\t || 256 || 256 || 256 || 256 || ... || 256 bits\"}},\"deleteIdentities(uint256[8],bytes,uint256,uint256)\":{\"custom:reverts\":\"Unauthorized If the message sender is not authorised to add identities.NotLatestRoot If the provided `preRoot` is not the latest root.ProofValidationFailure If `deletionProof` cannot be verified using the provided inputs.VerifierLookupTable.NoSuchVerifier If the batch sizes doesn't match a known verifier.InvalidDeletionIndices if the length of `packedDeletionIndices` is not a multiple of 4 (8*4 = 32 bits per index)\",\"params\":{\"postRoot\":\"The root obtained after deleting all of `identityCommitments` into the tree described by `preRoot`. Must be an element of the field `Kr`.\",\"preRoot\":\"The value for the root of the tree before the corresponding identity commitments have been deleted. Must be an element of the field `Kr`.\"}},\"getDeleteIdentitiesVerifierLookupTableAddress()\":{\"details\":\"The deletion verifier supports batch deletions of size 10, 100 and 1000 members per batch.\",\"returns\":{\"_0\":\"addr The address of the contract being used as the verifier lookup table.\"}},\"getRegisterIdentitiesVerifierLookupTableAddress()\":{\"returns\":{\"_0\":\"addr The address of the contract being used as the verifier lookup table.\"}},\"getRootHistoryExpiry()\":{\"returns\":{\"_0\":\"expiryTime The amount of time it takes for a root to expire.\"}},\"getSemaphoreVerifierAddress()\":{\"returns\":{\"_0\":\"addr The address of the contract being used as the verifier.\"}},\"getTreeDepth()\":{\"returns\":{\"_0\":\"initializedTreeDepth Tree depth.\"}},\"identityOperator()\":{\"returns\":{\"_0\":\"_ The address authorized to perform identity operations.\"}},\"initialize(uint8,uint256,address,address,address)\":{\"custom:reverts\":\"string If called more than once at the same initialisation number.UnsupportedTreeDepth If passed tree depth is not among defined values.InvalidVerifierLUT if `_batchInsertionVerifiers` or `_batchUpdateVerifiers` is set to the zero addressInvalidVerifier if `_semaphoreVerifier` is set to the zero address\",\"details\":\"Must be called exactly once.This is marked `reinitializer()` to allow for updated initialisation steps when working with upgrades based upon this contract. Be aware that there are only 256 (zero-indexed) initialisations allowed, so decide carefully when to use them. Many cases can safely be replaced by use of setters.This function is explicitly not virtual as it does not make sense to override even when upgrading. Create a separate initializer function instead.\",\"params\":{\"_batchInsertionVerifiers\":\"The verifier lookup table for batch insertions.\",\"_batchUpdateVerifiers\":\"The verifier lookup table for batch updates.\",\"_semaphoreVerifier\":\"The verifier to use for semaphore protocol proofs.\",\"_treeDepth\":\"The depth of the MerkeTree\",\"initialRoot\":\"The initial value for the `latestRoot` in the contract. When deploying this should be set to the root of the empty tree.\"}},\"initializeV2(address)\":{\"custom:reverts\":\"InvalidVerifierLUT if `_batchDeletionVerifiers` is set to the zero address\",\"details\":\"Must be called exactly onceThis is marked `reinitializer()` to allow for updated initialisation steps when working with upgrades based upon this contract. Be aware that there are only 256 (zero-indexed) initialisations allowed, so decide carefully when to use them. Many cases can safely be replaced by use of setters.This function is explicitly not virtual as it does not make sense to override even when upgrading. Create a separate initializer function instead.\",\"params\":{\"_batchDeletionVerifiers\":\"The table of verifiers for verifying batch identity deletions.\"}},\"latestRoot()\":{\"returns\":{\"_0\":\"root The value of the latest tree root.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"queryRoot(uint256)\":{\"details\":\"Should be used sparingly as the query can be quite expensive.\",\"params\":{\"root\":\"The root for which you are querying information.\"},\"returns\":{\"_0\":\"rootInfo The information about `root`, or `NO_SUCH_ROOT` if `root` does not exist. Note that if the queried root is the current, the timestamp will be invalid as the root has not been superseded.\"}},\"registerIdentities(uint256[8],uint256,uint32,uint256[],uint256)\":{\"custom:reverts\":\"Unauthorized If the message sender is not authorised to add identities.NotLatestRoot If the provided `preRoot` is not the latest root.ProofValidationFailure If `insertionProof` cannot be verified using the provided inputs.VerifierLookupTable.NoSuchVerifier If the batch sizes doesn't match a known verifier.\",\"params\":{\"identityCommitments\":\"The identities that were inserted into the tree starting at `startIndex` and `preRoot` to give `postRoot`. All of the commitments must be elements of the field `Kr`.\",\"postRoot\":\"The root obtained after inserting all of `identityCommitments` into the tree described by `preRoot`. Must be an element of the field `Kr`. (alread in reduced form)\",\"startIndex\":\"The position in the tree at which the insertions were made.\"}},\"renounceOwnership()\":{\"details\":\"This function is intentionally not `virtual` as we do not want it to be possible to renounce ownership for any WorldID implementation.This function is marked as `onlyOwner` to maintain the access restriction from the base contract.\"},\"requireValidRoot(uint256)\":{\"custom:reverts\":\"ExpiredRoot If the provided `root` has expired.NonExistentRoot If the provided `root` does not exist in the history.\",\"details\":\"A root is valid if it is either the latest root, or not the latest root but has not expired.\",\"params\":{\"root\":\"The root of the merkle tree to check for validity.\"}},\"setDeleteIdentitiesVerifierLookupTable(address)\":{\"custom:reverts\":\"InvalidVerifierLUT if `newTable` is set to the zero address\",\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newTable\":\"The new verifier lookup table to be used for verifying identity deletions.\"}},\"setIdentityOperator(address)\":{\"params\":{\"newIdentityOperator\":\"The address of the new identity operator.\"},\"returns\":{\"_0\":\"_ The address of the old identity operator.\"}},\"setRegisterIdentitiesVerifierLookupTable(address)\":{\"custom:reverts\":\"InvalidVerifierLUT if `newTable` is set to the zero address\",\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newTable\":\"The new verifier lookup table to be used for verifying identity registrations.\"}},\"setRootHistoryExpiry(uint256)\":{\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newExpiryTime\":\"The new time to use to expire roots.\"}},\"setSemaphoreVerifier(address)\":{\"custom:reverts\":\"InvalidVerifier if `newVerifier` is set to the zero address\",\"details\":\"Only the owner of the contract can call this function.\",\"params\":{\"newVerifier\":\"The new verifier instance to be used for verifying semaphore proofs.\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"},\"verifyProof(uint256,uint256,uint256,uint256,uint256[8])\":{\"custom:reverts\":\"string If the zero-knowledge proof cannot be verified for the public inputs.\",\"details\":\"Note that a double-signaling check is not included here, and should be carried by the caller.\",\"params\":{\"externalNullifierHash\":\"A keccak256 hash of the external nullifier\",\"nullifierHash\":\"The nullifier hash\",\"proof\":\"The zero-knowledge proof\",\"root\":\"The of the Merkle tree\",\"signalHash\":\"A keccak256 hash of the Semaphore signal\"}}},\"title\":\"WorldID Identity Manager Implementation Version 2\",\"version\":1},\"userdoc\":{\"errors\":{\"CannotRenounceOwnership()\":[{\"notice\":\"Thrown when an attempt is made to renounce ownership.\"}],\"ExpiredRoot()\":[{\"notice\":\"Thrown when attempting to validate a root that has expired.\"}],\"ImplementationNotInitialized()\":[{\"notice\":\"Thrown when attempting to call a function while the implementation has not been initialized.\"}],\"InvalidCommitment(uint256)\":[{\"notice\":\"Thrown when one or more of the identity commitments to be inserted is invalid.\"}],\"InvalidDeletionIndices()\":[{\"notice\":\"Thrown when the bytes calldata packedDeletionIndices array is not a multiple of 4 (to make up 32 bit indices)\"}],\"InvalidStateBridgeAddress()\":[{\"notice\":\"Thrown when attempting to set the state bridge address to the zero address.\"}],\"InvalidVerifier()\":[{\"notice\":\"Thrown when a verifier is initialized to be the zero address\"}],\"InvalidVerifierLUT()\":[{\"notice\":\"Thrown when a verifier lookup table is initialized to be the zero address\"}],\"MismatchedInputLengths()\":[{\"notice\":\"Thrown when the inputs to `removeIdentities` do not match in length.\"}],\"NonExistentRoot()\":[{\"notice\":\"Thrown when attempting to validate a root that has yet to be added to the root history.\"}],\"NotLatestRoot(uint256,uint256)\":[{\"notice\":\"Thrown when the provided root is not the very latest root.\"}],\"ProofValidationFailure()\":[{\"notice\":\"Thrown when the provided proof cannot be verified for the accompanying inputs.\"}],\"StateBridgeAlreadyDisabled()\":[{\"notice\":\"Thrown when attempting to disable the bridge when it is already disabled.\"}],\"StateBridgeAlreadyEnabled()\":[{\"notice\":\"Thrown when attempting to enable the bridge when it is already enabled.\"}],\"Unauthorized(address)\":[{\"notice\":\"Thrown when trying to execute a privileged action without being the contract manager.\"}],\"UnreducedElement(uint8,uint256)\":[{\"notice\":\"Thrown when encountering an element that should be reduced as a member of `Fr` but is not.\"}],\"UnsupportedTreeDepth(uint8)\":[{\"notice\":\"Thrown when Semaphore tree depth is not supported.\"}]},\"events\":{\"DependencyUpdated(uint8,address,address)\":{\"notice\":\"Emitted when a dependency's address is updated via an admin action.\"},\"IdentityOperatorChanged(address,address)\":{\"notice\":\"Emitted when the identity operator is changed.\"},\"RootHistoryExpirySet(uint256,uint256)\":{\"notice\":\"Emitted when the root history expiry time is changed.\"},\"StateBridgeStateChange(bool)\":{\"notice\":\"Emitted when the state bridge is enabled or disabled.\"},\"TreeChanged(uint256,uint8,uint256)\":{\"notice\":\"Emitted when the current root of the tree is updated.\"},\"WorldIDIdentityManagerImplV2Initialized()\":{\"notice\":\"Thrown when the WorldIDIdentityManagerImplV2 contract is initialized\"}},\"kind\":\"user\",\"methods\":{\"NO_SUCH_ROOT()\":{\"notice\":\"A constant representing a root that doesn't exist.\"},\"calculateIdentityDeletionInputHash(bytes,uint256,uint256,uint32)\":{\"notice\":\"Calculates the input hash for the identity deletion verifier.\"},\"calculateIdentityRegistrationInputHash(uint32,uint256,uint256,uint256[])\":{\"notice\":\"Calculates the input hash for the identity registration verifier.\"},\"getDeleteIdentitiesVerifierLookupTableAddress()\":{\"notice\":\"Gets the address for the lookup table of merkle tree verifiers used for batch identity deletions.\"},\"getRegisterIdentitiesVerifierLookupTableAddress()\":{\"notice\":\"Gets the address for the lookup table of merkle tree verifiers used for identity registrations.\"},\"getRootHistoryExpiry()\":{\"notice\":\"Gets the current amount of time used to expire roots in the history.\"},\"getSemaphoreVerifierAddress()\":{\"notice\":\"Gets the address of the verifier used for verification of semaphore proofs.\"},\"getTreeDepth()\":{\"notice\":\"Gets the Semaphore tree depth the contract was initialized with.\"},\"identityOperator()\":{\"notice\":\"Gets the address that is authorised to perform identity operations on this identity manager instance.\"},\"initialize(uint8,uint256,address,address,address)\":{\"notice\":\"Initializes the contract.\"},\"initializeV2(address)\":{\"notice\":\"Initializes the V2 implementation contract.\"},\"latestRoot()\":{\"notice\":\"Allows a caller to query the latest root.\"},\"queryRoot(uint256)\":{\"notice\":\"Allows a caller to query the root history for information about a given root.\"},\"renounceOwnership()\":{\"notice\":\"Ensures that ownership of WorldID implementations cannot be renounced.\"},\"requireValidRoot(uint256)\":{\"notice\":\"Reverts if the provided root value is not valid.\"},\"setDeleteIdentitiesVerifierLookupTable(address)\":{\"notice\":\"Sets the address for the lookup table of merkle tree verifiers used for identity deletions.\"},\"setIdentityOperator(address)\":{\"notice\":\"Sets the address that is authorised to perform identity operations on this identity manager instance.\"},\"setRegisterIdentitiesVerifierLookupTable(address)\":{\"notice\":\"Sets the address for the lookup table of merkle tree verifiers used for identity registrations.\"},\"setRootHistoryExpiry(uint256)\":{\"notice\":\"Sets the time to wait before expiring a root from the root history.\"},\"setSemaphoreVerifier(address)\":{\"notice\":\"Sets the address for the semaphore verifier to be used for verification of semaphore proofs.\"},\"verifyProof(uint256,uint256,uint256,uint256,uint256[8])\":{\"notice\":\"A verifier for the semaphore protocol.\"}},\"notice\":\"An implementation of a batch-based identity manager for the WorldID protocol.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/WorldIDIdentityManagerImplV2.sol\":\"WorldIDIdentityManagerImplV2\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@zk-kit/=lib/zk-kit/packages/\",\":contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":ds-test/=lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":semaphore/=lib/semaphore/packages/contracts/contracts/\",\":solmate/=lib/solmate/src/\",\":zk-kit/=lib/zk-kit/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0xd712fb45b3ea0ab49679164e3895037adc26ce12879d5184feb040e01c1c07a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79ecc0838b0649460c0a538a4adb55b2b530e726c5526afc5e09c8eea4f3af13\",\"dweb:/ipfs/QmUxugyGDGGeLzDFi8QDH2vQMtCFaheiujWv58SuGVx4bZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/interfaces/draft-IERC1822Upgradeable.sol\":{\"keccak256\":\"0x77c89f893e403efc6929ba842b7ccf6534d4ffe03afe31670b4a528c0ad78c0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://496bd9b3df2455d571018c09f0c6badd29713fdeb907c6aa09d8d28cb603f053\",\"dweb:/ipfs/QmXdJDyYs6WMwMh21dez2BYPxhSUaUYFMDtVNcn2cgFR79\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol\":{\"keccak256\":\"0x315887e846f1e5f8d8fa535a229d318bb9290aaa69485117f1ee8a9a6b3be823\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29dda00da6d269685b555e710e4abf1c3eb6d00c15b888a7880a2f8dd3c4fdc2\",\"dweb:/ipfs/QmSqcjtdECygtT1Gy7uEo42x8542srpgGEeKKHfcnQqXgn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/beacon/IBeaconUpgradeable.sol\":{\"keccak256\":\"0x24b86ac8c005b8c654fbf6ac34a5a4f61580d7273541e83e013e89d66fbf0908\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4dbfe1a3b3b3fb64294ce41fd2ad362e7b7012208117864f42c1a67620a6d5c1\",\"dweb:/ipfs/QmVMU5tWt7zBQMmf5cpMX8UMHV86T3kFeTxBTBjFqVWfoJ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8a313cf42389440e2706837c91370323b85971c06afd6d056d21e2bc86459618\",\"dweb:/ipfs/QmT8XUrUvQ9aZaPKrqgRU2JVGWnaxBcUYJA7Q7K5KcLBSZ\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x7967d130887c4b40666cd88f8744691d4527039a1b2a38aa0de41481ef646778\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40e60cbf0e2efede4d9c169e66336a64615af7b719a896ef1f37ae8cd4614ec1\",\"dweb:/ipfs/QmYNiwY22ifhfa8yK6mLCEKfj39caYUHLqe2VBtzDnvdsV\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/StorageSlotUpgradeable.sol\":{\"keccak256\":\"0x09864aea84f01e39313375b5610c73a3c1c68abbdc51e5ccdd25ff977fdadf9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aedb48081190fa828d243529ce25c708202c7d4ccfe99f0e4ecd6bc0cfcd03f3\",\"dweb:/ipfs/QmWyiDQHPZA56iqsAwTmiJoxvNeRQLUVr4gTfzpdpXivpo\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0x923b9774b81c1abfb992262ae7763b6e6de77b077a7180d53c6ebb7b1c8bd648\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53445dc0431f9b45c06f567c6091da961d4087bec0010cca5bd62100fa624a38\",\"dweb:/ipfs/QmNvBYpBv183czrAqNXr76E8M3LF93ouAJFeAcHfb59Rcx\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x7cdab82b437a17902683a413c86d14f512674a0710007bf44c584a2d2d3ca833\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ffe4db7a9f3cdd5a5d019462c2859f4f98f7aae08704afdcb3ef0d08d966bbeb\",\"dweb:/ipfs/QmTCHSuoi22dAu55qv4TcENyTmv5mTpAoxmYWD8cRnEp3M\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"src/WorldIDIdentityManagerImplV1.sol\":{\"keccak256\":\"0x75e9235f2cda58708d4a8b00c101fa7da4ae1627435569a933ca6cc0d4a0783e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67a1a9a738074036270f02e42fcc4548413e3c821da3f59bc8b42ad0e49e4dcc\",\"dweb:/ipfs/QmcCroTkesx2yMbmCFJ7NiNL8xY4zqLStQzSETetCGVsCK\"]},\"src/WorldIDIdentityManagerImplV2.sol\":{\"keccak256\":\"0x473d13831a459d27dacb6547d8cc7efe806743b6dadcc6ee16261fab3115d8a5\",\"urls\":[\"bzz-raw://eb85eaa5eac5005d7eaf304d75253df79b8e9bff5433b0052dc45252f69436c9\",\"dweb:/ipfs/QmW24krKMLtY3rKCbKtTvVk2gzw7GzTWvDDKGvd878SH77\"]},\"src/abstract/WorldIDImpl.sol\":{\"keccak256\":\"0xccfff2c5d7af4e505ed13b7d46011d5544317343ea92e7beb874e4d69358e6d0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://428860598ca38e42e29892a0b4759c4d3010378f54c3b3e4392f965ff091076e\",\"dweb:/ipfs/QmYPjcDRTr1UEeSbS7ssdGjbDHzAqjRNKBsYJqKJWeL8bZ\"]},\"src/data/VerifierLookupTable.sol\":{\"keccak256\":\"0xfd213b79aaec8d205c50ab3ed5c4ebed06ae602ed526a820340adc1c76745fbc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6af992a56a7cee8124af7f16d74dc8a2a7ae5f8b3059b92d46862e44c3804b83\",\"dweb:/ipfs/QmV9bQtJ9PjnwsiiZMUGJANB3znSxJ6ACTqWv9WkQeoeB3\"]},\"src/interfaces/IBaseWorldID.sol\":{\"keccak256\":\"0xcec58605726864d72e35d62c85e002acc98d3f8fa19d01b49fff461c2767c144\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://57714fcbceb0497f3fe8906778a837082939489fbb0bd930d015ad6e971913d5\",\"dweb:/ipfs/QmQVVmLr9CEkR727ByMF96a8MbwAeB4AQQWvxneg2Avkq8\"]},\"src/interfaces/IBridge.sol\":{\"keccak256\":\"0x0931c789450d21479da5d4de8c6435fca965660f6e1bd746fff958f4c20cf2ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c564b4d4a15e8075555077a043d773bb20133548376402ff3dbc0eccb57435d\",\"dweb:/ipfs/QmXQRihAFdtfyjTNeHmx9nmNHiS1wy2658Y5aXCXo2tKSQ\"]},\"src/interfaces/ISemaphoreVerifier.sol\":{\"keccak256\":\"0xc18d214e10a4debdc5d7e0f9bfb920211debf93f99524438ced0fae03854f787\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59414e42fadace7b853ed04842d4e7b6597fb3168fda03e771c2cacd7e04720b\",\"dweb:/ipfs/QmcjV2prwiyHBaUrwpqL7f6CZBpJqscZspaDKzUnDGcaUa\"]},\"src/interfaces/ITreeVerifier.sol\":{\"keccak256\":\"0x0f4c39de6e476791f28510b61c3fb781468d1ecfd88ab15c1bdcb730e90fbd4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4facca90510d2efbb44a3ddeace04da1d5396b914b9e5d93f55d5253605c20a4\",\"dweb:/ipfs/QmSg8fYNFXLUse5xmBaayeTsk7QuuHaVLuXmJXZ4E3Mvuw\"]},\"src/interfaces/IWorldID.sol\":{\"keccak256\":\"0x577908eff2d29d96354a06ab2602ffe6b97aa9d491330efcc2fcd0a88a8acbb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fa0a36a598a851b88cff364b4211dc32081f51940aa8076d9c9b7de8ab126b2f\",\"dweb:/ipfs/QmSne8aRiE8C8RuwEUSk4doETKAGaavrEYyUkwiJc5H8qc\"]},\"src/utils/CheckInitialized.sol\":{\"keccak256\":\"0xfab096b633efd580548007e97920f6088e6d8a5287db84b9aa3d595c02fefcf4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dee612c9dbad59d535e7a72b79191187fd91c06af9cb5b6f68d60274d0ee2c04\",\"dweb:/ipfs/QmVJbSQ8DAN6igasbgHjZTM4NRZ3EjrhK8wFcvUG1wPYtZ\"]},\"src/utils/SemaphoreTreeDepthValidator.sol\":{\"keccak256\":\"0x50140161de381aa963457cfd2ee8831a435bd79040f38794e6ef07365c49c872\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bcc5b8a3a6f5146aa3fdee550c3e80d828b55df63223485da3d5655a591ad661\",\"dweb:/ipfs/QmWfUzbeFoSaPV1E8QxagUnpt5zfmPXgiropUg1GcV6oZs\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.21+commit.d9974bed" @@ -2606,7 +2606,7 @@ "id": 34880, "nodeType": "StructuredDocumentation", "src": "3165:79:44", - "text": "@notice Thrown when the WorldIDIdentityManagerImplV2 contract is initalized" + "text": "@notice Thrown when the WorldIDIdentityManagerImplV2 contract is initialized" }, "eventSelector": "e416bec7423c88399c6c76ff0386950a64e454d25b846ef46c397bf835c7df7a", "name": "WorldIDIdentityManagerImplV2Initialized", @@ -5979,4 +5979,4 @@ ] }, "id": 44 -} \ No newline at end of file +} From 686591c5d7d603c52b484fb1834c0dc4f50004bb Mon Sep 17 00:00:00 2001 From: kilavvy <140459108+kilavvy@users.noreply.github.com> Date: Fri, 28 Feb 2025 12:00:48 +0100 Subject: [PATCH 2/2] Update SequencerVerifier.json --- sol/SequencerVerifier.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sol/SequencerVerifier.json b/sol/SequencerVerifier.json index 49d598d5..84c5b6de 100644 --- a/sol/SequencerVerifier.json +++ b/sol/SequencerVerifier.json @@ -32,7 +32,7 @@ "methodIdentifiers": { "verifyProof(uint256[8],uint256[1])": "1b81f829" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[8]\",\"name\":\"proof\",\"type\":\"uint256[8]\"},{\"internalType\":\"uint256[1]\",\"name\":\"input\",\"type\":\"uint256[1]\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Worldcoin\",\"kind\":\"dev\",\"methods\":{\"verifyProof(uint256[8],uint256[1])\":{\"params\":{\"input\":\"the public input field elements in the scalar field Fr. Elements must be reduced.\",\"proof\":\"the points (A, B, C) in EIP-197 format matching the output of compressProof.\"}}},\"title\":\"Sequencer Verifier\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"verifyProof(uint256[8],uint256[1])\":{\"notice\":\"Verify an uncompressed Groth16 proof.Reverts with InvalidProof if the proof is invalid or with PublicInputNotInField the public input is not reduced.There is no return value. If the function does not revert, the proof was succesfully verified.\"}},\"notice\":\"A verifier that matches the success conditions used by the mock prover service in the signup sequencer.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/test/mock/SequencerVerifier.sol\":\"SequencerVerifier\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@zk-kit/=lib/zk-kit/packages/\",\":contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":ds-test/=lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":semaphore/=lib/semaphore/packages/contracts/contracts/\",\":solmate/=lib/solmate/src/\",\":zk-kit/=lib/zk-kit/\"]},\"sources\":{\"src/interfaces/ITreeVerifier.sol\":{\"keccak256\":\"0x0f4c39de6e476791f28510b61c3fb781468d1ecfd88ab15c1bdcb730e90fbd4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4facca90510d2efbb44a3ddeace04da1d5396b914b9e5d93f55d5253605c20a4\",\"dweb:/ipfs/QmSg8fYNFXLUse5xmBaayeTsk7QuuHaVLuXmJXZ4E3Mvuw\"]},\"src/test/mock/SequencerVerifier.sol\":{\"keccak256\":\"0x71e8ade7845e87c5dd546f1e6967f8a6310c5a9c9fab555055be16cc825909b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42f3940b559b390ce9ccb59b5cdba910bee15f3d931df9bb2b6251395bfad7df\",\"dweb:/ipfs/QmdD68CshbDRCzKYtxFveHDdHHKH96sDZJVxGNoEsVJq26\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[8]\",\"name\":\"proof\",\"type\":\"uint256[8]\"},{\"internalType\":\"uint256[1]\",\"name\":\"input\",\"type\":\"uint256[1]\"}],\"name\":\"verifyProof\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Worldcoin\",\"kind\":\"dev\",\"methods\":{\"verifyProof(uint256[8],uint256[1])\":{\"params\":{\"input\":\"the public input field elements in the scalar field Fr. Elements must be reduced.\",\"proof\":\"the points (A, B, C) in EIP-197 format matching the output of compressProof.\"}}},\"title\":\"Sequencer Verifier\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"verifyProof(uint256[8],uint256[1])\":{\"notice\":\"Verify an uncompressed Groth16 proof.Reverts with InvalidProof if the proof is invalid or with PublicInputNotInField the public input is not reduced.There is no return value. If the function does not revert, the proof was successfully verified.\"}},\"notice\":\"A verifier that matches the success conditions used by the mock prover service in the signup sequencer.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/test/mock/SequencerVerifier.sol\":\"SequencerVerifier\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@zk-kit/=lib/zk-kit/packages/\",\":contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":ds-test/=lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":semaphore/=lib/semaphore/packages/contracts/contracts/\",\":solmate/=lib/solmate/src/\",\":zk-kit/=lib/zk-kit/\"]},\"sources\":{\"src/interfaces/ITreeVerifier.sol\":{\"keccak256\":\"0x0f4c39de6e476791f28510b61c3fb781468d1ecfd88ab15c1bdcb730e90fbd4f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4facca90510d2efbb44a3ddeace04da1d5396b914b9e5d93f55d5253605c20a4\",\"dweb:/ipfs/QmSg8fYNFXLUse5xmBaayeTsk7QuuHaVLuXmJXZ4E3Mvuw\"]},\"src/test/mock/SequencerVerifier.sol\":{\"keccak256\":\"0x71e8ade7845e87c5dd546f1e6967f8a6310c5a9c9fab555055be16cc825909b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://42f3940b559b390ce9ccb59b5cdba910bee15f3d931df9bb2b6251395bfad7df\",\"dweb:/ipfs/QmdD68CshbDRCzKYtxFveHDdHHKH96sDZJVxGNoEsVJq26\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.21+commit.d9974bed" @@ -74,7 +74,7 @@ "kind": "user", "methods": { "verifyProof(uint256[8],uint256[1])": { - "notice": "Verify an uncompressed Groth16 proof.Reverts with InvalidProof if the proof is invalid or with PublicInputNotInField the public input is not reduced.There is no return value. If the function does not revert, the proof was succesfully verified." + "notice": "Verify an uncompressed Groth16 proof.Reverts with InvalidProof if the proof is invalid or with PublicInputNotInField the public input is not reduced.There is no return value. If the function does not revert, the proof was successfully verified." } }, "version": 1