SettleMint
ArchitectureSecurityCompliance Modules

Identity Lists

IdentityAllowList, IdentityBlockList, and AddressBlockList modules for granular access control. Covers private placement whitelists, sanctions screening, and the distinction between identity-level and address-level blocking.

Purpose: Reference for identity-based list compliance modules.


Where these modules apply

ConcernIdentityAllowListIdentityBlockListAddressBlockList
MintingChecks recipient identityChecks recipient identityChecks recipient address
TransfersChecks recipient identityChecks recipient identityChecks recipient address
Burns
Forced transfers

Modules

ModuleGranularityPurpose
IdentityAllowListIdentity contractWhitelist specific investors by OnchainID contract address
IdentityBlockListIdentity contractBlock specific investors by OnchainID contract address
AddressBlockListWallet addressBlock specific wallet addresses (without requiring identity)

Identity-level vs address-level

AspectIdentityAllowList / IdentityBlockListAddressBlockList
GranularityPer identity (investor)Per wallet address
Covers all walletsYes — one identity may have multiple walletsNo — wallet-specific
Requires identityYesNo
Bypassed by new walletNo — identity persists across walletsYes — new wallet address bypasses
Primary use casePrivate placements, institutional-onlySanctions lists (OFAC SDN), fraud prevention

When to block at identity vs address:

  • Identity-level blocking is more robust for compliance violations or legal disputes — it follows the investor across all their registered wallets
  • Address-level blocking is appropriate for immediate sanctions screening where speed matters and the specific wallet address is the sanctioned entity

Interface (capabilities)

IdentityAllowList

CapabilityWho can callInputsOn-chain effectEmitsNotes
setModuleParametersToken admin (via compliance)Array of OnchainID contract addressesStores allowed identity listEmpty list blocks all transfers
canTransferCompliance engineSender, recipient, amountChecks recipient's identity against allowed listIdentity resolved from registry

IdentityBlockList

CapabilityWho can callInputsOn-chain effectEmitsNotes
setModuleParametersToken admin (via compliance)Array of OnchainID contract addressesStores blocked identity listEmpty list blocks none
canTransferCompliance engineSender, recipient, amountChecks recipient's identity against blocked listIdentity resolved from registry

AddressBlockList

CapabilityWho can callInputsOn-chain effectEmitsNotes
setModuleParametersToken admin (via compliance)Array of wallet addressesStores blocked address listNo identity lookup required
canTransferCompliance engineSender, recipient, amountChecks recipient (_to) address against blocked listReverts with "Receiver address blocked"

Use cases

IdentityAllowList — private placement

Restrict a token to pre-approved investors by OnchainID address. Used for Reg D 506(b) private placements, institutional-only offerings, and friends-and-family rounds.

IdentityBlockList — compliance violations

Block a specific investor across all their wallets. Used for compliance alerts, failed re-KYC, and court orders.

AddressBlockList — sanctions screening

Block specific wallet addresses matching OFAC SDN or similar sanctions lists, known fraud addresses, or mixer/tumbler addresses flagged by on-chain analytics.

Key invariants

  • IdentityAllowList with an empty list blocks ALL transfers
  • IdentityBlockList with an empty list blocks NONE
  • AddressBlockList checks the recipient wallet address directly, without identity lookup
  • These modules can be combined: e.g., IdentityAllowList for private placement + AddressBlockList for OFAC screening

Operational signals

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

Failure modes & edge cases

  • IdentityAllowList with an empty list silently blocks all transfers — ensure the list is populated before activating
  • Adding an investor to IdentityBlockList does not freeze their existing balance — they cannot receive new tokens but can still transfer out (unless other modules block)
  • AddressBlockList can be bypassed by the blocked investor using a different wallet address — use IdentityBlockList for persistent blocking

See also

On this page