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.

Country restrictions let an asset accept or reject token recipients based on the country code stored on the recipient's identity. DALP evaluates these controls before minting or transferring regulated tokens.

Use CountryAllowList when only selected jurisdictions may receive the asset. Use CountryBlockList when selected jurisdictions must be blocked while the rest remain eligible.

Decide which country control to use

Policy goalUse this moduleResult
Limit distribution to a defined marketCountryAllowListRecipients must have one of the configured ISO 3166-1 numeric country codes
Exclude sanctioned or unsupported jurisdictionsCountryBlockListRecipients must not have one of the configured blocked country codes
Combine permitted and prohibited jurisdictionsBoth modules togetherThe recipient must pass both checks before DALP allows the token operation

Country modules check the recipient's country code from identity registry storage. The recipient must already have a registered identity with a non-zero country code before DALP can evaluate the module.

Where these modules apply

OperationCountryAllowListCountryBlockList
MintingChecks recipient countryChecks recipient country
TransfersChecks recipient countryChecks recipient country
BurnsNot applicableNot applicable
Forced transfersNot applicableNot applicable

Configure country restrictions

  1. Choose the asset's policy requirement: allow only selected countries, block selected countries, or combine both.
  2. Convert each jurisdiction to its ISO 3166-1 numeric country code.
  3. Add the chosen country module when configuring the asset's compliance controls.
  4. Enter the country-code list for that module.
  5. Verify the recipient identity records have the expected country code before minting or transferring tokens.
  6. Test with one eligible recipient and one ineligible recipient before opening the asset to wider operations.

Interface (capabilities)

CountryAllowList

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

CountryBlockList

CapabilityWho can callInputsOn-chain effectEmitsNotes
setModuleParametersToken admin (via compliance)Array of blocked country codesStores blocked country listNoneEmpty list permits known-country recipients
canTransferCompliance engineSender, recipient, amountChecks recipient's country code against blocked listNoneUnknown identity or country still fails

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, not the sender
  • The recipient must have a registered identity and a non-zero country code before the module can approve the operation
  • Using CountryAllowList and CountryBlockList together creates a combination restriction, so both modules must pass
  • An empty allow list blocks all recipients; an empty block list permits recipients with known countries

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

  • Recipient identity not registered: the operation reverts with ComplianceCheckFailed("Receiver identity unknown")
  • Recipient country code not set or stored as zero: the operation reverts with ComplianceCheckFailed("Receiver identity unknown")
  • CountryAllowList does not include the recipient country: the operation reverts with ComplianceCheckFailed("Receiver country not allowed")
  • CountryBlockList includes the recipient country: the operation reverts with ComplianceCheckFailed("Receiver country blocked")
  • 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, so both must pass independently

See also

On this page