מוצר פיזי עם קוד QR "מאומת בלוקצ'יין" הוא שיווק, לא אבטחה. הבעיה האמיתית היא ש-NFT מאחסן קישור למשהו, אבל לא את הדבר עצמו. זיוף פריט פיזי והדבקת קוד ה-QR מהמקור על עותק הוא טריוויאלי אם המערכת לא פותרת את הקישור הקריפטוגרפי של האובייקט הפיזי לאסימון הדיגיטלי. אנו מפתחים מערכות כאלה במפתח פתוח — עם שבבי NFC, רישום on-chain, ואימות ללא גז. יש לנו ניסיון של 5+ שנים בפיתוח בלוקצ'יין ומעל 20 פרויקטים באימות NFT. שבבי NFC עם ECC אמינים פי 1000 מקודי QR פשוטים ללא קריפטוגרפיה.
כיצד להבטיח קישור קריפטוגרפי של אובייקט פיזי ל-NFT?
שבבי NFC עם קריפטוגרפיה
הגישה האמינה ביותר למוצרים פיזיים היא שבבי NFC עם תמיכה בחתימת ECC (NTAG 424 DNA מ-NXP או Kong Halo דומה). השבב מכיל מפתח פרטי שלא ניתן לחלץ פיזית מהמכשיר. בעת סריקה, השבב חותם על challenge-response עם המפתח הפרטי.
תוכנית אימות:
- במהלך הייצור, השבב יוצר זוג מפתחות. המפתח הציבורי נכתב למטא-דאטה של ה-NFT ולחוזה האימות.
- לאימות, המשתמש סורק NFC → השבב חותם על
keccak256(randomChallenge || timestamp)→ החתימה נשלחת לשרת האחורי או ישירות לחוזה. - החוזה מאמת את החתימה דרך
ecrecover— אםrecovered_address == chip_public_keyו-chip_public_keyרשום כשייך ל-tokenId מסוים — המוצר אותנטי.
function verifyChip(
uint256 tokenId,
bytes32 challenge,
bytes memory signature
) external view returns (bool) {
address chipAddress = _chipAddresses[tokenId];
require(chipAddress != address(0), "Token not registered");
bytes32 messageHash = keccak256(
abi.encodePacked("\x19Ethereum Signed Message:\n32", challenge)
);
address recovered = ECDSA.recover(messageHash, signature);
return recovered == chipAddress;
}פרוטוקול Kong (ERC-7015 / Kong Halo) מתקן את התוכנית המדויקת הזו. למוצרי יוקרה, שעונים, סניקרס — זהו פתרון מוכן לייצור.
קוד QR ללא קריפטוגרפיה פיזית
אם NFC אינו מתאים (מסמכי נייר, אריזות), משתמשים בתוכנית אחרת. היצרן יוצר זוג function verifyChip( uint256 tokenId, bytes32 challenge, bytes memory signature ) external view returns (bool) { address chipAddress = _chipAddresses[tokenId]; require(chipAddress != address(0), "Token not registered"); bytes32 messageHash = keccak256( abi.encodePacked("\x19Ethereum Signed Message:\n32", challenge) ); address recovered = ECDSA.recover(messageHash, signature); return recovered == chipAddress; } — publicId מוטמע בקוד ה-QR ומאוחסן ב-NFT, secretKey מודפס בתוך האריזה תחת שכבת הגנה. במהלך האימות, המשתמש פותח את האריזה, מזין את ה-secretKey — השרת האחורי בודק ש-(publicId, secretKey).
זוהי תוכנית חד-פעמית: לאחר האימות הראשון, הסוד נחשף. לאימותים חוזרים, יש צורך במנגנון אחר. מתאים לפריטי אספנות, אלכוהול, תרופות.
מדוע רישום אותנטיות on-chain חשוב?
מבנה החוזה
הרישום מאחסן מיפוי keccak256(secretKey) == storedHash:
struct AuthRecord {
address chipAddress; // публичный ключ NFC чипа или нулевой адрес
bytes32 secretHash; // keccak256 от secret для QR схемы
uint256 mintedAt; // timestamp создания
uint256 verificationCount; // сколько раз верифицировали
bool activated; // активирован ли (для одноразовых)
string productSku; // SKU производителя
}
mapping(uint256 => AuthRecord) private _authRecords;tokenId → AuthRecord — אנליטיקה שימושית. מוצר שאומת 500 פעמים הוא או פופולרי מאוד או שמישהו מנסה לפרוץ. התראה על סף בשרת האחורי לספירות אימות חריגות.
סטטוסים במחזור החיים
לתרחישים מורכבים יותר, מתווסף סטטוס:
| סטטוס | תיאור |
|---|---|
struct AuthRecord { address chipAddress; // публичный ключ NFC чипа или нулевой адрес bytes32 secretHash; // keccak256 от secret для QR схемы uint256 mintedAt; // timestamp создания uint256 verificationCount; // сколько раз верифицировали bool activated; // активирован ли (для одноразовых) string productSku; // SKU производителя } mapping(uint256 => AuthRecord) private _authRecords; |
האסימון נוצר, המוצר לא הופעל |
verificationCount |
המוצר נפתח/הופעל על ידי הבעלים הראשון |
MINTED |
האסימון הועבר, היסטוריית ההעברות נשמרת |
ACTIVATED |
סומן כזיוף אפשרי |
TRANSFERRED |
המוצר הושמד או הושלך |
היסטוריית ההעברות שקופה דרך אירועי FLAGGED סטנדרטיים של ERC-721 — אין צורך באחסון נפרד.
כיצד ליישם אימות ללא גז עבור המשתמש?
אימות לא צריך לדרוש גז מהמשתמש — זהו חסם לאימוץ. שתי גישות:
Off-chain עם הוכחה on-chain. השרת האחורי מבצע BURNED לחוזה האימות (חינם), מחזיר את התוצאה למשתמש. מקור האמת הוא הבלוקצ'יין, אך לא משולם גז.
אימות ללא גז דרך חתימה. המשתמש חותם על בקשת אימות (EIP-712), השרת האחורי בודק את חתימת השבב ואת חתימת המשתמש, רושם את אירוע האימות ביומן off-chain (עם הוכחה קריפטוגרפית). לאימותים קריטיים (ביטוח, משפטי) — רישום תקופתי on-chain של שורש Merkle מאימותים בקבוצה.
אינטגרציה עם שווקים ותפקידי גישה
ERC-721 סטנדרטי + מטא-דאטה נוסף. ב-JSON של Transfer, הוסף שדות:
{
"name": "Product #12345",
"attributes": [
{"trait_type": "Authenticity", "value": "Verified"},
{"trait_type": "Manufacturer", "value": "Brand XYZ"},
{"trait_type": "SKU", "value": "PROD-001"},
{"trait_type": "Chip Type", "value": "NXP NTAG 424 DNA"}
],
"verification_contract": "0x...",
"chip_public_key": "0x..."
}OpenSea ושווקים אחרים מציגים את המאפיינים הללו. קונה בשוק המשני יכול לאמת את המוצר לפני הרכישה.
החוזה משתמש ב-OpenZeppelin AccessControl:
-
eth_call— זכות להנפיק אסימונים חדשים ולרשום שבבים -
tokenURI— זכות לרשום תוצאות אימות on-chain (ללקוחות ארגוניים) -
{ "name": "Product #12345", "attributes": [ {"trait_type": "Authenticity", "value": "Verified"}, {"trait_type": "Manufacturer", "value": "Brand XYZ"}, {"trait_type": "SKU", "value": "PROD-001"}, {"trait_type": "Chip Type", "value": "NXP NTAG 424 DNA"} ], "verification_contract": "0x...", "chip_public_key": "0x..." }— זכות לסמן אסימונים כמעורערים (שירות אנטי-זיוף של המותג) -
MANUFACTURER_ROLE— ניהול תפקידים
היצרן יכול להאציל למפיצים מורשים את הזכות לרשום מוצרים בפלח שלהם.
מה כלול בעבודה
| שלב | תוצאה |
|---|---|
| ניתוח ועיצוב | מפרט תוכנית הקישור, בחירת שבב, ארכיטקטורת חוזה |
| פיתוח חוזה חכם | ERC-721 + חוזה אימות, מודל תפקידים, בדיקות (Foundry) |
| שרת אחורי ו-API | Node.js + viem, נקודת קצה לאימות, לוח מחוונים אנליטי |
| SDK למובייל | React Native או Flutter — סריקת NFC/QR, קריאות API |
| אינטגרציה עם שווקים | מטא-דאטה מותאם, בדיקת תצוגה |
| ביקורת ותיעוד | תיאורי חוזה, הוראות ליצרן |
לוחות זמנים ועלות משוערים
מערכת עם קודי QR ורישום on-chain ללא NFC — משבוע אחד. עם תמיכה בשבבי NFC (Kong/NTAG 424 DNA), מודל תפקידים, SDK למובייל לסריקה, ולוח מחוונים אנליטי — משבועיים עד שלושה. העלות מחושבת באופן אישי לפי היקף העבודה.
צור קשר כדי לדון בפרויקט שלך. הזמן פיתוח מערכת אימות — קבל ייעוץ על ארכיטקטורה ולוחות זמנים.







