@mantle-rwa/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/client.js +198 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/constants/index.js +211 -0
- package/dist/cjs/constants/index.js.map +1 -0
- package/dist/cjs/errors/index.js +218 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/index.js +51 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/modules/compliance.js +202 -0
- package/dist/cjs/modules/compliance.js.map +1 -0
- package/dist/cjs/modules/index.js +18 -0
- package/dist/cjs/modules/index.js.map +1 -0
- package/dist/cjs/modules/kyc.js +278 -0
- package/dist/cjs/modules/kyc.js.map +1 -0
- package/dist/cjs/modules/token.js +365 -0
- package/dist/cjs/modules/token.js.map +1 -0
- package/dist/cjs/modules/yield.js +406 -0
- package/dist/cjs/modules/yield.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/types/index.js +20 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/utils/index.js +206 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/esm/client.js +194 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/constants/index.js +208 -0
- package/dist/esm/constants/index.js.map +1 -0
- package/dist/esm/errors/index.js +209 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/modules/compliance.js +198 -0
- package/dist/esm/modules/compliance.js.map +1 -0
- package/dist/esm/modules/index.js +8 -0
- package/dist/esm/modules/index.js.map +1 -0
- package/dist/esm/modules/kyc.js +273 -0
- package/dist/esm/modules/kyc.js.map +1 -0
- package/dist/esm/modules/token.js +360 -0
- package/dist/esm/modules/token.js.map +1 -0
- package/dist/esm/modules/yield.js +401 -0
- package/dist/esm/modules/yield.js.map +1 -0
- package/dist/esm/types/index.js +17 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/utils/index.js +188 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/types/client.d.ts +93 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/constants/index.d.ts +83 -0
- package/dist/types/constants/index.d.ts.map +1 -0
- package/dist/types/errors/index.d.ts +83 -0
- package/dist/types/errors/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/modules/compliance.d.ts +29 -0
- package/dist/types/modules/compliance.d.ts.map +1 -0
- package/dist/types/modules/index.d.ts +8 -0
- package/dist/types/modules/index.d.ts.map +1 -0
- package/dist/types/modules/kyc.d.ts +131 -0
- package/dist/types/modules/kyc.d.ts.map +1 -0
- package/dist/types/modules/token.d.ts +145 -0
- package/dist/types/modules/token.d.ts.map +1 -0
- package/dist/types/modules/yield.d.ts +143 -0
- package/dist/types/modules/yield.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +254 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +80 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/package.json +52 -0
- package/src/client.ts +258 -0
- package/src/constants/index.ts +226 -0
- package/src/errors/index.ts +291 -0
- package/src/index.ts +42 -0
- package/src/modules/compliance.ts +252 -0
- package/src/modules/index.ts +8 -0
- package/src/modules/kyc.ts +446 -0
- package/src/modules/token.ts +488 -0
- package/src/modules/yield.ts +566 -0
- package/src/types/index.ts +326 -0
- package/src/utils/index.ts +240 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mantle-rwa/sdk
|
|
3
|
+
* TypeScript SDK for Real-World Asset tokenization on Mantle Network
|
|
4
|
+
*/
|
|
5
|
+
// Core client
|
|
6
|
+
export { RWAClient } from './client.js';
|
|
7
|
+
// Modules
|
|
8
|
+
export { TokenModule, TokenInstance, KYCModule, KYCRegistryInstance, YieldModule, YieldDistributorInstance, ComplianceModule, } from './modules/index.js';
|
|
9
|
+
// Types
|
|
10
|
+
export * from './types/index.js';
|
|
11
|
+
// Errors
|
|
12
|
+
export * from './errors/index.js';
|
|
13
|
+
// Constants
|
|
14
|
+
export * from './constants/index.js';
|
|
15
|
+
// Utilities
|
|
16
|
+
export { isValidAddress, normalizeAddress, parseAmount, formatAmount, hashIdentityData, timestampToDate, dateToTimestamp, isExpired, calculatePercentage, } from './utils/index.js';
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,UAAU;AACV,OAAO,EACH,WAAW,EACX,aAAa,EACb,SAAS,EACT,mBAAmB,EACnB,WAAW,EACX,wBAAwB,EACxB,gBAAgB,GACnB,MAAM,WAAW,CAAC;AAGnB,QAAQ;AACR,cAAc,SAAS,CAAC;AAExB,SAAS;AACT,cAAc,UAAU,CAAC;AAEzB,YAAY;AACZ,cAAc,aAAa,CAAC;AAE5B,YAAY;AACZ,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,SAAS,EACT,mBAAmB,GACtB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ComplianceModule - Handles transfer eligibility and compliance reporting
|
|
3
|
+
*/
|
|
4
|
+
import { ethers } from 'ethers';
|
|
5
|
+
import { RWA_TOKEN_ABI, KYC_REGISTRY_ABI } from '../constants/index.js';
|
|
6
|
+
import { RWAError, ErrorCode } from '../errors/index.js';
|
|
7
|
+
import { isValidAddress, normalizeAddress, parseAmount } from '../utils/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Module for compliance operations
|
|
10
|
+
*/
|
|
11
|
+
export class ComplianceModule {
|
|
12
|
+
_provider;
|
|
13
|
+
constructor(provider, _signer) {
|
|
14
|
+
this._provider = provider;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Check if a transfer is eligible
|
|
18
|
+
*/
|
|
19
|
+
async checkTransferEligibility(tokenAddress, from, to, amount) {
|
|
20
|
+
if (!isValidAddress(tokenAddress)) {
|
|
21
|
+
throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid token address: ${tokenAddress}`);
|
|
22
|
+
}
|
|
23
|
+
if (!isValidAddress(from)) {
|
|
24
|
+
throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid from address: ${from}`);
|
|
25
|
+
}
|
|
26
|
+
if (!isValidAddress(to)) {
|
|
27
|
+
throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid to address: ${to}`);
|
|
28
|
+
}
|
|
29
|
+
const token = new ethers.Contract(tokenAddress, RWA_TOKEN_ABI, this._provider);
|
|
30
|
+
const checks = [];
|
|
31
|
+
// Check 1: Token not paused
|
|
32
|
+
try {
|
|
33
|
+
const paused = await token.paused();
|
|
34
|
+
checks.push({
|
|
35
|
+
name: 'Token Active',
|
|
36
|
+
passed: !paused,
|
|
37
|
+
details: paused ? 'Token transfers are currently paused' : 'Token is active',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
checks.push({
|
|
42
|
+
name: 'Token Active',
|
|
43
|
+
passed: false,
|
|
44
|
+
details: 'Unable to check pause status',
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Check 2: Sender has sufficient balance
|
|
48
|
+
try {
|
|
49
|
+
const balance = await token.balanceOf(normalizeAddress(from));
|
|
50
|
+
const amountWei = parseAmount(amount);
|
|
51
|
+
const hasBalance = balance >= amountWei;
|
|
52
|
+
checks.push({
|
|
53
|
+
name: 'Sufficient Balance',
|
|
54
|
+
passed: hasBalance,
|
|
55
|
+
details: hasBalance
|
|
56
|
+
? `Balance: ${balance.toString()}`
|
|
57
|
+
: `Insufficient balance. Has: ${balance.toString()}, Needs: ${amountWei.toString()}`,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
checks.push({
|
|
62
|
+
name: 'Sufficient Balance',
|
|
63
|
+
passed: false,
|
|
64
|
+
details: 'Unable to check balance',
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
// Check 3: KYC verification for sender and recipient
|
|
68
|
+
try {
|
|
69
|
+
const kycRegistryAddress = await token.kycRegistry();
|
|
70
|
+
if (kycRegistryAddress !== ethers.ZeroAddress) {
|
|
71
|
+
const kycRegistry = new ethers.Contract(kycRegistryAddress, KYC_REGISTRY_ABI, this._provider);
|
|
72
|
+
// Check sender (skip for minting from zero address)
|
|
73
|
+
if (from !== ethers.ZeroAddress) {
|
|
74
|
+
const senderVerified = await kycRegistry.isVerified(normalizeAddress(from));
|
|
75
|
+
checks.push({
|
|
76
|
+
name: 'Sender KYC Verified',
|
|
77
|
+
passed: senderVerified,
|
|
78
|
+
details: senderVerified
|
|
79
|
+
? 'Sender is KYC verified'
|
|
80
|
+
: 'Sender is not KYC verified or verification has expired',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// Check recipient
|
|
84
|
+
const recipientVerified = await kycRegistry.isVerified(normalizeAddress(to));
|
|
85
|
+
checks.push({
|
|
86
|
+
name: 'Recipient KYC Verified',
|
|
87
|
+
passed: recipientVerified,
|
|
88
|
+
details: recipientVerified
|
|
89
|
+
? 'Recipient is KYC verified'
|
|
90
|
+
: 'Recipient is not KYC verified or verification has expired',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
checks.push({
|
|
96
|
+
name: 'KYC Verification',
|
|
97
|
+
passed: false,
|
|
98
|
+
details: 'Unable to check KYC status',
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// Check 4: Compliance modules
|
|
102
|
+
try {
|
|
103
|
+
const [allowed, reason] = await token.isTransferAllowed(normalizeAddress(from), normalizeAddress(to), parseAmount(amount));
|
|
104
|
+
checks.push({
|
|
105
|
+
name: 'Compliance Modules',
|
|
106
|
+
passed: allowed,
|
|
107
|
+
details: allowed ? 'All compliance checks passed' : reason,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
checks.push({
|
|
112
|
+
name: 'Compliance Modules',
|
|
113
|
+
passed: false,
|
|
114
|
+
details: 'Unable to check compliance modules',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
// Determine overall eligibility
|
|
118
|
+
const allPassed = checks.every((c) => c.passed);
|
|
119
|
+
const failedCheck = checks.find((c) => !c.passed);
|
|
120
|
+
return {
|
|
121
|
+
eligible: allPassed,
|
|
122
|
+
reason: allPassed ? undefined : failedCheck?.details,
|
|
123
|
+
checks,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Generate a compliance report for a token
|
|
128
|
+
*/
|
|
129
|
+
async generateComplianceReport(tokenAddress) {
|
|
130
|
+
if (!isValidAddress(tokenAddress)) {
|
|
131
|
+
throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid token address: ${tokenAddress}`);
|
|
132
|
+
}
|
|
133
|
+
const token = new ethers.Contract(tokenAddress, RWA_TOKEN_ABI, this._provider);
|
|
134
|
+
// Get KYC registry - verify it exists
|
|
135
|
+
try {
|
|
136
|
+
await token.kycRegistry();
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
throw new RWAError(ErrorCode.INVALID_CONFIGURATION, 'Unable to get KYC registry from token contract');
|
|
140
|
+
}
|
|
141
|
+
// Note: In a production implementation, this would require an indexer
|
|
142
|
+
// to track all token holders and their KYC status. This is a simplified
|
|
143
|
+
// version that returns placeholder data.
|
|
144
|
+
const report = {
|
|
145
|
+
generatedAt: new Date(),
|
|
146
|
+
tokenAddress: normalizeAddress(tokenAddress),
|
|
147
|
+
totalHolders: 0, // Would need indexer
|
|
148
|
+
verifiedHolders: 0, // Would need indexer
|
|
149
|
+
accreditedHolders: 0, // Would need indexer
|
|
150
|
+
transfersBlocked: 0, // Would need event indexing
|
|
151
|
+
complianceScore: 100, // Placeholder
|
|
152
|
+
};
|
|
153
|
+
return report;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Export a compliance report in various formats
|
|
157
|
+
*/
|
|
158
|
+
async exportReport(report, format) {
|
|
159
|
+
switch (format) {
|
|
160
|
+
case 'json':
|
|
161
|
+
return Buffer.from(JSON.stringify(report, null, 2));
|
|
162
|
+
case 'csv': {
|
|
163
|
+
const headers = Object.keys(report).join(',');
|
|
164
|
+
const values = Object.values(report)
|
|
165
|
+
.map((v) => (v instanceof Date ? v.toISOString() : String(v)))
|
|
166
|
+
.join(',');
|
|
167
|
+
return Buffer.from(`${headers}\n${values}`);
|
|
168
|
+
}
|
|
169
|
+
case 'pdf':
|
|
170
|
+
// PDF generation would require a library like pdfkit
|
|
171
|
+
throw new RWAError(ErrorCode.INVALID_CONFIGURATION, 'PDF export requires additional dependencies. Use JSON or CSV format.');
|
|
172
|
+
default:
|
|
173
|
+
throw new RWAError(ErrorCode.INVALID_CONFIGURATION, `Unsupported export format: ${format}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Prepare filing data for regulatory submissions
|
|
178
|
+
*/
|
|
179
|
+
async prepareFilingData(tokenAddress, filingType, startDate, endDate) {
|
|
180
|
+
const report = await this.generateComplianceReport(tokenAddress);
|
|
181
|
+
return {
|
|
182
|
+
filingType,
|
|
183
|
+
tokenAddress: normalizeAddress(tokenAddress),
|
|
184
|
+
reportingPeriod: {
|
|
185
|
+
start: startDate || new Date(Date.now() - 30 * 24 * 60 * 60 * 1000), // Default: 30 days ago
|
|
186
|
+
end: endDate || new Date(),
|
|
187
|
+
},
|
|
188
|
+
data: {
|
|
189
|
+
totalHolders: report.totalHolders,
|
|
190
|
+
verifiedHolders: report.verifiedHolders,
|
|
191
|
+
accreditedHolders: report.accreditedHolders,
|
|
192
|
+
complianceScore: report.complianceScore,
|
|
193
|
+
generatedAt: report.generatedAt.toISOString(),
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=compliance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance.js","sourceRoot":"","sources":["../../../src/modules/compliance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK Modules
|
|
3
|
+
*/
|
|
4
|
+
export { TokenModule, TokenInstance } from './token.js';
|
|
5
|
+
export { KYCModule, KYCRegistryInstance } from './kyc.js';
|
|
6
|
+
export { YieldModule, YieldDistributorInstance } from './yield.js';
|
|
7
|
+
export { ComplianceModule } from './compliance.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAoB,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KYCModule - Handles KYC registry interactions and provider integrations
|
|
3
|
+
*/
|
|
4
|
+
import { ethers } from 'ethers';
|
|
5
|
+
import { KYC_REGISTRY_ABI } from '../constants/index.js';
|
|
6
|
+
import { RWAError, ErrorCode, parseContractError } from '../errors/index.js';
|
|
7
|
+
import { isValidAddress, normalizeAddress, parseEvents, createTransactionResult, retry, estimateGasWithBuffer, timestampToDate, dateToTimestamp, hashIdentityData, } from '../utils/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Instance of a connected KYC registry
|
|
10
|
+
*/
|
|
11
|
+
export class KYCRegistryInstance {
|
|
12
|
+
_contract;
|
|
13
|
+
_retries;
|
|
14
|
+
_retryDelay;
|
|
15
|
+
/** Registry contract address */
|
|
16
|
+
address;
|
|
17
|
+
constructor(address, provider, signer, retries, retryDelay) {
|
|
18
|
+
this.address = normalizeAddress(address);
|
|
19
|
+
this._retries = retries;
|
|
20
|
+
this._retryDelay = retryDelay;
|
|
21
|
+
this._contract = new ethers.Contract(this.address, KYC_REGISTRY_ABI, signer || provider);
|
|
22
|
+
}
|
|
23
|
+
/*//////////////////////////////////////////////////////////////
|
|
24
|
+
READ FUNCTIONS
|
|
25
|
+
//////////////////////////////////////////////////////////////*/
|
|
26
|
+
/**
|
|
27
|
+
* Check if an investor is verified
|
|
28
|
+
*/
|
|
29
|
+
async isVerified(investor) {
|
|
30
|
+
return this._contract.isVerified(normalizeAddress(investor));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if an investor is accredited
|
|
34
|
+
*/
|
|
35
|
+
async isAccredited(investor) {
|
|
36
|
+
return this._contract.isAccredited(normalizeAddress(investor));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get investor information
|
|
40
|
+
*/
|
|
41
|
+
async getInvestorInfo(investor) {
|
|
42
|
+
const [verified, tier, expiry, identityHash] = await this._contract.getInvestorInfo(normalizeAddress(investor));
|
|
43
|
+
return {
|
|
44
|
+
verified,
|
|
45
|
+
tier: tier,
|
|
46
|
+
expiry: timestampToDate(expiry),
|
|
47
|
+
identityHash,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/*//////////////////////////////////////////////////////////////
|
|
51
|
+
WRITE FUNCTIONS
|
|
52
|
+
//////////////////////////////////////////////////////////////*/
|
|
53
|
+
/**
|
|
54
|
+
* Add an investor to the registry
|
|
55
|
+
*/
|
|
56
|
+
async addInvestor(investor, tier, expiryDate, identityHash, options) {
|
|
57
|
+
const investorAddress = normalizeAddress(investor);
|
|
58
|
+
const expiryTimestamp = dateToTimestamp(expiryDate);
|
|
59
|
+
try {
|
|
60
|
+
const tx = await retry(async () => {
|
|
61
|
+
const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.addInvestor.estimateGas(investorAddress, tier, expiryTimestamp, identityHash));
|
|
62
|
+
return this._contract.addInvestor(investorAddress, tier, expiryTimestamp, identityHash, { gasLimit });
|
|
63
|
+
}, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
|
|
64
|
+
const receipt = await tx.wait();
|
|
65
|
+
const events = parseEvents(receipt, this._contract.interface);
|
|
66
|
+
return createTransactionResult(receipt, events);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw parseContractError(error, this.address, 'addInvestor');
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Update an investor's information
|
|
74
|
+
*/
|
|
75
|
+
async updateInvestor(investor, tier, expiryDate, options) {
|
|
76
|
+
const investorAddress = normalizeAddress(investor);
|
|
77
|
+
const expiryTimestamp = dateToTimestamp(expiryDate);
|
|
78
|
+
try {
|
|
79
|
+
const tx = await retry(async () => {
|
|
80
|
+
const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.updateInvestor.estimateGas(investorAddress, tier, expiryTimestamp));
|
|
81
|
+
return this._contract.updateInvestor(investorAddress, tier, expiryTimestamp, { gasLimit });
|
|
82
|
+
}, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
|
|
83
|
+
const receipt = await tx.wait();
|
|
84
|
+
const events = parseEvents(receipt, this._contract.interface);
|
|
85
|
+
return createTransactionResult(receipt, events);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
throw parseContractError(error, this.address, 'updateInvestor');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Remove an investor from the registry
|
|
93
|
+
*/
|
|
94
|
+
async removeInvestor(investor, options) {
|
|
95
|
+
const investorAddress = normalizeAddress(investor);
|
|
96
|
+
try {
|
|
97
|
+
const tx = await retry(async () => {
|
|
98
|
+
const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.removeInvestor.estimateGas(investorAddress));
|
|
99
|
+
return this._contract.removeInvestor(investorAddress, { gasLimit });
|
|
100
|
+
}, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
|
|
101
|
+
const receipt = await tx.wait();
|
|
102
|
+
const events = parseEvents(receipt, this._contract.interface);
|
|
103
|
+
return createTransactionResult(receipt, events);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
throw parseContractError(error, this.address, 'removeInvestor');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Batch add investors
|
|
111
|
+
*/
|
|
112
|
+
async batchAddInvestors(investors, options) {
|
|
113
|
+
const addresses = investors.map((i) => normalizeAddress(i.address));
|
|
114
|
+
const tiers = investors.map((i) => i.tier);
|
|
115
|
+
const expiries = investors.map((i) => dateToTimestamp(i.expiryDate));
|
|
116
|
+
const hashes = investors.map((i) => i.identityHash);
|
|
117
|
+
try {
|
|
118
|
+
const tx = await retry(async () => {
|
|
119
|
+
const gasLimit = options?.gasLimit || await estimateGasWithBuffer(() => this._contract.batchAddInvestors.estimateGas(addresses, tiers, expiries, hashes));
|
|
120
|
+
return this._contract.batchAddInvestors(addresses, tiers, expiries, hashes, { gasLimit });
|
|
121
|
+
}, { retries: options?.retries ?? this._retries, delay: options?.retryDelay ?? this._retryDelay });
|
|
122
|
+
const receipt = await tx.wait();
|
|
123
|
+
const events = parseEvents(receipt, this._contract.interface);
|
|
124
|
+
return createTransactionResult(receipt, events);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw parseContractError(error, this.address, 'batchAddInvestors');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/*//////////////////////////////////////////////////////////////
|
|
131
|
+
EVENT LISTENERS
|
|
132
|
+
//////////////////////////////////////////////////////////////*/
|
|
133
|
+
/**
|
|
134
|
+
* Listen for InvestorVerified events
|
|
135
|
+
*/
|
|
136
|
+
onInvestorVerified(callback) {
|
|
137
|
+
const listener = (investor, tier, expiry) => {
|
|
138
|
+
callback(investor, tier, expiry);
|
|
139
|
+
};
|
|
140
|
+
this._contract.on('InvestorVerified', listener);
|
|
141
|
+
return () => this._contract.off('InvestorVerified', listener);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Listen for InvestorRemoved events
|
|
145
|
+
*/
|
|
146
|
+
onInvestorRemoved(callback) {
|
|
147
|
+
const listener = (investor) => callback(investor);
|
|
148
|
+
this._contract.on('InvestorRemoved', listener);
|
|
149
|
+
return () => this._contract.off('InvestorRemoved', listener);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Listen for InvestorUpdated events
|
|
153
|
+
*/
|
|
154
|
+
onInvestorUpdated(callback) {
|
|
155
|
+
const listener = (investor, newTier, newExpiry) => {
|
|
156
|
+
callback(investor, newTier, newExpiry);
|
|
157
|
+
};
|
|
158
|
+
this._contract.on('InvestorUpdated', listener);
|
|
159
|
+
return () => this._contract.off('InvestorUpdated', listener);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Module for KYC operations
|
|
164
|
+
*/
|
|
165
|
+
export class KYCModule {
|
|
166
|
+
_provider;
|
|
167
|
+
_signer;
|
|
168
|
+
_retries;
|
|
169
|
+
_retryDelay;
|
|
170
|
+
_kycProvider = null;
|
|
171
|
+
constructor(provider, signer, retries, retryDelay) {
|
|
172
|
+
this._provider = provider;
|
|
173
|
+
this._signer = signer;
|
|
174
|
+
this._retries = retries;
|
|
175
|
+
this._retryDelay = retryDelay;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Connect to an existing KYC registry
|
|
179
|
+
*/
|
|
180
|
+
connect(address) {
|
|
181
|
+
if (!isValidAddress(address)) {
|
|
182
|
+
throw new RWAError(ErrorCode.INVALID_ADDRESS, `Invalid registry address: ${address}`);
|
|
183
|
+
}
|
|
184
|
+
return new KYCRegistryInstance(address, this._provider, this._signer, this._retries, this._retryDelay);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Set the KYC provider
|
|
188
|
+
*/
|
|
189
|
+
setProvider(provider) {
|
|
190
|
+
if (typeof provider === 'string') {
|
|
191
|
+
// Create stub provider for built-in providers
|
|
192
|
+
this._kycProvider = this._createBuiltInProvider(provider);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this._kycProvider = provider;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get the current KYC provider
|
|
200
|
+
*/
|
|
201
|
+
get provider() {
|
|
202
|
+
return this._kycProvider;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Initiate verification for an investor
|
|
206
|
+
*/
|
|
207
|
+
async verifyInvestor(investorAddress, options) {
|
|
208
|
+
if (!this._kycProvider) {
|
|
209
|
+
throw new RWAError(ErrorCode.PROVIDER_NOT_CONFIGURED, 'KYC provider not configured. Call setProvider() first.');
|
|
210
|
+
}
|
|
211
|
+
return this._kycProvider.initiateVerification(investorAddress, options);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Check accreditation status
|
|
215
|
+
*/
|
|
216
|
+
async checkAccreditation(registryAddress, investorAddress) {
|
|
217
|
+
const registry = this.connect(registryAddress);
|
|
218
|
+
const info = await registry.getInvestorInfo(investorAddress);
|
|
219
|
+
return info.tier;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Update registry with verification result
|
|
223
|
+
*/
|
|
224
|
+
async updateRegistry(registryAddress, investorAddress, result) {
|
|
225
|
+
const registry = this.connect(registryAddress);
|
|
226
|
+
return registry.addInvestor(investorAddress, result.tier, result.expiryDate, result.identityHash);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Batch update registry with multiple verification results
|
|
230
|
+
*/
|
|
231
|
+
async batchUpdateRegistry(registryAddress, results) {
|
|
232
|
+
const registry = this.connect(registryAddress);
|
|
233
|
+
const investors = results.map((r) => ({
|
|
234
|
+
address: r.address,
|
|
235
|
+
tier: r.result.tier,
|
|
236
|
+
expiryDate: r.result.expiryDate,
|
|
237
|
+
identityHash: r.result.identityHash,
|
|
238
|
+
}));
|
|
239
|
+
return registry.batchAddInvestors(investors);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Generate identity hash from data
|
|
243
|
+
*/
|
|
244
|
+
generateIdentityHash(data) {
|
|
245
|
+
return hashIdentityData(data);
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create a built-in provider stub
|
|
249
|
+
*/
|
|
250
|
+
_createBuiltInProvider(name) {
|
|
251
|
+
return {
|
|
252
|
+
name,
|
|
253
|
+
initiateVerification: async (investorAddress) => {
|
|
254
|
+
// Stub implementation - in production, this would call the actual provider API
|
|
255
|
+
return {
|
|
256
|
+
sessionId: `${name}-${Date.now()}-${investorAddress.slice(2, 10)}`,
|
|
257
|
+
provider: name,
|
|
258
|
+
status: 'pending',
|
|
259
|
+
redirectUrl: `https://${name}.com/verify?session=${Date.now()}`,
|
|
260
|
+
};
|
|
261
|
+
},
|
|
262
|
+
checkStatus: async () => {
|
|
263
|
+
// Stub implementation
|
|
264
|
+
return 'pending';
|
|
265
|
+
},
|
|
266
|
+
getVerificationResult: async () => {
|
|
267
|
+
// Stub implementation
|
|
268
|
+
throw new RWAError(ErrorCode.PROVIDER_NOT_CONFIGURED, `${name} provider integration requires API credentials. Configure the provider with your API keys.`);
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=kyc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kyc.js","sourceRoot":"","sources":["../../../src/modules/kyc.ts"],"names":[],"mappings":"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"}
|