אובדן תמלוגים ב-Blur — בעיה המוכרת לבעלי אוספי NFT. אכיפת תמלוגי NFT ב-Blur אפשרית רק דרך OperatorFilterRegistry. בלעדיו, אפילו תקן ERC-2981 אינו מבטיח תשלומים. אנו מגדירים הגנה תוך שעה, ומשקמים את ההכנסה ממכירות משניות. בהתבסס על ניסיון עם יותר מ-50 אוספים, הכנו מדריך שלב-אחר-שלב.
Blur מאשרת רשמית אכיפת תמלוגים חובה עבור חוזים הרשומים ב-OperatorFilterRegistry. הבעיה היא שרוב המפתחים מסתמכים אך ורק על ERC-2981, וסומכים על יושרת השוק. אבל Blur אינה בודקת ERC-2981 ללא הפילטר הנוסף. OperatorFilterRegistry פותר זאת: חוזה עם ה-modifier onlyAllowedOperator חוסם העברות דרך פלטפורמות לא מורשות.
כיצד פועלת אכיפת תמלוגים ב-Blur?
אכיפה חובה מתבססת על שני מנגנונים: יישום תקן ERC-2981 ורישום ב-OperatorFilterRegistry. תקן ERC-2981 מגדיר תמלוגים על-השרשרת, בעוד שה-OperatorFilter אוכף אותם ב-Blur. עבור חוזים שכבר נפרסו ללא תמיכה ב-ERC-2981, השתמשו ב-Manifold Royalty Registry — פתרון רטרואקטיבי ללא שינויי קוד.
ERC-2981: תמלוגים על-השרשרת
ERC-2981 הוא תקן מינימלי: החוזה מיישם את royaltyInfo(tokenId, salePrice), ומחזיר את הנמען והסכום. אם חוזה כבר נפרס ללא ERC-2981, הוספתו לחוזה בלתי-ניתן לשינוי היא בלתי אפשרית. אפשרויות: פריסת חוזה חדש עם מיגרציה או רישום תמלוגים דרך רגיסטרים מחוץ-לשרשרת (Manifold).
Manifold Royalty Registry הוא פתרון אוניברסלי: הבעלים של החוזה הישן רושם את הנמען והאחוז ללא שינויי קוד. נתמך על ידי Blur, OpenSea, Rarible. עבור חוזים חדשים, השתמשו ב-ERC2981 מ-OpenZeppelin עם _setDefaultRoyalty(receiver, feeNumerator) בקונסטרוקטור. feeNumerator מתוך 10000: 500 = 5%.
מדוע OperatorFilter מבטיח תשלומים?
Blur דורשת רישום ב-OperatorFilterRegistry עבור תמלוגים מחויבים. חוזה המשתמש ב-OperatorFilterer של OpenZeppelin עוקף את פונקציות ההעברה עם ה-modifier onlyAllowedOperator. מנגנון זה חוסם מסחר דרך שווקים לא מורשים שאינם מכבדים תמלוגים. עבור חוזים שכבר נפרסו ללא שדרוג, אכיפה מחויבת היא בלתי אפשרית — רק ERC-2981 דרך Manifold כמיטב המאמץ.
| שיטה | ניתן לאכיפה | מורכבות יישום | רטרואקטיבי |
|---|---|---|---|
| ERC-2981 | לא (ב-Blur) | נמוכה (1-2 ימים) | לא |
| OperatorFilter | כן | בינונית (2-4 שעות) | לא |
| Manifold Registry | חלקית | נמוכה (שעה) | כן |
OperatorFilter אוכף תמלוגים ב-100% מהמקרים ב-Blur, בעוד ש-ERC-2981 ללא הפילטר נותן 0% ערובה. זהו הבדל מפתח — בחירה ב-OperatorFilter יעילה פי 3 להגנה על הכנסות. תמלוגים אבודים יכולים להגיע לסכומים משמעותיים חודשית; ההתקנה מחזירה את עצמה במהירות.
דוגמת קוד: שילוב DefaultOperatorFilterer
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/common/ERC2981.sol";
import "operator-filter-registry/src/DefaultOperatorFilterer.sol";
contract MyNFT is ERC721, ERC2981, DefaultOperatorFilterer, Ownable {
constructor() ERC721("MyNFT", "MNFT") {
_setDefaultRoyalty(msg.sender, 500); // 5%
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId,
uint256 batchSize
) internal override(ERC721, OperatorFilterer) {
super._beforeTokenTransfer(from, to, tokenId, batchSize);
}
function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC2981) returns (bool) {
return super.supportsInterface(bytes4 interfaceId);
}
} מה אם החוזה שלך כבר נפרס?
אם החוזה בלתי-ניתן לשינוי ואינו תומך ב-ERC-2981, השתמשו ב-Manifold Royalty Registry. זהו רגיסטר מחוץ-לשרשרת: אתם רושמים את הנמען והאחוז, ו-Blur ושווקים אחרים קוראים נתונים משם. התהליך אורך 1-2 שעות ואינו דורש פריסה מחדש. עם זאת, הוא אינו נותן אכיפה של 100% — חלק מהשווקים עשויים להתעלם מהרגיסטר.
תהליך ההתקנה
- ניתוח חוזה (1-2 שעות). בדיקת ERC-2981, OperatorFilter, יכולת שדרוג.
- בחירת שיטה. אם חוזה חדש — שילוב OperatorFilter + ERC-2981. אם קיים — Manifold או מיגרציה.
- יישום. עבור חדש — הוספת
import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; import "@openzeppelin/contracts/token/common/ERC2981.sol"; import "operator-filter-registry/src/DefaultOperatorFilterer.sol"; contract MyNFT is ERC721, ERC2981, DefaultOperatorFilterer, Ownable { constructor() ERC721("MyNFT", "MNFT") { _setDefaultRoyalty(msg.sender, 500); // 5% } function _beforeTokenTransfer( address from, address to, uint256 tokenId, uint256 batchSize ) internal override(ERC721, OperatorFilterer) { super._beforeTokenTransfer(from, to, tokenId, batchSize); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC2981) returns (bool) { return super.supportsInterface(bytes4 interfaceId); } }ו-DefaultOperatorFilterer. עבור קיים — קריאה ל-ERC2981דרך Manifold. - בדיקות על testnet. אימות תמלוגים תקינים ב-Blur דרך מכירת מבחן. השתמשו ב-Sepolia.
- אימות. לאחר הפריסה, ודאו שהאוסף מציג את אחוז התמלוגים בעמוד השוק.
בדיקות על testnet: פונקציית setRoyalties() עבור tokenIds שונים, העברות דרך כתובות לא מורשות (אמורות להידחות עם שגיאת royaltyInfo), הצגת תמלוגים בממשק ה-testnet של Blur. השתמשו ב-Tenderly לסימולציית עסקאות וב-Slither לניתוח סטטי.
השוואת תמיכת תמלוגים בין שווקים
| שוק | תמלוגים מחויבים דרך OperatorFilter | מכבד ERC-2981 ללא פילטר |
|---|---|---|
| Blur | כן | לא |
| OpenSea | כן | כן |
| X2Y2 | כן | לא |
| LooksRare | כן | כן |
מה כלול בעבודה
- ביקורת על החוזה החכם הנוכחי: בדיקת תקנים, יכולת שדרוג, קוד.
- המלצות לשיטת יישום התמלוגים האופטימלית.
- כתיבה ושילוב קוד (OperatorFilter, ERC-2981, Manifold).
- בדיקות על testnet (Sepolia, Goerli).
- תיעוד והדרכת צוות.
אנו עובדים עם פרויקטי blockchain למעלה מ-5 שנים, יישמנו יותר מ-50 אוספי NFT על Ethereum, Polygon ו-BNB Chain. אנו מבטיחים פעולת תמלוגים תקינה בכל השווקים הנתמכים. לכל המהנדסים יש הסמכות Solidity והם עברו ביקורות פנימיות. צרו קשר להערכת פרויקט — נמצא את הפתרון האופטימלי תוך שעה. הזמינו התקנה היום והגנו על הכנסות האוסף שלכם.







