Evidence registry

AML screening methodology

Every factual product statement below is translated from the same methodology evidence registry.

BLUF

Methodology at a glance

The first-party pipeline fetches chain data through chain-specific handlers selected by the detected or trusted chain, and refuses to score a supported chain when its provider failed outright.

Scope note: Do not turn the handler inventory into a broader network-support claim without reconciling product_facts.json.

Evidence anchors
  • aml_tracker/engine.py:1388
  • aml_tracker/engine.py:1406
  • aml_tracker/engine.py:1452
  • aml_tracker/engine.py:1461

OnChainRisk is the documented external enrichment provider: the client authenticates with a bearer key, submits an address and network, and normalizes risk score, risk level, labels, pattern flags, sandbox state, and raw response data.

Scope note: The provider is optional and may return unavailable; never describe it as guaranteed.

Evidence anchors
  • shared/onchainrisk.py:31
  • shared/onchainrisk.py:116
  • shared/onchainrisk.py:121
  • shared/onchainrisk.py:293
  • shared/onchainrisk.py:298
  • shared/onchainrisk.py:310

The anonymous free website check passes use_onchain_risk=False, returns onchain_risk_included=false, and the engine omits the OnChainRisk coroutine from that branch.

Scope note: Free still uses OFAC, chain fetch, and the applicable BTC/ETH/TRX blacklist function.

Evidence anchors
  • payment_api.py:1046
  • payment_api.py:1067
  • aml_tracker/engine.py:1444
  • aml_tracker/engine.py:1445
  • aml_tracker/engine.py:1478
  • aml_tracker/engine.py:1479

Architecture layers

First-party screening layer
Evidence IDRegistry statement
own_ofac_sdn_address_screening

The first-party pipeline checks a wallet address against the downloaded OFAC SDN cryptocurrency-address set.

Scope note: Say address screening, not entity KYC or legal clearance.

Evidence anchors
  • aml_tracker/engine.py:298
  • aml_tracker/engine.py:363
  • aml_tracker/engine.py:364
  • aml_tracker/engine.py:366
own_chain_fetch

The first-party pipeline fetches chain data through chain-specific handlers selected by the detected or trusted chain, and refuses to score a supported chain when its provider failed outright.

Scope note: Do not turn the handler inventory into a broader network-support claim without reconciling product_facts.json.

Evidence anchors
  • aml_tracker/engine.py:1388
  • aml_tracker/engine.py:1406
  • aml_tracker/engine.py:1452
  • aml_tracker/engine.py:1461
own_blacklist_sources

The blacklist layer uses Ransomwhere for BTC ransomware addresses, 0xB10C's curated OFAC address files for BTC/ETH/TRX, and the MyEtherWallet darklist for ETH scam or phishing addresses.

Scope note: These are code-configured sources; this registry does not assert their current remote availability or list size.

Evidence anchors
  • shared/blacklists.py:73
  • shared/blacklists.py:80
  • shared/blacklists.py:100
  • shared/blacklists.py:105
  • shared/blacklists.py:165
  • shared/blacklists.py:172
own_tether_freeze_checks

For Ethereum and TRON, the blacklist layer also makes read-only Tether contract calls to test whether an address is frozen.

Scope note: This is issuer-freeze status, not recovery, unfreezing, or return of funds.

Evidence anchors
  • shared/blacklists.py:224
  • shared/blacklists.py:231
  • shared/blacklists.py:252
  • shared/blacklists.py:266
own_blacklist_dispatch

First-party blacklist checks are dispatched only for BTC, ETH, and TRX, then their hit tokens are merged into chain risk signals before scoring.

Scope note: Do not imply that every supported chain receives every blacklist source.

Evidence anchors
  • aml_tracker/engine.py:1409
  • aml_tracker/engine.py:1447
  • aml_tracker/engine.py:1450
own_extended_sanctions_sources

The extended sanctions layer downloads UN, UK OFSI, Australian DFAT, and Swiss SECO datasets and matches entity labels against their normalized names and aliases.

Scope note: AU and CH data are fetched through OpenSanctions. Matching is label-to-entity-name matching, not direct address lookup.

Evidence anchors
  • shared/sanctions_extended.py:30
  • shared/sanctions_extended.py:31
  • shared/sanctions_extended.py:33
  • shared/sanctions_extended.py:34
  • shared/sanctions_extended.py:159
  • shared/sanctions_extended.py:265
  • shared/sanctions_extended.py:300
own_extended_sanctions_effect

A confirmed UN, UK, AU, or CH label match raises the combined score to at least 95 and adds a source-specific sanctions flag.

Scope note: A non-match is not proof that a wallet or owner is sanctions-free.

