Skip to main content

Compliance Configuration

This guide covers setting up compliance rules and transfer restrictions for your RWA tokens.

Overview​

The compliance module enforces:

  • Maximum holder limits
  • Investment minimums/maximums
  • Accreditation requirements
  • Country restrictions
  • Lockup periods
  • Transfer limits

Basic Setup​

import { RWAClient } from '@mantle-rwa/sdk';

const client = new RWAClient({
network: 'mantle-sepolia',
privateKey: process.env.PRIVATE_KEY,
});

const compliance = client.compliance('0xComplianceAddress');

Configuring Rules​

Maximum Holders​

await compliance.setRule({
id: 'max_holders',
name: 'Maximum Holders',
type: 'max_holders',
enabled: true,
parameters: { maxHolders: 500 },
});

Investment Limits​

await compliance.setRule({
id: 'investment_limits',
name: 'Investment Limits',
type: 'min_max_investment',
enabled: true,
parameters: {
minInvestment: '1000',
maxInvestment: '100000',
},
});

Accreditation Requirements​

await compliance.setRule({
id: 'accreditation',
name: 'Accredited Investors Only',
type: 'accreditation',
enabled: true,
parameters: { minLevel: 'accredited' },
});

Country Restrictions​

await compliance.setCountryRestrictions({
mode: 'blocklist',
countries: ['CN', 'KP', 'IR', 'CU', 'SY'],
});

Lockup Period​

// 1 year lockup
await compliance.setLockupPeriod(365 * 24 * 60 * 60);

Checking Compliance​

const check = await compliance.canTransfer(
'0xFrom...',
'0xTo...',
'1000'
);

if (!check.allowed) {
console.log('Transfer blocked:', check.reason);
console.log('Failed rules:', check.failedRules);
}

Exemptions​

// Exempt an address from a rule
await compliance.exemptFromRule('0xAddress...', 'max_holders');

// Remove exemption
await compliance.removeExemption('0xAddress...', 'max_holders');

Compliance Reports​

const report = await compliance.generateReport();
console.log('Total holders:', report.totalHolders);
console.log('By country:', report.holdersByCountry);
console.log('Compliant:', report.summary.compliant);

See Also​