פיתוח מערכת תוכן ממותגת

פלטפורמות תוכן גובות עד מחצית מההכנסות של היוצרים, בעוד הקהל נותר צרכן פסיבי בלבד. אנחנו מפתחים מערכות תוכן מבוססות טוקניזציה על בלוקצ'יין, והופכים מאמרים, סרטונים וקטעי מוזיקה לנכסים דיגיטליים עם זכויות בעלות ותמלוגים. הצוות שלנו מספק את הפרויקט במפתח מלא—מארכיטקטורת חוזים חכמים ועד ליישום ותמיכה שוטפת.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1481
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1335
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1034
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1293
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    738
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1031

1. הבעיה

יוצרים מפרסמים תוכן, אבל הפלטפורמות לוקחות 30–50% מההכנסות. הקהל לא משתתף בהצלחה—רק צורך. תוכן מתוקנן (Tokenized) שובר את המודל הזה: כל אלמנט (מאמר, וידאו, רצועת מוזיקה) הופך לנכס שניתן להחזיק בו, לסחור בו, ולהרוויח ממנו תמלוגים. שוק ה-NFT גדל פי כמה, ומטבעות יוצרים הפכו לכלי למונטיזציה של מנויים ומימון המונים. פלטפורמות כמו Mirror, Lens Protocol ו-Platformed משתמשות בהצלחה בתיקנון כדי לבנות כלכלות סביב תוכן. עם זאת, רוב הפתרונות נשארים סגורים או יקרים להתאמה אישית. אנו בונים מערכות כאלה על Solidity 0.8.x ו-Ethereum L2 (Arbitrum, Polygon, Optimism)—מאפס ועד ייצור. הצוות שלנו סיפק 30+ פרויקטים ב-DeFi ו-NFT, כך שאנו מבטיחים אמינות חוזים חכמים וגז אופטימלי. צרו קשר לייעוץ חינם—נדון בארכיטקטורת המערכת שלכם.

2. מודלים של תוכן מתוקנן

איסוף NFT (מודל Lens Protocol)

כל פרסום הוא NFT ייחודי שניתן לאסוף (לקנות). היוצר קובע מגבלה (למשל, רק 100 עותקים) ומחיר. קונים מוקדמים מקבלים סטטוס תומך מוקדם ופוטנציאל רווח במכירה חוזרת.

בעלות חלקית על תוכן

תוכן (מאמר, רצועת מוזיקה, וידאו) מיוצג כ-NFT, והזכות לחלק מההכנסות שלו מחולקת לשברים של ERC-20. על ידי קניית טוקנים, אתה מקבל חלק מהתמלוגים.

טוקנים עם עקומת קשר (Bonding Curve)

לכל תוכן יש טוקן משלו על עקומת קשר. המחיר עולה אוטומטית עם הביקוש—קונים מוקדמים מרוויחים. הארכיטקטורה שלנו המבוססת על ERC-721 ועקומת קשר מפחיתה גז פי 3 בהשוואה למטבע NFT רגיל.

טוקני מנוי (מטבעות יוצרים)

טוקן המעניק גישה לתוכן של היוצר לתקופה (חודש, שנה). ERC-20 עם לוגיקת תפוגה או NFT עם מאפיינים מבוססי זמן.

מודל נזילות תמלוגים ליוצר מורכבות יישום
איסוף NFT גבוהה (שוק משני) עד 20% (ERC-2981) נמוכה
בעלות חלקית בינונית (DEX) פרופורציונלי לחלק בינונית
עקומת קשר גבוהה (אוטומטית) עמלה של 5-10% גבוהה
מטבעות מנוי נמוכה (עמית-לעמית) מנוי קבוע בינונית

3. בחירת רשת L2 לתיקנון

בחירת L2 משפיעה על עמלות ומהירות. לאיסוף בנפח גבוה, אנו ממליצים על Arbitrum או Base. Base מציעה עלות גז נמוכה ביותר—זולה פי 2 מ-Optimism, וזמן הסופיות של Arbitrum מהיר פי 3 מ-Polygon.

L2 TPS (בערך) עלות גז ממוצעת זמן סופיות
Arbitrum One 40,000 $0.01–$0.05 ~1 דקה
Polygon PoS 7,000 $0.001–$0.01 ~5 דקות
Optimism 35,000 $0.02–$0.10 ~3 דקות
Base 50,000 $0.01–$0.04 ~2 דקות

