Skip to main content
The identity sub-module interacts with the contract. All write operations (verify, batchVerify, revoke, and the claim methods) result in on-chain transactions signed by a registered wallet on your instance.
Write operations wait for on-chain confirmations inside the request, so expect them to take tens of seconds. The SDK raises its own timeout for these calls automatically (180s, proof claims 420s).

Verify an identity

Registers an address as KYC-verified on the IdentityRegistry. The address can then participate in compliant token transfers. Pass kycHash with the root hash from the KYC proof tool - it is stored on-chain verbatim and later checked when adding proof-backed claims. If the address already has an active on-chain identity, it is updated instead of failing; result.operation tells you which happened.

Verify from a proof manifest

verifyFromManifest reads the wallet address, root hash, and verification parameters (country, investor type, expiry days) straight from the bundle’s manifest.json. Overrides win where given.
The root hash itself cannot be overridden - it must match the manifest, otherwise proof-backed claims would fail later with HASH_MISMATCH.

Batch verify

Verify up to 500 addresses in a single on-chain transaction. Significantly more gas-efficient than individual calls for bulk onboarding. Give each entry its own kycHash - the rows of the proof tool’s batch CSV map directly onto entries.
Entries whose address is already actively verified are skipped by the contract (their existing identity is kept unchanged); revoked identities are re-verified. Entries that fail validation (bad address, missing country, malformed kycHash) are dropped before the transaction and are not reported individually - validate inputs beforehand. Use single verify calls when you need per-address update semantics or precise feedback.

Revoke an identity

Permanently marks an address as revoked on the IdentityRegistry. Revoked addresses cannot send or receive compliant tokens.

Get identity status

Returns combined on-chain and off-chain status for an address. The on-chain data comes from the IdentityRegistry contract; the off-chain data comes from the Trusset database.
If no customer record exists in the database, offChain is null. If the address was never verified on-chain, onChain.isVerified is false with a status of none.

On-chain claims

Claims attach typed attestations to a verified identity. Four types derive from a KYC proof bundle, four are added manually:

Read claims

Claims from a proof

Adds every claim the bundle can back (or a selected subset). The wallet must already be verified on-chain with the manifest’s root hash - the backend compares them before sending any transaction. One transaction is sent per claim; per-claim outcomes are reported individually.
Failure modes: NOT_VERIFIED, HASH_MISMATCH, WALLET_MISMATCH, STUB_NOT_ALLOWED, INVALID_MANIFEST, NO_SELECTED_CLAIMS - see the troubleshooting table.

Manual claims

For attestations that come from your own screening processes rather than the proof tool. Provide either a pre-computed 32-byte dataHash or a dataInput string the backend hashes for you.
Attempting to add a proof-backed type manually fails with PROOF_REQUIRED. Re-adding an existing claim type overwrites it.

Revoke a claim

Check transfer compliance

Validates whether a token transfer between two addresses would be allowed. This runs the full compliance pipeline: identity checks for both parties, KYC expiry validation, freeze checks, and all registered compliance modules.
Call canTransfer before submitting transfer transactions to get a specific rejection reason rather than a generic revert.
This is a read-only operation - it needs no signature and costs no gas.