Crypto compliance architecture

Crypto custody & compliance · engineering reference

Crypto compliance architecture

Compliance is transaction architecture. The decisive question is whether a gate runs before credit and before signing, with enough versioned evidence to reproduce the decision months later.

VOLATILE CLAIMS: DATE-TAGGEDPRINT: LANDSCAPE TABLES

Start here if this is new

Most compliance failures are not missing policies. They are gates placed at the wrong point in the call graph, where they can observe a problem but no longer stop it. This sheet is about placement.

Where does sanctions screening belong?

Before signing, never after broadcast. Screening a transaction you have already sent is not a control, it is a report, because the only action left is a filing.

What is the Travel Rule in one paragraph?

It is the requirement that identifying information about the sender and the recipient travels alongside a transfer between regulated firms, above a threshold. IVMS101 is the shared data format that information is carried in.

If the format is standard, why is it hard?

The payload is standardised and the network is not. The competing Travel Rule networks all carry IVMS101 but discover and authenticate counterparties differently, so you either join several of them or route through a broker.

Why rescreen addresses you already cleared?

Sanctions lists move in both directions. An address that is clean today can be designated tomorrow, and the exposure applies to what you already did, so screening only at onboarding leaves a gap that grows every day.

If you remember one lineCompliance controls are pipeline placement decisions, not a checklist. Screen before irreversibility.

Gate before irreversibility

Gate placement is the whole design. A control that runs after signing is forensics, not compliance.

Gates6observe → sign
BoundarySIGNthe irreversible step
PayloadIVMS101.2023 structured fields
Deposit gates4before credit
Withdrawal gates4before the signer
On alertDO NOT SIGNhold, never broadcast
01 · OBSERVE

Parse chain, contract, transfer identity and finality.

02 · SCREEN

KYT + sanctions with model/list version.

03 · IDENTIFY

Customer, counterparty VASP, corridor, unhosted status.

04 · TRANSMIT

Minimum IVMS101 data to authenticated counterparty.

05 · AUTHORIZE

Ledger intent, policy, velocity, approvals.

06 · SIGN

Only the exact cleared payload.

Signing is the boundary. “Screen before broadcast” is too late if valid signed bytes already exist.

Gate before irreversibility

Five gates run before the sixth. Once valid signed bytes exist, every remaining control is after the fact.

Six compliance gates ending at the signing boundary Observe, screen, identify, transmit and authorize all run before signing. Signing is the irreversibility boundary: once valid signed bytes exist, screening before broadcast is too late. ObserveScreen IdentifyTransmit AuthorizeSign 0102 0304 0506 irreversibility boundary every gate runs before credit and before signing “Screen before broadcast” is too late if valid signed bytes already exist
Signing is the boundary. Screening before broadcast is too late if a valid signature already exists.

Gate placement rules

Deposit observation

Parse chain, contract, amount, source, destination, tag, and finality before any customer posting.

Concrete use: Open a compliance case on a new USDC transfer while the balance remains pending.

Failure mode: Screening after credit lets tainted value fund internal trades or withdrawals.

Pre-credit KYT

Screen the actual transfer and counterparty exposure before making funds available.

Concrete use: Persist provider, model/list version, score, categories, hop depth, and raw response hash.

Failure mode: A naked score cannot be reproduced after the vendor model changes.

Pre-sign withdrawal gate

All identity, Travel Rule, sanctions, destination, and business-policy checks must pass before irreversible signing.

Concrete use: The signer callback verifies compliance case case_20418=cleared and exact destination bytes.

Failure mode: Screening between signing and broadcast leaves a valid signed payload that can escape.

Rescreen on list update

Addresses and persons previously clean can become blocked property when lists change.

Concrete use: Subscribe to list changes, rescreen held positions and pending transfers, and open retroactive cases.

Failure mode: A once-at-onboarding result silently expires.

Fail closed

Provider outage blocks automated value movement while an explicit, dual-controlled manual route handles exceptions.

Concrete use: After 60 seconds of KYT timeout, queue rather than sign; page operations before SLA breach.

Failure mode: Fail-open turns the outage into an ideal attacker window.

Compliance gate map

The control boundary is signing. A signed blockchain transaction is a bearer-like capability even if your broadcaster has not submitted it yet.

PathGateInputOn hitIf placed later
DepositAsset validationchain + contract + decimalsQuarantineFake token may be credited
DepositKYT exposuresource + transfer graphPending/manual reviewFunds become internally spendable
DepositSanctionsperson + address + live listBlock/segregateBlocked property may move
DepositFinalitychain-native statusWaitReorg creates unbacked credit
WithdrawalCustomer/KYC stateidentity + account riskReject/reviewValue enters signer path
WithdrawalTravel Rulecounterparty + threshold + IVMS payloadHold/send dataTransfer may breach obligation
WithdrawalDestination KYTaddress + asset + amountReject/reviewSigned transaction exists
WithdrawalPolicy callbackledger intent + decoded payloadDo not signBroadcast control is too late

Travel Rule implementation register