4. איך איסוף עם תמלוגים עובד

החוזה החכם TokenizedContent מנהל יצירת תוכן, איסוף ותשלומי תמלוגים. הוא משתמש בתקן ERC-2981 לניכויים אוטומטיים במכירה חוזרת.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/interfaces/IERC2981.sol";

contract TokenizedContent is ERC721, IERC2981 {
    struct ContentItem {
        address creator;
        string contentURI; // IPFS CID
        uint256 price; // в wei
        uint256 maxSupply; // 0 = unlimited
        uint256 currentSupply;
        uint256 royaltyPercent; // basis points
        bool paywalled; // требует ли collect для просмотра
        ContentType contentType;
    }

    enum ContentType {
        ARTICLE,
        IMAGE,
        VIDEO,
        MUSIC,
        EBOOK,
        NEWSLETTER
    }

    mapping(uint256 => ContentItem) public contentItems;
    mapping(uint256 => mapping(address => bool)) public hasCollected;
    uint256 public platformFee = 250; // 2.5%
    address public platform;

    // Создание контента с параметрами монетизации
    function publishContent(
        string calldata contentURI,
        uint256 price,
        uint256 maxSupply,
        uint256 royaltyPercent,
        bool paywalled,
        ContentType contentType
    ) external returns (uint256 contentId) {
        require(royaltyPercent <= 2000, "Royalty too high"); // max 20%
        contentId = ++_contentCounter;
        contentItems[contentId] = ContentItem({
            creator: msg.sender,
            contentURI: contentURI,
            price: price,
            maxSupply: maxSupply,
            currentSupply: 0,
            royaltyPercent: royaltyPercent,
            paywalled: paywalled,
            contentType: contentType
        });
        emit ContentPublished(contentId, msg.sender, contentURI, price, contentType);
    }

    // Collect (покупка) контента
    function collect(uint256 contentId) external payable returns (uint256 tokenId) {
        ContentItem storage item = contentItems[contentId];
        require(item.creator != address(0), "Content not found");
        require(msg.value == item.price, "Wrong price");
        require(
            item.maxSupply == 0 || item.currentSupply < item.maxSupply,
            "Max supply reached"
        );
        item.currentSupply++;

        // Распределение платежа
        uint256 fee = (msg.value * platformFee) / 10000;
        uint256 creatorProceeds = msg.value - fee;
        payable(platform).transfer(fee);
        payable(item.creator).transfer(creatorProceeds);

        // Минт NFT collect токена
        tokenId = ++_tokenCounter;
        _mint(msg.sender, tokenId);
        hasCollected[contentId][msg.sender] = true;
        // Маппинг tokenId → contentId
        tokenToContent[tokenId] = contentId;
        emit Collected(contentId, tokenId, msg.sender, msg.value);
    }

    // ERC-2981 royalties для secondary market
    function royaltyInfo(uint256 tokenId, uint256 salePrice) external view override returns (address receiver, uint256 royaltyAmount) {
        uint256 contentId = tokenToContent[tokenId];
        ContentItem storage item = contentItems[contentId];
        receiver = item.creator;
        royaltyAmount = (salePrice * item.royaltyPercent) / 10000;
    }

    // Доступ к paywalled контенту
    function canAccessContent(uint256 contentId, address user) external view returns (bool) {
        ContentItem storage item = contentItems[contentId];
        if (!item.paywalled) return true;
        if (item.creator == user) return true;
        if (hasCollected[contentId][user]) return true;
        return false;
    }
}

5. למה עקומת קשר מועילה ליוצרים

עקומת קשר יוצרת אוטומטית נזילות לטוקן ללא בריכה חיצונית. המחיר עולה עם הביקוש—זה מתמרץ קונים מוקדמים ונותן ליוצר הכנסה מיידית מכל רכישה.

