From 4c8ffbd17f055340f62eedac85bf43d34461ce6c Mon Sep 17 00:00:00 2001 From: Nesopie <87437291+Nesopie@users.noreply.github.com> Date: Thu, 5 Feb 2026 18:43:55 +0530 Subject: [PATCH] Feat/kyc sdk (#1709) * feat: kyc sdk * lint * bump: minor sdk version --- .../disclose/Verifier_vc_and_disclose_kyc.sol | 2 +- .../chain-11142220/deployed_addresses.json | 3 +- error-selectors.json | 800 ++++++++++++++++++ sdk/core/package.json | 2 +- sdk/core/src/SelfBackendVerifier.ts | 29 +- sdk/core/src/abi/KycVerifier.json | 36 + sdk/core/src/utils/constants.ts | 39 +- sdk/core/src/utils/id.ts | 21 +- sdk/core/src/utils/proof.ts | 4 +- 9 files changed, 901 insertions(+), 35 deletions(-) create mode 100644 error-selectors.json create mode 100644 sdk/core/src/abi/KycVerifier.json diff --git a/contracts/contracts/verifiers/disclose/Verifier_vc_and_disclose_kyc.sol b/contracts/contracts/verifiers/disclose/Verifier_vc_and_disclose_kyc.sol index cf4a82547..1fdfd2ae7 100644 --- a/contracts/contracts/verifiers/disclose/Verifier_vc_and_disclose_kyc.sol +++ b/contracts/contracts/verifiers/disclose/Verifier_vc_and_disclose_kyc.sol @@ -20,7 +20,7 @@ pragma solidity >=0.7.0 <0.9.0; -contract Groth16Verifier { +contract Verifier_vc_and_disclose_kyc { // Scalar field size uint256 constant r = 21888242871839275222246405745257275088548364400416034343698204186575808495617; // Base field size diff --git a/contracts/ignition/deployments/chain-11142220/deployed_addresses.json b/contracts/ignition/deployments/chain-11142220/deployed_addresses.json index a80ca80fe..72d748ed2 100644 --- a/contracts/ignition/deployments/chain-11142220/deployed_addresses.json +++ b/contracts/ignition/deployments/chain-11142220/deployed_addresses.json @@ -104,5 +104,6 @@ "DeployKycRegistryModule#IdentityRegistryKycImplV1": "0x94f6DE38E10140B9E3963a770B5B769b38459a3B", "DeployKycRegistryModule#IdentityRegistry": "0x90e907E4AaB6e9bcFB94997Af4A097e8CAadBdf3", "UpdateAllRegistries#PCR0Manager": "0xf2810D5E9938816D42F0Ae69D33F013a23C0aED2", - "UpdateAllRegistries#a3": "0x90e907E4AaB6e9bcFB94997Af4A097e8CAadBdf3" + "UpdateAllRegistries#a3": "0x90e907E4AaB6e9bcFB94997Af4A097e8CAadBdf3", + "DeployAllVerifiers#Verifier_vc_and_disclose_kyc": "0xAAFA189a079D04462e8ab596d9c103e081A1c810" } diff --git a/error-selectors.json b/error-selectors.json new file mode 100644 index 000000000..e7cae30e2 --- /dev/null +++ b/error-selectors.json @@ -0,0 +1,800 @@ +[ + { + "name": "REGISTERED_COMMITMENT", + "signature": "REGISTERED_COMMITMENT()", + "selector": "0x034acfcc", + "file": "contracts/contracts/registry/IdentityRegistryAadhaarImplV1.sol", + "line": 136 + }, + { + "name": "REGISTERED_COMMITMENT", + "signature": "REGISTERED_COMMITMENT()", + "selector": "0x034acfcc", + "file": "contracts/contracts/registry/IdentityRegistryIdCardImplV1.sol", + "line": 144 + }, + { + "name": "REGISTERED_COMMITMENT", + "signature": "REGISTERED_COMMITMENT()", + "selector": "0x034acfcc", + "file": "contracts/contracts/registry/IdentityRegistryImplV1.sol", + "line": 151 + }, + { + "name": "REGISTERED_COMMITMENT", + "signature": "REGISTERED_COMMITMENT()", + "selector": "0x034acfcc", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 179 + }, + { + "name": "InvalidProof", + "signature": "InvalidProof()", + "selector": "0x09bde339", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 57 + }, + { + "name": "InvalidProof", + "signature": "InvalidProof()", + "selector": "0x09bde339", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 35 + }, + { + "name": "InvalidPubSignalsLength", + "signature": "InvalidPubSignalsLength(uint256,uint256)", + "selector": "0x0b42b970", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 43 + }, + { + "name": "NoVerifierSet", + "signature": "NoVerifierSet()", + "selector": "0x0ee78d58", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 151 + }, + { + "name": "NoVerifierSet", + "signature": "NoVerifierSet()", + "selector": "0x0ee78d58", + "file": "contracts/contracts/libraries/DscProofVerifierLib.sol", + "line": 17 + }, + { + "name": "NoVerifierSet", + "signature": "NoVerifierSet()", + "selector": "0x0ee78d58", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 22 + }, + { + "name": "INVALID_TIMESTAMP", + "signature": "INVALID_TIMESTAMP()", + "selector": "0x118818d1", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 189 + }, + { + "name": "InvalidAttestationId", + "signature": "InvalidAttestationId()", + "selector": "0x12ec75fe", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 183 + }, + { + "name": "InvalidAttestationId", + "signature": "InvalidAttestationId()", + "selector": "0x12ec75fe", + "file": "contracts/contracts/libraries/CustomVerifier.sol", + "line": 10 + }, + { + "name": "InvalidAttestationId", + "signature": "InvalidAttestationId()", + "selector": "0x12ec75fe", + "file": "contracts/contracts/libraries/DscProofVerifierLib.sol", + "line": 26 + }, + { + "name": "InvalidAttestationId", + "signature": "InvalidAttestationId()", + "selector": "0x12ec75fe", + "file": "contracts/contracts/libraries/OfacCheckLib.sol", + "line": 22 + }, + { + "name": "InvalidAttestationId", + "signature": "InvalidAttestationId()", + "selector": "0x12ec75fe", + "file": "contracts/contracts/libraries/ProofVerifierLib.sol", + "line": 21 + }, + { + "name": "InvalidAttestationId", + "signature": "InvalidAttestationId()", + "selector": "0x12ec75fe", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 31 + }, + { + "name": "InvalidAttestationId", + "signature": "InvalidAttestationId()", + "selector": "0x12ec75fe", + "file": "contracts/contracts/libraries/RootCheckLib.sol", + "line": 22 + }, + { + "name": "RegistrationNotOpen", + "signature": "RegistrationNotOpen()", + "selector": "0x153745d3", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 66 + }, + { + "name": "RegistrationNotOpen", + "signature": "RegistrationNotOpen()", + "selector": "0x153745d3", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 38 + }, + { + "name": "InvalidDscProof", + "signature": "InvalidDscProof()", + "selector": "0x1644e049", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 163 + }, + { + "name": "InvalidDscProof", + "signature": "InvalidDscProof()", + "selector": "0x1644e049", + "file": "contracts/contracts/libraries/DscProofVerifierLib.sol", + "line": 20 + }, + { + "name": "InvalidYearRange", + "signature": "InvalidYearRange()", + "selector": "0x16f40c94", + "file": "contracts/contracts/libraries/Formatter.sol", + "line": 12 + }, + { + "name": "InvalidDateDigit", + "signature": "InvalidDateDigit()", + "selector": "0x17af8154", + "file": "contracts/contracts/libraries/Formatter.sol", + "line": 16 + }, + { + "name": "INVALID_OFAC_ROOT", + "signature": "INVALID_OFAC_ROOT()", + "selector": "0x1ce3d3ca", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 176 + }, + { + "name": "HUB_ADDRESS_ZERO", + "signature": "HUB_ADDRESS_ZERO()", + "selector": "0x22697ffa", + "file": "contracts/contracts/registry/IdentityRegistryAadhaarImplV1.sol", + "line": 138 + }, + { + "name": "HUB_ADDRESS_ZERO", + "signature": "HUB_ADDRESS_ZERO()", + "selector": "0x22697ffa", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 181 + }, + { + "name": "RegisteredNullifier", + "signature": "RegisteredNullifier()", + "selector": "0x22cbc6a2", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 81 + }, + { + "name": "RegisteredNullifier", + "signature": "RegisteredNullifier()", + "selector": "0x22cbc6a2", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 43 + }, + { + "name": "InvalidMonthRange", + "signature": "InvalidMonthRange()", + "selector": "0x25e62788", + "file": "contracts/contracts/libraries/Formatter.sol", + "line": 13 + }, + { + "name": "ONLY_TEE_CAN_ACCESS", + "signature": "ONLY_TEE_CAN_ACCESS()", + "selector": "0x2822d0cb", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 177 + }, + { + "name": "UserIdentifierAlreadyRegistered", + "signature": "UserIdentifierAlreadyRegistered()", + "selector": "0x29393238", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 78 + }, + { + "name": "UserIdentifierAlreadyRegistered", + "signature": "UserIdentifierAlreadyRegistered()", + "selector": "0x29393238", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 42 + }, + { + "name": "InvalidFieldElement", + "signature": "InvalidFieldElement()", + "selector": "0x3ae4ed6b", + "file": "contracts/contracts/libraries/Formatter.sol", + "line": 15 + }, + { + "name": "InvalidPubkey", + "signature": "InvalidPubkey()", + "selector": "0x422cc3b7", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 211 + }, + { + "name": "InvalidPubkey", + "signature": "InvalidPubkey()", + "selector": "0x422cc3b7", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 34 + }, + { + "name": "InvalidOlderThan", + "signature": "InvalidOlderThan()", + "selector": "0x49aecbc2", + "file": "contracts/contracts/libraries/CustomVerifier.sol", + "line": 13 + }, + { + "name": "InvalidDscCommitmentRoot", + "signature": "InvalidDscCommitmentRoot()", + "selector": "0x4cb305bb", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 175 + }, + { + "name": "InvalidDscCommitmentRoot", + "signature": "InvalidDscCommitmentRoot()", + "selector": "0x4cb305bb", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 28 + }, + { + "name": "HUB_NOT_SET", + "signature": "HUB_NOT_SET()", + "selector": "0x4ffa9998", + "file": "contracts/contracts/registry/IdentityRegistryAadhaarImplV1.sol", + "line": 132 + }, + { + "name": "HUB_NOT_SET", + "signature": "HUB_NOT_SET()", + "selector": "0x4ffa9998", + "file": "contracts/contracts/registry/IdentityRegistryIdCardImplV1.sol", + "line": 140 + }, + { + "name": "HUB_NOT_SET", + "signature": "HUB_NOT_SET()", + "selector": "0x4ffa9998", + "file": "contracts/contracts/registry/IdentityRegistryImplV1.sol", + "line": 147 + }, + { + "name": "HUB_NOT_SET", + "signature": "HUB_NOT_SET()", + "selector": "0x4ffa9998", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 171 + }, + { + "name": "INVALID_COMMITMENT_ROOT", + "signature": "INVALID_COMMITMENT_ROOT()", + "selector": "0x52906601", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 172 + }, + { + "name": "UnauthorizedCaller", + "signature": "UnauthorizedCaller()", + "selector": "0x5c427cd9", + "file": "contracts/contracts/abstract/SelfVerificationRoot.sol", + "line": 49 + }, + { + "name": "UnauthorizedCaller", + "signature": "UnauthorizedCaller()", + "selector": "0x5c427cd9", + "file": "contracts/contracts/abstract/SelfVerificationRootUpgradeable.sol", + "line": 69 + }, + { + "name": "UserIdentifierAlreadyMinted", + "signature": "UserIdentifierAlreadyMinted()", + "selector": "0x5dd09265", + "file": "contracts/contracts/example/SelfIdentityERC721.sol", + "line": 51 + }, + { + "name": "UserIdentifierAlreadyMinted", + "signature": "UserIdentifierAlreadyMinted()", + "selector": "0x5dd09265", + "file": "contracts/contracts/example/SelfPassportERC721.sol", + "line": 48 + }, + { + "name": "InvalidOfacCheck", + "signature": "InvalidOfacCheck()", + "selector": "0x5fb542f4", + "file": "contracts/contracts/libraries/CustomVerifier.sol", + "line": 11 + }, + { + "name": "CrossChainIsNotSupportedYet", + "signature": "CrossChainIsNotSupportedYet()", + "selector": "0x61296fbb", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 191 + }, + { + "name": "AlreadyClaimed", + "signature": "AlreadyClaimed()", + "selector": "0x646cf558", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 60 + }, + { + "name": "AlreadyClaimed", + "signature": "AlreadyClaimed()", + "selector": "0x646cf558", + "file": "contracts/contracts/example/HappyBirthday.sol", + "line": 67 + }, + { + "name": "AlreadyClaimed", + "signature": "AlreadyClaimed()", + "selector": "0x646cf558", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 36 + }, + { + "name": "InputTooShort", + "signature": "InputTooShort()", + "selector": "0x65ec0cf1", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 195 + }, + { + "name": "InvalidRegisterProof", + "signature": "InvalidRegisterProof()", + "selector": "0x67b61dc7", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 159 + }, + { + "name": "InvalidRegisterProof", + "signature": "InvalidRegisterProof()", + "selector": "0x67b61dc7", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 25 + }, + { + "name": "RegistrationNotClosed", + "signature": "RegistrationNotClosed()", + "selector": "0x697e379b", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 69 + }, + { + "name": "RegistrationNotClosed", + "signature": "RegistrationNotClosed()", + "selector": "0x697e379b", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 39 + }, + { + "name": "INVALID_DSC_PROOF", + "signature": "INVALID_DSC_PROOF()", + "selector": "0x6a86dd76", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 164 + }, + { + "name": "ClaimNotOpen", + "signature": "ClaimNotOpen()", + "selector": "0x6b687806", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 72 + }, + { + "name": "ClaimNotOpen", + "signature": "ClaimNotOpen()", + "selector": "0x6b687806", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 40 + }, + { + "name": "InvalidUidaiTimestamp", + "signature": "InvalidUidaiTimestamp(uint256,uint256)", + "selector": "0x6f26ab8d", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 215 + }, + { + "name": "InvalidUidaiTimestamp", + "signature": "InvalidUidaiTimestamp(uint256,uint256)", + "selector": "0x6f26ab8d", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 37 + }, + { + "name": "INVALID_PROOF", + "signature": "INVALID_PROOF()", + "selector": "0x712eb087", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 183 + }, + { + "name": "INVALID_OFAC", + "signature": "INVALID_OFAC()", + "selector": "0x71b125ed", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 156 + }, + { + "name": "INVALID_IMAGE", + "signature": "INVALID_IMAGE()", + "selector": "0x7f91b413", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 187 + }, + { + "name": "InvalidForbiddenCountries", + "signature": "InvalidForbiddenCountries()", + "selector": "0x82cba848", + "file": "contracts/contracts/libraries/CustomVerifier.sol", + "line": 12 + }, + { + "name": "InsufficientCharcodeLen", + "signature": "InsufficientCharcodeLen()", + "selector": "0x86d41225", + "file": "contracts/contracts/libraries/CircuitAttributeHandler.sol", + "line": 15 + }, + { + "name": "InsufficientCharcodeLen", + "signature": "InsufficientCharcodeLen()", + "selector": "0x86d41225", + "file": "contracts/contracts/libraries/CircuitAttributeHandlerV2.sol", + "line": 17 + }, + { + "name": "InsufficientCharcodeLen", + "signature": "InsufficientCharcodeLen()", + "selector": "0x86d41225", + "file": "contracts/contracts/libraries/IdCardAttributeHandler.sol", + "line": 16 + }, + { + "name": "InvalidDayRange", + "signature": "InvalidDayRange()", + "selector": "0x8930acef", + "file": "contracts/contracts/libraries/Formatter.sol", + "line": 14 + }, + { + "name": "LENGTH_MISMATCH", + "signature": "LENGTH_MISMATCH()", + "selector": "0x899ef10d", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 136 + }, + { + "name": "NO_VERIFIER_SET", + "signature": "NO_VERIFIER_SET()", + "selector": "0x8e727f46", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 140 + }, + { + "name": "InvalidCscaRoot", + "signature": "InvalidCscaRoot()", + "selector": "0x8f1b44c7", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 179 + }, + { + "name": "InvalidCscaRoot", + "signature": "InvalidCscaRoot()", + "selector": "0x8f1b44c7", + "file": "contracts/contracts/libraries/DscProofVerifierLib.sol", + "line": 23 + }, + { + "name": "INVALID_REGISTER_PROOF", + "signature": "INVALID_REGISTER_PROOF()", + "selector": "0x9003ac4d", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 160 + }, + { + "name": "UserContextDataTooShort", + "signature": "UserContextDataTooShort()", + "selector": "0x94ec3503", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 199 + }, + { + "name": "NotWithinBirthdayWindow", + "signature": "NotWithinBirthdayWindow()", + "selector": "0x9b7983d7", + "file": "contracts/contracts/example/HappyBirthday.sol", + "line": 66 + }, + { + "name": "INVALID_CSCA_ROOT", + "signature": "INVALID_CSCA_ROOT()", + "selector": "0xa294ad3c", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 180 + }, + { + "name": "InvalidDataFormat", + "signature": "InvalidDataFormat()", + "selector": "0xa512e2ff", + "file": "contracts/contracts/abstract/SelfVerificationRoot.sol", + "line": 45 + }, + { + "name": "InvalidDataFormat", + "signature": "InvalidDataFormat()", + "selector": "0xa512e2ff", + "file": "contracts/contracts/abstract/SelfVerificationRootUpgradeable.sol", + "line": 65 + }, + { + "name": "ConfigNotSet", + "signature": "ConfigNotSet()", + "selector": "0xace124bc", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 207 + }, + { + "name": "InvalidDateLength", + "signature": "InvalidDateLength()", + "selector": "0xb3375953", + "file": "contracts/contracts/libraries/Formatter.sol", + "line": 11 + }, + { + "name": "ONLY_HUB_CAN_ACCESS", + "signature": "ONLY_HUB_CAN_ACCESS()", + "selector": "0xba0318cb", + "file": "contracts/contracts/registry/IdentityRegistryAadhaarImplV1.sol", + "line": 134 + }, + { + "name": "ONLY_HUB_CAN_ACCESS", + "signature": "ONLY_HUB_CAN_ACCESS()", + "selector": "0xba0318cb", + "file": "contracts/contracts/registry/IdentityRegistryIdCardImplV1.sol", + "line": 142 + }, + { + "name": "ONLY_HUB_CAN_ACCESS", + "signature": "ONLY_HUB_CAN_ACCESS()", + "selector": "0xba0318cb", + "file": "contracts/contracts/registry/IdentityRegistryImplV1.sol", + "line": 149 + }, + { + "name": "ONLY_HUB_CAN_ACCESS", + "signature": "ONLY_HUB_CAN_ACCESS()", + "selector": "0xba0318cb", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 173 + }, + { + "name": "INVALID_FORBIDDEN_COUNTRIES", + "signature": "INVALID_FORBIDDEN_COUNTRIES()", + "selector": "0xbf21b11c", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 152 + }, + { + "name": "NotRegistered", + "signature": "NotRegistered(address)", + "selector": "0xbfc6c337", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 63 + }, + { + "name": "NotRegistered", + "signature": "NotRegistered(address)", + "selector": "0xbfc6c337", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 37 + }, + { + "name": "InvalidOfacRoots", + "signature": "InvalidOfacRoots()", + "selector": "0xc67a44d2", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 223 + }, + { + "name": "InvalidOfacRoots", + "signature": "InvalidOfacRoots()", + "selector": "0xc67a44d2", + "file": "contracts/contracts/libraries/OfacCheckLib.sol", + "line": 19 + }, + { + "name": "CurrentDateNotInValidRange", + "signature": "CurrentDateNotInValidRange()", + "selector": "0xcf46551c", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 155 + }, + { + "name": "INVALID_VC_AND_DISCLOSE_PROOF", + "signature": "INVALID_VC_AND_DISCLOSE_PROOF()", + "selector": "0xd4d37a7a", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 168 + }, + { + "name": "AttestationIdMismatch", + "signature": "AttestationIdMismatch()", + "selector": "0xd7ca437d", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 219 + }, + { + "name": "InvalidVcAndDiscloseProof", + "signature": "InvalidVcAndDiscloseProof()", + "selector": "0xda7bd3a6", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 167 + }, + { + "name": "InvalidVcAndDiscloseProof", + "signature": "InvalidVcAndDiscloseProof()", + "selector": "0xda7bd3a6", + "file": "contracts/contracts/libraries/ProofVerifierLib.sol", + "line": 18 + }, + { + "name": "RegistryNotSet", + "signature": "RegistryNotSet()", + "selector": "0xe048e710", + "file": "contracts/contracts/libraries/RootCheckLib.sol", + "line": 25 + }, + { + "name": "INVALID_REVEALED_DATA_TYPE", + "signature": "INVALID_REVEALED_DATA_TYPE()", + "selector": "0xe0f15544", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 184 + }, + { + "name": "ScopeMismatch", + "signature": "ScopeMismatch()", + "selector": "0xe7bee380", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 187 + }, + { + "name": "InvalidUserIdentifierInProof", + "signature": "InvalidUserIdentifierInProof()", + "selector": "0xebbcc178", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 203 + }, + { + "name": "InvalidPubkeyCommitment", + "signature": "InvalidPubkeyCommitment()", + "selector": "0xebc2fedc", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 227 + }, + { + "name": "InvalidPubkeyCommitment", + "signature": "InvalidPubkeyCommitment()", + "selector": "0xebc2fedc", + "file": "contracts/contracts/libraries/RegisterProofVerifierLib.sol", + "line": 40 + }, + { + "name": "CURRENT_DATE_NOT_IN_VALID_RANGE", + "signature": "CURRENT_DATE_NOT_IN_VALID_RANGE()", + "selector": "0xed8cf9ff", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 144 + }, + { + "name": "INVALID_ROOT_CA", + "signature": "INVALID_ROOT_CA()", + "selector": "0xee57533e", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 185 + }, + { + "name": "InvalidUserIdentifier", + "signature": "InvalidUserIdentifier()", + "selector": "0xf0c426db", + "file": "contracts/contracts/example/Airdrop.sol", + "line": 75 + }, + { + "name": "InvalidUserIdentifier", + "signature": "InvalidUserIdentifier()", + "selector": "0xf0c426db", + "file": "contracts/contracts/example/SelfIdentityERC721.sol", + "line": 52 + }, + { + "name": "InvalidUserIdentifier", + "signature": "InvalidUserIdentifier()", + "selector": "0xf0c426db", + "file": "contracts/contracts/example/SelfPassportERC721.sol", + "line": 49 + }, + { + "name": "InvalidUserIdentifier", + "signature": "InvalidUserIdentifier()", + "selector": "0xf0c426db", + "file": "contracts/contracts/tests/TestAirdrop.sol", + "line": 41 + }, + { + "name": "INVALID_OLDER_THAN", + "signature": "INVALID_OLDER_THAN()", + "selector": "0xf0e539b9", + "file": "contracts/contracts/IdentityVerificationHubImplV1.sol", + "line": 148 + }, + { + "name": "InvalidIdentityCommitmentRoot", + "signature": "InvalidIdentityCommitmentRoot()", + "selector": "0xf53393a7", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 171 + }, + { + "name": "InvalidIdentityCommitmentRoot", + "signature": "InvalidIdentityCommitmentRoot()", + "selector": "0xf53393a7", + "file": "contracts/contracts/libraries/RootCheckLib.sol", + "line": 19 + }, + { + "name": "TEE_NOT_SET", + "signature": "TEE_NOT_SET()", + "selector": "0xfc833fc6", + "file": "contracts/contracts/registry/IdentityRegistryKycImplV1.sol", + "line": 175 + }, + { + "name": "LengthMismatch", + "signature": "LengthMismatch()", + "selector": "0xff633a38", + "file": "contracts/contracts/IdentityVerificationHubImplV2.sol", + "line": 147 + } +] \ No newline at end of file diff --git a/sdk/core/package.json b/sdk/core/package.json index d4a06479f..e66a92628 100644 --- a/sdk/core/package.json +++ b/sdk/core/package.json @@ -1,6 +1,6 @@ { "name": "@selfxyz/core", - "version": "1.1.0-beta.7", + "version": "1.2.0-beta.1", "repository": { "type": "git", "url": "https://github.com/selfxyz/self" diff --git a/sdk/core/src/SelfBackendVerifier.ts b/sdk/core/src/SelfBackendVerifier.ts index ffac6dffe..d59d0f787 100644 --- a/sdk/core/src/SelfBackendVerifier.ts +++ b/sdk/core/src/SelfBackendVerifier.ts @@ -5,6 +5,8 @@ import { AadhaarVerifier__factory, IdentityVerificationHubImpl, IdentityVerificationHubImpl__factory, + KycVerifier, + KycVerifier__factory, Registry__factory, Verifier, Verifier__factory, @@ -222,7 +224,26 @@ export class SelfBackendVerifier { let circuitTimestampYy: number[]; let circuitTimestampMm: number[]; let circuitTimestampDd: number[]; - if (attestationId === 3) { + if (attestationId === 4) { + circuitTimestampYy = publicSignals + .slice( + discloseIndices[attestationId].currentDateIndex, + discloseIndices[attestationId].currentDateIndex + 4 + ) + .map(Number); + circuitTimestampMm = publicSignals + .slice( + discloseIndices[attestationId].currentDateIndex + 4, + discloseIndices[attestationId].currentDateIndex + 6 + ) + .map(Number); + circuitTimestampDd = publicSignals + .slice( + discloseIndices[attestationId].currentDateIndex + 6, + discloseIndices[attestationId].currentDateIndex + 8 + ) + .map(Number); + } else if (attestationId === 3) { circuitTimestampYy = String(publicSignals[discloseIndices[attestationId].currentDateIndex]) .split('') .map(Number); @@ -285,7 +306,7 @@ export class SelfBackendVerifier { throw new ConfigMismatchError(issues); } - let verifierContract: Verifier | AadhaarVerifier; + let verifierContract: Verifier | AadhaarVerifier | KycVerifier; try { const verifierAddress = await this.identityVerificationHubContract.discloseVerifier( '0x' + attestationId.toString(16).padStart(64, '0') @@ -293,7 +314,9 @@ export class SelfBackendVerifier { if (verifierAddress === '0x0000000000000000000000000000000000000000') { throw new VerifierContractError('Verifier contract not found'); } - if (attestationId === 3) { + if (attestationId === 4) { + verifierContract = KycVerifier__factory.connect(verifierAddress, this.provider); + } else if (attestationId === 3) { verifierContract = AadhaarVerifier__factory.connect(verifierAddress, this.provider); } else { verifierContract = Verifier__factory.connect(verifierAddress, this.provider); diff --git a/sdk/core/src/abi/KycVerifier.json b/sdk/core/src/abi/KycVerifier.json new file mode 100644 index 000000000..3fbfb6a3b --- /dev/null +++ b/sdk/core/src/abi/KycVerifier.json @@ -0,0 +1,36 @@ +[ + { + "inputs": [ + { + "internalType": "uint256[2]", + "name": "a", + "type": "uint256[2]" + }, + { + "internalType": "uint256[2][2]", + "name": "b", + "type": "uint256[2][2]" + }, + { + "internalType": "uint256[2]", + "name": "c", + "type": "uint256[2]" + }, + { + "internalType": "uint256[29]", + "name": "pubSignals", + "type": "uint256[29]" + } + ], + "name": "verifyProof", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/sdk/core/src/utils/constants.ts b/sdk/core/src/utils/constants.ts index dafc10fc2..2424a7608 100644 --- a/sdk/core/src/utils/constants.ts +++ b/sdk/core/src/utils/constants.ts @@ -50,9 +50,9 @@ export const discloseIndices = { // Selfrica ID Card - see CircuitConstantsV2.sol for layout documentation 4: { revealedDataPackedIndex: 0, - forbiddenCountriesListPackedIndex: 9, - nullifierIndex: 13, - attestationIdIndex: 29, + forbiddenCountriesListPackedIndex: 10, + nullifierIndex: 14, + attestationIdIndex: 15, merkleRootIndex: 17, currentDateIndex: 21, namedobSmtRootIndex: 18, @@ -139,25 +139,24 @@ export const revealedDataIndices: Record< ofacEnd: 117, }, 4: { - //put everything as 99 issuingStateStart: 99, issuingStateEnd: 99, - nameStart: 99, - nameEnd: 99, - idNumberStart: 99, - idNumberEnd: 99, - nationalityStart: 99, - nationalityEnd: 99, - dateOfBirthStart: 99, - dateOfBirthEnd: 99, - genderStart: 99, - genderEnd: 99, - expiryDateStart: 99, - expiryDateEnd: 99, - olderThanStart: 99, - olderThanEnd: 99, - ofacStart: 99, - ofacEnd: 99, + nameStart: 78, + nameEnd: 141, + idNumberStart: 30, + idNumberEnd: 61, + nationalityStart: 0, + nationalityEnd: 2, + dateOfBirthStart: 142, + dateOfBirthEnd: 149, + genderStart: 194, + genderEnd: 194, + expiryDateStart: 70, + expiryDateEnd: 77, + olderThanStart: 297, + olderThanEnd: 297, + ofacStart: 295, + ofacEnd: 296, }, } as const; diff --git a/sdk/core/src/utils/id.ts b/sdk/core/src/utils/id.ts index ff5e6aff6..2956c7dae 100644 --- a/sdk/core/src/utils/id.ts +++ b/sdk/core/src/utils/id.ts @@ -23,12 +23,19 @@ export const formatRevealedDataPacked = ( discloseIndices[attestationId].forbiddenCountriesListPackedIndex, discloseIndices[attestationId].forbiddenCountriesListPackedIndex + 4 ); - const issuingState = revealedDataPackedString - .subarray( - revealedDataIndices[attestationId].issuingStateStart, - revealedDataIndices[attestationId].issuingStateEnd + 1 - ) - .toString('utf-8'); + let issuingState = ''; + + if (attestationId === 4) { + issuingState = 'UNAVAILABLE'; + } else { + issuingState = revealedDataPackedString + .subarray( + revealedDataIndices[attestationId].issuingStateStart, + revealedDataIndices[attestationId].issuingStateEnd + 1 + ) + .toString('utf-8'); + } + const name = revealedDataPackedString .subarray( revealedDataIndices[attestationId].nameStart, @@ -93,7 +100,7 @@ export const formatRevealedDataPacked = ( .toString('utf-8'); } let olderThan: string; - if (attestationId === 3) { + if (attestationId === 3 || attestationId === 4) { olderThan = revealedDataPackedString .subarray( revealedDataIndices[attestationId].olderThanStart, diff --git a/sdk/core/src/utils/proof.ts b/sdk/core/src/utils/proof.ts index bcfedfe51..0f2e24164 100644 --- a/sdk/core/src/utils/proof.ts +++ b/sdk/core/src/utils/proof.ts @@ -20,7 +20,7 @@ export function getRevealedDataPublicSignalsLength(attestationId: AttestationId) case 3: return Math.ceil(119 / 31); case 4: - return Math.ceil(30 / 31); + return Math.ceil(298 / 31); default: throw new ProofError(`Invalid attestation ID: ${attestationId}`); } @@ -30,7 +30,7 @@ export const bytesCount: Record = { 1: [31, 31, 31], 2: [31, 31, 31, 1], 3: [31, 31, 31, 26], - 4: [31, 31, 31, 26], + 4: [31, 31, 31, 31, 31, 31, 31, 31, 31, 19], }; /**