This is a routing register, not a legal threshold table. Thresholds and scope depend on entity, activity, corridor, and current local implementation; resolve them in maintained policy data before launch.

RegimeEngineering baselineDe minimis postureUnhosted-wallet concernPrimary text
FATF R.16Originator/beneficiary information; VASP-to-VASP transmissionCountries implement locallyRisk-based treatmentFATF
United States31 CFR / FinCEN funds-transfer rules and BSA recordsThresholds depend on rule and transaction classIdentify applicable counterparty/ruleeCFR Title 31
European UnionRegulation 2023/1113 applies information duties to crypto transfersNo general crypto de minimisSelf-hosted interactions require risk controlsEUR-Lex
United KingdomMoney Laundering Regulations + FCA implementationVerify current UK requirementsRisk-based evidenceFCA
SwitzerlandAMLA/AMLO-FINMA implementationVerify current Swiss thresholdProof of control often materialFINMA
SingaporePayment Services Act / MAS noticesVerify current notice and scopeCounterparty due diligenceMAS
JapanAct / JFSA and JVCEA implementationVerify current local ruleCounterparty controlsJFSA
CanadaPCMLTFA / FINTRAC virtual-currency transfer recordsCAD threshold rules vary by dutyIdentity and recordsFINTRAC
AustraliaAML/CTF regime and AUSTRAC guidanceVerify reforms and commencementCounterparty and ownership riskAUSTRAC
Hong KongAMLO VASP regimeVerify current threshold and circularsRisk-based controlsSFC
UAEFederal plus competent-authority ruleDepends on regulator/free zoneCounterparty verificationVARA

IVMS101 field map

IVMS101 standardizes identity data; it does not standardize discovery, transport, certificate trust, or corridor policy.

Object / fieldCardinality / typeConstraintCommon rejection
originator / beneficiary1 objectPerson arrays + account numberFlattening all persons into one name
naturalPerson.name1..nStructured nameIdentifierSingle free-text full name
legalPerson.name1..nLegal-person identifier structureUsing natural-person fields
nameIdentifierTypecodeControlled vocabulary such as LEGLUnrecognized local code
geographicAddress0..nTyped address + ISO countryCountry name instead of alpha-2 code
addressTypecodeControlled vocabularyBilling/home/business semantics mixed
nationalIdentification0..1Identifier + type; authority where requiredSending raw document without type
dateAndPlaceOfBirth0..1ISO date + placeLocale-formatted date
customerIdentification0..1VASP customer identifierReusing government ID
accountNumber0..n stringsChain/account or internal accountDropping memo/tag
originatingVASP / beneficiaryVASP0..1Legal-person identityTrusting a domain name as identity
transferPath0..1Ordered intermediariesLosing sequence
payloadMetadata0..1Encoding/transliteration metadataNo Latin/local script strategy

IVMS101.2023 worked payload

Illustrative transport envelope: validate against the counterparty network's current IVMS101.2023 schema and required jurisdictional fields. Names use structured identifiers; dates use ISO 8601.

{
  "originator": {"originatorPersons": [{"naturalPerson": {
    "name": [{"nameIdentifier": [{"primaryIdentifier": "Rivera", "secondaryIdentifier": "Elena", "nameIdentifierType": "LEGL"}]}],
    "geographicAddress": [{"addressType": "HOME", "streetName": "740 Market Street", "townName": "Denver", "countrySubDivision": "CO", "postCode": "80202", "country": "US"}],
    "nationalIdentification": {"nationalIdentifier": "CUST-78421", "nationalIdentifierType": "CUST"},
    "customerIdentification": "cust_78421", "dateAndPlaceOfBirth": {"dateOfBirth": "1987-04-12", "placeOfBirth": "Santa Fe, US"}
  }}], "accountNumber": ["acct_78421"]},
  "beneficiary": {"beneficiaryPersons": [{"legalPerson": {
    "name": [{"nameIdentifier": [{"legalPersonName": "Northwind Components LLC", "legalPersonNameIdentifierType": "LEGL"}]}],
    "geographicAddress": [{"addressType": "BIZZ", "streetName": "1650 Blake Street", "townName": "Denver", "countrySubDivision": "CO", "postCode": "80202", "country": "US"}],
    "nationalIdentification": {"nationalIdentifier": "20261234567", "nationalIdentifierType": "RAID", "registrationAuthority": "RA000602"}
  }}], "accountNumber": ["0x2B7C...91E4"]},
  "originatingVASP": {"originatingVASP": {"legalPerson": {"name": [{"nameIdentifier": [{"legalPersonName": "Origin VASP Inc", "legalPersonNameIdentifierType": "LEGL"}]}]}}},
  "beneficiaryVASP": {"beneficiaryVASP": {"legalPerson": {"name": [{"nameIdentifier": [{"legalPersonName": "Destination VASP Ltd", "legalPersonNameIdentifierType": "LEGL"}]}]}}},
  "transferPath": {"transferPath": [{"sequence": 0, "account": "acct_78421"}, {"sequence": 1, "account": "0x2B7C...91E4"}]},
  "payloadMetadata": {"transliterationMethod": ["none"]}
}
Do not copy identity values into production. Store consent/lawful-basis, schema version, counterparty identity, transport receipt, policy decision, and the minimum data actually required.