contract CreatorCoin is ERC20 {
    // Bonding curve: price = reserveRatio * totalSupply / reserveBalance
    uint256 public reserveBalance;
    uint256 public reserveRatio = 500000; // 50% (в ppm, 1_000_000 = 100%)
    address public creator;
    uint256 public creatorFee = 500; // 5%

    function buy(uint256 minReturn) external payable returns (uint256 tokensReturned) {
        tokensReturned = calculatePurchaseReturn(
            totalSupply(),
            reserveBalance,
            uint32(reserveRatio),
            msg.value
        );
        require(tokensReturned >= minReturn, "Slippage exceeded");
        uint256 fee = (msg.value * creatorFee) / 10000;
        reserveBalance += msg.value - fee;
        payable(creator).transfer(fee);
        _mint(msg.sender, tokensReturned);
        emit Buy(msg.sender, msg.value, tokensReturned);
    }

    function sell(uint256 amount, uint256 minReturn) external returns (uint256 ethReturned) {
        ethReturned = calculateSaleReturn(
            totalSupply(),
            reserveBalance,
            uint32(reserveRatio),
            amount
        );
        require(ethReturned >= minReturn, "Slippage exceeded");
        _burn(msg.sender, amount);
        reserveBalance -= ethReturned;
        payable(msg.sender).transfer(ethReturned);
        emit Sell(msg.sender, amount, ethReturned);
    }
}

6. גישת טוקן ואנליטיקה ליוצרים

אנו מיישמים בדיקות גישה בקצה האחורי: התוכן חסום עד שהמשתמש מאשר בעלות על NFT או יתרת מטבע יוצר מספקת.

// Backend: проверка доступа к контенту
async function checkContentAccess(
  userAddress: string,
  contentId: string
): Promise<{ hasAccess: boolean; reason?: string }> {
  const content = await db.getContent(contentId);
  if (!content.isTokenGated) return { hasAccess: true };

  // Проверяем владение NFT
  if (content.requiredNFT) {
    const balance = await nftContract.balanceOf(userAddress);
    if (balance > 0n) return { hasAccess: true };
  }

  // Проверяем creator coin holdings
  if (content.requiredCreatorCoinAmount) {
    const coinBalance = await creatorCoinContract.balanceOf(userAddress);
    if (coinBalance >= content.requiredCreatorCoinAmount) {
      return { hasAccess: true };
    }
    return {
      hasAccess: false,
      reason: `Hold ${formatUnits(content.requiredCreatorCoinAmount, 18)} $CREATOR to access`,
    };
  }

  // Проверяем collect
  const hasCollected = await contentContract.hasCollected(contentId, userAddress);
  if (hasCollected) return { hasAccess: true };

  return { hasAccess: false, reason: "Collect to access" };
}
interface CreatorDashboard {
  totalEarned: bigint; // всего заработано
  totalCollects: number; // сколько раз собрали
  uniqueCollectors: number; // уникальных коллекторов
  topContent: Array<{
    contentId: string;
    title: string;
    collects: number;
    earned: bigint;
  }>;
  revenueByDay: Array<{
    date: string;
    revenue: bigint
  }>;
  secondarySalesRoyalties: bigint; // доход от вторичных продаж
}

7. מה כלול בפיתוח

  • קוד מקור לחוזים חכמים תחת רישיון MIT
  • תיעוד API ומדריך פריסה
  • ממשק ליצירת תוכן ולוח מחוונים לאנליטיקה
  • הדרכת צוות (2 מפגשים)
  • אחריות ל-12 חודשים על החוזים

8. תהליך ולוחות זמנים

  1. ניתוח: איסוף דרישות, בחירת מודל (איסוף, עקומת קשר, מנוי).
  2. עיצוב: ארכיטקטורת חוזה, ממשקים, טוקנומיקה.
  3. יישום: כתיבה ובדיקת חוזים חכמים (Foundry/Hardhat), קצה אחורי לגישה.
  4. ביקורת: סקירת חוזה עם Slither, Mythril וסקירת קוד ידנית.
  5. פריסה: פריסה על L2 שנבחר, הגדרת IPFS/Arweave, אינטגרציה עם הקצה הקדמי.
  6. תמיכה: ניטור, עדכונים, סיוע שיווקי.

לוח זמנים לפיתוח: מערכת בסיסית (איסוף + חומת תשלום + לוח מחוונים) לוקחת מכמה שבועות עד חודש וחצי. הוספת מטבעות יוצרים עם עקומת קשר מוסיפה עוד כמה שבועות. התזמון המדויק תלוי במורכבות הטוקנומיקה וב-L2 שנבחר. קבלו ייעוץ מהנדס—נדון בארכיטקטורה ונחשב את העלות.