SettleMint
ArchitectureSecurity

Identity & Compliance

Architecture of the DALP identity and compliance system built on ERC-3643 and OnchainID (ERC-734/735). Covers on-chain identity binding, claim-based permissions, compliance engine orchestration, and the two-layer policy model.

Purpose

How identity and compliance enforce regulatory requirements at the protocol layer.


Reading guide: This page explains how enforcement works (architecture hub). For what each rule does, see the Compliance Modules catalog.

The ERC-3643 standard

ERC-3643 is the security token standard behind the SMART Protocol:

  • Identity binding: Every holder needs an OnchainID registered in the token's identity registry
  • Compliance validation: Transfers execute only when all configured modules return true
  • Claim-based permissions: Identity contracts hold claims from trusted authorities
  • Modular architecture: Compliance rules live in separate module contracts

DALP extends ERC-3643 via SMART Protocol integration including logical claim expressions and cross-token investor counting.


Identity management integrated into operator workflow

Core on-chain components

ComponentScopeResponsibilityWhere documented
Identity RegistryPer tokenMaps wallet addresses to OnchainID contracts. Each token maintains its own registry.Compliance Transfer Flow
Trusted Issuers RegistryGlobalDefines which claim issuers are authorized for which claim topics. Shared across all tokens.OnchainID protocol (this page)
OnchainID (ERC-734/735)Per identityHolds cryptographic keys and verifiable claims for a single identity.OnchainID protocol (this page)
SMARTCompliancePer tokenOrchestrates compliance modules for a token. Queries all configured modules during canTransfer.Compliance Modules catalog
Compliance ModulesGlobal instances, per-token configIndividual rule contracts (country, identity, supply, etc.). Single deployed instance, per-token parameters.Compliance Modules catalog

Where compliance is enforced

OperationIdentity lookupCompliance checkResult if failing
TransferBoth sender and recipient resolved via Identity RegistryAll configured modules evaluated sequentiallyTransaction reverts with module reason
MintRecipient resolved via Identity RegistryAll configured modules evaluatedMint reverts — no tokens created
Burn / RedemptionSender resolved via Identity RegistryModules evaluated; recipient checks (country, identity) skip for address(0)Burn reverts — tokens remain
Forced transferBypasses identity and complianceCompliance skipped; state-tracking hooks (e.g., InvestorCount) may still applyExecutes without compliance checks (ERC-3643 forcedTransfer)

OnchainID protocol

Built on ERC-734 (key management) and ERC-735 (claim management).

Key types (ERC-734)

PurposeNameControls
1ManagementAdd/remove other keys
2ActionExecute on behalf of identity
3ClaimSign and approve claims
4EncryptionDecrypt data sent to identity

Claim structure (ERC-735)

FieldDescription
TopicWhat the claim certifies (keccak256("KYC"))
IssuerTrusted authority address
SignatureCryptographic proof from issuer
DataVerification results (arbitrary bytes)
URIPointer to off-chain proof

Identity verification lifecycle

Question answered: How does a user go from unverified to transfer-ready?

Rendering diagram...

Key takeaways:

  • Claims are issued off-chain (KYC provider) and stored on-chain (OnchainID contract)
  • The Trusted Issuers Registry gates which authorities can issue claims for which topics
  • Every transfer re-validates claims at execution time — expired or revoked claims block transfers
  1. Off-chain verification -- KYC provider verifies identity, AML, jurisdiction
  2. On-chain claim issuance -- Trusted issuer calls addClaim on user's OnchainID
  3. Identity registration -- Wallet-to-identity mapping in identity registry
  4. Runtime validation -- Transfers query compliance, resolve identities, evaluate rules

Verification topic registry for compliance attestations

Compliance engine architecture

Orchestration is separated from rule enforcement:

Question answered: How do tokens, the compliance engine, and modules relate?

Rendering diagram...

Key takeaways:

  • One SMARTCompliance contract per token orchestrates all compliance checks
  • Modules are global singletons — each token configures its own parameters
  • A single module veto blocks the entire transfer (fail-fast)

During transfers, the compliance contract iterates configured modules. If any returns false, the transaction reverts. See Compliance Transfer Flow for the full sequence.


Two-layer policy model

Two independent policy layers:

Question answered: What are the two independent policy layers a transaction passes through?

Rendering diagram...

Key takeaways:

  • Layer 1 (on-chain) enforces regulatory compliance and is immutable/auditable
  • Layer 2 (custodian) enforces operational controls and approval workflows
  • For standard transfers, both layers must pass in sequence — Layer 1 failure prevents Layer 2 from being reached
AspectLayer 1: On-chainLayer 2: Custodian
Enforced byDALP compliance modules (EVM)DFNS / Fireblocks policy engine
ControlsIdentity, country, supply, holding periodsThresholds, multi-party approval, spend limits
VisibilityOn-chain, auditable in tx traceProvider dashboard, audit logs
Configured byToken issuer / compliance managerOperations team

Layer 1 is authoritative for regulatory enforcement. Layer 2 protects signing infrastructure. See Signing Flow.


Trust boundaries & assumptions

  • Trusted Issuers Registry is the root of trust: only issuers listed here can issue claims that the system accepts. Compromise of this registry compromises all identity verification.
  • Claims have expiry: expired claims are rejected at transfer time. The system fails closed — missing or invalid claims block operations, they do not silently pass.
  • Off-chain verification, on-chain proof: KYC/AML checks happen off-chain; the on-chain claim is the proof artifact. The system trusts the claim signature, not the quality of the underlying verification — a compromised or negligent trusted issuer can issue fraudulent claims that the protocol will accept.
  • Identity Registry binding is per-token: a wallet registered for Token A is not automatically registered for Token B. Each token maintains its own wallet→identity mapping.
  • Layer 2 is independent: custodian policy (DFNS/Fireblocks) operates outside the protocol. On-chain compliance cannot enforce or verify custodian-layer decisions. See Signing Flow.
  • Forced transfers bypass compliance: forcedTransfer (ERC-3643) skips all compliance checks. This is an issuer-only emergency mechanism — see Authorization for role controls.

See also

On this page