KYT, sanctions & data protection

Hop depth

Indirect exposure is a policy parameter; at enough hops almost every liquid address becomes connected.

Concrete use: Store direct and 1-hop exposure separately and require a documented threshold by category.

Failure mode: Treating graph distance as moral certainty creates unbounded false positives.

Vendor disagreement

Attribution and clustering are models, not shared facts.

Concrete use: Route a high-value disagreement to evidence review; retain each vendor's label version.

Failure mode: Averaging opaque scores does not create truth.

Dynamic sanctions data

Lists add and remove identifiers; application code must consume versioned authoritative data.

Concrete use: Treat the OFAC SDN feed as an external signed/versioned input and rescreen on update.

Failure mode: Hard-coded addresses become wrong in both directions.

Blocked-property response

Freeze and segregate; route reporting, recordkeeping, and legal decisions to the applicable program.

Concrete use: Open one case linking asset, list version, timestamps, owners, decisions, and reports.

Failure mode: Automatically returning funds may itself be prohibited.

Data minimization

Transmit required identity data only to an authenticated counterparty under a recorded lawful mechanism.

Concrete use: Encrypt in transit and at rest, separate compliance payload from chain transaction, and expire unnecessary copies.

Failure mode: The blockchain is not a place for Travel Rule personal data.

Blocked-property and alert runbook

Deadlines are jurisdiction- and program-specific. The runbook must link to maintained legal policy, never freeze a number in application code.

  1. Atomically freeze availability and prevent signing; preserve the exact screening response.
  2. Identify governing entity, program, list entry, ownership/control basis, and transaction state.
  3. Segregate or label the position so routine sweeps and reconciler repairs cannot move it.
  4. Do not return, consolidate, or test-transfer value without authorized legal determination.
  5. Open a privileged case with timestamps, list version, assets, chain evidence, and decision owners.
  6. Evaluate required blocking/rejection reports and deadlines under the applicable program.
  7. Evaluate separate suspicious-activity reporting and anti-tipping-off constraints.
  8. Notify internal legal/compliance/security through the documented channel, not ordinary support notes.
  9. Rescreen related customers, addresses, counterparties, and pending transfers.
  10. Retain records and schedule ongoing/annual reporting where the applicable rule requires it.
  11. Test release/delisting path with dual control and complete audit evidence.
  12. After closure, repair the placement or data defect that allowed exposure.

Common mistakes & anti-patterns

Failures that pass a vendor demo. Expand each for the control and the reason it fails.

Screen after broadcast

The irreversible action already happened.

Concrete use: Gate before signing.

Failure mode: A broadcaster hold does not neutralize signed bytes.

Hard-coded lists

Sanctions state changes without software releases.

Concrete use: Consume authoritative versioned feeds.

Failure mode: Delisting is as important as designation.

Score as fact

A vendor's risk score encodes taxonomy and model choices.

Concrete use: Store evidence, category, distance, model and appeal path.

Failure mode: Threshold tuning without false-positive measurement is guesswork.

Unauthenticated counterparty

Correct IVMS data sent to the wrong VASP is a breach.

Concrete use: Verify certificate/entity before payload transmission.

Failure mode: Protocol membership is not universal identity assurance.

KYT integration surfaces

Recheck each vendor's public documentation before procurement. This compares integration shape, not quality, experience, or rank.

ProviderDocumented surfaceRetainDo not infer
ChainalysisAPIs and platform workflowscategory, exposure, score, evidence/versionCross-vendor score equivalence
TRM LabsAPIs and case workflowsrisk indicators, attribution, graph contextAttribution immutability
EllipticWallet/transaction screening APIsrisk rule, category, path, timestampIdentical taxonomy
Merkle ScienceTransaction-monitoring APIsrule hit, exposure, model stateScore as legal conclusion
CrystalBlockchain-analytics APIsentity/category and transaction evidenceUniversal chain/token coverage

Travel Rule protocol interoperability

The payload is standardized more broadly than transport and discovery. Multi-network routing, receipts, retries, and counterparty identity are first-class state.

Protocol/networkTransport/discoveryIdentity trustPayloadArchitecture implication
TRISACertificate-backed directory/messagingVASP certificatesIVMS101-compatibleOperate certificate lifecycle and discovery
TRPOpen protocol specificationsImplementation-dependent counterparty verificationIVMS101 mappingNo universal directory
OpenVASPOpen messaging/identity designProtocol-defined VASP identityStructured Travel Rule dataReach may require another network
Commercial brokerVendor directory and routed transportVendor onboarding modelOften IVMS101Broker concentration and exit are controls

Primary sources & scope

Operational and volatile claims were checked against these first-party documents on 2026-08-31. Examples are illustrative controls, not legal, investment, or vendor-selection advice.