פיתוח מערכת בעלות חלקית על נכסים
יש לך נכס בשווי 5 מיליון דולר — נדל"ן מסחרי, יצירת אמנות או תיק השקעות פרטי. קונה אחד לא יכול או לא רוצה לרכוש אותו במלואו. המטרה: לפצל את זכויות הבעלות ולמכור אותן למאות משקיעים. כל משקיע חייב לקבל זכויות ניתנות לאימות, לקבל את חלקו בהכנסות ולהיות מסוגל למכור את חלקו בשוק משני. אנחנו צוות פיתוח בלוקצ'יין עם ניסיון של 5+ שנים ב-DeFi ובאסימוני ניירות ערך. רקורד שלנו כולל למעלה מ-10 פרויקטים שהושלמו של טוקניזציה של נכסים. בואו נעבור על איך לבנות ארכיטקטורה שעומדת בדרישות משפטיות וטכניות. אנו מציעים פתרון turnkey מלא: מהמבנה המשפטי ועד השקת שוק משני.
למה בלי מבנה משפטי האסימון שלך שווה כלום
הדבר הראשון שעליך לעשות לפני כתיבת שורת קוד אחת הוא להגדיר את המעטפת המשפטית. אסימון כשלעצמו אינו מהווה בעלות על הנכס. אתה צריך גשר משפטי בין האסימון על השרשרת לבין הנכס מחוץ לשרשרת.
שלושה מבנים נפוצים:
- SPV (רכב ייעודי) — ישות משפטית מחזיקה בנכס; המשקיעים מחזיקים באסימונים המייצגים מניות ב-SPV. מתאים לנדל"ן ברוב תחומי השיפוט. ה-SPV יכול להיות LLC, Ltd או LP. האסימונים הם אסימוני ניירות ערך ודורשים רישוי.
- מבנה נאמנות — הנכס מוחזק בנאמנות; זכויות המוטב עוברות טוקניזציה. פופולרי לאמנות ופריטי אספנות. הנאמן מנהל את הנכס; המוטבים מקבלים הכנסה.
- DAO LLC (ויומינג, איי מרשל) — ל-DAO יש מעמד משפטי כ-LLC. אסימוני ממשל מייצגים זכויות חברות. חדשני, אך הפסיקה עדיין מוגבלת.
בלי מבנה משפטי, המשקיעים קונים אסימון שמייצג הבטחה, לא זכות מחייבת מבחינה משפטית. לפי Reg D Rule 504, המספר המרבי של בעלי מניות הוא 1800.
איך החוזה החכם של האסימון החלקי עובד
רישום נכסים
contract AssetRegistry {
enum AssetType { RealEstate, Art, PrivateEquity, Commodity, Other }
enum AssetStatus { Pending, Active, Paused, Liquidating, Closed }
struct Asset {
bytes32 assetId;
AssetType assetType;
AssetStatus status;
string legalEntityId; // ID юридического лица (SPV/Trust)
string documentationURI; // IPFS CID юридических документов
bytes32 documentationHash; // SHA-256 хэш для верификации
uint256 totalValuation; // текущая оценка в USD (6 decimals)
uint256 totalShares; // общее количество долей
address fractionalToken; // ERC-20 токен доли
address distributionContract; // контракт для выплат дохода
uint256 createdAt;
uint256 lastValuationAt;
}
mapping(bytes32 => Asset) public assets;
// Только верифицированные asset managers могут регистрировать
function registerAsset(
bytes32 assetId,
AssetType assetType,
string calldata legalEntityId,
string calldata documentationURI,
bytes32 documentationHash,
uint256 totalValuation,
uint256 totalShares
) external onlyAssetManager returns (address fractionalToken) {
require(assets[assetId].createdAt == 0, "Asset already exists");
// Деплоим фракциональный токен
fractionalToken = _deployFractionalToken(assetId, totalShares);
// Деплоим контракт дистрибуции
address distributionContract = _deployDistribution(assetId, fractionalToken);
assets[assetId] = Asset({
assetId: assetId,
assetType: assetType,
status: AssetStatus.Pending,
legalEntityId: legalEntityId,
documentationURI: documentationURI,
documentationHash: documentationHash,
totalValuation: totalValuation,
totalShares: totalShares,
fractionalToken: fractionalToken,
distributionContract: distributionContract,
createdAt: block.timestamp,
lastValuationAt: block.timestamp
});
emit AssetRegistered(assetId, fractionalToken, msg.sender);
return fractionalToken;
}
} אסימון חלקי: ERC-20 עם הגבלות העברה
זה לא ERC-20 סטנדרטי. אסימוני ניירות ערך דורשים הגבלות העברה — אי אפשר למכור לכתובות לא מאומתות. השתמש בתקן ERC-1400 או ב-ERC-20 פשוט יותר עם רשימת היתרים.
contract FractionalToken is ERC20, ERC20Permit {
ITransferValidator public transferValidator;
bytes32 public immutable assetId;
// Максимум 1800 держателей (лимит Reg D Rule 504 в US)
uint256 public constant MAX_HOLDERS = 1800;
uint256 public holderCount;
mapping(address => bool) private _isHolder;
modifier onlyCompliantTransfer(address from, address to, uint256 amount) {
require(
transferValidator.canTransfer(from, to, assetId, amount),
"Transfer not compliant"
);
_;
}
function transfer(address to, uint256 amount) public override onlyCompliantTransfer(msg.sender, to, amount) returns (bool) {
_updateHolderCount(msg.sender, to, amount);
return super.transfer(to, amount);
}
function _updateHolderCount(address from, address to, uint256 amount) internal {
bool toIsNewHolder = !_isHolder[to] && amount > 0;
bool fromBecomesEmpty = balanceOf(from) == amount;
if (toIsNewHolder) {
require(holderCount < MAX_HOLDERS, "Max holders reached");
_isHolder[to] = true;
holderCount++;
}
if (fromBecomesEmpty && from != address(0)) {
_isHolder[from] = false;
holderCount--;
}
}
}ה-TransferValidator בודק: שתי הכתובות עברו KYC, יש להן מעמד משקיע מוסמך, הן לא ברשימת OFAC SDN, והן עומדות בתקופות נעילה (בדרך כלל 12 חודשים). ERC-1400 מגדיר את תקן אסימוני ניירות הערך עם הגבלות העברה. מידע נוסף על התקן ניתן למצוא במפרט ב-GitHub.
איך לחלק הכנסות אוטומטית?
הנכס מייצר הכנסה: שכר דירה מנדל"ן, דיבידנדים מהון. צריך לחלק אותה באופן יחסי לבעלי המניות ללא איטרציה O(N). הפתרון — מעקב דיבידנד-למניה (אלגוריתם מתגמולי סטייקינג, שנבדק בקרב על מיליארדי TVL).
contract DistributionVault {
IERC20 public immutable fractionalToken;
IERC20 public immutable distributionToken; // USDC
uint256 public dividendPerShare; // накопленный дивиденд на долю (scaled by 1e18)
mapping(address => uint256) public lastDividendPerShare;
mapping(address => uint256) public pendingDividends;
// Вызывается когда поступает новый доход (рента, дивиденды)
function distributeIncome(uint256 amount) external onlyAssetManager {
distributionToken.transferFrom(msg.sender, address(this), amount);
uint256 totalShares = fractionalToken.totalSupply();
require(totalShares > 0, "No shares");
// Увеличиваем dividendPerShare пропорционально
dividendPerShare += (amount * 1e18) / totalShares;
emit IncomeDistributed(amount, dividendPerShare);
}
// Накапливаем pending дивиденды при каждом движении токена
function _updateDividend(address account) internal {
uint256 owed = ( (dividendPerShare - lastDividendPerShare[account]) * fractionalToken.balanceOf(account) ) / 1e18;
pendingDividends[account] += owed;
lastDividendPerShare[account] = dividendPerShare;
}
// Держатель забирает накопленные дивиденды
function claimDividends() external {
_updateDividend(msg.sender);
uint256 amount = pendingDividends[msg.sender];
require(amount > 0, "Nothing to claim");
pendingDividends[msg.sender] = 0;
distributionToken.transfer(msg.sender, amount);
emit DividendsClaimed(msg.sender, amount);
}
}האלגוריתם הוא O(1) לכל תביעה — ללא קשר למספר המחזיקים. חבר לאסימון החלקי: בכל העברה, קרא ל-contract AssetRegistry { enum AssetType { RealEstate, Art, PrivateEquity, Commodity, Other } enum AssetStatus { Pending, Active, Paused, Liquidating, Closed } struct Asset { bytes32 assetId; AssetType assetType; AssetStatus status; string legalEntityId; // ID юридического лица (SPV/Trust) string documentationURI; // IPFS CID юридических документов bytes32 documentationHash; // SHA-256 хэш для верификации uint256 totalValuation; // текущая оценка в USD (6 decimals) uint256 totalShares; // общее количество долей address fractionalToken; // ERC-20 токен доли address distributionContract; // контракт для выплат дохода uint256 createdAt; uint256 lastValuationAt; } mapping(bytes32 => Asset) public assets; // Только верифицированные asset managers могут регистрировать function registerAsset( bytes32 assetId, AssetType assetType, string calldata legalEntityId, string calldata documentationURI, bytes32 documentationHash, uint256 totalValuation, uint256 totalShares ) external onlyAssetManager returns (address fractionalToken) { require(assets[assetId].createdAt == 0, "Asset already exists"); // Деплоим фракциональный токен fractionalToken = _deployFractionalToken(assetId, totalShares); // Деплоим контракт дистрибуции address distributionContract = _deployDistribution(assetId, fractionalToken); assets[assetId] = Asset({ assetId: assetId, assetType: assetType, status: AssetStatus.Pending, legalEntityId: legalEntityId, documentationURI: documentationURI, documentationHash: documentationHash, totalValuation: totalValuation, totalShares: totalShares, fractionalToken: fractionalToken, distributionContract: distributionContract, createdAt: block.timestamp, lastValuationAt: block.timestamp }); emit AssetRegistered(assetId, fractionalToken, msg.sender); return fractionalToken; } } עבור שני הצדדים.
שוק משני
אינטגרציה עם DEX ו-Orderbook
למסחר באסימונים חלקיים, אתה צריך DEX תואם — Uniswap רגיל לא בודק KYC של הקונה. אפשרויות:
- AMM מורשה — פיצול של Uniswap v3 עם בדיקות רשימת היתרים ב-hook של ההחלפה.
- Orderbook OTC — התאמה מחוץ לשרשרת עם סילוק על השרשרת. יעיל יותר לנכסים לא נזילים שבהם AMM ייתן החלקה גבוהה.
- tZERO, RealT, Securitize Markets — פלטפורמות מסחר מוסדרות מוכנות לאסימוני ניירות ערך. שלב את האסימונים שלך שם במקום לבנות DEX משלך.
עדכוני הערכת שווי נכסים
עבור נדל"ן ונכסים לא נזילים אחרים, נדרשות הערכות שווי תקופתיות. זה משפיע על ערך התיק המוצג למשקיעים, על חישובי יחס בטחונות אם האסימונים משמשים בהלוואות DeFi, ועל דיווח רגולטורי. אנו משתמשים ב-multisig: לפחות 2 מתוך 3 שמאים מוסמכים חייבים להסכים לעדכן את הערכת השווי.
מחסנית טכנית
| רכיב | טכנולוגיה |
|---|---|
| חוזים חכמים | Solidity 0.8.x + Foundry |
| אימות העברה | ERC-1400 / validator מותאם אישית |
| אינטגרציית KYC | Sumsub / Persona + רישום על השרשרת |
| אינדקסר | Goldsky / The Graph |
| אחסון מסמכים משפטיים | IPFS + Filecoin לשימור |
| חזית | React + wagmi + RainbowKit |
| לוח ניהול | Next.js + Prisma + PostgreSQL |
דרישות רגולטוריות לפי תחום שיפוט
| תחום שיפוט | משטר | הגבלות |
|---|---|---|
| ארה"ב | Reg D / Reg A+ | משקיעים מוסמכים (Reg D) או רישום מלא (Reg A+) |
| האיחוד האירופי | MiCA + MiFID II | אסימוני ניירות ערך לפי MiFID II, דורש ברוקר מורשה |
| בריטניה | מוסדר על ידי FCA | השקעה מוגבלת לקמעונאים |
| סינגפור | רישיון MAS CMS | אחד המשטרים המתקדמים ביותר |
| איי קיימן | משטר קל | פופולרי עבור SPVs, אך משקיעים אמריקאים/אירופאים נשארים כפופים לחוקים שלהם |
מה כלול בעבודה שלנו
- תיעוד משפטי: מבנה SPV/נאמנות/DAO LLC, הסכמים עם מנהל הנכס, תשקיף.
- חוזים חכמים: רישום נכסים, אסימון חלקי (ERC-1400/ERC-20), כספת חלוקה, validator העברה.
- צינור KYC/AML: אינטגרציה של שירות אימות, רישום על השרשרת, בדיקות ציות.
- פורטל משקיעים: לוח מחוונים לצפייה בתיק, תביעות הכנסה, מסחר בשוק משני.
- לוח ניהול: ניהול נכסים, הערכת שווי, חלוקת הכנסות.
- ביקורת אבטחה: 4–6 שבועות, מספר חברות ביקורת.
- תמיכה לאחר השקה: ניטור, עדכונים, שיפורים.
ציר זמן
| שלב | תוכן | משך |
|---|---|---|
| מבנה משפטי | ארכיטקטורת SPV, תחום שיפוט, מסגרת ציות | 4–6 שבועות |
| חוזים חכמים | רישום, אסימון, חלוקה, validator | 6–8 שבועות |
| צינור KYC/AML | אינטגרציה + רישום על השרשרת | 3–4 שבועות |
| פורטל משקיעים | תיק, תביעות, שוק משני | 6–8 שבועות |
| ניהול ומנהל נכסים | אונבורדינג, הערכת שווי, חלוקת הכנסות | 4–5 שבועות |
| ביקורת אבטחה | 4–6 שבועות | |
| בחינה רגולטורית + השקה | 4–6 שבועות |
זמן ריאלי עד לנכס הממותג הראשון בפלטפורמה: 9–14 חודשים. רוב העיכובים מגיעים לא מפיתוח אלא מבדיקת נאותות משפטית, אישור רגולטורי ועבודה עם נאמנים.
יש לנו ניסיון של 5+ שנים בפתרונות אסימוני ניירות ערך ו-DeFi. החוזים החכמים שלנו ניהלו למעלה מ-50 מיליון דולר בנכסים. נבחן את הפרויקט שלך תוך יומיים — צור קשר לייעוץ מקדים.