Evidence anchors
  • aml_tracker/engine.py:1520
  • aml_tracker/engine.py:1521
  • aml_tracker/engine.py:1526
  • aml_tracker/engine.py:1528
  • aml_tracker/engine.py:1529
own_compute_score

The first-party score gives a direct OFAC hit 95 points, applies fixed floors for known blacklist hits, adds a no-history heuristic, caps the result at 100, and maps it to LOW/MEDIUM/HIGH/CRITICAL thresholds.

Scope note: Describe this as a deterministic code heuristic, not a regulator-issued rating.

Evidence anchors
  • aml_tracker/engine.py:1310
  • aml_tracker/engine.py:1317
  • aml_tracker/engine.py:1324
  • aml_tracker/engine.py:1327
  • aml_tracker/engine.py:1333
  • aml_tracker/engine.py:1339
Optional OnChainRisk enrichment layer
Evidence IDRegistry statement
ocr_provider_contract

OnChainRisk is the documented external enrichment provider: the client authenticates with a bearer key, submits an address and network, and normalizes risk score, risk level, labels, pattern flags, sandbox state, and raw response data.

Scope note: The provider is optional and may return unavailable; never describe it as guaranteed.

Evidence anchors
  • shared/onchainrisk.py:31
  • shared/onchainrisk.py:116
  • shared/onchainrisk.py:121
  • shared/onchainrisk.py:293
  • shared/onchainrisk.py:298
  • shared/onchainrisk.py:310
ocr_full_tier_and_score_floor

The engine labels a result full only when OnChainRisk supplies a real score, and OnChainRisk cannot reduce an OFAC or first-party blacklist score floor.

Scope note: Full means completed enrichment in this result contract; it is not a guarantee that every upstream field is populated.

Evidence anchors
  • aml_tracker/engine.py:1500
  • aml_tracker/engine.py:1501
  • aml_tracker/engine.py:1502
  • aml_tracker/engine.py:1507

Free vs paid website paths

Website tier behavior
Evidence IDRegistry statement
free_tier_disables_ocr

The anonymous free website check passes use_onchain_risk=False, returns onchain_risk_included=false, and the engine omits the OnChainRisk coroutine from that branch.

Scope note: Free still uses OFAC, chain fetch, and the applicable BTC/ETH/TRX blacklist function.

Evidence anchors
  • payment_api.py:1046
  • payment_api.py:1067
  • aml_tracker/engine.py:1444
  • aml_tracker/engine.py:1445
  • aml_tracker/engine.py:1478
  • aml_tracker/engine.py:1479
ocr_deep_paid_web_only

In the paid website checkout, OnChainRisk is attempted twice with use_onchain_risk=True and is accepted as complete only after a real non-sandbox score; a follow-up call with use_onchain_risk=False runs only if both attempts return no result object.

Scope note: Scope this statement to the website payment path. The engine default is use_onchain_risk=True, so this is not a universal claim about every Telegram caller.

Evidence anchors
  • payment_api.py:561
  • payment_api.py:567
  • payment_api.py:568
  • payment_api.py:597
  • payment_api.py:599
  • payment_api.py:606
  • payment_api.py:621
  • payment_api.py:623

Documented limitations

The AML methodology does not provide fund recovery, asset return, unfreezing, or transaction reversal; its output contract is a screening result and risk metadata only.

Scope note: Tether frozen-status reads are evidence checks only; they do not change contract state.

Evidence anchors
  • aml_tracker/engine.py:1533
  • aml_tracker/engine.py:1156
  • aml_tracker/engine.py:1158
  • shared/blacklists.py:224
  • shared/blacklists.py:252

The AML methodology does not implement a Travel Rule messaging protocol or exchange originator and beneficiary identity records; it returns address-level screening fields only.

Scope note: Educational site articles about the Travel Rule are not evidence of product implementation.

Evidence anchors
  • aml_tracker/engine.py:1533
  • aml_tracker/engine.py:1156
  • aml_tracker/engine.py:1158
  • aml_tracker/engine.py:1159

Scorechain is not evidenced as a screening engine or data provider for this methodology; repository references identify branded twin bots that share the AML command set, while the engine's external enrichment call is OnChainRisk.

Scope note: Do not call CryptoAML.ai a Scorechain-powered product without a separate, current vendor contract and code integration.

Evidence anchors
  • shared/bot_commands.py:72
  • shared/bot_commands.py:74
  • aml_tracker/engine.py:1417
  • shared/onchainrisk.py:31

Publication guardrails

  • Keep tier-specific statements scoped to the web and API paths evidenced above.
  • Do not convert configured sources into claims of current uptime, list size, completeness, or legal certification.
  • Do not claim fund recovery, Travel Rule protocol support, or Scorechain-powered analysis from this registry.