SettleMint
ArchitectureSecurityCompliance Modules

Identity Verification

SMARTIdentityVerification module with full RPN expression system. Covers KYC/AML/ACCREDITED/CONTRACT claim topics, AND/OR/NOT operators, exemption support, and real-world expression examples.

Purpose: Reference for the SMARTIdentityVerification module and RPN expression system.


SMARTIdentityVerification

The most expressive compliance module in DALP. Instead of simple allow/block lists, it evaluates logical expressions over identity claims to determine whether a transfer is permitted.

A claim is an on-chain attestation issued by a trusted issuer (KYC provider, compliance officer) and stored on the investor's OnchainID identity contract. The module checks whether the investor's identity holds valid (non-expired) claims matching the configured expression.

Interface (capabilities)

CapabilityWho can callInputsOn-chain effectEmitsNotes
setModuleParametersToken admin (via compliance)RPN expression (array of claim topics and operators)Stores verification expressionExpression validated at configuration time
canTransferCompliance engineSender, recipient, amountEvaluates expression against recipient's identity claimsChecks both sender and recipient; claims must be non-expired

Verification topics for identity-based compliance checks

Claim topics

Standard claim topics used across DALP compliance configurations:

TopicMeaningTypical issuer
KYCKnow Your Customer identity verification completedKYC provider
AMLAnti-Money Laundering screening passedCompliance provider
ACCREDITEDInvestor meets accredited investor criteria (e.g., Reg D)Compliance officer
CONTRACTInvestor is a legal entity (not a natural person)KYC provider
JURISDICTIONInvestor is resident in a qualifying jurisdictionKYC provider

Custom claim topics can be defined by the compliance team and registered in the Topic Scheme Registry.

RPN expression system

The module evaluates expressions in Reverse Polish Notation (postfix). This allows arbitrary logical combinations of claim checks without parentheses.

Expression components

Node typeBehavior
TOPICPush true if identity holds a valid claim for that topic; false otherwise
ANDPop two values, push logical AND
ORPop two values, push logical OR
NOTPop one value, push logical inverse

Expression examples

RequirementPostfix expression
KYC AND AML[KYC, AML, AND]
ACCREDITED investors only[ACCREDITED]
Corporate entities OR verified individuals[CONTRACT, KYC, AML, AND, OR]
Full KYC stack[ACCREDITED, KYC, AML, AND, JURISDICTION, AND, OR]
KYC but NOT sanctioned[KYC, SANCTIONED, NOT, AND]

Real-world regulatory configurations

RegulationExpressionMeaning
MiCA EU Standard[KYC, AML, AND]Both KYC and AML claims required
Reg D 506(b)[ACCREDITED, KYC, AML, AND, OR]Accredited investors OR (KYC AND AML) — allows up to 35 non-accredited sophisticated investors
Reg D 506(c)[ACCREDITED]Only accredited investors (strict)
Japan FSA[CONTRACT, KYC, AML, AND, OR]QII (corporate) or (KYC AND AML) — Qualified Institutional Investor exemption

Exemption expressions

The same RPN system is used by other modules to configure exemptions — investors that bypass a module's restriction:

  • TimeLock: investors matching the exemption expression skip the holding period
  • TransferApproval: investors matching the exemption expression skip the pre-approval requirement
  • InvestorCount: the topicFilter expression determines which investors are counted (not which are blocked)

This allows sophisticated exemption logic: e.g., "QII investors are exempt from the 180-day lock, but retail investors must hold for the full period."

Key invariants

  • Both sender and recipient must hold valid claims matching the configured expression
  • Claims are checked for expiry — expired claims fail verification even if the topic matches
  • The expression is evaluated as a stack machine — malformed expressions revert at configuration time via validateParameters
  • Trusted issuers are configured globally, not per-token — a claim from any registered trusted issuer is accepted

Operational signals

No events emitted by this module. Monitor for ComplianceCheckFailed revert errors in failed transactions when identity verification fails.

Failure modes & edge cases

  • Investor's claim expires between verification check and transfer execution — transfer reverts
  • Trusted issuer removed after claims were issued — existing claims from that issuer are no longer accepted
  • Empty expression (no claim topics) — all transfers pass verification (effectively disables the module)

See also

On this page