SettleMint
ArchitectureSecurityCompliance Modules

Country Restrictions

CountryAllowList and CountryBlockList modules for geographic transfer restrictions. Covers sanctions/OFAC use cases, EU MiCA jurisdiction selection, and ISO 3166-1 country codes.

Purpose: Reference for country-based compliance modules.


Where these modules apply

ConcernCountryAllowListCountryBlockList
MintingChecks recipient countryChecks recipient country
TransfersChecks recipient countryChecks recipient country
Burns
Forced transfers

Modules

ModulePurposeConfiguration
CountryAllowListOnly allow transfers to investors from approved countriesArray of ISO 3166-1 numeric country codes
CountryBlockListBlock transfers to investors from prohibited countriesArray of blocked country codes

Country modules check the recipient's country code from the identity registry storage. This value is set by KYC providers during identity verification and stored as a claim on the investor's OnchainID identity contract.

Interface (capabilities)

CountryAllowList

CapabilityWho can callInputsOn-chain effectEmitsNotes
setModuleParametersToken admin (via compliance)Array of ISO 3166-1 numeric country codesStores allowed country listEmpty list blocks all transfers
canTransferCompliance engineSender, recipient, amountChecks recipient's country code against allowed listCountry code read from identity registry storage

CountryBlockList

CapabilityWho can callInputsOn-chain effectEmitsNotes
setModuleParametersToken admin (via compliance)Array of blocked country codesStores blocked country listEmpty list blocks none
canTransferCompliance engineSender, recipient, amountChecks recipient's country code against blocked listCountry code read from identity registry storage

Country allowlist configuration for geographic transfer restrictions

Use cases

Use caseModuleExample
MiCA EU complianceCountryAllowList27 EU member state codes
OFAC sanctions screeningCountryBlockListSanctioned jurisdiction codes
Reg D (US only)CountryAllowList[840] (United States)
Singapore MASCountryAllowList[702] (Singapore)
Japan FSACountryAllowList[392] (Japan)
UK FCACountryAllowList[826] (United Kingdom)

ISO 3166-1 numeric codes

Selected common codes:

CountryCode
United States840
United Kingdom826
Japan392
Singapore702
Germany276
France250

Full EU 27 member state codes are included in the MiCA EU Standard template. Use the full ISO 3166-1 numeric code list for other jurisdictions.

Key invariants

  • Country check applies to the recipient (buyer/transferee), not the sender
  • Country code must be set in the identity registry before any transfer is attempted
  • Using CountryAllowList and CountryBlockList together creates a combination restriction (both must pass)
  • An empty allow list blocks all transfers; an empty block list blocks none

Operational signals

No events emitted by these modules. Monitor for ComplianceCheckFailed revert errors in failed transactions when transfers violate country restrictions.

Failure modes & edge cases

  • Country code not set in identity registry — transfer reverts (recipient cannot be checked)
  • Sanctioned country added to block list after tokens already transferred — existing holders are not affected until they attempt a new transfer
  • Using both CountryAllowList and CountryBlockList creates a combination restriction — both must pass independently

See also

On this page