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);